19#include "BDSAuxiliaryNavigator.hh"
21#include "BDSEventAction.hh"
22#include "BDSEventInfo.hh"
23#include "BDSGlobalConstants.hh"
24#include "BDSHitEnergyDeposition.hh"
25#include "BDSHitEnergyDepositionExtra.hh"
26#include "BDSHitEnergyDepositionGlobal.hh"
27#include "BDSHitSampler.hh"
28#include "BDSHitThinThing.hh"
29#include "BDSOutput.hh"
30#include "BDSNavigatorPlacements.hh"
31#include "BDSSamplerRegistry.hh"
32#include "BDSSamplerPlacementRecord.hh"
33#include "BDSSDApertureImpacts.hh"
34#include "BDSSDCollimator.hh"
35#include "BDSSDEnergyDeposition.hh"
36#include "BDSSDEnergyDepositionGlobal.hh"
37#include "BDSSDManager.hh"
38#include "BDSSDSampler.hh"
39#include "BDSSDSamplerCylinder.hh"
40#include "BDSSDSamplerSphere.hh"
41#include "BDSSDTerminator.hh"
42#include "BDSSDThinThing.hh"
43#include "BDSSDVolumeExit.hh"
44#include "BDSStackingAction.hh"
45#include "BDSTrajectoriesToStore.hh"
46#include "BDSTrajectory.hh"
47#include "BDSTrajectoryFilter.hh"
48#include "BDSTrajectoryPrimary.hh"
49#include "BDSUtilities.hh"
50#include "BDSWrapperMuonSplitting.hh"
54#include "G4EventManager.hh"
55#include "G4HCofThisEvent.hh"
56#include "G4PrimaryVertex.hh"
57#include "G4PrimaryParticle.hh"
58#include "G4PropagatorInField.hh"
60#include "G4SDManager.hh"
61#include "G4StackManager.hh"
62#include "G4THitsMap.hh"
63#include "G4TrajectoryContainer.hh"
64#include "G4TrajectoryPoint.hh"
65#include "BDSTrajectoryPointHit.hh"
66#include "G4TransportationManager.hh"
76using namespace std::chrono;
78G4bool FireLaserCompton;
80BDSEventAction::BDSEventAction(
BDSOutput* outputIn):
82 samplerCollID_plane(-1),
83 samplerCollID_cylin(-1),
84 samplerCollID_sphere(-1),
90 eCounterWorldContentsID(-1),
99 cpuStartTime(std::clock_t()),
100 primaryAbsorbedInCollimator(false),
101 seedStateAtStart(
""),
102 currentEventIndex(0),
107 verboseEventBDSIM = globals->VerboseEventBDSIM();
108 verboseEventStart = globals->VerboseEventStart();
110 storeTrajectory = globals->StoreTrajectory();
111 storeTrajectoryAll = globals->StoreTrajectoryAll();
112 trajectoryFilterLogicAND = globals->TrajectoryFilterLogicAND();
113 trajectoryEnergyThreshold = globals->StoreTrajectoryEnergyThreshold();
114 trajectoryCutZ = globals->TrajCutGTZ();
115 trajectoryCutR = globals->TrajCutLTR();
116 trajConnect = globals->TrajConnect();
117 trajParticleNameToStore = globals->StoreTrajectoryParticle();
118 trajParticleIDToStore = globals->StoreTrajectoryParticleID();
119 trajDepth = globals->StoreTrajectoryDepth();
120 trajSRangeToStore = globals->StoreTrajectoryELossSRange();
121 trajFiltersSet = globals->TrajectoryFiltersSet();
122 printModulo = globals->PrintModuloEvents();
125 std::stringstream iss(trajParticleIDToStore);
128 {trajParticleIDIntToStore.push_back(i);}
131BDSEventAction::~BDSEventAction()
134void BDSEventAction::BeginOfEventAction(
const G4Event* evt)
137 G4cout << __METHOD_NAME__ <<
"processing begin of event action" << G4endl;
142 BDSStackingAction::energyKilled = 0;
144 currentEventIndex = evt->GetEventID();
147 BDSAuxiliaryNavigator::ResetNavigatorStates();
148 BDSNavigatorPlacements::ResetNavigatorStates();
151 G4Navigator* trackingNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking();
152 trackingNavigator->ResetStackAndState();
153 G4TransportationManager* tm = G4TransportationManager::GetTransportationManager();
155 for (
auto it = tm->GetActiveNavigatorsIterator(); i < (
int)tm->GetNoActiveNavigators(); it++)
156 {(*it)->ResetStackAndState(); i++;}
157 tm->GetPropagatorInField()->ClearPropagatorState();
162 G4bool samplerWorldExists =
false;
163 std::vector<G4VPhysicalVolume*>::iterator worldIterator = tm->GetWorldsIterator();
164 for (G4int iw = 0; iw < (G4int)tm->GetNoWorlds(); iw++)
166 samplerWorldExists = samplerWorldExists || (*worldIterator)->GetName() ==
"SamplerWorld_main";
169 if (samplerWorldExists)
171 auto swtracker = tm->GetNavigator(
"SamplerWorld_main");
173 {swtracker->ResetStackAndState();}
175 fpEventManager->GetStackManager()->clear();
181 G4int event_number = evt->GetEventID();
184 if (event_number%printModulo == 0)
185 {G4cout <<
"---> Begin of event: " << event_number << G4endl;}
186 if (verboseEventBDSIM)
187 {G4cout << __METHOD_NAME__ <<
"event #" << event_number << G4endl;}
192 G4SDManager* g4SDMan = G4SDManager::GetSDMpointer();
208 for (
const auto& name : scorerNames)
211 for (
const auto& name : extraSamplerWithFilterNames)
214 for (
const auto& name : extraSamplerCylinderWithFilterNames)
217 for (
const auto& name : extraSamplerSphereWithFilterNames)
220 FireLaserCompton=
true;
228 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
229 starts = (G4double)ms.count()/1000.0;
232void BDSEventAction::EndOfEventAction(
const G4Event* evt)
235 auto flagsCache(G4cout.flags());
237 G4int event_number = evt->GetEventID();
238 G4bool verboseThisEvent = verboseEventBDSIM &&
BDS::VerboseThisEvent(event_number, verboseEventStart, verboseEventStop);
240 verboseThisEvent =
true;
242 const G4int nChar = 50;
243 if (verboseThisEvent)
244 {G4cout << __METHOD_NAME__ <<
"processing end of event"<<G4endl;}
252 auto cpuEndTime = std::clock();
253 G4float durationCPU =
static_cast<G4float
>(cpuEndTime -
cpuStartTime) / CLOCKS_PER_SEC;
261 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
262 stops = (G4double)ms.count()/1000.0;
272 if (verboseThisEvent)
276 G4HCofThisEvent* HCE = evt->GetHCofThisEvent();
280 std::vector<shc*> allSamplerHits;
283 {allSamplerHits.push_back(SampHC);}
287 {allSamplerHits.push_back(
dynamic_cast<shc*
>(HCE->GetHC(nameIndex.second)));}
290 std::vector<shcc*> allSamplerCylinderHits;
293 {allSamplerCylinderHits.push_back(hitsCylinder);}
297 {allSamplerCylinderHits.push_back(
dynamic_cast<shcc*
>(HCE->GetHC(nameIndex.second)));}
300 std::vector<shcs*> allSamplerSphereHits;
303 {allSamplerSphereHits.push_back(hitsSphere);}
307 {allSamplerSphereHits.push_back(
dynamic_cast<shcs*
>(HCE->GetHC(nameIndex.second)));}
312 echc* eCounterHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterID)) :
nullptr;
313 echc* eCounterFullHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterFullID)) :
nullptr;
314 echc* eCounterVacuumHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterVacuumID)) :
nullptr;
315 echc* eCounterTunnelHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterTunnelID)) :
nullptr;
319 ecghc* eCounterWorldHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
eCounterWorldID)) :
nullptr;
321 ecghc* worldExitHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
worldExitCollID)) :
nullptr;
325 aihc* apertureImpactHits = HCE ?
dynamic_cast<aihc*
>(HCE->GetHC(
apertureCollID)) :
nullptr;
329 tthc* thinThingHits = HCE ?
dynamic_cast<tthc*
>(HCE->GetHC(
thinThingCollID)) :
nullptr;
331 std::map<G4String, G4THitsMap<G4double>*> scorerHits;
335 {scorerHits[nameIndex.first] =
dynamic_cast<G4THitsMap<G4double>*
>(HCE->GetHC(nameIndex.second));}
345 if (verboseThisEvent)
346 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition hits: " << eCounterHits->entries() << G4endl;}
347 if (eCounterHits->entries() > 0)
350 if (eCounterFullHits)
352 if (verboseThisEvent)
353 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition full hits: " << eCounterFullHits->entries() << G4endl;}
354 if (eCounterFullHits->entries() > 0)
357 if (eCounterTunnelHits)
359 if (verboseThisEvent)
360 {G4cout << std::left << std::setw(nChar) <<
"Tunnel energy deposition hits: " << eCounterTunnelHits->entries() << G4endl;}
361 if (eCounterTunnelHits->entries() > 0)
367 chc* collimatorHits = HCE ?
dynamic_cast<chc*
>(HCE->GetHC(
collimatorCollID)) :
nullptr;
369 if (verboseThisEvent)
371 if (eCounterVacuumHits)
372 {G4cout << std::left << std::setw(nChar) <<
"Vacuum energy deposition hits: " << eCounterVacuumHits->entries() << G4endl;}
373 if (eCounterWorldHits)
374 {G4cout << std::left << std::setw(nChar) <<
"World energy deposition hits: " << eCounterWorldHits->entries() << G4endl;}
375 if (eCounterWorldContentsHits)
376 {G4cout << std::left << std::setw(nChar) <<
"World contents energy deposition hits: " << eCounterWorldContentsHits->entries() << G4endl;}
378 {G4cout << std::left << std::setw(nChar) <<
"World exit hits: " << worldExitHits->entries() << G4endl;}
380 {G4cout << std::left << std::setw(nChar) <<
"Collimator hits: " << collimatorHits->entries() << G4endl;}
384 std::vector<const BDSTrajectoryPointHit*> primaryHits;
385 std::vector<const BDSTrajectoryPointHit*> primaryLosses;
386 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
389 if (verboseThisEvent)
390 {G4cout << std::left << std::setw(nChar) <<
"Trajectories: " << trajCont->size() << G4endl;}
394 std::vector<const BDSTrajectoryPrimary*> primaryTrajectories;
396 {primaryTrajectories.push_back(kv.second);}
397 primaryHits = BDSHitThinThing::ResolvePossibleEarlierThinHits(primaryTrajectories, thinThingHits);
400 verboseEventBDSIM || verboseThisEvent,
407 evt->GetPrimaryVertex(),
409 allSamplerCylinderHits,
410 allSamplerSphereHits,
417 eCounterWorldContentsHits,
421 interestingTrajectories,
429 if (evntsPerNtuple>0 && (event_number+1)%evntsPerNtuple == 0)
437 if (verboseThisEvent)
439 G4cout << __METHOD_NAME__ <<
"end of event action done" << G4endl;
440 G4cout <<
"Energy deposition pool size: " << BDSAllocatorEnergyDeposition.GetAllocatedSize() << G4endl;
441 G4cout <<
"Energy deposition extra pool size: " << BDSAllocatorEnergyDepositionExtra.GetAllocatedSize() << G4endl;
442 G4cout <<
"Collimator hits pool size: " << BDSAllocatorCollimator.GetAllocatedSize() << G4endl;
443 G4cout <<
"Trajectory pool size: " << bdsTrajectoryAllocator.GetAllocatedSize() << G4endl;
444 G4cout <<
"Trajectory point pool size bdsim: " << bdsTrajectoryPointAllocator.GetAllocatedSize() << G4endl;
445#if G4VERSION_NUMBER > 1049
446 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator()->GetAllocatedSize() << G4endl;
448 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator->GetAllocatedSize() << G4endl;
450 G4cout <<
"Trajectory point primary pool size: " << bdsTrajectoryPrimaryAllocator.GetAllocatedSize() << G4endl;
453 delete interestingTrajectories;
454 for (
auto& p : primaryLosses)
456 for (
auto& p : primaryHits)
459 G4cout.flags(flagsCache);
466 const std::vector<BDSHitsCollectionSampler*>& allSamplerHits,
469 auto flagsCache(G4cout.flags());
470 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
473 std::map<BDSTrajectory*, bool> interestingTraj;
474 std::map<BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> > trajectoryFilters;
478 TrajectoryVector* trajVec = trajCont->GetVector();
481 std::map<int, BDSTrajectory*> trackIDMap;
482 std::map<BDSTrajectory*, int> depthMap;
483 for (
auto iT1 : *trajVec)
488 trackIDMap[traj->GetTrackID()] = traj;
491 G4int depth = traj->GetParentID() == 0 ? 0 : depthMap.at(trackIDMap.at(traj->GetParentID())) + 1;
492 traj->SetDepth(depth);
493 if (traj->GetParentID() == 0)
494 {depthMap[traj] = 0;}
496 {depthMap[traj] = depthMap.at(trackIDMap.at(traj->GetParentID())) + 1;}
500 for (
auto iT1 : *trajVec)
505 traj->
SetParent(trackIDMap[iT1->GetParentID()]);
512 for (
auto iT1 : *trajVec)
514 std::bitset<BDS::NTrajectoryFilters> filters;
517 G4int parentID = traj->GetParentID();
521 {filters[BDSTrajectoryFilter::primary] =
true;}
526 {filters[BDSTrajectoryFilter::energyThreshold] =
true;}
531 G4String particleName = traj->GetParticleName();
532 G4int particleID = traj->GetPDGEncoding();
533 G4String particleIDStr = G4String(std::to_string(particleID));
537 if ((found1 != std::string::npos) || found2)
538 {filters[BDSTrajectoryFilter::particle] =
true;}
543 {filters[BDSTrajectoryFilter::depth] =
true;}
551 {filters[BDSTrajectoryFilter::minimumZ] =
true;}
555 {filters[BDSTrajectoryFilter::maximumR] =
true;}
557 filters.any() ? nYes++ : nNo++;
558 interestingTraj.insert(std::pair<BDSTrajectory*, bool>(traj, filters.any()));
559 trajectoryFilters.insert(std::pair<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >(traj, filters));
567 G4int nHits = (G4int)eCounterHits->entries();
569 for (G4int i = 0; i < nHits; i++)
571 hit = (*eCounterHits)[i];
572 double dS = hit->GetSHit();
575 if ( dS >= v.first && dS <= v.second)
578 if (!interestingTraj[trajToStore])
583 interestingTraj[trajToStore] =
true;
584 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
590 if (eCounterFullHits)
592 G4int nHits = (G4int)eCounterFullHits->entries();
594 for (G4int i = 0; i < nHits; i++)
596 hit = (*eCounterFullHits)[i];
597 double dS = hit->GetSHit();
600 if ( dS >= v.first && dS <= v.second)
603 if (!interestingTraj[trajToStore])
608 interestingTraj[trajToStore] =
true;
609 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
618 for (
const auto& SampHC : allSamplerHits)
622 for (G4int i = 0; i < (G4int)SampHC->entries(); i++)
624 G4int samplerIndex = (*SampHC)[i]->samplerID;
629 BDSTrajectory* trajToStore = trackIDMap[(*SampHC)[i]->trackID];
630 if (!interestingTraj[trajToStore])
635 interestingTraj[trajToStore] =
true;
636 trajectoryFilters[trajToStore][BDSTrajectoryFilter::sampler] =
true;
648 for (
auto& trajFlag : interestingTraj)
655 auto filterMatch = trajectoryFilters[trajFlag.first] &
trajFiltersSet;
657 {trajFlag.second =
false;}
665 for (
auto i : interestingTraj)
671 {G4cout << std::left << std::setw(nChar) <<
"Trajectories for storage: " << nYes <<
" out of " << nYes + nNo << G4endl;}
673 G4cout.flags(flagsCache);
679 std::map<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >& trajectoryFilters)
const
681 BDSTrajectory* parentTrajectory = trajectoryToConnect->GetParent();
682 if (parentTrajectory)
684 interestingTraj[parentTrajectory] =
true;
685 trajectoryFilters[parentTrajectory][BDSTrajectoryFilter::connect] =
true;
694 G4int trackID = trajectoryIn->GetTrackID();
G4String trajParticleIDToStore
Cache of variable from global constants.
void ConnectTrajectory(std::map< BDSTrajectory *, bool > &interestingTraj, BDSTrajectory *trajectoryToConnect, std::map< BDSTrajectory *, std::bitset< BDS::NTrajectoryFilters > > &trajectoryFilters) const
G4int eCounterVacuumID
Collection ID for the vacuum energy deposition hits.
G4bool primaryAbsorbedInCollimator
Whether primary stopped in a collimator.
G4double trajectoryCutZ
Cache of variable from global constants.
G4int collimatorCollID
Collection ID for the collimator hits.
G4int eCounterFullID
Collection ID for general energy deposition full hits.
G4int worldExitCollID
Collection ID for the world exit hits.
G4int thinThingCollID
Collection ID for the thin thing hits.
std::vector< std::pair< double, double > > trajSRangeToStore
Cache of variable from global constants.
G4bool storeTrajectory
Cache of whether to store trajectories or not.
G4bool trajectoryFilterLogicAND
Cache of variable from global constants.
G4int eCounterWorldID
Collection ID for the world energy deposition hits.
std::bitset< BDS::NTrajectoryFilters > trajFiltersSet
Cache of variable from global constants.
std::vector< int > trajParticleIDIntToStore
Cache of variable from global constants.
G4int samplerCollID_cylin
Collection ID for cylindrical sampler hits.
std::map< G4String, G4int > extraSamplerCylinderCollectionIDs
Collection IDs for extra samplers.
G4int eCounterWorldContentsID
Collection ID for the world energy deposition hits.
BDSOutput * output
Cache of output instance. Not owned by this class.
BDSTrajectoriesToStore * IdentifyTrajectoriesForStorage(const G4Event *evt, G4bool verboseThisEvent, BDSHitsCollectionEnergyDeposition *eCounterHits, BDSHitsCollectionEnergyDeposition *eCounterFullHits, const std::vector< BDSHitsCollectionSampler * > &allSamplerHits, G4int nChar=50) const
Sift through all trajectories (if any) and mark for storage.
G4int samplerCollID_plane
Collection ID for plane sampler hits.
long long int nTracks
Accumulated number of tracks for the event.
std::map< G4String, G4int > extraSamplerSphereCollectionIDs
Collection IDs for extra samplers.
time_t startTime
Time at the start of the event.
std::map< G4String, G4int > scorerCollectionIDs
Collection IDs for all scorers.
G4bool trajConnect
Cache of variable from global constants.
G4int apertureCollID
Collection ID for the aperture hits.
std::vector< int > trajectorySamplerID
Cache of variable from global constants.
std::map< G4String, G4int > extraSamplerCollectionIDs
Collection IDs for extra samplers.
G4double trajectoryCutR
Cache of variable from global constants.
G4String trajParticleNameToStore
Cache of variable from global constants.
G4double stops
Precise stop time in seconds.
std::clock_t cpuStartTime
CPU time at the start of the event.
G4int trajDepth
Cache of variable from global constants.
std::map< G4int, const BDSTrajectoryPrimary * > primaryTrajectoriesCache
G4int eCounterID
Collection ID for general energy deposition hits.
void RegisterPrimaryTrajectory(const BDSTrajectoryPrimary *trajectoryIn)
Append this trajectory to vector of primaries we keep to avoid sifting at the end of event.
G4int samplerCollID_sphere
Collection ID for spherical sampler hits.
G4bool storeTrajectoryAll
Store all trajectories irrespective of filters.
time_t stopTime
Time at the end of the event.
G4double starts
Precise start time in seconds.
G4int eCounterTunnelID
Collection ID for the tunnel energy deposition hits.
G4double trajectoryEnergyThreshold
Cache of variable from global constants.
Interface to store event information use G4 hooks.
void SetPrimaryAbsorbedInCollimator(G4bool absorbed)
Setters.
void SetNTracks(long long int nTracks)
Setters.
void SetStopTime(const time_t &stopTimeIn)
Setters.
void SetMemoryUsage(G4double memoryUsageMbIn)
Setters.
void SetPrimaryHitMachine(G4bool hitIn)
Setters.
void SetStartTime(const time_t &startTimeIn)
Setters.
void SetIndex(G4int indexIn)
Setters.
void SetAborted(G4bool abortedIn)
Setters.
void SetDurationCPU(G4float durationCPUIn)
Setters.
void SetDurationWall(G4float durationWallIn)
Setters.
A class that holds global options and constants.
static BDSGlobalConstants * Instance()
Access method.
Information recorded for a single piece of energy deposition.
G4int GetTrackID() const
Accessor for extra piece of information.
Output base class that defines interface for all output types.
void CloseAndOpenNewFile()
Close a file and open a new one.
void FillEvent(const BDSEventInfo *info, const G4PrimaryVertex *vertex, const std::vector< BDSHitsCollectionSampler * > &samplerHitsPlane, const std::vector< BDSHitsCollectionSamplerCylinder * > &samplerHitsCylinder, const std::vector< BDSHitsCollectionSamplerSphere * > &samplerHitsSphere, const BDSHitsCollectionSamplerLink *samplerHitsLink, const BDSHitsCollectionEnergyDeposition *energyLoss, const BDSHitsCollectionEnergyDeposition *energyLossFull, const BDSHitsCollectionEnergyDeposition *energyLossVacuum, const BDSHitsCollectionEnergyDeposition *energyLossTunnel, const BDSHitsCollectionEnergyDepositionGlobal *energyLossWorld, const BDSHitsCollectionEnergyDepositionGlobal *energyLossWorldContents, const BDSHitsCollectionEnergyDepositionGlobal *worldExitHits, const std::vector< const BDSTrajectoryPointHit * > &primaryHits, const std::vector< const BDSTrajectoryPointHit * > &primaryLosses, const BDSTrajectoriesToStore *trajectories, const BDSHitsCollectionCollimator *collimatorHits, const BDSHitsCollectionApertureImpacts *apertureImpactHits, const std::map< G4String, G4THitsMap< G4double > * > &scorerHitsMap, const G4int turnsTaken)
Copy event information from Geant4 simulation structures to output structures.
A singleton class that holds all required sensitive detector class instances.
BDSSDEnergyDeposition * EnergyDeposition() const
SD for general energy deposition.
BDSSDVolumeExit * WorldExit() const
SD for world exit hits.
BDSSDEnergyDeposition * EnergyDepositionTunnel() const
SD for tunnel energy counter.
const std::vector< G4String > & ExtraSamplerCylinderWithFilterNamesComplete() const
Access a vector of names of extra samplers so we can identify the hits collections.
const std::vector< G4String > & ExtraSamplerSphereWithFilterNamesComplete() const
Access a vector of names of extra samplers so we can identify the hits collections.
BDSSDEnergyDeposition * EnergyDepositionFull() const
SD for general energy deposition but always include extra half of information.
BDSSDCollimator * Collimator() const
SD for collimator impact locations.
BDSSDThinThing * ThinThing() const
BDSSDApertureImpacts * ApertureImpacts() const
SD for aperture impact hits.
BDSSDSamplerCylinder * SamplerCylinder() const
SD for samplers (cylinder type).
const std::vector< G4String > & PrimitiveScorerNamesComplete() const
Access a vector the full primitive scorer names as registered.
BDSSDSampler * SamplerPlane() const
SD for samplers (plane type). See also SamplerPlaneWithFilter below.
BDSSDSamplerSphere * SamplerSphere() const
SD for samplers (sphere type).
BDSSDEnergyDepositionGlobal * EnergyDepositionWorldContents() const
SD for energy deposition in things that were already placed in the externally provided world.
BDSSDEnergyDepositionGlobal * EnergyDepositionWorld() const
SD for energy deposition in the world volume.
BDSSDEnergyDeposition * EnergyDepositionVacuum() const
SD for energy deposition in vacuum volumes.
const std::vector< G4String > & ExtraSamplerWithFilterNamesComplete() const
Access a vector of names of extra samplers so we can identify the hits collections.
static G4int eventNumber
Externally accessible counter for event number. Set in BeginOfEventAction.
Information about a registered sampler.
static BDSSamplerRegistry * Instance()
Accessor for registry.
const BDSSamplerPlacementRecord & GetInfo(G4int index) const
Accessor.
Double map of trajectories to bitset of which filters matched whether to store them.
A summary trajectory object of a loss point.
A Point in a trajectory with extra information.
G4double PostPosR() const
Return the transverse local radius in x,y.
Trajectory information for only the primary.
Trajectory information from track including last scatter etc.
virtual int GetPointEntries() const
Get number of trajectory points in this trajectory.
virtual G4VTrajectoryPoint * GetPoint(G4int i) const
Access a point - use this class's container.
void SetParent(BDSTrajectory *parentIn)
Record the parent trajectory.
static G4int nCallsThisEvent
Counter for understanding occurence.
G4double GetMemoryUsage()
Get the current memory usage.
G4bool VerboseThisEvent(G4int eventIndex, G4int eventStart, G4int eventStop)
Logic of whether this event should be verbose or not. Code here so it's not duplicated.
G4int VerboseEventStop(G4int verboseEventStart, G4int verboseEventContinueFor)