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),
107 energyDepositedVacuum(0),
108 energyDepositedWorld(0),
109 energyDepositedWorldContents(0),
110 energyDepositedTunnel(0),
111 energyImpactingAperture(0),
112 energyImpactingApertureKinetic(0),
114 energyWorldExitKinetic(0),
115 nCollimatorsInteracted(0)
157 if (g->StoreSamplerAll())
236 &materialIDToNameUnique,
244 const G4int turnsTaken)
246 const G4VUserPrimaryVertexInformation* vertexInfo = vertex->GetUserInformation();
249 primary->Fill(vertexInfoBDS->primaryVertex.local,
250 vertexInfoBDS->momentum,
251 vertexInfoBDS->charge,
252 vertexInfoBDS->pdgID,
254 vertexInfoBDS->primaryVertex.beamlineIndex,
255 vertexInfoBDS->nElectrons,
257 vertexInfoBDS->rigidity);
258 primaryGlobal->
Fill(vertexInfoBDS->primaryVertex.global);
264 primaryGlobal->
Fill(vertexInfoBDSV);
266 auto nextLinkedVertex = vertex->GetNext();
267 if (nextLinkedVertex)
274 G4bool isIon = particle->
IsAnIon();
291 &isIon, &ionA, &ionZ);
292 primaryGlobal->
Fill(coords.global);
298 const G4PrimaryVertex* vertex,
299 const std::vector<BDSHitsCollectionSampler*>& samplerHitsPlane,
300 const std::vector<BDSHitsCollectionSamplerCylinder*>& samplerHitsCylinder,
301 const std::vector<BDSHitsCollectionSamplerSphere*>& samplerHitsSphere,
310 const std::vector<const BDSTrajectoryPointHit*>& primaryHits,
311 const std::vector<const BDSTrajectoryPointHit*>& primaryLosses,
316 const G4int turnsTaken)
334 FillSamplerCylinderHitsVector(samplerHitsCylinder);
335 FillSamplerSphereHitsVector(samplerHitsSphere);
342 if (energyLossVacuum)
344 if (energyLossTunnel)
350 if (energyLossWorldContents)
351 {
FillEnergyLoss(energyLossWorldContents, BDSOutput::LossType::worldcontents);}
381 unsigned long long int nOriginalEventsIn,
382 unsigned long long int nEventsRequestedIn,
383 unsigned long long int nEventsInOriginalDistrFileIn,
384 unsigned long long int nEventsDistrFileSkippedIn,
385 unsigned int distrFileLoopNTimesIn)
387 FillRunInfoAndUpdateHeader(info, nOriginalEventsIn, nEventsRequestedIn, nEventsInOriginalDistrFileIn, nEventsDistrFileSkippedIn, distrFileLoopNTimesIn);
400 out <<
"Protected names for output " << G4endl;
402 {out <<
"\"" << key <<
"\"" << G4endl;}
420 if (!globalConstants->OutputFileNameSet() || !globalConstants->Batch())
422 G4String original = newFileName;
423 G4int nTimeAppended = 1;
426 newFileName = original +
"-" + std::to_string(nTimeAppended);
434 G4cout << __METHOD_NAME__ <<
"Setting up new file: " << newFileName << G4endl;
447 if (!flatBeamline->
empty())
450 nbins = (int) std::ceil(sMax / binWidth);
467 const G4double smin = 0.0;
470 G4cout << __METHOD_NAME__ <<
"histogram parameters calculated to be: " << G4endl;
471 G4cout <<
"s minimum: " << smin <<
" m" << G4endl;
472 G4cout <<
"s maximum: " << smax <<
" m" << G4endl;
473 G4cout <<
"# of bins: " <<
nbins << G4endl;
484 std::vector<G4double> binedges;
494 "Primary Hits per Element",
497 "Primary Loss per Element",
503 "Energy Loss per Element" ,
509 "Energy Loss in Vacuum",
512 "Energy Loss in Vacuum per Element" ,
519 "Primary aperture impacts",
534 "Energy Loss in Tunnel",
537 "Energy Loss in Tunnel per Element",
543 std::vector<G4String> collHistNames = {
"CollPhitsPE",
546 "CollPInteractedPE"};
547 std::vector<G4String> collHistDesciptions = {
"Primary Hits per Coll",
548 "Primary Loss per Coll",
549 "Energy Loss per Collimator",
550 "Primary Interacted per Collimator"};
551 for (G4int i = 0; i < (G4int)collHistNames.size(); i++)
554 collHistDesciptions[i],
564 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in x dimension - check options, xmin and xmax");}
566 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in y dimension - check options, ymin and ymax");}
568 {
throw BDSException(__METHOD_NAME__,
"0 width in general 3D scoring histogram in z dimension - check options, zmin and zmax");}
569 if (g->NBinsX() <= 0)
570 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in x dimension of 3D scoring histogram - check option, nbinsx");}
571 if (g->NBinsY() <= 0)
572 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in y dimension of 3D scoring histogram - check option, nbinsx");}
573 if (g->NBinsZ() <= 0)
574 {
throw BDSException(__METHOD_NAME__,
"invalid number of bins in z dimension of 3D scoring histogram - check option, nbinsx");}
577 g->NBinsX(), g->XMin()/CLHEP::m, g->XMax()/CLHEP::m,
578 g->NBinsY(), g->YMin()/CLHEP::m, g->YMax()/CLHEP::m,
579 g->NBinsZ(), g->ZMin()/CLHEP::m, g->ZMax()/CLHEP::m);
585 if (!scorerHistogramDefs.empty())
587 for (
const auto& nameDef : scorerHistogramDefs)
589 const auto def = nameDef.second;
597 if (def.geometryType ==
"box"){
599 def.nBinsX, def.xLow/CLHEP::m, def.xHigh/CLHEP::m,
600 def.nBinsY, def.yLow/CLHEP::m, def.yHigh/CLHEP::m,
601 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m);}
602 else if (def.geometryType ==
"cylindrical"){
604 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
605 def.nBinsPhi, 0, 2*M_PI,
606 def.nBinsR, def.rLow/CLHEP::m, def.rHigh/CLHEP::m);}
609 histIndexToUnits3D[histID] = def.primitiveScorerUnitValue;
615 if (def.geometryType ==
"box"){
616 histID =
Create4DHistogram(def.outputName+
"-"+def.eScale,def.outputName,def.eScale,def.eBinsEdges,
617 def.nBinsX, def.xLow/CLHEP::m, def.xHigh/CLHEP::m,
618 def.nBinsY, def.yLow/CLHEP::m, def.yHigh/CLHEP::m,
619 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
620 def.nBinsE, def.eLow/CLHEP::GeV, def.eHigh/CLHEP::GeV);}
621 else if (def.geometryType ==
"cylindrical"){
622 histID =
Create4DHistogram(def.outputName+
"-"+def.eScale, def.outputName, def.eScale,def.eBinsEdges,
623 def.nBinsZ, def.zLow/CLHEP::m, def.zHigh/CLHEP::m,
624 def.nBinsPhi, 0, 2*M_PI,
625 def.nBinsR, def.rLow/CLHEP::m, def.rHigh/CLHEP::m,
626 def.nBinsE, def.eLow/CLHEP::GeV, def.eHigh/CLHEP::GeV);}
629 histIndexToUnits4D[histID] = def.primitiveScorerUnitValue;
647 std::set<G4String> blmHistoNames;
648 std::map<G4String, G4String> psFullNameToPS;
649 for (
const auto& scorerNameComplete : psnamesc)
653 for (
const auto& scorerName : psnames)
657 blmHistoNames.insert(scorerName);
658 psFullNameToPS[scorerNameComplete] = scorerName;
666 for (
const auto &hn : blmHistoNames)
668 G4String blmHistName =
"BLM_" + hn;
672 for (
const auto& kv : psFullNameToPS)
694 G4double ek = BDSStackingAction::energyKilled / CLHEP::GeV;
709 for (
const auto& hc : hits)
713 if (!(hc->entries() > 0))
715 for (
int i = 0; i < (int) hc->entries(); i++)
718 G4int samplerID = hit->samplerID;
719 G4int samplerVectorIndex = samplerIDToIndexPlane[samplerID];
729 {sampler->FillIon();}
733void BDSOutput::FillSamplerCylinderHitsVector(
const std::vector<BDSHitsCollectionSamplerCylinder*>& hits)
735 for (
const auto& hc : hits)
739 if (!(hc->entries() > 0))
741 for (
int i = 0; i < (int) hc->entries(); i++)
744 G4int samplerID = hit->samplerID;
745 G4int samplerVectorIndex = samplerIDToIndexCylinder[samplerID];
754 for (
auto& sampler : samplerCTrees)
755 {sampler->FillIon();}
759void BDSOutput::FillSamplerSphereHitsVector(
const std::vector<BDSHitsCollectionSamplerSphere*>& hits)
761 for (
const auto& hc : hits)
765 if (!(hc->entries() > 0))
767 for (
int i = 0; i < (int) hc->entries(); i++)
770 G4int samplerID = hit->samplerID;
771 G4int samplerVectorIndex = samplerIDToIndexSphere[samplerID];
780 for (
auto& sampler : samplerSTrees)
781 {sampler->FillIon();}
788 if (!(hits->entries() > 0))
790 for (
int i = 0; i < (int)hits->entries(); i++)
793 G4int samplerID = hit->samplerID;
794 G4int samplerVectorIndex = samplerIDToIndexPlane[samplerID];
804 {sampler->FillIon();}
810 G4int nHits = (G4int)hits->entries();
813 for (G4int i = 0; i < nHits; i++)
816 G4int samplerID = hit->samplerID;
821 G4bool firstSampler =
true;
825 {firstSampler =
false;
continue;}
827 {sampler->FillIon();}
836 case BDSOutput::LossType::world:
837 case BDSOutput::LossType::worldexit:
838 case BDSOutput::LossType::worldcontents:
844 G4int nHits = (G4int)hits->entries();
849 case BDSOutput::LossType::world:
851 for (G4int i=0; i < nHits; i++)
860 case BDSOutput::LossType::worldexit:
862 for (G4int i = 0; i < nHits; i++)
872 case BDSOutput::LossType::worldcontents:
874 for (G4int i = 0; i < nHits; i++)
891 G4int nHits = (G4int)hits->entries();
896 G4int indELossTunnel = -1;
897 G4int indELossTunnelPE = -1;
903 G4int indELossVacuum = -1;
904 G4int indELossVacuumPE = -1;
910 G4int indScoringMap = -1;
913 for (G4int i=0; i < nHits; i++)
916 G4double sHit = hit->GetSHit()/CLHEP::m;
917 G4double eW = hit->GetEnergyWeighted()/CLHEP::GeV;
920 case BDSOutput::LossType::energy:
927 runHistos->Fill1DHistogram(indELoss, sHit, eW);
928 evtHistos->Fill1DHistogram(indELoss, sHit, eW);
929 runHistos->Fill1DHistogram(indELossPE, sHit, eW);
930 evtHistos->Fill1DHistogram(indELossPE, sHit, eW);
934 case BDSOutput::LossType::vacuum:
941 evtHistos->Fill1DHistogram(indELossVacuum, sHit, eW);
942 runHistos->Fill1DHistogram(indELossVacuumPE, sHit, eW);
946 case BDSOutput::LossType::tunnel:
953 runHistos->Fill1DHistogram(indELossTunnel, sHit, eW);
954 evtHistos->Fill1DHistogram(indELossTunnel, sHit, eW);
955 runHistos->Fill1DHistogram(indELossTunnelPE, sHit, eW);
956 evtHistos->Fill1DHistogram(indELossTunnelPE, sHit, eW);
966 G4double x = hit->
Getx()/CLHEP::m;
967 G4double y = hit->
Gety()/CLHEP::m;
968 evtHistos->Fill3DHistogram(indScoringMap, x, y, sHit, eW);
969 runHistos->Fill3DHistogram(indScoringMap, x, y, sHit, eW);
975 (lossType == BDSOutput::LossType::energy) &&
982 for (
auto phit : primaryHits)
987 const G4double preStepSPosition = phit->point->GetPreS() / CLHEP::m;
1003 for (
auto ploss : primaryLosses)
1008 const G4double postStepSPosition = ploss->point->GetPostS() / CLHEP::m;
1029 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints)
1031 G4int nHits = (G4int)hits->entries();
1032 for (G4int i = 0; i < nHits; i++)
1044 if (!primaryLossPoints.empty())
1046 for (
auto primaryLossPoint : primaryLossPoints)
1048 if (primaryLossPoint->point->GetBeamLine() &&
nCollimators > 0)
1050 G4int lossPointBLInd = primaryLossPoint->point->GetBeamLineIndex();
1075 for (G4int i = 0; i < (G4int)
collimators.size(); i++)
1082 if (collimator->primaryInteracted)
1092 G4int nPrimaryImpacts = 0;
1093 G4int nHits = (G4int)hits->entries();
1095 for (G4int i = 0; i < nHits; i++)
1098 G4double eW = (hit->totalEnergy / CLHEP::GeV) * hit->weight;
1101 if (hit->parentID == 0)
1103 nPrimaryImpacts += 1;
1106 {
evtHistos->Fill1DHistogram(histIndex, hit->S / CLHEP::m);}
1118 for (
const auto& nameHitsMap : scorerHitsMap)
1121 if (nameHitsMap.second->GetSize() == 0)
1123 if (nameHitsMap.second->size() == 0)
1126 {G4cout << nameHitsMap.first <<
" empty" << G4endl;
continue;}
1138 {
return FillScorerHitsIndividualBLM(histogramDefName, hitMap);}
1149 for (
const auto& hit : *hitMap->GetMap())
1151 for (
const auto& hit : *hitMap)
1155 mapper.IJKLFromGlobal(hit.first, x,y,z,e);
1156 G4int rootGlobalIndex = (hist->GetBin(x + 1, y + 1, z + 1));
1170 for (
const auto& hit : *hitMap->GetMap())
1172 for (
const auto& hit : *hitMap)
1176 mapper.IJKLFromGlobal(hit.first, x,y,z,e);
1177 evtHistos->Set4DHistogramBinContent(histIndex, x, y, z, e - 1, *hit.second / unit);
1183void BDSOutput::FillScorerHitsIndividualBLM(
const G4String& histogramDefName,
1188 for (
const auto& hit : *hitMap->GetMap())
1190 for (
const auto& hit : *hitMap)
1194 G4cout <<
"Filling hist " << histIndex <<
", bin: " << hit.first+1 <<
" value: " << *hit.second << G4endl;
1197 evtHistos->Fill1DHistogram(histIndex,hit.first, *hit.second / unit);
1198 runHistos->Fill1DHistogram(histIndex,hit.first, *hit.second / unit);
1203 unsigned long long int nOriginalEventsIn,
1204 unsigned long long int nEventsRequestedIn,
1205 unsigned long long int nEventsInOriginalDistrFileIn,
1206 unsigned long long int nEventsDistrFileSkippedIn,
1207 unsigned int distrFileLoopNTimesIn)
1221 const G4String& destinationName,
1222 const std::vector<G4int>& indices)
1230 for (
const auto index : indices)
1232 destinationEvt->SetBinContent(binIndex, sourceEvt->GetBinContent(index + 1));
1233 destinationEvt->SetBinError(binIndex, sourceEvt->GetBinError(index + 1));
1234 destinationRun->SetBinContent(binIndex, sourceRun->GetBinContent(index + 1));
1235 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 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())