18 namespace po = boost::program_options;
19 using namespace Acts::UnitLiterals;
28 template <
typename aopt_t>
31 "prop-debug", po::value<bool>()->default_value(
false),
32 "Run in debug mode, will create propagation screen output.")(
33 "prop-step-collection",
34 po::value<std::string>()->default_value(
"propagation-steps"),
35 "Propgation step collection.")(
36 "prop-stepper", po::value<int>()->default_value(1),
37 "Propgation type: 0 (StraightLine), 1 (Eigen), 2 (Atlas).")(
38 "prop-mode", po::value<int>()->default_value(0),
39 "Propgation modes: 0 (inside-out), 1 (surface to surface).")(
40 "prop-cov", po::value<bool>()->default_value(
false),
41 "Propagate (random) test covariances.")(
42 "prop-energyloss", po::value<bool>()->default_value(
true),
43 "Apply energy loss correction - in extrapolation mode only.")(
44 "prop-scattering", po::value<bool>()->default_value(
true),
45 "Apply scattering correction - in extrapolation mode only.")(
46 "prop-record-material", po::value<bool>()->default_value(
true),
47 "Record the material interaction and - in extrapolation mode only.")(
48 "prop-material-collection",
49 po::value<std::string>()->default_value(
"propagation-material"),
50 "Propagation material collection.")(
51 "prop-ntests", po::value<size_t>()->default_value(1000),
52 "Number of tests performed.")(
53 "prop-d0-sigma", po::value<double>()->default_value(15
_um),
54 "Sigma of the transverse impact parameter [in mm].")(
55 "prop-z0-sigma", po::value<double>()->default_value(55
_mm),
56 "Sigma of the longitudinal impact parameter [in mm].")(
57 "prop-phi-sigma", po::value<double>()->default_value(0.001),
58 "Sigma of the azimuthal angle [in rad].")(
59 "prop-theta-sigma", po::value<double>()->default_value(0.001),
60 "Sigma of the polar angle [in rad].")(
61 "prop-qp-sigma", po::value<double>()->default_value(0.0001 / 1
_GeV),
62 "Sigma of the signed inverse momentum [in GeV^{-1}].")(
63 "prop-t-sigma", po::value<double>()->default_value(1_ns),
64 "Sigma of the time parameter [in ns].")(
66 po::value<read_range>()->multitoken()->default_value({}),
67 "The 15 off-diagonal correlation rho(d0,z0), rho(d0,phi), [...], "
68 "rho(z0,phi), rho(z0, theta), [...], rho(qop,t). Row-wise.")(
70 po::value<read_range>()->multitoken()->default_value({-
M_PI,
M_PI}),
71 "Azimutal angle phi range for proprapolated tracks.")(
73 po::value<read_range>()->multitoken()->default_value({-4., 4.}),
74 "Pseudorapidity range for proprapolated tracks.")(
76 po::value<read_range>()->multitoken()->default_value({100
_MeV, 100
_GeV}),
77 "Transverse momentum range for proprapolated tracks [in GeV].")(
78 "prop-max-stepsize", po::value<double>()->default_value(3
_m),
79 "Maximum step size for the propagation [in mm].")(
80 "prop-pt-loopers", po::value<double>()->default_value(300
_MeV),
81 "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>()) {
151 auto readOffd = vm[
"prop-corr-offd"].template as<read_range>();
153 if (readOffd.size() == 15) {