ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
wire_chamber_options.hpp
1// This file is part of the ACTS project.
2//
3// Copyright (C) 2016 CERN for the benefit of the ACTS project
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#pragma once
10
11// Project include(s)
12#include "detray/definitions/algebra.hpp"
13#include "detray/geometry/shapes/line.hpp"
14
15// Detray test include(s)
16#include "detray/options/options_handling.hpp"
17#include "detray/test/common/build_wire_chamber.hpp"
18
19// Boost
20#include "detray/options/boost_program_options.hpp"
21
22// System include(s)
23#include <string>
24
25namespace detray::options {
26
27namespace detail {
28
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) {
34 desc.add_options()(
35 "layers",
36 boost::program_options::value<unsigned int>()->default_value(
37 cfg.n_layers()),
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]")(
42 "cell_size",
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]")(
46 "stereo_angle",
47 boost::program_options::value<float>()->default_value(
48 static_cast<float>(cfg.stereo_angle())),
49 "abs. stereo angle [rad]")(
50 "mat_radius",
51 boost::program_options::value<float>()->default_value(
52 static_cast<float>(cfg.mat_radius())),
53 "radius of material rods [mm]");
54}
55
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>());
66}
67
68} // namespace detail
69
72template <>
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);
77}
78template <>
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);
83}
85
88template <>
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);
93}
94template <>
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);
99}
101
104template <>
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);
109}
110template <>
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);
115}
117
120template <>
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);
125}
126template <>
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);
131}
133
134} // namespace detray::options