CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes
SteppingAction Class Reference

#include <SteppingAction.h>

Inheritance diagram for SteppingAction:

Public Member Functions

 SteppingAction (const CMSSteppingVerbose *, const edm::ParameterSet &, bool, bool)
 
void UserSteppingAction (const G4Step *aStep) final
 
 ~SteppingAction () override=default
 

Public Attributes

SimActivityRegistry::G4StepSignal m_g4StepSignal
 

Private Member Functions

bool initPointer ()
 
bool isForZDC (const G4LogicalVolume *lv, int pdg) const
 
bool isInsideDeadRegion (const G4Region *reg) const
 
bool isLowEnergy (const G4LogicalVolume *, const G4Track *) const
 
bool isOutOfTimeWindow (const G4Region *reg, const double &time) const
 
void PrintKilledTrack (const G4Track *, const TrackStatus &) const
 

Private Attributes

const G4VPhysicalVolume * calo {nullptr}
 
std::string caloName_
 
std::string cms2ZDCName_
 
bool dd4hep_
 
std::vector< std::string > deadRegionNames
 
std::vector< const G4Region * > deadRegions
 
std::vector< double > ekinMins
 
std::vector< std::string > ekinNames
 
std::vector< std::string > ekinParticles
 
std::vector< int > ekinPDG
 
std::vector< G4LogicalVolume * > ekinVolumes
 
bool hasWatcher
 
bool initialized {false}
 
bool killBeamPipe {false}
 
const G4LogicalVolume * m_CMStoZDC {nullptr}
 
bool m_CMStoZDCtransport
 
const G4Region * m_ZDCRegion {nullptr}
 
G4int maxNumberOfSteps
 
std::vector< std::string > maxTimeNames
 
std::vector< const G4Region * > maxTimeRegions
 
double maxTrackTime
 
double maxTrackTimeForward
 
std::vector< double > maxTrackTimes
 
double maxZCentralCMS
 
unsigned int ndeadRegions
 
unsigned int numberEkins
 
unsigned int numberPart
 
unsigned int numberTimes
 
unsigned int nWarnings {0}
 
const CMSSteppingVerbosesteppingVerbose {nullptr}
 
double theCriticalDensity
 
double theCriticalEnergyForVacuum
 
const G4VPhysicalVolume * tracker {nullptr}
 
std::string trackerName_
 

Detailed Description

Definition at line 20 of file SteppingAction.h.

Constructor & Destructor Documentation

◆ SteppingAction()

SteppingAction::SteppingAction ( const CMSSteppingVerbose sv,
const edm::ParameterSet p,
bool  hasW,
bool  dd4hep 
)
explicit

Definition at line 18 of file SteppingAction.cc.

References caloName_, cms2ZDCName_, deadRegionNames, ekinMins, ekinNames, ekinParticles, g, mps_fire::i, killBeamPipe, visualization-live-secondInstance_cfg::m, m_CMStoZDCtransport, maxNumberOfSteps, maxTimeNames, maxTrackTime, maxTrackTimeForward, maxTrackTimes, maxZCentralCMS, ndeadRegions, numberEkins, numberPart, numberTimes, AlCaHLTBitMon_ParallelJobs::p, AlCaHLTBitMon_QueryRunRegistry::string, theCriticalDensity, theCriticalEnergyForVacuum, and trackerName_.

