12#include "detray/propagator/propagation_config.hpp"
15#include "detray/options/options_handling.hpp"
18#include "detray/options/boost_program_options.hpp"
23namespace detray::options {
27void add_options<detray::navigation::config>(
28 boost::program_options::options_description &desc,
29 const detray::navigation::config &cfg) {
32 boost::program_options::value<std::vector<dindex>>()->multitoken(),
33 "Search window size for the grid")(
35 boost::program_options::value<float>()->default_value(
37 "Minimum mask tolerance [mm]")(
39 boost::program_options::value<float>()->default_value(
41 "Maximum mask tolerance [mm]")(
42 "mask_tolerance_scalor",
43 boost::program_options::value<float>()->default_value(
45 "Mask tolerance scale factor")(
47 boost::program_options::value<float>()->default_value(
49 "Overstepping tolerance [um] NOTE: Must be negative!")(
51 boost::program_options::value<float>()->default_value(
53 "Tol. to decide when a track is on surface [um]")(
54 "estimate_scattering_noise",
55 "Open the navigation surface tolerance according to an estimation of "
56 "the noise due to multiple scattering")(
57 "n_scattering_stddev",
58 boost::program_options::value<int>()->default_value(
60 "Number of standard deviations of estimated error to use for "
61 "scattering noise")(
"accumulated_error",
62 boost::program_options::value<float>()->default_value(
64 "Estimation of accumulated positional error [%]");
69void add_options<detray::stepping::config>(
70 boost::program_options::options_description &desc,
71 const detray::stepping::config &cfg) {
72 desc.add_options()(
"minimum_stepsize",
73 boost::program_options::value<float>()->default_value(
75 "Minimum step size [mm]")(
77 boost::program_options::value<float>()->default_value(
79 "Maximum step size [mm]")(
81 boost::program_options::value<float>()->default_value(cfg.
rk_error_tol /
83 "The Runge-Kutta integration error tolerance [mm]")(
85 boost::program_options::value<float>()->default_value(cfg.
path_limit /
87 "Maximum path length for a track [m]")(
"mean_energy_loss",
88 "Use Bethe energy loss")(
89 "covariance_transport",
"Run the covariance transport")(
90 "eloss_gradient",
"Use energy loss gradient in Jacobian transport")(
91 "bfield_gradient",
"Use B-field gradient in Jacobian transport");
96void add_options<detray::propagation::config>(
97 boost::program_options::options_description &desc,
98 const detray::propagation::config &cfg) {
105void configure_options<detray::navigation::config>(
106 const boost::program_options::variables_map &vm,
107 detray::navigation::config &cfg) {
109 if (vm.count(
"search_window") != 0u) {
110 const auto window = vm[
"search_window"].as<std::vector<dindex>>();
111 if (window.size() == 2u) {
114 throw std::invalid_argument(
115 "Incorrect surface grid search window. Please provide two "
116 "integer distances.");
120 if (!vm[
"min_mask_tolerance"].defaulted()) {
121 const float mask_tol{vm[
"min_mask_tolerance"].as<
float>()};
122 assert(mask_tol >= 0.f);
126 if (!vm[
"max_mask_tolerance"].defaulted()) {
127 const float mask_tol{vm[
"max_mask_tolerance"].as<
float>()};
128 assert(mask_tol >= 0.f);
132 if (!vm[
"mask_tolerance_scalor"].defaulted()) {
133 const float mask_tol_scalor{vm[
"mask_tolerance_scalor"].as<
float>()};
134 assert(mask_tol_scalor >= 0.f);
138 if (!vm[
"overstep_tolerance"].defaulted()) {
139 const float overstep_tol{vm[
"overstep_tolerance"].as<
float>()};
140 assert(overstep_tol <= 0.f);
144 if (!vm[
"path_tolerance"].defaulted()) {
145 const float path_tol{vm[
"path_tolerance"].as<
float>()};
146 assert(path_tol >= 0.f);
151 if (vm.count(
"estimate_scattering_noise") != 0u) {
154 if (!vm[
"n_scattering_stddev"].defaulted()) {
155 const int n_stddev{vm[
"n_scattering_stddev"].as<
int>()};
156 assert(n_stddev >= 0);
161 if (!vm[
"accumulated_error"].defaulted()) {
162 const float err{vm[
"accumulated_error"].as<
float>()};
168 if (!vm[
"n_scattering_stddev"].defaulted()) {
169 throw std::invalid_argument(
170 "Option 'n_scattering_stddev' cannot not be configured unless "
171 "'estimate_scattering_noise' is activated");
173 if (!vm[
"accumulated_error"].defaulted()) {
174 throw std::invalid_argument(
175 "Option 'accumulated_error' cannot not be configured unless "
176 "'estimate_scattering_noise' is activated");
183void configure_options<detray::stepping::config>(
184 const boost::program_options::variables_map &vm,
185 detray::stepping::config &cfg) {
187 if (!vm[
"minimum_stepsize"].defaulted()) {
188 const float min_step{vm[
"minimum_stepsize"].as<
float>()};
189 assert(min_step >= 0.f);
193 if (!vm[
"step_contraint"].defaulted()) {
194 const float constraint{vm[
"step_contraint"].as<
float>()};
195 assert(constraint >= 0.f);
199 if (!vm[
"rk-tolerance"].defaulted()) {
200 const float err_tol{vm[
"rk-tolerance"].as<
float>()};
201 assert(err_tol >= 0.f);
205 if (!vm[
"path_limit"].defaulted()) {
206 const float path_limit{vm[
"path_limit"].as<
float>()};
207 assert(path_limit > 0.f);
212 if (vm.count(
"covariance_transport") != 0u) {
215 if (vm.count(
"mean_eloss") != 0u) {
218 if (vm.count(
"eloss_gradient") != 0u) {
221 if (vm.count(
"bfield_gradient") != 0u) {
228void configure_options<detray::propagation::config>(
229 const boost::program_options::variables_map &vm,
230 detray::propagation::config &cfg) {
232 configure_options(vm, cfg.
stepping);
float max_mask_tolerance
Maximal tolerance: loose tolerance when still far away from surface.
Definition intersection_config.hpp:27
float overstep_tolerance
How far behind the track position to look for candidates.
Definition intersection_config.hpp:34
float mask_tolerance_scalor
Scale factor on the path used for the mask tolerance calculation.
Definition intersection_config.hpp:29
float min_mask_tolerance
Tolerance on the mask 'is_inside' check:Minimal tolerance: ~ position uncertainty on surface.
Definition intersection_config.hpp:25
float path_tolerance
Maximal absolute path distance for a track to be considered 'on surface'.
Definition intersection_config.hpp:32
float accumulated_error
Percentage of total track path to assume as accumulated error.
Definition navigation_config.hpp:34
intersection::config intersection
Tolerance on the mask 'is_inside' check:
Definition navigation_config.hpp:26
int n_scattering_stddev
Number of standard deviations to assume to model the scattering noise.
Definition navigation_config.hpp:36
bool estimate_scattering_noise
Add adaptive mask tolerance to navigation.
Definition navigation_config.hpp:38
detray::search_window< dindex, 2 > search_window
Search window size for grid based acceleration structures (0, 0): only look at current bin.
Definition navigation_config.hpp:29
navigation::config navigation
Navigation options controlling candidate selection and stopping.
Definition propagation_config.hpp:25
stepping::config stepping
Stepper options controlling integration and step limits.
Definition propagation_config.hpp:27
float path_limit
Maximal path length of track.
Definition stepping_config.hpp:37
float step_constraint
Step size constraint.
Definition stepping_config.hpp:35
bool use_field_gradient
Use b field gradient in error propagation.
Definition stepping_config.hpp:46
bool use_mean_loss
Use mean energy loss (Bethe) if false, most probable energy loss (Landau) will be used.
Definition stepping_config.hpp:42
float rk_error_tol
Runge-Kutta numeric error tolerance.
Definition stepping_config.hpp:33
float min_stepsize
Minimum step size.
Definition stepping_config.hpp:31
bool do_covariance_transport
Do covariance transport.
Definition stepping_config.hpp:48
bool use_eloss_gradient
Use eloss gradient in error propagation.
Definition stepping_config.hpp:44
static constexpr scalar_t um
Length, native unit mm.
Definition units.hpp:25
static constexpr scalar_t mm
Native length unit, the millimetre.
Definition units.hpp:27
static constexpr scalar_t m
Metre expressed in millimetres.
Definition units.hpp:31