ATLAS Offline Software
FastCaloSim.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Header include
6 #include "FastCaloSim.h"
7 
8 // FastCaloSim includes
12 
13 // Random generator includes
15 
16 // Geant4 particle includes
17 #include "G4Gamma.hh"
18 #include "G4Electron.hh"
19 #include "G4Positron.hh"
20 #include "G4PionPlus.hh"
21 #include "G4PionMinus.hh"
22 
23 // HepMCHelpers include
25 
26 // G4 sensitive detector includes
27 #include "G4SDManager.hh"
29 
30 #undef FCS_DEBUG
31 
32 
33 
34 FastCaloSim::FastCaloSim(const std::string& name,
35  const ServiceHandle<IAthRNGSvc>& rndmGenSvc,
36  const Gaudi::Property<std::string>& randomEngineName,
37  const PublicToolHandle<IFastCaloSimCaloTransportation>& FastCaloSimCaloTransportation,
38  const PublicToolHandle<IFastCaloSimCaloExtrapolation>& FastCaloSimCaloExtrapolation,
39  const PublicToolHandle<IG4CaloTransportTool>& G4CaloTransportTool,
40  const ServiceHandle<ISF::IFastCaloSimParamSvc>& FastCaloSimSvc,
41  const Gaudi::Property<std::string>& CaloCellContainerSDName,
42  const Gaudi::Property<bool>& doG4Transport,
43  const Gaudi::Property<bool>& doPhotons,
44  const Gaudi::Property<bool>& doElectrons,
45  const Gaudi::Property<bool>& doHadrons,
46  const Gaudi::Property<float>& AbsEtaMin,
47  const Gaudi::Property<float>& AbsEtaMax,
48  const Gaudi::Property<float>& EkinMin,
49  const Gaudi::Property<float>& EkinMax,
50  const Gaudi::Property<bool>& doEMECFCS,
52 
53 : G4VFastSimulationModel(name),
54  m_rndmGenSvc(rndmGenSvc), m_randomEngineName(randomEngineName),
55  m_FastCaloSimCaloTransportation(FastCaloSimCaloTransportation),
56  m_FastCaloSimCaloExtrapolation(FastCaloSimCaloExtrapolation),
57  m_G4CaloTransportTool(G4CaloTransportTool),
58  m_FastCaloSimSvc(FastCaloSimSvc),
59  m_CaloCellContainerSDName(CaloCellContainerSDName),
60  m_doG4Transport(doG4Transport),
61  m_doPhotons(doPhotons),
62  m_doElectrons(doElectrons),
63  m_doHadrons(doHadrons),
64  m_AbsEtaMin(AbsEtaMin),
65  m_AbsEtaMax(AbsEtaMax),
66  m_EkinMin(EkinMin),
67  m_EkinMax(EkinMax),
68  m_doEMECFCS(doEMECFCS),
69  m_FastCaloSimTool(FastCaloSimTool)
70 {
71 }
72 
73 void FastCaloSim::StartOfAthenaEvent(const EventContext& ctx ){
74 
77 
78 
79  return;
80 }
81 
82 void FastCaloSim::EndOfAthenaEvent(const EventContext&){
83 
84 
85  return;
86 }
87 
88 
89 G4bool FastCaloSim::IsApplicable(const G4ParticleDefinition& particleType)
90 {
91  // Check whether we can simulate the particle with FastCaloSim
92  bool isPhoton = &particleType == G4Gamma::GammaDefinition();
93  bool isElectron = &particleType == G4Electron::ElectronDefinition();
94  bool isPositron = &particleType == G4Positron::PositronDefinition();
95  bool isHadron = MC::isHadron(particleType.GetPDGEncoding());
96 
97  // FastCaloSim is applicable if it is photon, electron, positron or any hadron
98  bool isApplicable = (isPhoton && m_doPhotons) || (isElectron && m_doElectrons) || (isPositron && m_doElectrons) || (isHadron && m_doHadrons);
99 
100  #ifdef FCS_DEBUG
101  const std::string pName = particleType.GetParticleName();
102  G4cout<< "[FastCaloSim::IsApplicable] Got " << pName <<G4endl;
103  if(isApplicable) G4cout<<"[FastCaloSim::IsApplicable] APPLICABLE"<<G4endl;
104  else G4cout<<"[FastCaloSim::IsApplicable] NOT APPLICABLE"<<G4endl;
105  #endif
106 
107 
108  return isApplicable;
109 }
110 
111 G4bool FastCaloSim::ModelTrigger(const G4FastTrack& fastTrack)
112 {
113 
114  #ifdef FCS_DEBUG
115  G4cout<<"[FastCaloSim::ModelTrigger] Got particle with " <<"\n"
116  <<" pdg=" <<fastTrack.GetPrimaryTrack() -> GetDefinition()->GetPDGEncoding() <<"\n"
117  <<" Ekin="<<fastTrack.GetPrimaryTrack() -> GetKineticEnergy() <<"\n"
118  <<" p=" <<fastTrack.GetPrimaryTrack() -> GetMomentum().mag() <<"\n"
119  <<" x=" <<fastTrack.GetPrimaryTrack() -> GetPosition().x() <<"\n"
120  <<" y=" <<fastTrack.GetPrimaryTrack() -> GetPosition().y() <<"\n"
121  <<" z=" <<fastTrack.GetPrimaryTrack() -> GetPosition().z() <<"\n"
122  <<" r=" <<fastTrack.GetPrimaryTrack() -> GetPosition().perp() <<"\n"
123  <<" eta=" <<fastTrack.GetPrimaryTrack() -> GetMomentum().eta() <<"\n"
124  <<" phi=" <<fastTrack.GetPrimaryTrack() -> GetMomentum().phi() <<"\n"
125  <<G4endl;
126  #endif
127 
128  // Get particle definition
129  const G4ParticleDefinition * G4Particle = fastTrack.GetPrimaryTrack() -> GetDefinition();
130  // Get particle kinetic energy
131  const float Ekin = fastTrack.GetPrimaryTrack() -> GetKineticEnergy();
132  // Get particle position eta
133  const float eta_pos = (fastTrack.GetPrimaryTrack() -> GetPosition()).eta();
134 
135  // Check particle type
136  bool isPhoton = G4Particle == G4Gamma::Definition();
137  bool isElectron = G4Particle == G4Electron::Definition();
138  bool isPositron = G4Particle == G4Positron::Definition();
139  bool isPionPlus = G4Particle == G4PionPlus::Definition();
140  bool isPionMinus = G4Particle == G4PionMinus::Definition();
141 
142 
143  // Check if there is a configuration for this PID
144  bool withinEtaRange = (std::abs(eta_pos) > m_AbsEtaMin) && (std::abs(eta_pos) < m_AbsEtaMax);
145  bool withinEkinRange = (Ekin > m_EkinMin) && (Ekin < m_EkinMax);
146 
147  if (!(withinEtaRange && withinEkinRange)) {
148  #ifdef FCS_DEBUG
149  G4cout<<"[FastCaloSim::ModelTrigger] Model not triggered"<<G4endl;
150  #endif
151  return false;
152  }
153 
154  // Simulate particles below 50 keV with Geant4 to have same config as ISF implementation
155  if (fastTrack.GetPrimaryTrack() -> GetKineticEnergy() < 0.05) {
156  #ifdef FCS_DEBUG
157  G4cout<<"[FastCaloSim::ModelTrigger] Particle below 50 keV threshold. Passing to G4. "<<G4endl;
158  #endif
159  return false;
160  }
161 
162  // Check if triggered particle is really on the ID-Calo (parametrization) boundary
163  if (!passedIDCaloBoundary(fastTrack)) {
164  #ifdef FCS_DEBUG
165  G4cout<<"[FastCaloSim::ModelTrigger] Particle failed passedIDCaloBoundary z="<<fastTrack.GetPrimaryTrack() -> GetPosition().z()<<" r="<<fastTrack.GetPrimaryTrack() -> GetPosition().perp()<<G4endl;
166  #endif
167  return false;
168  }
169 
170  // Set minimum kinetic energy of pions and other hadrons required to be passed to FastCaloSim
171  float minEkinPions = 200;
172  float minEkinOtherHadrons = 400;
173 
174  // Pass all photons, electrons and positrons to FastCaloSim
175  if (isPhoton || isElectron || isPositron){
176  #ifdef FCS_DEBUG
177  G4cout<<"[FastCaloSim::ModelTrigger] Model triggered"<<G4endl;
178  #endif
179  return true;
180  }
181 
182  // Require minimum kinetic energy of pions needed to be passed to FastCaloSim
183  if (isPionPlus || isPionMinus){
184  bool passMinEkinPions = Ekin > minEkinPions;
185 
186  #ifdef FCS_DEBUG
187  if(passMinEkinPions) G4cout<<"[FastCaloSim::ModelTrigger] Model triggered"<<G4endl;
188  else G4cout<<"[FastCaloSim::ModelTrigger] Pion with Ekin="<<Ekin<<" below the minimum "<<minEkinPions<<" MeV threshold. Model not triggered."<<G4endl;
189  #endif
190 
191  return passMinEkinPions;
192 
193  }
194 
195  // Require minimum kinetic energy of other hadrons needed to be passed to FastCaloSim
196  bool passMinEkinOtherHadrons = Ekin > minEkinOtherHadrons;
197 
198  #ifdef FCS_DEBUG
199  if(passMinEkinOtherHadrons) G4cout<<"[FastCaloSim::ModelTrigger] Model triggered"<<G4endl;
200  else G4cout<<"[FastCaloSim::ModelTrigger] Other hadron with Ekin="<<Ekin<<" below the minimum "<<minEkinOtherHadrons<<" MeV threshold. Model not triggered."<<G4endl;
201  #endif
202 
203  return passMinEkinOtherHadrons;
204 }
205 
206 void FastCaloSim::DoIt(const G4FastTrack& fastTrack, G4FastStep& fastStep)
207 {
208 
210  TFCSTruthState truthState;
211  TFCSExtrapolationState extrapolState;
212 
213  // Get Geant4 primary track
214  const G4Track * G4PrimaryTrack = fastTrack.GetPrimaryTrack();
215  // Get Geant4 particle definition
216  const G4ParticleDefinition * G4Particle = G4PrimaryTrack -> GetDefinition();
217  // Get Geant4 particle pdgID
218  signed int pdgID = G4Particle -> GetPDGEncoding();
219 
220  // Do not simulate particles below 10 MeV
221  if(G4PrimaryTrack -> GetKineticEnergy() < 10){
222  #ifdef FCS_DEBUG
223  G4cout<<"[FastCaloSim::DoIt] Skipping particle with Ekin: " << G4PrimaryTrack -> GetKineticEnergy() <<" MeV. Below the 10 MeV threshold"<<G4endl;
224  #endif
225  fastStep.KillPrimaryTrack();
226  return;
227  }
228  // Decide on which FastCaloSim parametrization to use (electron, photon or pion)
229  if(G4Particle == G4Electron::Definition() || G4Particle == G4Positron::Definition() || G4Particle == G4Gamma::Definition())
230  {
231  // Use egamma parametrization for simulation of electrons and photons
232  truthState.set_pdgid(pdgID);
233  }
234  else{
235  // Use pion parametrization for simulation of all hadrons
236  truthState.set_pdgid(G4PionPlus::Definition() -> GetPDGEncoding());
237  }
238 
239  // Set the kinematics of the FastCaloSim truth state
240  truthState.SetPtEtaPhiM(G4PrimaryTrack -> GetMomentum().perp(),
241  G4PrimaryTrack -> GetMomentum().eta(),
242  G4PrimaryTrack -> GetMomentum().phi(),
243  G4Particle -> GetPDGMass());
244 
245  // Set the vertex of the FastCaloSim truth state
246  truthState.set_vertex(G4PrimaryTrack -> GetPosition().x(),
247  G4PrimaryTrack -> GetPosition().y(),
248  G4PrimaryTrack -> GetPosition().z());
249 
250 
251  /* For anti protons and anti-neutrons the kinetic energy should be
252  calculated as Ekin = E() + M() instead of E() - M() this is
253  achieved by setting an Ekin offset of 2*M() to the truth state */
254  if(pdgID == -2212 || pdgID == -2112) truthState.set_Ekin_off(2 * G4Particle -> GetPDGMass());
255 
256 
257  // Perform particle transportation through calorimeter system eiher with ATLAS tracking tools or with Geant4
258  std::vector<G4FieldTrack> caloSteps = m_doG4Transport ? m_G4CaloTransportTool -> transport(*G4PrimaryTrack)
259  : m_FastCaloSimCaloTransportation -> transport(&truthState, false);
260 
261  // Extrapolate transported stepos to ID-Calo boundary and all layers of the calorimeter system
262  m_FastCaloSimCaloExtrapolation->extrapolate(extrapolState, &truthState, caloSteps);
263 
264 
265 
266  // Do not simulate further if extrapolation to ID - Calo boundary fails
267  if(extrapolState.IDCaloBoundary_eta() == -999){
268  #ifdef FCS_DEBUG
269  G4cout<<"[FastCaloSim::DoIt] Killing particle as extrapolation failed"<<G4endl;
270  #endif
271  fastStep.KillPrimaryTrack();
272  return;
273  }
274  // Perform the actual FastCaloSim simulation
275  if(m_FastCaloSimSvc->simulate(simState, &truthState, &extrapolState).isFailure()){
276  G4Exception("FastCaloSimSvc", "FailedSimulationCall", FatalException, "FastCaloSimSvc: Simulation call failed.");
277  abort();
278  }
279 
280  #ifdef FCS_DEBUG
281  G4cout<<"[FastCaloSim::DoIt] Energy returned: " << simState.E() << G4endl;
282  G4cout<<"[FastCaloSim::DoIt] Energy fraction for layer: " << G4endl;
283  for (int s = 0; s < 24; s++) G4cout<<"[FastCaloSim::DoIt] Sampling " << s << " energy " << simState.E(s) << G4endl;
284  #endif
285 
286  // Retrieve the associated CaloCellContainer sensitive detector
287  CaloCellContainerSD * caloCellContainerSD = getCaloCellContainerSD();
288  // Record the cells
289  caloCellContainerSD->recordCells(simState);
290 
291  // Clean up the auxiliar info from the simulation state
292  simState.DoAuxInfoCleanup();
293 
294  // kill the primary track
295  fastStep.KillPrimaryTrack();
296  fastStep.SetPrimaryTrackPathLength(0.0);
297 }
298 
299 
301 
302  G4SDManager *sdm = G4SDManager::GetSDMpointer();
303  G4VSensitiveDetector * vsd = sdm->FindSensitiveDetector((G4String)m_CaloCellContainerSDName);
304 
305  if (!vsd){
306  G4Exception("FastCaloSimSvc", "FailedFindSensitiveDetector", FatalException, "FastCaloSimSvc: Failed getting CaloCellContainer SD.");
307  abort();
308  }
309  // Cast G4VSensitiveDetector to CaloCellContainerSD
310  CaloCellContainerSD * caloCellContainerSD = dynamic_cast<CaloCellContainerSD*>(vsd);
311 
312  if (!caloCellContainerSD){
313  G4Exception("FastCaloSimSvc", "FailedCastSensitiveDetector", FatalException, "FastCaloSimSvc: Failed casting G4VSensitiveDetector.");
314  abort();
315  }
316  return caloCellContainerSD;
317 }
318 
319 
320 G4bool FastCaloSim::passedIDCaloBoundary(const G4FastTrack& fastTrack){
321 
322 
323  /* Method checks if particle has crossed the ID-Calo boundary, defined using three cylinders with pairs of r/z values
324  We also perform a directional check to make sure that the particle does not originate from any backscatter from the MS or CALO */
325 
326  // NOTE:
327  // For the inner beam pipe section, innerBeamPipeZ = 4185 corresponds to original AFII boundary, while
328  // innerBeamPipeZ = 4587 corresponds to the CALO::CALO boundary which should be used instead as there
329  // is no triggering volume at this point and we will trigger slightly later than the AFII boundary, so
330  // passedIDCaloBoundary would fail and we would simulate this part with Geant4
331 
332  // Barrel
333  const float barrelR = 1148;
334  const float barrelZ = 3549.5;
335  // Inner beam pipe section
336  const float innerBeamPipeR = 120;
337  const float innerBeamPipeZ = 4587;
338  // Outer beam pipe section
339  const float outerBeamPipeR = 41;
340  const float outerBeamPipeZ = 6783;
341 
342  // Get particle position
343  const G4ThreeVector particlePosition = fastTrack.GetPrimaryTrack() -> GetPosition();
344  // Get r and z values of position
345  const float r = particlePosition.perp();
346  const float z = particlePosition.z();
347  // Get direction of particle
348  const G4ThreeVector particleDirection = fastTrack.GetPrimaryTrack() -> GetMomentum();
349  // Construct the helper line to decide if particle comes from ID or is backscatter from CALO
350  const G4ThreeVector helperLine = particlePosition + particleDirection;
351 
352  // Set 5cm trigger tolerance, i.e. the 'width' of the trigger boundary
353  // be careful not to set this too low, else Geant4 might overjump your trigger boundary and simulate everything with G4
354  const float triggerTolerance = 50;
355 
356  // Barrel boundary (horizontal surfaces)
357  if (std::abs(z) <= barrelZ + triggerTolerance) {
358  if (r >= barrelR && r < barrelR + triggerTolerance) return helperLine.perp() >= barrelR;
359  }
360  // Beam pipe boundary (horizontal surfaces)
361  if (std::abs(z) >= barrelZ && std::abs(z) <= innerBeamPipeZ + triggerTolerance){
362  if (r >= innerBeamPipeR && r < innerBeamPipeR + triggerTolerance) return helperLine.perp() >= innerBeamPipeR;
363  }
364  if (std::abs(z) >= innerBeamPipeZ && std::abs(z) <= outerBeamPipeZ){
365  if (r >= outerBeamPipeR && r < outerBeamPipeR + triggerTolerance) return helperLine.perp() >= outerBeamPipeR;
366  }
367  // Barrel boundary (vertical surfaces)
368  if (r >= outerBeamPipeR && r<= innerBeamPipeR){
369  if (std::abs(z) >= innerBeamPipeZ && std::abs(z) < innerBeamPipeZ + triggerTolerance) return std::abs(helperLine.z()) >= innerBeamPipeZ;
370  }
371  // Beam pipe boundary (vertical surfaces)
372  if (r >= innerBeamPipeR && r <= barrelR){
373  if (std::abs(z) >= barrelZ && std::abs(z) < barrelZ + triggerTolerance) return std::abs(helperLine.z()) >= barrelZ;
374  }
375 
376  return false;
377 
378 }
379 
FastCaloSimCaloExtrapolation
Definition: FastCaloSimCaloExtrapolation.h:32
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
CaloCellContainerSD.h
beamspotman.r
def r
Definition: beamspotman.py:676
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
TFCSSimulationState::DoAuxInfoCleanup
void DoAuxInfoCleanup()
Definition: TFCSSimulationState.cxx:79
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
FastCaloSim::StartOfAthenaEvent
void StartOfAthenaEvent(const EventContext &ctx)
Definition: FastCaloSim.cxx:73
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:44
TFCSTruthState::set_Ekin_off
void set_Ekin_off(double val)
Definition: TFCSTruthState.h:23
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
CaloCellContainerSD::recordCells
void recordCells(TFCSSimulationState &)
Definition: CaloCellContainerSD.cxx:65
FastCaloSim::m_FastCaloSimTool
FastCaloSimTool * m_FastCaloSimTool
Definition: FastCaloSim.h:103
FastCaloSim::m_FastCaloSimSvc
ServiceHandle< ISF::IFastCaloSimParamSvc > m_FastCaloSimSvc
Definition: FastCaloSim.h:86
FastCaloSim::m_doElectrons
Gaudi::Property< bool > m_doElectrons
Definition: FastCaloSim.h:94
TFCSExtrapolationState
Definition: TFCSExtrapolationState.h:13
FastCaloSim::m_AbsEtaMin
Gaudi::Property< float > m_AbsEtaMin
Definition: FastCaloSim.h:96
x
#define x
particleType
Definition: particleType.h:29
FastCaloSim::m_AbsEtaMax
Gaudi::Property< float > m_AbsEtaMax
Definition: FastCaloSim.h:97
CaloCellContainerSD
Definition: CaloCellContainerSD.h:22
FastCaloSim::getCaloCellContainerSD
CaloCellContainerSD * getCaloCellContainerSD()
Retrieves the associated sensitive detector responsible for writing out the CaloCellContainer.
Definition: FastCaloSim.cxx:300
FastCaloSim::m_FastCaloSimCaloTransportation
PublicToolHandle< IFastCaloSimCaloTransportation > m_FastCaloSimCaloTransportation
Definition: FastCaloSim.h:78
FastCaloSim::m_doPhotons
Gaudi::Property< bool > m_doPhotons
Definition: FastCaloSim.h:93
FastCaloSim.h
FastCaloSim::m_randomEngineName
Gaudi::Property< std::string > m_randomEngineName
Definition: FastCaloSim.h:74
z
#define z
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
FastCaloSim::m_EkinMax
Gaudi::Property< float > m_EkinMax
Definition: FastCaloSim.h:99
FastCaloSim::EndOfAthenaEvent
void EndOfAthenaEvent(const EventContext &ctx)
Definition: FastCaloSim.cxx:82
FastCaloSim::m_doHadrons
Gaudi::Property< bool > m_doHadrons
Definition: FastCaloSim.h:95
TFCSExtrapolationState::IDCaloBoundary_eta
double IDCaloBoundary_eta() const
Definition: TFCSExtrapolationState.h:63
FastCaloSim::m_FastCaloSimCaloExtrapolation
PublicToolHandle< IFastCaloSimCaloExtrapolation > m_FastCaloSimCaloExtrapolation
Definition: FastCaloSim.h:80
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
isHadron
bool isHadron(const T &p)
Definition: AtlasPID.h:218
FastCaloSim::ModelTrigger
G4bool ModelTrigger(const G4FastTrack &) override final
Determines the applicability of the fast sim model to this particular track.
Definition: FastCaloSim.cxx:111
FastCaloSim::m_EkinMin
Gaudi::Property< float > m_EkinMin
Definition: FastCaloSim.h:98
RNGWrapper.h
FastCaloSim::FastCaloSim
FastCaloSim(const std::string &name, const ServiceHandle< IAthRNGSvc > &rndmGenSvc, const Gaudi::Property< std::string > &randomEngineName, const PublicToolHandle< IFastCaloSimCaloTransportation > &FastCaloSimCaloTransportation, const PublicToolHandle< IFastCaloSimCaloExtrapolation > &FastCaloSimCaloExtrapolation, const PublicToolHandle< IG4CaloTransportTool > &G4CaloTransportTool, const ServiceHandle< ISF::IFastCaloSimParamSvc > &FastCaloSimSvc, const Gaudi::Property< std::string > &CaloCellContainerSDName, const Gaudi::Property< bool > &doG4Transport, const Gaudi::Property< bool > &doPhotons, const Gaudi::Property< bool > &doElectrons, const Gaudi::Property< bool > &doHadrons, const Gaudi::Property< float > &EtaLow, const Gaudi::Property< float > &EtaHigh, const Gaudi::Property< float > &EkinLow, const Gaudi::Property< float > &EkinHigh, const Gaudi::Property< bool > &doEMECFCS, FastCaloSimTool *FastCaloSimTool)
Definition: FastCaloSim.cxx:34
TFCSTruthState.h
y
#define y
TFCSExtrapolationState.h
xAOD::EgammaHelpers::isPhoton
bool isPhoton(const xAOD::Egamma *eg)
is the object a photon
Definition: EgammaxAODHelpers.cxx:21
FastCaloSimCaloTransportation
Definition: FastCaloSimCaloTransportation.h:21
TFCSTruthState::set_vertex
void set_vertex(const TLorentzVector &val)
Definition: TFCSTruthState.h:19
FastCaloSim::m_rngWrapper
ATHRNG::RNGWrapper * m_rngWrapper
Definition: FastCaloSim.h:75
FastCaloSim::DoIt
void DoIt(const G4FastTrack &, G4FastStep &) override final
Definition: FastCaloSim.cxx:206
FastCaloSim::m_doG4Transport
Gaudi::Property< bool > m_doG4Transport
Definition: FastCaloSim.h:90
TFCSSimulationState::E
double E() const
Definition: TFCSSimulationState.h:42
TFCSSimulationState.h
FastCaloSim::m_G4CaloTransportTool
PublicToolHandle< IG4CaloTransportTool > m_G4CaloTransportTool
Definition: FastCaloSim.h:82
FastCaloSim::m_CaloCellContainerSDName
Gaudi::Property< std::string > m_CaloCellContainerSDName
Definition: FastCaloSim.h:88
FastCaloSim::passedIDCaloBoundary
G4bool passedIDCaloBoundary(const G4FastTrack &fastTrack)
Check if the particle is located at the proper ID-Calo parametrization boundary and is travelling out...
Definition: FastCaloSim.cxx:320
G4CaloTransportTool
A tool which transports particles through the Geant4 geometry.
Definition: G4CaloTransportTool.h:25
TFCSTruthState
Definition: TFCSTruthState.h:13
TFCSSimulationState
Definition: TFCSSimulationState.h:32
FastCaloSim::IsApplicable
G4bool IsApplicable(const G4ParticleDefinition &) override final
Definition: FastCaloSim.cxx:89
FastCaloSimTool
Definition: FastCaloSimTool.h:24
HepMCHelpers.h
FastCaloSim::m_rndmGenSvc
ServiceHandle< IAthRNGSvc > m_rndmGenSvc
Definition: FastCaloSim.h:73
TFCSTruthState::set_pdgid
void set_pdgid(int val)
Definition: TFCSTruthState.h:18
ServiceHandle< IAthRNGSvc >