20  theCriticalEnergyForVacuum = (p.getParameter<double>("CriticalEnergyForVacuum") * CLHEP::MeV);
21  if (0.0 < theCriticalEnergyForVacuum) {
22  killBeamPipe = true;
23  }
24  m_CMStoZDCtransport = (p.getParameter<bool>("CMStoZDCtransport"));
25  theCriticalDensity = (p.getParameter<double>("CriticalDensity") * CLHEP::g / CLHEP::cm3);
26  maxZCentralCMS = p.getParameter<double>("MaxZCentralCMS") * CLHEP::m;
27  maxTrackTime = p.getParameter<double>("MaxTrackTime") * CLHEP::ns;
28  maxTrackTimeForward = p.getParameter<double>("MaxTrackTimeForward") * CLHEP::ns;
29  maxTrackTimes = p.getParameter<std::vector<double> >("MaxTrackTimes");
30  maxTimeNames = p.getParameter<std::vector<std::string> >("MaxTimeNames");
31  deadRegionNames = p.getParameter<std::vector<std::string> >("DeadRegions");
32  maxNumberOfSteps = p.getParameter<int>("MaxNumberOfSteps");
33  ekinMins = p.getParameter<std::vector<double> >("EkinThresholds");
34  ekinNames = p.getParameter<std::vector<std::string> >("EkinNames");
35  ekinParticles = p.getParameter<std::vector<std::string> >("EkinParticles");
36  trackerName_ = p.getParameter<std::string>("TrackerName");
37  caloName_ = p.getParameter<std::string>("CaloName");
38  cms2ZDCName_ = p.getParameter<std::string>("CMS2ZDCName");
39 
40  edm::LogVerbatim("SimG4CoreApplication")
41  << "SteppingAction:: KillBeamPipe = " << killBeamPipe
42  << " CriticalDensity = " << theCriticalDensity * CLHEP::cm3 / CLHEP::g << " g/cm3\n"
43  << " CriticalEnergyForVacuum = " << theCriticalEnergyForVacuum / CLHEP::MeV << " Mev;"
44  << " MaxTrackTime = " << maxTrackTime / CLHEP::ns << " ns;"
45  << " MaxZCentralCMS = " << maxZCentralCMS / CLHEP::m << " m"
46  << " MaxTrackTimeForward = " << maxTrackTimeForward / CLHEP::ns << " ns"
47  << " MaxNumberOfSteps = " << maxNumberOfSteps << " ZDC: " << m_CMStoZDCtransport << "\n"
48  << " Names of special volumes: " << trackerName_ << " " << caloName_;
49 
50  numberTimes = maxTrackTimes.size();
51  if (numberTimes > 0) {
52  for (unsigned int i = 0; i < numberTimes; i++) {
53  edm::LogVerbatim("SimG4CoreApplication")
54  << "SteppingAction::MaxTrackTime for " << maxTimeNames[i] << " is " << maxTrackTimes[i] << " ns ";
55  maxTrackTimes[i] *= ns;
56  }
57  }
58 
60  if (ndeadRegions > 0) {
61  edm::LogVerbatim("SimG4CoreApplication")
62  << "SteppingAction: Number of DeadRegions where all trackes are killed " << ndeadRegions;
63  for (unsigned int i = 0; i < ndeadRegions; ++i) {
64  edm::LogVerbatim("SimG4CoreApplication") << "SteppingAction: DeadRegion " << i << ". " << deadRegionNames[i];
65  }
66  }
67  numberEkins = ekinNames.size();
68  numberPart = ekinParticles.size();
69  if (0 == numberPart) {
70  numberEkins = 0;
71  }
72 
73  if (numberEkins > 0) {
74  edm::LogVerbatim("SimG4CoreApplication")
75  << "SteppingAction::Kill following " << numberPart << " particles in " << numberEkins << " volumes";
76  for (unsigned int i = 0; i < numberPart; ++i) {
77  edm::LogVerbatim("SimG4CoreApplication")
78  << "SteppingAction::Particle " << i << " " << ekinParticles[i] << " Threshold = " << ekinMins[i] << " MeV";
79  ekinMins[i] *= CLHEP::MeV;
80  }
81  for (unsigned int i = 0; i < numberEkins; ++i) {
82  edm::LogVerbatim("SimG4CoreApplication") << "SteppingAction::LogVolume[" << i << "] = " << ekinNames[i];
83  }
84  }
85 }
bool m_CMStoZDCtransport
Log< level::Info, true > LogVerbatim
double theCriticalDensity
std::string cms2ZDCName_
unsigned int numberPart
const CMSSteppingVerbose * steppingVerbose
unsigned int numberEkins
std::string trackerName_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
G4int maxNumberOfSteps
std::vector< std::string > deadRegionNames
unsigned int numberTimes
std::vector< double > maxTrackTimes
double theCriticalEnergyForVacuum
double maxZCentralCMS
std::vector< double > ekinMins
std::vector< std::string > maxTimeNames
std::vector< std::string > ekinNames
double maxTrackTimeForward
unsigned int ndeadRegions
std::string caloName_
std::vector< std::string > ekinParticles

