64#ifndef G4OpBoundaryProcess_h
65#define G4OpBoundaryProcess_h 1
137 const G4Step& aStep)
override;
161 void DielectricMetal();
162 void DielectricDielectric();
164 void DielectricLUT();
165 void DielectricLUTDAVIS();
167 void DielectricDichroic();
168 void CoatedDielectricDielectric();
170 void ChooseReflection();
173 void DoTransmission();
175 void ApplyDielectricBoundaryTransition(
G4double cost,
G4bool roughnessPass,
192 void CalculateReflectivity();
194 void BoundaryProcessVerbose()
const;
234 G4double fProb_sl, fProb_ss, fProb_bs;
238 G4double fCoatedRindex, fCoatedThickness;
246 G4int fNumSmallStepWarnings = 0;
247 G4int fNumBdryTypeWarnings = 0;
249 size_t idx_dichroicX = 0;
250 size_t idx_dichroicY = 0;
251 size_t idx_rindex1 = 0;
252 size_t idx_rindex_surface = 0;
253 size_t idx_reflect = 0;
255 size_t idx_trans = 0;
257 size_t idx_spike = 0;
259 size_t idx_rindex2 = 0;
260 size_t idx_groupvel = 0;
261 size_t idx_rrindex = 0;
262 size_t idx_irindex = 0;
263 size_t idx_coatedrindex = 0;
266 G4bool fCoatedFrustratedTransmission =
true;
275inline G4bool G4OpBoundaryProcess::G4BooleanRand(
const G4double prob)
const
292inline void G4OpBoundaryProcess::ChooseReflection()
298 fFacetNormal = fGlobalNormal;
300 else if(rand < fProb_ss + fProb_sl)
304 else if(rand < fProb_ss + fProb_sl + fProb_bs)
314inline void G4OpBoundaryProcess::DoAbsorption()
318 if(G4BooleanRand(fEfficiency))
329 fNewMomentum = fOldMomentum;
330 fNewPolarization = fOldPolarization;
335inline void G4OpBoundaryProcess::DoTransmission()
340 fNewMomentum = fOldMomentum;
341 fNewPolarization = fOldPolarization;
344inline void G4OpBoundaryProcess::DoReflection()
349 fFacetNormal = (fNewMomentum - fOldMomentum).unit();
351 else if(fFinish ==
ground)
354 if(!fRealRIndexMPV || !fImagRIndexMPV)
356 fFacetNormal = GetFacetNormal(fOldMomentum, fGlobalNormal);
361 fOldMomentum - (2. * fOldMomentum * fFacetNormal * fFacetNormal);
366 fFacetNormal = fGlobalNormal;
368 fOldMomentum - (2. * fOldMomentum * fFacetNormal * fFacetNormal);
371 -fOldPolarization + (2. * fOldPolarization * fFacetNormal * fFacetNormal);
G4double condition(const G4ErrorSymMatrix &m)
G4PhysicsFreeVector G4MaterialPropertyVector
G4OpBoundaryProcessStatus
@ PolishedTiOAirReflection
@ GroundTeflonAirReflection
@ EtchedVM2000AirReflection
@ CoatedDielectricReflection
@ EtchedVM2000GlueReflection
@ GroundLumirrorGlueReflection
@ GroundTyvekAirReflection
@ PolishedVM2000GlueReflection
@ PolishedTeflonAirReflection
@ EtchedTyvekAirReflection
@ EtchedLumirrorGlueReflection
@ GroundVM2000AirReflection
@ PolishedTyvekAirReflection
@ PolishedVM2000AirReflection
@ EtchedTeflonAirReflection
@ GroundVM2000GlueReflection
@ PolishedLumirrorGlueReflection
@ TotalInternalReflection
@ CoatedDielectricFrustratedTransmission
@ PolishedLumirrorAirReflection
@ EtchedLumirrorAirReflection
@ GroundLumirrorAirReflection
@ CoatedDielectricRefraction
CLHEP::Hep3Vector G4ThreeVector
virtual ~G4OpBoundaryProcess()
G4OpBoundaryProcess(const G4String &processName="OpBoundary", G4ProcessType type=fOptical)
virtual G4OpBoundaryProcessStatus GetStatus() const
virtual G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override
virtual void Initialise()
void SetVerboseLevel(G4int)
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
static G4OpticalPhoton * OpticalPhoton()
G4VDiscreteProcess(const G4String &aName, G4ProcessType aType=fNotDefined)
G4ParticleChange aParticleChange
void swap(T &lhs, T &rhs)