106 theReflectivity = 1.;
108 theTransmittance = 0.;
109 theSurfaceRoughness = 0.;
114 fRealRIndexMPV =
nullptr;
115 fImagRIndexMPV =
nullptr;
118 OpticalSurface =
nullptr;
122 thePhotonMomentum = 0.;
123 Rindex1 = Rindex2 = 1.;
124 cost1 = cost2 = sint1 = sint2 = 0.;
126 DichroicVector =
nullptr;
157 const G4Step* pStep = &aStep;
173 BoundaryProcessVerbose();
193 BoundaryProcessVerbose();
205 G4cout <<
" Old Momentum Direction: " << OldMomentum <<
G4endl
206 <<
" Old Polarization: " << OldPolarization <<
G4endl;
216 theGlobalNormal = (iNav[hNavId])->GetGlobalExitNormal(theGlobalPoint, &valid);
220 theGlobalNormal = -theGlobalNormal;
225 ed <<
" G4OpBoundaryProcess/PostStepDoIt(): "
226 <<
" The Navigator reports that it returned an invalid normal" <<
G4endl;
229 "Invalid Surface Normal - Geometry must return valid surface normal");
232 if(OldMomentum * theGlobalNormal > 0.0)
234#ifdef G4OPTICAL_DEBUG
236 ed <<
" G4OpBoundaryProcess/PostStepDoIt(): theGlobalNormal points in a "
239 <<
" The momentum of the photon arriving at interface (oldMomentum)"
240 <<
" must exit the volume cross in the step. " <<
G4endl
241 <<
" So it MUST have dot < 0 with the normal that Exits the new "
242 "volume (globalNormal)."
243 <<
G4endl <<
" >> The dot product of oldMomentum and global Normal is "
244 << OldMomentum * theGlobalNormal <<
G4endl
245 <<
" Old Momentum (during step) = " << OldMomentum <<
G4endl
246 <<
" Global Normal (Exiting New Vol) = " << theGlobalNormal <<
G4endl
248 G4Exception(
"G4OpBoundaryProcess::PostStepDoIt",
"OpBoun02",
252 "Invalid Surface Normal - Geometry must return valid surface "
253 "normal pointing in the right direction");
255 theGlobalNormal = -theGlobalNormal;
269 BoundaryProcessVerbose();
277 Rindex1 = RindexMPV->
Value(thePhotonMomentum, idx_rindex1);
283 BoundaryProcessVerbose();
289 theReflectivity = 1.;
291 theTransmittance = 0.;
292 theSurfaceRoughness = 0.;
298 OpticalSurface =
nullptr;
302 if(Surface ==
nullptr)
307 if(Surface ==
nullptr)
316 if(Surface ==
nullptr)
331 type = OpticalSurface->
GetType();
332 theModel = OpticalSurface->
GetModel();
344 Rindex2 = RindexMPV->
Value(thePhotonMomentum, idx_rindex_surface);
350 BoundaryProcessVerbose();
364 theReflectivity = pp->Value(thePhotonMomentum, idx_reflect);
366 else if(fRealRIndexMPV && fImagRIndexMPV)
368 CalculateReflectivity();
373 theEfficiency = pp->Value(thePhotonMomentum, idx_eff);
377 theTransmittance = pp->Value(thePhotonMomentum, idx_trans);
387 ? pp->Value(thePhotonMomentum, idx_lobe)
390 ? pp->Value(thePhotonMomentum, idx_spike)
393 ? pp->Value(thePhotonMomentum, idx_back)
410 if(Material1 == Material2)
414 BoundaryProcessVerbose();
424 Rindex2 = RindexMPV->
Value(thePhotonMomentum, idx_rindex2);
430 BoundaryProcessVerbose();
438 DielectricDielectric();
443 if(rand > theReflectivity + theTransmittance)
447 else if(rand > theReflectivity)
450 NewMomentum = OldMomentum;
451 NewPolarization = OldPolarization;
466 DielectricDielectric();
481 DielectricLUTDAVIS();
485 DielectricDichroic();
490 ed <<
" PostStepDoIt(): Illegal boundary type." <<
G4endl;
495 NewMomentum = NewMomentum.
unit();
496 NewPolarization = NewPolarization.
unit();
500 G4cout <<
" New Momentum Direction: " << NewMomentum <<
G4endl
501 <<
" New Polarization: " << NewPolarization <<
G4endl;
502 BoundaryProcessVerbose();
515 groupvel->
Value(thePhotonMomentum, idx_groupvel));
525void G4OpBoundaryProcess::BoundaryProcessVerbose()
const
533 G4cout <<
"FresnelRefraction";
535 G4cout <<
"FresnelReflection";
537 G4cout <<
"TotalInternalReflection";
539 G4cout <<
"LambertianReflection";
541 G4cout <<
"LobeReflection";
543 G4cout <<
"SpikeReflection";
545 G4cout <<
"BackScattering";
547 G4cout <<
"PolishedLumirrorAirReflection";
549 G4cout <<
"PolishedLumirrorGlueReflection";
551 G4cout <<
"PolishedAirReflection";
553 G4cout <<
"PolishedTeflonAirReflection";
555 G4cout <<
"PolishedTiOAirReflection";
557 G4cout <<
"PolishedTyvekAirReflection";
559 G4cout <<
"PolishedVM2000AirReflection";
561 G4cout <<
"PolishedVM2000GlueReflection";
563 G4cout <<
"EtchedLumirrorAirReflection";
565 G4cout <<
"EtchedLumirrorGlueReflection";
567 G4cout <<
"EtchedAirReflection";
569 G4cout <<
"EtchedTeflonAirReflection";
571 G4cout <<
"EtchedTiOAirReflection";
573 G4cout <<
"EtchedTyvekAirReflection";
575 G4cout <<
"EtchedVM2000AirReflection";
577 G4cout <<
"EtchedVM2000GlueReflection";
579 G4cout <<
"GroundLumirrorAirReflection";
581 G4cout <<
"GroundLumirrorGlueReflection";
583 G4cout <<
"GroundAirReflection";
585 G4cout <<
"GroundTeflonAirReflection";
587 G4cout <<
"GroundTiOAirReflection";
589 G4cout <<
"GroundTyvekAirReflection";
591 G4cout <<
"GroundVM2000AirReflection";
593 G4cout <<
"GroundVM2000GlueReflection";
599 G4cout <<
"NotAtBoundary";
607 G4cout <<
"Dichroic Transmission";
626 if(sigma_alpha == 0.0)
631 G4double f_max = std::min(1.0, 4. * sigma_alpha);
638 alpha = G4RandGauss::shoot(0.0, sigma_alpha);
639 }
while(
G4UniformRand() * f_max > std::sin(alpha) || alpha >= halfpi);
642 sinAlpha = std::sin(alpha);
643 facetNormal.
set(sinAlpha * std::cos(phi), sinAlpha * std::sin(phi),
646 }
while(Momentum * facetNormal >= 0.0);
663 }
while(smear.
mag() > 1.0);
664 facetNormal = Normal + (1. - polish) * smear;
665 }
while(Momentum * facetNormal >= 0.0);
666 facetNormal = facetNormal.
unit();
670 facetNormal = Normal;
677void G4OpBoundaryProcess::DielectricMetal()
687 if(rand > theReflectivity && n == 1)
689 if(rand > theReflectivity + theTransmittance)
696 NewMomentum = OldMomentum;
697 NewPolarization = OldPolarization;
703 if(fRealRIndexMPV && fImagRIndexMPV)
707 CalculateReflectivity();
708 if(!G4BooleanRand(theReflectivity))
729 NewMomentum = -OldMomentum;
730 NewPolarization = -OldPolarization;
736 if(fRealRIndexMPV && fImagRIndexMPV)
742 theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal);
746 OldMomentum - 2. * OldMomentum * theFacetNormal * theFacetNormal;
747 EdotN = OldPolarization * theFacetNormal;
749 A_trans = (sint1 > 0.0) ? OldMomentum.
cross(theFacetNormal).
unit()
751 A_paral = NewMomentum.
cross(A_trans).
unit();
753 if(iTE > 0 && iTM > 0)
755 NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal;
759 NewPolarization = -A_trans;
763 NewPolarization = -A_paral;
767 OldMomentum = NewMomentum;
768 OldPolarization = NewPolarization;
771 }
while(NewMomentum * theGlobalNormal < 0.0);
775void G4OpBoundaryProcess::DielectricLUT()
777 G4int thetaIndex, phiIndex;
778 G4double AngularDistributionValue, thetaRad, phiRad, EdotN;
779 G4ThreeVector PerpendicularVectorTheta, PerpendicularVectorPhi;
792 if(rand > theReflectivity)
794 if(rand > theReflectivity + theTransmittance)
801 NewMomentum = OldMomentum;
802 NewPolarization = OldPolarization;
809 G4double anglePhotonToNormal = OldMomentum.
angle(-theGlobalNormal);
811 G4int angleIncident =
G4lrint(anglePhotonToNormal / CLHEP::deg);
817 thetaIndex = G4RandFlat::shootInt(thetaIndexMax - 1);
818 phiIndex = G4RandFlat::shootInt(phiIndexMax - 1);
821 angleIncident, thetaIndex, phiIndex);
823 }
while(!G4BooleanRand(AngularDistributionValue));
825 thetaRad = (-90 + 4 * thetaIndex) * pi / 180.;
826 phiRad = (-90 + 5 * phiIndex) * pi / 180.;
828 NewMomentum = -OldMomentum;
830 PerpendicularVectorTheta = NewMomentum.
cross(theGlobalNormal);
831 if(PerpendicularVectorTheta.
mag() < kCarTolerance)
833 PerpendicularVectorTheta = NewMomentum.
orthogonal();
835 NewMomentum = NewMomentum.
rotate(anglePhotonToNormal - thetaRad,
836 PerpendicularVectorTheta);
837 PerpendicularVectorPhi = PerpendicularVectorTheta.
cross(NewMomentum);
838 NewMomentum = NewMomentum.
rotate(-phiRad, PerpendicularVectorPhi);
841 theFacetNormal = (NewMomentum - OldMomentum).unit();
842 EdotN = OldPolarization * theFacetNormal;
843 NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal;
846 }
while(NewMomentum * theGlobalNormal <= 0.0);
850void G4OpBoundaryProcess::DielectricLUTDAVIS()
852 G4int angindex, random, angleIncident;
853 G4double ReflectivityValue, elevation, azimuth, EdotN;
861 anglePhotonToNormal = OldMomentum.
angle(-theGlobalNormal);
864 angleIncident =
G4lint(anglePhotonToNormal / CLHEP::deg);
867 if(rand > ReflectivityValue)
869 if(theEfficiency > 0.)
878 if(angleIncident <= 0.01)
880 NewMomentum = OldMomentum;
886 random = G4RandFlat::shootInt(1, LUTbin + 1);
888 (((random * 2) - 1)) + angleIncident * LUTbin * 2 + 3640000;
893 }
while(elevation == 0. && azimuth == 0.);
895 NewMomentum = -OldMomentum;
901 u = u *= (std::sin(elevation) * std::cos(azimuth));
902 v = vNorm *= (std::sin(elevation) * std::sin(azimuth));
907 theFacetNormal = (NewMomentum - OldMomentum).unit();
908 EdotN = OldPolarization * theFacetNormal;
909 NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal;
916 if(angleIncident == 0)
918 NewMomentum = -OldMomentum;
924 random = G4RandFlat::shootInt(1, LUTbin + 1);
925 angindex = (((random * 2) - 1)) + (angleIncident - 1) * LUTbin * 2;
929 }
while(elevation == 0. && azimuth == 0.);
931 NewMomentum = -OldMomentum;
937 u = u *= (std::sin(elevation) * std::cos(azimuth));
938 v = vNorm *= (std::sin(elevation) * std::sin(azimuth));
944 NewPolarization = OldPolarization;
946 }
while(NewMomentum * theGlobalNormal <= 0.0);
950void G4OpBoundaryProcess::DielectricDichroic()
953 G4double anglePhotonToNormal = OldMomentum.
angle(-theGlobalNormal);
956 G4double angleIncident = std::floor(180. / pi * anglePhotonToNormal + 0.5);
966 G4double wavelength = h_Planck * c_light / thePhotonMomentum;
968 DichroicVector->
Value(wavelength / nm, angleIncident, idx, idy) * perCent;
978 ed <<
" G4OpBoundaryProcess/DielectricDichroic(): "
979 <<
" The dichroic surface has no G4Physics2DVector" <<
G4endl;
980 G4Exception(
"G4OpBoundaryProcess::DielectricDichroic",
"OpBoun03",
982 "A dichroic surface must have an associated G4Physics2DVector");
985 if(!G4BooleanRand(theTransmittance))
1000 NewMomentum = -OldMomentum;
1001 NewPolarization = -OldPolarization;
1010 theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal);
1012 PdotN = OldMomentum * theFacetNormal;
1013 NewMomentum = OldMomentum - (2. * PdotN) * theFacetNormal;
1015 }
while(NewMomentum * theGlobalNormal <= 0.0);
1017 EdotN = OldPolarization * theFacetNormal;
1018 NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal;
1025 NewMomentum = OldMomentum;
1026 NewPolarization = OldPolarization;
1031void G4OpBoundaryProcess::DielectricDielectric()
1036 G4bool SurfaceRoughnessCriterionPass =
true;
1037 if(theSurfaceRoughness != 0. && Rindex1 > Rindex2)
1039 G4double wavelength = h_Planck * c_light / thePhotonMomentum;
1040 G4double SurfaceRoughnessCriterion = std::exp(-std::pow(
1041 (4. * pi * theSurfaceRoughness * Rindex1 * cost1 / wavelength), 2));
1042 SurfaceRoughnessCriterionPass = G4BooleanRand(SurfaceRoughnessCriterion);
1053 G4double s1, s2, E2_perp, E2_parl, E2_total, TransCoeff;
1063 theGlobalNormal = -theGlobalNormal;
1070 theFacetNormal = theGlobalNormal;
1074 theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal);
1078 EdotN = OldPolarization * theFacetNormal;
1080 cost1 = -OldMomentum * theFacetNormal;
1081 if(std::abs(cost1) < 1.0 - kCarTolerance)
1083 sint1 = std::sqrt(1. - cost1 * cost1);
1084 sint2 = sint1 * Rindex1 / Rindex2;
1100 if(!SurfaceRoughnessCriterionPass)
1110 NewMomentum = -OldMomentum;
1111 NewPolarization = -OldPolarization;
1117 OldMomentum - 2. * OldMomentum * theFacetNormal * theFacetNormal;
1118 EdotN = OldPolarization * theFacetNormal;
1119 NewPolarization = -OldPolarization + (2. * EdotN) * theFacetNormal;
1123 else if(sint2 < 1.0)
1128 cost2 = std::sqrt(1. - sint2 * sint2);
1132 cost2 = -std::sqrt(1. - sint2 * sint2);
1137 A_trans = (OldMomentum.
cross(theFacetNormal)).unit();
1138 E1_perp = OldPolarization * A_trans;
1139 E1pp = E1_perp * A_trans;
1140 E1pl = OldPolarization - E1pp;
1141 E1_parl = E1pl.
mag();
1145 A_trans = OldPolarization;
1152 s1 = Rindex1 * cost1;
1153 E2_perp = 2. * s1 * E1_perp / (Rindex1 * cost1 + Rindex2 * cost2);
1154 E2_parl = 2. * s1 * E1_parl / (Rindex2 * cost1 + Rindex1 * cost2);
1155 E2_total = E2_perp * E2_perp + E2_parl * E2_parl;
1156 s2 = Rindex2 * cost2 * E2_total;
1158 if(theTransmittance > 0.)
1159 TransCoeff = theTransmittance;
1160 else if(cost1 != 0.0)
1161 TransCoeff = s2 / s1;
1166 if(!G4BooleanRand(TransCoeff))
1171 if(!SurfaceRoughnessCriterionPass)
1181 NewMomentum = -OldMomentum;
1182 NewPolarization = -OldPolarization;
1187 OldMomentum - 2. * OldMomentum * theFacetNormal * theFacetNormal;
1190 E2_parl = Rindex2 * E2_parl / Rindex1 - E1_parl;
1191 E2_perp = E2_perp - E1_perp;
1192 E2_total = E2_perp * E2_perp + E2_parl * E2_parl;
1193 A_paral = (NewMomentum.
cross(A_trans)).unit();
1194 E2_abs = std::sqrt(E2_total);
1195 C_parl = E2_parl / E2_abs;
1196 C_perp = E2_perp / E2_abs;
1198 NewPolarization = C_parl * A_paral + C_perp * A_trans;
1202 if(Rindex2 > Rindex1)
1204 NewPolarization = -OldPolarization;
1208 NewPolarization = OldPolarization;
1222 alpha = cost1 - cost2 * (Rindex2 / Rindex1);
1223 NewMomentum = (OldMomentum +
alpha * theFacetNormal).unit();
1224 A_paral = (NewMomentum.cross(A_trans)).unit();
1225 E2_abs = std::sqrt(E2_total);
1226 C_parl = E2_parl / E2_abs;
1227 C_perp = E2_perp / E2_abs;
1229 NewPolarization = C_parl * A_paral + C_perp * A_trans;
1233 NewMomentum = OldMomentum;
1234 NewPolarization = OldPolarization;
1239 OldMomentum = NewMomentum.
unit();
1240 OldPolarization = NewPolarization.
unit();
1244 Done = (NewMomentum * theGlobalNormal <= 0.0);
1248 Done = (NewMomentum * theGlobalNormal >= -kCarTolerance);
1258 if(rand > theReflectivity + theTransmittance)
1262 else if(rand > theReflectivity)
1265 NewMomentum = OldMomentum;
1266 NewPolarization = OldPolarization;
1272 theGlobalNormal = -theGlobalNormal;
1285 theGlobalNormal = -theGlobalNormal;
1286 OldMomentum = NewMomentum;
1303G4double G4OpBoundaryProcess::GetIncidentAngle()
1305 G4double PdotN = OldMomentum * theFacetNormal;
1307 G4double magN = theFacetNormal.mag();
1308 G4double incidentangle = pi - std::acos(PdotN / (magP * magN));
1310 return incidentangle;
1320 G4complex Reflectivity, Reflectivity_TE, Reflectivity_TM;
1321 G4complex N1(Rindex1, 0.), N2(RealRindex, ImaginaryRindex);
1336 G4double RRindex = ppR->
Value(thePhotonMomentum, idx_rrindex);
1337 G4double IRindex = ppI->
Value(thePhotonMomentum, idx_irindex);
1343 CosPhi = std::sqrt(u - ((std::sin(incidentangle) * std::sin(incidentangle)) *
1344 (N1 * N1) / (N2 * N2)));
1346 numeratorTE = N1 * std::cos(incidentangle) - N2 * CosPhi;
1347 denominatorTE = N1 * std::cos(incidentangle) + N2 * CosPhi;
1348 rTE = numeratorTE / denominatorTE;
1350 numeratorTM = N2 * std::cos(incidentangle) - N1 * CosPhi;
1351 denominatorTM = N2 * std::cos(incidentangle) + N1 * CosPhi;
1352 rTM = numeratorTM / denominatorTM;
1359 Reflectivity_TE = (rTE * conj(rTE)) * (E1_perp * E1_perp) /
1360 (E1_perp * E1_perp + E1_parl * E1_parl);
1361 Reflectivity_TM = (rTM * conj(rTM)) * (E1_parl * E1_parl) /
1362 (E1_perp * E1_perp + E1_parl * E1_parl);
1363 Reflectivity = Reflectivity_TE + Reflectivity_TM;
1367 if(
G4UniformRand() * real(Reflectivity) > real(Reflectivity_TE))
1375 if(
G4UniformRand() * real(Reflectivity) > real(Reflectivity_TM))
1384 }
while(iTE < 0 && iTM < 0);
1386 return real(Reflectivity);
1391void G4OpBoundaryProcess::CalculateReflectivity()
1393 G4double RealRindex = fRealRIndexMPV->
Value(thePhotonMomentum, idx_rrindex);
1395 fImagRIndexMPV->
Value(thePhotonMomentum, idx_irindex);
1400 theFacetNormal = GetFacetNormal(OldMomentum, theGlobalNormal);
1404 theFacetNormal = theGlobalNormal;
1407 cost1 = -OldMomentum * theFacetNormal;
1408 if(std::abs(cost1) < 1.0 - kCarTolerance)
1410 sint1 = std::sqrt(1. - cost1 * cost1);
1422 A_trans = (OldMomentum.
cross(theFacetNormal)).unit();
1423 E1_perp = OldPolarization * A_trans;
1424 E1pp = E1_perp * A_trans;
1425 E1pl = OldPolarization - E1pp;
1426 E1_parl = E1pl.
mag();
1430 A_trans = OldPolarization;
1437 G4double incidentangle = GetIncidentAngle();
1441 theReflectivity = GetReflectivity(E1_perp, E1_parl, incidentangle, RealRindex,
1446G4bool G4OpBoundaryProcess::InvokeSD(
const G4Step* pStep)
1453 return sd->
Hit(&aStep);
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4OpBoundaryProcessStatus
@ PolishedTiOAirReflection
@ GroundTeflonAirReflection
@ EtchedVM2000AirReflection
@ EtchedVM2000GlueReflection
@ GroundLumirrorGlueReflection
@ GroundTyvekAirReflection
@ PolishedVM2000GlueReflection
@ PolishedTeflonAirReflection
@ EtchedTyvekAirReflection
@ EtchedLumirrorGlueReflection
@ GroundVM2000AirReflection
@ PolishedTyvekAirReflection
@ PolishedVM2000AirReflection
@ EtchedTeflonAirReflection
@ GroundVM2000GlueReflection
@ PolishedLumirrorGlueReflection
@ TotalInternalReflection
@ PolishedLumirrorAirReflection
@ EtchedLumirrorAirReflection
@ GroundLumirrorAirReflection
CLHEP::Hep3Vector G4ThreeVector
std::complex< G4double > G4complex
G4GLOB_DLL std::ostream G4cout
Hep3Vector orthogonal() const
Hep3Vector cross(const Hep3Vector &) const
double angle(const Hep3Vector &) const
void set(double x, double y, double z)
Hep3Vector & rotateUz(const Hep3Vector &)
Hep3Vector & rotate(double, const Hep3Vector &)
const G4ThreeVector & GetMomentumDirection() const
G4double GetTotalMomentum() const
const G4ThreeVector & GetPolarization() const
G4double GetSurfaceTolerance() const
static G4GeometryTolerance * GetInstance()
static G4LogicalBorderSurface * GetSurface(const G4VPhysicalVolume *vol1, const G4VPhysicalVolume *vol2)
static G4LogicalSkinSurface * GetSurface(const G4LogicalVolume *vol)
G4SurfaceProperty * GetSurfaceProperty() const
G4MaterialPropertyVector * GetProperty(const char *key, G4bool warning=false)
G4bool ConstPropertyExists(const G4String &key) const
G4double GetConstProperty(const G4String &key) const
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
virtual ~G4OpBoundaryProcess()
G4OpBoundaryProcess(const G4String &processName="OpBoundary", G4ProcessType type=fOptical)
virtual void Initialise()
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override
virtual void SetInvokeSD(G4bool)
virtual G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition) override
virtual void PreparePhysicsTable(const G4ParticleDefinition &) override
G4bool GetBoundaryInvokeSD() const
G4int GetBoundaryVerboseLevel() const
static G4OpticalParameters * Instance()
G4double GetAngularDistributionValueLUT(G4int)
G4OpticalSurfaceModel GetModel() const
G4double GetSigmaAlpha() const
G4OpticalSurfaceFinish GetFinish() const
G4int GetThetaIndexMax(void) const
G4int GetPhiIndexMax(void) const
G4double GetPolish() const
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
G4Physics2DVector * GetDichroicVector()
G4double GetReflectivityLUTValue(G4int)
G4int GetLUTbins(void) const
G4double GetAngularDistributionValue(G4int, G4int, G4int)
static const G4Step * GetHyperStep()
static G4int GetHypNavigatorID()
void ProposePolarization(G4double Px, G4double Py, G4double Pz)
void ProposeVelocity(G4double finalVelocity)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
virtual void Initialize(const G4Track &)
G4double Value(G4double x, G4double y, std::size_t &lastidx, std::size_t &lastidy) const
G4double Value(G4double theEnergy, std::size_t &lastidx) const
G4StepStatus GetStepStatus() const
G4Material * GetMaterial() const
const G4ThreeVector & GetPosition() const
G4VSensitiveDetector * GetSensitiveDetector() const
G4VPhysicalVolume * GetPhysicalVolume() const
void AddTotalEnergyDeposit(G4double value)
G4StepPoint * GetPreStepPoint() const
G4StepPoint * GetPostStepPoint() const
const G4SurfaceType & GetType() const
G4double GetVelocity() const
const G4DynamicParticle * GetDynamicParticle() const
G4double GetStepLength() const
std::vector< G4Navigator * >::iterator GetActiveNavigatorsIterator()
static G4TransportationManager * GetTransportationManager()
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4LogicalVolume * GetMotherLogical() const
G4LogicalVolume * GetLogicalVolume() const
const G4String & GetName() const
void SetVerboseLevel(G4int value)
G4ParticleChange aParticleChange
void SetProcessSubType(G4int)
const G4String & GetProcessName() const
G4bool Hit(G4Step *aStep)
void G4SwapObj(T *a, T *b)
void G4SwapPtr(T *&a, T *&b)