7 #include "G4VFastSimulationModel.hh"
8 #include "G4EventManager.hh"
9 #include "G4Electron.hh"
10 #include "GFlashHitMaker.hh"
11 #include "G4Region.hh"
12 #include "G4PhysicalConstants.hh"
14 constexpr G4double
twomass = 2 * CLHEP::electron_mass_c2;
17 : G4VFastSimulationModel(name, region),
19 fTrackingAction(nullptr),
21 fTailPos(0., 0., 0.) {
26 return (11 ==
std::abs(particle.GetPDGEncoding()));
30 const G4Track*
track = fastTrack.GetPrimaryTrack();
36 if (pdgMother == 11 || pdgMother == 22)
39 G4double
energy = track->GetKineticEnergy();
40 return (energy <
fEmax &&
fRegion == fastTrack.GetEnvelope());
44 fastStep.KillPrimaryTrack();
45 fastStep.SetPrimaryTrackPathLength(0.0);
46 G4double
energy = fastTrack.GetPrimaryTrack()->GetKineticEnergy();
48 const G4ThreeVector& pos = fastTrack.GetPrimaryTrack()->GetPosition();
53 if (-11 == fastTrack.GetPrimaryTrack()->GetDefinition()->GetPDGEncoding())
56 const G4ThreeVector& momDir = fastTrack.GetPrimaryTrack()->GetMomentumDirection();
59 GFlashEnergySpot spot;
60 spot.SetEnergy(inPointEnergy);
61 spot.SetPosition(pos);
65 G4double etail = energy - inPointEnergy;
66 const G4int nspots = (G4int)(etail) + 1;
67 const G4double tailEnergy = etail / (G4double)nspots;
68 for (G4int
i = 0;
i < nspots; ++
i) {
72 const G4double
phi = CLHEP::twopi * G4UniformRand();
77 spot.SetEnergy(tailEnergy);
G4double GetRadius(G4double energy) const
G4bool IsApplicable(const G4ParticleDefinition &particle) override
constexpr G4double twomass
Sin< T >::type sin(const T &t)
const G4Envelope * fRegion
LowEnergyFastSimParam fParam
const TrackingAction * fTrackingAction
Cos< T >::type cos(const T &t)
LowEnergyFastSimModel(const G4String &name, G4Region *region, const edm::ParameterSet &parSet)
Abs< T >::type abs(const T &t)
G4double GetInPointEnergyFraction(G4double energy) const
void DoIt(const G4FastTrack &fastTrack, G4FastStep &fastStep) override
T getParameter(std::string const &) const
G4bool ModelTrigger(const G4FastTrack &fastTrack) override
const G4Track * geant4Track() const