File indexing completed on 2026-09-29 08:24:08
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Surfaces/CylinderSurface.hpp"
0012 #include "Acts/Surfaces/DiscSurface.hpp"
0013 #include "Acts/Surfaces/RadialBounds.hpp"
0014 #include "Acts/Utilities/MultiAxisSpec.hpp"
0015 #include "ActsPlugins/DD4hep/DD4hepMaterialHelpers.hpp"
0016
0017 #include <numbers>
0018
0019 using namespace Acts;
0020 using namespace ActsPlugins;
0021
0022 BOOST_AUTO_TEST_CASE(DD4hepProtoMaterialDefersRanges) {
0023 dd4hep::rec::VariantParameters params;
0024
0025
0026 params.variantParameters.emplace("material_binPhi", 8);
0027 params.variantParameters.emplace("material_binZ", 3);
0028 params.variantParameters.emplace("material_binR", 4);
0029
0030 const auto cylinderMaterial = createProtoMaterial(
0031 params, "material", {{"binPhi", closed}, {"binZ", open}});
0032 const auto discMaterial = createProtoMaterial(
0033 params, "material", {{"binPhi", closed}, {"binR", open}});
0034 for (const auto& material : {cylinderMaterial, discMaterial}) {
0035 BOOST_CHECK(material->binning().isDeferred());
0036 for (const auto& axis : material->binning().axisSpecs()) {
0037 BOOST_CHECK(!axis.asEquidistant().min);
0038 BOOST_CHECK(!axis.asEquidistant().max);
0039 }
0040 }
0041 BOOST_CHECK(cylinderMaterial->binning().axisSpec(0).direction() ==
0042 AxisDirection::AxisRPhi);
0043 BOOST_CHECK(discMaterial->binning().axisSpec(0).direction() ==
0044 AxisDirection::AxisPhi);
0045
0046 const auto cylinder =
0047 Surface::makeShared<CylinderSurface>(Transform3::Identity(), 30., 100.);
0048 const auto cylinderAxes =
0049 resolveMultiAxis(cylinderMaterial->binning(), *cylinder);
0050 BOOST_CHECK_EQUAL(cylinderAxes->getAxis(0).getNBins(), 8);
0051 BOOST_CHECK_CLOSE(cylinderAxes->getAxis(0).getMax(), 30. * std::numbers::pi,
0052 1e-10);
0053 BOOST_CHECK_EQUAL(cylinderAxes->getAxis(1).getNBins(), 3);
0054 BOOST_CHECK_EQUAL(cylinderAxes->getAxis(1).getMin(), -100.);
0055 BOOST_CHECK_EQUAL(cylinderAxes->getAxis(1).getMax(), 100.);
0056
0057 const auto disc = Surface::makeShared<DiscSurface>(
0058 Transform3::Identity(), std::make_shared<RadialBounds>(10., 50.));
0059 const auto discAxes = resolveMultiAxis(discMaterial->binning(), *disc);
0060 BOOST_CHECK_EQUAL(discAxes->getAxis(0).getNBins(), 4);
0061 BOOST_CHECK_EQUAL(discAxes->getAxis(0).getMin(), 10.);
0062 BOOST_CHECK_EQUAL(discAxes->getAxis(0).getMax(), 50.);
0063 BOOST_CHECK_EQUAL(discAxes->getAxis(1).getNBins(), 8);
0064
0065 params.get<int>("material_binZ") = 0;
0066 const auto homogeneousZ = createProtoMaterial(
0067 params, "material", {{"binPhi", closed}, {"binZ", open}});
0068 BOOST_CHECK_EQUAL(homogeneousZ->binning().axisSpec(1).asEquidistant().nBins,
0069 1);
0070 }