6 #include "G4LogicalVolumeStore.hh"
7 #include "G4ParticleTable.hh"
8 #include "G4PhysicalVolumeStore.hh"
9 #include "G4RegionStore.hh"
10 #include "G4UnitsTable.hh"
11 #include "G4SystemOfUnits.hh"
33 maxTrackTime =
p.getParameter<
double>(
"MaxTrackTime") * CLHEP::ns;
35 maxTrackTimes =
p.getParameter<std::vector<double> >(
"MaxTrackTimes");
36 maxTimeNames =
p.getParameter<std::vector<std::string> >(
"MaxTimeNames");
39 ekinMins =
p.getParameter<std::vector<double> >(
"EkinThresholds");
40 ekinNames =
p.getParameter<std::vector<std::string> >(
"EkinNames");
41 ekinParticles =
p.getParameter<std::vector<std::string> >(
"EkinParticles");
47 <<
" MaxTrackTime = " <<
maxTrackTime / CLHEP::ns <<
" ns;"
64 <<
"SteppingAction: Number of DeadRegions where all trackes are killed " <<
ndeadRegions;
99 G4Track* theTrack = aStep->GetTrack();
102 const G4StepPoint* preStep = aStep->GetPreStepPoint();
103 const G4StepPoint* postStep = aStep->GetPostStepPoint();
111 <<
"Track #" << theTrack->GetTrackID() <<
" " << theTrack->GetDefinition()->GetParticleName()
112 <<
" E(MeV)= " << preStep->GetKineticEnergy() /
MeV <<
" Nstep= " << theTrack->GetCurrentStepNumber()
113 <<
" is killed due to edep=NaN inside PV: " << preStep->GetPhysicalVolume()->GetName() <<
" at "
114 << theTrack->GetPosition() <<
" StepLen(mm)= " << aStep->GetStepLength();
131 <<
"Track #" << theTrack->GetTrackID() <<
" " << theTrack->GetDefinition()->GetParticleName()
132 <<
" E(MeV)= " << preStep->GetKineticEnergy() /
MeV <<
" Nstep= " << theTrack->GetCurrentStepNumber()
133 <<
" is killed due to limit on number of steps;/n PV: " << preStep->GetPhysicalVolume()->GetName() <<
" at "
134 << theTrack->GetPosition() <<
" StepLen(mm)= " << aStep->GetStepLength();
137 const double time = theTrack->GetGlobalTime();
147 const G4LogicalVolume* lv = postStep->GetPhysicalVolume()->GetLogicalVolume();
148 const G4Region* theRegion = lv->GetRegion();
169 theTrack->GetDefinition()->GetPDGCharge() != 0.0 && lv->GetMaterial()->GetDensity() <=
theCriticalDensity) {
177 math::XYZVectorD pos((preStep->GetPosition()).
x(), (preStep->GetPosition()).
y(), (preStep->GetPosition()).
z());
180 (preStep->GetMomentum()).
y(),
181 (preStep->GetMomentum()).
z(),
182 preStep->GetTotalEnergy());
184 uint32_t
id = theTrack->GetTrackID();
186 std::pair<math::XYZVectorD, math::XYZTLorentzVectorD>
p(
pos, mom);
190 theTrack->SetTrackStatus(fStopAndKill);
201 const double ekin = theTrack->GetKineticEnergy();
202 int pCode = theTrack->GetDefinition()->GetPDGEncoding();
218 const G4PhysicalVolumeStore*
pvs = G4PhysicalVolumeStore::GetInstance();
219 for (
auto const& pvcite : *
pvs) {
220 const G4String& pvname = pvcite->GetName();
221 if (pvname ==
"Tracker")
223 else if (pvname ==
"CALO")
230 <<
"SteppingAction: pointer for Tracker " <<
tracker <<
" and for Calo " <<
calo;
232 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
235 for (
auto const& lvcite : *lvs) {
236 const G4String& lvname = lvcite->GetName();
250 G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
261 const G4RegionStore* rs = G4RegionStore::GetInstance();
264 for (
auto const& rcite : *rs) {
265 const G4String&
rname = rcite->GetName();
276 for (
auto const& rcite : *rs) {
277 const G4String&
rname = rcite->GetName();
295 typ =
" in dead region ";
298 typ =
" out of time window ";
301 typ =
" low energy limit ";
304 typ =
" low energy limit in vacuum ";
307 typ =
" energy deposition is NaN ";
310 typ =
" very forward track ";
313 typ =
" too many steps ";
318 G4VPhysicalVolume*
pv = aTrack->GetNextVolume();
319 vname =
pv->GetLogicalVolume()->GetName();
320 rname =
pv->GetLogicalVolume()->GetRegion()->GetName();
322 const double ekin = aTrack->GetKineticEnergy();
327 <<
"Track #" << aTrack->GetTrackID() <<
" StepN= " << aTrack->GetCurrentStepNumber() <<
" "
328 << aTrack->GetDefinition()->GetParticleName() <<
" E(MeV)=" << ekin /
CLHEP::MeV
329 <<
" T(ns)=" << aTrack->GetGlobalTime() / CLHEP::ns <<
" is killed due to " << typ <<
"\n LV: " << vname <<
" ("
330 <<
rname <<
") at " << aTrack->GetPosition() <<
" step(cm)=" << aTrack->GetStep()->GetStepLength() / CLHEP::cm;