File indexing completed on 2026-07-26 08:22:27
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "traccc/clusterization/measurement_creation_algorithm.hpp"
0010 #include "traccc/clusterization/sparse_ccl_algorithm.hpp"
0011 #include "traccc/io/data_format.hpp"
0012 #include "traccc/io/detector.hpp"
0013 #include "traccc/io/read_cells.hpp"
0014 #include "traccc/io/read_detector_description.hpp"
0015 #include "traccc/io/read_digitization_config.hpp"
0016 #include "traccc/io/utils.hpp"
0017 #include "traccc/utils/event_data.hpp"
0018
0019
0020 #include <vecmem/memory/host_memory_resource.hpp>
0021
0022
0023 #include <gtest/gtest.h>
0024
0025 TEST(event_data, acts_odd) {
0026
0027 using host_detector_type = traccc::default_detector::host;
0028
0029 vecmem::host_memory_resource resource;
0030
0031 const std::string path = "odd/geant4_1muon_100GeV";
0032 const std::string det_file = "geometries/odd/odd-detray_geometry_detray.json";
0033
0034
0035 detray::io::detector_reader_config reader_cfg{};
0036 reader_cfg.add_file(traccc::io::data_directory() + det_file);
0037
0038 auto [host_det, names] =
0039 detray::io::read_detector<host_detector_type>(resource, reader_cfg);
0040
0041 traccc::host_detector polymorphic_detector;
0042 polymorphic_detector.set<traccc::default_detector>(std::move(host_det));
0043
0044 {
0045
0046 traccc::event_data evt_data(path, 0u, resource, true, &polymorphic_detector,
0047 traccc::data_format::csv, false);
0048 EXPECT_EQ(evt_data.m_particle_map.size(), 4515u);
0049 EXPECT_EQ(evt_data.m_meas_to_ptc_map.size(), 58u);
0050 EXPECT_EQ(evt_data.m_meas_to_param_map.size(), 58u);
0051 }
0052 {
0053
0054 traccc::event_data evt_data(path, 0u, resource, true, &polymorphic_detector,
0055 traccc::data_format::csv, true);
0056 EXPECT_EQ(evt_data.m_particle_map.size(), 4515u);
0057 EXPECT_EQ(evt_data.m_meas_to_ptc_map.size(), 58u);
0058 EXPECT_EQ(evt_data.m_meas_to_param_map.size(), 58u);
0059 }
0060 }
0061
0062 TEST(event_data, mock_data) {
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089 using host_detector_type = traccc::default_detector::host;
0090
0091 vecmem::host_memory_resource resource;
0092
0093 const std::string path = TRACCC_TEST_IO_MOCK_DATA_DIR;
0094
0095
0096 const std::string det_file = "geometries/odd/odd-detray_geometry_detray.json";
0097 const std::string digi_file = "geometries/odd/odd-digi-geometric-config.json";
0098 const std::string cond_file = "geometries/odd/odd-digi-geometric-config.json";
0099
0100
0101 detray::io::detector_reader_config reader_cfg{};
0102 reader_cfg.add_file(traccc::io::data_directory() + det_file);
0103
0104 auto [host_det, names] =
0105 detray::io::read_detector<host_detector_type>(resource, reader_cfg);
0106
0107 traccc::host_detector polymorphic_detector;
0108 polymorphic_detector.set<traccc::default_detector>(std::move(host_det));
0109
0110 traccc::event_data evt_data(path, 0u, resource, true, &polymorphic_detector,
0111 traccc::data_format::csv, true);
0112
0113
0114 EXPECT_EQ(evt_data.m_meas_to_ptc_map.size(), 3u);
0115 EXPECT_EQ(evt_data.m_meas_to_param_map.size(), 3u);
0116
0117 EXPECT_EQ(evt_data.m_particle_map.size(), 3u);
0118 EXPECT_EQ(evt_data.m_ptc_to_meas_map.size(), 3u);
0119
0120 for (auto const& [meas, ptcs] : evt_data.m_meas_to_ptc_map) {
0121 EXPECT_EQ(ptcs.size(), 1);
0122
0123 for (auto const& [ptc, count] : ptcs) {
0124 if (ptc.particle_id == 4503599644147712) {
0125
0126 EXPECT_EQ(count, 3);
0127 } else if (ptc.particle_id == 4503599660924928) {
0128
0129 EXPECT_EQ(count, 4);
0130 } else if (ptc.particle_id == 4503599744811008) {
0131
0132 EXPECT_EQ(count, 3);
0133 }
0134 }
0135 }
0136
0137
0138
0139
0140 traccc::detector_design_description::host det_descr{resource};
0141 traccc::detector_conditions_description::host det_cond{resource};
0142 traccc::io::read_detector_description(det_descr, det_cond, det_file,
0143 digi_file, cond_file,
0144 traccc::data_format::json);
0145
0146 traccc::detector_design_description::data det_descr_data{
0147 vecmem::get_data(det_descr)};
0148 traccc::detector_conditions_description::data det_cond_data{
0149 vecmem::get_data(det_cond)};
0150
0151 traccc::host::sparse_ccl_algorithm cc(resource);
0152 traccc::host::measurement_creation_algorithm mc(resource);
0153
0154
0155 traccc::edm::silicon_cell_collection::host cells{resource};
0156 traccc::io::read_cells(cells, 0u, path, traccc::getDummyLogger().clone(),
0157 &det_cond, traccc::data_format::csv);
0158 const auto cells_view = vecmem::get_data(cells);
0159
0160 auto clusters = cc(cells_view, det_cond_data);
0161 auto measurements =
0162 mc(cells_view, vecmem::get_data(clusters), det_descr_data, det_cond_data);
0163
0164 evt_data.fill_cca_result(cells, clusters, measurements, det_cond);
0165
0166 EXPECT_EQ(evt_data.m_found_meas_to_ptc_map.size(), 2u);
0167 EXPECT_EQ(evt_data.m_found_meas_to_param_map.size(), 2u);
0168
0169 bool has_first_cluster = false;
0170 bool has_second_cluster = false;
0171
0172 bool has_first_particle = false;
0173 bool has_second_particle = false;
0174 bool has_third_particle = false;
0175
0176 for (auto const& [meas, ptcs] : evt_data.m_found_meas_to_ptc_map) {
0177
0178
0179 if (ptcs.size() == 2) {
0180 for (auto const& [ptc, count] : ptcs) {
0181 if (ptc.particle_id == 4503599644147712) {
0182
0183 EXPECT_EQ(count, 3);
0184 has_first_particle = true;
0185 } else if (ptc.particle_id == 4503599660924928) {
0186
0187 EXPECT_EQ(count, 4);
0188 has_second_particle = true;
0189 }
0190 }
0191
0192 has_first_cluster = true;
0193 }
0194
0195
0196 else if (ptcs.size() == 1) {
0197 for (auto const& [ptc, count] : ptcs) {
0198 if (ptc.particle_id == 4503599744811008) {
0199
0200 EXPECT_EQ(count, 3);
0201 has_third_particle = true;
0202 }
0203 }
0204
0205 has_second_cluster = true;
0206 }
0207 }
0208
0209 EXPECT_EQ(has_first_cluster, true);
0210 EXPECT_EQ(has_second_cluster, true);
0211 EXPECT_EQ(has_first_particle, true);
0212 EXPECT_EQ(has_second_particle, true);
0213 EXPECT_EQ(has_third_particle, true);
0214
0215 bool has_first_param = false;
0216 bool has_second_param = false;
0217
0218 for (auto const& [meas, param] : evt_data.m_found_meas_to_param_map) {
0219 if (meas.identifier() == 0u) {
0220 has_first_param = true;
0221 } else if (meas.identifier() == 1u) {
0222 has_second_param = true;
0223 }
0224 }
0225
0226 EXPECT_EQ(has_first_param, true);
0227 EXPECT_EQ(has_second_param, true);
0228 }