@vyeroshe thank you for the angle of incidence calculation. This is very helpful.
To others using this in the future, please see this topic that clears up some of the subtleties in implementation and differences between what’s returned by G4OpBoundaryProcess::GetIncidentAngle(): https://geant4-forum.web.cern.ch/t/total-internal-reflection-process-not-working-as-expected/5597