116         theReflectivity =  1.;
 
  118         theTransmittance = 0.;
 
  120         theSurfaceRoughness = 0.;
 
  126         PropertyPointer  = NULL;
 
  127         PropertyPointer1 = NULL;
 
  128         PropertyPointer2 = NULL;
 
  133         OpticalSurface = NULL;
 
  139         thePhotonMomentum = 0.;
 
  140         Rindex1 = Rindex2 = 1.;
 
  141         cost1 = cost2 = sint1 = sint2 = 0.;
 
  144         DichroicVector = NULL;
 
  179         const G4Step* pStep = &aStep;
 
  183         if (hStep) pStep = hStep;
 
  221            G4cout << 
" Old Momentum Direction: " << OldMomentum     << 
G4endl;
 
  222            G4cout << 
" Old Polarization:       " << OldPolarization << 
G4endl;
 
  234         std::vector<G4Navigator*>::iterator iNav =
 
  236                                          GetActiveNavigatorsIterator();
 
  238                    (iNav[hNavId])->GetGlobalExitNormal(theGlobalPoint,&valid);
 
  241           theGlobalNormal = -theGlobalNormal;
 
  246           ed << 
" G4OpBoundaryProcess/PostStepDoIt(): " 
  247                  << 
" The Navigator reports that it returned an invalid normal" 
  249           G4Exception(
"G4OpBoundaryProcess::PostStepDoIt", 
"OpBoun01",
 
  251                       "Invalid Surface Normal - Geometry must return valid surface normal");
 
  254         if (OldMomentum * theGlobalNormal > 0.0) {
 
  255 #ifdef G4OPTICAL_DEBUG 
  257            ed << 
" G4OpBoundaryProcess/PostStepDoIt(): " 
  258               << 
" theGlobalNormal points in a wrong direction. " 
  260            ed << 
"    The momentum of the photon arriving at interface (oldMomentum)" 
  261               << 
" must exit the volume cross in the step. " << 
G4endl;
 
  262            ed << 
"  So it MUST have dot < 0 with the normal that Exits the new volume (globalNormal)." << 
G4endl;
 
  263            ed << 
"  >> The dot product of oldMomentum and global Normal is " << OldMomentum*theGlobalNormal << 
G4endl;
 
  264            ed << 
"     Old Momentum  (during step)     = " << OldMomentum << 
G4endl;
 
  265            ed << 
"     Global Normal (Exiting New Vol) = " << theGlobalNormal << 
G4endl;
 
  267            G4Exception(
"G4OpBoundaryProcess::PostStepDoIt", 
"OpBoun02",
 
  270                       "Invalid Surface Normal - Geometry must return valid surface normal pointing in the right direction");
 
  272            theGlobalNormal = -theGlobalNormal;
 
  280         if (aMaterialPropertiesTable) {
 
  281         Rindex = aMaterialPropertiesTable->
GetProperty(
"RINDEX");
 
  292         Rindex1 = Rindex->
Value(thePhotonMomentum);
 
  302         theReflectivity =  1.;
 
  304         theTransmittance = 0.;
 
  306         theSurfaceRoughness = 0.;
 
  314         OpticalSurface = NULL;
 
  320         if (Surface == NULL){
 
  339     if (Surface) OpticalSurface = 
 
  342     if (OpticalSurface) {
 
  344            type      = OpticalSurface->
GetType();
 
  345        theModel  = OpticalSurface->
GetModel();
 
  348        aMaterialPropertiesTable = OpticalSurface->
 
  349                     GetMaterialPropertiesTable();
 
  351            if (aMaterialPropertiesTable) {
 
  355                   Rindex = aMaterialPropertiesTable->
GetProperty(
"RINDEX");
 
  357                      Rindex2 = Rindex->
Value(thePhotonMomentum);
 
  369                       aMaterialPropertiesTable->
GetProperty(
"REFLECTIVITY");
 
  371                       aMaterialPropertiesTable->
GetProperty(
"REALRINDEX");
 
  373                       aMaterialPropertiesTable->
GetProperty(
"IMAGINARYRINDEX");
 
  378               if (PropertyPointer) {
 
  381                           PropertyPointer->
Value(thePhotonMomentum);
 
  383               } 
else if (PropertyPointer1 && PropertyPointer2) {
 
  385                  CalculateReflectivity();
 
  390               aMaterialPropertiesTable->
GetProperty(
"EFFICIENCY");
 
  391               if (PropertyPointer) {
 
  393                       PropertyPointer->
Value(thePhotonMomentum);
 
  397               aMaterialPropertiesTable->
GetProperty(
"TRANSMITTANCE");
 
  398               if (PropertyPointer) {
 
  400                       PropertyPointer->
Value(thePhotonMomentum);
 
  403               if (aMaterialPropertiesTable->
 
  404                                      ConstPropertyExists(
"SURFACEROUGHNESS"))
 
  405                  theSurfaceRoughness = aMaterialPropertiesTable->
 
  406                                          GetConstProperty(
"SURFACEROUGHNESS");
 
  410         aMaterialPropertiesTable->
GetProperty(
"SPECULARLOBECONSTANT");
 
  411             if (PropertyPointer) {
 
  413              PropertyPointer->
Value(thePhotonMomentum);
 
  419         aMaterialPropertiesTable->
GetProperty(
"SPECULARSPIKECONSTANT");
 
  420             if (PropertyPointer) {
 
  422              PropertyPointer->
Value(thePhotonMomentum);
 
  428         aMaterialPropertiesTable->
GetProperty(
"BACKSCATTERCONSTANT");
 
  429             if (PropertyPointer) {
 
  431              PropertyPointer->
Value(thePhotonMomentum);
 
  448           if (Material1 == Material2){
 
  453               aMaterialPropertiesTable =
 
  455               if (aMaterialPropertiesTable)
 
  456                  Rindex = aMaterialPropertiesTable->
GetProperty(
"RINDEX");
 
  458                  Rindex2 = Rindex->
Value(thePhotonMomentum);
 
  482           DielectricDichroic();
 
  489              DielectricDielectric();
 
  493              if ( rand > theReflectivity ) {
 
  494                 if (rand > theReflectivity + theTransmittance) {
 
  498                    NewMomentum = OldMomentum;
 
  499                    NewPolarization = OldPolarization;
 
  511                    DielectricDielectric();
 
  518           G4cerr << 
" Error: G4BoundaryProcess: illegal boundary type " << 
G4endl;
 
  523         NewMomentum = NewMomentum.
unit();
 
  524         NewPolarization = NewPolarization.
unit();
 
  527            G4cout << 
" New Momentum Direction: " << NewMomentum     << 
G4endl;
 
  528            G4cout << 
" New Polarization:       " << NewPolarization << 
G4endl;
 
  529            BoundaryProcessVerbose();
 
  542         if ( theStatus == 
Detection && fInvokeSD ) InvokeSD(pStep);
 
  547 void G4OpBoundaryProcess::BoundaryProcessVerbose()
 const 
  558                 G4cout << 
" *** TotalInternalReflection *** " << 
G4endl;
 
  568                 G4cout << 
" *** PolishedLumirrorAirReflection *** " << 
G4endl;
 
  570                 G4cout << 
" *** PolishedLumirrorGlueReflection *** " << 
G4endl;
 
  574                 G4cout << 
" *** PolishedTeflonAirReflection *** " << 
G4endl;
 
  576                 G4cout << 
" *** PolishedTiOAirReflection *** " << 
G4endl;
 
  578                 G4cout << 
" *** PolishedTyvekAirReflection *** " << 
G4endl;
 
  580                 G4cout << 
" *** PolishedVM2000AirReflection *** " << 
G4endl;
 
  582                 G4cout << 
" *** PolishedVM2000GlueReflection *** " << 
G4endl;
 
  584                 G4cout << 
" *** EtchedLumirrorAirReflection *** " << 
G4endl;
 
  586                 G4cout << 
" *** EtchedLumirrorGlueReflection *** " << 
G4endl;
 
  590                 G4cout << 
" *** EtchedTeflonAirReflection *** " << 
G4endl;
 
  594                 G4cout << 
" *** EtchedTyvekAirReflection *** " << 
G4endl;
 
  596                 G4cout << 
" *** EtchedVM2000AirReflection *** " << 
G4endl;
 
  598                 G4cout << 
" *** EtchedVM2000GlueReflection *** " << 
G4endl;
 
  600                 G4cout << 
" *** GroundLumirrorAirReflection *** " << 
G4endl;
 
  602                 G4cout << 
" *** GroundLumirrorGlueReflection *** " << 
G4endl;
 
  606                 G4cout << 
" *** GroundTeflonAirReflection *** " << 
G4endl;
 
  610                 G4cout << 
" *** GroundTyvekAirReflection *** " << 
G4endl;
 
  612                 G4cout << 
" *** GroundVM2000AirReflection *** " << 
G4endl;
 
  614                 G4cout << 
" *** GroundVM2000GlueReflection *** " << 
G4endl;
 
  632 G4OpBoundaryProcess::GetFacetNormal(
const G4ThreeVector& Momentum,
 
  648        if (OpticalSurface) sigma_alpha = OpticalSurface->
GetSigmaAlpha();
 
  650            if (sigma_alpha == 0.0) 
return FacetNormal = Normal;
 
  654            G4double phi, SinAlpha, CosAlpha, SinPhi, CosPhi, unit_x, unit_y, unit_z;
 
  665           SinAlpha = std::sin(alpha);
 
  666           CosAlpha = std::cos(alpha);
 
  667               SinPhi = std::sin(phi);
 
  668               CosPhi = std::cos(phi);
 
  670               unit_x = SinAlpha * CosPhi;
 
  671               unit_y = SinAlpha * SinPhi;
 
  674           FacetNormal.
setX(unit_x);
 
  675           FacetNormal.
setY(unit_y);
 
  676           FacetNormal.
setZ(unit_z);
 
  682        } 
while (Momentum * FacetNormal >= 0.0);
 
  687        if (OpticalSurface) polish = OpticalSurface->
GetPolish();
 
  697                  } 
while (smear.
mag()>1.0);
 
  698                  smear = (1.-polish) * smear;
 
  699                  FacetNormal = Normal + smear;
 
  701               } 
while (Momentum * FacetNormal >= 0.0);
 
  702               FacetNormal = FacetNormal.
unit();
 
  705               FacetNormal = Normal;
 
  711 void G4OpBoundaryProcess::DielectricMetal()
 
  722            if ( rand > theReflectivity && n == 1 ) {
 
  723               if (rand > theReflectivity + theTransmittance) {
 
  727                 NewMomentum = OldMomentum;
 
  728                 NewPolarization = OldPolarization;
 
  734              if (PropertyPointer1 && PropertyPointer2) {
 
  736                    CalculateReflectivity();
 
  737                    if ( !G4BooleanRand(theReflectivity) ) {
 
  750                 if ( n == 1 ) ChooseReflection();
 
  756                    NewMomentum = -OldMomentum;
 
  757                    NewPolarization = -OldPolarization;
 
  762                      if ( PropertyPointer1 && PropertyPointer2 ){
 
  765                             GetFacetNormal(OldMomentum,theGlobalNormal);
 
  769                    PdotN = OldMomentum * theFacetNormal;
 
  770                    NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal;
 
  771                    EdotN = OldPolarization * theFacetNormal;
 
  774                       A_trans = OldMomentum.
cross(theFacetNormal);
 
  775                       A_trans = A_trans.
unit();
 
  777                       A_trans  = OldPolarization;
 
  779                    A_paral   = NewMomentum.
cross(A_trans);
 
  780                    A_paral   = A_paral.
unit();
 
  784                            -OldPolarization + (2.*EdotN)*theFacetNormal;
 
  786                      NewPolarization = -A_trans;
 
  788                      NewPolarization = -A_paral;
 
  795              OldMomentum = NewMomentum;
 
  796              OldPolarization = NewPolarization;
 
  801     } 
while (NewMomentum * theGlobalNormal < 0.0);
 
  804 void G4OpBoundaryProcess::DielectricLUT()
 
  806         G4int thetaIndex, phiIndex;
 
  807         G4double AngularDistributionValue, thetaRad, phiRad, EdotN;
 
  808         G4ThreeVector PerpendicularVectorTheta, PerpendicularVectorPhi;
 
  820            if ( rand > theReflectivity ) {
 
  821               if (rand > theReflectivity + theTransmittance) {
 
  825                  NewMomentum = OldMomentum;
 
  826                  NewPolarization = OldPolarization;
 
  833                                           OldMomentum.
angle(-theGlobalNormal);
 
  835               G4int angleIncident = 
G4int(std::floor(180/
pi*anglePhotonToNormal+0.5));
 
  840                  thetaIndex = G4RandFlat::shootInt(thetaIndexMax-1);
 
  841                  phiIndex = G4RandFlat::shootInt(phiIndexMax-1);
 
  843                  AngularDistributionValue = OpticalSurface -> 
 
  844                    GetAngularDistributionValue(angleIncident,
 
  848               } 
while ( !G4BooleanRand(AngularDistributionValue) );
 
  850               thetaRad = (-90 + 4*thetaIndex)*
pi/180;
 
  851               phiRad = (-90 + 5*phiIndex)*
pi/180;
 
  853               NewMomentum = -OldMomentum;
 
  855               PerpendicularVectorTheta = NewMomentum.
cross(theGlobalNormal);
 
  856               if (PerpendicularVectorTheta.
mag() < kCarTolerance )
 
  857                           PerpendicularVectorTheta = NewMomentum.
orthogonal();
 
  859                  NewMomentum.
rotate(anglePhotonToNormal-thetaRad,
 
  860                                     PerpendicularVectorTheta);
 
  861               PerpendicularVectorPhi = 
 
  862                                   PerpendicularVectorTheta.
cross(NewMomentum);
 
  863               NewMomentum = NewMomentum.
rotate(-phiRad,PerpendicularVectorPhi);
 
  866               theFacetNormal = (NewMomentum - OldMomentum).unit();
 
  867               EdotN = OldPolarization * theFacetNormal;
 
  868               NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal;
 
  871         } 
while (NewMomentum * theGlobalNormal <= 0.0);
 
  874 void G4OpBoundaryProcess::DielectricDichroic()
 
  877         G4double anglePhotonToNormal = OldMomentum.
angle(-theGlobalNormal);
 
  880         G4double angleIncident = std::floor(180/
pi*anglePhotonToNormal+0.5);
 
  882         if (!DichroicVector) {
 
  887         if (DichroicVector) {
 
  890              DichroicVector->
Value(wavelength/
nm,angleIncident,idx,idy)*
perCent;
 
  898            ed << 
" G4OpBoundaryProcess/DielectricDichroic(): " 
  899               << 
" The dichroic surface has no G4Physics2DVector" 
  901            G4Exception(
"G4OpBoundaryProcess::DielectricDichroic", 
"OpBoun03",
 
  903                        "A dichroic surface must have an associated G4Physics2DVector");
 
  906         if ( !G4BooleanRand(theTransmittance) ) { 
 
  915                  NewMomentum = -OldMomentum;
 
  916                  NewPolarization = -OldPolarization;
 
  921                       theFacetNormal = GetFacetNormal(OldMomentum,theGlobalNormal);
 
  922                    PdotN = OldMomentum * theFacetNormal;
 
  923                    NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal;
 
  925                 } 
while (NewMomentum * theGlobalNormal <= 0.0);
 
  926                 EdotN = OldPolarization * theFacetNormal;
 
  927                 NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal;
 
  934            NewMomentum = OldMomentum;
 
  935            NewPolarization = OldPolarization;
 
  940 void G4OpBoundaryProcess::DielectricDielectric()
 
  945         G4bool SurfaceRoughnessCriterionPass = 1;
 
  946         if (theSurfaceRoughness != 0. && Rindex1 > Rindex2) {
 
  948            G4double SurfaceRoughnessCriterion =
 
  949              std::exp(-std::pow((4*
pi*theSurfaceRoughness*Rindex1*cost1/wavelength),2));
 
  950            SurfaceRoughnessCriterionPass = 
 
  951                                      G4BooleanRand(SurfaceRoughnessCriterion);
 
  963         G4double s1, s2, E2_perp, E2_parl, E2_total, TransCoeff;
 
  972           theGlobalNormal = -theGlobalNormal;
 
  978             theFacetNormal = theGlobalNormal;
 
  982                          GetFacetNormal(OldMomentum,theGlobalNormal);
 
  985        PdotN = OldMomentum * theFacetNormal;
 
  986        EdotN = OldPolarization * theFacetNormal;
 
  989        if (std::abs(cost1) < 1.0-kCarTolerance){
 
  990           sint1 = std::sqrt(1.-cost1*cost1);
 
  991           sint2 = sint1*Rindex1/Rindex2;     
 
 1002           if (Swap) Swap = !Swap;
 
 1006               if ( !SurfaceRoughnessCriterionPass ) theStatus =
 
 1016          NewMomentum = -OldMomentum;
 
 1017          NewPolarization = -OldPolarization;
 
 1021                  PdotN = OldMomentum * theFacetNormal;
 
 1022          NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal;
 
 1023          EdotN = OldPolarization * theFacetNormal;
 
 1024          NewPolarization = -OldPolarization + (2.*EdotN)*theFacetNormal;
 
 1028        else if (sint2 < 1.0) {
 
 1033              cost2 =  std::sqrt(1.-sint2*sint2);
 
 1036              cost2 = -std::sqrt(1.-sint2*sint2);
 
 1040              A_trans = OldMomentum.
cross(theFacetNormal);
 
 1041                  A_trans = A_trans.
unit();
 
 1042              E1_perp = OldPolarization * A_trans;
 
 1043                  E1pp    = E1_perp * A_trans;
 
 1044                  E1pl    = OldPolarization - E1pp;
 
 1045                  E1_parl = E1pl.
mag();
 
 1048              A_trans  = OldPolarization;
 
 1057               E2_perp = 2.*s1*E1_perp/(Rindex1*cost1+Rindex2*cost2);
 
 1058               E2_parl = 2.*s1*E1_parl/(Rindex2*cost1+Rindex1*cost2);
 
 1059               E2_total = E2_perp*E2_perp + E2_parl*E2_parl;
 
 1060               s2 = Rindex2*cost2*E2_total;
 
 1062               if (theTransmittance > 0) TransCoeff = theTransmittance;
 
 1063               else if (cost1 != 0.0) TransCoeff = s2/s1;
 
 1064               else TransCoeff = 0.0;
 
 1066           if ( !G4BooleanRand(TransCoeff) ) {
 
 1070                  if (Swap) Swap = !Swap;
 
 1074                  if ( !SurfaceRoughnessCriterionPass ) theStatus =
 
 1084             NewMomentum = -OldMomentum;
 
 1085             NewPolarization = -OldPolarization;
 
 1089                     PdotN = OldMomentum * theFacetNormal;
 
 1090                 NewMomentum = OldMomentum - (2.*PdotN)*theFacetNormal;
 
 1094                E2_parl   = Rindex2*E2_parl/Rindex1 - E1_parl;
 
 1095                E2_perp   = E2_perp - E1_perp;
 
 1096                E2_total  = E2_perp*E2_perp + E2_parl*E2_parl;
 
 1097                        A_paral   = NewMomentum.
cross(A_trans);
 
 1098                        A_paral   = A_paral.
unit();
 
 1099                E2_abs    = std::sqrt(E2_total);
 
 1100                C_parl    = E2_parl/E2_abs;
 
 1101                C_perp    = E2_perp/E2_abs;
 
 1103                        NewPolarization = C_parl*A_paral + C_perp*A_trans;
 
 1109                    if (Rindex2 > Rindex1) {
 
 1110                   NewPolarization = - OldPolarization;
 
 1113                       NewPolarization =   OldPolarization;
 
 1129             alpha = cost1 - cost2*(Rindex2/Rindex1);
 
 1130             NewMomentum = OldMomentum + alpha*theFacetNormal;
 
 1131             NewMomentum = NewMomentum.
unit();
 
 1133                     A_paral = NewMomentum.
cross(A_trans);
 
 1134                     A_paral = A_paral.
unit();
 
 1135             E2_abs     = std::sqrt(E2_total);
 
 1136             C_parl     = E2_parl/E2_abs;
 
 1137             C_perp     = E2_perp/E2_abs;
 
 1139                     NewPolarization = C_parl*A_paral + C_perp*A_trans;
 
 1144             NewMomentum = OldMomentum;
 
 1145             NewPolarization = OldPolarization;
 
 1151        OldMomentum = NewMomentum.
unit();
 
 1152        OldPolarization = NewPolarization.
unit();
 
 1155           Done = (NewMomentum * theGlobalNormal <= 0.0);
 
 1158           Done = (NewMomentum * theGlobalNormal >= -kCarTolerance);
 
 1164     if (Inside && !Swap) {
 
 1169               if ( rand > theReflectivity ) {
 
 1170                  if (rand > theReflectivity + theTransmittance) {
 
 1174                     NewMomentum = OldMomentum;
 
 1175                     NewPolarization = OldPolarization;
 
 1180            theGlobalNormal = -theGlobalNormal;
 
 1192             theGlobalNormal = -theGlobalNormal;
 
 1193         OldMomentum = NewMomentum;
 
 1213 G4double G4OpBoundaryProcess::GetIncidentAngle() 
 
 1215     G4double PdotN = OldMomentum * theFacetNormal;
 
 1217     G4double magN= theFacetNormal.mag();
 
 1218     G4double incidentangle = 
pi - std::acos(PdotN/(magP*magN));
 
 1220     return incidentangle;
 
 1229   G4complex Reflectivity, Reflectivity_TE, Reflectivity_TM;
 
 1230   G4complex N1(Rindex1, 0), N2(RealRindex, ImaginaryRindex);
 
 1243                       aMaterialPropertiesTable->
GetProperty(
"REALRINDEX");
 
 1245                       aMaterialPropertiesTable->
GetProperty(
"IMAGINARYRINDEX");
 
 1246   if (aPropertyPointerR && aPropertyPointerI) {
 
 1247      G4double RRindex = aPropertyPointerR->
Value(thePhotonMomentum);
 
 1248      G4double IRindex = aPropertyPointerI->
Value(thePhotonMomentum);
 
 1255   CosPhi=std::sqrt(u-((std::sin(incidentangle)*std::sin(incidentangle))*(N1*N1)/(N2*N2)));
 
 1257   numeratorTE   = N1*std::cos(incidentangle) - N2*CosPhi;
 
 1258   denominatorTE = N1*std::cos(incidentangle) + N2*CosPhi;
 
 1259   rTE = numeratorTE/denominatorTE;
 
 1261   numeratorTM   = N2*std::cos(incidentangle) - N1*CosPhi;
 
 1262   denominatorTM = N2*std::cos(incidentangle) + N1*CosPhi;
 
 1263   rTM = numeratorTM/denominatorTM;
 
 1270   Reflectivity_TE =  (rTE*conj(rTE))*(E1_perp*E1_perp)
 
 1271                     / (E1_perp*E1_perp + E1_parl*E1_parl);
 
 1272   Reflectivity_TM =  (rTM*conj(rTM))*(E1_parl*E1_parl)
 
 1273                     / (E1_perp*E1_perp + E1_parl*E1_parl);
 
 1274   Reflectivity    = Reflectivity_TE + Reflectivity_TM;
 
 1277      if(
G4UniformRand()*real(Reflectivity) > real(Reflectivity_TE))
 
 1278        {iTE = -1;}
else{iTE = 1;}
 
 1279      if(
G4UniformRand()*real(Reflectivity) > real(Reflectivity_TM))
 
 1280        {iTM = -1;}
else{iTM = 1;}
 
 1282   } 
while(iTE<0&&iTM<0);
 
 1284   return real(Reflectivity);
 
 1288 void G4OpBoundaryProcess::CalculateReflectivity()
 
 1291            PropertyPointer1->
Value(thePhotonMomentum);
 
 1293            PropertyPointer2->
Value(thePhotonMomentum);
 
 1296   if ( theFinish == 
ground ) {
 
 1298                GetFacetNormal(OldMomentum, theGlobalNormal);
 
 1300      theFacetNormal = theGlobalNormal;
 
 1303   G4double PdotN = OldMomentum * theFacetNormal;
 
 1306   if (std::abs(cost1) < 1.0 - kCarTolerance) {
 
 1307      sint1 = std::sqrt(1. - cost1*cost1);
 
 1316      A_trans = OldMomentum.
cross(theFacetNormal);
 
 1317      A_trans = A_trans.
unit();
 
 1318      E1_perp = OldPolarization * A_trans;
 
 1319      E1pp    = E1_perp * A_trans;
 
 1320      E1pl    = OldPolarization - E1pp;
 
 1321      E1_parl = E1pl.
mag();
 
 1324      A_trans  = OldPolarization;
 
 1333   G4double incidentangle = GetIncidentAngle();
 
 1339              GetReflectivity(E1_perp, E1_parl, incidentangle,
 
 1340                                                  RealRindex, ImaginaryRindex);
 
 1343 G4bool G4OpBoundaryProcess::InvokeSD(
const G4Step* pStep)
 
 1350   if (sd) 
return sd->
Hit(&aStep);
 
G4double condition(const G4ErrorSymMatrix &m)
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
static constexpr double h_Planck
 
void G4SwapObj(T *a, T *b)
 
G4OpticalSurfaceModel GetModel() const 
 
double angle(const Hep3Vector &) const 
 
std::ostringstream G4ExceptionDescription
 
G4double GetVelocity() const 
 
const G4DynamicParticle * GetDynamicParticle() const 
 
static constexpr double perCent
 
G4StepStatus GetStepStatus() const 
 
G4Material * GetMaterial() const 
 
G4double GetSurfaceTolerance() const 
 
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
 
void ProposePolarization(G4double Px, G4double Py, G4double Pz)
 
const G4SurfaceType & GetType() const 
 
G4OpBoundaryProcessStatus
 
G4OpBoundaryProcess(const G4String &processName="OpBoundary", G4ProcessType type=fOptical)
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
static constexpr double twopi
 
static G4LogicalBorderSurface * GetSurface(const G4VPhysicalVolume *vol1, const G4VPhysicalVolume *vol2)
 
G4double GetTotalMomentum() const 
 
G4StepPoint * GetPreStepPoint() const 
 
static G4int GetHypNavigatorID()
 
std::complex< G4double > G4complex
 
G4GLOB_DLL std::ostream G4cout
 
G4double Value(G4double x, G4double y, size_t &lastidx, size_t &lastidy) const 
 
G4double GetPolish() const 
 
G4VPhysicalVolume * GetPhysicalVolume() const 
 
const G4String & GetName() const 
 
const G4ThreeVector & GetPosition() const 
 
G4int GetPhiIndexMax(void) const 
 
const G4ThreeVector & GetMomentumDirection() const 
 
Hep3Vector & rotateUz(const Hep3Vector &)
 
G4bool Hit(G4Step *aStep)
 
void SetProcessSubType(G4int)
 
G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition)
 
G4LogicalVolume * GetMotherLogical() const 
 
G4double Value(G4double theEnergy, size_t &lastidx) const 
 
const G4String & GetProcessName() const 
 
G4OpticalSurfaceFinish GetFinish() const 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static G4TransportationManager * GetTransportationManager()
 
virtual void Initialize(const G4Track &)
 
G4LogicalVolume * GetLogicalVolume() const 
 
G4Physics2DVector * GetDichroicVector()
 
void G4SwapPtr(T *&a, T *&b)
 
static constexpr double nm
 
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const 
 
G4StepPoint * GetPostStepPoint() const 
 
void AddTotalEnergyDeposit(G4double value)
 
static constexpr double c_light
 
Hep3Vector orthogonal() const 
 
const G4ThreeVector & GetPolarization() const 
 
G4ParticleChange aParticleChange
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
G4SurfaceProperty * GetSurfaceProperty() const 
 
static constexpr double pi
 
Hep3Vector cross(const Hep3Vector &) const 
 
G4VSensitiveDetector * GetSensitiveDetector() const 
 
static constexpr double halfpi
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
void ProposeTrackStatus(G4TrackStatus status)
 
G4double GetSigmaAlpha() const 
 
static const G4double alpha
 
void ProposeVelocity(G4double finalVelocity)
 
G4int GetThetaIndexMax(void) const 
 
Hep3Vector & rotate(double, const Hep3Vector &)
 
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
 
G4MaterialPropertyVector * GetProperty(const char *key)
 
G4double GetStepLength() const 
 
static G4GeometryTolerance * GetInstance()
 
static const G4Step * GetHyperStep()
 
G4GLOB_DLL std::ostream G4cerr
 
static G4LogicalSkinSurface * GetSurface(const G4LogicalVolume *vol)