19 namespace po = boost::program_options;
20 using namespace Acts::UnitLiterals;
22 namespace ActsExamples {
29 template <
typename aopt_t>
32 "prop-debug", po::value<bool>()->default_value(
false),
33 "Run in debug mode, will create propagation screen output.")(
34 "prop-step-collection",
35 po::value<std::string>()->default_value(
"propagation-steps"),
36 "Propgation step collection.")(
37 "prop-stepper", po::value<int>()->default_value(1),
38 "Propgation type: 0 (StraightLine), 1 (Eigen), 2 (Atlas).")(
39 "prop-mode", po::value<int>()->default_value(0),
40 "Propgation modes: 0 (inside-out), 1 (surface to surface).")(
41 "prop-cov", po::value<bool>()->default_value(
false),
42 "Propagate (random) test covariances.")(
43 "prop-energyloss", po::value<bool>()->default_value(
true),
44 "Apply energy loss correction - in extrapolation mode only.")(
45 "prop-scattering", po::value<bool>()->default_value(
true),
46 "Apply scattering correction - in extrapolation mode only.")(
47 "prop-record-material", po::value<bool>()->default_value(
true),
48 "Record the material interaction and - in extrapolation mode only.")(
49 "prop-material-collection",
50 po::value<std::string>()->default_value(
"propagation-material"),
51 "Propagation material collection.")(
52 "prop-ntests", po::value<size_t>()->default_value(1000),
53 "Number of tests performed.")(
54 "prop-d0-sigma", po::value<double>()->default_value(15_um),
55 "Sigma of the transverse impact parameter [in mm].")(
56 "prop-z0-sigma", po::value<double>()->default_value(55_mm),
57 "Sigma of the longitudinal impact parameter [in mm].")(
58 "prop-phi-sigma", po::value<double>()->default_value(0.001),
59 "Sigma of the azimuthal angle [in rad].")(
60 "prop-theta-sigma", po::value<double>()->default_value(0.001),
61 "Sigma of the polar angle [in rad].")(
62 "prop-qp-sigma", po::value<double>()->default_value(0.0001 / 1_GeV),
63 "Sigma of the signed inverse momentum [in GeV^{-1}].")(
64 "prop-t-sigma", po::value<double>()->default_value(1_ns),
65 "Sigma of the time parameter [in ns].")(
67 po::value<read_range>()->multitoken()->default_value({}),
68 "The 15 off-diagonal correlation rho(d0,z0), rho(d0,phi), [...], "
69 "rho(z0,phi), rho(z0, theta), [...], rho(qop,t). Row-wise.")(
71 po::value<read_range>()->multitoken()->default_value({-
M_PI,
M_PI}),
72 "Azimutal angle phi range for proprapolated tracks.")(
74 po::value<read_range>()->multitoken()->default_value({-4., 4.}),
75 "Pseudorapidity range for proprapolated tracks.")(
77 po::value<read_range>()->multitoken()->default_value({100_MeV, 100_GeV}),
78 "Transverse momentum range for proprapolated tracks [in GeV].")(
79 "prop-max-stepsize", po::value<double>()->default_value(3_m),
80 "Maximum step size for the propagation [in mm].")(
81 "prop-pt-loopers", po::value<double>()->default_value(300_MeV),
82 "Transverse momentum below which loops are being detected [in GeV].");
94 template <
typename vmap_t,
typename propagator_t>
98 std::move(propagator));
100 read_range iphir = vm[
"prop-phi-range"].template as<read_range>();
101 read_range ietar = vm[
"prop-eta-range"].template as<read_range>();
102 read_range iptr = vm[
"prop-pt-range"].template as<read_range>();
105 pAlgConfig.
energyLoss = vm[
"prop-energyloss"].template as<bool>();
108 vm[
"prop-record-material"].template as<bool>();
111 pAlgConfig.
debugOutput = vm[
"prop-debug"].template as<bool>();
112 pAlgConfig.
ntests = vm[
"prop-ntests"].template as<size_t>();
113 pAlgConfig.
mode = vm[
"prop-mode"].template as<int>();
114 pAlgConfig.
d0Sigma = vm[
"prop-d0-sigma"].template as<double>() * 1_mm;
115 pAlgConfig.
z0Sigma = vm[
"prop-z0-sigma"].template as<double>() * 1_mm;
116 pAlgConfig.
phiSigma = vm[
"prop-phi-sigma"].template as<double>();
117 pAlgConfig.
thetaSigma = vm[
"prop-theta-sigma"].template as<double>();
118 pAlgConfig.
qpSigma = vm[
"prop-qp-sigma"].template as<double>() / 1_GeV;
119 pAlgConfig.
tSigma = vm[
"prop-t-sigma"].template as<double>() * 1_ns;
121 pAlgConfig.
phiRange = {iphir[0], iphir[1]};
122 pAlgConfig.
etaRange = {ietar[0], ietar[1]};
123 pAlgConfig.
ptRange = {iptr[0] * 1_GeV, iptr[1] * 1_GeV};
124 pAlgConfig.
ptLoopers = vm[
"prop-pt-loopers"].template as<double>() * 1_GeV;
125 pAlgConfig.
maxStepSize = vm[
"prop-max-stepsize"].template as<double>() * 1_mm;
128 vm[
"prop-step-collection"].template as<std::string>();
130 vm[
"prop-material-collection"].template as<std::string>();
133 if (vm[
"prop-cov"].
template as<bool>()) {
157 auto readOffd = vm[
"prop-corr-offd"].template as<read_range>();
159 if (readOffd.size() == 15) {