54 #ifndef _G4TankSimulatorOG_G4TankOpBoundaryProcess_h_
55 #define _G4TankSimulatorOG_G4TankOpBoundaryProcess_h_
62 #include "templates.hh"
63 #include "geomdefs.hh"
64 #include "Randomize.hh"
66 #include "G4VDiscreteProcess.hh"
67 #include "G4DynamicParticle.hh"
68 #include "G4Material.hh"
69 #include "G4LogicalBorderSurface.hh"
70 #include "G4LogicalSkinSurface.hh"
71 #include "G4OpticalSurface.hh"
72 #include "G4OpticalPhoton.hh"
73 #include "G4TransportationManager.hh"
80 namespace G4TankSimulatorOG {
114 G4ProcessType type = fOptical);
124 G4bool
IsApplicable(
const G4ParticleDefinition& aParticleType);
129 G4ForceCondition* condition);
136 const G4Step& aStep);
139 G4OpticalSurfaceModel
GetModel()
const;
145 void SetModel(G4OpticalSurfaceModel model);
151 void G4Swap(G4double*
a, G4double*
b)
const;
153 void G4Swap(G4Material* a, G4Material* b)
const;
155 void G4VectorSwap(G4ThreeVector* vec1, G4ThreeVector* vec2)
const;
166 const G4ThreeVector& Normal)
const;
233 G4Material* temp =
a;
241 G4ThreeVector* vec2)
const
258 return (G4UniformRand() < prob);
271 vect.setX(G4UniformRand() - 0.5);
272 vect.setY(G4UniformRand() - 0.5);
273 vect.setZ(G4UniformRand() - 0.5);
277 }
while (len2 < 0.01 || len2 > 0.25);
294 ndotv = normal * vect;
312 G4ThreeVector vec1 = normal.orthogonal();
314 G4ThreeVector vec2 = vec1.cross(normal);
316 G4double phi = CLHEP::twopi*G4UniformRand();
317 G4double cosphi = std::cos(phi);
318 G4double sinphi = std::sin(phi);
320 return cosphi * vec1 + sinphi * vec2;
327 return ( &aParticleType == G4OpticalPhoton::OpticalPhoton() );
351 G4double rand = G4UniformRand();
352 if ( rand >= 0.0 && rand <
prob_ss ) {
381 aParticleChange.ProposeLocalEnergyDeposit(0.0);
388 aParticleChange.ProposeTrackStatus(fStopAndKill);
G4ThreeVector NewMomentum
G4bool G4BooleanRand(const G4double prob) const
G4OpticalSurfaceFinish theFinish
G4ThreeVector GetFacetNormal(const G4ThreeVector &Momentum, const G4ThreeVector &Normal) const
G4ThreeVector OldMomentum
G4ThreeVector G4PlaneVectorRand(const G4ThreeVector &normal) const
G4bool IsApplicable(const G4ParticleDefinition &aParticleType)
~G4TankOpBoundaryProcess()
G4TankOpBoundaryProcessStatus theStatus
G4ThreeVector G4IsotropicRand() const
G4double GetMeanFreePath(const G4Track &, G4double, G4ForceCondition *condition)
void G4Swap(G4double *a, G4double *b) const
void G4VectorSwap(G4ThreeVector *vec1, G4ThreeVector *vec2) const
G4TankOpBoundaryProcess(const G4String &processName="OpBoundary", G4ProcessType type=fOptical)
G4OpticalSurface * OpticalSurface
G4ThreeVector OldPolarization
G4ThreeVector theFacetNormal
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
void SetModel(G4OpticalSurfaceModel model)
G4TankOpBoundaryProcessStatus
G4ThreeVector NewPolarization
G4TankOpBoundaryProcessStatus GetStatus() const
G4OpticalSurfaceModel theModel
G4double thePhotonMomentum
G4ThreeVector G4LambertianRand(const G4ThreeVector &normal)
void DielectricDielectric()
G4OpticalSurfaceModel GetModel() const
G4ThreeVector theGlobalNormal