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) Royal Holloway,
3University of London 2001 - 2023.
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 unsigned long long int nOriginalEventsIn,
149 unsigned long long int nEventsRequestedIn,
150 unsigned long long int nEventsInOriginalDistrFileIn,
151 unsigned long long int nEventsDistrFileSkippedIn,
152 unsigned int distrFileLoopNTimesIn);
153
155 static G4bool InvalidSamplerName(const G4String& samplerName);
156
158 static void PrintProtectedNames(std::ostream& out);
159
160protected:
162 G4String GetNextFileName();
163
166
171 G4bool storeELossWorld; // for both world and world exit
178
183 std::map<G4String, G4int> blmCollectionNameToHistogramID;
184
185private:
187 enum class LossType {energy, vacuum, tunnel, world, worldexit, worldcontents};
188
190 virtual void WriteHeader() = 0;
191
193 virtual void WriteHeaderEndOfFile() = 0;
194
196 virtual void WriteParticleData() = 0;
197
199 virtual void WriteBeam() = 0;
200
202 virtual void WriteOptions() = 0;
203
205 virtual void WriteModel() = 0;
206
209 virtual void WriteFileEventLevel() = 0;
210
213 virtual void WriteFileRunLevel() = 0;
214
217
219 void CreateHistograms();
220
223 void FillPrimary(const G4PrimaryVertex* vertex,
224 const G4int turnsTaken);
225
227 void FillEventInfo(const BDSEventInfo* info);
228
230 void FillSamplerHitsVector(const std::vector<BDSHitsCollectionSampler*>& hits);
231 void FillSamplerCylinderHitsVector(const std::vector<BDSHitsCollectionSamplerCylinder*>& hits);
232 void FillSamplerSphereHitsVector(const std::vector<BDSHitsCollectionSamplerSphere*>& hits);
233
236
239
241 void FillPrimaryHit(const std::vector<const BDSTrajectoryPointHit*>& primaryHits);
242
245 const LossType type);
246
249 const LossType type);
250
252 //void FillELossWorldExitHits(const BDSHitsCollectionVolumeExit* worldExitHits);
253
255 void FillPrimaryLoss(const std::vector<const BDSTrajectoryPointHit*>& primaryLosses);
256
258 void FillTrajectories(const BDSTrajectoriesToStore* trajectories);
259
262 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints);
263
266
268 void FillScorerHits(const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap);
269
271 void FillScorerHitsIndividual(const G4String& hsitogramDefName,
272 const G4THitsMap<G4double>* hitMap);
273
274 void FillScorerHitsIndividualBLM(const G4String& histogramDefName,
275 const G4THitsMap<G4double>* hitMap);
276
280 unsigned long long int nOriginalEventsIn,
281 unsigned long long int nEventsRequestedIn,
282 unsigned long long int nEventsInOriginalDistrFileIn,
283 unsigned long long int nEventsDistrFileSkippedIn,
284 unsigned int distrFileLoopNTimesIn);
285
288 void CopyFromHistToHist1D(const G4String& sourceName,
289 const G4String& destinationName,
290 const std::vector<G4int>& indices);
291
293 BDSOutput() = delete;
294
295 const G4String baseFileName;
296 const G4String fileExtension;
299
301 const static std::set<G4String> protectedNames;
302
305
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.
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:165
void FillEnergyLoss(const BDSHitsCollectionEnergyDeposition *loss, const LossType type)
Fill a collection of energy hits into the appropriate output structure.
Definition: BDSOutput.cc:888
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.
G4double sMaxHistograms
Definition: BDSOutput.hh:308
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 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:372
void FillEventInfo(const BDSEventInfo *info)
Fill event summary information.
Definition: BDSOutput.cc:681
virtual void WriteOptions()=0
Write the options.
G4bool storeCavityInfo
Storage option.
Definition: BDSOutput.hh:314
std::map< G4String, G4int > blmCollectionNameToHistogramID
Definition: BDSOutput.hh:183
std::map< G4int, G4double > histIndexToUnits1D
Definition: BDSOutput.hh:362
G4bool storePrimaries
Options for dynamic bits of output.
Definition: BDSOutput.hh:175
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.
Definition: BDSOutput.cc:1134
const G4String baseFileName
Base file name.
Definition: BDSOutput.hh:295
void FillSamplerHitsVector(const std::vector< BDSHitsCollectionSampler * > &hits)
Fill sampler hits from a vector<sampler hits collection>.
Definition: BDSOutput.cc:707
G4bool storeTrajectory
Options for dynamic bits of output.
Definition: BDSOutput.hh:176
void FillSamplerHitsLink(const BDSHitsCollectionSamplerLink *hits)
Fill sampler link hits into output structures.
Definition: BDSOutput.cc:808
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:304
void CopyFromHistToHist1D(const G4String &sourceName, const G4String &destinationName, const std::vector< G4int > &indices)
Definition: BDSOutput.cc:1220
G4String GetNextFileName()
Get the next file name based on the base file name and the accrued number of files.
Definition: BDSOutput.cc:405
virtual void InitialiseGeometryDependent()
Definition: BDSOutput.cc:168
void FillPrimary(const G4PrimaryVertex *vertex, const G4int turnsTaken)
Definition: BDSOutput.cc:243
G4double energyDepositedWorldContents
Integral when filling hit.
Definition: BDSOutput.hh:344
const G4String fileExtension
File extension to add to each file.
Definition: BDSOutput.hh:296
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:380
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.
Definition: BDSOutput.cc:1022
G4bool storeELoss
Options for dynamic bits of output.
Definition: BDSOutput.hh:168
void FillParticleData(G4bool writeIons)
Fill the local structure particle data with information. Also calls WriteParticleData().
Definition: BDSOutput.cc:190
G4bool storeParticleData
Storage option.
Definition: BDSOutput.hh:322
G4bool storeApertureImpactsHistograms
Options for dynamic bits of output.
Definition: BDSOutput.hh:174
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:271
G4bool storeELossWorldContents
Options for dynamic bits of output.
Definition: BDSOutput.hh:172
G4bool storeCollimatorInfo
Storage option.
Definition: BDSOutput.hh:315
virtual void WriteFileRunLevel()=0
void FillBeam(const GMAD::BeamBase *beam)
Definition: BDSOutput.cc:208
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:182
void FillPrimaryLoss(const std::vector< const BDSTrajectoryPointHit * > &primaryLosses)
Fill a collection volume exit hits into the appropriate output structure.
Definition: BDSOutput.cc:1001
static void PrintProtectedNames(std::ostream &out)
Feedback for protected names.
Definition: BDSOutput.cc:398
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:980
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)
Definition: BDSOutput.cc:1202
G4int outputFileNumber
Number of output file.
Definition: BDSOutput.hh:298
void FillApertureImpacts(const BDSHitsCollectionApertureImpacts *hits)
Fill aperture impact hits.
Definition: BDSOutput.cc:1087
void FillSamplerHits(const BDSHitsCollectionSampler *hits)
Fill sampler hits into output structures.
Definition: BDSOutput.cc:786
G4bool storeELossWorld
Options for dynamic bits of output.
Definition: BDSOutput.hh:171
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:297
void CreateHistograms()
Create histograms.
Definition: BDSOutput.cc:462
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:170
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:222
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:215
G4bool storeELossVacuumHistograms
Storage option.
Definition: BDSOutput.hh:321
LossType
Enum for different types of energy loss that can be written out.
Definition: BDSOutput.hh:187
void CalculateHistogramParameters()
Calculate the number of bins and required maximum s.
Definition: BDSOutput.cc:439
G4bool storeELossTunnel
Options for dynamic bits of output.
Definition: BDSOutput.hh:169
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:301
G4int numberEventPerFile
Number of events stored per file.
Definition: BDSOutput.hh:297
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:94
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.
Definition: BDSOutput.cc:1116
static G4bool InvalidSamplerName(const G4String &samplerName)
Test whether a sampler name is invalid or not.
Definition: BDSOutput.cc:393
void FillCollimatorHits(const BDSHitsCollectionCollimator *hits, const std::vector< const BDSTrajectoryPointHit * > &primaryLossPoints)
Fill collimator hits.
Definition: BDSOutput.cc:1028
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:173
virtual void CloseFile()=0
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:35
Basic options class independent of Geant4.
Definition: optionsBase.h:36
Parser namespace for GMAD language. Combination of Geant4 and MAD.