File indexing completed on 2026-07-26 08:22:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "traccc/definitions/common.hpp"
0010 #include "traccc/definitions/primitives.hpp"
0011 #include "traccc/seeding/grids/axis.hpp"
0012
0013
0014 #include <vecmem/memory/host_memory_resource.hpp>
0015
0016
0017 #include <gtest/gtest.h>
0018
0019
0020 #include <limits>
0021
0022
0023
0024 using namespace traccc;
0025
0026 GTEST_TEST(traccc_grid2, regular_closed_axis) {
0027 vecmem::host_memory_resource resource;
0028
0029 axis2::regular<> ten_bins{10u, -3.f, 7.f, resource};
0030
0031 EXPECT_EQ(ten_bins.bins(), 10u);
0032
0033 EXPECT_EQ(ten_bins.bin(-4.f), 0u);
0034 EXPECT_EQ(ten_bins.bin(2.5f), 5u);
0035 EXPECT_EQ(ten_bins.bin(8.f), 9u);
0036
0037
0038 std::array<unsigned int, 2> zone00 = {0u, 0u};
0039 std::array<unsigned int, 2> zone01 = {0u, 1u};
0040 std::array<unsigned int, 2> zone11 = {1u, 1u};
0041 std::array<unsigned int, 2> zone44 = {4u, 4u};
0042 std::array<unsigned int, 2> zone55 = {5u, 5u};
0043
0044 std::array<unsigned int, 2> expected_range = {5u, 5u};
0045 EXPECT_EQ(ten_bins.range(2.5f, zone00), expected_range);
0046 expected_range = {4u, 6u};
0047 EXPECT_EQ(ten_bins.range(2.5f, zone11), expected_range);
0048 expected_range = {5u, 6u};
0049 EXPECT_EQ(ten_bins.range(2.5f, zone01), expected_range);
0050 expected_range = {0u, 8u};
0051 EXPECT_EQ(ten_bins.range(1.5f, zone44), expected_range);
0052 expected_range = {3u, 9u};
0053 EXPECT_EQ(ten_bins.range(5.5f, zone55), expected_range);
0054
0055
0056 vecmem::vector<unsigned int> expected_zone = {5u};
0057 EXPECT_EQ(ten_bins.zone(2.5f, zone00), expected_zone);
0058 expected_zone = {5u, 6u};
0059 EXPECT_EQ(ten_bins.zone(2.5f, zone01), expected_zone);
0060 expected_zone = {4u, 5u, 6u};
0061 EXPECT_EQ(ten_bins.zone(2.5f, zone11), expected_zone);
0062 expected_zone = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u};
0063 EXPECT_EQ(ten_bins.zone(1.5f, zone44), expected_zone);
0064
0065
0066 std::array<scalar, 2> szone00 = {0.f, 0.f};
0067 std::array<scalar, 2> sepsilon = {0.01f, 0.01f};
0068 std::array<scalar, 2> szone11 = {1.f, 1.f};
0069 std::array<scalar, 2> szoneAll = {10.f, 10.f};
0070
0071 expected_range = {5u, 5u};
0072 EXPECT_EQ(ten_bins.range(2.5f, szone00), expected_range);
0073 EXPECT_EQ(ten_bins.range(2.5f, sepsilon), expected_range);
0074 expected_range = {4u, 6u};
0075 EXPECT_EQ(ten_bins.range(2.5f, szone11), expected_range);
0076 expected_range = {0u, 9u};
0077 EXPECT_EQ(ten_bins.range(2.5f, szoneAll), expected_range);
0078
0079
0080 expected_zone = {5u};
0081 EXPECT_EQ(ten_bins.zone(2.5f, szone00), expected_zone);
0082 EXPECT_EQ(ten_bins.zone(2.5f, sepsilon), expected_zone);
0083 expected_zone = {4u, 5u, 6u};
0084 EXPECT_EQ(ten_bins.zone(2.5f, szone11), expected_zone);
0085 expected_zone = {0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u};
0086 EXPECT_EQ(ten_bins.zone(2.5f, szoneAll), expected_zone);
0087 }
0088
0089 GTEST_TEST(traccc_grid2, regular_circular_axis) {
0090 vecmem::host_memory_resource resource;
0091
0092 constexpr scalar epsilon{10.f * std::numeric_limits<scalar>::epsilon()};
0093
0094
0095 scalar half_module{constant<scalar>::pi / 72.f};
0096 scalar phi_min = -constant<scalar>::pi + half_module;
0097 scalar phi_max = constant<scalar>::pi - half_module;
0098 axis2::circular<> full_pi = {36u, phi_min, phi_max, resource};
0099
0100 EXPECT_EQ(full_pi.bins(), 36u);
0101
0102 EXPECT_EQ(full_pi.bin(constant<scalar>::pi - epsilon), 0u);
0103 EXPECT_EQ(full_pi.bin(constant<scalar>::pi + epsilon), 0u);
0104 EXPECT_EQ(full_pi.bin(0u), 18u);
0105
0106 EXPECT_EQ(full_pi.remap(4, -1), 3u);
0107 EXPECT_EQ(full_pi.remap(4, 1), 5u);
0108 EXPECT_EQ(full_pi.remap(0, -1), 35u);
0109 EXPECT_EQ(full_pi.remap(0, -2), 34u);
0110 EXPECT_EQ(full_pi.remap(1, -1), 0u);
0111 EXPECT_EQ(full_pi.remap(35, 1), 0u);
0112
0113
0114 std::array<unsigned int, 2> zone00 = {0u, 0u};
0115 std::array<unsigned int, 2> zone01 = {0u, 1u};
0116 std::array<unsigned int, 2> zone11 = {1u, 1u};
0117 std::array<unsigned int, 2> zone22 = {2u, 2u};
0118
0119 std::array<unsigned int, 2> expected_range = {0u, 0u};
0120 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, zone00),
0121 expected_range);
0122 expected_range = {0u, 1u};
0123 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, zone01),
0124 expected_range);
0125 expected_range = {35u, 1u};
0126 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, zone11),
0127 expected_range);
0128 expected_range = {34u, 2u};
0129 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, zone22),
0130 expected_range);
0131
0132
0133 vecmem::vector<unsigned int> expected_zone = {34u, 35u, 0u, 1u, 2u};
0134 EXPECT_EQ(full_pi.zone(constant<scalar>::pi + epsilon, zone22),
0135 expected_zone);
0136
0137
0138 std::array<scalar, 2> szone00 = {0.f, 0.f};
0139 std::array<scalar, 2> szoneEpsilon = {0.5f * epsilon, 0.5f * epsilon};
0140 scalar bin_step =
0141 (full_pi.max - full_pi.min) / static_cast<scalar>(full_pi.bins());
0142 std::array<scalar, 2> szone22 = {2.f * bin_step, 2.f * bin_step};
0143
0144 expected_range = {0u, 0u};
0145 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, szone00),
0146 expected_range);
0147 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, szoneEpsilon),
0148 expected_range);
0149
0150 expected_range = {34u, 2u};
0151 EXPECT_EQ(full_pi.range(constant<scalar>::pi + epsilon, szone22),
0152 expected_range);
0153
0154 expected_zone = {34u, 35u, 0u, 1u, 2u};
0155 EXPECT_EQ(full_pi.zone(constant<scalar>::pi + epsilon, szone22),
0156 expected_zone);
0157 }
0158
0159 GTEST_TEST(traccc_grid2, irregular_closed_axis) {
0160 vecmem::host_memory_resource resource;
0161
0162 axis2::irregular<> nonreg({-3.f, 1.f, 2.f, 4.f, 8.f, 12.f}, resource);
0163
0164
0165
0166
0167 EXPECT_EQ(nonreg.bins(), 5u);
0168
0169 EXPECT_EQ(nonreg.bin(-2), 0u);
0170 EXPECT_EQ(nonreg.bin(10), 4u);
0171
0172 EXPECT_EQ(nonreg.bin(-4), 0u);
0173
0174 EXPECT_EQ(nonreg.bin(14), 4u);
0175
0176
0177 std::array<unsigned int, 2> zone01 = {0u, 1u};
0178 std::array<unsigned int, 2> zone11 = {1u, 1u};
0179 std::array<unsigned int, 2> zone22 = {2u, 2u};
0180
0181 std::array<unsigned int, 2> expected_range = {1u, 3u};
0182 EXPECT_EQ(nonreg.range(3.f, zone11), expected_range);
0183
0184 expected_range = {2u, 3u};
0185 EXPECT_EQ(nonreg.range(3.f, zone01), expected_range);
0186
0187 std::array<unsigned int, 2> expected_range_truncated_low = {0u, 1u};
0188 EXPECT_EQ(nonreg.range(0.f, zone11), expected_range_truncated_low);
0189
0190 std::array<unsigned int, 2> expected_range_truncated_high = {2u, 4u};
0191 EXPECT_EQ(nonreg.range(10.f, zone22), expected_range_truncated_high);
0192
0193
0194 vecmem::vector<unsigned int> expected_zone = {1u, 2u, 3u};
0195 EXPECT_EQ(nonreg.zone(3.f, zone11), expected_zone);
0196
0197 vecmem::vector<unsigned int> expected_zone_truncated_low = {0u, 1u};
0198 EXPECT_EQ(nonreg.zone(0.f, zone11), expected_zone_truncated_low);
0199
0200 vecmem::vector<unsigned int> expected_zone_truncated_high = {2u, 3u, 4u};
0201 EXPECT_EQ(nonreg.zone(10.f, zone22), expected_zone_truncated_high);
0202
0203
0204 std::array<scalar, 2> szone00 = {0.f, 0.f};
0205 std::array<scalar, 2> szone10 = {1.5f, 0.2f};
0206 expected_range = {2u, 2u};
0207 EXPECT_EQ(nonreg.range(3.f, szone00), expected_range);
0208
0209 expected_range = {1u, 2u};
0210 EXPECT_EQ(nonreg.range(3.f, szone10), expected_range);
0211
0212
0213 expected_zone = {2u};
0214 EXPECT_EQ(nonreg.zone(3.f, szone00), expected_zone);
0215
0216 expected_zone = {1u, 2u};
0217 EXPECT_EQ(nonreg.zone(3.f, szone10), expected_zone);
0218 }