BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
options.cc
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#include "options.h"
20
21#include <algorithm>
22#include <iostream>
23#include <sstream>
24#include <string>
25
26using namespace GMAD;
27
28Options::Options():
30{
31 PublishMembers();
32}
33
34Options::Options(const GMAD::OptionsBase& options):
35 OptionsBase(options)
36{
37 PublishMembers();
38}
39
40double Options::get_value(std::string property_name)const{
41 double value;
42 try {
43 value = get<double>(this,property_name);
44 }
45 catch (const std::runtime_error&) {
46 try {
47 // try int and convert
48 value = (double)get<int>(this,property_name);
49 }
50 catch (const std::runtime_error&) {
51 try {
52 // try long and convert
53 value = (double)get<long>(this,property_name);
54 }
55 catch (const std::runtime_error&) {
56 std::cerr << "options.cc> Error: unknown property \"" << property_name << "\" (only works on numerical properties)" << std::endl;
57 exit(1);
58 }
59 }
60 }
61 return value;
62}
63
64std::string Options::get_value_string(std::string property_name) const
65{
66 try {
67 double value = get<double>(this, property_name);
68 std::ostringstream strs;
69 strs << value;
70 return strs.str();
71 }
72 catch (...) {
73 try {
74 int value = get<int>(this, property_name);
75 std::ostringstream strs;
76 strs << value;
77 return strs.str();
78 }
79 catch (...) {
80 try {
81 std::string value = get<std::string>(this, property_name);
82 return value;
83 }
84 catch (...) {
85 try {
86 bool value = get<bool>(this, property_name);
87 std::ostringstream strs;
88 strs << std::boolalpha << value;
89 return strs.str();
90 }
91 catch (...)
92 {std::cerr << "Error " << property_name << std::endl; exit(1);}
93 }
94 }
95 }
96}
97
98void Options::Amalgamate(const Options& optionsIn, bool override)
99{
100 if (override)
101 {
102 for (auto const& key : optionsIn.setKeys)
103 {
104 try
105 {
106 set(this, &optionsIn, key);
107 setKeys.push_back(key);
108 }
109 catch (const std::runtime_error&)
110 {
111 std::cerr << "Error: Amalgamate unknown option \"" << key << "\"" << std::endl;
112 exit(1);
113 }
114 }
115 }
116 else
117 {// don't override - ie give preference to ones set in this instance
118 for (auto const& key : optionsIn.setKeys)
119 {
120 auto const& ok = setKeys; // shortcut
121 auto result = std::find(ok.begin(), ok.end(), key);
122 if (result == ok.end())
123 {//it wasn't found so ok to copy
124 try
125 {
126 set(this, &optionsIn, key);
127 setKeys.push_back(key);
128 }
129 catch (const std::runtime_error&)
130 {
131 std::cerr << "Error: Amalgamate unknown option \"" << key << "\"" << std::endl;
132 exit(1);
133 }
134 }
135 }
136 }
137}
138
139bool Options::HasBeenSet(const std::string& name) const
140{
141 return std::find(setKeys.begin(), setKeys.end(), name) != setKeys.end();
142}
143
145{
146 // executable options first
147 publish("inputFileName", &Options::inputFileName);
148 publish("visMacroFileName", &Options::visMacroFileName);
149 publish("geant4MacroFileName", &Options::geant4MacroFileName);
150 publish("geant4PhysicsMacroFileName", &Options::geant4PhysicsMacroFileName);
151 publish("geant4PhysicsMacroFileNameFromExecOptions", &Options::geant4PhysicsMacroFileNameFromExecOptions);
152 publish("visDebug", &Options::visDebug);
153 publish("outputFileName", &Options::outputFileName);
154 publish("outputFormat", &Options::outputFormat);
155 publish("outputDoublePrecision", &Options::outputDoublePrecision);
156 publish("outputCompressionLevel",&Options::outputCompressionLevel);
157 publish("survey", &Options::survey);
158 publish("surveyFileName", &Options::surveyFileName);
159
160 publish("verbose", &Options::verbose);
161
162 publish("verboseRunLevel", &Options::verboseRunLevel);
163
164 publish("verboseEventBDSIM", &Options::verboseEventBDSIM);
165 publish("verboseEvent", &Options::verboseEventBDSIM);
166 publish("verbose_event", &Options::verboseEventBDSIM); // to be compatible with exec options
167 publish("verboseEventLevel", &Options::verboseEventLevel);
168 publish("verboseEventStart", &Options::verboseEventStart);
169 publish("verboseEventContinueFor", &Options::verboseEventContinueFor);
170
171 // alternates
172 publish("verboseEventNumber", &Options::verboseEventStart);
173 publish("verbose_event_num", &Options::verboseEventStart); // to be compatible with exec options
174
175 publish("verboseSteppingBDSIM", &Options::verboseSteppingBDSIM);
176 publish("verboseSteppingLevel", &Options::verboseSteppingLevel);
177 publish("verboseSteppingEventStart", &Options::verboseSteppingEventStart);
178 publish("verboseSteppingEventContinueFor", &Options::verboseSteppingEventContinueFor);
179 publish("verboseSteppingPrimaryOnly", &Options::verboseSteppingPrimaryOnly);
180
181 // alternates
182 publish("verboseStep", &Options::verboseSteppingBDSIM);
183
184 publish("batch", &Options::batch);
185
186 publish("verbose_G4Run", &Options::verboseRunLevel); // to be compatible with exec options
187 publish("verbose_G4run", &Options::verboseRunLevel); // to just generally be consistent!
188 publish("verboseEventLevel", &Options::verboseEventLevel);
189 publish("verbose_G4event", &Options::verboseEventLevel); // to be compatible with exec options
190 publish("verboseTrackingLevel", &Options::verboseTrackingLevel);
191 publish("verbose_G4tracking", &Options::verboseTrackingLevel); // to be compatible with exec options
192 publish("verboseSteppingLevel", &Options::verboseSteppingLevel);
193 publish("verbose_G4stepping", &Options::verboseSteppingLevel); // to be compatible with exec options
194 publish("verboseImportanceSampling", &Options::verboseImportanceSampling);
195 publish("circular", &Options::circular);
196 publish("seed", &Options::seed);
197 publish("randomEngine", &Options::randomEngine);
198 publish("recreate", &Options::recreate);
199 publish("recreateFileName", &Options::recreateFileName);
200 publish("startFromEvent", &Options::startFromEvent);
201 publish("writeSeedState", &Options::writeSeedState);
202 publish("useASCIISeedState", &Options::useASCIISeedState);
203 publish("seedStateFileName", &Options::seedStateFileName);
204 publish("ngenerate", &Options::nGenerate);
205 publish("generatePrimariesOnly", &Options::generatePrimariesOnly);
206 publish("exportGeometry", &Options::exportGeometry);
207 publish("exportType", &Options::exportType);
208 publish("exportFileName", &Options::exportFileName);
209 publish("bdsimPath", &Options::bdsimPath);
210
211 // physics
212 publish("physicsList", &Options::physicsList);
213 publish("physicsVerbose", &Options::physicsVerbose);
214 publish("physicsVerbosity", &Options::physicsVerbosity);
215 publish("physicsEnergyLimitLow", &Options::physicsEnergyLimitLow);
216 publish("physicsEnergyLimitHigh", &Options::physicsEnergyLimitHigh);
217 publish("g4PhysicsUseBDSIMRangeCuts", &Options::g4PhysicsUseBDSIMRangeCuts);
218 publish("g4PhysicsUseBDSIMCutsAndLimits", &Options::g4PhysicsUseBDSIMCutsAndLimits);
219
220 // reproducibility
221 publish("eventOffset", &Options::eventOffset);
222 publish("recreateSeedState", &Options::recreateSeedState);
223
224 publish("elossHistoBinWidth",&Options::elossHistoBinWidth);
225 publish("defaultRangeCut",&Options::defaultRangeCut);
226 publish("ffact",&Options::ffact);
227 publish("bv", &Options::ffact); // MadX naming
228
229 publish("beamlineX", &Options::beamlineX);
230 publish("beamlineY", &Options::beamlineY);
231 publish("beamlineZ", &Options::beamlineZ);
232 publish("beamlinePhi", &Options::beamlinePhi);
233 publish("beamlineTheta", &Options::beamlineTheta);
234 publish("beamlinePsi", &Options::beamlinePsi);
235 publish("beamlineAxisX", &Options::beamlineAxisX);
236 publish("beamlineAxisY", &Options::beamlineAxisY);
237 publish("beamlineAxisZ", &Options::beamlineAxisZ);
238 publish("beamlineAngle", &Options::beamlineAngle);
239 publish("beamlineAxisAngle", &Options::beamlineAxisAngle);
240 publish("beamlineS", &Options::beamlineS);
241
242 publish("checkOverlaps", &Options::checkOverlaps);
243 publish("eventNumberOffset", &Options::eventNumberOffset);
244 publish("vacuumPressure", &Options::vacuumPressure);
245 publish("xsize", &Options::xsize);
246 publish("ysize", &Options::ysize);
247
248 // options which influence the geometry
249 publish("magnetGeometryType", &Options::magnetGeometryType);
250 publish("outerMaterial", &Options::outerMaterialName);
251 publish("horizontalWidth", &Options::horizontalWidth);
252 publish("outerDiameter", &Options::horizontalWidth); // for backwards compatibility
253 publish("boxSize", &Options::horizontalWidth); // for backwards compatibility
254 publish("yokeFields", &Options::yokeFields);
255 publish("includeIronMagFields", &Options::yokeFields); // for backwards compatibility
256 publish("yokeFieldsMatchLHCGeometry", &Options::yokeFieldsMatchLHCGeometry);
257 publish("useOldMultipoleOuterFields", &Options::useOldMultipoleOuterFields);
258 publish("scalingFieldOuter", &Options::scalingFieldOuter);
259 publish("includeFringeFields", &Options::includeFringeFields);
260 publish("includeFringeFieldsCavities", &Options::includeFringeFieldsCavities);
261 publish("beampipeRadius", &Options::aper1);
262 publish("beampipeThickness", &Options::beampipeThickness);
263 publish("apertureType", &Options::apertureType);
264 publish("aper1", &Options::aper1);
265 publish("aper2", &Options::aper2);
266 publish("aper3", &Options::aper3);
267 publish("aper4", &Options::aper4);
268 publish("beampipeMaterial", &Options::beampipeMaterial);
269 publish("ignoreLocalAperture", &Options::ignoreLocalAperture);
270 publish("vacuumMaterial", &Options::vacMaterial);
271 publish("emptyMaterial", &Options::emptyMaterial);
272 publish("worldMaterial", &Options::worldMaterial);
273 publish("worldGeometryFile", &Options::worldGeometryFile);
274 publish("autoColourWorldGeometryFile", &Options::autoColourWorldGeometryFile);
275 publish("importanceWorldGeometryFile", &Options::importanceWorldGeometryFile);
276 publish("importanceVolumeMap", &Options::importanceVolumeMap);
277 publish("worldVolumeMargin", &Options::worldVolumeMargin);
278 publish("dontSplitSBends", &Options::dontSplitSBends);
279 publish("thinElementLength", &Options::thinElementLength);
280 publish("hStyle", &Options::hStyle);
281 publish("vhRatio", &Options::vhRatio);
282 publish("coilWidthFraction", &Options::coilWidthFraction);
283 publish("coilHeightFraction", &Options::coilHeightFraction);
284 publish("ignoreLocalMagnetGeometry", &Options::ignoreLocalMagnetGeometry);
285 publish("buildPoleFaceGeometry", &Options::buildPoleFaceGeometry);
286 publish("preprocessGDML", &Options::preprocessGDML);
287 publish("preprocessGDMLSchema", &Options::preprocessGDMLSchema);
288
289 // tunnel options
290 publish("buildTunnel", &Options::buildTunnel);
291 publish("buildTunnelStraight", &Options::buildTunnelStraight);
292 publish("tunnelType", &Options::tunnelType);
293 publish("tunnelThickness", &Options::tunnelThickness);
294 publish("tunnelSoilThickness", &Options::tunnelSoilThickness);
295 publish("tunnelMaterial", &Options::tunnelMaterial);
296 publish("soilMaterial", &Options::soilMaterial);
297 publish("buildTunnelFloor", &Options::buildTunnelFloor);
298 publish("tunnelFloorOffset", &Options::tunnelFloorOffset);
299 publish("tunnelAper1", &Options::tunnelAper1);
300 publish("tunnelAper2", &Options::tunnelAper2);
301 publish("tunnelRadius", &Options::tunnelAper1); // for backwards compatibility
302 publish("tunnelVisible", &Options::tunnelVisible);
303 publish("showTunnel", &Options::tunnelVisible); // for backwards compatibility
304 publish("tunnelOffsetX", &Options::tunnelOffsetX);
305 publish("tunnelOffsetY", &Options::tunnelOffsetY);
306 publish("tunnelMaxSegmentLength", &Options::tunnelMaxSegmentLength);
307
308 publish("removeTemporaryFiles", &Options::removeTemporaryFiles);
309 publish("temporaryDirectory", &Options::temporaryDirectory);
310
311 publish("samplerDiameter",&Options::samplerDiameter);
312
313 // physics processes
314 publish("turnOnOpticalAbsorption", &Options::turnOnOpticalAbsorption);
315 publish("turnOnMieScattering", &Options::turnOnMieScattering);
316 publish("turnOnRayleighScattering", &Options::turnOnRayleighScattering);
317 publish("turnOnOpticalSurface", &Options::turnOnOpticalSurface);
318 publish("scintYieldFactor", &Options::scintYieldFactor);
319 publish("maximumPhotonsPerStep", &Options::maximumPhotonsPerStep);
320 publish("maximumBetaChangePerStep", &Options::maximumBetaChangePerStep);
321 publish("maximumTracksPerEvent", &Options::maximumTracksPerEvent);
322 publish("minimumKineticEnergy", &Options::minimumKineticEnergy);
323 publish("minimumKineticEnergyTunnel", &Options::minimumKineticEnergyTunnel);
324 publish("minimumRange", &Options::minimumRange);
325 publish("particlesToExcludeFromCuts", &Options::particlesToExcludeFromCuts);
326
327 publish("prodCutPhotons", &Options::prodCutPhotons);
328 publish("prodCutElectrons", &Options::prodCutElectrons);
329 publish("prodCutPositrons", &Options::prodCutPositrons);
330 publish("prodCutProtons", &Options::prodCutProtons);
331 publish("prodCutHadrons", &Options::prodCutProtons); // backwards compatibility
332 publish("neutronTimeLimit", &Options::neutronTimeLimit);
333 publish("neutronKineticEnergyLimit", &Options::neutronKineticEnergyLimit);
334 publish("useLENDGammaNuclear", &Options::useLENDGammaNuclear);
335 publish("useElectroNuclear", &Options::useElectroNuclear);
336 publish("useMuonNuclear", &Options::useMuonNuclear);
337 publish("useGammaToMuMu", &Options::useGammaToMuMu);
338 publish("usePositronToMuMu", &Options::usePositronToMuMu);
339 publish("usePositronToHadrons", &Options::usePositronToHadrons);
340 publish("beamPipeIsInfiniteAbsorber", &Options::beamPipeIsInfiniteAbsorber);
341 publish("collimatorsAreInfiniteAbsorbers", &Options::collimatorsAreInfiniteAbsorbers);
342 publish("tunnelIsInfiniteAbsorber", &Options::tunnelIsInfiniteAbsorber);
343 publish("muonSplittingFactor", &Options::muonSplittingFactor);
344 publish("muonSplittingThresholdParentEk", &Options::muonSplittingThresholdParentEk);
345 publish("muonSplittingFactor2", &Options::muonSplittingFactor2);
346 publish("muonSplittingThresholdParentEk2", &Options::muonSplittingThresholdParentEk2);
347 publish("muonSplittingExcludeWeight1Particles", &Options::muonSplittingExcludeWeight1Particles);
348 publish("muonSplittingExclusionWeight", &Options::muonSplittingExclusionWeight);
349
350 // bias options
351 publish("defaultBiasVacuum", &Options::defaultBiasVacuum);
352 publish("defaultBiasMaterial", &Options::defaultBiasMaterial);
353 publish("biasForWorldVolume", &Options::biasForWorldVolume);
354 publish("biasForWorldContents",&Options::biasForWorldContents);
355 publish("biasForWorldVacuum", &Options::biasForWorldVacuum);
356 publish("worldVacuumVolumeNames",&Options::worldVacuumVolumeNames);
357
358 // options which influence tracking
359 publish("integratorSet", &Options::integratorSet);
360 publish("lengthSafety", &Options::lengthSafety);
361 publish("lengthSafetyLarge", &Options::lengthSafetyLarge);
362 publish("maximumTrackingTime", &Options::maximumTrackingTime);
363 publish("maximumStepLength", &Options::maximumStepLength);
364 publish("maximumStepSize", &Options::maximumStepLength);
365 publish("maximumTrackLength", &Options::maximumTrackLength);
366 publish("chordStepMinimum", &Options::chordStepMinimum);
367 publish("chordStepMinimumYoke", &Options::chordStepMinimumYoke);
368 publish("deltaIntersection", &Options::deltaIntersection);
369 publish("minimumEpsilonStep", &Options::minimumEpsilonStep);
370 publish("maximumEpsilonStep", &Options::maximumEpsilonStep);
371 publish("deltaOneStep", &Options::deltaOneStep);
372 publish("stopSecondaries", &Options::stopSecondaries);
373 publish("killNeutrinos", &Options::killNeutrinos);
374 publish("killedParticlesMassAddedToEloss", &Options::killedParticlesMassAddedToEloss);
375 publish("minimumRadiusOfCurvature", &Options::minimumRadiusOfCurvature);
376 publish("sampleElementsWithPoleface", &Options::sampleElementsWithPoleface);
377 publish("nominalMatrixRelativeMomCut", &Options::nominalMatrixRelativeMomCut);
378 publish("teleporterFullTransform", &Options::teleporterFullTransform);
379 publish("dEThresholdForScattering", &Options::dEThresholdForScattering);
380 publish("backupStepperMomLimit", &Options::backupStepperMomLimit);
381
382 // hit generation
383 publish("sensitiveOuter", &Options::sensitiveOuter);
384 publish("sensitiveBeamlineComponents", &Options::sensitiveOuter); // backwards compatibility
385 publish("sensitiveBeamPipe", &Options::sensitiveBeamPipe);
386 publish("sensitiveBeampipe", &Options::sensitiveBeamPipe);
387 publish("sensitiveTunnel", &Options::storeElossTunnel);
388 publish("tunnelSensitive", &Options::storeElossTunnel);// backwards compatibility
389
390 // output
391 publish("nperfile", &Options::numberOfEventsPerNtuple);
392
393 publish("storeMinimalData", &Options::storeMinimalData);
394
395 publish("storeApertureImpacts", &Options::storeApertureImpacts);
396 publish("storeApertureImpactsIons", &Options::storeApertureImpactsIons);
397 publish("storeApertureImpactsAll", &Options::storeApertureImpactsAll);
398 publish("storeApertureImpactsHistograms", &Options::storeApertureImpactsHistograms);
399 publish("apertureImpactsMinimumKE", &Options::apertureImpactsMinimumKE);
400 publish("storeCollimatorInfo", &Options::storeCollimatorInfo);
401 publish("storeCollimatorHits", &Options::storeCollimatorHits);
402 publish("storeCollimatorHitsLinks", &Options::storeCollimatorHitsLinks); // backwards compatibility
403 publish("storeCollimatorHitsLinks", &Options::storeCollimatorHitsLinks);
404 publish("storeCollimatorHitsIons", &Options::storeCollimatorHitsIons);
405 publish("storeCollimatorHitsAll", &Options::storeCollimatorHitsAll);
406 publish("collimatorHitsMinimumKE", &Options::collimatorHitsMinimumKE);
407 publish("storeEloss", &Options::storeEloss);
408 publish("storeELoss", &Options::storeEloss);
409 publish("storeElossHistograms", &Options::storeElossHistograms);
410 publish("storeELossHistograms", &Options::storeElossHistograms);
411 publish("storeElossVacuum", &Options::storeElossVacuum);
412 publish("storeELossVacuum", &Options::storeElossVacuum);
413 publish("storeElossVacuumHistograms", &Options::storeElossVacuumHistograms);
414 publish("storeELossVacuumHistograms", &Options::storeElossVacuumHistograms);
415 publish("storeElossTunnel", &Options::storeElossTunnel);
416 publish("storeELossTunnel", &Options::storeElossTunnel);
417 publish("storeElossTunnelHistograms", &Options::storeElossTunnelHistograms);
418 publish("storeELossTunnelHistograms", &Options::storeElossTunnelHistograms);
419 publish("storeElossWorld", &Options::storeElossWorld);
420 publish("storeELossWorld", &Options::storeElossWorld);
421 publish("storeElossWorldContents", &Options::storeElossWorldContents);
422 publish("storeELossWorldContents", &Options::storeElossWorldContents);
423 publish("storeElossTurn", &Options::storeElossTurn);
424 publish("storeELossTurn", &Options::storeElossTurn);
425 publish("storeElossLinks", &Options::storeElossLinks);
426 publish("storeELossLinks", &Options::storeElossLinks);
427 publish("storeElossLocal", &Options::storeElossLocal);
428 publish("storeELossLocal", &Options::storeElossLocal);
429 publish("storeElossGlobal", &Options::storeElossGlobal);
430 publish("storeELossGlobal", &Options::storeElossGlobal);
431 publish("storeElossTime", &Options::storeElossTime);
432 publish("storeELossTime", &Options::storeElossTime);
433 publish("storeElossStepLength", &Options::storeElossStepLength);
434 publish("storeELossStepLength", &Options::storeElossStepLength);
435 publish("storeElossPreStepKineticEnergy", &Options::storeElossPreStepKineticEnergy);
436 publish("storeELossPreStepKineticEnergy", &Options::storeElossPreStepKineticEnergy);
437 publish("storeElossModelID", &Options::storeElossModelID);
438 publish("storeELossModelID", &Options::storeElossModelID);
439 publish("storeElossPhysicsProcesses", &Options::storeElossPhysicsProcesses);
440 publish("storeELossPhysicsProcesses", &Options::storeElossPhysicsProcesses);
441 publish("storeParticleData", &Options::storeParticleData);
442 publish("storeGeant4Data", &Options::storeParticleData); // backwards compatibility
443 publish("storePrimaries", &Options::storePrimaries);
444 publish("storePrimaryHistograms", &Options::storePrimaryHistograms);
445 publish("writePrimaries", &Options::storePrimaries); // backwards compatibility
446
447 publish("storeTrajectory", &Options::storeTrajectory);
448 publish("storeTrajectories", &Options::storeTrajectory);
449 publish("storeTrajectoryDepth", &Options::storeTrajectoryDepth);
450 publish("storeTrajectoryStepPoints", &Options::storeTrajectoryStepPoints);
451 publish("storeTrajectoryStepPointLast", &Options::storeTrajectoryStepPointLast);
452 publish("storeTrajectoryParticle", &Options::storeTrajectoryParticle);
453 publish("storeTrajectoryParticleID", &Options::storeTrajectoryParticleID);
454 publish("storeTrajectoryEnergyThreshold", &Options::storeTrajectoryEnergyThreshold);
455 publish("storeTrajectorySamplerID", &Options::storeTrajectorySamplerID);
456 publish("storeTrajectoryELossSRange", &Options::storeTrajectoryELossSRange);
457
458 publish("storeTrajectoryTransportationSteps", &Options::storeTrajectoryTransportationSteps);
459 publish("trajNoTransportation", &Options::trajNoTransportation);
460 publish("storeTrajectoryKineticEnergy", &Options::storeTrajectoryKineticEnergy);
461 publish("storeTrajectoryMomentumVector", &Options::storeTrajectoryMomentumVector);
462 publish("storeTrajectoryProcesses", &Options::storeTrajectoryProcesses);
463 publish("storeTrajectoryTime", &Options::storeTrajectoryTime);
464 publish("storeTrajectoryLocal", &Options::storeTrajectoryLocal);
465 publish("storeTrajectoryLinks", &Options::storeTrajectoryLinks);
466 publish("storeTrajectoryIon", &Options::storeTrajectoryIon);
467 publish("storeTrajectoryIons", &Options::storeTrajectoryIon);
468 publish("storeTrajectoryMaterial", &Options::storeTrajectoryMaterial);
469 publish("storeTrajectoryAllVariables", &Options::storeTrajectoryAllVariables);
470 publish("trajectoryFilterLogicAND", &Options::trajectoryFilterLogicAND);
471
472 publish("storeSamplerAll", &Options::storeSamplerAll);
473 publish("storeSamplerPolarCoords", &Options::storeSamplerPolarCoords);
474 publish("storeSamplerPolarCoordinates", &Options::storeSamplerPolarCoords);
475 publish("storeSamplerCharge", &Options::storeSamplerCharge);
476 publish("storeSamplerKineticEnergy", &Options::storeSamplerKineticEnergy);
477 publish("storeSamplerMass", &Options::storeSamplerMass);
478 publish("storeSamplerRigidity", &Options::storeSamplerRigidity);
479 publish("storeSamplerIon", &Options::storeSamplerIon);
480
481 publish("trajConnect", &Options::trajConnect);
482 publish("trajectoryConnect", &Options::trajConnect);
483 publish("trajCutGTZ", &Options::trajCutGTZ);
484 publish("trajCutLTR", &Options::trajCutLTR);
485
486 publish("storeModel", &Options::storeModel);
487
488 publish("samplersSplitLevel", &Options::samplersSplitLevel);
489
490 // circular options
491 publish("nturns", &Options::nturns);
492 publish("ptcOneTurnMapFileName", &Options::ptcOneTurnMapFileName);
493
494 publish("printModuloFraction", &Options::printFractionEvents); // alternative name
495 publish("printFractionEvents", &Options::printFractionEvents);
496 publish("printFractionTurns", &Options::printFractionTurns);
497 publish("printPhysicsProcesses", &Options::printPhysicsProcesses);
498
499 // visualisation
500 publish("nSegmentsPerCircle", &Options::nSegmentsPerCircle);
501
502 // scoring map
503 publish("nbinsx", &Options::nbinsx);
504 publish("nbinsy", &Options::nbinsy);
505 publish("nbinsz", &Options::nbinsz);
506 publish("nbinse" , &Options::nbinse);
507 publish("xmin", &Options::xmin);
508 publish("xmax", &Options::xmax);
509 publish("ymin", &Options::ymin);
510 publish("ymax", &Options::ymax);
511 publish("zmin", &Options::zmin);
512 publish("zmax", &Options::zmax);
513 publish("emin", &Options::emin);
514 publish("emax", &Options::emax);
515 publish("useScoringMap", &Options::useScoringMap);
516}
Basic options class independent of Geant4.
Definition: optionsBase.h:36
std::string bdsimPath
Definition: optionsBase.h:110
std::string seedStateFileName
Seed state file path.
Definition: optionsBase.h:97
std::string magnetGeometryType
default magnet geometry parameters
Definition: optionsBase.h:152
double beamlineZ
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:132
int nGenerate
The number of primary events to simulate.
Definition: optionsBase.h:91
std::string physicsList
list of physics processes
Definition: optionsBase.h:113
double muonSplittingThresholdParentEk2
physics parameters
Definition: optionsBase.h:261
double beamlineAngle
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:139
double beamlineS
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:141
bool survey
Parameter for survey.
Definition: optionsBase.h:55
double minimumRange
physics parameters
Definition: optionsBase.h:240
std::string outputFileName
Parameter for output format.
Definition: optionsBase.h:48
int muonSplittingFactor
physics parameters
Definition: optionsBase.h:258
double tunnelSoilThickness
tunnel geometry parameters
Definition: optionsBase.h:207
double minimumRadiusOfCurvature
Minimum allowed radius of curvature.
Definition: optionsBase.h:290
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.
Definition: optionsBase.h:140
std::string exportFileName
Parameter for controlling geometry export.
Definition: optionsBase.h:105
int seed
The seed value for the random number generator.
Definition: optionsBase.h:89
double tunnelOffsetY
tunnel geometry parameters
Definition: optionsBase.h:216
double tunnelFloorOffset
tunnel geometry parameters
Definition: optionsBase.h:211
int verboseEventContinueFor
Event level verbosity.
Definition: optionsBase.h:73
bool hStyle
H Style dipoles (if not, C Style).
Definition: optionsBase.h:156
double xsize
for element specification
Definition: optionsBase.h:149
std::string particlesToExcludeFromCuts
physics parameters
Definition: optionsBase.h:241
double ffact
magnetic field flip (+1 default, -1: flip sign)
Definition: optionsBase.h:127
double tunnelMaxSegmentLength
tunnel geometry parameters
Definition: optionsBase.h:217
double muonSplittingThresholdParentEk
physics parameters
Definition: optionsBase.h:259
int verboseEventStart
Event level verbosity.
Definition: optionsBase.h:72
bool useLENDGammaNuclear
physics parameters
Definition: optionsBase.h:249
double maximumTrackingTime
Maximum tracking time per track [s].
Definition: optionsBase.h:278
bool dontSplitSBends
geometry debug, don't split bends into multiple segments
Definition: optionsBase.h:168
std::string tunnelMaterial
tunnel geometry parameters
Definition: optionsBase.h:208
bool useASCIISeedState
Whether to use the seed state from an ASCII file.
Definition: optionsBase.h:96
bool tunnelIsInfiniteAbsorber
physics parameters
Definition: optionsBase.h:257
bool verboseSteppingPrimaryOnly
Stepping level verbosity.
Definition: optionsBase.h:83
double muonSplittingExclusionWeight
physics parameters
Definition: optionsBase.h:263
bool collimatorsAreInfiniteAbsorbers
physics parameters
Definition: optionsBase.h:256
int verboseRunLevel
Run level verbosity.
Definition: optionsBase.h:67
bool turnOnOpticalSurface
Physics processes.
Definition: optionsBase.h:230
double prodCutProtons
physics parameters
Definition: optionsBase.h:246
int nSegmentsPerCircle
Number of facets per 2pi in visualisation.
Definition: optionsBase.h:390
std::string soilMaterial
tunnel geometry parameters
Definition: optionsBase.h:209
bool preprocessGDML
geometry control
Definition: optionsBase.h:164
int maximumBetaChangePerStep
physics parameters
Definition: optionsBase.h:236
bool batch
Flag for batch / interactive mode.
Definition: optionsBase.h:59
double minimumKineticEnergy
physics parameters
Definition: optionsBase.h:238
int eventOffset
Event number to start from when recreating from a root file.
Definition: optionsBase.h:121
int verboseTrackingLevel
Tracking verbosity.
Definition: optionsBase.h:76
bool circular
Flag for circular machine.
Definition: optionsBase.h:88
bool checkOverlaps
bdsim options
Definition: optionsBase.h:147
double neutronKineticEnergyLimit
physics parameters
Definition: optionsBase.h:248
double aper1
default beampipe parameters
Definition: optionsBase.h:181
double maximumTrackLength
Maximum permitted track length [m].
Definition: optionsBase.h:280
int verboseEventLevel
Event level verbosity.
Definition: optionsBase.h:71
bool turnOnOpticalAbsorption
Physics processes.
Definition: optionsBase.h:227
bool buildTunnelStraight
tunnel geometry parameters
Definition: optionsBase.h:204
std::string inputFileName
Input filename.
Definition: optionsBase.h:40
long maximumTracksPerEvent
physics parameters
Definition: optionsBase.h:237
double backupStepperMomLimit
Fractional momentum limit for reverting to backup steppers.
Definition: optionsBase.h:295
double aper2
default beampipe parameters
Definition: optionsBase.h:182
int outputCompressionLevel
Parameter for output format.
Definition: optionsBase.h:51
double beamlinePhi
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:133
double maximumStepLength
Maximum permitted step length in any volume.
Definition: optionsBase.h:279
std::string exportType
Parameter for controlling geometry export.
Definition: optionsBase.h:104
double neutronTimeLimit
physics parameters
Definition: optionsBase.h:247
bool recreateSeedState
Load seed state when recreating events.
Definition: optionsBase.h:122
std::string vacMaterial
vacuum material
Definition: optionsBase.h:189
bool verbose
General verbosity.
Definition: optionsBase.h:64
std::string recreateFileName
The file path to recreate a run from.
Definition: optionsBase.h:93
bool teleporterFullTransform
Whether to use the new Transform3D method for the teleporter.
Definition: optionsBase.h:293
bool buildTunnelFloor
tunnel geometry parameters
Definition: optionsBase.h:210
int startFromEvent
Event to start from when recreating.
Definition: optionsBase.h:94
std::string emptyMaterial
material in container volumes
Definition: optionsBase.h:190
bool muonSplittingExcludeWeight1Particles
physics parameters
Definition: optionsBase.h:262
double prodCutPhotons
physics parameters
Definition: optionsBase.h:243
bool generatePrimariesOnly
Whether to only generate primary coordinates and quit, or not.
Definition: optionsBase.h:100
double defaultRangeCut
physics parameters
Definition: optionsBase.h:242
double beamlineAxisY
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:137
double prodCutElectrons
physics parameters
Definition: optionsBase.h:244
double tunnelAper1
tunnel geometry parameters
Definition: optionsBase.h:212
bool verboseEventBDSIM
Event level verbosity.
Definition: optionsBase.h:70
int maximumPhotonsPerStep
physics parameters
Definition: optionsBase.h:235
std::string beampipeMaterial
default beampipe parameters
Definition: optionsBase.h:185
bool exportGeometry
Parameter for controlling geometry export.
Definition: optionsBase.h:103
int verboseSteppingLevel
Stepping level verbosity.
Definition: optionsBase.h:80
double beampipeThickness
default beampipe parameters
Definition: optionsBase.h:179
bool turnOnRayleighScattering
Physics processes.
Definition: optionsBase.h:229
std::string geant4PhysicsMacroFileName
Geant4 physics macro.
Definition: optionsBase.h:43
std::string visMacroFileName
Visualisation filename.
Definition: optionsBase.h:41
double scintYieldFactor
physics parameters
Definition: optionsBase.h:234
bool beamPipeIsInfiniteAbsorber
physics parameters
Definition: optionsBase.h:255
double beamlineX
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:130
std::string apertureType
default beampipe parameters
Definition: optionsBase.h:180
bool verboseSteppingBDSIM
Stepping level verbosity.
Definition: optionsBase.h:79
bool useMuonNuclear
physics parameters
Definition: optionsBase.h:251
bool useElectroNuclear
physics parameters
Definition: optionsBase.h:250
int verboseSteppingEventStart
Stepping level verbosity.
Definition: optionsBase.h:81
std::string surveyFileName
Parameter for survey.
Definition: optionsBase.h:56
std::vector< std::string > setKeys
A list of all the keys that have been set in this instance.
Definition: optionsBase.h:411
bool recreate
Whether to recreate from a file or not.
Definition: optionsBase.h:92
double tunnelAper2
tunnel geometry parameters
Definition: optionsBase.h:213
bool turnOnMieScattering
Physics processes.
Definition: optionsBase.h:228
double beamlineY
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:131
double beamlineAxisX
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:136
double tunnelThickness
tunnel geometry parameters
Definition: optionsBase.h:206
std::string randomEngine
Name of random engine to use.
Definition: optionsBase.h:90
double prodCutPositrons
physics parameters
Definition: optionsBase.h:245
bool buildTunnel
tunnel geometry parameters
Definition: optionsBase.h:203
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:95
bool visDebug
Flag for visualisation debug.
Definition: optionsBase.h:45
bool useGammaToMuMu
physics parameters
Definition: optionsBase.h:252
double aper4
default beampipe parameters
Definition: optionsBase.h:184
double aper3
default beampipe parameters
Definition: optionsBase.h:183
double minimumKineticEnergyTunnel
physics parameters
Definition: optionsBase.h:239
double tunnelOffsetX
tunnel geometry parameters
Definition: optionsBase.h:215
bool usePositronToMuMu
physics parameters
Definition: optionsBase.h:253
std::string tunnelType
tunnel geometry parameters
Definition: optionsBase.h:205
double beamlineAxisZ
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:138
double beamlinePsi
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:135
std::string geant4MacroFileName
Geant4 macro to run.
Definition: optionsBase.h:42
bool trajNoTransportation
kept only for backwards compatibility.
Definition: optionsBase.h:351
bool usePositronToHadrons
physics parameters
Definition: optionsBase.h:254
bool tunnelVisible
tunnel geometry parameters
Definition: optionsBase.h:214
int muonSplittingFactor2
physics parameters
Definition: optionsBase.h:260
double worldVolumeMargin
Padding margin for world volume size.
Definition: optionsBase.h:198
double nominalMatrixRelativeMomCut
Momentum threshold for nominal dipole matrix tracking.
Definition: optionsBase.h:292
double beamlineTheta
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:134
bool ignoreLocalAperture
default beampipe parameters
Definition: optionsBase.h:186
Options class.
Definition: options.h:44
void Amalgamate(const Options &optionsIn, bool override)
Definition: options.cc:98
void PublishMembers()
publish members so these can be looked up from parser
Definition: options.cc:144
bool HasBeenSet(const std::string &name) const
Whether a parameter has been set using the set_value method or not.
Definition: options.cc:139
void publish(const std::string &name, T C::*mp)
Make pointer to member from class C and type T with accessible with a name.
Definition: published.h:92
void set(OptionsBase *instance, const std::string &name, double value)
Definition: published.h:99
Parser namespace for GMAD language. Combination of Geant4 and MAD.