Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2024-2025 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 #pragma once
0009 
0010 // Project include(s).
0011 #include "traccc/definitions/primitives.hpp"
0012 
0013 // Detray include(s).
0014 
0015 // Turn off exessive detector building debug logs (only works with gcc!)
0016 // clang-format off
0017 #include <detray/utils/quiet_log_start.hpp>
0018 #include <detray/core/detector.hpp>
0019 #include <detray/utils/quiet_log_end.hpp>
0020 // clang-format on
0021 
0022 #include <detray/detectors/default_metadata.hpp>
0023 #include <detray/detectors/itk_metadata.hpp>
0024 #include <detray/detectors/odd_metadata.hpp>
0025 #include <detray/detectors/telescope_metadata.hpp>
0026 #include <detray/detectors/toy_metadata.hpp>
0027 #include <detray/detectors/wire_chamber_metadata.hpp>
0028 
0029 // VecMem include(s).
0030 #include <vecmem/containers/device_vector.hpp>
0031 
0032 // System include(s).
0033 #include <type_traits>
0034 
0035 namespace traccc {
0036 namespace details {
0037 
0038 /// Type used instead of @c detray::device_container_types
0039 ///
0040 /// This is meant as a template for how @c detray::device_container_types should
0041 /// change. So that it would correctly reflect that all data access on a device
0042 /// is constant. Not modifying the detector's payload.
0043 ///
0044 /// Also note that with all the types present in @c detray::container_types
0045 /// it's really only @c vector_type that is actually used by @c detray::detector
0046 /// at this point.
0047 ///
0048 struct device_detector_container_types {
0049   /// Vector type to use in device code
0050   template <typename T>
0051   using vector_type = vecmem::device_vector<std::add_const_t<T>>;
0052 
0053 };  // struct device_detector_container_types
0054 
0055 }  // namespace details
0056 
0057 /// Base struct for the different detector types supported by the project.
0058 template <typename metadata_t>
0059 struct detector_traits {
0060   /// Metadata type of the detector.
0061   using metadata_type = metadata_t;
0062 
0063   /// Host type of the detector.
0064   using host = detray::detector<metadata_type, detray::host_container_types>;
0065   /// Device type of the detector.
0066   using device =
0067       detray::detector<metadata_type, details::device_detector_container_types>;
0068 
0069   /// Non-const view of the detector.
0070   using view = typename host::const_view_type;
0071 
0072   /// Buffer for a detector's data.
0073   using buffer = typename host::buffer_type;
0074 
0075 };  // struct default_detector
0076 
0077 template <typename T>
0078 concept is_detector_traits = requires {
0079   typename T::metadata_type;
0080   typename T::host;
0081   typename T::device;
0082   typename T::view;
0083   typename T::buffer;
0084 };
0085 
0086 /// Default detector (can contain any detector data)
0087 using default_detector =
0088     detector_traits<detray::default_metadata<traccc::default_algebra>>;
0089 
0090 /// ATLAS Inner Tracker (ITk) detector
0091 using itk_detector =
0092     detector_traits<detray::itk_metadata<traccc::default_algebra>>;
0093 
0094 /// Open Data Detector (ODD) detector
0095 using odd_detector =
0096     detector_traits<detray::odd_metadata<traccc::default_algebra>>;
0097 
0098 /// Detray telescope detector (test detector)
0099 using telescope_detector = detector_traits<
0100     detray::telescope_metadata<traccc::default_algebra, detray::rectangle2D>>;
0101 
0102 /// Detray toy detector (test detector)
0103 using toy_detector =
0104     detector_traits<detray::toy_metadata<traccc::default_algebra>>;
0105 
0106 /// Detray wire chamber detector (test detector)
0107 using wire_chamber =
0108     detector_traits<detray::wire_chamber_metadata<traccc::default_algebra>>;
0109 
0110 }  // namespace traccc