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