◆ ~SteppingAction()

SteppingAction::~SteppingAction ( )
overridedefault

Member Function Documentation

◆ initPointer()

bool SteppingAction::initPointer ( )
private

Definition at line 213 of file SteppingAction.cc.

References caloName_, cms2ZDCName_, dd4hep_, deadRegionNames, deadRegions, ekinMins, ekinNames, ekinParticles, ekinPDG, ekinVolumes, mps_fire::i, m_CMStoZDC, m_CMStoZDCtransport, m_ZDCRegion, maxTimeNames, maxTimeRegions, DD4hep2DDDName::nameMatterLV(), DD4hep2DDDName::namePV(), ndeadRegions, numberEkins, numberPart, numberTimes, FSQDQM_cfi::pvs, rname, AlCaHLTBitMon_QueryRunRegistry::string, tracker, and trackerName_.

Referenced by UserSteppingAction().

213  {
214  const G4PhysicalVolumeStore* pvs = G4PhysicalVolumeStore::GetInstance();
215  for (auto const& pvcite : *pvs) {
216  const std::string& pvname = (std::string)(DD4hep2DDDName::namePV(pvcite->GetName(), dd4hep_));
217  if (pvname == trackerName_) {
218  tracker = pvcite;
219  } else if (pvname == caloName_) {
220  calo = pvcite;
221  }
222  if (tracker && calo)
223  break;
224  }
225 #ifdef EDM_ML_DEBUG
226  edm::LogVerbatim("SimG4CoreApplication") << pvs->size() << " Physical volume in the store";
227  for (auto const& pvcite : *pvs)
228  edm::LogVerbatim("SimG4CoreApplication") << pvcite << " corresponds to " << pvcite->GetName();
229 #endif
230 
231  const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
232  ekinVolumes.resize(numberEkins, nullptr);
233 #ifdef EDM_ML_DEBUG
234  edm::LogVerbatim("SimG4CoreApplication") << lvs->size() << " Logical volume in the store";
235  for (auto const& lvcite : *lvs)
236  edm::LogVerbatim("SimG4CoreApplication") << lvcite << " corresponds to " << lvcite->GetName();
237 #endif
238  for (auto const& lvcite : *lvs) {
239  std::string lvname = (std::string)(DD4hep2DDDName::nameMatterLV(lvcite->GetName(), dd4hep_));
240  if (lvname == cms2ZDCName_) {
241  m_CMStoZDC = lvcite;
242  }
243  for (unsigned int i = 0; i < numberEkins; ++i) {
244  if (lvname == ekinNames[i]) {
245  ekinVolumes[i] = lvcite;
246  break;
247  }
248  }
249  }
250  edm::LogVerbatim("SimG4CoreApplication")
251  << "SteppingAction: pointer for Tracker: " << tracker << "; Calo: " << calo << "; to CMStoZDC: " << m_CMStoZDC;
252  for (unsigned int i = 0; i < numberEkins; ++i) {
253  edm::LogVerbatim("SimG4CoreApplication") << ekinVolumes[i]->GetName() << " with pointer " << ekinVolumes[i];
254  }
255 
256  if (numberPart > 0) {
257  G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
258  ekinPDG.resize(numberPart, 0);
259  for (unsigned int i = 0; i < numberPart; ++i) {
260  const G4ParticleDefinition* part = theParticleTable->FindParticle(ekinParticles[i]);
261  if (nullptr != part)
262  ekinPDG[i] = part->GetPDGEncoding();
263  edm::LogVerbatim("SimG4CoreApplication") << "Particle " << ekinParticles[i] << " with PDG code " << ekinPDG[i]
264  << " and KE cut off " << ekinMins[i] / MeV << " MeV";
265  }
266  }
267 
268  const G4RegionStore* rs = G4RegionStore::GetInstance();
269 #ifdef EDM_ML_DEBUG
270  edm::LogVerbatim("SimG4CoreApplication") << rs->size() << " Regions in the store";
271  for (auto const& rcite : *rs)
272  edm::LogVerbatim("SimG4CoreApplication") << rcite << " corresponds to " << rcite->GetName();
273 #endif
274  for (auto const& rcite : *rs) {
275  const G4String& rname = rcite->GetName();
276  if (numberTimes > 0) {
277  maxTimeRegions.resize(numberTimes, nullptr);
278  for (unsigned int i = 0; i < numberTimes; ++i) {
279  if (rname == (G4String)(maxTimeNames[i])) {
280  maxTimeRegions[i] = rcite;
281  break;
282  }
283  }
284  }
285  if (ndeadRegions > 0) {
286  deadRegions.resize(ndeadRegions, nullptr);
287  for (unsigned int i = 0; i < ndeadRegions; ++i) {
288  if (rname == (G4String)(deadRegionNames[i])) {
289  deadRegions[i] = rcite;
290  break;
291  }
292  }
293  }
294  if (m_CMStoZDCtransport && rname == "ZDCRegion") {
295  m_ZDCRegion = rcite;
296  }
297  }
298  return true;
299 }
bool m_CMStoZDCtransport
Log< level::Info, true > LogVerbatim
const G4LogicalVolume * m_CMStoZDC
const G4VPhysicalVolume * tracker
std::vector< int > ekinPDG
std::vector< const G4Region * > deadRegions
std::string cms2ZDCName_
unsigned int numberPart
unsigned int numberEkins
std::string trackerName_
std::vector< std::string > deadRegionNames
unsigned int numberTimes
std::vector< G4LogicalVolume * > ekinVolumes
const G4Region * m_ZDCRegion
std::vector< double > ekinMins
std::vector< std::string > maxTimeNames
part
Definition: HCALResponse.h:20
std::vector< std::string > ekinNames
std::string namePV(const std::string &name, bool dd4hep)
const G4String rname[NREG]
std::string nameMatterLV(const std::string &name, bool dd4hep)
unsigned int ndeadRegions
std::string caloName_
std::vector< std::string > ekinParticles
Definition: Common.h:9
std::vector< const G4Region * > maxTimeRegions

