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) Royal Holloway,
3University of London 2001 - 2023.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#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("outfile", &Options::outputFileName);
154 publish("outputFileName", &Options::outputFileName);
155 publish("output", &Options::outputFormat);
156 publish("outputFormat", &Options::outputFormat);
157 publish("outputDoublePrecision", &Options::outputDoublePrecision);
158 publish("outputCompressionLevel",&Options::outputCompressionLevel);
159 publish("survey", &Options::survey);
160 publish("surveyFileName", &Options::surveyFileName);
161
162 publish("verbose", &Options::verbose);
163
164 publish("verboseRunLevel", &Options::verboseRunLevel);
165
166 publish("verboseEventBDSIM", &Options::verboseEventBDSIM);
167 publish("verboseEvent", &Options::verboseEventBDSIM);
168 publish("verbose_event", &Options::verboseEventBDSIM); // to be compatible with exec options
169 publish("verboseEventLevel", &Options::verboseEventLevel);
170 publish("verboseEventStart", &Options::verboseEventStart);
171 publish("verboseEventContinueFor", &Options::verboseEventContinueFor);
172
173 // alternates
174 publish("verboseEventNumber", &Options::verboseEventStart);
175 publish("verbose_event_num", &Options::verboseEventStart); // to be compatible with exec options
176
177 publish("verboseSteppingBDSIM", &Options::verboseSteppingBDSIM);
178 publish("verboseSteppingLevel", &Options::verboseSteppingLevel);
179 publish("verboseSteppingEventStart", &Options::verboseSteppingEventStart);
180 publish("verboseSteppingEventContinueFor", &Options::verboseSteppingEventContinueFor);
181 publish("verboseSteppingPrimaryOnly", &Options::verboseSteppingPrimaryOnly);
182
183 // alternates
184 publish("verboseStep", &Options::verboseSteppingBDSIM);
185
186 publish("batch", &Options::batch);
187
188 publish("verbose_G4Run", &Options::verboseRunLevel); // to be compatible with exec options
189 publish("verbose_G4run", &Options::verboseRunLevel); // to just generally be consistent!
190 publish("verboseEventLevel", &Options::verboseEventLevel);
191 publish("verbose_G4event", &Options::verboseEventLevel); // to be compatible with exec options
192 publish("verboseTrackingLevel", &Options::verboseTrackingLevel);
193 publish("verbose_G4tracking", &Options::verboseTrackingLevel); // to be compatible with exec options
194 publish("verboseSteppingLevel", &Options::verboseSteppingLevel);
195 publish("verbose_G4stepping", &Options::verboseSteppingLevel); // to be compatible with exec options
196 publish("verboseImportanceSampling", &Options::verboseImportanceSampling);
197 publish("verboseSensitivity", &Options::verboseSensitivity);
198 publish("circular", &Options::circular);
199 publish("seed", &Options::seed);
200 publish("randomEngine", &Options::randomEngine);
201 publish("recreate", &Options::recreate);
202 publish("recreateFileName", &Options::recreateFileName);
203 publish("startFromEvent", &Options::startFromEvent);
204 publish("writeSeedState", &Options::writeSeedState);
205 publish("useASCIISeedState", &Options::useASCIISeedState);
206 publish("seedStateFileName", &Options::seedStateFileName);
207 publish("ngenerate", &Options::nGenerate);
208 publish("generatePrimariesOnly", &Options::generatePrimariesOnly);
209 publish("exportGeometry", &Options::exportGeometry);
210 publish("exportType", &Options::exportType);
211 publish("exportFileName", &Options::exportFileName);
212 publish("bdsimPath", &Options::bdsimPath);
213
214 // physics
215 publish("physicsList", &Options::physicsList);
216 publish("physicsVerbose", &Options::physicsVerbose);
217 publish("physicsVerbosity", &Options::physicsVerbosity);
218 publish("physicsEnergyLimitLow", &Options::physicsEnergyLimitLow);
219 publish("physicsEnergyLimitHigh", &Options::physicsEnergyLimitHigh);
220 publish("g4PhysicsUseBDSIMRangeCuts", &Options::g4PhysicsUseBDSIMRangeCuts);
221 publish("g4PhysicsUseBDSIMCutsAndLimits", &Options::g4PhysicsUseBDSIMCutsAndLimits);
222
223 // reproducibility
224 publish("eventOffset", &Options::eventOffset);
225 publish("recreateSeedState", &Options::recreateSeedState);
226
227 publish("elossHistoBinWidth",&Options::elossHistoBinWidth);
228 publish("defaultRangeCut",&Options::defaultRangeCut);
229 publish("ffact",&Options::ffact);
230 publish("bv", &Options::ffact); // MadX naming
231
232 publish("beamlineX", &Options::beamlineX);
233 publish("beamlineY", &Options::beamlineY);
234 publish("beamlineZ", &Options::beamlineZ);
235 publish("beamlinePhi", &Options::beamlinePhi);
236 publish("beamlineTheta", &Options::beamlineTheta);
237 publish("beamlinePsi", &Options::beamlinePsi);
238 publish("beamlineAxisX", &Options::beamlineAxisX);
239 publish("beamlineAxisY", &Options::beamlineAxisY);
240 publish("beamlineAxisZ", &Options::beamlineAxisZ);
241 publish("beamlineAngle", &Options::beamlineAngle);
242 publish("beamlineAxisAngle", &Options::beamlineAxisAngle);
243 publish("beamlineS", &Options::beamlineS);
244
245 publish("checkOverlaps", &Options::checkOverlaps);
246 publish("eventNumberOffset", &Options::eventNumberOffset);
247 publish("vacuumPressure", &Options::vacuumPressure);
248 publish("xsize", &Options::xsize);
249 publish("ysize", &Options::ysize);
250
251 // options which influence the geometry
252 publish("magnetGeometryType", &Options::magnetGeometryType);
253 publish("outerMaterial", &Options::outerMaterialName);
254 publish("horizontalWidth", &Options::horizontalWidth);
255 publish("outerDiameter", &Options::horizontalWidth); // for backwards compatibility
256 publish("boxSize", &Options::horizontalWidth); // for backwards compatibility
257 publish("yokeFields", &Options::yokeFields);
258 publish("includeIronMagFields", &Options::yokeFields); // for backwards compatibility
259 publish("yokeFieldsMatchLHCGeometry", &Options::yokeFieldsMatchLHCGeometry);
260 publish("useOldMultipoleOuterFields", &Options::useOldMultipoleOuterFields);
261 publish("scalingFieldOuter", &Options::scalingFieldOuter);
262 publish("includeFringeFields", &Options::includeFringeFields);
263 publish("includeFringeFieldsCavities", &Options::includeFringeFieldsCavities);
264 publish("beampipeRadius", &Options::aper1);
265 publish("beampipeThickness", &Options::beampipeThickness);
266 publish("apertureType", &Options::apertureType);
267 publish("aper1", &Options::aper1);
268 publish("aper2", &Options::aper2);
269 publish("aper3", &Options::aper3);
270 publish("aper4", &Options::aper4);
271 publish("beampipeMaterial", &Options::beampipeMaterial);
272 publish("ignoreLocalAperture", &Options::ignoreLocalAperture);
273 publish("vacuumMaterial", &Options::vacMaterial);
274 publish("emptyMaterial", &Options::emptyMaterial);
275 publish("worldMaterial", &Options::worldMaterial);
276 publish("worldGeometryFile", &Options::worldGeometryFile);
277 publish("autoColourWorldGeometryFile", &Options::autoColourWorldGeometryFile);
278 publish("importanceWorldGeometryFile", &Options::importanceWorldGeometryFile);
279 publish("importanceVolumeMap", &Options::importanceVolumeMap);
280 publish("worldVolumeMargin", &Options::worldVolumeMargin);
281 publish("dontSplitSBends", &Options::dontSplitSBends);
282 publish("thinElementLength", &Options::thinElementLength);
283 publish("hStyle", &Options::hStyle);
284 publish("vhRatio", &Options::vhRatio);
285 publish("coilWidthFraction", &Options::coilWidthFraction);
286 publish("coilHeightFraction", &Options::coilHeightFraction);
287 publish("ignoreLocalMagnetGeometry", &Options::ignoreLocalMagnetGeometry);
288 publish("buildPoleFaceGeometry", &Options::buildPoleFaceGeometry);
289 publish("preprocessGDML", &Options::preprocessGDML);
290 publish("preprocessGDMLSchema", &Options::preprocessGDMLSchema);
291
292 // tunnel options
293 publish("buildTunnel", &Options::buildTunnel);
294 publish("buildTunnelStraight", &Options::buildTunnelStraight);
295 publish("tunnelType", &Options::tunnelType);
296 publish("tunnelThickness", &Options::tunnelThickness);
297 publish("tunnelSoilThickness", &Options::tunnelSoilThickness);
298 publish("tunnelMaterial", &Options::tunnelMaterial);
299 publish("soilMaterial", &Options::soilMaterial);
300 publish("buildTunnelFloor", &Options::buildTunnelFloor);
301 publish("tunnelFloorOffset", &Options::tunnelFloorOffset);
302 publish("tunnelAper1", &Options::tunnelAper1);
303 publish("tunnelAper2", &Options::tunnelAper2);
304 publish("tunnelRadius", &Options::tunnelAper1); // for backwards compatibility
305 publish("tunnelVisible", &Options::tunnelVisible);
306 publish("showTunnel", &Options::tunnelVisible); // for backwards compatibility
307 publish("tunnelOffsetX", &Options::tunnelOffsetX);
308 publish("tunnelOffsetY", &Options::tunnelOffsetY);
309 publish("tunnelMaxSegmentLength", &Options::tunnelMaxSegmentLength);
310
311 publish("removeTemporaryFiles", &Options::removeTemporaryFiles);
312 publish("temporaryDirectory", &Options::temporaryDirectory);
313
314 publish("samplerDiameter",&Options::samplerDiameter);
315
316 // physics processes
317 publish("turnOnOpticalAbsorption", &Options::turnOnOpticalAbsorption);
318 publish("turnOnMieScattering", &Options::turnOnMieScattering);
319 publish("turnOnRayleighScattering", &Options::turnOnRayleighScattering);
320 publish("turnOnOpticalSurface", &Options::turnOnOpticalSurface);
321 publish("scintYieldFactor", &Options::scintYieldFactor);
322 publish("maximumPhotonsPerStep", &Options::maximumPhotonsPerStep);
323 publish("maximumBetaChangePerStep", &Options::maximumBetaChangePerStep);
324 publish("maximumTracksPerEvent", &Options::maximumTracksPerEvent);
325 publish("minimumKineticEnergy", &Options::minimumKineticEnergy);
326 publish("minimumKineticEnergyTunnel", &Options::minimumKineticEnergyTunnel);
327 publish("minimumRange", &Options::minimumRange);
328 publish("particlesToExcludeFromCuts", &Options::particlesToExcludeFromCuts);
329
330 publish("prodCutPhotons", &Options::prodCutPhotons);
331 publish("prodCutElectrons", &Options::prodCutElectrons);
332 publish("prodCutPositrons", &Options::prodCutPositrons);
333 publish("prodCutProtons", &Options::prodCutProtons);
334 publish("prodCutHadrons", &Options::prodCutProtons); // backwards compatibility
335 publish("neutronTimeLimit", &Options::neutronTimeLimit);
336 publish("neutronKineticEnergyLimit", &Options::neutronKineticEnergyLimit);
337 publish("useLENDGammaNuclear", &Options::useLENDGammaNuclear);
338 publish("useElectroNuclear", &Options::useElectroNuclear);
339 publish("useMuonNuclear", &Options::useMuonNuclear);
340 publish("useGammaToMuMu", &Options::useGammaToMuMu);
341 publish("usePositronToMuMu", &Options::usePositronToMuMu);
342 publish("usePositronToHadrons", &Options::usePositronToHadrons);
343 publish("restoreFTPFDiffractionForAGreater10", &Options::restoreFTPFDiffractionForAGreater10);
344 publish("beamPipeIsInfiniteAbsorber", &Options::beamPipeIsInfiniteAbsorber);
345 publish("collimatorsAreInfiniteAbsorbers", &Options::collimatorsAreInfiniteAbsorbers);
346 publish("tunnelIsInfiniteAbsorber", &Options::tunnelIsInfiniteAbsorber);
347 publish("muonSplittingFactor", &Options::muonSplittingFactor);
348 publish("muonSplittingThresholdParentEk", &Options::muonSplittingThresholdParentEk);
349 publish("muonSplittingFactor2", &Options::muonSplittingFactor2);
350 publish("muonSplittingThresholdParentEk2", &Options::muonSplittingThresholdParentEk2);
351 publish("muonSplittingExcludeWeight1Particles", &Options::muonSplittingExcludeWeight1Particles);
352 publish("muonSplittingExclusionWeight", &Options::muonSplittingExclusionWeight);
353
354 // bias options
355 publish("defaultBiasVacuum", &Options::defaultBiasVacuum);
356 publish("defaultBiasMaterial", &Options::defaultBiasMaterial);
357 publish("biasForWorldVolume", &Options::biasForWorldVolume);
358 publish("biasForWorldContents",&Options::biasForWorldContents);
359 publish("biasForWorldVacuum", &Options::biasForWorldVacuum);
360 publish("worldVacuumVolumeNames",&Options::worldVacuumVolumeNames);
361
362 // options which influence tracking
363 publish("integratorSet", &Options::integratorSet);
364 publish("fieldModulator", &Options::fieldModulator);
365 publish("lengthSafety", &Options::lengthSafety);
366 publish("lengthSafetyLarge", &Options::lengthSafetyLarge);
367 publish("maximumTrackingTime", &Options::maximumTrackingTime);
368 publish("maximumStepLength", &Options::maximumStepLength);
369 publish("maximumStepSize", &Options::maximumStepLength);
370 publish("maximumTrackLength", &Options::maximumTrackLength);
371 publish("chordStepMinimum", &Options::chordStepMinimum);
372 publish("chordStepMinimumYoke", &Options::chordStepMinimumYoke);
373 publish("deltaIntersection", &Options::deltaIntersection);
374 publish("minimumEpsilonStep", &Options::minimumEpsilonStep);
375 publish("maximumEpsilonStep", &Options::maximumEpsilonStep);
376 publish("deltaOneStep", &Options::deltaOneStep);
377 publish("stopSecondaries", &Options::stopSecondaries);
378 publish("killNeutrinos", &Options::killNeutrinos);
379 publish("killedParticlesMassAddedToEloss", &Options::killedParticlesMassAddedToEloss);
380 publish("minimumRadiusOfCurvature", &Options::minimumRadiusOfCurvature);
381 publish("sampleElementsWithPoleface", &Options::sampleElementsWithPoleface);
382 publish("nominalMatrixRelativeMomCut", &Options::nominalMatrixRelativeMomCut);
383 publish("teleporterFullTransform", &Options::teleporterFullTransform);
384 publish("dEThresholdForScattering", &Options::dEThresholdForScattering);
385 publish("backupStepperMomLimit", &Options::backupStepperMomLimit);
386
387 // hit generation
388 publish("sensitiveOuter", &Options::sensitiveOuter);
389 publish("sensitiveBeamlineComponents", &Options::sensitiveOuter); // backwards compatibility
390 publish("sensitiveBeamPipe", &Options::sensitiveBeamPipe);
391 publish("sensitiveBeampipe", &Options::sensitiveBeamPipe);
392 publish("sensitiveTunnel", &Options::storeElossTunnel);
393 publish("tunnelSensitive", &Options::storeElossTunnel);// backwards compatibility
394
395 // output
396 publish("nperfile", &Options::numberOfEventsPerNtuple);
397
398 publish("storeMinimalData", &Options::storeMinimalData);
399
400 publish("storeApertureImpacts", &Options::storeApertureImpacts);
401 publish("storeApertureImpactsIons", &Options::storeApertureImpactsIons);
402 publish("storeApertureImpactsAll", &Options::storeApertureImpactsAll);
403 publish("storeApertureImpactsHistograms", &Options::storeApertureImpactsHistograms);
404 publish("apertureImpactsMinimumKE", &Options::apertureImpactsMinimumKE);
405 publish("storeCavityInfo", &Options::storeCavityInfo);
406 publish("storeCollimatorInfo", &Options::storeCollimatorInfo);
407 publish("storeCollimatorHits", &Options::storeCollimatorHits);
408 publish("storeCollimatorHitsLinks", &Options::storeCollimatorHitsLinks); // backwards compatibility
409 publish("storeCollimatorHitsLinks", &Options::storeCollimatorHitsLinks);
410 publish("storeCollimatorHitsIons", &Options::storeCollimatorHitsIons);
411 publish("storeCollimatorHitsAll", &Options::storeCollimatorHitsAll);
412 publish("collimatorHitsMinimumKE", &Options::collimatorHitsMinimumKE);
413 publish("storeEloss", &Options::storeEloss);
414 publish("storeELoss", &Options::storeEloss);
415 publish("storeElossHistograms", &Options::storeElossHistograms);
416 publish("storeELossHistograms", &Options::storeElossHistograms);
417 publish("storeElossVacuum", &Options::storeElossVacuum);
418 publish("storeELossVacuum", &Options::storeElossVacuum);
419 publish("storeElossVacuumHistograms", &Options::storeElossVacuumHistograms);
420 publish("storeELossVacuumHistograms", &Options::storeElossVacuumHistograms);
421 publish("storeElossTunnel", &Options::storeElossTunnel);
422 publish("storeELossTunnel", &Options::storeElossTunnel);
423 publish("storeElossTunnelHistograms", &Options::storeElossTunnelHistograms);
424 publish("storeELossTunnelHistograms", &Options::storeElossTunnelHistograms);
425 publish("storeElossWorld", &Options::storeElossWorld);
426 publish("storeELossWorld", &Options::storeElossWorld);
427 publish("storeElossWorldIntegral", &Options::storeElossWorldIntegral);
428 publish("storeELossWorldIntegral", &Options::storeElossWorldIntegral);
429 publish("storeElossWorldContents", &Options::storeElossWorldContents);
430 publish("storeELossWorldContents", &Options::storeElossWorldContents);
431 publish("storeElossWorldContentsIntegral",&Options::storeElossWorldContentsIntegral);
432 publish("storeELossWorldContentsIntegral",&Options::storeElossWorldContentsIntegral);
433 publish("storeElossTurn", &Options::storeElossTurn);
434 publish("storeELossTurn", &Options::storeElossTurn);
435 publish("storeElossLinks", &Options::storeElossLinks);
436 publish("storeELossLinks", &Options::storeElossLinks);
437 publish("storeElossLocal", &Options::storeElossLocal);
438 publish("storeELossLocal", &Options::storeElossLocal);
439 publish("storeElossGlobal", &Options::storeElossGlobal);
440 publish("storeELossGlobal", &Options::storeElossGlobal);
441 publish("storeElossTime", &Options::storeElossTime);
442 publish("storeELossTime", &Options::storeElossTime);
443 publish("storeElossStepLength", &Options::storeElossStepLength);
444 publish("storeELossStepLength", &Options::storeElossStepLength);
445 publish("storeElossPreStepKineticEnergy", &Options::storeElossPreStepKineticEnergy);
446 publish("storeELossPreStepKineticEnergy", &Options::storeElossPreStepKineticEnergy);
447 publish("storeElossModelID", &Options::storeElossModelID);
448 publish("storeELossModelID", &Options::storeElossModelID);
449 publish("storeElossPhysicsProcesses", &Options::storeElossPhysicsProcesses);
450 publish("storeELossPhysicsProcesses", &Options::storeElossPhysicsProcesses);
451 publish("storeParticleData", &Options::storeParticleData);
452 publish("storeGeant4Data", &Options::storeParticleData); // backwards compatibility
453 publish("storePrimaries", &Options::storePrimaries);
454 publish("storePrimaryHistograms", &Options::storePrimaryHistograms);
455 publish("writePrimaries", &Options::storePrimaries); // backwards compatibility
456
457 publish("storeTrajectory", &Options::storeTrajectory);
458 publish("storeTrajectories", &Options::storeTrajectory);
459 publish("storeTrajectoryDepth", &Options::storeTrajectoryDepth);
460 publish("storeTrajectoryStepPoints", &Options::storeTrajectoryStepPoints);
461 publish("storeTrajectoryStepPointLast", &Options::storeTrajectoryStepPointLast);
462 publish("storeTrajectoryParticle", &Options::storeTrajectoryParticle);
463 publish("storeTrajectoryParticleID", &Options::storeTrajectoryParticleID);
464 publish("storeTrajectorySecondaryParticles", &Options::storeTrajectorySecondaryParticles);
465 publish("storeTrajectoryEnergyThreshold", &Options::storeTrajectoryEnergyThreshold);
466 publish("storeTrajectorySamplerID", &Options::storeTrajectorySamplerID);
467 publish("storeTrajectoryELossSRange", &Options::storeTrajectoryELossSRange);
468
469 publish("storeTrajectoryTransportationSteps", &Options::storeTrajectoryTransportationSteps);
470 publish("trajNoTransportation", &Options::trajNoTransportation);
471 publish("storeTrajectoryKineticEnergy", &Options::storeTrajectoryKineticEnergy);
472 publish("storeTrajectoryMomentumVector", &Options::storeTrajectoryMomentumVector);
473 publish("storeTrajectoryProcesses", &Options::storeTrajectoryProcesses);
474 publish("storeTrajectoryTime", &Options::storeTrajectoryTime);
475 publish("storeTrajectoryLocal", &Options::storeTrajectoryLocal);
476 publish("storeTrajectoryLinks", &Options::storeTrajectoryLinks);
477 publish("storeTrajectoryIon", &Options::storeTrajectoryIon);
478 publish("storeTrajectoryIons", &Options::storeTrajectoryIon);
479 publish("storeTrajectoryMaterial", &Options::storeTrajectoryMaterial);
480 publish("storeTrajectoryAllVariables", &Options::storeTrajectoryAllVariables);
481 publish("trajectoryFilterLogicAND", &Options::trajectoryFilterLogicAND);
482
483 publish("storeSamplerAll", &Options::storeSamplerAll);
484 publish("storeSamplerPolarCoords", &Options::storeSamplerPolarCoords);
485 publish("storeSamplerPolarCoordinates", &Options::storeSamplerPolarCoords);
486 publish("storeSamplerCharge", &Options::storeSamplerCharge);
487 publish("storeSamplerKineticEnergy", &Options::storeSamplerKineticEnergy);
488 publish("storeSamplerMass", &Options::storeSamplerMass);
489 publish("storeSamplerRigidity", &Options::storeSamplerRigidity);
490 publish("storeSamplerIon", &Options::storeSamplerIon);
491
492 publish("trajConnect", &Options::trajConnect);
493 publish("trajectoryConnect", &Options::trajConnect);
494 publish("trajCutGTZ", &Options::trajCutGTZ);
495 publish("trajCutLTR", &Options::trajCutLTR);
496
497 publish("storeModel", &Options::storeModel);
498
499 publish("samplersSplitLevel", &Options::samplersSplitLevel);
500 publish("modelSplitLevel", &Options::modelSplitLevel);
501 publish("uprootCompatible", &Options::uprootCompatible);
502
503 // circular options
504 publish("nturns", &Options::nturns);
505 publish("ptcOneTurnMapFileName", &Options::ptcOneTurnMapFileName);
506
507 publish("printModuloFraction", &Options::printFractionEvents); // alternative name
508 publish("printFractionEvents", &Options::printFractionEvents);
509 publish("printFractionTurns", &Options::printFractionTurns);
510 publish("printPhysicsProcesses", &Options::printPhysicsProcesses);
511
512 // visualisation
513 publish("nSegmentsPerCircle", &Options::nSegmentsPerCircle);
514
515 // scoring map
516 publish("nbinsx", &Options::nbinsx);
517 publish("nbinsy", &Options::nbinsy);
518 publish("nbinsz", &Options::nbinsz);
519 publish("nbinse" , &Options::nbinse);
520 publish("xmin", &Options::xmin);
521 publish("xmax", &Options::xmax);
522 publish("ymin", &Options::ymin);
523 publish("ymax", &Options::ymax);
524 publish("zmin", &Options::zmin);
525 publish("zmax", &Options::zmax);
526 publish("emin", &Options::emin);
527 publish("emax", &Options::emax);
528 publish("useScoringMap", &Options::useScoringMap);
529}
Basic options class independent of Geant4.
Definition: optionsBase.h:36
std::string bdsimPath
Definition: optionsBase.h:112
std::string seedStateFileName
Seed state file path.
Definition: optionsBase.h:99
std::string magnetGeometryType
default magnet geometry parameters
Definition: optionsBase.h:154
double beamlineZ
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:134
int nGenerate
The number of primary events to simulate.
Definition: optionsBase.h:93
std::string physicsList
list of physics processes
Definition: optionsBase.h:115
double muonSplittingThresholdParentEk2
physics parameters
Definition: optionsBase.h:265
double beamlineAngle
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:141
double beamlineS
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:143
bool survey
Parameter for survey.
Definition: optionsBase.h:55
double minimumRange
physics parameters
Definition: optionsBase.h:242
std::string outputFileName
Parameter for output format.
Definition: optionsBase.h:48
int muonSplittingFactor
physics parameters
Definition: optionsBase.h:262
double tunnelSoilThickness
tunnel geometry parameters
Definition: optionsBase.h:209
double minimumRadiusOfCurvature
Minimum allowed radius of curvature.
Definition: optionsBase.h:295
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:142
std::string exportFileName
Parameter for controlling geometry export.
Definition: optionsBase.h:107
int seed
The seed value for the random number generator.
Definition: optionsBase.h:91
double tunnelOffsetY
tunnel geometry parameters
Definition: optionsBase.h:218
double tunnelFloorOffset
tunnel geometry parameters
Definition: optionsBase.h:213
int verboseEventContinueFor
Event level verbosity.
Definition: optionsBase.h:73
bool hStyle
H Style dipoles (if not, C Style).
Definition: optionsBase.h:158
double xsize
for element specification
Definition: optionsBase.h:151
std::string particlesToExcludeFromCuts
physics parameters
Definition: optionsBase.h:243
double ffact
magnetic field flip (+1 default, -1: flip sign)
Definition: optionsBase.h:129
double tunnelMaxSegmentLength
tunnel geometry parameters
Definition: optionsBase.h:219
double muonSplittingThresholdParentEk
physics parameters
Definition: optionsBase.h:263
int verboseEventStart
Event level verbosity.
Definition: optionsBase.h:72
bool useLENDGammaNuclear
physics parameters
Definition: optionsBase.h:251
double maximumTrackingTime
Maximum tracking time per track [s].
Definition: optionsBase.h:283
bool dontSplitSBends
geometry debug, don't split bends into multiple segments
Definition: optionsBase.h:170
std::string tunnelMaterial
tunnel geometry parameters
Definition: optionsBase.h:210
bool useASCIISeedState
Whether to use the seed state from an ASCII file.
Definition: optionsBase.h:98
bool tunnelIsInfiniteAbsorber
physics parameters
Definition: optionsBase.h:261
bool verboseSteppingPrimaryOnly
Stepping level verbosity.
Definition: optionsBase.h:83
double muonSplittingExclusionWeight
physics parameters
Definition: optionsBase.h:267
bool collimatorsAreInfiniteAbsorbers
physics parameters
Definition: optionsBase.h:260
int verboseRunLevel
Run level verbosity.
Definition: optionsBase.h:67
bool turnOnOpticalSurface
Physics processes.
Definition: optionsBase.h:232
double prodCutProtons
physics parameters
Definition: optionsBase.h:248
int nSegmentsPerCircle
Number of facets per 2pi in visualisation.
Definition: optionsBase.h:401
std::string soilMaterial
tunnel geometry parameters
Definition: optionsBase.h:211
bool preprocessGDML
geometry control
Definition: optionsBase.h:166
int maximumBetaChangePerStep
physics parameters
Definition: optionsBase.h:238
bool batch
Flag for batch / interactive mode.
Definition: optionsBase.h:59
double minimumKineticEnergy
physics parameters
Definition: optionsBase.h:240
int eventOffset
Event number to start from when recreating from a root file.
Definition: optionsBase.h:123
int verboseTrackingLevel
Tracking verbosity.
Definition: optionsBase.h:76
bool circular
Flag for circular machine.
Definition: optionsBase.h:90
bool checkOverlaps
bdsim options
Definition: optionsBase.h:149
double neutronKineticEnergyLimit
physics parameters
Definition: optionsBase.h:250
double aper1
default beampipe parameters
Definition: optionsBase.h:183
double maximumTrackLength
Maximum permitted track length [m].
Definition: optionsBase.h:285
int verboseEventLevel
Event level verbosity.
Definition: optionsBase.h:71
bool restoreFTPFDiffractionForAGreater10
physics parameters
Definition: optionsBase.h:257
bool turnOnOpticalAbsorption
Physics processes.
Definition: optionsBase.h:229
bool buildTunnelStraight
tunnel geometry parameters
Definition: optionsBase.h:206
std::string inputFileName
Input filename.
Definition: optionsBase.h:40
long maximumTracksPerEvent
physics parameters
Definition: optionsBase.h:239
double backupStepperMomLimit
Fractional momentum limit for reverting to backup steppers.
Definition: optionsBase.h:300
double aper2
default beampipe parameters
Definition: optionsBase.h:184
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:135
double maximumStepLength
Maximum permitted step length in any volume.
Definition: optionsBase.h:284
std::string exportType
Parameter for controlling geometry export.
Definition: optionsBase.h:106
double neutronTimeLimit
physics parameters
Definition: optionsBase.h:249
bool recreateSeedState
Load seed state when recreating events.
Definition: optionsBase.h:124
std::string vacMaterial
vacuum material
Definition: optionsBase.h:191
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.
Definition: optionsBase.h:298
bool buildTunnelFloor
tunnel geometry parameters
Definition: optionsBase.h:212
int startFromEvent
Event to start from when recreating.
Definition: optionsBase.h:96
std::string emptyMaterial
material in container volumes
Definition: optionsBase.h:192
bool muonSplittingExcludeWeight1Particles
physics parameters
Definition: optionsBase.h:266
double prodCutPhotons
physics parameters
Definition: optionsBase.h:245
bool generatePrimariesOnly
Whether to only generate primary coordinates and quit, or not.
Definition: optionsBase.h:102
double defaultRangeCut
physics parameters
Definition: optionsBase.h:244
double beamlineAxisY
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:139
double prodCutElectrons
physics parameters
Definition: optionsBase.h:246
double tunnelAper1
tunnel geometry parameters
Definition: optionsBase.h:214
bool verboseEventBDSIM
Event level verbosity.
Definition: optionsBase.h:70
int maximumPhotonsPerStep
physics parameters
Definition: optionsBase.h:237
std::string beampipeMaterial
default beampipe parameters
Definition: optionsBase.h:187
bool exportGeometry
Parameter for controlling geometry export.
Definition: optionsBase.h:105
int verboseSteppingLevel
Stepping level verbosity.
Definition: optionsBase.h:80
double beampipeThickness
default beampipe parameters
Definition: optionsBase.h:181
bool turnOnRayleighScattering
Physics processes.
Definition: optionsBase.h:231
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:236
bool beamPipeIsInfiniteAbsorber
physics parameters
Definition: optionsBase.h:259
double beamlineX
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:132
std::string apertureType
default beampipe parameters
Definition: optionsBase.h:182
bool verboseSteppingBDSIM
Stepping level verbosity.
Definition: optionsBase.h:79
bool useMuonNuclear
physics parameters
Definition: optionsBase.h:253
bool useElectroNuclear
physics parameters
Definition: optionsBase.h:252
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:422
bool recreate
Whether to recreate from a file or not.
Definition: optionsBase.h:94
double tunnelAper2
tunnel geometry parameters
Definition: optionsBase.h:215
bool turnOnMieScattering
Physics processes.
Definition: optionsBase.h:230
double beamlineY
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:133
double beamlineAxisX
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:138
double tunnelThickness
tunnel geometry parameters
Definition: optionsBase.h:208
std::string randomEngine
Name of random engine to use.
Definition: optionsBase.h:92
double prodCutPositrons
physics parameters
Definition: optionsBase.h:247
bool buildTunnel
tunnel geometry parameters
Definition: optionsBase.h:205
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:45
bool useGammaToMuMu
physics parameters
Definition: optionsBase.h:254
double aper4
default beampipe parameters
Definition: optionsBase.h:186
double aper3
default beampipe parameters
Definition: optionsBase.h:185
double minimumKineticEnergyTunnel
physics parameters
Definition: optionsBase.h:241
double tunnelOffsetX
tunnel geometry parameters
Definition: optionsBase.h:217
bool usePositronToMuMu
physics parameters
Definition: optionsBase.h:255
std::string tunnelType
tunnel geometry parameters
Definition: optionsBase.h:207
double beamlineAxisZ
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:140
double beamlinePsi
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:137
std::string geant4MacroFileName
Geant4 macro to run.
Definition: optionsBase.h:42
bool trajNoTransportation
kept only for backwards compatibility.
Definition: optionsBase.h:360
bool usePositronToHadrons
physics parameters
Definition: optionsBase.h:256
bool tunnelVisible
tunnel geometry parameters
Definition: optionsBase.h:216
int muonSplittingFactor2
physics parameters
Definition: optionsBase.h:264
double worldVolumeMargin
Padding margin for world volume size.
Definition: optionsBase.h:200
double nominalMatrixRelativeMomCut
Momentum threshold for nominal dipole matrix tracking.
Definition: optionsBase.h:297
double beamlineTheta
Initial beam line transform w.r.t. the world coordinate frame.
Definition: optionsBase.h:136
bool ignoreLocalAperture
default beampipe parameters
Definition: optionsBase.h:188
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.