12#include "detray/definitions/algebra.hpp"
13#include "detray/geometry/shapes/line.hpp"
16#include "detray/options/options_handling.hpp"
17#include "detray/test/common/build_wire_chamber.hpp"
20#include "detray/options/boost_program_options.hpp"
25namespace detray::options {
30template <concepts::scalar scalar_t,
typename wire_shape_t>
31void add_wire_chamber_options(
32 boost::program_options::options_description &desc,
33 const wire_chamber_config<scalar_t, wire_shape_t> &cfg) {
36 boost::program_options::value<unsigned int>()->default_value(
38 "number of layers")(
"half_z",
39 boost::program_options::value<float>()->default_value(
40 static_cast<float>(cfg.half_z())),
41 "half length z of the chamber [mm]")(
43 boost::program_options::value<float>()->default_value(
44 static_cast<float>(cfg.cell_size())),
45 "half length of the wire cells/straw tubes [mm]")(
47 boost::program_options::value<float>()->default_value(
48 static_cast<float>(cfg.stereo_angle())),
49 "abs. stereo angle [rad]")(
51 boost::program_options::value<float>()->default_value(
52 static_cast<float>(cfg.mat_radius())),
53 "radius of material rods [mm]");
57template <concepts::scalar scalar_t,
typename wire_shape_t>
58void configure_wire_chamber_options(
59 const boost::program_options::variables_map &vm,
60 wire_chamber_config<scalar_t, wire_shape_t> &cfg) {
61 cfg.n_layers(vm[
"layers"].as<unsigned int>());
62 cfg.half_z(vm[
"half_z"].as<float>());
63 cfg.cell_size(vm[
"cell_size"].as<float>());
64 cfg.stereo_angle(vm[
"stereo_angle"].as<float>());
65 cfg.mat_radius(vm[
"mat_radius"].as<float>());
73void add_options<wire_chamber_config<float, detray::line_square>>(
74 boost::program_options::options_description &desc,
75 const wire_chamber_config<float, detray::line_square> &cfg) {
76 detail::add_wire_chamber_options(desc, cfg);
79void add_options<wire_chamber_config<double, detray::line_square>>(
80 boost::program_options::options_description &desc,
81 const wire_chamber_config<double, detray::line_square> &cfg) {
82 detail::add_wire_chamber_options(desc, cfg);
89void add_options<wire_chamber_config<float, detray::line_circular>>(
90 boost::program_options::options_description &desc,
91 const wire_chamber_config<float, detray::line_circular> &cfg) {
92 detail::add_wire_chamber_options(desc, cfg);
95void add_options<wire_chamber_config<double, detray::line_circular>>(
96 boost::program_options::options_description &desc,
97 const wire_chamber_config<double, detray::line_circular> &cfg) {
98 detail::add_wire_chamber_options(desc, cfg);
105void configure_options<wire_chamber_config<float, detray::line_square>>(
106 const boost::program_options::variables_map &vm,
107 wire_chamber_config<float, detray::line_square> &cfg) {
108 detail::configure_wire_chamber_options(vm, cfg);
111void configure_options<wire_chamber_config<double, detray::line_square>>(
112 const boost::program_options::variables_map &vm,
113 wire_chamber_config<double, detray::line_square> &cfg) {
114 detail::configure_wire_chamber_options(vm, cfg);
121void configure_options<wire_chamber_config<float, detray::line_circular>>(
122 const boost::program_options::variables_map &vm,
123 wire_chamber_config<float, detray::line_circular> &cfg) {
124 detail::configure_wire_chamber_options(vm, cfg);
127void configure_options<wire_chamber_config<double, detray::line_circular>>(
128 const boost::program_options::variables_map &vm,
129 wire_chamber_config<double, detray::line_circular> &cfg) {
130 detail::configure_wire_chamber_options(vm, cfg);