◆ isForZDC()

bool SteppingAction::isForZDC ( const G4LogicalVolume *  lv,
int  pdg 
) const
inlineprivate

Definition at line 95 of file SteppingAction.h.

References m_CMStoZDC, and m_CMStoZDCtransport.

Referenced by UserSteppingAction().

95  {
96  return (m_CMStoZDCtransport && lv == m_CMStoZDC && (pdg == 22 || pdg == 2112));
97 }
bool m_CMStoZDCtransport
const G4LogicalVolume * m_CMStoZDC

◆ isInsideDeadRegion()

bool SteppingAction::isInsideDeadRegion ( const G4Region *  reg) const
inlineprivate

Definition at line 73 of file SteppingAction.h.

References deadRegions, and nano_mu_digi_cff::region.

Referenced by UserSteppingAction().

73  {
74  bool res = false;
75  for (auto const& region : deadRegions) {
76  if (reg == region) {
77  res = true;
78  break;
79  }
80  }
81  return res;
82 }
std::vector< const G4Region * > deadRegions
Definition: Electron.h:6

◆ isLowEnergy()

bool SteppingAction::isLowEnergy ( const G4LogicalVolume *  lv,
const G4Track *  theTrack 
) const
private

Definition at line 196 of file SteppingAction.cc.

References ekinMins, ekinPDG, ekinVolumes, mps_fire::i, and numberPart.

Referenced by UserSteppingAction().

