BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSOutput.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) BDSIM Collaboration, 2001 - 2026.
3
4This file is part of BDSIM.
5
6BDSIM is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published
8by the Free Software Foundation version 3 of the License.
9
10BDSIM is distributed in the hope that it will be useful, but
11WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef BDSOUTPUT_H
19#define BDSOUTPUT_H
20
21#include "BDSHistBinMapper.hh"
22#include "BDSOutputStructures.hh"
23#include "BDSTrajectoryOptions.hh"
24
25#include "globals.hh"
26
27#include <ctime>
28#include <ostream>
29#include <set>
30#include <vector>
31#include <map>
32
33// forward declarations
34template <class T> class G4THitsCollection;
41class BDSEventInfo;
44class BDSHitSampler;
52class BDSTrajectory;
57template <class T> class G4THitsMap;
58
59class G4PrimaryVertex;
60
61namespace GMAD
62{
63 class BeamBase;
64 class OptionsBase;
65}
66
72{
73public:
75 BDSOutput() = delete;
77 BDSOutput(const G4String& baseFileNameIn,
78 const G4String& fileExtentionIn,
79 G4int fileNumberOffset);
80 virtual ~BDSOutput(){;}
81
83 virtual void NewFile() = 0;
84
87 virtual void CloseFile() = 0;
88
92 virtual void InitialiseGeometryDependent();
93
96
98 void FillHeader();
99
101 void FillParticleData(G4bool writeIons);
102
105 void FillBeam(const GMAD::BeamBase* beam);
106
109 void FillOptions(const GMAD::OptionsBase* options);
110
113 void FillModel();
114
120 const BDSParticleDefinition* particle);
121
123 void FillEvent(const BDSEventInfo* info,
124 const G4PrimaryVertex* vertex,
125 const std::vector<BDSHitsCollectionSampler*>& samplerHitsPlane,
126 const std::vector<BDSHitsCollectionSamplerCylinder*>& samplerHitsCylinder,
127 const std::vector<BDSHitsCollectionSamplerSphere*>& samplerHitsSphere,
128 const BDSHitsCollectionSamplerLink* samplerHitsLink,
129 const BDSHitsCollectionEnergyDeposition* energyLoss,
130 const BDSHitsCollectionEnergyDeposition* energyLossFull,
131 const BDSHitsCollectionEnergyDeposition* energyLossVacuum,
132 const BDSHitsCollectionEnergyDeposition* energyLossTunnel,
133 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorld,
134 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorldContents,
135 const BDSHitsCollectionEnergyDepositionGlobal* worldExitHits,
136 const std::vector<const BDSTrajectoryPointHit*>& primaryHits,
137 const std::vector<const BDSTrajectoryPointHit*>& primaryLosses,
138 const BDSTrajectoriesToStore* trajectories,
139 const BDSHitsCollectionCollimator* collimatorHits,
140 const BDSHitsCollectionApertureImpacts* apertureImpactHits,
141 const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap,
142 const G4int turnsTaken);
143
145 void CloseAndOpenNewFile();
146
148 void FillRun(const BDSEventInfo* info,
149 unsigned long long int nOriginalEventsIn,
150 unsigned long long int nEventsRequestedIn,
151 unsigned long long int nEventsInOriginalDistrFileIn,
152 unsigned long long int nEventsDistrFileSkippedIn,
153 unsigned int distrFileLoopNTimesIn);
154
156 static G4bool InvalidSamplerName(const G4String& samplerName);
157
159 static void PrintProtectedNames(std::ostream& out);
160
161protected:
163 G4String GetNextFileName();
164
167
172 G4bool storeELossWorld; // for both world and world exit
180
185 std::map<G4String, G4int> blmCollectionNameToHistogramID;
186
187private:
189 enum class LossType {energy, vacuum, tunnel, world, worldexit, worldcontents};
190
192 virtual void WriteHeader() = 0;
193
195 virtual void WriteHeaderEndOfFile() = 0;
196
198 virtual void WriteParticleData() = 0;
199
201 virtual void WriteBeam() = 0;
202
204 virtual void WriteOptions() = 0;
205
207 virtual void WriteModel() = 0;
208
211 virtual void WriteFileEventLevel() = 0;
212
215 virtual void WriteFileRunLevel() = 0;
216
219
221 void CreateHistograms();
222
225 void FillPrimary(const G4PrimaryVertex* vertex,
226 const G4int turnsTaken);
227
229 void FillEventInfo(const BDSEventInfo* info);
230
232 void FillSamplerHitsVector(const std::vector<BDSHitsCollectionSampler*>& hits);
233 void FillSamplerCylinderHitsVector(const std::vector<BDSHitsCollectionSamplerCylinder*>& hits);
234 void FillSamplerSphereHitsVector(const std::vector<BDSHitsCollectionSamplerSphere*>& hits);
235
238
241
243 void FillPrimaryHit(const std::vector<const BDSTrajectoryPointHit*>& primaryHits);
244
247 const LossType type);
248
250 void FillEnergyLoss(const BDSHitsCollectionEnergyDepositionGlobal* loss,
251 const LossType type);
252
254 //void FillELossWorldExitHits(const BDSHitsCollectionVolumeExit* worldExitHits);
255
257 void FillPrimaryLoss(const std::vector<const BDSTrajectoryPointHit*>& primaryLosses);
258
260 void FillTrajectories(const BDSTrajectoriesToStore* trajectories);
261
263 void FillCollimatorHits(const BDSHitsCollectionCollimator* hits,
264 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints);
265
267 void FillApertureImpacts(const BDSHitsCollectionApertureImpacts* hits);
268
270 void FillScorerHits(const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap);
271
273 void FillScorerHitsIndividual(const G4String& hsitogramDefName,
274 const G4THitsMap<G4double>* hitMap);
275
276 void FillScorerHitsIndividualBLM(const G4String& histogramDefName,
277 const G4THitsMap<G4double>* hitMap);
278
282 unsigned long long int nOriginalEventsIn,
283 unsigned long long int nEventsRequestedIn,
284 unsigned long long int nEventsInOriginalDistrFileIn,
285 unsigned long long int nEventsDistrFileSkippedIn,
286 unsigned int distrFileLoopNTimesIn);
287
290 void CopyFromHistToHist1D(const G4String& sourceName,
291 const G4String& destinationName,
292 const std::vector<G4int>& indices);
293
294 const G4String baseFileName;
295 const G4String fileExtension;
298
300 const static std::set<G4String> protectedNames;
301
304
308 G4double sMaxHistograms;
309
311 G4int nbins;
312
335
339
352
354 std::map<G4String, G4int> histIndices1D;
355 std::map<G4String, G4int> histIndices3D;
356 std::map<G4String, G4int> histIndices4D;
357 std::map<G4String, BDSHistBinMapper> scorerCoordinateMaps;
359
362 std::map<G4int, G4double> histIndexToUnits1D;
363 std::map<G4int, G4double> histIndexToUnits3D;
364 std::map<G4int, G4double> histIndexToUnits4D;
365};
366
367#endif
Interface to store event information use G4 hooks.
Snapshot of information for particle passing through a collimator.
Snapshot of information for particle passing through a collimator.
Information recorded for a step leaving a volume.
Information recorded for a single piece of energy deposition.
The information recorded from a particle impacting a sampler.
The information recorded from a particle impacting a sampler.
The information recorded from a particle impacting a sampler.
Holder for output information.
G4int UpdateSamplerStructures()
Interface to allow setting up samplers later for dynamic geometry construction a la SixTrack....
Output base class that defines interface for all output types.
Definition BDSOutput.hh:72
virtual void WriteModel()=0
Write a representation of the samplers and beamline.
G4bool CreateCollimatorOutputStructures() const
Whether to create the collimator structures in the output or not.
Definition BDSOutput.hh:166
void FillEnergyLoss(const BDSHitsCollectionEnergyDeposition *loss, const LossType type)
Fill a collection of energy hits into the appropriate output structure.
Definition BDSOutput.cc:892
G4double energyDepositedVacuum
Integral when filling hit.
Definition BDSOutput.hh:342
virtual void WriteParticleData()=0
Write the geant4 information.
G4bool createCollimatorOutputStructures
Definition BDSOutput.hh:338
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.
Definition BDSOutput.hh:318
G4bool storeSamplerCharge
Storage option.
Definition BDSOutput.hh:326
G4bool storeSamplerRigidity
Storage option.
Definition BDSOutput.hh:329
virtual void WriteFileEventLevel()=0
BDSOutput()=delete
No default constructor.
G4bool storePerEventHistos
Options for dynamic bits of output.
Definition BDSOutput.hh:178
G4bool storeCollimatorHitsLinks
Storage option.
Definition BDSOutput.hh:317
G4bool storeELossHistograms
Storage option.
Definition BDSOutput.hh:319
G4bool storePrimaryHistograms
Storage option.
Definition BDSOutput.hh:323
G4double energyDepositedTunnel
Integral when filling hit.
Definition BDSOutput.hh:345
G4bool storeSamplerKineticEnergy
Storage option.
Definition BDSOutput.hh:327
void CloseAndOpenNewFile()
Close a file and open a new one.
Definition BDSOutput.cc:373
void FillEventInfo(const BDSEventInfo *info)
Fill event summary information.
Definition BDSOutput.cc:687
virtual void WriteOptions()=0
Write the options.
G4bool storeCavityInfo
Storage option.
Definition BDSOutput.hh:314
std::map< G4String, G4int > blmCollectionNameToHistogramID
Definition BDSOutput.hh:185
std::map< G4int, G4double > histIndexToUnits1D
Definition BDSOutput.hh:362
G4bool storePrimaries
Options for dynamic bits of output.
Definition BDSOutput.hh:176
G4bool storeSamplerPolarCoords
Storage option.
Definition BDSOutput.hh:325
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.
Definition BDSOutput.hh:294
void FillSamplerHitsVector(const std::vector< BDSHitsCollectionSampler * > &hits)
Fill sampler hits from a vector<sampler hits collection>.
Definition BDSOutput.cc:713
G4bool storeTrajectory
Options for dynamic bits of output.
Definition BDSOutput.hh:177
void FillSamplerHitsLink(const BDSHitsCollectionSamplerLink *hits)
Fill sampler link hits into output structures.
Definition BDSOutput.cc:814
G4int nbins
Number of bins for each histogram required.
Definition BDSOutput.hh:311
G4bool useScoringMap
Whether the single 3D histogram will be built.
Definition BDSOutput.hh:303
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.
Definition BDSOutput.cc:406
virtual void InitialiseGeometryDependent()
Definition BDSOutput.cc:170
void FillPrimary(const G4PrimaryVertex *vertex, const G4int turnsTaken)
Definition BDSOutput.cc:245
G4double energyDepositedWorldContents
Integral when filling hit.
Definition BDSOutput.hh:344
const G4String fileExtension
File extension to add to each file.
Definition BDSOutput.hh:295
G4bool storeSamplerIon
Storage option.
Definition BDSOutput.hh:330
G4bool storeModel
Storage option.
Definition BDSOutput.hh:324
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.
Definition BDSOutput.cc:381
G4double energyWorldExitKinetic
Integral when filling hit.
Definition BDSOutput.hh:349
std::map< G4String, G4int > histIndices1D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:354
void FillTrajectories(const BDSTrajectoriesToStore *trajectories)
Copy a set of trajectories to the output structure.
G4bool storeELoss
Options for dynamic bits of output.
Definition BDSOutput.hh:169
void FillParticleData(G4bool writeIons)
Fill the local structure particle data with information. Also calls WriteParticleData().
Definition BDSOutput.cc:192
G4bool storeParticleData
Storage option.
Definition BDSOutput.hh:322
G4bool storeApertureImpactsHistograms
Options for dynamic bits of output.
Definition BDSOutput.hh:175
G4double energyImpactingApertureKinetic
Integral when filling hit.
Definition BDSOutput.hh:347
G4double energyImpactingAperture
Integral when filling hit.
Definition BDSOutput.hh:346
void FillEventPrimaryOnly(const BDSParticleCoordsFullGlobal &coords, const BDSParticleDefinition *particle)
Definition BDSOutput.cc:272
G4bool storeELossWorldContents
Options for dynamic bits of output.
Definition BDSOutput.hh:173
G4bool storeCollimatorInfo
Storage option.
Definition BDSOutput.hh:315
virtual void WriteFileRunLevel()=0
void FillBeam(const GMAD::BeamBase *beam)
Definition BDSOutput.cc:210
virtual void WriteHeaderEndOfFile()=0
Overwrite and update header in the output.
void FillHeader()
Fill the local structure header with information - updates time stamp.
Definition BDSOutput.cc:184
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.
Definition BDSOutput.cc:399
std::map< G4String, G4int > histIndices4D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:356
void FillPrimaryHit(const std::vector< const BDSTrajectoryPointHit * > &primaryHits)
Fill the hit where the primary particle impact.
Definition BDSOutput.cc:989
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.
Definition BDSOutput.hh:297
void FillApertureImpacts(const BDSHitsCollectionApertureImpacts *hits)
Fill aperture impact hits.
void FillSamplerHits(const BDSHitsCollectionSampler *hits)
Fill sampler hits into output structures.
Definition BDSOutput.cc:792
G4bool storeELossWorld
Options for dynamic bits of output.
Definition BDSOutput.hh:172
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.
Definition BDSOutput.cc:298
void CreateHistograms()
Create histograms.
Definition BDSOutput.cc:463
G4int storeTrajectoryStepPoints
Storage option.
Definition BDSOutput.hh:331
G4bool storeTrajectoryStepPointLast
Storage option.
Definition BDSOutput.hh:332
G4bool storeELossVacuum
Options for dynamic bits of output.
Definition BDSOutput.hh:171
std::map< G4String, BDSHistBinMapper > scorerCoordinateMaps
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:357
G4bool storeSamplerMass
Storage option.
Definition BDSOutput.hh:328
void FillModel()
Definition BDSOutput.cc:224
G4double energyWorldExit
Integral when filling hit.
Definition BDSOutput.hh:348
G4int nCollimatorsInteracted
Integral when filling hit.
Definition BDSOutput.hh:350
void FillOptions(const GMAD::OptionsBase *options)
Definition BDSOutput.cc:217
G4bool storeELossVacuumHistograms
Storage option.
Definition BDSOutput.hh:321
LossType
Enum for different types of energy loss that can be written out.
Definition BDSOutput.hh:189
void CalculateHistogramParameters()
Calculate the number of bins and required maximum s.
Definition BDSOutput.cc:440
G4bool storeELossTunnel
Options for dynamic bits of output.
Definition BDSOutput.hh:170
G4double energyDeposited
Integral when filling hit.
Definition BDSOutput.hh:341
static const std::set< G4String > protectedNames
Invalid names for samplers - kept here as this is where the output structures are created.
Definition BDSOutput.hh:89
G4int numberEventPerFile
Number of events stored per file.
Definition BDSOutput.hh:296
G4double energyDepositedWorld
Integral when filling hit.
Definition BDSOutput.hh:343
virtual void UpdateSamplers()
Interface to allow updating samplers with dynamic construction. Only for link - not for regular use.
Definition BDSOutput.hh:95
G4bool storeCollimatorHits
Storage option.
Definition BDSOutput.hh:316
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.
Definition BDSOutput.cc:394
void FillCollimatorHits(const BDSHitsCollectionCollimator *hits, const std::vector< const BDSTrajectoryPointHit * > &primaryLossPoints)
Fill collimator hits.
BDS::TrajectoryOptions storeTrajectoryOptions
Storage option.
Definition BDSOutput.hh:333
std::map< G4String, G4int > histIndices3D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:355
G4bool storeApertureImpacts
Options for dynamic bits of output.
Definition BDSOutput.hh:174
virtual void CloseFile()=0
G4double sMinHistograms
Definition BDSOutput.hh:307
G4bool storeELossTunnelHistograms
Storage option.
Definition BDSOutput.hh:320
virtual void WriteHeader()=0
Write the header.
A set of particle coordinates in both local and global.
Wrapper for particle definition.
Double map of trajectories to bitset of which filters matched whether to store them.
A summary trajectory object of a loss point.
Trajectory information from track including last scatter etc.
Options for a beam distribution.
Definition beamBase.h:34
Basic options class independent of Geant4.
Definition optionsBase.h:35
Parser namespace for GMAD language. Combination of Geant4 and MAD.