Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:13

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2023-2025 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 // Project include(s).
0009 #include "traccc/options/telescope_detector.hpp"
0010 
0011 #include "traccc/definitions/common.hpp"
0012 #include "traccc/examples/utils/printable.hpp"
0013 
0014 // System include(s).
0015 #include <sstream>
0016 
0017 namespace traccc::opts {
0018 
0019 /// Convenience namespace shorthand
0020 namespace po = boost::program_options;
0021 
0022 telescope_detector::telescope_detector()
0023     : interface("Telescope Detector Options") {
0024   m_desc.add_options()("empty-material", po::bool_switch(&empty_material),
0025                        "Build detector without materials");
0026   m_desc.add_options()("n-planes",
0027                        po::value(&n_planes)->default_value(n_planes),
0028                        "Number of planes");
0029   m_desc.add_options()("thickness-mm",
0030                        po::value(&thickness)->default_value(thickness),
0031                        "Slab thickness in [mm]");
0032   m_desc.add_options()("spacing", po::value(&spacing)->default_value(spacing),
0033                        "Space between planes in [mm]");
0034   m_desc.add_options()("smearing-um",
0035                        po::value(&smearing)->default_value(smearing),
0036                        "Measurement smearing in [um]");
0037   m_desc.add_options()("half-length-mm",
0038                        po::value(&half_length)->default_value(half_length),
0039                        "Half length of plane [mm]");
0040   m_desc.add_options()("align-vector",
0041                        po::value(&align_vector)
0042                            ->value_name("X:Y:Z")
0043                            ->default_value(align_vector),
0044                        "Vector for plane placement");
0045 }
0046 
0047 void telescope_detector::read(const po::variables_map &) {
0048   thickness *= traccc::unit<float>::mm;
0049   spacing *= traccc::unit<float>::mm;
0050   smearing *= traccc::unit<float>::um;
0051   half_length *= traccc::unit<float>::mm;
0052 }
0053 
0054 std::unique_ptr<configuration_printable> telescope_detector::as_printable()
0055     const {
0056   auto cat = std::make_unique<configuration_category>(m_description);
0057 
0058   cat->add_child(std::make_unique<configuration_kv_pair>(
0059       "Empty material", empty_material ? "yes" : "no"));
0060   cat->add_child(std::make_unique<configuration_kv_pair>(
0061       "Number of planes", std::to_string(n_planes)));
0062   cat->add_child(std::make_unique<configuration_kv_pair>(
0063       "Slab thickness",
0064       std::to_string(thickness / traccc::unit<float>::mm) + " mm"));
0065   cat->add_child(std::make_unique<configuration_kv_pair>(
0066       "Spacing", std::to_string(spacing / traccc::unit<float>::mm) + " mm"));
0067   cat->add_child(std::make_unique<configuration_kv_pair>(
0068       "Smearing", std::to_string(thickness / traccc::unit<float>::um) + " um"));
0069   cat->add_child(std::make_unique<configuration_kv_pair>(
0070       "Half length",
0071       std::to_string(half_length / traccc::unit<float>::mm) + " mm"));
0072   std::ostringstream align_ss;
0073   align_ss << align_vector;
0074   cat->add_child(std::make_unique<configuration_kv_pair>("Alignment axis",
0075                                                          align_ss.str()));
0076 
0077   return cat;
0078 }
0079 
0080 }  // namespace traccc::opts