196  {
197  const double ekin = theTrack->GetKineticEnergy();
198  int pCode = theTrack->GetDefinition()->GetPDGEncoding();
199 
200  for (auto const& vol : ekinVolumes) {
201  if (lv == vol) {
202  for (unsigned int i = 0; i < numberPart; ++i) {
203  if (pCode == ekinPDG[i]) {
204  return (ekin <= ekinMins[i]);
205  }
206  }
207  break;
208  }
209  }
210  return false;
211 }
std::vector< int > ekinPDG
unsigned int numberPart
std::vector< G4LogicalVolume * > ekinVolumes
std::vector< double > ekinMins

◆ isOutOfTimeWindow()

bool SteppingAction::isOutOfTimeWindow ( const G4Region *  reg,
const double &  time 
) const
inlineprivate

Definition at line 84 of file SteppingAction.h.

References mps_fire::i, maxTimeRegions, maxTrackTime, maxTrackTimes, numberTimes, and hcalRecHitTable_cff::time.

Referenced by UserSteppingAction().

84  {
85  double tofM = maxTrackTime;
86  for (unsigned int i = 0; i < numberTimes; ++i) {
87  if (reg == maxTimeRegions[i]) {
88  tofM = maxTrackTimes[i];
89  break;
90  }
91  }
92  return (time > tofM);
93 }
unsigned int numberTimes
std::vector< double > maxTrackTimes
std::vector< const G4Region * > maxTimeRegions

◆ PrintKilledTrack()

void SteppingAction::PrintKilledTrack ( const G4Track *  aTrack,
const TrackStatus tst 
) const
private

Definition at line 301 of file SteppingAction.cc.

References rname, sDeadRegion, sEnergyDepNaN, sLowEnergy, sLowEnergyInVacuum, sNumberOfSteps, sOutOfTime, AlCaHLTBitMon_QueryRunRegistry::string, and sVeryForward.

Referenced by UserSteppingAction().

301  {
302  std::string vname = "";
303  std::string rname = "";
304  std::string typ = " ";
305  switch (tst) {
306  case sDeadRegion:
307  typ = " in dead region ";
308  break;
309  case sOutOfTime:
310  typ = " out of time window ";
311  break;
312  case sLowEnergy:
313  typ = " low energy limit ";
314  break;
315  case sLowEnergyInVacuum:
316  typ = " low energy limit in vacuum ";
317  break;
318  case sEnergyDepNaN:
319  typ = " energy deposition is NaN ";
320  break;
321  case sVeryForward:
322  typ = " very forward track ";
323  break;
324  case sNumberOfSteps:
325  typ = " too many steps ";
326  break;
327  default:
328  break;
329  }
330  G4VPhysicalVolume* pv = aTrack->GetNextVolume();
331  vname = pv->GetLogicalVolume()->GetName();
332  rname = pv->GetLogicalVolume()->GetRegion()->GetName();
333 
334  const double ekin = aTrack->GetKineticEnergy();
335  if (ekin < 2 * CLHEP::MeV) {
336  return;
337  }
338  edm::LogWarning("SimG4CoreApplication")
339  << "Track #" << aTrack->GetTrackID() << " StepN= " << aTrack->GetCurrentStepNumber() << " "
340  << aTrack->GetDefinition()->GetParticleName() << " E(MeV)=" << ekin / CLHEP::MeV
341  << " T(ns)=" << aTrack->GetGlobalTime() / CLHEP::ns << " is killed due to " << typ << "\n LV: " << vname << " ("
342  << rname << ") at " << aTrack->GetPosition() << " step(cm)=" << aTrack->GetStep()->GetStepLength() / CLHEP::cm;
343 }
const G4String rname[NREG]
Log< level::Warning, false > LogWarning

◆ UserSteppingAction()

void SteppingAction::UserSteppingAction ( const G4Step *  aStep)
final

Definition at line 87 of file SteppingAction.cc.

References funct::abs(), calo, TrackInformation::crossedBoundary(), initialized, initPointer(), isForZDC(), isInsideDeadRegion(), isLowEnergy(), isOutOfTimeWindow(), killBeamPipe, m_CMStoZDCtransport, m_g4StepSignal, m_ZDCRegion, maxNumberOfSteps, maxTrackTimeForward, maxZCentralCMS, CMSSteppingVerbose::nextStep(), numberEkins, nWarnings, PrintKilledTrack(), sAlive, sDeadRegion, TrackInformation::setCrossedBoundary(), sKilledByProcess, sLowEnergy, sLowEnergyInVacuum, sNumberOfSteps, sOutOfTime, steppingVerbose, sVeryForward, theCriticalDensity, hcalRecHitTable_cff::time, and tracker.

