Skip to content

Commit 0ff07ee

Browse files
committed
Build detectors with custom metadata
1 parent a0fcb78 commit 0ff07ee

File tree

10 files changed

+90
-12
lines changed

10 files changed

+90
-12
lines changed

CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ endif()
8787
# In order to generate specializations for our kernels, we need to have both
8888
# a working Python interpreter, and a list of supported detectors.
8989
find_package (Python COMPONENTS Interpreter REQUIRED)
90-
set(TRACCC_SUPPORTED_DETECTORS "default_detector;telescope_detector;toy_detector")
90+
# The detector types supported by this build of traccc.
91+
set( TRACCC_SUPPORTED_DETECTORS
92+
"default_detector;odd_detector;telescope_detector"
93+
CACHE STRING
94+
"Semicolon-separated list of detector types to support in this build" )
9195

9296
# Set up build profiling for the project.
9397
if( CTEST_USE_LAUNCHERS )

core/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,17 @@ target_compile_definitions( traccc_core
148148
# Set the algebra-plugins plugin to use.
149149
message(STATUS "Building with plugin type: " ${TRACCC_ALGEBRA_PLUGINS})
150150
target_compile_definitions(traccc_core PUBLIC ALGEBRA_PLUGINS_INCLUDE_${TRACCC_ALGEBRA_PLUGINS})
151+
152+
string(REPLACE ";" ", " TRACCC_DETECTOR_TYPES "${TRACCC_SUPPORTED_DETECTORS}")
153+
message(STATUS "Building with detector types: ${TRACCC_DETECTOR_TYPES}")
154+
configure_file(
155+
"${CMAKE_CURRENT_SOURCE_DIR}/include/traccc/geometry/detector_type_list.hpp.in"
156+
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/traccc/geometry/detector_type_list.hpp"
157+
@ONLY)
158+
159+
target_include_directories(traccc_core
160+
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include> )
161+
162+
install(
163+
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/include/"
164+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" )

core/include/traccc/geometry/detector.hpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
// Detray include(s).
1414
#include <detray/core/detector.hpp>
1515
#include <detray/detectors/default_metadata.hpp>
16+
#include <detray/detectors/itk_metadata.hpp>
17+
#include <detray/detectors/odd_metadata.hpp>
1618
#include <detray/detectors/telescope_metadata.hpp>
1719
#include <detray/detectors/toy_metadata.hpp>
1820

@@ -75,17 +77,24 @@ concept is_detector_traits = requires {
7577
typename T::buffer;
7678
};
7779

78-
/// Default detector (also used for ODD)
80+
/// Default detector (can contain any detector data)
7981
using default_detector =
8082
detector_traits<detray::default_metadata<traccc::default_algebra>>;
8183

82-
/// Telescope detector
84+
/// ATLAS Inner Tracker (ITk) detector
85+
using itk_detector =
86+
detector_traits<detray::itk_metadata<traccc::default_algebra>>;
87+
88+
/// Open Data Detector (ODD) detector
89+
using odd_detector =
90+
detector_traits<detray::odd_metadata<traccc::default_algebra>>;
91+
92+
/// Detray telescope detector (test detector)
8393
using telescope_detector = detector_traits<
8494
detray::telescope_metadata<traccc::default_algebra, detray::rectangle2D>>;
8595

86-
/// Toy detector
96+
/// Detray toy detector (test detector)
8797
using toy_detector =
8898
detector_traits<detray::toy_metadata<traccc::default_algebra>>;
8999

90-
using detector_type_list = std::tuple<default_detector, telescope_detector>;
91100
} // namespace traccc

core/include/traccc/geometry/detector_buffer.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
// Project include(s).
1111
#include "traccc/geometry/detector.hpp"
12+
#include "traccc/geometry/detector_type_list.hpp"
1213
#include "traccc/geometry/host_detector.hpp"
1314
#include "traccc/geometry/move_only_any.hpp"
1415

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/** TRACCC library, part of the ACTS project (R&D line)
2+
*
3+
* (c) 2024-2025 CERN for the benefit of the ACTS project
4+
*
5+
* Mozilla Public License Version 2.0
6+
*/
7+
8+
#pragma once
9+
10+
// Local include(s).
11+
#include "traccc/geometry/detector.hpp"
12+
13+
// System include(s).
14+
#include <tuple>
15+
16+
namespace traccc {
17+
18+
/// Detector types supported by the built libraries.
19+
using detector_type_list = std::tuple<@TRACCC_DETECTOR_TYPES@>;
20+
21+
} // namespace traccc

core/include/traccc/geometry/host_detector.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/** TRACCC library, part of the ACTS project (R&D line)
22
*
3-
* (c) 2024 CERN for the benefit of the ACTS project
3+
* (c) 2025 CERN for the benefit of the ACTS project
44
*
55
* Mozilla Public License Version 2.0
66
*/
@@ -9,6 +9,7 @@
99

1010
// Project include(s).
1111
#include "traccc/geometry/detector.hpp"
12+
#include "traccc/geometry/detector_type_list.hpp"
1213
#include "traccc/geometry/move_only_any.hpp"
1314

1415
// Detray include(s).

device/sycl/src/finding/combinatorial_kalman_filter_algorithm.sycl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
// Project include(s).
1616
#include "traccc/bfield/magnetic_field_types.hpp"
17+
#include "traccc/geometry/detector_type_list.hpp"
1718
#include "traccc/utils/detector_buffer_bfield_visitor.hpp"
1819
#include "traccc/utils/propagation.hpp"
1920

device/sycl/src/utils/detector_types.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace traccc::sycl {
1818
*/
1919
struct default_detector_kernel_tag {};
2020
struct telescope_detector_kernel_tag {};
21+
struct odd_detector_kernel_tag {};
22+
struct itk_detector_kernel_tag {};
2123

2224
template <typename T>
2325
struct detector_tag_selector {};
@@ -32,6 +34,16 @@ struct detector_tag_selector<telescope_detector> {
3234
using type = telescope_detector_kernel_tag;
3335
};
3436

37+
template <>
38+
struct detector_tag_selector<odd_detector> {
39+
using type = odd_detector_kernel_tag;
40+
};
41+
42+
template <>
43+
struct detector_tag_selector<itk_detector> {
44+
using type = itk_detector_kernel_tag;
45+
};
46+
3547
template <typename T>
3648
using detector_tag_selector_t = typename detector_tag_selector<T>::type;
3749

io/src/read_detector.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ void read_detector(host_detector& detector, vecmem::memory_resource& mr,
5959

6060
// TODO: Update this
6161
if (header.detector == "Cylindrical detector from DD4hep blueprint") {
62-
::read_detector<default_detector>(detector, mr, geometry_file,
63-
material_file, grid_file);
62+
::read_detector<odd_detector>(detector, mr, geometry_file,
63+
material_file, grid_file);
64+
} else if (header.detector == "detray_detector") {
65+
::read_detector<itk_detector>(detector, mr, geometry_file,
66+
material_file, grid_file);
6467
} else {
6568
// TODO: Warning here
6669
::read_detector<default_detector>(detector, mr, geometry_file,

io/src/read_detector_description.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
// Detray include(s)
1717
#include <detray/geometry/tracking_surface.hpp>
18+
#include <detray/io/frontend/impl/json_readers.hpp>
1819
#include <detray/utils/type_registry.hpp>
1920

2021
// VecMem include(s).
@@ -49,8 +50,8 @@ void read_json_dd_impl(traccc::silicon_detector_description::host& dd,
4950
const traccc::digitization_config& digi)
5051
requires(traccc::is_detector_traits<detector_traits_t>)
5152
{
52-
const traccc::default_detector::host& detector_host =
53-
detector.as<traccc::default_detector>();
53+
const typename detector_traits_t::host& detector_host =
54+
detector.as<detector_traits_t>();
5455

5556
// Iterate over the surfaces of the detector.
5657
const typename detector_traits_t::host::surface_lookup_container& surfaces =
@@ -118,8 +119,19 @@ void read_json_dd(traccc::silicon_detector_description::host& dd,
118119
traccc::host_detector detector;
119120
traccc::io::read_detector(detector, mr, geometry_file);
120121

121-
read_json_dd_impl<traccc::default_detector>(dd, detector, digi);
122-
// detector_buffer_visitor
122+
// TODO: Implement detector visitor!
123+
// Peek at the header to determine the kind of detector that is needed
124+
const auto header = detray::io::detail::deserialize_json_header(
125+
traccc::io::get_absolute_path(geometry_file));
126+
127+
if (header.detector == "Cylindrical detector from DD4hep blueprint") {
128+
read_json_dd_impl<traccc::odd_detector>(dd, detector, digi);
129+
} else if (header.detector == "detray_detector") {
130+
read_json_dd_impl<traccc::itk_detector>(dd, detector, digi);
131+
} else {
132+
// TODO: Warning here
133+
read_json_dd_impl<traccc::default_detector>(dd, detector, digi);
134+
}
123135
}
124136

125137
} // namespace

0 commit comments

Comments
 (0)