I made hex solid using G4Polyhedra inside world volume. I gave the refractive indexes for these and generated optical photons from outside of this solid toward the hex solid. Without rotation of the solid, angle of refraction for both entering and exiting from this solid are proper. However after rotation, while angle for entering is proper, exiting angle is always improper. I found that ExitNormal for this G4Polyhedra is improper. It looks that validExitNormal for this hex solid is always false, and calculation of ExitNormal is done in G4Navigator::ComputeStep at following part, if(fValidExitNormal) { // Convention: fExitNormal is in the 'grand-mother' coordinate system // fGrandMotherExitNormal= fExitNormal; } else { // We must calculate the normal anyway (in order to have it if requested) // G4ThreeVector finalLocalPoint = fLastLocatedPointLocal + localDirection*Step; // Now fGrandMotherExitNormal is in the 'grand-mother' coordinate system // fGrandMotherExitNormal = motherLogical->GetSolid()->SurfaceNormal(finalLocalPoint); const G4RotationMatrix* mRot = motherPhysical->GetRotation(); if( mRot ) { fGrandMotherExitNormal *= (*mRot); } } } Isn't this "fGrandMotherExitNormal *= (*mRot);" wrong? Since motherPhysical->GetRotation() returns rotation for frame, I think "fGrandMotherExitNormal *= mRot -> inverse();" is proper. Thanks, Ko Abe
The problem has been already addressed for #1059 and the fix made available in 9.3-beta release. A future patch to 9.2 will include it as well. *** This problem has been marked as a duplicate of problem 1059 ***