Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2024-2026 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 // Local include(s).
0009 #include "traccc/io/read_detector.hpp"
0010 
0011 #include "traccc/geometry/detector.hpp"
0012 #include "traccc/geometry/host_detector.hpp"
0013 #include "traccc/io/detector.hpp"
0014 #include "traccc/io/utils.hpp"
0015 
0016 // System include(s).
0017 #include <string>
0018 
0019 namespace {
0020 
0021 /// Common implementation for constructing a detector from a set of input files
0022 template <typename detector_t>
0023 void read_detector(traccc::host_detector& detector, vecmem::memory_resource& mr,
0024                    const std::string_view& geometry_file,
0025                    const std::string_view& material_file,
0026                    const std::string_view& grid_file,
0027                    const bool do_consistency_check = false) {
0028   // Set up the detector reader configuration.
0029   detray::io::detector_reader_config cfg;
0030   cfg.do_check(do_consistency_check);
0031 
0032   cfg.add_file(traccc::io::get_absolute_path(geometry_file));
0033   if (material_file.empty() == false) {
0034     cfg.add_file(traccc::io::get_absolute_path(material_file));
0035   }
0036   if (grid_file.empty() == false) {
0037     cfg.add_file(traccc::io::get_absolute_path(grid_file));
0038   }
0039 
0040   // Read the detector.
0041   auto det = detray::io::read_detector<typename detector_t::host>(mr, cfg);
0042   detector.set<detector_t>(std::move(det.first));
0043 }
0044 
0045 }  // namespace
0046 
0047 namespace traccc::io {
0048 
0049 void read_detector(host_detector& detector, vecmem::memory_resource& mr,
0050                    const std::string_view& geometry_file,
0051                    const std::string_view& material_file,
0052                    const std::string_view& grid_file) {
0053   // Peek at the header to determine the kind of detector that is needed
0054   const auto header = detray::io::detail::deserialize_json_header(
0055       traccc::io::get_absolute_path(geometry_file));
0056 
0057   // TODO: Update this
0058   if (header.detector == "Cylindrical detector from DD4hep blueprint") {
0059     ::read_detector<odd_detector>(detector, mr, geometry_file, material_file,
0060                                   grid_file);
0061   } else if (header.detector == "detray_detector") {
0062     ::read_detector<itk_detector>(detector, mr, geometry_file, material_file,
0063                                   grid_file);
0064   } else {
0065     // TODO: Warning here
0066     ::read_detector<default_detector>(detector, mr, geometry_file,
0067                                       material_file, grid_file);
0068   }
0069 }
0070 
0071 }  // namespace traccc::io