File indexing completed on 2025-08-06 08:11:18
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/unit_test.hpp>
0011
0012 #include "Acts/Detector/ProtoBinning.hpp"
0013 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0014 #include "Acts/Utilities/BinUtility.hpp"
0015
0016 using namespace Acts::Experimental;
0017
0018 BOOST_AUTO_TEST_SUITE(Detector)
0019
0020 BOOST_AUTO_TEST_CASE(ProtoBinningPlaceHolderEquidistant) {
0021
0022 auto peq =
0023 ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, 5u);
0024 BOOST_CHECK_EQUAL(peq.bins(), 5u);
0025 }
0026
0027 BOOST_AUTO_TEST_CASE(ProtoBinningEquidistant) {
0028
0029 BOOST_CHECK_THROW(
0030 ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, 15., 20.,
0031 0),
0032 std::invalid_argument);
0033
0034
0035 BOOST_CHECK_THROW(
0036 ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, 150., 20.,
0037 10),
0038 std::invalid_argument);
0039
0040
0041 auto eq = ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, 0.,
0042 10., 5u);
0043
0044 std::vector<Acts::ActsScalar> reference = {0., 2., 4., 6., 8., 10.};
0045 BOOST_CHECK_EQUAL(eq.bins(), 5u);
0046 BOOST_CHECK_EQUAL(eq.binValue, Acts::binX);
0047 BOOST_CHECK(eq.axisType == Acts::detail::AxisType::Equidistant);
0048 BOOST_CHECK(eq.boundaryType == Acts::detail::AxisBoundaryType::Bound);
0049 BOOST_CHECK_EQUAL_COLLECTIONS(eq.edges.begin(), eq.edges.end(),
0050 reference.begin(), reference.end());
0051 }
0052
0053 BOOST_AUTO_TEST_CASE(ProtoBinningVariable) {
0054
0055 std::vector<Acts::ActsScalar> iedges = {12.};
0056 BOOST_CHECK_THROW(
0057 ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, iedges),
0058 std::invalid_argument);
0059
0060
0061 std::vector<Acts::ActsScalar> varEdges = {0., 12., 13., 15., 20.};
0062 auto var =
0063 ProtoBinning(Acts::binX, Acts::detail::AxisBoundaryType::Bound, varEdges);
0064
0065 BOOST_CHECK_EQUAL(var.bins(), 4u);
0066 BOOST_CHECK_EQUAL(var.binValue, Acts::binX);
0067 BOOST_CHECK(var.axisType == Acts::detail::AxisType::Variable);
0068 BOOST_CHECK(var.boundaryType == Acts::detail::AxisBoundaryType::Bound);
0069 BOOST_CHECK_EQUAL_COLLECTIONS(var.edges.begin(), var.edges.end(),
0070 varEdges.begin(), varEdges.end());
0071 }
0072
0073 BOOST_AUTO_TEST_CASE(BinningDescriptionFromAndToBinUtility) {
0074
0075 Acts::BinUtility bUtility(5u, 0., 10., Acts::open, Acts::binR);
0076 std::vector<float> edges = {-M_PI, 0.1, M_PI};
0077 bUtility += Acts::BinUtility(edges, Acts::closed, Acts::binPhi);
0078
0079 auto bDescription = BinningDescription::fromBinUtility(bUtility);
0080
0081 BOOST_CHECK_EQUAL(bDescription.binning.size(), 2u);
0082
0083
0084 BOOST_CHECK_EQUAL(bDescription.binning[0].bins(), 5u);
0085 BOOST_CHECK_EQUAL(bDescription.binning[0].binValue, Acts::binR);
0086 BOOST_CHECK(bDescription.binning[0].axisType ==
0087 Acts::detail::AxisType::Equidistant);
0088 BOOST_CHECK(bDescription.binning[0].boundaryType ==
0089 Acts::detail::AxisBoundaryType::Bound);
0090 BOOST_CHECK_EQUAL(bDescription.binning[0].edges.size(), 6u);
0091
0092
0093 BOOST_CHECK_EQUAL(bDescription.binning[1].bins(), 2u);
0094 BOOST_CHECK_EQUAL(bDescription.binning[1].binValue, Acts::binPhi);
0095 BOOST_CHECK(bDescription.binning[1].axisType ==
0096 Acts::detail::AxisType::Variable);
0097 BOOST_CHECK(bDescription.binning[1].boundaryType ==
0098 Acts::detail::AxisBoundaryType::Closed);
0099 BOOST_CHECK_EQUAL(bDescription.binning[1].edges.size(), 3u);
0100
0101
0102 auto binUtility = bDescription.toBinUtility();
0103 BOOST_CHECK_EQUAL(binUtility.binningData().size(), 2u);
0104 BOOST_CHECK_EQUAL(binUtility.binningData()[0].bins(), 5u);
0105 BOOST_CHECK_EQUAL(binUtility.binningData()[1].bins(), 2u);
0106 BOOST_CHECK_EQUAL(binUtility.binningData()[1].boundaries().size(), 3u);
0107 CHECK_CLOSE_ABS(binUtility.binningData()[1].boundaries()[0], -M_PI, 1e-5);
0108 CHECK_CLOSE_ABS(binUtility.binningData()[1].boundaries()[1], 0.1, 1e-4);
0109 }
0110
0111 BOOST_AUTO_TEST_SUITE_END()