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 "BDSModulator.hh"
31#include "BDSNavigatorPlacements.hh"
32#include "BDSSamplerRegistry.hh"
33#include "BDSSamplerPlacementRecord.hh"
34#include "BDSSDApertureImpacts.hh"
35#include "BDSSDCollimator.hh"
36#include "BDSSDEnergyDeposition.hh"
37#include "BDSSDEnergyDepositionGlobal.hh"
38#include "BDSSDManager.hh"
39#include "BDSSDSampler.hh"
40#include "BDSSDSamplerCylinder.hh"
41#include "BDSSDSamplerSphere.hh"
42#include "BDSSDTerminator.hh"
43#include "BDSSDThinThing.hh"
44#include "BDSSDVolumeExit.hh"
45#include "BDSStackingAction.hh"
46#include "BDSTrajectoriesToStore.hh"
47#include "BDSTrajectory.hh"
48#include "BDSTrajectoryFilter.hh"
49#include "BDSTrajectoryPointHit.hh"
50#include "BDSTrajectoryPrimary.hh"
51#include "BDSUtilities.hh"
52#include "BDSWrapperMuonSplitting.hh"
56#include "G4EventManager.hh"
57#include "G4HCofThisEvent.hh"
58#include "G4PrimaryVertex.hh"
59#include "G4PrimaryParticle.hh"
60#include "G4PropagatorInField.hh"
62#include "G4SDManager.hh"
63#include "G4StackManager.hh"
64#include "G4THitsMap.hh"
65#include "G4TrajectoryContainer.hh"
66#include "G4TrajectoryPoint.hh"
67#include "G4TransportationManager.hh"
77using namespace std::chrono;
79G4bool FireLaserCompton;
81BDSEventAction::BDSEventAction(
BDSOutput* outputIn):
83 samplerCollID_plane(-1),
84 samplerCollID_cylin(-1),
85 samplerCollID_sphere(-1),
91 eCounterWorldContentsID(-1),
100 cpuStartTime(std::clock_t()),
101 primaryAbsorbedInCollimator(false),
102 currentEventIndex(0),
107 verboseEventBDSIM = globals->VerboseEventBDSIM();
108 verboseEventStart = globals->VerboseEventStart();
110 storeTrajectory = globals->StoreTrajectory();
111 storeTrajectoryAll = globals->StoreTrajectoryAll();
112 storeTrajectorySecondary = globals->StoreTrajectorySecondaryParticles();
113 trajectoryFilterLogicAND = globals->TrajectoryFilterLogicAND();
114 trajectoryEnergyThreshold = globals->StoreTrajectoryEnergyThreshold();
115 trajectoryCutZ = globals->TrajCutGTZ();
116 trajectoryCutR = globals->TrajCutLTR();
117 trajConnect = globals->TrajConnect();
118 trajParticleNameToStore = globals->StoreTrajectoryParticle();
119 trajParticleIDToStore = globals->StoreTrajectoryParticleID();
120 trajDepth = globals->StoreTrajectoryDepth();
121 trajSRangeToStore = globals->StoreTrajectoryELossSRange();
122 trajFiltersSet = globals->TrajectoryFiltersSet();
123 printModulo = globals->PrintModuloEvents();
126 std::stringstream iss(trajParticleIDToStore);
129 {trajParticleIDIntToStore.push_back(i);}
132BDSEventAction::~BDSEventAction()
135void BDSEventAction::BeginOfEventAction(
const G4Event* evt)
138 G4cout << __METHOD_NAME__ <<
"processing begin of event action" << G4endl;
143 BDSStackingAction::energyKilled = 0;
145 currentEventIndex = evt->GetEventID();
150 BDSAuxiliaryNavigator::ResetNavigatorStates();
151 BDSNavigatorPlacements::ResetNavigatorStates();
154 G4Navigator* trackingNavigator = G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking();
155 trackingNavigator->ResetStackAndState();
156 G4TransportationManager* tm = G4TransportationManager::GetTransportationManager();
158 for (
auto it = tm->GetActiveNavigatorsIterator(); i < (
int)tm->GetNoActiveNavigators(); it++)
159 {(*it)->ResetStackAndState(); i++;}
160 tm->GetPropagatorInField()->ClearPropagatorState();
165 G4bool samplerWorldExists =
false;
166 std::vector<G4VPhysicalVolume*>::iterator worldIterator = tm->GetWorldsIterator();
167 for (G4int iw = 0; iw < (G4int)tm->GetNoWorlds(); iw++)
169 samplerWorldExists = samplerWorldExists || (*worldIterator)->GetName() ==
"SamplerWorld_main";
172 if (samplerWorldExists)
174 auto swtracker = tm->GetNavigator(
"SamplerWorld_main");
176 {swtracker->ResetStackAndState();}
178 fpEventManager->GetStackManager()->clear();
184 G4int currentEventID = evt->GetEventID();
187 if (currentEventID % printModulo == 0)
188 {G4cout <<
"---> Begin of event: " << currentEventID << G4endl;}
189 if (verboseEventBDSIM)
190 {G4cout << __METHOD_NAME__ <<
"event #" << currentEventID << G4endl;}
195 G4SDManager* g4SDMan = G4SDManager::GetSDMpointer();
211 for (
const auto& name : scorerNames)
214 for (
const auto& name : extraSamplerWithFilterNames)
217 for (
const auto& name : extraSamplerCylinderWithFilterNames)
220 for (
const auto& name : extraSamplerSphereWithFilterNames)
223 FireLaserCompton=
true;
231 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
232 starts = (G4double)ms.count()/1000.0;
235void BDSEventAction::EndOfEventAction(
const G4Event* evt)
238 auto flagsCache(G4cout.flags());
240 G4int event_number = evt->GetEventID();
241 G4bool verboseThisEvent = verboseEventBDSIM &&
BDS::VerboseThisEvent(event_number, verboseEventStart, verboseEventStop);
243 verboseThisEvent =
true;
245 const G4int nChar = 50;
246 if (verboseThisEvent)
247 {G4cout << __METHOD_NAME__ <<
"processing end of event"<<G4endl;}
255 auto cpuEndTime = std::clock();
256 G4float durationCPU =
static_cast<G4float
>(cpuEndTime -
cpuStartTime) / CLOCKS_PER_SEC;
264 milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
265 stops = (G4double)ms.count()/1000.0;
275 if (verboseThisEvent)
279 G4HCofThisEvent* HCE = evt->GetHCofThisEvent();
283 std::vector<shc*> allSamplerHits;
286 {allSamplerHits.push_back(SampHC);}
290 {allSamplerHits.push_back(
dynamic_cast<shc*
>(HCE->GetHC(nameIndex.second)));}
293 std::vector<shcc*> allSamplerCylinderHits;
296 {allSamplerCylinderHits.push_back(hitsCylinder);}
300 {allSamplerCylinderHits.push_back(
dynamic_cast<shcc*
>(HCE->GetHC(nameIndex.second)));}
303 std::vector<shcs*> allSamplerSphereHits;
306 {allSamplerSphereHits.push_back(hitsSphere);}
310 {allSamplerSphereHits.push_back(
dynamic_cast<shcs*
>(HCE->GetHC(nameIndex.second)));}
315 echc* eCounterHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterID)) :
nullptr;
316 echc* eCounterFullHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterFullID)) :
nullptr;
317 echc* eCounterVacuumHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterVacuumID)) :
nullptr;
318 echc* eCounterTunnelHits = HCE ?
dynamic_cast<echc*
>(HCE->GetHC(
eCounterTunnelID)) :
nullptr;
322 ecghc* eCounterWorldHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
eCounterWorldID)) :
nullptr;
324 ecghc* worldExitHits = HCE ?
dynamic_cast<ecghc*
>(HCE->GetHC(
worldExitCollID)) :
nullptr;
328 aihc* apertureImpactHits = HCE ?
dynamic_cast<aihc*
>(HCE->GetHC(
apertureCollID)) :
nullptr;
332 tthc* thinThingHits = HCE ?
dynamic_cast<tthc*
>(HCE->GetHC(
thinThingCollID)) :
nullptr;
334 std::map<G4String, G4THitsMap<G4double>*> scorerHits;
338 {scorerHits[nameIndex.first] =
dynamic_cast<G4THitsMap<G4double>*
>(HCE->GetHC(nameIndex.second));}
348 if (verboseThisEvent)
349 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition hits: " << eCounterHits->entries() << G4endl;}
350 if (eCounterHits->entries() > 0)
353 if (eCounterFullHits)
355 if (verboseThisEvent)
356 {G4cout << std::left << std::setw(nChar) <<
"Energy deposition full hits: " << eCounterFullHits->entries() << G4endl;}
357 if (eCounterFullHits->entries() > 0)
360 if (eCounterTunnelHits)
362 if (verboseThisEvent)
363 {G4cout << std::left << std::setw(nChar) <<
"Tunnel energy deposition hits: " << eCounterTunnelHits->entries() << G4endl;}
364 if (eCounterTunnelHits->entries() > 0)
370 chc* collimatorHits = HCE ?
dynamic_cast<chc*
>(HCE->GetHC(
collimatorCollID)) :
nullptr;
372 if (verboseThisEvent)
374 if (eCounterVacuumHits)
375 {G4cout << std::left << std::setw(nChar) <<
"Vacuum energy deposition hits: " << eCounterVacuumHits->entries() << G4endl;}
376 if (eCounterWorldHits)
377 {G4cout << std::left << std::setw(nChar) <<
"World energy deposition hits: " << eCounterWorldHits->entries() << G4endl;}
378 if (eCounterWorldContentsHits)
379 {G4cout << std::left << std::setw(nChar) <<
"World contents energy deposition hits: " << eCounterWorldContentsHits->entries() << G4endl;}
381 {G4cout << std::left << std::setw(nChar) <<
"World exit hits: " << worldExitHits->entries() << G4endl;}
383 {G4cout << std::left << std::setw(nChar) <<
"Collimator hits: " << collimatorHits->entries() << G4endl;}
387 std::vector<const BDSTrajectoryPointHit*> primaryHits;
388 std::vector<const BDSTrajectoryPointHit*> primaryLosses;
389 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
392 if (verboseThisEvent)
393 {G4cout << std::left << std::setw(nChar) <<
"Trajectories: " << trajCont->size() << G4endl;}
397 std::vector<const BDSTrajectoryPrimary*> primaryTrajectories;
399 {primaryTrajectories.push_back(kv.second);}
400 primaryHits = BDSHitThinThing::ResolvePossibleEarlierThinHits(primaryTrajectories, thinThingHits);
403 verboseEventBDSIM || verboseThisEvent,
410 evt->GetPrimaryVertex(),
412 allSamplerCylinderHits,
413 allSamplerSphereHits,
420 eCounterWorldContentsHits,
424 interestingTrajectories,
432 if (evntsPerNtuple>0 && (event_number+1)%evntsPerNtuple == 0)
440 if (verboseThisEvent)
442 G4cout << __METHOD_NAME__ <<
"end of event action done" << G4endl;
443 G4cout <<
"Energy deposition pool size: " << BDSAllocatorEnergyDeposition.GetAllocatedSize() << G4endl;
444 G4cout <<
"Energy deposition extra pool size: " << BDSAllocatorEnergyDepositionExtra.GetAllocatedSize() << G4endl;
445 G4cout <<
"Collimator hits pool size: " << BDSAllocatorCollimator.GetAllocatedSize() << G4endl;
446 G4cout <<
"Trajectory pool size: " << bdsTrajectoryAllocator.GetAllocatedSize() << G4endl;
447 G4cout <<
"Trajectory point pool size bdsim: " << bdsTrajectoryPointAllocator.GetAllocatedSize() << G4endl;
448#if G4VERSION_NUMBER > 1049
449 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator()->GetAllocatedSize() << G4endl;
451 G4cout <<
"Trajectory point pool size: " << aTrajectoryPointAllocator->GetAllocatedSize() << G4endl;
453 G4cout <<
"Trajectory point primary pool size: " << bdsTrajectoryPrimaryAllocator.GetAllocatedSize() << G4endl;
456 delete interestingTrajectories;
457 for (
auto& p : primaryLosses)
459 for (
auto& p : primaryHits)
462 G4cout.flags(flagsCache);
469 const std::vector<BDSHitsCollectionSampler*>& allSamplerHits,
472 auto flagsCache(G4cout.flags());
473 G4TrajectoryContainer* trajCont = evt->GetTrajectoryContainer();
476 std::map<BDSTrajectory*, bool> interestingTraj;
477 std::map<BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> > trajectoryFilters;
481 TrajectoryVector* trajVec = trajCont->GetVector();
484 std::map<int, BDSTrajectory*> trackIDMap;
485 std::map<BDSTrajectory*, int> depthMap;
486 for (
auto iT1 : *trajVec)
491 trackIDMap[traj->GetTrackID()] = traj;
494 G4int depth = traj->GetParentID() == 0 ? 0 : depthMap.at(trackIDMap.at(traj->GetParentID())) + 1;
495 traj->SetDepth(depth);
496 if (traj->GetParentID() == 0)
497 {depthMap[traj] = 0;}
499 {depthMap[traj] = depthMap.at(trackIDMap.at(traj->GetParentID())) + 1;}
503 for (
auto iT1 : *trajVec)
508 traj->
SetParent(trackIDMap[iT1->GetParentID()]);
515 for (
auto iT1 : *trajVec)
517 std::bitset<BDS::NTrajectoryFilters> filters;
520 G4int parentID = traj->GetParentID();
524 {filters[BDSTrajectoryFilter::primary] =
true;}
527 if (storeTrajectorySecondary)
528 {filters[BDSTrajectoryFilter::secondary] =
true;}
534 {filters[BDSTrajectoryFilter::energyThreshold] =
true;}
539 G4String particleName = traj->GetParticleName();
540 G4int particleID = traj->GetPDGEncoding();
541 G4String particleIDStr = G4String(std::to_string(particleID));
545 if ((found1 != std::string::npos) || found2)
546 {filters[BDSTrajectoryFilter::particle] =
true;}
551 {filters[BDSTrajectoryFilter::depth] =
true;}
559 {filters[BDSTrajectoryFilter::minimumZ] =
true;}
563 {filters[BDSTrajectoryFilter::maximumR] =
true;}
565 filters.any() ? nYes++ : nNo++;
566 interestingTraj.insert(std::pair<BDSTrajectory*, bool>(traj, filters.any()));
567 trajectoryFilters.insert(std::pair<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >(traj, filters));
575 G4int nHits = (G4int)eCounterHits->entries();
577 for (G4int i = 0; i < nHits; i++)
579 hit = (*eCounterHits)[i];
580 double dS = hit->GetSHit();
583 if ( dS >= v.first && dS <= v.second)
586 if (!interestingTraj[trajToStore])
591 interestingTraj[trajToStore] =
true;
592 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
598 if (eCounterFullHits)
600 G4int nHits = (G4int)eCounterFullHits->entries();
602 for (G4int i = 0; i < nHits; i++)
604 hit = (*eCounterFullHits)[i];
605 double dS = hit->GetSHit();
608 if ( dS >= v.first && dS <= v.second)
611 if (!interestingTraj[trajToStore])
616 interestingTraj[trajToStore] =
true;
617 trajectoryFilters[trajToStore][BDSTrajectoryFilter::elossSRange] =
true;
626 for (
const auto& SampHC : allSamplerHits)
630 for (G4int i = 0; i < (G4int)SampHC->entries(); i++)
632 G4int samplerIndex = (*SampHC)[i]->samplerID;
637 BDSTrajectory* trajToStore = trackIDMap[(*SampHC)[i]->trackID];
638 if (!interestingTraj[trajToStore])
643 interestingTraj[trajToStore] =
true;
644 trajectoryFilters[trajToStore][BDSTrajectoryFilter::sampler] =
true;
656 for (
auto& trajFlag : interestingTraj)
663 auto filterMatch = trajectoryFilters[trajFlag.first] &
trajFiltersSet;
665 {trajFlag.second =
false;}
673 for (
auto i : interestingTraj)
681 {G4cout << std::left << std::setw(nChar) <<
"Trajectories for storage: " << nYes <<
" out of " << nYes + nNo << G4endl;}
683 G4cout.flags(flagsCache);
689 std::map<
BDSTrajectory*, std::bitset<BDS::NTrajectoryFilters> >& trajectoryFilters)
const
691 BDSTrajectory* parentTrajectory = trajectoryToConnect->GetParent();
692 if (parentTrajectory)
694 interestingTraj[parentTrajectory] =
true;
695 trajectoryFilters[parentTrajectory][BDSTrajectoryFilter::connect] =
true;
704 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.
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)