File indexing completed on 2025-08-06 08:11:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Material/GridSurfaceMaterial.hpp"
0012 #include "Acts/Material/Material.hpp"
0013 #include "Acts/Material/MaterialSlab.hpp"
0014 #include "Acts/Utilities/GridAxisGenerators.hpp"
0015 #include "Acts/Utilities/VectorHelpers.hpp"
0016
0017 #include <vector>
0018
0019
0020 class GlobalAccessX final : public Acts::GridAccess::IGlobalToGridLocal {
0021 public:
0022 std::array<Acts::ActsScalar, 1u> g2X(const Acts::Vector3& global) const {
0023 return {global.x()};
0024 }
0025 };
0026
0027 class LocalAccessX final : public Acts::GridAccess::IBoundToGridLocal {
0028 public:
0029 std::array<Acts::ActsScalar, 1u> l2X(const Acts::Vector2& local) const {
0030 return {local.x()};
0031 }
0032 };
0033
0034 class GlobalToZPhi final : public Acts::GridAccess::IGlobalToGridLocal {
0035 public:
0036 Acts::ActsScalar zShift = 0.;
0037
0038 GlobalToZPhi(Acts::ActsScalar shift) : zShift(shift) {}
0039
0040 std::array<Acts::ActsScalar, 2u> g2ZPhi(const Acts::Vector3& global) const {
0041 return {global.z() + zShift, Acts::VectorHelpers::phi(global)};
0042 }
0043 };
0044
0045
0046 class LocalToZPhi final : public Acts::GridAccess::IBoundToGridLocal {
0047 public:
0048 Acts::ActsScalar radius = 1.;
0049
0050 LocalToZPhi(Acts::ActsScalar r) : radius(r) {}
0051
0052 std::array<Acts::ActsScalar, 2u> l2ZPhi(const Acts::Vector2& local) const {
0053 return {local[1u], local[0u] / radius};
0054 }
0055 };
0056
0057 BOOST_AUTO_TEST_SUITE(Material)
0058
0059
0060 BOOST_AUTO_TEST_CASE(GridIndexedMaterial_invalid_bound2Grid_Unconnected) {
0061 std::vector<Acts::MaterialSlab> material;
0062
0063 using EqBound = Acts::GridAxisGenerators::EqBound;
0064 using EqGrid = EqBound::grid_type<std::size_t>;
0065 using Point = EqGrid::point_t;
0066
0067 EqBound eqBound{{0., 5.}, 5};
0068 EqGrid eqGrid{eqBound()};
0069
0070 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX;
0071
0072 auto globalX = std::make_unique<const GlobalAccessX>();
0073 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX;
0074 gToX.connect<&GlobalAccessX::g2X>(std::move(globalX));
0075
0076 BOOST_CHECK_THROW(
0077 auto ism = Acts::IndexedSurfaceMaterial<EqGrid>(
0078 std::move(eqGrid), Acts::IndexedMaterialAccessor{std::move(material)},
0079 std::move(bToX), std::move(gToX)),
0080 std::invalid_argument);
0081 }
0082
0083
0084 BOOST_AUTO_TEST_CASE(GridIndexedMaterial_invalid_global2Grid_Unconnected) {
0085 std::vector<Acts::MaterialSlab> material;
0086
0087 using EqBound = Acts::GridAxisGenerators::EqBound;
0088 using EqGrid = EqBound::grid_type<std::size_t>;
0089 using Point = EqGrid::point_t;
0090
0091 EqBound eqBound{{0., 5.}, 5};
0092 EqGrid eqGrid{eqBound()};
0093
0094 auto localX = std::make_unique<const LocalAccessX>();
0095 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX;
0096 bToX.connect<&LocalAccessX::l2X>(std::move(localX));
0097
0098 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX;
0099
0100 BOOST_CHECK_THROW(
0101 auto ism = Acts::IndexedSurfaceMaterial<EqGrid>(
0102 std::move(eqGrid), Acts::IndexedMaterialAccessor{std::move(material)},
0103 std::move(bToX), std::move(gToX)),
0104 std::invalid_argument);
0105 }
0106
0107
0108 BOOST_AUTO_TEST_CASE(GridIndexedMaterial1D) {
0109 std::vector<Acts::MaterialSlab> material;
0110 material.emplace_back(Acts::Material(), 0.0);
0111 material.emplace_back(
0112 Acts::Material::fromMolarDensity(1.0, 2.0, 3.0, 4.0, 5.0), 1.0);
0113 material.emplace_back(
0114 Acts::Material::fromMolarDensity(11.0, 12.0, 13.0, 14.0, 15.0), 2.0);
0115 material.emplace_back(
0116 Acts::Material::fromMolarDensity(21.0, 22.0, 23.0, 24.0, 25.0), 3.0);
0117
0118 using EqBound = Acts::GridAxisGenerators::EqBound;
0119 using EqGrid = EqBound::grid_type<std::size_t>;
0120 using Point = EqGrid::point_t;
0121
0122 EqBound eqBound{{0., 5.}, 5};
0123 EqGrid eqGrid{eqBound()};
0124
0125 eqGrid.atPosition(Point{0.5}) = 1u;
0126 eqGrid.atPosition(Point{1.5}) = 0u;
0127 eqGrid.atPosition(Point{2.5}) = 2u;
0128 eqGrid.atPosition(Point{3.5}) = 2u;
0129 eqGrid.atPosition(Point{4.5}) = 3u;
0130
0131 auto localX = std::make_unique<const LocalAccessX>();
0132 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX;
0133 bToX.connect<&LocalAccessX::l2X>(std::move(localX));
0134
0135 auto globalX = std::make_unique<const GlobalAccessX>();
0136 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX;
0137 gToX.connect<&GlobalAccessX::g2X>(std::move(globalX));
0138
0139 Acts::IndexedSurfaceMaterial<EqGrid> ism(
0140 std::move(eqGrid), Acts::IndexedMaterialAccessor{std::move(material)},
0141 std::move(bToX), std::move(gToX));
0142
0143
0144 Acts::Vector3 g0(0.5, 0., 0.);
0145 Acts::Vector3 g1(1.5, 0., 0.);
0146 Acts::Vector3 g2(2.5, 0., 0.);
0147 Acts::Vector3 g3(3.5, 0., 0.);
0148 Acts::Vector3 g4(4.5, 0., 0.);
0149
0150 const Acts::MaterialSlab& mg0 = ism.materialSlab(g0);
0151 const Acts::MaterialSlab& mg1 = ism.materialSlab(g1);
0152 const Acts::MaterialSlab& mg2 = ism.materialSlab(g2);
0153 const Acts::MaterialSlab& mg3 = ism.materialSlab(g3);
0154 const Acts::MaterialSlab& mg4 = ism.materialSlab(g4);
0155
0156 BOOST_CHECK_EQUAL(mg0.material().X0(), 1.);
0157 BOOST_CHECK(!mg1.material());
0158 BOOST_CHECK_EQUAL(mg2.material().X0(), 11.);
0159 BOOST_CHECK_EQUAL(mg3.material().X0(), 11.);
0160 BOOST_CHECK_EQUAL(mg4.material().X0(), 21.);
0161
0162
0163 Acts::Vector2 l0(0.5, 0.);
0164 Acts::Vector2 l1(1.5, 0.);
0165 Acts::Vector2 l2(2.5, 0.);
0166 Acts::Vector2 l3(3.5, 0.);
0167 Acts::Vector2 l4(4.5, 0.);
0168
0169 const Acts::MaterialSlab& ml0 = ism.materialSlab(l0);
0170 const Acts::MaterialSlab& ml1 = ism.materialSlab(l1);
0171 const Acts::MaterialSlab& ml2 = ism.materialSlab(l2);
0172 const Acts::MaterialSlab& ml3 = ism.materialSlab(l3);
0173 const Acts::MaterialSlab& ml4 = ism.materialSlab(l4);
0174
0175 BOOST_CHECK_EQUAL(ml0.material().X0(), 1.);
0176 BOOST_CHECK(!ml1.material());
0177 BOOST_CHECK_EQUAL(ml2.material().X0(), 11.);
0178 BOOST_CHECK_EQUAL(ml3.material().X0(), 11.);
0179 BOOST_CHECK_EQUAL(ml4.material().X0(), 21.);
0180
0181
0182 ism *= 2.;
0183 const Acts::MaterialSlab& sml0 = ism.materialSlab(l0);
0184 const Acts::MaterialSlab& sml1 = ism.materialSlab(l1);
0185 const Acts::MaterialSlab& sml2 = ism.materialSlab(l2);
0186 const Acts::MaterialSlab& sml3 = ism.materialSlab(l3);
0187 const Acts::MaterialSlab& sml4 = ism.materialSlab(l4);
0188
0189 BOOST_CHECK_EQUAL(sml0.thickness(), 2.);
0190 BOOST_CHECK(!sml1.material());
0191 BOOST_CHECK_EQUAL(sml2.thickness(), 4.);
0192 BOOST_CHECK_EQUAL(sml3.thickness(), 4.);
0193 BOOST_CHECK_EQUAL(sml4.thickness(), 6.);
0194 }
0195
0196
0197 BOOST_AUTO_TEST_CASE(GridIndexedMaterial2D) {
0198 std::vector<Acts::MaterialSlab> material;
0199 material.emplace_back(Acts::Material(), 1.0);
0200 material.emplace_back(
0201 Acts::Material::fromMolarDensity(1.0, 2.0, 3.0, 4.0, 5.0), 1.0);
0202 material.emplace_back(
0203 Acts::Material::fromMolarDensity(11.0, 12.0, 13.0, 14.0, 15.0), 1.0);
0204 material.emplace_back(
0205 Acts::Material::fromMolarDensity(21.0, 22.0, 23.0, 24.0, 25.0), 1.0);
0206
0207 using EqBoundEqClosed = Acts::GridAxisGenerators::EqBoundEqClosed;
0208 using EqEqGrid = EqBoundEqClosed::grid_type<std::size_t>;
0209 using Point = EqEqGrid::point_t;
0210
0211 EqBoundEqClosed eqeqBound{{-1., 1.}, 2, {-M_PI, M_PI}, 4};
0212 EqEqGrid eqeqGrid{eqeqBound()};
0213
0214 eqeqGrid.atPosition(Point{-0.5, -M_PI * 0.75}) = 1u;
0215 eqeqGrid.atPosition(Point{-0.5, -M_PI * 0.25}) = 1u;
0216 eqeqGrid.atPosition(Point{-0.5, M_PI * 0.25}) = 0u;
0217 eqeqGrid.atPosition(Point{-0.5, M_PI * 0.75}) = 2u;
0218
0219 eqeqGrid.atPosition(Point{0.5, -M_PI * 0.75}) = 0u;
0220 eqeqGrid.atPosition(Point{0.5, -M_PI * 0.25}) = 3u;
0221 eqeqGrid.atPosition(Point{0.5, M_PI * 0.25}) = 3u;
0222 eqeqGrid.atPosition(Point{0.5, M_PI * 0.75}) = 0u;
0223
0224
0225 auto boundToGrid = std::make_unique<const LocalToZPhi>(20.);
0226 Acts::IndexedSurfaceMaterial<EqEqGrid>::BoundToGridLocalDelegate bToZPhi;
0227 bToZPhi.connect<&LocalToZPhi::l2ZPhi>(std::move(boundToGrid));
0228
0229
0230 auto globalToGrid = std::make_unique<const GlobalToZPhi>(10.);
0231 Acts::IndexedSurfaceMaterial<EqEqGrid>::GlobalToGridLocalDelegate gToZphi;
0232 gToZphi.connect<&GlobalToZPhi::g2ZPhi>(std::move(globalToGrid));
0233
0234
0235 Acts::IndexedSurfaceMaterial<EqEqGrid> ism(
0236 std::move(eqeqGrid), Acts::IndexedMaterialAccessor{std::move(material)},
0237 std::move(bToZPhi), std::move(gToZphi));
0238
0239
0240 Acts::Vector3 g0(-0.5, -0.5, -10.5);
0241 const Acts::MaterialSlab& mg0 = ism.materialSlab(g0);
0242 BOOST_CHECK_EQUAL(mg0.material().X0(), 1.);
0243
0244 Acts::Vector3 g1(0.5, -0.5, -11.5);
0245 const Acts::MaterialSlab& mg1 = ism.materialSlab(g1);
0246 BOOST_CHECK_EQUAL(mg1.material().X0(), 1.);
0247
0248 Acts::Vector3 g2(0.5, 0.5, -10.5);
0249 const Acts::MaterialSlab& mg2 = ism.materialSlab(g2);
0250 BOOST_CHECK(!mg2.material());
0251
0252 Acts::Vector3 g3(0.5, 0.5,
0253 -9.5);
0254 const Acts::MaterialSlab& mg3 = ism.materialSlab(g3);
0255 BOOST_CHECK_EQUAL(mg3.material().X0(), 21.);
0256 }
0257
0258
0259 BOOST_AUTO_TEST_CASE(GridGloballyIndexedMaterialNonShared) {
0260 auto material = std::make_shared<std::vector<Acts::MaterialSlab>>();
0261
0262 material->emplace_back(Acts::Material(), 0.0);
0263 material->emplace_back(
0264 Acts::Material::fromMolarDensity(1.0, 2.0, 3.0, 4.0, 5.0), 1.0);
0265 material->emplace_back(
0266 Acts::Material::fromMolarDensity(11.0, 12.0, 13.0, 14.0, 15.0), 2.0);
0267 material->emplace_back(
0268 Acts::Material::fromMolarDensity(21.0, 22.0, 23.0, 24.0, 25.0), 3.0);
0269 material->emplace_back(
0270 Acts::Material::fromMolarDensity(31.0, 22.0, 23.0, 24.0, 25.0), 4.0);
0271
0272 using EqBound = Acts::GridAxisGenerators::EqBound;
0273 using EqGrid = EqBound::grid_type<std::size_t>;
0274 using Point = EqGrid::point_t;
0275
0276 EqBound eqBound{{0., 5.}, 5};
0277 EqGrid eqGrid{eqBound()};
0278
0279 eqGrid.atPosition(Point{0.5}) = 1u;
0280 eqGrid.atPosition(Point{1.5}) = 0u;
0281 eqGrid.atPosition(Point{2.5}) = 2u;
0282 eqGrid.atPosition(Point{3.5}) = 2u;
0283 eqGrid.atPosition(Point{4.5}) = 3u;
0284
0285 auto localX = std::make_unique<const LocalAccessX>();
0286 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX;
0287 bToX.connect<&LocalAccessX::l2X>(std::move(localX));
0288
0289 auto globalX = std::make_unique<const GlobalAccessX>();
0290 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX;
0291 gToX.connect<&GlobalAccessX::g2X>(std::move(globalX));
0292
0293 Acts::GloballyIndexedSurfaceMaterial<EqGrid> ism(
0294 std::move(eqGrid), Acts::GloballyIndexedMaterialAccessor{material, false},
0295 std::move(bToX), std::move(gToX));
0296
0297
0298 Acts::Vector2 l0(0.5, 0.);
0299 Acts::Vector2 l1(1.5, 0.);
0300 Acts::Vector2 l2(2.5, 0.);
0301 Acts::Vector2 l3(3.5, 0.);
0302 Acts::Vector2 l4(4.5, 0.);
0303
0304 const Acts::MaterialSlab& ml0 = ism.materialSlab(l0);
0305 const Acts::MaterialSlab& ml1 = ism.materialSlab(l1);
0306 const Acts::MaterialSlab& ml2 = ism.materialSlab(l2);
0307 const Acts::MaterialSlab& ml3 = ism.materialSlab(l3);
0308 const Acts::MaterialSlab& ml4 = ism.materialSlab(l4);
0309
0310 BOOST_CHECK_EQUAL(ml0.material().X0(), 1.);
0311 BOOST_CHECK(!ml1.material());
0312 BOOST_CHECK_EQUAL(ml2.material().X0(), 11.);
0313 BOOST_CHECK_EQUAL(ml3.material().X0(), 11.);
0314 BOOST_CHECK_EQUAL(ml4.material().X0(), 21.);
0315
0316 EqBound eqBound1{{0., 5.}, 1};
0317 EqGrid eqGrid1{eqBound1()};
0318
0319 auto localX1 = std::make_unique<const LocalAccessX>();
0320 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX1;
0321 bToX1.connect<&LocalAccessX::l2X>(std::move(localX1));
0322
0323 auto globalX1 = std::make_unique<const GlobalAccessX>();
0324 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX1;
0325 gToX1.connect<&GlobalAccessX::g2X>(std::move(globalX1));
0326
0327 eqGrid1.atPosition(Point{2.5}) = 4u;
0328
0329 Acts::GloballyIndexedSurfaceMaterial<EqGrid> ism1(
0330 std::move(eqGrid1),
0331 Acts::GloballyIndexedMaterialAccessor{material, false}, std::move(bToX1),
0332 std::move(gToX1));
0333
0334 Acts::Vector2 l0g1(2.5, 0.);
0335 const Acts::MaterialSlab& ml0g1 = ism1.materialSlab(l0g1);
0336 BOOST_CHECK_EQUAL(ml0g1.material().X0(), 31.);
0337
0338
0339 ism1 *= 2.;
0340 const Acts::MaterialSlab& sml0g1 = ism1.materialSlab(l0g1);
0341 BOOST_CHECK_EQUAL(sml0g1.thickness(), 8.);
0342
0343
0344 const Acts::MaterialSlab& sml0 = ism.materialSlab(l0);
0345 BOOST_CHECK_EQUAL(sml0.thickness(), 1.);
0346 }
0347
0348
0349 BOOST_AUTO_TEST_CASE(GridGloballyIndexedMaterialShared) {
0350 auto material = std::make_shared<std::vector<Acts::MaterialSlab>>();
0351
0352 material->emplace_back(Acts::Material(), 0.0);
0353 material->emplace_back(
0354 Acts::Material::fromMolarDensity(1.0, 2.0, 3.0, 4.0, 5.0), 1.0);
0355
0356 using EqBound = Acts::GridAxisGenerators::EqBound;
0357 using EqGrid = EqBound::grid_type<std::size_t>;
0358 using Point = EqGrid::point_t;
0359
0360 EqBound eqBound0{{0., 5.}, 1};
0361 EqGrid eqGrid0{eqBound0()};
0362
0363 eqGrid0.atPosition(Point{2.5}) = 1u;
0364 auto localX0 = std::make_unique<const LocalAccessX>();
0365 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX0;
0366 bToX0.connect<&LocalAccessX::l2X>(std::move(localX0));
0367
0368 auto globalX0 = std::make_unique<const GlobalAccessX>();
0369 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX0;
0370 gToX0.connect<&GlobalAccessX::g2X>(std::move(globalX0));
0371
0372 Acts::GloballyIndexedSurfaceMaterial<EqGrid> ism0(
0373 std::move(eqGrid0), Acts::GloballyIndexedMaterialAccessor{material, true},
0374 std::move(bToX0), std::move(gToX0));
0375
0376 EqBound eqBound1{{0., 5.}, 1};
0377 EqGrid eqGrid1{eqBound1()};
0378
0379 eqGrid1.atPosition(Point{2.5}) = 1u;
0380 auto localX1 = std::make_unique<const LocalAccessX>();
0381 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX1;
0382 bToX1.connect<&LocalAccessX::l2X>(std::move(localX1));
0383
0384 auto globalX1 = std::make_unique<const GlobalAccessX>();
0385 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX1;
0386 gToX1.connect<&GlobalAccessX::g2X>(std::move(globalX1));
0387
0388 Acts::GloballyIndexedSurfaceMaterial<EqGrid> ism1(
0389 std::move(eqGrid1), Acts::GloballyIndexedMaterialAccessor{material, true},
0390 std::move(bToX1), std::move(gToX1));
0391
0392 Acts::Vector2 l0(2.5, 0.);
0393
0394
0395 const Acts::MaterialSlab& ml0 = ism0.materialSlab(l0);
0396 BOOST_CHECK_EQUAL(ml0.material().X0(), 1.);
0397
0398 const Acts::MaterialSlab& ml0g1 = ism1.materialSlab(l0);
0399 BOOST_CHECK_EQUAL(ml0g1.material().X0(), 1.);
0400
0401
0402 BOOST_CHECK_THROW(ism1 *= 2., std::invalid_argument);
0403 }
0404
0405
0406
0407
0408
0409 BOOST_AUTO_TEST_CASE(GridSurfaceMaterialTests) {
0410 using EqBound = Acts::GridAxisGenerators::EqBound;
0411 using EqGrid = EqBound::grid_type<Acts::MaterialSlab>;
0412 using Point = EqGrid::point_t;
0413
0414 EqBound eqBound{{0., 5.}, 5};
0415 EqGrid eqGrid{eqBound()};
0416
0417 eqGrid.atPosition(Point{0.5}) = Acts::MaterialSlab(Acts::Material(), 0.0);
0418 eqGrid.atPosition(Point{1.5}) = Acts::MaterialSlab(Acts::Material(), 1.0);
0419 eqGrid.atPosition(Point{2.5}) = Acts::MaterialSlab(Acts::Material(), 2.0);
0420 eqGrid.atPosition(Point{3.5}) = Acts::MaterialSlab(Acts::Material(), 3.0);
0421 eqGrid.atPosition(Point{4.5}) = Acts::MaterialSlab(Acts::Material(), 4.0);
0422
0423 auto localX = std::make_unique<const LocalAccessX>();
0424 Acts::IndexedSurfaceMaterial<EqGrid>::BoundToGridLocalDelegate bToX;
0425 bToX.connect<&LocalAccessX::l2X>(std::move(localX));
0426
0427 auto globalX = std::make_unique<const GlobalAccessX>();
0428 Acts::IndexedSurfaceMaterial<EqGrid>::GlobalToGridLocalDelegate gToX;
0429 gToX.connect<&GlobalAccessX::g2X>(std::move(globalX));
0430
0431 Acts::GridSurfaceMaterial<EqGrid> gsm(std::move(eqGrid),
0432 Acts::GridMaterialAccessor{},
0433 std::move(bToX), std::move(gToX));
0434
0435
0436 Acts::Vector3 g0(0.5, 0., 0.);
0437 Acts::Vector3 g1(1.5, 0., 0.);
0438 Acts::Vector3 g2(2.5, 0., 0.);
0439 Acts::Vector3 g3(3.5, 0., 0.);
0440 Acts::Vector3 g4(4.5, 0., 0.);
0441
0442 const Acts::MaterialSlab& mg0 = gsm.materialSlab(g0);
0443 const Acts::MaterialSlab& mg1 = gsm.materialSlab(g1);
0444 const Acts::MaterialSlab& mg2 = gsm.materialSlab(g2);
0445 const Acts::MaterialSlab& mg3 = gsm.materialSlab(g3);
0446 const Acts::MaterialSlab& mg4 = gsm.materialSlab(g4);
0447
0448 BOOST_CHECK_EQUAL(mg0.thickness(), 0.);
0449 BOOST_CHECK_EQUAL(mg1.thickness(), 1.);
0450 BOOST_CHECK_EQUAL(mg2.thickness(), 2.);
0451 BOOST_CHECK_EQUAL(mg3.thickness(), 3.);
0452 BOOST_CHECK_EQUAL(mg4.thickness(), 4.);
0453
0454
0455 Acts::Vector2 l0(0.5, 0.);
0456 Acts::Vector2 l1(1.5, 0.);
0457 Acts::Vector2 l2(2.5, 0.);
0458 Acts::Vector2 l3(3.5, 0.);
0459 Acts::Vector2 l4(4.5, 0.);
0460
0461 const Acts::MaterialSlab& ml0 = gsm.materialSlab(l0);
0462 const Acts::MaterialSlab& ml1 = gsm.materialSlab(l1);
0463 const Acts::MaterialSlab& ml2 = gsm.materialSlab(l2);
0464 const Acts::MaterialSlab& ml3 = gsm.materialSlab(l3);
0465 const Acts::MaterialSlab& ml4 = gsm.materialSlab(l4);
0466
0467 BOOST_CHECK_EQUAL(ml0.thickness(), 0.);
0468 BOOST_CHECK_EQUAL(ml1.thickness(), 1.);
0469 BOOST_CHECK_EQUAL(ml2.thickness(), 2.);
0470 BOOST_CHECK_EQUAL(ml3.thickness(), 3.);
0471 BOOST_CHECK_EQUAL(ml4.thickness(), 4.);
0472
0473
0474 gsm *= 2.;
0475
0476 const Acts::MaterialSlab& sml0 = gsm.materialSlab(l0);
0477 const Acts::MaterialSlab& sml1 = gsm.materialSlab(l1);
0478 const Acts::MaterialSlab& sml2 = gsm.materialSlab(l2);
0479 const Acts::MaterialSlab& sml3 = gsm.materialSlab(l3);
0480 const Acts::MaterialSlab& sml4 = gsm.materialSlab(l4);
0481
0482 BOOST_CHECK_EQUAL(sml0.thickness(), 0.);
0483 BOOST_CHECK_EQUAL(sml1.thickness(), 2.);
0484 BOOST_CHECK_EQUAL(sml2.thickness(), 4.);
0485 BOOST_CHECK_EQUAL(sml3.thickness(), 6.);
0486 BOOST_CHECK_EQUAL(sml4.thickness(), 8.);
0487 }
0488
0489 BOOST_AUTO_TEST_SUITE_END()