87  {
88  if (!initialized) {
90  }
91 
92  m_g4StepSignal(aStep);
93 
94  G4Track* theTrack = aStep->GetTrack();
95  TrackStatus tstat = (theTrack->GetTrackStatus() == fAlive) ? sAlive : sKilledByProcess;
96  const double ekin = theTrack->GetKineticEnergy();
97 
98  if (ekin < 0.0) {
99  if (nWarnings < 2) {
100  ++nWarnings;
101  edm::LogWarning("SimG4CoreApplication")
102  << "SteppingAction::UserSteppingAction: Track #" << theTrack->GetTrackID() << " "
103  << theTrack->GetDefinition()->GetParticleName() << " Ekin(MeV)=" << ekin;
104  }
105  theTrack->SetKineticEnergy(0.0);
106  }
107 
108  // the track is killed by the process
109  if (tstat == sKilledByProcess) {
110  if (nullptr != steppingVerbose) {
111  steppingVerbose->nextStep(aStep, fpSteppingManager, false);
112  }
113  return;
114  }
115 
116  const G4StepPoint* preStep = aStep->GetPreStepPoint();
117  const G4StepPoint* postStep = aStep->GetPostStepPoint();
118  if (sAlive == tstat && theTrack->GetCurrentStepNumber() > maxNumberOfSteps) {
119  tstat = sNumberOfSteps;
120  if (nWarnings < 5) {
121  ++nWarnings;
122  edm::LogWarning("SimG4CoreApplication")
123  << "Track #" << theTrack->GetTrackID() << " " << theTrack->GetDefinition()->GetParticleName()
124  << " E(MeV)=" << ekin << " Nstep=" << theTrack->GetCurrentStepNumber()
125  << " is killed due to limit on number of steps;/n PV:" << preStep->GetPhysicalVolume()->GetName() << " at "
126  << theTrack->GetPosition() << " StepLen(mm)=" << aStep->GetStepLength();
127  }
128  }
129 
130  const double time = theTrack->GetGlobalTime();
131 
132  // check Z-coordinate
133  if (sAlive == tstat && std::abs(theTrack->GetPosition().z()) >= maxZCentralCMS) {
135  }
136 
137  // check G4Region
138  if (sAlive == tstat || sVeryForward == tstat) {
139  // next logical volume and next region
140  const G4LogicalVolume* lv = postStep->GetPhysicalVolume()->GetLogicalVolume();
141  const G4Region* theRegion = lv->GetRegion();
142 
143  // kill in dead regions except CMStoZDC volume
144  if (isInsideDeadRegion(theRegion) && !isForZDC(lv, std::abs(theTrack->GetParticleDefinition()->GetPDGEncoding()))) {
145  tstat = sDeadRegion;
146  }
147 
148  // kill particles leaving ZDC
150  const G4Region* preRegion = preStep->GetPhysicalVolume()->GetLogicalVolume()->GetRegion();
151  if (preRegion == m_ZDCRegion && preRegion != theRegion)
152  tstat = sDeadRegion;
153  }
154 
155  // kill out of time
156  if (sAlive == tstat) {
157  if (isOutOfTimeWindow(theRegion, time))
158  tstat = sOutOfTime;
159  }
160 
161  // kill low-energy in volumes on demand
162  if (sAlive == tstat && numberEkins > 0) {
163  if (isLowEnergy(lv, theTrack))
164  tstat = sLowEnergy;
165  }
166 
167  // kill low-energy in vacuum
168  if (sAlive == tstat && killBeamPipe) {
169  if (ekin < theCriticalEnergyForVacuum && theTrack->GetDefinition()->GetPDGCharge() != 0.0 &&
170  lv->GetMaterial()->GetDensity() <= theCriticalDensity) {
171  tstat = sLowEnergyInVacuum;
172  }
173  }
174  }
175  // check transition tracker/calo
176  bool isKilled = false;
177  if (sAlive == tstat || sVeryForward == tstat) {
178  if (preStep->GetPhysicalVolume() == tracker && postStep->GetPhysicalVolume() == calo) {
179  TrackInformation* trkinfo = static_cast<TrackInformation*>(theTrack->GetUserInformation());
180  if (!trkinfo->crossedBoundary()) {
181  trkinfo->setCrossedBoundary(theTrack);
182  }
183  }
184  } else {
185  theTrack->SetTrackStatus(fStopAndKill);
186  isKilled = true;
187 #ifdef EDM_ML_DEBUG
188  PrintKilledTrack(theTrack, tstat);
189 #endif
190  }
191  if (nullptr != steppingVerbose) {
192  steppingVerbose->nextStep(aStep, fpSteppingManager, isKilled);
193  }
194 }
bool m_CMStoZDCtransport
bool crossedBoundary() const
const G4VPhysicalVolume * tracker
double theCriticalDensity
SimActivityRegistry::G4StepSignal m_g4StepSignal
bool isOutOfTimeWindow(const G4Region *reg, const double &time) const
const CMSSteppingVerbose * steppingVerbose
unsigned int numberEkins
bool isForZDC(const G4LogicalVolume *lv, int pdg) const
G4int maxNumberOfSteps
void PrintKilledTrack(const G4Track *, const TrackStatus &) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isLowEnergy(const G4LogicalVolume *, const G4Track *) const
bool isInsideDeadRegion(const G4Region *reg) const
const G4VPhysicalVolume * calo
const G4Region * m_ZDCRegion
double maxZCentralCMS
double maxTrackTimeForward
void nextStep(const G4Step *, const G4SteppingManager *ptr, bool isKilled) const
Log< level::Warning, false > LogWarning
void setCrossedBoundary(const G4Track *track)
TrackStatus
unsigned int nWarnings

