BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
optionsBase.cc
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#include "optionsBase.h"
19
20#include <iostream>
21
22using namespace GMAD;
23
25{
26 // Default Values for Options
27
28 // executable options
29 inputFileName = "optics.mad";
33 geant4PhysicsMacroFileNameFromExecOptions = false;
34 visDebug = false;
35 visVerbosity = 0;
36
37 outputFileName = "output";
38 outputFormat = "rootevent";
39#ifdef __ROOTDOUBLE__
41#else
43#endif
45 survey = false;
46 surveyFileName = "survey.dat";
47 batch = false;
48
49 verbose = false;
50
52
53 verboseEventBDSIM = false;
57
59
65
66 verboseImportanceSampling = 0;
67
68 verboseSensitivity = false;
69
70 circular = false;
71 seed = -1;
72 randomEngine = "hepjames";
73 nGenerate = 1;
74 recreate = false;
77 writeSeedState = false;
78 useASCIISeedState = false;
81 exportGeometry = false;
82 exportType = "gdml";
83 exportFileName = "geometry";
84 bdsimPath = "";
85
86 // very important options
87 physicsList = ""; //default - only transportation
88 physicsVerbose = false;
89 physicsVerbosity = 1;
90 physicsEnergyLimitLow = 0;
91 physicsEnergyLimitHigh = 0;
92 g4PhysicsUseBDSIMRangeCuts = true;
93 g4PhysicsUseBDSIMCutsAndLimits = true;
94
95 eventOffset = 0;
96 recreateSeedState = true;
97
98 elossHistoBinWidth = 1.0; // m
99
100 ffact = 1.0;
101
102 // beam line offset and rotation
103 beamlineX = 0;
104 beamlineY = 0;
105 beamlineZ = 0;
106 beamlinePhi = 0;
107 beamlineTheta = 0;
108 beamlinePsi = 0;
109 beamlineAxisX = 0;
110 beamlineAxisY = 0;
111 beamlineAxisZ = 0;
112 beamlineAngle = 0;
113 beamlineAxisAngle = false;
114 beamlineS = 0;
115
116 eventNumberOffset = 0;
117
118 // general geometrical parameters
119 checkOverlaps = false;
120 xsize=0.0, ysize=0.0;
121
122 // magnet geometry
123 magnetGeometryType = "polessquare";
124 outerMaterialName = "iron";
125 horizontalWidth = 0.6;
126 thinElementLength = 1e-7;
127 hStyle = false; // vhRatio < 0 as signal to use geometry factory default
128 vhRatio = -1;
129 coilWidthFraction = -1;
130 coilHeightFraction = -1;
131 ignoreLocalMagnetGeometry = false;
132 buildPoleFaceGeometry = true;
133
134 preprocessGDML = true;
135 preprocessGDMLSchema = true;
136
137 // geometry debugging
138 // always split sbends into smaller chunks by default
139 dontSplitSBends = false;
140 includeFringeFields = true;
141 includeFringeFieldsCavities = true;
142
143 yokeFields = true;
144 yokeFieldsMatchLHCGeometry = true;
145 useOldMultipoleOuterFields = false;
146 scalingFieldOuter = 1.0;
147 integrateKineticEnergyAlongBeamline = true;
148
149 cavityFieldType = "constantinz";
150
151 // beam pipe / aperture
152 beampipeThickness = 0.0025;
153 apertureType = "circular";
154 aper1 = 0.025; // also beampipeRadius
155 aper2 = 0;
156 aper3 = 0;
157 aper4 = 0;
158 beampipeMaterial = "StainlessSteel";
159 ignoreLocalAperture = false;
160
161 vacMaterial = "Vacuum";
162 emptyMaterial = "G4_Galactic";
163 worldMaterial = "G4_AIR";
164 worldGeometryFile = "";
165 autoColourWorldGeometryFile = true;
166 importanceWorldGeometryFile = "";
167 importanceVolumeMap = "";
168 worldVolumeMargin = 5; //m
169
170 vacuumPressure = 1e-12;
171
172 // tunnel options
173 buildTunnel = false;
174 buildTunnelStraight = false;
175 tunnelType = "circular";
176 tunnelThickness = 0.1;
178 tunnelMaterial = "concrete";
179 soilMaterial = "soil";
180 buildTunnelFloor = true;
181 tunnelFloorOffset = 1.0; // m
182 tunnelAper1 = 2.0; // m
183 tunnelAper2 = 2.0; // m
184 tunnelVisible = true;
185 tunnelOffsetX = 0;
186 tunnelOffsetY = 0;
187 tunnelMaxSegmentLength = 50.0; // m
188
189 removeTemporaryFiles = true;
190 temporaryDirectory = "";
191
192 // samplers
193 samplerDiameter = 5; // m
194
195 // physics processes
197 turnOnMieScattering = true;
200 scintYieldFactor = 1.0;
206 minimumRange = 0;
208 defaultRangeCut = 1e-3;
209 prodCutPhotons = 1e-3;
210 prodCutElectrons = 1e-3;
211 prodCutPositrons = 1e-3;
212 prodCutProtons = 1e-3;
213 neutronTimeLimit = 1e-6;
215 useLENDGammaNuclear = false;
216 useElectroNuclear = true; // defaults to match g4 em extra physics defaults
217 useMuonNuclear = true;
218 useGammaToMuMu = false;
219 usePositronToMuMu = false;
220 usePositronToHadrons = false;
222
234 turnOffMuonDecay = false;
235
236 // biasing options
237 scaleFactorLaser = 1;
238 defaultBiasVacuum = "";
239 defaultBiasMaterial = "";
240 biasForWorldVolume = "";
241 biasForWorldContents = "";
242 biasForWorldVacuum = "";
243 worldVacuumVolumeNames = "";
244
245 // tracking options
246 integratorSet = "bdsimmatrix";
247 fieldModulator = "";
248 lengthSafety = 1e-9; // be very careful adjusting this as it affects all the geometry
249 lengthSafetyLarge = 1e-6; // be very careful adjusting this as it affects all the geometry
250 maximumTrackingTime = -1; // s, nonsensical - used for testing
251 maximumStepLength = 20; // m, quite big
252 maximumTrackLength = 1e90; // m, no limit but smaller than DBL_MAX for safe *CLHEP::m
253 chordStepMinimum = 1e-9; // m // minimum step in a field for an integrator
254 chordStepMinimumYoke = 1e-6;
255 deltaIntersection = 1e-8; // m - should be greater than lengthSafety!
256 sampleElementsWithPoleface = false; // affects dipole tracking in certain integrator sets when true
257 nominalMatrixRelativeMomCut = 0.05; // be careful adjusting this as it affects dipolequadrupole tracking
259 dEThresholdForScattering = 1e-11; // GeV
260 backupStepperMomLimit = 0.1; // fraction of unit momentum
261
262 // default value in Geant4, old value 0 - error must be greater than this
263 minimumEpsilonStep = 1e-12; // used to be 1e-25 but since v11.1 this has to be greater than double precision
264 maximumEpsilonStep = 1e-7; // default value in Geant4, old value 1e-7
265 minimumEpsilonStepThin = 1e-12; // only for thin elements
266 maximumEpsilonStepThin = 1e-3; // only for thin elements
267 deltaOneStep = 1e-6; // maximum allowed spatial error in position (1um)
268 stopSecondaries = false;
269 killNeutrinos = false;
270 killedParticlesMassAddedToEloss = false;
271 minimumRadiusOfCurvature = 0.05; // 5cm - typical aperture
272
273 // hit generation
274 sensitiveOuter = true;
275 sensitiveBeamPipe = true;
276
277 // output / analysis options
278 numberOfEventsPerNtuple = 0;
279
280 storeMinimalData = false;
281
282 storeApertureImpacts = true;
283 storeApertureImpactsHistograms = true;
284 storeApertureImpactsIons = false;
285 storeApertureImpactsAll = false;
286 apertureImpactsMinimumKE = 0;
287 storeCavityInfo = true;
288 storeCollimatorInfo = false;
289 storeCollimatorHits = false;
290 storeCollimatorHitsLinks = false;
291 storeCollimatorHitsIons = false;
292 storeCollimatorHitsAll = false;
293 collimatorHitsMinimumKE = 0;
294 storeEloss = true;
295 storeElossHistograms = true;
296 storeElossVacuum = false;
297 storeElossVacuumHistograms = false;
298 storeElossTunnel = false;
299 storeElossTunnelHistograms = false;
300 storeElossWorld = false;
301 storeElossWorldIntegral = false;
302 storeElossWorldContents = false;
303 storeElossWorldContentsIntegral = false;
304 storeElossTurn = false;
305 storeElossLinks = false;
306 storeElossLocal = false;
307 storeElossGlobal = false;
308 storeElossTime = false;
309 storeElossStepLength = false;
310 storeElossPreStepKineticEnergy = false;
311 storeElossModelID = false;
312 storeElossPhysicsProcesses = false;
313 storeParticleData = true;
314 storePrimaries = true;
315 storePrimaryHistograms = true;
316
317 storeTrajectory = false;
318
319 storeTrajectoryDepth = 0;
320 storeTrajectoryStepPoints = 0;
321 storeTrajectoryStepPointLast = false;
322 storeTrajectoryParticle = "";
323 storeTrajectoryParticleID = "";
324 storeTrajectorySecondaryParticles = false;
325 storeTrajectoryEnergyThreshold = -1.0;
326 storeTrajectorySamplerID = "";
327 storeTrajectoryELossSRange = "";
328
329 storeTrajectoryTransportationSteps = true;
330 trajNoTransportation = false;
331 storeTrajectoryKineticEnergy = true;
332 storeTrajectoryMomentumVector = false;
333 storeTrajectoryProcesses = false;
334 storeTrajectoryTime = false;
335 storeTrajectoryLocal = false;
336 storeTrajectoryLinks = false;
337 storeTrajectoryIon = false;
338 storeTrajectoryMaterial = false;
339 storeTrajectoryAllVariables = false;
340
341 trajectoryFilterLogicAND = false;
342
343 storeSamplerAll = false;
344 storeSamplerPolarCoords = false;
345 storeSamplerCharge = false;
346 storeSamplerKineticEnergy = true;
347 storeSamplerMass = false;
348 storeSamplerRigidity = false;
349 storeSamplerIon = false;
350
351 trajCutGTZ = 1e99; // minimum z position, so large default value
352 trajCutLTR = 0.0; // maximum radius in mm, so small default value
353 trajConnect = false; // connect disconnected trajectory trees
354
355 storeModel = true;
356
357 storePerEventHistos = true;
358
359 samplersSplitLevel = 0;
360 modelSplitLevel = 1;
361 uprootCompatible = 0;
362
363 // circular options
364 nturns = 1;
365 ptcOneTurnMapFileName = "";
366
367 printFractionEvents = 0.1;
368 printFractionTurns = 0.2;
369 printPhysicsProcesses = false;
370
371 // visualisation
373
374 // scoring map
375 nbinsx = 1;
376 nbinsy = 1;
377 nbinsz = 1;
378 nbinse = 1;
379 xmin = -0.5;
380 xmax = 0.5;
381 ymin = -0.5;
382 ymax = 0.5;
383 zmin = 0;
384 zmax = 1;
385 emin = 1e-12;
386 emax = 1e4;
387 useScoringMap = false;
388
389 // millicharge options
390 enableMillicharge = false;
391 millichargeName = "millicharged";
392 millichargeMass = 100;
393 millichargeCharge = 0.1;
394 millichargeID = 411000; // check this pdgID is not in use
395}
396
397
399{
400 std::cout<<"Options " << std::endl;
401 std::cout<<"n particles : " << nGenerate << std::endl;
402 std::cout<<"BV sign : " << ffact << std::endl;
403 std::cout<<"Optical absorption on : " << turnOnOpticalAbsorption << std::endl;
404 std::cout<<"Mie scattering on : " << turnOnMieScattering << std::endl;
405 std::cout<<"Rayleigh scattering on : " << turnOnRayleighScattering << std::endl;
406 std::cout<<"Optical surface on : " << turnOnOpticalSurface << std::endl;
407}
408
std::string bdsimPath
std::string seedStateFileName
Seed state file path.
Definition optionsBase.h:99
std::string magnetGeometryType
default magnet geometry parameters
double beamlineZ
Initial beam line transform w.r.t. the world coordinate frame.
int nGenerate
The number of primary events to simulate.
Definition optionsBase.h:93
std::string physicsList
list of physics processes
double muonSplittingThresholdParentEk2
physics parameters
double beamlineAngle
Initial beam line transform w.r.t. the world coordinate frame.
double beamlineS
Initial beam line transform w.r.t. the world coordinate frame.
bool survey
Parameter for survey.
Definition optionsBase.h:55
double minimumRange
physics parameters
std::string outputFileName
Parameter for output format.
Definition optionsBase.h:48
int muonSplittingFactor
physics parameters
double tunnelSoilThickness
tunnel geometry parameters
double minimumRadiusOfCurvature
Minimum allowed radius of curvature.
std::string outputFormat
Parameter for output format.
Definition optionsBase.h:49
int verboseSteppingEventContinueFor
Stepping level verbosity.
Definition optionsBase.h:82
bool beamlineAxisAngle
Initial beam line transform w.r.t. the world coordinate frame.
std::string exportFileName
Parameter for controlling geometry export.
int seed
The seed value for the random number generator.
Definition optionsBase.h:91
double tunnelOffsetY
tunnel geometry parameters
double tunnelFloorOffset
tunnel geometry parameters
int verboseEventContinueFor
Event level verbosity.
Definition optionsBase.h:73
bool hStyle
H Style dipoles (if not, C Style).
double xsize
for element specification
std::string particlesToExcludeFromCuts
physics parameters
double ffact
magnetic field flip (+1 default, -1: flip sign)
double tunnelMaxSegmentLength
tunnel geometry parameters
double muonSplittingThresholdParentEk
physics parameters
int verboseEventStart
Event level verbosity.
Definition optionsBase.h:72
bool useLENDGammaNuclear
physics parameters
double maximumTrackingTime
Maximum tracking time per track [s].
bool dontSplitSBends
geometry debug, don't split bends into multiple segments
std::string tunnelMaterial
tunnel geometry parameters
bool useASCIISeedState
Whether to use the seed state from an ASCII file.
Definition optionsBase.h:98
bool tunnelIsInfiniteAbsorber
physics parameters
bool verboseSteppingPrimaryOnly
Stepping level verbosity.
Definition optionsBase.h:83
int visVerbosity
Geant4 vis system verbosity.
Definition optionsBase.h:45
double muonSplittingExclusionWeight
physics parameters
bool collimatorsAreInfiniteAbsorbers
physics parameters
int verboseRunLevel
Run level verbosity.
Definition optionsBase.h:67
bool turnOnOpticalSurface
Physics processes.
double prodCutProtons
physics parameters
int nSegmentsPerCircle
Number of facets per 2pi in visualisation.
std::string soilMaterial
tunnel geometry parameters
bool preprocessGDML
geometry control
bool batch
Flag for batch / interactive mode.
Definition optionsBase.h:59
double minimumKineticEnergy
physics parameters
int eventOffset
Event number to start from when recreating from a root file.
int verboseTrackingLevel
Tracking verbosity.
Definition optionsBase.h:76
bool circular
Flag for circular machine.
Definition optionsBase.h:90
bool checkOverlaps
bdsim options
double neutronKineticEnergyLimit
physics parameters
double aper1
default beampipe parameters
double maximumTrackLength
Maximum permitted track length [m].
int verboseEventLevel
Event level verbosity.
Definition optionsBase.h:71
bool restoreFTPFDiffractionForAGreater10
physics parameters
bool turnOnOpticalAbsorption
Physics processes.
bool buildTunnelStraight
tunnel geometry parameters
std::string inputFileName
Input filename.
Definition optionsBase.h:39
long maximumTracksPerEvent
physics parameters
double backupStepperMomLimit
Fractional momentum limit for reverting to backup steppers.
double aper2
default beampipe parameters
int outputCompressionLevel
Parameter for output format.
Definition optionsBase.h:51
double beamlinePhi
Initial beam line transform w.r.t. the world coordinate frame.
double maximumBetaChangePerStep
physics parameters
double maximumStepLength
Maximum permitted step length in any volume.
std::string exportType
Parameter for controlling geometry export.
double neutronTimeLimit
physics parameters
bool recreateSeedState
Load seed state when recreating events.
std::string vacMaterial
vacuum material
bool verbose
General verbosity.
Definition optionsBase.h:64
std::string recreateFileName
The file path to recreate a run from.
Definition optionsBase.h:95
bool teleporterFullTransform
Whether to use the new Transform3D method for the teleporter.
bool buildTunnelFloor
tunnel geometry parameters
int startFromEvent
Event to start from when recreating.
Definition optionsBase.h:96
std::string emptyMaterial
material in container volumes
bool muonSplittingExcludeWeight1Particles
physics parameters
double prodCutPhotons
physics parameters
bool generatePrimariesOnly
Whether to only generate primary coordinates and quit, or not.
double defaultRangeCut
physics parameters
double beamlineAxisY
Initial beam line transform w.r.t. the world coordinate frame.
double prodCutElectrons
physics parameters
double tunnelAper1
tunnel geometry parameters
bool verboseEventBDSIM
Event level verbosity.
Definition optionsBase.h:70
int maximumPhotonsPerStep
physics parameters
std::string beampipeMaterial
default beampipe parameters
bool exportGeometry
Parameter for controlling geometry export.
int verboseSteppingLevel
Stepping level verbosity.
Definition optionsBase.h:80
double beampipeThickness
default beampipe parameters
bool turnOnRayleighScattering
Physics processes.
bool turnOffMuonDecay
physics parameters
std::string geant4PhysicsMacroFileName
Geant4 physics macro.
Definition optionsBase.h:42
void print() const
print some properties
std::string visMacroFileName
Visualisation filename.
Definition optionsBase.h:40
double scintYieldFactor
physics parameters
bool beamPipeIsInfiniteAbsorber
physics parameters
double beamlineX
Initial beam line transform w.r.t. the world coordinate frame.
std::string apertureType
default beampipe parameters
bool verboseSteppingBDSIM
Stepping level verbosity.
Definition optionsBase.h:79
bool useMuonNuclear
physics parameters
bool useElectroNuclear
physics parameters
int verboseSteppingEventStart
Stepping level verbosity.
Definition optionsBase.h:81
std::string surveyFileName
Parameter for survey.
Definition optionsBase.h:56
bool recreate
Whether to recreate from a file or not.
Definition optionsBase.h:94
double tunnelAper2
tunnel geometry parameters
bool turnOnMieScattering
Physics processes.
double beamlineY
Initial beam line transform w.r.t. the world coordinate frame.
double beamlineAxisX
Initial beam line transform w.r.t. the world coordinate frame.
double tunnelThickness
tunnel geometry parameters
std::string randomEngine
Name of random engine to use.
Definition optionsBase.h:92
bool extendPionDecayChannels
physics parameters
double prodCutPositrons
physics parameters
bool buildTunnel
tunnel geometry parameters
bool outputDoublePrecision
Parameter for output format.
Definition optionsBase.h:50
bool writeSeedState
Write the seed state each event to a text file.
Definition optionsBase.h:97
bool visDebug
Flag for visualisation debug.
Definition optionsBase.h:44
bool useGammaToMuMu
physics parameters
double aper4
default beampipe parameters
double aper3
default beampipe parameters
double minimumKineticEnergyTunnel
physics parameters
double tunnelOffsetX
tunnel geometry parameters
bool usePositronToMuMu
physics parameters
std::string tunnelType
tunnel geometry parameters
double beamlineAxisZ
Initial beam line transform w.r.t. the world coordinate frame.
double beamlinePsi
Initial beam line transform w.r.t. the world coordinate frame.
std::string geant4MacroFileName
Geant4 macro to run.
Definition optionsBase.h:41
bool trajNoTransportation
kept only for backwards compatibility.
double xrayAllSurfaceRoughness
physics parameters
bool usePositronToHadrons
physics parameters
bool tunnelVisible
tunnel geometry parameters
int muonSplittingFactor2
physics parameters
double worldVolumeMargin
Padding margin for world volume size.
double nominalMatrixRelativeMomCut
Momentum threshold for nominal dipole matrix tracking.
double beamlineTheta
Initial beam line transform w.r.t. the world coordinate frame.
bool ignoreLocalAperture
default beampipe parameters
Parser namespace for GMAD language. Combination of Geant4 and MAD.