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 - 2024.
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() = delete;
78 BDSOutput(const G4String& baseFileNameIn,
79 const G4String& fileExtentionIn,
80 G4int fileNumberOffset);
81 virtual ~BDSOutput(){;}
82
84 virtual void NewFile() = 0;
85
88 virtual void CloseFile() = 0;
89
93 virtual void InitialiseGeometryDependent();
94
97
99 void FillHeader();
100
102 void FillParticleData(G4bool writeIons);
103
106 void FillBeam(const GMAD::BeamBase* beam);
107
110 void FillOptions(const GMAD::OptionsBase* options);
111
114 void FillModel();
115
121 const BDSParticleDefinition* particle);
122
124 void FillEvent(const BDSEventInfo* info,
125 const G4PrimaryVertex* vertex,
126 const std::vector<BDSHitsCollectionSampler*>& samplerHitsPlane,
127 const std::vector<BDSHitsCollectionSamplerCylinder*>& samplerHitsCylinder,
128 const std::vector<BDSHitsCollectionSamplerSphere*>& samplerHitsSphere,
129 const BDSHitsCollectionSamplerLink* samplerHitsLink,
130 const BDSHitsCollectionEnergyDeposition* energyLoss,
131 const BDSHitsCollectionEnergyDeposition* energyLossFull,
132 const BDSHitsCollectionEnergyDeposition* energyLossVacuum,
133 const BDSHitsCollectionEnergyDeposition* energyLossTunnel,
134 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorld,
135 const BDSHitsCollectionEnergyDepositionGlobal* energyLossWorldContents,
136 const BDSHitsCollectionEnergyDepositionGlobal* worldExitHits,
137 const std::vector<const BDSTrajectoryPointHit*>& primaryHits,
138 const std::vector<const BDSTrajectoryPointHit*>& primaryLosses,
139 const BDSTrajectoriesToStore* trajectories,
140 const BDSHitsCollectionCollimator* collimatorHits,
141 const BDSHitsCollectionApertureImpacts* apertureImpactHits,
142 const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap,
143 const G4int turnsTaken);
144
146 void CloseAndOpenNewFile();
147
149 void FillRun(const BDSEventInfo* info,
150 unsigned long long int nOriginalEventsIn,
151 unsigned long long int nEventsRequestedIn,
152 unsigned long long int nEventsInOriginalDistrFileIn,
153 unsigned long long int nEventsDistrFileSkippedIn,
154 unsigned int distrFileLoopNTimesIn);
155
157 static G4bool InvalidSamplerName(const G4String& samplerName);
158
160 static void PrintProtectedNames(std::ostream& out);
161
162protected:
164 G4String GetNextFileName();
165
168
173 G4bool storeELossWorld; // for both world and world exit
181
186 std::map<G4String, G4int> blmCollectionNameToHistogramID;
187
188private:
190 enum class LossType {energy, vacuum, tunnel, world, worldexit, worldcontents};
191
193 virtual void WriteHeader() = 0;
194
196 virtual void WriteHeaderEndOfFile() = 0;
197
199 virtual void WriteParticleData() = 0;
200
202 virtual void WriteBeam() = 0;
203
205 virtual void WriteOptions() = 0;
206
208 virtual void WriteModel() = 0;
209
212 virtual void WriteFileEventLevel() = 0;
213
216 virtual void WriteFileRunLevel() = 0;
217
220
222 void CreateHistograms();
223
226 void FillPrimary(const G4PrimaryVertex* vertex,
227 const G4int turnsTaken);
228
230 void FillEventInfo(const BDSEventInfo* info);
231
233 void FillSamplerHitsVector(const std::vector<BDSHitsCollectionSampler*>& hits);
234 void FillSamplerCylinderHitsVector(const std::vector<BDSHitsCollectionSamplerCylinder*>& hits);
235 void FillSamplerSphereHitsVector(const std::vector<BDSHitsCollectionSamplerSphere*>& hits);
236
239
242
244 void FillPrimaryHit(const std::vector<const BDSTrajectoryPointHit*>& primaryHits);
245
248 const LossType type);
249
251 void FillEnergyLoss(const BDSHitsCollectionEnergyDepositionGlobal* loss,
252 const LossType type);
253
255 //void FillELossWorldExitHits(const BDSHitsCollectionVolumeExit* worldExitHits);
256
258 void FillPrimaryLoss(const std::vector<const BDSTrajectoryPointHit*>& primaryLosses);
259
261 void FillTrajectories(const BDSTrajectoriesToStore* trajectories);
262
264 void FillCollimatorHits(const BDSHitsCollectionCollimator* hits,
265 const std::vector<const BDSTrajectoryPointHit*>& primaryLossPoints);
266
268 void FillApertureImpacts(const BDSHitsCollectionApertureImpacts* hits);
269
271 void FillScorerHits(const std::map<G4String, G4THitsMap<G4double>*>& scorerHitsMap);
272
274 void FillScorerHitsIndividual(const G4String& hsitogramDefName,
275 const G4THitsMap<G4double>* hitMap);
276
277 void FillScorerHitsIndividualBLM(const G4String& histogramDefName,
278 const G4THitsMap<G4double>* hitMap);
279
283 unsigned long long int nOriginalEventsIn,
284 unsigned long long int nEventsRequestedIn,
285 unsigned long long int nEventsInOriginalDistrFileIn,
286 unsigned long long int nEventsDistrFileSkippedIn,
287 unsigned int distrFileLoopNTimesIn);
288
291 void CopyFromHistToHist1D(const G4String& sourceName,
292 const G4String& destinationName,
293 const std::vector<G4int>& indices);
294
295 const G4String baseFileName;
296 const G4String fileExtension;
299
301 const static std::set<G4String> protectedNames;
302
305
309 G4double sMaxHistograms;
310
312 G4int nbins;
313
336
340
353
355 std::map<G4String, G4int> histIndices1D;
356 std::map<G4String, G4int> histIndices3D;
357 std::map<G4String, G4int> histIndices4D;
358 std::map<G4String, BDSHistBinMapper> scorerCoordinateMaps;
360
363 std::map<G4int, G4double> histIndexToUnits1D;
364 std::map<G4int, G4double> histIndexToUnits3D;
365 std::map<G4int, G4double> histIndexToUnits4D;
366};
367
368#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: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:167
void FillEnergyLoss(const BDSHitsCollectionEnergyDeposition *loss, const LossType type)
Fill a collection of energy hits into the appropriate output structure.
Definition BDSOutput.cc:895
G4double energyDepositedVacuum
Integral when filling hit.
Definition BDSOutput.hh:343
virtual void WriteParticleData()=0
Write the geant4 information.
G4bool createCollimatorOutputStructures
Definition BDSOutput.hh:339
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:319
G4bool storeSamplerCharge
Storage option.
Definition BDSOutput.hh:327
G4bool storeSamplerRigidity
Storage option.
Definition BDSOutput.hh:330
virtual void WriteFileEventLevel()=0
BDSOutput()=delete
No default constructor.
G4bool storePerEventHistos
Options for dynamic bits of output.
Definition BDSOutput.hh:179
G4bool storeCollimatorHitsLinks
Storage option.
Definition BDSOutput.hh:318
G4bool storeELossHistograms
Storage option.
Definition BDSOutput.hh:320
G4bool storePrimaryHistograms
Storage option.
Definition BDSOutput.hh:324
G4double energyDepositedTunnel
Integral when filling hit.
Definition BDSOutput.hh:346
G4bool storeSamplerKineticEnergy
Storage option.
Definition BDSOutput.hh:328
void CloseAndOpenNewFile()
Close a file and open a new one.
Definition BDSOutput.cc:374
void FillEventInfo(const BDSEventInfo *info)
Fill event summary information.
Definition BDSOutput.cc:688
virtual void WriteOptions()=0
Write the options.
G4bool storeCavityInfo
Storage option.
Definition BDSOutput.hh:315
std::map< G4String, G4int > blmCollectionNameToHistogramID
Definition BDSOutput.hh:186
std::map< G4int, G4double > histIndexToUnits1D
Definition BDSOutput.hh:363
G4bool storePrimaries
Options for dynamic bits of output.
Definition BDSOutput.hh:177
G4bool storeSamplerPolarCoords
Storage option.
Definition BDSOutput.hh:326
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:295
void FillSamplerHitsVector(const std::vector< BDSHitsCollectionSampler * > &hits)
Fill sampler hits from a vector<sampler hits collection>.
Definition BDSOutput.cc:714
G4bool storeTrajectory
Options for dynamic bits of output.
Definition BDSOutput.hh:178
void FillSamplerHitsLink(const BDSHitsCollectionSamplerLink *hits)
Fill sampler link hits into output structures.
Definition BDSOutput.cc:815
G4int nbins
Number of bins for each histogram required.
Definition BDSOutput.hh:312
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)
G4String GetNextFileName()
Get the next file name based on the base file name and the accrued number of files.
Definition BDSOutput.cc:407
virtual void InitialiseGeometryDependent()
Definition BDSOutput.cc:171
void FillPrimary(const G4PrimaryVertex *vertex, const G4int turnsTaken)
Definition BDSOutput.cc:246
G4double energyDepositedWorldContents
Integral when filling hit.
Definition BDSOutput.hh:345
const G4String fileExtension
File extension to add to each file.
Definition BDSOutput.hh:296
G4bool storeSamplerIon
Storage option.
Definition BDSOutput.hh:331
G4bool storeModel
Storage option.
Definition BDSOutput.hh:325
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:382
G4double energyWorldExitKinetic
Integral when filling hit.
Definition BDSOutput.hh:350
std::map< G4String, G4int > histIndices1D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:355
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:170
void FillParticleData(G4bool writeIons)
Fill the local structure particle data with information. Also calls WriteParticleData().
Definition BDSOutput.cc:193
G4bool storeParticleData
Storage option.
Definition BDSOutput.hh:323
G4bool storeApertureImpactsHistograms
Options for dynamic bits of output.
Definition BDSOutput.hh:176
G4double energyImpactingApertureKinetic
Integral when filling hit.
Definition BDSOutput.hh:348
G4double energyImpactingAperture
Integral when filling hit.
Definition BDSOutput.hh:347
void FillEventPrimaryOnly(const BDSParticleCoordsFullGlobal &coords, const BDSParticleDefinition *particle)
Definition BDSOutput.cc:273
G4bool storeELossWorldContents
Options for dynamic bits of output.
Definition BDSOutput.hh:174
G4bool storeCollimatorInfo
Storage option.
Definition BDSOutput.hh:316
virtual void WriteFileRunLevel()=0
void FillBeam(const GMAD::BeamBase *beam)
Definition BDSOutput.cc:211
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:185
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:400
std::map< G4String, G4int > histIndices4D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:357
void FillPrimaryHit(const std::vector< const BDSTrajectoryPointHit * > &primaryHits)
Fill the hit where the primary particle impact.
Definition BDSOutput.cc:992
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:298
void FillApertureImpacts(const BDSHitsCollectionApertureImpacts *hits)
Fill aperture impact hits.
void FillSamplerHits(const BDSHitsCollectionSampler *hits)
Fill sampler hits into output structures.
Definition BDSOutput.cc:793
G4bool storeELossWorld
Options for dynamic bits of output.
Definition BDSOutput.hh:173
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:299
void CreateHistograms()
Create histograms.
Definition BDSOutput.cc:464
G4int storeTrajectoryStepPoints
Storage option.
Definition BDSOutput.hh:332
G4bool storeTrajectoryStepPointLast
Storage option.
Definition BDSOutput.hh:333
G4bool storeELossVacuum
Options for dynamic bits of output.
Definition BDSOutput.hh:172
std::map< G4String, BDSHistBinMapper > scorerCoordinateMaps
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:358
G4bool storeSamplerMass
Storage option.
Definition BDSOutput.hh:329
void FillModel()
Definition BDSOutput.cc:225
G4double energyWorldExit
Integral when filling hit.
Definition BDSOutput.hh:349
G4int nCollimatorsInteracted
Integral when filling hit.
Definition BDSOutput.hh:351
void FillOptions(const GMAD::OptionsBase *options)
Definition BDSOutput.cc:218
G4bool storeELossVacuumHistograms
Storage option.
Definition BDSOutput.hh:322
LossType
Enum for different types of energy loss that can be written out.
Definition BDSOutput.hh:190
void CalculateHistogramParameters()
Calculate the number of bins and required maximum s.
Definition BDSOutput.cc:441
G4bool storeELossTunnel
Options for dynamic bits of output.
Definition BDSOutput.hh:171
G4double energyDeposited
Integral when filling hit.
Definition BDSOutput.hh:342
static const std::set< G4String > protectedNames
Invalid names for samplers - kept here as this is where the output structures are created.
Definition BDSOutput.hh:90
G4int numberEventPerFile
Number of events stored per file.
Definition BDSOutput.hh:297
G4double energyDepositedWorld
Integral when filling hit.
Definition BDSOutput.hh:344
virtual void UpdateSamplers()
Interface to allow updating samplers with dynamic construction. Only for link - not for regular use.
Definition BDSOutput.hh:96
G4bool storeCollimatorHits
Storage option.
Definition BDSOutput.hh:317
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:395
void FillCollimatorHits(const BDSHitsCollectionCollimator *hits, const std::vector< const BDSTrajectoryPointHit * > &primaryLossPoints)
Fill collimator hits.
BDS::TrajectoryOptions storeTrajectoryOptions
Storage option.
Definition BDSOutput.hh:334
std::map< G4String, G4int > histIndices3D
Map of histogram name (short) to index of histogram in output.
Definition BDSOutput.hh:356
G4bool storeApertureImpacts
Options for dynamic bits of output.
Definition BDSOutput.hh:175
virtual void CloseFile()=0
G4double sMinHistograms
Definition BDSOutput.hh:308
G4bool storeELossTunnelHistograms
Storage option.
Definition BDSOutput.hh:321
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.