59 PBound(0), Parameterisation(0), HMaker(0)
62 FlagParticleContainment = 1;
69 PBound(0), Parameterisation(0), HMaker(0)
72 FlagParticleContainment = 1;
98 if(FlagParamType != 0)
109 select = CheckParticleDefAndContainment(fastTrack);
119GFlashShowerModel::CheckParticleDefAndContainment(
const G4FastTrack& fastTrack)
129 if(FlagParticleContainment == 1)
131 filter=CheckContainment(fastTrack);
148 CrossShower = DirectionShower.
cross(OrthoShower);
152 G4int CosPhi[4] = {1,0,-1,0};
153 G4int SinPhi[4] = {0,1,0,-1};
156 G4int NlateralInside=0;
159 for(
int i=0; i<4 ;i++)
164 R*CosPhi[i]*OrthoShower +
165 R*SinPhi[i]*CrossShower ;
172 if(NlateralInside==4) filter=
true;
186 ElectronDoIt(fastTrack,fastStep);
190GFlashShowerModel::ElectronDoIt(
const G4FastTrack& fastTrack,
211 CrossShower = DirectionShower.
cross(OrthoShower);
242 G4int NSpotDeposited =0;
252 if(Bound < stepLength)
262 ZEndStep=ZEndStep+Dz;
265 if(EnergyNow > EnergyStop)
267 LastEneIntegral = EneIntegral;
269 DEne = std::min( EnergyNow,
270 (EneIntegral-LastEneIntegral)*Energy);
271 LastNspIntegral = NspIntegral;
273 DNsp = std::max(1., std::floor( (NspIntegral-LastNspIntegral)
280 DNsp = std::max(1., std::floor( (1.- NspIntegral)
283 EnergyNow = EnergyNow - DEne;
291 G4double DEneSampling =
sp->ApplySampling(DEne,Energy);
296 StepLenght = StepLenght + Dz/2.00;
297 NewPositionShower = NewPositionShower +
298 StepLenght*DirectionShower;
299 StepLenght = Dz/2.00;
302 for (
int i = 0; i < DNsp; i++)
317 Dz/DNsp*DirectionShower*(i+1/2.-DNsp/2.) +
318 RSpot*std::cos(PhiSpot)*OrthoShower +
319 RSpot*std::sin(PhiSpot)*CrossShower;
323 HMaker->
make(&Spot, &fastTrack);
326 while(EnergyNow > 0.0 && Bound> 0.0);
Hep3Vector orthogonal() const
Hep3Vector cross(const Hep3Vector &) const
static G4Electron * ElectronDefinition()
void SetTotalEnergyDeposited(G4double anEnergyPart)
void SetPrimaryTrackPathLength(G4double)
G4ThreeVector GetPrimaryTrackLocalPosition() const
const G4Track * GetPrimaryTrack() const
G4ThreeVector GetPrimaryTrackLocalDirection() const
G4VSolid * GetEnvelopeSolid() const
static G4Positron * PositronDefinition()
const G4ThreeVector & GetPosition() const
G4ParticleDefinition * GetDefinition() const
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
virtual EInside Inside(const G4ThreeVector &p) const =0
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const =0
void SetPosition(const G4ThreeVector &point)
void SetEnergy(const G4double &E)
void make(GFlashEnergySpot *aSpot, const G4FastTrack *aT)
G4double GetMinEneToParametrise(G4ParticleDefinition &particleType)
G4double GetMaxEneToParametrise(G4ParticleDefinition &particleType)
G4double GetEneToKill(G4ParticleDefinition &particleType)
void DoIt(const G4FastTrack &, G4FastStep &)
G4bool ModelTrigger(const G4FastTrack &)
GFlashShowerModel(G4String, G4Envelope *)
G4bool IsApplicable(const G4ParticleDefinition &)
GFlashParticleBounds * PBound
GVFlashShowerParameterisation * Parameterisation
virtual G4double IntegrateEneLongitudinal(G4double LongitudinalStep)=0
virtual G4double GetAveR90()=0
virtual void GenerateLongitudinalProfile(G4double Energy)=0
virtual G4double GenerateRadius(G4int ispot, G4double Energy, G4double LongitudinalPosition)=0
virtual G4double GetAveT90()=0
virtual G4double GetX0()=0
virtual G4double IntegrateNspLongitudinal(G4double LongitudinalStep)=0
virtual G4double GetNspot()=0