18#include "BDSAuxiliaryNavigator.hh"
20#include "BDSEventAction.hh"
21#include "BDSEventInfo.hh"
22#include "BDSGlobalConstants.hh"
23#include "BDSHitEnergyDeposition.hh"
24#include "BDSHitEnergyDepositionExtra.hh"
25#include "BDSHitEnergyDepositionGlobal.hh"
26#include "BDSHitSampler.hh"
27#include "BDSHitThinThing.hh"
28#include "BDSOutput.hh"
29#include "BDSModulator.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 "BDSTrajectoryPointHit.hh"
49#include "BDSTrajectoryPrimary.hh"
50#include "BDSUtilities.hh"
51#include "BDSWrapperMuonSplitting.hh"
55#include "G4EventManager.hh"
56#include "G4HCofThisEvent.hh"
57#include "G4PrimaryVertex.hh"
58#include "G4PrimaryParticle.hh"
59#include "G4PropagatorInField.hh"
61#include "G4SDManager.hh"
62#include "G4StackManager.hh"
63#include "G4THitsMap.hh"
64#include "G4TrajectoryContainer.hh"
65#include "G4TrajectoryPoint.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 currentEventIndex(0),
106 verboseEventBDSIM = globals->VerboseEventBDSIM();
107 verboseEventStart = globals->VerboseEventStart();
109 storeTrajectory = globals->StoreTrajectory();
110 storeTrajectoryAll = globals->StoreTrajectoryAll();
111 storeTrajectorySecondary = globals->StoreTrajectorySecondaryParticles();
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();
149 BDSAuxiliaryNavigator::ResetNavigatorStates();
150 BDSNavigatorPlacements::ResetNavigatorStates();
153 G4Navigator* trackingNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking();
154 trackingNavigator->ResetStackAndState();
155 G4TransportationManager* tm = G4TransportationManager::GetTransportationManager();
157 for (
auto it = tm->GetActiveNavigatorsIterator(); i < (int)tm->GetNoActiveNavigators(); it++)
158 {(*it)->ResetStackAndState(); i++;}
159 tm->GetPropagatorInField()->ClearPropagatorState();
164 G4bool samplerWorldExists =
false;
165 std::vector<G4VPhysicalVolume*>::iterator worldIterator = tm->GetWorldsIterator();
166 for (G4int iw = 0; iw < (G4int)tm->GetNoWorlds(); iw++)
168 samplerWorldExists = samplerWorldExists || (*worldIterator)->GetName() ==
"SamplerWorld_main";
171 if (samplerWorldExists)
173 auto swtracker = tm->GetNavigator(
"SamplerWorld_main");
175 {swtracker->ResetStackAndState();}
177 fpEventManager->GetStackManager()->clear();
183 G4int currentEventID = evt->GetEventID();
186 if (currentEventID % printModulo == 0)
187 {G4cout <<
"---> Begin of event: " << currentEventID << G4endl;}
188 if (verboseEventBDSIM)
189 {G4cout << __METHOD_NAME__ <<
"event #" << currentEventID << G4endl;}
194 G4SDManager* g4SDMan = G4SDManager::GetSDMpointer();
210 for (
const auto& name : scorerNames)
213 for (
const auto& name : extraSamplerWithFilterNames)
216 for (
const auto& name : extraSamplerCylinderWithFilterNames)
219 for (
const auto& name : extraSamplerSphereWithFilterNames)
222 FireLaserCompton=
true;
230 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
231 starts = (G4double)ms.count()/1000.0;
234void BDSEventAction::EndOfEventAction(
const G4Event* evt)
237 auto flagsCache(G4cout.flags());
239 G4int event_number = evt->GetEventID();
240 G4bool verboseThisEvent = verboseEventBDSIM &&
BDS::VerboseThisEvent(event_number, verboseEventStart, verboseEventStop);
242 verboseThisEvent =
true;
244 const G4int nChar = 50;
245 if (verboseThisEvent)
246 {G4cout << __METHOD_NAME__ <<
"processing end of event"<<G4endl;}
254 auto cpuEndTime = std::clock();
255 G4float durationCPU =
static_cast<G4float
>(cpuEndTime -
cpuStartTime) / CLOCKS_PER_SEC;
263 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
264 stops = (G4double)ms.count()/1000.0;
274 if (verboseThisEvent)
278 G4HCofThisEvent* HCE = evt->GetHCofThisEvent();
282 std::vector<shc*> allSamplerHits;
285 {allSamplerHits.push_back(SampHC);}
289 {allSamplerHits.push_back(
dynamic_cast<shc*
>(HCE->GetHC(nameIndex.second)));}
292 std::vector<shcc*> allSamplerCylinderHits;
295 {allSamplerCylinderHits.push_back(hitsCylinder);}
299 {allSamplerCylinderHits.push_back(
dynamic_cast<shcc*
>(HCE->GetHC(nameIndex.second)));}
302 std::vector<shcs*> allSamplerSphereHits;
305 {allSamplerSphereHits.push_back(hitsSphere);}
309 {allSamplerSphereHits.push_back(
dynamic_cast<shcs*
>(HCE->GetHC(nameIndex.second)));}
314 echc* eCounterHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterID)) : nullptr;
315 echc* eCounterFullHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterFullID)) : nullptr;
316 echc* eCounterVacuumHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterVacuumID)) : nullptr;
317 echc* eCounterTunnelHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterTunnelID)) : nullptr;
321 ecghc* eCounterWorldHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
eCounterWorldID)) : nullptr;
323 ecghc* worldExitHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
worldExitCollID)) : nullptr;
327 aihc* apertureImpactHits = HCE ?
dynamic_cast<aihc*
>(HCE->GetHC(
apertureCollID)) : nullptr;
331 tthc* thinThingHits = HCE ?
dynamic_cast<tthc*
>(HCE->GetHC(
thinThingCollID)) : nullptr;
333 std::map<G4String, G4THitsMap<G4double>*> scorerHits;
337 {scorerHits[nameIndex.first] =
dynamic_cast<G4THitsMap<G4double>*
>(HCE->GetHC(nameIndex.second));}
347 if (verboseThisEvent)
348 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition hits: " << eCounterHits->entries() << G4endl;}
349 if (eCounterHits->entries() > 0)
352 if (eCounterFullHits)
354 if (verboseThisEvent)
355 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition full hits: " << eCounterFullHits->entries() << G4endl;}
356 if (eCounterFullHits->entries() > 0)
359 if (eCounterTunnelHits)
361 if (verboseThisEvent)
362 {G4cout << std::left << std::setw(nChar) <<
"Tunnel energy deposition hits: " << eCounterTunnelHits->entries() << G4endl;}
363 if (eCounterTunnelHits->entries() > 0)
369 chc* collimatorHits = HCE ?
dynamic_cast<chc*
>(HCE->GetHC(
collimatorCollID)) : nullptr;
371 if (verboseThisEvent)
373 if (eCounterVacuumHits)
374 {G4cout << std::left << std::setw(nChar) <<
"Vacuum energy deposition hits: " << eCounterVacuumHits->entries() << G4endl;}
375 if (eCounterWorldHits)
376 {G4cout << std::left << std::setw(nChar) <<
"World energy deposition hits: " << eCounterWorldHits->entries() << G4endl;}
377 if (eCounterWorldContentsHits)
378 {G4cout << std::left << std::setw(nChar) <<
"World contents energy deposition hits: " << eCounterWorldContentsHits->entries() << G4endl;}
380 {G4cout << std::left << std::setw(nChar) <<
"World exit hits: " << worldExitHits->entries() << G4endl;}
382 {G4cout << std::left << std::setw(nChar) <<
"Collimator hits: " << collimatorHits->entries() << G4endl;}
386 std::vector<const BDSTrajectoryPointHit*> primaryHits;
387 std::vector<const BDSTrajectoryPointHit*> primaryLosses;
388 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
391 if (verboseThisEvent)
392 {G4cout << std::left << std::setw(nChar) <<
"Trajectories: " << trajCont->size() << G4endl;}
396 std::vector<const BDSTrajectoryPrimary*> primaryTrajectories;
398 {primaryTrajectories.push_back(kv.second);}
399 primaryHits = BDSHitThinThing::ResolvePossibleEarlierThinHits(primaryTrajectories, thinThingHits);
402 verboseEventBDSIM || verboseThisEvent,
409 evt->GetPrimaryVertex(),
411 allSamplerCylinderHits,
412 allSamplerSphereHits,
419 eCounterWorldContentsHits,
423 interestingTrajectories,
431 if (evntsPerNtuple>0 && (event_number+1)%evntsPerNtuple == 0)
439 if (verboseThisEvent)
441 G4cout << __METHOD_NAME__ <<
"end of event action done" << G4endl;
442 G4cout <<
"Energy deposition pool size: " << BDSAllocatorEnergyDeposition.GetAllocatedSize() << G4endl;
443 G4cout <<
"Energy deposition extra pool size: " << BDSAllocatorEnergyDepositionExtra.GetAllocatedSize() << G4endl;
444 G4cout <<
"Collimator hits pool size: " << BDSAllocatorCollimator.GetAllocatedSize() << G4endl;
445 G4cout <<
"Trajectory pool size: " << bdsTrajectoryAllocator.GetAllocatedSize() << G4endl;
446 G4cout <<
"Trajectory point pool size bdsim: " << bdsTrajectoryPointAllocator.GetAllocatedSize() << G4endl;
447#if G4VERSION_NUMBER > 1049
448 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator()->GetAllocatedSize() << G4endl;
450 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator->GetAllocatedSize() << G4endl;
452 G4cout <<
"Trajectory point primary pool size: " << bdsTrajectoryPrimaryAllocator.GetAllocatedSize() << G4endl;
455 delete interestingTrajectories;
456 for (
auto& p : primaryLosses)
458 for (
auto& p : primaryHits)
461 G4cout.flags(flagsCache);
468 const std::vector<BDSHitsCollectionSampler*>& allSamplerHits,
471 auto flagsCache(G4cout.flags());
472 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
475 std::map<BDSTrajectory*, bool> interestingTraj;
476 std::map<BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> > trajectoryFilters;
481 TrajectoryVector* trajVec = trajCont->GetVector();
482 std::vector<BDSTrajectory*> trajVecBDS;
483 trajVecBDS.reserve(trajVec->size());
484 std::transform(trajVec->begin(), trajVec->end(), std::back_inserter(trajVecBDS),
485 [](G4VTrajectory* a) { return static_cast<BDSTrajectory*>(a); });
488 std::map<int, BDSTrajectory*> trackIDToTrajectory;
489 for (
auto* tr : trajVecBDS)
490 {trackIDToTrajectory[tr->GetTrackID()] = tr;}
491 trackIDToTrajectory[0] =
nullptr;
494 for (
auto* tr : trajVecBDS)
495 {G4cout << tr->GetTrackID() <<
" " << tr->GetParentID() << G4endl;}
499 std::map<BDSTrajectory*, int> depthMap;
500 for (
auto* tr : trajVecBDS)
505 while (ct->GetParentID() != 0)
507 ct = trackIDToTrajectory[ct->GetParentID()];
510 depthMap[tr] = depth;
512 tr->SetParent(trackIDToTrajectory[tr->GetParentID()]);
519 for (
auto* tr : trajVecBDS)
521 std::bitset<BDS::NTrajectoryFilters> filters;
522 G4int parentID = tr->GetParentID();
526 {filters[BDSTrajectoryFilter::primary] =
true;}
529 if (storeTrajectorySecondary)
530 {filters[BDSTrajectoryFilter::secondary] =
true;}
535 {filters[BDSTrajectoryFilter::energyThreshold] =
true;}
540 G4String particleName = tr->GetParticleName();
541 G4int particleID = tr->GetPDGEncoding();
542 G4String particleIDStr = G4String(std::to_string(particleID));
546 if ((found1 != std::string::npos) || found2)
547 {filters[BDSTrajectoryFilter::particle] =
true;}
552 {filters[BDSTrajectoryFilter::depth] =
true;}
560 {filters[BDSTrajectoryFilter::minimumZ] =
true;}
564 {filters[BDSTrajectoryFilter::maximumR] =
true;}
566 filters.any() ? nYes++ : nNo++;
567 interestingTraj.insert(std::pair<BDSTrajectory*, bool>(tr, filters.any()));
568 trajectoryFilters.insert(std::pair<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >(tr, filters));
576 G4int nHits = (G4int)eCounterHits->entries();
578 for (G4int i = 0; i < nHits; i++)
580 hit = (*eCounterHits)[i];
581 double dS = hit->GetSHit();
584 if (dS >= v.first && dS <= v.second)
587 if (!interestingTraj[trajToStore])
592 interestingTraj[trajToStore] =
true;
593 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
599 if (eCounterFullHits)
601 G4int nHits = (G4int)eCounterFullHits->entries();
603 for (G4int i = 0; i < nHits; i++)
605 hit = (*eCounterFullHits)[i];
606 double dS = hit->GetSHit();
609 if (dS >= v.first && dS <= v.second)
612 if (!interestingTraj[trajToStore])
617 interestingTraj[trajToStore] =
true;
618 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
627 for (
const auto& SampHC : allSamplerHits)
631 for (G4int i = 0; i < (G4int)SampHC->entries(); i++)
633 G4int samplerIndex = (*SampHC)[i]->samplerID;
638 BDSTrajectory* trajToStore = trackIDToTrajectory[(*SampHC)[i]->trackID];
639 if (!interestingTraj[trajToStore])
644 interestingTraj[trajToStore] =
true;
645 trajectoryFilters[trajToStore][BDSTrajectoryFilter::sampler] =
true;
657 for (
auto& trajFlag : interestingTraj)
664 auto filterMatch = trajectoryFilters[trajFlag.first] &
trajFiltersSet;
666 {trajFlag.second =
false;}
674 for (
auto i : interestingTraj)
682 {G4cout << std::left << std::setw(nChar) <<
"Trajectories for storage: " << nYes <<
" out of " << nYes + nNo << G4endl;}
685 G4cout.flags(flagsCache);
691 std::map<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >& trajectoryFilters)
const
693 BDSTrajectory* parentTrajectory = trajectoryToConnect->GetParent();
694 if (parentTrajectory)
696 interestingTraj[parentTrajectory] =
true;
697 trajectoryFilters[parentTrajectory][BDSTrajectoryFilter::connect] =
true;
706 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.
static void SetEventIndex(G4int eventIndexIn)
Setter for the static counter so we can trace where it's used.
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.
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)