BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
BDSOutput.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2022.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef BDSOUTPUT_H
20#define BDSOUTPUT_H
21
22#include "BDSHistBinMapper.hh"
23#include "BDSOutputStructures.hh"
24#include "BDSTrajectoryOptions.hh"
25
26#include "globals.hh"
27
28#include <ctime>
29#include <ostream>
30#include <set>
31#include <vector>
32#include <map>
33
34// forward declarations
35template <class T> class G4THitsCollection;
42class BDSEventInfo;
45class BDSHitSampler;
53class BDSTrajectory;
58template <class T> class G4THitsMap;
59
60class G4PrimaryVertex;
61
62namespace GMAD
63{
64 class BeamBase;
65 class OptionsBase;
66}
67
73{
74public:
76 BDSOutput(const G4String& baseFileNameIn,
77 const G4String& fileExtentionIn,
78 G4int fileNumberOffset);
79 virtual ~BDSOutput(){;}
80
82 virtual void NewFile() = 0;
83
86 virtual void CloseFile() = 0;
87
91 virtual void InitialiseGeometryDependent();
92
95
97 void FillHeader();
98
100 void FillParticleData(G4bool writeIons);
101
104 void FillBeam(const GMAD::BeamBase* beam);
105
108 void FillOptions(const GMAD::OptionsBase* options);
109
112 void FillModel();
113
119 const BDSParticleDefinition* particle);
120
122 void FillEvent(const BDSEventInfo* info,
123 const G4PrimaryVertex* vertex,
124 const std::vector<BDSHitsCollectionSampler*>& samplerHitsPlane,
125 const std::vector<BDSHitsCollectionSamplerCylinder*>& samplerHitsCylinder,
126 const std::vector<BDSHitsCollectionSamplerSphere*>& samplerHitsSphere,
127 const BDSHitsCollectionSamplerLink* samplerHitsLink,
128 const BDSHitsCollectionEnergyDeposition* energyLoss,
129 const BDSHitsCollectionEnergyDeposition* energyLossFull,
130 const BDSHitsCollectionEnergyDeposition* energyLossVacuum,
131 const BDSHitsCollectionEnergyDeposition* energyLossTunnel,
132 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorld,
133 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorldContents,
134 const BDSHitsCollectionEnergyDepositionGlobal* worldExitHits,
135 const std::vector<const BDSTrajectoryPointHit*>& primaryHits,
136 const std::vector<const BDSTrajectoryPointHit*>& primaryLosses,
137 const BDSTrajectoriesToStore* trajectories,
138 const BDSHitsCollectionCollimator* collimatorHits,
139 const BDSHitsCollectionApertureImpacts* apertureImpactHits,
140 const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap,
141 const G4int turnsTaken);
142
144 void CloseAndOpenNewFile();
145
147 void FillRun(const BDSEventInfo* info);
148
150 static G4bool InvalidSamplerName(const G4String& samplerName);
151
153 static void PrintProtectedNames(std::ostream& out);
154
155protected:
157 G4String GetNextFileName();
158
161
166 G4bool storeELossWorld; // for both world and world exit
173
178 std::map<G4String, G4int> blmCollectionNameToHistogramID;
179
180private:
182 enum class LossType {energy, vacuum, tunnel, world, worldexit, worldcontents};
183
185 virtual void WriteHeader() = 0;
186
188 virtual void WriteParticleData() = 0;
189
191 virtual void WriteBeam() = 0;
192
194 virtual void WriteOptions() = 0;
195
197 virtual void WriteModel() = 0;
198
201 virtual void WriteFileEventLevel() = 0;
202
205 virtual void WriteFileRunLevel() = 0;
206
209
211 void CreateHistograms();
212
215 void FillPrimary(const G4PrimaryVertex* vertex,
216 const G4int turnsTaken);
217
219 void FillEventInfo(const BDSEventInfo* info);
220
222 void FillSamplerHitsVector(const std::vector<BDSHitsCollectionSampler*>& hits);
223 void FillSamplerCylinderHitsVector(const std::vector<BDSHitsCollectionSamplerCylinder*>& hits);
224 void FillSamplerSphereHitsVector(const std::vector<BDSHitsCollectionSamplerSphere*>& hits);
225
228
231
233 void FillPrimaryHit(const std::vector<const BDSTrajectoryPointHit*>& primaryHits);
234
237 const LossType type);
238
241 const LossType type);
242
244 //void FillELossWorldExitHits(const BDSHitsCollectionVolumeExit* worldExitHits);
245
247 void FillPrimaryLoss(const std::vector<const BDSTrajectoryPointHit*>& primaryLosses);
248
250 void FillTrajectories(const BDSTrajectoriesToStore* trajectories);
251
254 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints);
255
258
260 void FillScorerHits(const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap);
261
263 void FillScorerHitsIndividual(const G4String& hsitogramDefName,
264 const G4THitsMap<G4double>* hitMap);
265
266 void FillScorerHitsIndividualBLM(const G4String& histogramDefName,
267 const G4THitsMap<G4double>* hitMap);
268
270 void FillRunInfo(const BDSEventInfo* info);
271
274 void CopyFromHistToHist1D(const G4String& sourceName,
275 const G4String& destinationName,
276 const std::vector<G4int>& indices);
277
279 BDSOutput() = delete;
280
281 const G4String baseFileName;
282 const G4String fileExtension;
285
287 const static std::set<G4String> protectedNames;
288
291
295
297 G4int nbins;
298
320
324
337
339 std::map<G4String, G4int> histIndices1D;
340 std::map<G4String, G4int> histIndices3D;
341 std::map<G4String, G4int> histIndices4D;
342 std::map<G4String, BDSHistBinMapper> scorerCoordinateMaps;
344
347 std::map<G4int, G4double> histIndexToUnits1D;
348 std::map<G4int, G4double> histIndexToUnits3D;
349 std::map<G4int, G4double> histIndexToUnits4D;
350};
351
352#endif
Interface to store event information use G4 hooks.
Definition: BDSEventInfo.hh:42
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:73
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:160
void FillEnergyLoss(const BDSHitsCollectionEnergyDeposition *loss, const LossType type)
Fill a collection of energy hits into the appropriate output structure.
Definition: BDSOutput.cc:873
G4double energyDepositedVacuum
Integral when filling hit.
Definition: BDSOutput.hh:327
virtual void WriteParticleData()=0
Write the geant4 information.
G4bool createCollimatorOutputStructures
Definition: BDSOutput.hh:323
virtual void WriteBeam()=0
Write the beam.
virtual void NewFile()=0
Open a new file. This should call WriteHeader() in it.
G4double sMaxHistograms
Definition: BDSOutput.hh:294
G4bool storeCollimatorHitsIons
Storage option.
Definition: BDSOutput.hh:303
G4bool storeSamplerCharge
Storage option.
Definition: BDSOutput.hh:311
G4bool storeSamplerRigidity
Storage option.
Definition: BDSOutput.hh:314
virtual void WriteFileEventLevel()=0
BDSOutput()=delete
No default constructor.
G4bool storeCollimatorHitsLinks
Storage option.
Definition: BDSOutput.hh:302
G4bool storeELossHistograms
Storage option.
Definition: BDSOutput.hh:304
G4bool storePrimaryHistograms
Storage option.
Definition: BDSOutput.hh:308
G4double energyDepositedTunnel
Integral when filling hit.
Definition: BDSOutput.hh:330
G4bool storeSamplerKineticEnergy
Storage option.
Definition: BDSOutput.hh:312
void CloseAndOpenNewFile()
Close a file and open a new one.
Definition: BDSOutput.cc:364
void FillEventInfo(const BDSEventInfo *info)
Fill event summary information.
Definition: BDSOutput.cc:666
virtual void WriteOptions()=0
Write the options.
std::map< G4String, G4int > blmCollectionNameToHistogramID
Definition: BDSOutput.hh:178
std::map< G4int, G4double > histIndexToUnits1D
Definition: BDSOutput.hh:347
G4bool storePrimaries
Options for dynamic bits of output.
Definition: BDSOutput.hh:170
G4bool storeSamplerPolarCoords
Storage option.
Definition: BDSOutput.hh:310
void FillScorerHitsIndividual(const G4String &hsitogramDefName, const G4THitsMap< G4double > *hitMap)
Fill an individual scorer hits map into a particular output histogram.
Definition: BDSOutput.cc:1119
const G4String baseFileName
Base file name.
Definition: BDSOutput.hh:281
void FillSamplerHitsVector(const std::vector< BDSHitsCollectionSampler * > &hits)
Fill sampler hits from a vector<sampler hits collection>.
Definition: BDSOutput.cc:692
G4bool storeTrajectory
Options for dynamic bits of output.
Definition: BDSOutput.hh:171
void FillSamplerHitsLink(const BDSHitsCollectionSamplerLink *hits)
Fill sampler link hits into output structures.
Definition: BDSOutput.cc:793
G4int nbins
Number of bins for each histogram required.
Definition: BDSOutput.hh:297
G4bool useScoringMap
Whether the single 3D histogram will be built.
Definition: BDSOutput.hh:290
void CopyFromHistToHist1D(const G4String &sourceName, const G4String &destinationName, const std::vector< G4int > &indices)
Definition: BDSOutput.cc:1193
G4String GetNextFileName()
Get the next file name based on the base file name and the accrued number of files.
Definition: BDSOutput.cc:390
virtual void InitialiseGeometryDependent()
Definition: BDSOutput.cc:166
void FillPrimary(const G4PrimaryVertex *vertex, const G4int turnsTaken)
Definition: BDSOutput.cc:235
G4double energyDepositedWorldContents
Integral when filling hit.
Definition: BDSOutput.hh:329
const G4String fileExtension
File extension to add to each file.
Definition: BDSOutput.hh:282
G4bool storeSamplerIon
Storage option.
Definition: BDSOutput.hh:315
G4bool storeModel
Storage option.
Definition: BDSOutput.hh:309
void FillRunInfo(const BDSEventInfo *info)
Fill run level summary information.
Definition: BDSOutput.cc:1187
G4double energyWorldExitKinetic
Integral when filling hit.
Definition: BDSOutput.hh:334
std::map< G4String, G4int > histIndices1D
Map of histogram name (short) to index of histogram in output.
Definition: BDSOutput.hh:339
void FillTrajectories(const BDSTrajectoriesToStore *trajectories)
Copy a set of trajectories to the output structure.
Definition: BDSOutput.cc:1007
G4bool storeELoss
Options for dynamic bits of output.
Definition: BDSOutput.hh:163
void FillParticleData(G4bool writeIons)
Fill the local structure particle data with information. Also calls WriteParticleData().
Definition: BDSOutput.cc:186
G4bool storeParticleData
Storage option.
Definition: BDSOutput.hh:307
G4bool storeApertureImpactsHistograms
Options for dynamic bits of output.
Definition: BDSOutput.hh:169
G4double energyImpactingApertureKinetic
Integral when filling hit.
Definition: BDSOutput.hh:332
G4double energyImpactingAperture
Integral when filling hit.
Definition: BDSOutput.hh:331
void FillEventPrimaryOnly(const BDSParticleCoordsFullGlobal &coords, const BDSParticleDefinition *particle)
Definition: BDSOutput.cc:263
G4bool storeELossWorldContents
Options for dynamic bits of output.
Definition: BDSOutput.hh:167
G4bool storeCollimatorInfo
Storage option.
Definition: BDSOutput.hh:300
virtual void WriteFileRunLevel()=0
void FillRun(const BDSEventInfo *info)
Copy run information to output structure.
Definition: BDSOutput.cc:371
void FillBeam(const GMAD::BeamBase *beam)
Definition: BDSOutput.cc:204
void FillHeader()
Fill the local structure header with information - updates time stamp.
Definition: BDSOutput.cc:178
void FillPrimaryLoss(const std::vector< const BDSTrajectoryPointHit * > &primaryLosses)
Fill a collection volume exit hits into the appropriate output structure.
Definition: BDSOutput.cc:986
static void PrintProtectedNames(std::ostream &out)
Feedback for protected names.
Definition: BDSOutput.cc:383
std::map< G4String, G4int > histIndices4D
Map of histogram name (short) to index of histogram in output.
Definition: BDSOutput.hh:341
void FillPrimaryHit(const std::vector< const BDSTrajectoryPointHit * > &primaryHits)
Fill the hit where the primary particle impact.
Definition: BDSOutput.cc:965
G4int outputFileNumber
Number of output file.
Definition: BDSOutput.hh:284
void FillApertureImpacts(const BDSHitsCollectionApertureImpacts *hits)
Fill aperture impact hits.
Definition: BDSOutput.cc:1072
void FillSamplerHits(const BDSHitsCollectionSampler *hits)
Fill sampler hits into output structures.
Definition: BDSOutput.cc:771
G4bool storeELossWorld
Options for dynamic bits of output.
Definition: BDSOutput.hh:166
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:289
void CreateHistograms()
Create histograms.
Definition: BDSOutput.cc:447
G4int storeTrajectoryStepPoints
Storage option.
Definition: BDSOutput.hh:316
G4bool storeTrajectoryStepPointLast
Storage option.
Definition: BDSOutput.hh:317
G4bool storeELossVacuum
Options for dynamic bits of output.
Definition: BDSOutput.hh:165
std::map< G4String, BDSHistBinMapper > scorerCoordinateMaps
Map of histogram name (short) to index of histogram in output.
Definition: BDSOutput.hh:342
G4bool storeSamplerMass
Storage option.
Definition: BDSOutput.hh:313
void FillModel()
Definition: BDSOutput.cc:218
G4double energyWorldExit
Integral when filling hit.
Definition: BDSOutput.hh:333
G4int nCollimatorsInteracted
Integral when filling hit.
Definition: BDSOutput.hh:335
void FillOptions(const GMAD::OptionsBase *options)
Definition: BDSOutput.cc:211
G4bool storeELossVacuumHistograms
Storage option.
Definition: BDSOutput.hh:306
LossType
Enum for different types of energy loss that can be written out.
Definition: BDSOutput.hh:182
void CalculateHistogramParameters()
Calculate the number of bins and required maximum s.
Definition: BDSOutput.cc:424
G4bool storeELossTunnel
Options for dynamic bits of output.
Definition: BDSOutput.hh:164
G4double energyDeposited
Integral when filling hit.
Definition: BDSOutput.hh:326
static const std::set< G4String > protectedNames
Invalid names for samplers - kept here as this is where the output structures are created.
Definition: BDSOutput.hh:287
G4int numberEventPerFile
Number of events stored per file.
Definition: BDSOutput.hh:283
G4double energyDepositedWorld
Integral when filling hit.
Definition: BDSOutput.hh:328
virtual void UpdateSamplers()
Interface to allow updating samplers with dynamic construction. Only for link - not for regular use.
Definition: BDSOutput.hh:94
G4bool storeCollimatorHits
Storage option.
Definition: BDSOutput.hh:301
void FillScorerHits(const std::map< G4String, G4THitsMap< G4double > * > &scorerHitsMap)
Fill a map of scorer hits into the output.
Definition: BDSOutput.cc:1101
static G4bool InvalidSamplerName(const G4String &samplerName)
Test whether a sampler name is invalid or not.
Definition: BDSOutput.cc:378
void FillCollimatorHits(const BDSHitsCollectionCollimator *hits, const std::vector< const BDSTrajectoryPointHit * > &primaryLossPoints)
Fill collimator hits.
Definition: BDSOutput.cc:1013
BDS::TrajectoryOptions storeTrajectoryOptions
Storage option.
Definition: BDSOutput.hh:318
std::map< G4String, G4int > histIndices3D
Map of histogram name (short) to index of histogram in output.
Definition: BDSOutput.hh:340
G4bool storeApertureImpacts
Options for dynamic bits of output.
Definition: BDSOutput.hh:168
virtual void CloseFile()=0
G4bool storeELossTunnelHistograms
Storage option.
Definition: BDSOutput.hh:305
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:35
Basic options class independent of Geant4.
Definition: optionsBase.h:36
Parser namespace for GMAD language. Combination of Geant4 and MAD.