Member Data Documentation

◆ calo

const G4VPhysicalVolume* SteppingAction::calo {nullptr}
private

Definition at line 40 of file SteppingAction.h.

Referenced by UserSteppingAction().

◆ caloName_

std::string SteppingAction::caloName_
private

Definition at line 70 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ cms2ZDCName_

std::string SteppingAction::cms2ZDCName_
private

Definition at line 70 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ dd4hep_

bool SteppingAction::dd4hep_
private

Definition at line 61 of file SteppingAction.h.

Referenced by initPointer().

◆ deadRegionNames

std::vector<std::string> SteppingAction::deadRegionNames
private

Definition at line 65 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ deadRegions

std::vector<const G4Region*> SteppingAction::deadRegions
private

Definition at line 67 of file SteppingAction.h.

Referenced by initPointer(), and isInsideDeadRegion().

◆ ekinMins

std::vector<double> SteppingAction::ekinMins
private

Definition at line 63 of file SteppingAction.h.

Referenced by initPointer(), isLowEnergy(), and SteppingAction().

◆ ekinNames

std::vector<std::string> SteppingAction::ekinNames
private

Definition at line 64 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ ekinParticles

std::vector<std::string> SteppingAction::ekinParticles
private

Definition at line 64 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ ekinPDG

std::vector<int> SteppingAction::ekinPDG
private

Definition at line 69 of file SteppingAction.h.

Referenced by initPointer(), and isLowEnergy().

◆ ekinVolumes

std::vector<G4LogicalVolume*> SteppingAction::ekinVolumes
private

Definition at line 68 of file SteppingAction.h.

Referenced by initPointer(), and isLowEnergy().

◆ hasWatcher

bool SteppingAction::hasWatcher
private

Definition at line 60 of file SteppingAction.h.

◆ initialized

bool SteppingAction::initialized {false}
private

Definition at line 57 of file SteppingAction.h.

Referenced by UserSteppingAction().

◆ killBeamPipe

bool SteppingAction::killBeamPipe {false}
private

