When an optical photon impiges on a surface perpendicularly, the polarization is not properly updated. I've included below an example. This is a run with 2 events. In the second event, the new polarization is equal to the new polarization of the fisrt event. In my case, sint1=0 sint2=0 cost1=1 Rindex1=2.15 and Rindex2=1.0 (in G4OpBoundaryProcess.cc). It is obvious in this case that the polarization is not updated and therefore uses the one calculated in the previous event (in G4OpBoundaryProcess::DielectricDielectric(), line 557 to 581) ******************************************************************************* ************************** * G4Track Information: Particle = opticalphoton, Track ID = 1, Parent ID = 0 ******************************************************************************* ************************** Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -12 -6 1 2.58e-06 0 0 0 Crystal7 initStep 1 -8 -6 1 2.58e-06 0 4 4 Crystal8 Transportation 2 0 -6 1 2.58e-06 0 8 12 Crystal9 Transportation 3 8 -6 1 2.58e-06 0 8 20 Crystal10 Transportation 4 16 -6 1 2.58e-06 0 8 28 Crystal11 Transportation Photon at Boundary! Old Momentum Direction: (1,0,0) Old Polarization: (0,-0.782519,0.622627) New Momentum Direction: (1,0,0) New Polarization: (0,-0.782519,0.622627) *** FresnelRefraction *** 5 24 -6 1 2.58e-06 0 8 36 World Transportation 6 1e+03 -6 1 2.58e-06 0 976 1.01e+03 OutOfWorld Transportation ******************************************************************************* ************************** * G4Track Information: Particle = opticalphoton, Track ID = 1, Parent ID = 0 ******************************************************************************* ************************** Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -12 -6 1 2.58e-06 0 0 0 Crystal7 initStep 1 -8 -6 1 2.58e-06 0 4 4 Crystal8 Transportation 2 0 -6 1 2.58e-06 0 8 12 Crystal9 Transportation 3 8 -6 1 2.58e-06 0 8 20 Crystal10 Transportation 4 16 -6 1 2.58e-06 0 8 28 Crystal11 Transportation Photon at Boundary! Old Momentum Direction: (1,0,0) Old Polarization: (0,0.770191,0.637814) New Momentum Direction: (-1,0,0) New Polarization: (0,-0.782519,0.622627) *** FresnelReflection *** 5 24 -6 1 2.58e-06 0 8 36 World Transportation 6 24 -6 1 2.58e-06 0 0 36 Crystal11 Transportation 7 16 -6 1 2.58e-06 0 8 44 Crystal10 Transportation 8 8 -6 1 2.58e-06 0 8 52 Crystal9 Transportation 9 0 -6 1 2.58e-06 0 8 60 Crystal8 Transportation 10 -8 -6 1 2.58e-06 0 8 68 Crystal7 Transportation 11 -16 -6 1 2.58e-06 0 8 76 Crystal6 Transportation Photon at Boundary! Old Momentum Direction: (-1,0,0) Old Polarization: (0,-0.782519,0.622627) New Momentum Direction: (-1,0,0) New Polarization: (0,-0.782519,0.622627) *** FresnelRefraction *** 12 -24 -6 1 2.58e-06 0 8 84 World Transportation 13 -1e+03 -6 1 2.58e-06 0 976 1.06e+03 OutOfWorld Transportation
Peter, can you please have a look at this ? Many greetings, Hans-Peter.
Thanks for pointing out the problem with the polarization for perpendicular rays. With the release of Geant4.5.0, the polarization phase change in all situations not involving perpendicular rays should now be correctly simulated (Fresnel refraction/reflection for both cases n2>n1 and n1>n2). The special situation of perpendicular incidence is dealt with separately in the code. This portion was also copied from the original GEANT3 implementation, which, as you have pointed out, fails to account for the case n1>n2. Since the polarization was calculated incorrectly until recently in all cases (ported errors from G3!), I am suspicious that the perpendicular case is correct even for reflections when n2>n1. This warrants careful investigation. The phase must not jump abruptly as the angle -> zero. I'll keep you posted.
fix is tagged as "op-V05-00-00"