Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2023-2026 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/definitions/common.hpp"
0010 #include "traccc/edm/measurement_collection.hpp"
0011 #include "traccc/edm/spacepoint_collection.hpp"
0012 #include "traccc/seeding/seeding_algorithm.hpp"
0013 #include "traccc/seeding/track_params_estimation.hpp"
0014 
0015 // VecMem include(s).
0016 #include <vecmem/memory/host_memory_resource.hpp>
0017 
0018 // GTest include(s).
0019 #include <gtest/gtest.h>
0020 
0021 using namespace traccc;
0022 
0023 namespace {
0024 
0025 // Memory resource used by the EDM.
0026 vecmem::host_memory_resource host_mr;
0027 
0028 // Set B field
0029 static constexpr vector3 B{0.f * unit<scalar>::T, 0.f * unit<scalar>::T,
0030                            2.f * unit<scalar>::T};
0031 
0032 }  // namespace
0033 
0034 // Seeding with two muons
0035 TEST(seeding, case1) {
0036   // Config objects
0037   traccc::seedfinder_config finder_config;
0038   traccc::spacepoint_grid_config grid_config(finder_config);
0039   traccc::seedfilter_config filter_config;
0040 
0041   // Adjust parameters
0042   finder_config.deltaRMax = 100.f * unit<float>::mm;
0043   finder_config.maxPtScattering = 0.5f * unit<float>::GeV;
0044   traccc::host::seeding_algorithm sa(finder_config, grid_config, filter_config,
0045                                      host_mr);
0046 
0047   edm::measurement_collection::host measurements(host_mr);
0048   edm::spacepoint_collection::host spacepoints{host_mr};
0049 
0050   // Spacepoints from 16.62 GeV muon
0051   measurements.resize(5);
0052   spacepoints.reserve(5);
0053   spacepoints.push_back(
0054       {0,
0055        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0056        {36.6706f, 10.6472f, 104.131f},
0057        0.f,
0058        0.f});
0059   spacepoints.push_back(
0060       {1,
0061        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0062        {94.2191f, 29.6699f, 113.628f},
0063        0.f,
0064        0.f});
0065   spacepoints.push_back(
0066       {2,
0067        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0068        {149.805f, 47.9518f, 122.979f},
0069        0.f,
0070        0.f});
0071   spacepoints.push_back(
0072       {3,
0073        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0074        {218.514f, 70.3049f, 134.029f},
0075        0.f,
0076        0.f});
0077   spacepoints.push_back(
0078       {4,
0079        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0080        {275.359f, 88.668f, 143.378f},
0081        0.f,
0082        0.f});
0083 
0084   // Run seeding
0085   auto seeds = sa(vecmem::get_data(spacepoints));
0086 
0087   // The number of seeds should be eqaul to one
0088   ASSERT_EQ(seeds.size(), 1u);
0089 
0090   traccc::track_params_estimation_config track_params_estimation_config;
0091   traccc::host::track_params_estimation tp(track_params_estimation_config,
0092                                            host_mr);
0093 
0094   auto bound_params =
0095       tp(vecmem::get_data(measurements), vecmem::get_data(spacepoints),
0096          vecmem::get_data(seeds), B);
0097 
0098   // The number of bound track parameters should be eqaul to one
0099   ASSERT_EQ(bound_params.size(), 1u);
0100 
0101   // Make sure that we have reasonable estimation on momentum
0102   /* Currently disabled
0103   EXPECT_NEAR(bound_params[0].p(), 16.62 * unit<scalar>::GeV,
0104               0.1 * unit<scalar>::GeV);
0105   */
0106 }
0107 
0108 TEST(seeding, case2) {
0109   // Config objects
0110   traccc::seedfinder_config finder_config;
0111   traccc::spacepoint_grid_config grid_config(finder_config);
0112   traccc::seedfilter_config filter_config;
0113 
0114   // Adjust parameters
0115   finder_config.deltaRMax = 100.f * unit<float>::mm;
0116   finder_config.maxPtScattering = 0.5f * unit<float>::GeV;
0117   traccc::host::seeding_algorithm sa(finder_config, grid_config, filter_config,
0118                                      host_mr);
0119 
0120   edm::measurement_collection::host measurements(host_mr);
0121   edm::spacepoint_collection::host spacepoints{host_mr};
0122 
0123   // Spacepoints from 1.85 GeV muon
0124   measurements.resize(5);
0125   spacepoints.reserve(5);
0126   spacepoints.push_back(
0127       {0,
0128        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0129        {36.301f, 13.1197f, 106.83f},
0130        0.f,
0131        0.f});
0132   spacepoints.push_back(
0133       {1,
0134        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0135        {93.9366f, 33.7101f, 120.978f},
0136        0.f,
0137        0.f});
0138   spacepoints.push_back(
0139       {2,
0140        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0141        {149.192f, 52.0562f, 134.678f},
0142        0.f,
0143        0.f});
0144   spacepoints.push_back(
0145       {3,
0146        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0147        {218.398f, 73.1025f, 151.979f},
0148        0.f,
0149        0.f});
0150   spacepoints.push_back(
0151       {4,
0152        traccc::edm::spacepoint_collection::host::INVALID_MEASUREMENT_INDEX,
0153        {275.322f, 89.0663f, 166.229f},
0154        0.f,
0155        0.f});
0156 
0157   // Run seeding
0158   auto seeds = sa(vecmem::get_data(spacepoints));
0159 
0160   // The number of seeds should be eqaul to one
0161   ASSERT_EQ(seeds.size(), 1u);
0162 
0163   traccc::track_params_estimation_config track_params_estimation_config;
0164   traccc::host::track_params_estimation tp(track_params_estimation_config,
0165                                            host_mr);
0166 
0167   auto bound_params =
0168       tp(vecmem::get_data(measurements), vecmem::get_data(spacepoints),
0169          vecmem::get_data(seeds), B);
0170 
0171   // The number of bound track parameters should be eqaul to one
0172   ASSERT_EQ(bound_params.size(), 1u);
0173 
0174   // Make sure that we have reasonable estimation on momentum
0175   /* Currently disabled
0176   EXPECT_NEAR(bound_params[0].p(), 1.85 * unit<scalar>::GeV,
0177               0.1 * unit<scalar>::GeV);
0178   */
0179 }