Definition at line 58 of file SteppingAction.h.

Referenced by SteppingAction(), and UserSteppingAction().

◆ m_CMStoZDC

const G4LogicalVolume* SteppingAction::m_CMStoZDC {nullptr}
private

Definition at line 42 of file SteppingAction.h.

Referenced by initPointer(), and isForZDC().

◆ m_CMStoZDCtransport

bool SteppingAction::m_CMStoZDCtransport
private

Definition at line 59 of file SteppingAction.h.

Referenced by initPointer(), isForZDC(), SteppingAction(), and UserSteppingAction().

◆ m_g4StepSignal

SimActivityRegistry::G4StepSignal SteppingAction::m_g4StepSignal

◆ m_ZDCRegion

const G4Region* SteppingAction::m_ZDCRegion {nullptr}
private

Definition at line 43 of file SteppingAction.h.

Referenced by initPointer(), and UserSteppingAction().

◆ maxNumberOfSteps

G4int SteppingAction::maxNumberOfSteps
private

Definition at line 55 of file SteppingAction.h.

Referenced by SteppingAction(), and UserSteppingAction().

◆ maxTimeNames

std::vector<std::string> SteppingAction::maxTimeNames
private

Definition at line 64 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ maxTimeRegions

std::vector<const G4Region*> SteppingAction::maxTimeRegions
private

Definition at line 66 of file SteppingAction.h.

Referenced by initPointer(), and isOutOfTimeWindow().

◆ maxTrackTime

double SteppingAction::maxTrackTime
private

Definition at line 46 of file SteppingAction.h.

Referenced by isOutOfTimeWindow(), and SteppingAction().

◆ maxTrackTimeForward

double SteppingAction::maxTrackTimeForward
private

Definition at line 47 of file SteppingAction.h.

Referenced by SteppingAction(), and UserSteppingAction().

◆ maxTrackTimes

std::vector<double> SteppingAction::maxTrackTimes
private

Definition at line 63 of file SteppingAction.h.

Referenced by isOutOfTimeWindow(), and SteppingAction().

◆ maxZCentralCMS

double SteppingAction::maxZCentralCMS
private

Definition at line 48 of file SteppingAction.h.

Referenced by SteppingAction(), and UserSteppingAction().

◆ ndeadRegions

unsigned int SteppingAction::ndeadRegions
private

Definition at line 53 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().

◆ numberEkins

unsigned int SteppingAction::numberEkins
private

Definition at line 51 of file SteppingAction.h.

Referenced by initPointer(), SteppingAction(), and UserSteppingAction().

◆ numberPart

unsigned int SteppingAction::numberPart
private

Definition at line 52 of file SteppingAction.h.

Referenced by initPointer(), isLowEnergy(), and SteppingAction().

◆ numberTimes

unsigned int SteppingAction::numberTimes
private

Definition at line 50 of file SteppingAction.h.

Referenced by initPointer(), isOutOfTimeWindow(), and SteppingAction().

◆ nWarnings

unsigned int SteppingAction::nWarnings {0}
private

Definition at line 54 of file SteppingAction.h.

Referenced by UserSteppingAction().

◆ steppingVerbose

const CMSSteppingVerbose* SteppingAction::steppingVerbose {nullptr}
private

Definition at line 41 of file SteppingAction.h.

Referenced by UserSteppingAction().

◆ theCriticalDensity

double SteppingAction::theCriticalDensity
private

Definition at line 45 of file SteppingAction.h.

Referenced by SteppingAction(), and UserSteppingAction().

◆ theCriticalEnergyForVacuum

double SteppingAction::theCriticalEnergyForVacuum
private

Definition at line 44 of file SteppingAction.h.

Referenced by SteppingAction().

◆ tracker

const G4VPhysicalVolume* SteppingAction::tracker {nullptr}
private

Definition at line 39 of file SteppingAction.h.

Referenced by initPointer(), and UserSteppingAction().

◆ trackerName_

std::string SteppingAction::trackerName_
private

Definition at line 70 of file SteppingAction.h.

Referenced by initPointer(), and SteppingAction().