19#include "BDSAcceleratorModel.hh"
20#include "BDSBeamline.hh"
21#include "BDSBeamlineElement.hh"
22#include "BDSBLMRegistry.hh"
24#include "BDSEventInfo.hh"
25#include "BDSException.hh"
26#include "BDSGlobalConstants.hh"
27#include "BDSHistBinMapper.hh"
28#include "BDSHitApertureImpact.hh"
29#include "BDSHitCollimator.hh"
30#include "BDSHitEnergyDeposition.hh"
31#include "BDSHitEnergyDepositionGlobal.hh"
32#include "BDSHitSampler.hh"
33#include "BDSHitSamplerCylinder.hh"
34#include "BDSHitSamplerSphere.hh"
35#include "BDSHitSamplerLink.hh"
36#include "BDSOutput.hh"
37#include "BDSOutputROOTEventAperture.hh"
38#include "BDSOutputROOTEventBeam.hh"
39#include "BDSOutputROOTEventCollimator.hh"
40#include "BDSOutputROOTEventCavityInfo.hh"
41#include "BDSOutputROOTEventCollimatorInfo.hh"
42#include "BDSOutputROOTEventCoords.hh"
43#include "BDSOutputROOTEventLossWorld.hh"
44#include "BDSOutputROOTEventHeader.hh"
45#include "BDSOutputROOTEventHistograms.hh"
46#include "BDSOutputROOTEventInfo.hh"
47#include "BDSOutputROOTEventLoss.hh"
48#include "BDSOutputROOTEventModel.hh"
49#include "BDSOutputROOTEventOptions.hh"
50#include "BDSOutputROOTEventRunInfo.hh"
51#include "BDSOutputROOTEventSampler.hh"
52#include "BDSOutputROOTEventSamplerC.hh"
53#include "BDSOutputROOTEventSamplerS.hh"
54#include "BDSOutputROOTEventTrajectory.hh"
55#include "BDSOutputROOTParticleData.hh"
56#include "BDSParticleDefinition.hh"
57#include "BDSPrimaryVertexInformation.hh"
58#include "BDSPrimaryVertexInformationV.hh"
59#include "BDSScorerHistogramDef.hh"
60#include "BDSSDManager.hh"
61#include "BDSStackingAction.hh"
62#include "BDSTrajectoriesToStore.hh"
63#include "BDSTrajectoryPoint.hh"
64#include "BDSTrajectoryPointHit.hh"
65#include "BDSUtilities.hh"
68#include "G4ParticleDefinition.hh"
69#include "G4PrimaryParticle.hh"
70#include "G4PrimaryVertex.hh"
71#include "G4THitsMap.hh"
72#include "G4Version.hh"
77#include "parser/beamBase.h"
78#include "parser/optionsBase.h"
88#include "CLHEP/Units/SystemOfUnits.h"
91 "Event",
"Histos",
"Info",
"Primary",
"PrimaryGlobal",
92 "Eloss",
"ElossVacuum",
"ElossTunnel",
"ElossWorld",
"ElossWorldExit",
94 "PrimaryFirstHit",
"PrimaryLastHit",
"Trajectory",
"ApertureImpacts"
98 const G4String& fileExtensionIn,
99 G4int fileNumberOffset):
101 baseFileName(baseFileNameIn),
102 fileExtension(fileExtensionIn),
103 outputFileNumber(fileNumberOffset),
108 energyDepositedVacuum(0),
109 energyDepositedWorld(0),
110 energyDepositedWorldContents(0),
111 energyDepositedTunnel(0),
112 energyImpactingAperture(0),
113 energyImpactingApertureKinetic(0),
115 energyWorldExitKinetic(0),
116 nCollimatorsInteracted(0)
160 if (g->StoreSamplerAll())
239 &materialIDToNameUnique,
247 const G4int turnsTaken)
249 const G4VUserPrimaryVertexInformation* vertexInfo = vertex->GetUserInformation();
252 primary->Fill(vertexInfoBDS->primaryVertex.local,
253 vertexInfoBDS->momentum,
254 vertexInfoBDS->charge,
255 vertexInfoBDS->pdgID,
257 vertexInfoBDS->primaryVertex.beamlineIndex,
258 vertexInfoBDS->nElectrons,
260 vertexInfoBDS->rigidity);
261 primaryGlobal->
Fill(vertexInfoBDS->primaryVertex.global);
265 primary->Fill(vertexInfoBDSV, turnsTaken);
266 primaryGlobal->
Fill(vertexInfoBDSV);
268 auto nextLinkedVertex = vertex->GetNext();
269 if (nextLinkedVertex)
276 G4bool isIon = particle->
IsAnIon();
293 &isIon, &ionA, &ionZ);
294 primaryGlobal->
Fill(coords.global);
300 const G4PrimaryVertex* vertex,
301 const std::vector<BDSHitsCollectionSampler*>& samplerHitsPlane,
302 const std::vector<BDSHitsCollectionSamplerCylinder*>& samplerHitsCylinder,
303 const std::vector<BDSHitsCollectionSamplerSphere*>& samplerHitsSphere,
309 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorld,
310 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorldContents,
311 const BDSHitsCollectionEnergyDepositionGlobal* worldExitHits,
312 const std::vector<const BDSTrajectoryPointHit*>& primaryHits,
313 const std::vector<const BDSTrajectoryPointHit*>& primaryLosses,
315 const BDSHitsCollectionCollimator* collimatorHits,
316 const BDSHitsCollectionApertureImpacts* apertureImpactHits,
318 const G4int turnsTaken)
336 FillSamplerCylinderHitsVector(samplerHitsCylinder);
337 FillSamplerSphereHitsVector(samplerHitsSphere);
344 if (energyLossVacuum)
346 if (energyLossTunnel)
352 if (energyLossWorldContents)
353 {
FillEnergyLoss(energyLossWorldContents, BDSOutput::LossType::worldcontents);}
383 unsigned long long int nOriginalEventsIn,
384 unsigned long long int nEventsRequestedIn,
385 unsigned long long int nEventsInOriginalDistrFileIn,
386 unsigned long long int nEventsDistrFileSkippedIn,
387 unsigned int distrFileLoopNTimesIn)
389 FillRunInfoAndUpdateHeader(info, nOriginalEventsIn, nEventsRequestedIn, nEventsInOriginalDistrFileIn, nEventsDistrFileSkippedIn, distrFileLoopNTimesIn);
402 out <<
"Protected names for output " << G4endl;
404 {out <<
"\"" << key <<
"\"" << G4endl;}
422 if (!globalConstants->OutputFileNameSet() || !globalConstants->Batch())
424 G4String original = newFileName;
425 G4int nTimeAppended = 1;
428 newFileName = original +
"-" + std::to_string(nTimeAppended);
436 G4cout << __METHOD_NAME__ <<
"Setting up new file: " << newFileName << G4endl;
449 if (!flatBeamline->
empty())
470 const G4double smax = sMaxHistograms / CLHEP::m;
472 G4cout << __METHOD_NAME__ <<
"histogram parameters calculated to be: " << G4endl;
473 G4cout <<
"s minimum: " << smin <<
" m" << G4endl;
474 G4cout <<
"s maximum: " << smax <<
" m" << G4endl;
475 G4cout <<
"# of bins: " <<
nbins << G4endl;
486 std::vector<G4double> binedges;
496 "Primary Hits per Element",
499 "Primary Loss per Element",
505 "Energy Loss per Element" ,
511 "Energy Loss in Vacuum",
514 "Energy Loss in Vacuum per Element" ,
521 "Primary aperture impacts",
536 "Energy Loss in Tunnel",
539 "Energy Loss in Tunnel per Element",
545 std::vector<G4String> collHistNames = {
"CollPhitsPE",
548 "CollPInteractedPE"};
549 std::vector<G4String> collHistDesciptions = {
"Primary Hits per Coll",
550 "Primary Loss per Coll",
551 "Energy Loss per Collimator",
552 "Primary Interacted per Collimator"};
553 for (G4int i = 0; i < (G4int)collHistNames.size(); i++)
556 collHistDesciptions[i],
566 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in x dimension - check options, xmin and xmax");}
568 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in y dimension - check options, ymin and ymax");}
570 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in z dimension - check options, zmin and zmax");}
571 if (g->NBinsX() <= 0)
572 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in x dimension of 3D scoring histogram - check option, nbinsx");}
573 if (g->NBinsY() <= 0)
574 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in y dimension of 3D scoring histogram - check option, nbinsx");}
575 if (g->NBinsZ() <= 0)
576 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in z dimension of 3D scoring histogram - check option, nbinsx");}
579 g->NBinsX(), g->XMin()/CLHEP::m, g->XMax()/CLHEP::m,
580 g->NBinsY(), g->YMin()/CLHEP::m, g->YMax()/CLHEP::m,
581 g->NBinsZ(), g->ZMin()/CLHEP::m, g->ZMax()/CLHEP::m);
587 if (!scorerHistogramDefs.empty())
589 for (
const auto& nameDef : scorerHistogramDefs)
591 const auto def = nameDef.second;
597 if (def.geometryType ==
"box")
600 def.nBinsX, def.xLow/CLHEP::m, def.xHigh/CLHEP::m,
601 def.nBinsY, def.yLow/CLHEP::m, def.yHigh/CLHEP::m,
602 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m);
604 else if (def.geometryType ==
"cylindrical")
607 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
608 def.nBinsPhi, 0, CLHEP::twopi,
609 def.nBinsR, def.rLow/CLHEP::m, def.rHigh/CLHEP::m);
613 histIndexToUnits3D[histID] = def.primitiveScorerUnitValue;
618 if (def.geometryType ==
"box")
620 histID =
Create4DHistogram(def.outputName+
"-"+def.eScale,def.outputName,def.eScale,def.eBinsEdges,
621 def.nBinsX, def.xLow/CLHEP::m, def.xHigh/CLHEP::m,
622 def.nBinsY, def.yLow/CLHEP::m, def.yHigh/CLHEP::m,
623 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
624 def.nBinsE, def.eLow/CLHEP::GeV, def.eHigh/CLHEP::GeV);
626 else if (def.geometryType ==
"cylindrical")
628 histID =
Create4DHistogram(def.outputName+
"-"+def.eScale, def.outputName, def.eScale,def.eBinsEdges,
629 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
630 def.nBinsPhi, 0, CLHEP::twopi,
631 def.nBinsR, def.rLow/CLHEP::m, def.rHigh/CLHEP::m,
632 def.nBinsE, def.eLow/CLHEP::GeV, def.eHigh/CLHEP::GeV);
636 histIndexToUnits4D[histID] = def.primitiveScorerUnitValue;
654 std::set<G4String> blmHistoNames;
655 std::map<G4String, G4String> psFullNameToPS;
656 for (
const auto& scorerNameComplete : psnamesc)
660 for (
const auto& scorerName : psnames)
664 blmHistoNames.insert(scorerName);
665 psFullNameToPS[scorerNameComplete] = scorerName;
673 for (
const auto &hn : blmHistoNames)
675 G4String blmHistName =
"BLM_" + hn;
679 for (
const auto& kv : psFullNameToPS)
701 G4double ek = BDSStackingAction::energyKilled / CLHEP::GeV;
716 for (
const auto& hc : hits)
720 if (!(hc->entries() > 0))
722 for (
int i = 0; i < (int) hc->entries(); i++)
725 G4int samplerID = hit->samplerID;
726 G4int samplerVectorIndex = samplerIDToIndexPlane[samplerID];
736 {sampler->FillIon();}
740void BDSOutput::FillSamplerCylinderHitsVector(
const std::vector<BDSHitsCollectionSamplerCylinder*>& hits)
742 for (
const auto& hc : hits)
746 if (!(hc->entries() > 0))
748 for (
int i = 0; i < (int) hc->entries(); i++)
751 G4int samplerID = hit->samplerID;
752 G4int samplerVectorIndex = samplerIDToIndexCylinder[samplerID];
761 for (
auto& sampler : samplerCTrees)
762 {sampler->FillIon();}
766void BDSOutput::FillSamplerSphereHitsVector(
const std::vector<BDSHitsCollectionSamplerSphere*>& hits)
768 for (
const auto& hc : hits)
772 if (!(hc->entries() > 0))
774 for (
int i = 0; i < (int) hc->entries(); i++)
777 G4int samplerID = hit->samplerID;
778 G4int samplerVectorIndex = samplerIDToIndexSphere[samplerID];
787 for (
auto& sampler : samplerSTrees)
788 {sampler->FillIon();}
795 if (!(hits->entries() > 0))
797 for (
int i = 0; i < (int)hits->entries(); i++)
800 G4int samplerID = hit->samplerID;
801 G4int samplerVectorIndex = samplerIDToIndexPlane[samplerID];
811 {sampler->FillIon();}
817 G4int nHits = (G4int)hits->entries();
820 for (G4int i = 0; i < nHits; i++)
823 G4int samplerID = hit->samplerID;
828 G4bool firstSampler =
true;
832 {firstSampler =
false;
continue;}
834 {sampler->FillIon();}
843 case BDSOutput::LossType::world:
844 case BDSOutput::LossType::worldexit:
845 case BDSOutput::LossType::worldcontents:
851 G4int nHits = (G4int)hits->entries();
856 case BDSOutput::LossType::world:
858 for (G4int i=0; i < nHits; i++)
867 case BDSOutput::LossType::worldexit:
869 for (G4int i = 0; i < nHits; i++)
879 case BDSOutput::LossType::worldcontents:
881 for (G4int i = 0; i < nHits; i++)
898 G4int nHits = (G4int)hits->entries();
903 case BDSOutput::LossType::energy:
907 for (G4int i = 0; i < nHits; i++)
910 G4double sHit = hit->GetSHit() / CLHEP::m;
911 G4double eW = hit->GetEnergyWeighted() / CLHEP::GeV;
917 runHistos->Fill1DHistogram(indELoss, sHit, eW);
918 evtHistos->Fill1DHistogram(indELoss, sHit, eW);
919 runHistos->Fill1DHistogram(indELossPE, sHit, eW);
920 evtHistos->Fill1DHistogram(indELossPE, sHit, eW);
925 case BDSOutput::LossType::vacuum:
929 for (G4int i = 0; i < nHits; i++)
932 G4double sHit = hit->GetSHit() / CLHEP::m;
933 G4double eW = hit->GetEnergyWeighted() / CLHEP::GeV;
939 evtHistos->Fill1DHistogram(indELossVacuum, sHit, eW);
940 runHistos->Fill1DHistogram(indELossVacuumPE, sHit, eW);
945 case BDSOutput::LossType::tunnel:
949 for (G4int i = 0; i < nHits; i++)
952 G4double sHit = hit->GetSHit() / CLHEP::m;
953 G4double eW = hit->GetEnergyWeighted() / CLHEP::GeV;
959 runHistos->Fill1DHistogram(indELossTunnel, sHit, eW);
960 evtHistos->Fill1DHistogram(indELossTunnel, sHit, eW);
961 runHistos->Fill1DHistogram(indELossTunnelPE, sHit, eW);
962 evtHistos->Fill1DHistogram(indELossTunnelPE, sHit, eW);
973 for (G4int i = 0; i < nHits; i++)
976 G4double sHit = hit->GetSHit() / CLHEP::m;
977 G4double eW = hit->GetEnergyWeighted() / CLHEP::GeV;
978 G4double x = hit->
Getx() / CLHEP::m;
979 G4double y = hit->
Gety() / CLHEP::m;
980 evtHistos->Fill3DHistogram(indScoringMap, x, y, sHit, eW);
981 runHistos->Fill3DHistogram(indScoringMap, x, y, sHit, eW);
987 (lossType == BDSOutput::LossType::energy) &&
994 for (
auto phit : primaryHits)
999 const G4double preStepSPosition = phit->point->GetPreS() / CLHEP::m;
1015 for (
auto ploss : primaryLosses)
1020 const G4double postStepSPosition = ploss->point->GetPostS() / CLHEP::m;
1041 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints)
1043 G4int nHits = (G4int)hits->entries();
1044 for (G4int i = 0; i < nHits; i++)
1056 if (!primaryLossPoints.empty())
1058 for (
auto primaryLossPoint : primaryLossPoints)
1060 if (primaryLossPoint->point->GetBeamLine() &&
nCollimators > 0)
1062 G4int lossPointBLInd = primaryLossPoint->point->GetBeamLineIndex();
1087 for (G4int i = 0; i < (G4int)
collimators.size(); i++)
1094 if (collimator->primaryInteracted)
1104 G4int nPrimaryImpacts = 0;
1105 G4int nHits = (G4int)hits->entries();
1107 for (G4int i = 0; i < nHits; i++)
1110 G4double eW = (hit->totalEnergy / CLHEP::GeV) * hit->weight;
1113 if (hit->parentID == 0)
1115 nPrimaryImpacts += 1;
1118 {
evtHistos->Fill1DHistogram(histIndex, hit->S / CLHEP::m);}
1130 for (
const auto& nameHitsMap : scorerHitsMap)
1133 if (nameHitsMap.second->GetSize() == 0)
1135 if (nameHitsMap.second->size() == 0)
1138 {G4cout << nameHitsMap.first <<
" empty" << G4endl;
continue;}
1150 {
return FillScorerHitsIndividualBLM(histogramDefName, hitMap);}
1161 for (
const auto& hit : *hitMap->GetMap())
1163 for (
const auto& hit : *hitMap)
1167 mapper.IJKLFromGlobal(hit.first, x,y,z,e);
1168 G4int rootGlobalIndex = (hist->GetBin(x + 1, y + 1, z + 1));
1182 for (
const auto& hit : *hitMap->GetMap())
1184 for (
const auto& hit : *hitMap)
1188 mapper.IJKLFromGlobal(hit.first, x,y,z,e);
1189 evtHistos->Set4DHistogramBinContent(histIndex, x, y, z, e - 1, *hit.second / unit);
1195void BDSOutput::FillScorerHitsIndividualBLM(
const G4String& histogramDefName,
1200 for (
const auto& hit : *hitMap->GetMap())
1202 for (const auto& hit : *hitMap)
1206 G4cout <<
"Filling hist " << histIndex <<
", bin: " << hit.first+1 <<
" value: " << *hit.second << G4endl;
1209 evtHistos->Fill1DHistogram(histIndex,hit.first, *hit.second / unit);
1210 runHistos->Fill1DHistogram(histIndex,hit.first, *hit.second / unit);
1215 unsigned long long int nOriginalEventsIn,
1216 unsigned long long int nEventsRequestedIn,
1217 unsigned long long int nEventsInOriginalDistrFileIn,
1218 unsigned long long int nEventsDistrFileSkippedIn,
1219 unsigned int distrFileLoopNTimesIn)
1233 const G4String& destinationName,
1234 const std::vector<G4int>& indices)
1242 for (
const auto index : indices)
1244 destinationEvt->SetBinContent(binIndex, sourceEvt->GetBinContent(index + 1));
1245 destinationEvt->SetBinError(binIndex, sourceEvt->GetBinError(index + 1));
1246 destinationRun->SetBinContent(binIndex, sourceRun->GetBinContent(index + 1));
1247 destinationRun->SetBinError(binIndex, sourceRun->GetBinError(index + 1));
const std::map< G4String, BDSScorerHistogramDef > & ScorerHistogramDefinitionsMap() const
Access all scorer histogram definitions.
const std::map< G4String, G4Transform3D > & ScorerMeshPlacementsMap() const
Access all scorer histogram definitions.
BDSBeamline * TunnelBeamline() const
Access the beam line containing all the tunnel segments.
const BDSBeamline * BeamlineMain() const
Accessor.
static BDSBLMRegistry * Instance()
Accessor for registry.
G4double GetSPositionEnd() const
Accessor.
A vector of BDSBeamlineElement instances - a beamline.
std::vector< G4double > GetEdgeSPositions() const
const BDSBeamlineElement * GetLastItem() const
Return a reference to the last element.
G4bool empty() const
Iterator mechanics.
Interface to store event information use G4 hooks.
const BDSOutputROOTEventInfo * GetInfo() const
Accessor.
General exception with possible name of object and message.
A class that holds global options and constants.
static BDSGlobalConstants * Instance()
Access method.
BDS::TrajectoryOptions StoreTrajectoryOptions() const
options that require some implementation.
G4bool UseImportanceSampling() const
Is importance sampling being used.
Mapping from axis indices to 1D index.
Snapshot of information for particle passing through a collimator.
Snapshot of information for particle passing through a collimator.
G4int collimatorIndex
Index of collimator the hit is in.
Information recorded for a step leaving a volume.
Information recorded for a single piece of energy deposition.
G4double Getx() const
Accessor for extra piece of information.
G4double Gety() const
Accessor for extra piece of information.
The information recorded from a particle impacting a sampler.
The information recorded from a particle impacting a link sampler.
The information recorded from a particle impacting a sampler.
The information recorded from a particle impacting a sampler.
Class to store all beam options for a BDSIM run.
void Fill(const BDSOutputROOTEventCoords *other)
Fill from another instance.
void AccumulateHistogram3D(G4int histoId, TH3D *otherHistogram)
Add the values from one supplied 3D histogram to another. Uses TH3-Add().
BDSBH4DBase * Get4DHistogram(int iHisto) const
Accessors.
TH1D * Get1DHistogram(int iHisto) const
Accessors.
void Set3DHistogramBinContent(G4int histoId, G4int globalBinID, G4double value)
TH3D * Get3DHistogram(int iHisto) const
Accessors.
double energyKilled
Total energy of killed particles that weren't in a sensitive volume.
double energyWorldExitKinetic
Total kinetic energy leaving the world.
double energyWorldExit
Total energy leaving the world.
double energyDepositedWorldContents
Total energy deposited in the world contents for this event.
double energyImpactingApertureKinetic
Total kinetic energy impacting the aperture.
double energyDepositedWorld
Total energy deposited in the world for this event.
double energyDepositedTunnel
Total energy deposited in the tunnel for this event.
double energyDepositedVacuum
Total energy deposited in vacuum volumes.
int nCollimatorsInteracted
Number of collimators primary interacted with.
double energyTotal
Sum of above 5 variables that totals all energy.
double energyDeposited
Total energy deposited in machine (not world or tunnel).
double energyImpactingAperture
Total energy impacting the aperture.
void Fill(const BDSOutputROOTEventLoss *other)
Fill from another instance.
virtual void Fill(const std::vector< G4int > &collimatorIndicesIn={}, const std::map< G4String, G4int > &collimatorIndicesByNameIn={}, const std::vector< BDSOutputROOTEventCollimatorInfo > &collimatorInfoIn={}, const std::vector< G4String > &collimatorBranchNamesIn={}, const std::vector< G4int > &cavityIndicesIn={}, const std::map< G4String, G4int > &cavityIndicesByNameIn={}, const std::vector< BDSOutputROOTEventCavityInfo > &cavityInfoIn={}, const std::vector< G4String > &cavityBranchNamesIn={}, const std::map< G4String, G4Transform3D > *scorerMeshPlacements=nullptr, const std::map< short int, G4String > *materialIDToNameUnique=nullptr, G4bool storeTrajectory=false)
Fill root output.
Class to store all options for a BDSIM run.
Information pertaining to a run.
Information stored per sampler per event.
void Fill(G4bool fillIons)
Fill maps of particle information from Geant4.
virtual void Flush()
Clear maps.
Holder for output information.
void InitialiseCollimators()
Construct collimators.
BDSOutputROOTEventModel * modelOutput
Model output.
G4int Create1DHistogram(G4String name, G4String title, G4int nbins, G4double xmin, G4double xmax)
Create histograms for both evtHistos and runHistos. Return index from evtHistos.
std::vector< G4String > collimatorNames
Names of collimators in output structures.
std::vector< BDSOutputROOTEventCollimator * > collimators
Collimator output structures.
BDSOutputROOTEventSampler< double > * primary
Primary sampler structure.
BDSOutputROOTEventRunInfo * runInfo
Run information.
void InitialiseMaterialMap()
Construct a map of material pointer to integer ID and name.
void ClearStructuresOptions()
Clear the local options structure.
std::vector< G4String > cavityNames
Names of cavities in output structures.
BDSOutputROOTEventHistograms * runHistos
Run level histograms.
BDSOutputROOTEventLossWorld * eLossWorldExit
World exit hits.
std::vector< G4int > cavityIndices
Indices in beam line that are cavities.
void PrepareCollimatorInformation()
void ClearStructuresRunLevel()
Clear the local structures in this class in preparation for a new run.
void InitialiseSamplers()
Construct samplers.
void ClearStructuresBeam()
Clear the local beam structure.
std::vector< BDSOutputROOTEventCavityInfo > cavityInfo
Cavity parameters.
std::map< G4String, G4int > collimatorIndicesByName
Indices mapped to their name.
BDSOutputROOTEventLossWorld * eLossWorldContents
Externally supplied world contents hits.
G4int nCollimators
Number of collimators in beam line.
std::vector< BDSOutputROOTEventSampler< double > * > samplerTrees
Sampler structures.
std::vector< std::pair< G4double, G4double > > collimatorDifferences
void ClearStructuresModel()
Clear the local model structure.
void ClearStructuresHeader()
Clear the local header structure.
G4int Create4DHistogram(const G4String &name, const G4String &title, const G4String &eScale, const std::vector< double > &eBinsEdges, G4int nBinsX, G4double xMin, G4double xMax, G4int nBinsY, G4double yMin, G4double yMax, G4int nBinsZ, G4double zMin, G4double zMax, G4int nBinsE, G4double eMin, G4double eMax)
Create histograms for both evtHistos and runHistos. Return index from evtHistos.
BDSOutputROOTEventHeader * headerOutput
Information about the file.
BDSOutputROOTEventLossWorld * eLossWorld
World energy deposition.
BDSOutputROOTEventLoss * eLossVacuum
General energy deposition.
std::vector< G4int > collimatorIndices
Indices in beam line that are collimators.
BDSOutputROOTEventInfo * evtInfo
Event information.
BDSOutputROOTEventLoss * pLastHit
Primary loss point.
BDSOutputROOTEventHistograms * evtHistos
Event level histograms.
BDSOutputROOTEventLoss * eLossTunnel
Tunnel energy deposition.
G4int Create3DHistogram(G4String name, G4String title, G4int nBinsX, G4double xMin, G4double xMax, G4int nBinsY, G4double yMin, G4double yMax, G4int nBinsZ, G4double zMin, G4double zMax)
Create histograms for both evtHistos and runHistos. Return index from evtHistos.
void ClearStructuresEventLevel()
Clear the local structures in this class in preparation for a new event.
BDSOutputROOTEventLoss * pFirstHit
Primary hit point.
BDSOutputROOTEventTrajectory * traj
Trajectories.
BDSOutputROOTEventBeam * beamOutput
Beam output.
BDSOutputROOTEventLoss * eLoss
General energy deposition.
std::vector< BDSOutputROOTEventCollimatorInfo > collimatorInfo
void PrepareCavityInformation()
Extract number of collimators and their names from beam line.
BDSOutputROOTEventAperture * apertureImpacts
Impacts on the aperture.
BDSOutputROOTParticleData * particleDataOutput
Geant4 information / particle tables.
BDSOutputROOTEventOptions * optionsOutput
Options output.
std::map< G4String, G4int > cavityIndicesByName
Indices mapped to their name.
virtual void WriteModel()=0
Write a representation of the samplers and beamline.
void FillEnergyLoss(const BDSHitsCollectionEnergyDeposition *loss, const LossType type)
Fill a collection of energy hits into the appropriate output structure.
G4double energyDepositedVacuum
Integral when filling hit.
virtual void WriteParticleData()=0
Write the geant4 information.
G4bool createCollimatorOutputStructures
virtual void WriteBeam()=0
Write the beam.
virtual void NewFile()=0
Open a new file. This should call WriteHeader() in it.
G4bool storeCollimatorHitsIons
Storage option.
G4bool storeSamplerCharge
Storage option.
G4bool storeSamplerRigidity
Storage option.
virtual void WriteFileEventLevel()=0
BDSOutput()=delete
No default constructor.
G4bool storePerEventHistos
Options for dynamic bits of output.
G4bool storeCollimatorHitsLinks
Storage option.
G4bool storeELossHistograms
Storage option.
G4bool storePrimaryHistograms
Storage option.
G4double energyDepositedTunnel
Integral when filling hit.
G4bool storeSamplerKineticEnergy
Storage option.
void CloseAndOpenNewFile()
Close a file and open a new one.
void FillEventInfo(const BDSEventInfo *info)
Fill event summary information.
virtual void WriteOptions()=0
Write the options.
G4bool storeCavityInfo
Storage option.
std::map< G4String, G4int > blmCollectionNameToHistogramID
std::map< G4int, G4double > histIndexToUnits1D
G4bool storePrimaries
Options for dynamic bits of output.
G4bool storeSamplerPolarCoords
Storage option.
void FillScorerHitsIndividual(const G4String &hsitogramDefName, const G4THitsMap< G4double > *hitMap)
Fill an individual scorer hits map into a particular output histogram.
const G4String baseFileName
Base file name.
void FillSamplerHitsVector(const std::vector< BDSHitsCollectionSampler * > &hits)
Fill sampler hits from a vector<sampler hits collection>.
G4bool storeTrajectory
Options for dynamic bits of output.
void FillSamplerHitsLink(const BDSHitsCollectionSamplerLink *hits)
Fill sampler link hits into output structures.
G4int nbins
Number of bins for each histogram required.
G4bool useScoringMap
Whether the single 3D histogram will be built.
void CopyFromHistToHist1D(const G4String &sourceName, const G4String &destinationName, const std::vector< G4int > &indices)
G4String GetNextFileName()
Get the next file name based on the base file name and the accrued number of files.
virtual void InitialiseGeometryDependent()
void FillPrimary(const G4PrimaryVertex *vertex, const G4int turnsTaken)
G4double energyDepositedWorldContents
Integral when filling hit.
const G4String fileExtension
File extension to add to each file.
G4bool storeSamplerIon
Storage option.
G4bool storeModel
Storage option.
void FillRun(const BDSEventInfo *info, unsigned long long int nOriginalEventsIn, unsigned long long int nEventsRequestedIn, unsigned long long int nEventsInOriginalDistrFileIn, unsigned long long int nEventsDistrFileSkippedIn, unsigned int distrFileLoopNTimesIn)
Copy run information to output structure.
G4double energyWorldExitKinetic
Integral when filling hit.
std::map< G4String, G4int > histIndices1D
Map of histogram name (short) to index of histogram in output.
void FillTrajectories(const BDSTrajectoriesToStore *trajectories)
Copy a set of trajectories to the output structure.
G4bool storeELoss
Options for dynamic bits of output.
void FillParticleData(G4bool writeIons)
Fill the local structure particle data with information. Also calls WriteParticleData().
G4bool storeParticleData
Storage option.
G4bool storeApertureImpactsHistograms
Options for dynamic bits of output.
G4double energyImpactingApertureKinetic
Integral when filling hit.
G4double energyImpactingAperture
Integral when filling hit.
void FillEventPrimaryOnly(const BDSParticleCoordsFullGlobal &coords, const BDSParticleDefinition *particle)
G4bool storeELossWorldContents
Options for dynamic bits of output.
G4bool storeCollimatorInfo
Storage option.
virtual void WriteFileRunLevel()=0
void FillBeam(const GMAD::BeamBase *beam)
virtual void WriteHeaderEndOfFile()=0
Overwrite and update header in the output.
void FillHeader()
Fill the local structure header with information - updates time stamp.
void FillPrimaryLoss(const std::vector< const BDSTrajectoryPointHit * > &primaryLosses)
Fill a collection volume exit hits into the appropriate output structure.
static void PrintProtectedNames(std::ostream &out)
Feedback for protected names.
std::map< G4String, G4int > histIndices4D
Map of histogram name (short) to index of histogram in output.
void FillPrimaryHit(const std::vector< const BDSTrajectoryPointHit * > &primaryHits)
Fill the hit where the primary particle impact.
void FillRunInfoAndUpdateHeader(const BDSEventInfo *info, unsigned long long int nOriginalEventsIn, unsigned long long int nEventsRequestedIn, unsigned long long int nEventsInOriginalDistrFileIn, unsigned long long int nEventsDistrFileSkippedIn, unsigned int distrFileLoopNTimesIn)
G4int outputFileNumber
Number of output file.
void FillApertureImpacts(const BDSHitsCollectionApertureImpacts *hits)
Fill aperture impact hits.
void FillSamplerHits(const BDSHitsCollectionSampler *hits)
Fill sampler hits into output structures.
G4bool storeELossWorld
Options for dynamic bits of output.
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.
void CreateHistograms()
Create histograms.
G4int storeTrajectoryStepPoints
Storage option.
G4bool storeTrajectoryStepPointLast
Storage option.
G4bool storeELossVacuum
Options for dynamic bits of output.
std::map< G4String, BDSHistBinMapper > scorerCoordinateMaps
Map of histogram name (short) to index of histogram in output.
G4bool storeSamplerMass
Storage option.
G4double energyWorldExit
Integral when filling hit.
G4int nCollimatorsInteracted
Integral when filling hit.
void FillOptions(const GMAD::OptionsBase *options)
G4bool storeELossVacuumHistograms
Storage option.
LossType
Enum for different types of energy loss that can be written out.
void CalculateHistogramParameters()
Calculate the number of bins and required maximum s.
G4bool storeELossTunnel
Options for dynamic bits of output.
G4double energyDeposited
Integral when filling hit.
static const std::set< G4String > protectedNames
Invalid names for samplers - kept here as this is where the output structures are created.
G4int numberEventPerFile
Number of events stored per file.
G4double energyDepositedWorld
Integral when filling hit.
G4bool storeCollimatorHits
Storage option.
void FillScorerHits(const std::map< G4String, G4THitsMap< G4double > * > &scorerHitsMap)
Fill a map of scorer hits into the output.
static G4bool InvalidSamplerName(const G4String &samplerName)
Test whether a sampler name is invalid or not.
void FillCollimatorHits(const BDSHitsCollectionCollimator *hits, const std::vector< const BDSTrajectoryPointHit * > &primaryLossPoints)
Fill collimator hits.
BDS::TrajectoryOptions storeTrajectoryOptions
Storage option.
std::map< G4String, G4int > histIndices3D
Map of histogram name (short) to index of histogram in output.
G4bool storeApertureImpacts
Options for dynamic bits of output.
virtual void CloseFile()=0
G4bool storeELossTunnelHistograms
Storage option.
virtual void WriteHeader()=0
Write the header.
A set of particle coordinates in both local and global.
Wrapper for particle definition.
G4double Mass() const
Accessor.
G4bool NElectrons() const
Accessor.
G4double Momentum() const
Accessor.
G4double Charge() const
Accessor.
G4double BRho() const
Accessor.
BDSIonDefinition * IonDefinition() const
Accessor.
G4bool IsAnIon() const
Accessor.
const std::map< G4String, G4double > & PrimitiveScorerUnits() const
Access the map of units for primitive scorers.
const std::vector< G4String > & PrimitiveScorerNames() const
Access a vector of the just primitive scorer part of the names.
const std::vector< G4String > & PrimitiveScorerNamesComplete() const
Access a vector the full primitive scorer names as registered.
Double map of trajectories to bitset of which filters matched whether to store them.
Options for a beam distribution.
Basic options class independent of Geant4.
G4bool StrContains(const G4String &str, const G4String &test)
Utility function to simplify lots of syntax changes for pedantic g4 changes.
V MapGetWithDefault(const std::map< K, V > &m, const K &key, const V &defaultValue)
G4bool FileExists(const G4String &filename)
Checks if filename exists.
G4bool IsFinite(G4double value, G4double tolerance=std::numeric_limits< double >::epsilon())