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();
187 void CalculateReflectivity();
189 void BoundaryProcessVerbose()
const;
223 G4double fProb_sl, fProb_ss, fProb_bs;
227 G4double fCoatedRindex, fCoatedThickness;
235 G4int fNumSmallStepWarnings = 0;
236 G4int fNumBdryTypeWarnings = 0;
238 size_t idx_dichroicX = 0;
239 size_t idx_dichroicY = 0;
240 size_t idx_rindex1 = 0;
241 size_t idx_rindex_surface = 0;
242 size_t idx_reflect = 0;
244 size_t idx_trans = 0;
246 size_t idx_spike = 0;
248 size_t idx_rindex2 = 0;
249 size_t idx_groupvel = 0;
250 size_t idx_rrindex = 0;
251 size_t idx_irindex = 0;
252 size_t idx_coatedrindex = 0;
255 G4bool fCoatedFrustratedTransmission =
true;
264inline G4bool G4OpBoundaryProcess::G4BooleanRand(
const G4double prob)
const
281inline void G4OpBoundaryProcess::ChooseReflection()
287 fFacetNormal = fGlobalNormal;
289 else if(rand < fProb_ss + fProb_sl)
293 else if(rand < fProb_ss + fProb_sl + fProb_bs)
303inline void G4OpBoundaryProcess::DoAbsorption()
307 if(G4BooleanRand(fEfficiency))
318 fNewMomentum = fOldMomentum;
319 fNewPolarization = fOldPolarization;
324inline void G4OpBoundaryProcess::DoReflection()
329 fFacetNormal = (fNewMomentum - fOldMomentum).unit();
331 else if(fFinish ==
ground)
334 if(!fRealRIndexMPV || !fImagRIndexMPV)
336 fFacetNormal = GetFacetNormal(fOldMomentum, fGlobalNormal);
341 fOldMomentum - (2. * fOldMomentum * fFacetNormal * fFacetNormal);
346 fFacetNormal = fGlobalNormal;
348 fOldMomentum - (2. * fOldMomentum * fFacetNormal * fFacetNormal);
351 -fOldPolarization + (2. * fOldPolarization * fFacetNormal * fFacetNormal);
G4double condition(const G4ErrorSymMatrix &m)
G4OpBoundaryProcessStatus
@ PolishedTiOAirReflection
@ GroundTeflonAirReflection
@ EtchedVM2000AirReflection
@ CoatedDielectricReflection
@ EtchedVM2000GlueReflection
@ GroundLumirrorGlueReflection
@ GroundTyvekAirReflection
@ PolishedVM2000GlueReflection
@ PolishedTeflonAirReflection
@ EtchedTyvekAirReflection
@ EtchedLumirrorGlueReflection
@ GroundVM2000AirReflection
@ PolishedTyvekAirReflection
@ PolishedVM2000AirReflection
@ EtchedTeflonAirReflection
@ GroundVM2000GlueReflection
@ PolishedLumirrorGlueReflection
@ TotalInternalReflection
@ CoatedDielectricFrustratedTransmission
@ PolishedLumirrorAirReflection
@ EtchedLumirrorAirReflection
@ GroundLumirrorAirReflection
@ CoatedDielectricRefraction
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()
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4ParticleChange aParticleChange