Project
Loading...
Searching...
No Matches
testMFTCATrackingConfiguration.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#define BOOST_TEST_MODULE MFT CA Tracking Configuration
13#define BOOST_TEST_DYN_LINK
15#include <boost/test/unit_test.hpp>
16
17#include <stdexcept>
18#include <string>
19#include <TClass.h>
20#include <TDataMember.h>
21
28
29using namespace o2::itsmft;
30using namespace o2::itsmft::tracking;
33
34namespace
35{
36struct FieldFixture {
37 FieldFixture() { o2::base::Propagator::initFieldFromGRP(0.f, 0.f, true, false); }
38};
39struct RestoreConfiguration {
40 ~RestoreConfiguration()
41 {
42 ConfigurableParam::updateFromString("MFTCATrackerParam.nIterations=-1;MFTCATrackerParam.startLayerMask[0]=0");
43 }
44};
45auto resolve(TrackingMode::Type mode)
46{
47 return o2::itsmft::tracking::test::referenceTrackingParameters(o2::detectors::DetID::MFT, mode);
48}
49} // namespace
50
52
53BOOST_AUTO_TEST_CASE(DefaultAsyncUsesAllPresetPasses)
54{
58 const auto async = resolve(TrackingMode::Async);
59 BOOST_CHECK_LT(async[2].TrackletMinPt, async[0].TrackletMinPt);
60 BOOST_CHECK_LT(async[2].MinTrackLength, async[0].MinTrackLength);
61}
62
63BOOST_FIXTURE_TEST_CASE(ParserPassLimitsAreExplicitAndChecked, RestoreConfiguration)
64{
65 for (const int count : {1, 2, 3}) {
66 ConfigurableParam::updateFromString("MFTCATrackerParam.nIterations=" + std::to_string(count));
68 }
69 for (const int count : {0, -2, 4}) {
70 ConfigurableParam::updateFromString("MFTCATrackerParam.nIterations=" + std::to_string(count));
71 BOOST_CHECK_THROW(resolve(TrackingMode::Async), std::invalid_argument);
72 }
73 ConfigurableParam::updateFromString("MFTCATrackerParam.nIterations=2");
74 BOOST_CHECK_THROW(resolve(TrackingMode::Sync), std::invalid_argument);
75 ConfigurableParam::updateFromString("MFTCATrackerParam.nIterations=-1");
77}
78
79BOOST_FIXTURE_TEST_CASE(ParserOuterLayerMasksReachTheResolvedRoadStarts, RestoreConfiguration)
80{
82 for (const auto mode : {TrackingMode::Sync, TrackingMode::Async}) {
83 for (const uint32_t mask : {uint32_t{1} << 8, uint32_t{1} << 9, (uint32_t{1} << 8) | (uint32_t{1} << 9)}) {
84 ConfigurableParam::updateFromString("MFTCATrackerParam.startLayerMask[0]=" + std::to_string(mask));
85 BOOST_CHECK_EQUAL(MFTParam::Instance().startLayerMask[0], mask);
86 const auto topology = deriveTraversalTopology(layout, resolve(mode).front());
87 BOOST_REQUIRE(topology.ok());
88 LayerMask actual;
89 for (const auto path : topology.topology->roadStartPaths) {
90 const auto edge = topology.topology->paths[path.value()].second;
91 actual.set(topology.topology->edges[edge.value()].to.value());
92 }
93 BOOST_CHECK_EQUAL(actual.value(), mask);
94 }
95 }
96 ConfigurableParam::updateFromString("MFTCATrackerParam.startLayerMask[0]=1024");
97 BOOST_CHECK_THROW(resolve(TrackingMode::Async), std::invalid_argument);
98 ConfigurableParam::updateFromString("MFTCATrackerParam.startLayerMask[0]=0");
99 BOOST_CHECK_EQUAL(resolve(TrackingMode::Sync).front().StartLayerMask.count(), MFTNLayers);
100 auto* dictionary = TClass::GetClass(typeid(MFTParam));
101 BOOST_REQUIRE(dictionary);
102 auto* member = dictionary->GetDataMember("startLayerMask");
103 BOOST_REQUIRE(member);
104 BOOST_CHECK_EQUAL(member->GetArrayDim(), 1);
105 BOOST_CHECK_EQUAL(member->GetMaxIndex(0), MaxIter);
106 BOOST_CHECK_EQUAL(member->GetUnitSize(), sizeof(uint32_t));
107}
108
109BOOST_AUTO_TEST_CASE(PublicMFTIndexBinsControlRadiusAndPhiLookup)
110{
111 ConfigurableParam::updateFromString("MFTCATrackerParam.LUTbinsU=32;MFTCATrackerParam.LUTbinsV=24");
112 const auto parameters = resolve(TrackingMode::Sync).front();
113 std::array<SurfaceChartRange, MFTNLayers> ranges;
114 ranges.fill({0.f, 16.f});
116 BOOST_REQUIRE(configureIndexTableUtils(index, parameters, MFTNLayers, SurfaceKind::Disk, ranges));
117 BOOST_CHECK(index.getCoordType() == IndexTableCoordType::PhiR);
118 BOOST_CHECK_EQUAL(index.getRowBinIndex(o2::constants::math::PI), 12);
119 BOOST_CHECK_EQUAL(index.getColBinIndex(0, 8.f), 16);
120 ConfigurableParam::updateFromString("MFTCATrackerParam.LUTbinsU=64;MFTCATrackerParam.LUTbinsV=128");
121}
122
123BOOST_AUTO_TEST_CASE(AsyncOnlyOverridesAreRejectedInOtherActiveModes)
124{
125 for (const auto* field : {"minTrackLgtIter[0]", "minPtIterLgt[0]"}) {
126 const std::string key = std::string{"MFTCATrackerParam."} + field;
129 for (const auto mode : {TrackingMode::Sync, TrackingMode::Cosmics}) {
130 BOOST_CHECK_EXCEPTION(resolve(mode), std::invalid_argument,
131 [&key](const auto& error) { return std::string{error.what()}.find(key.substr(0, key.find('['))) != std::string::npos; });
132 }
134 }
135}
Shared CA tracking configuration for ITS and MFT.
StringRef key
static int initFieldFromGRP(const o2::parameters::GRPMagField *grp, bool verbose=false)
static void updateFromString(std::string const &)
GLenum mode
Definition glcorearb.h:266
GLint GLsizei count
Definition glcorearb.h:399
GLsizeiptr size
Definition glcorearb.h:659
GLuint index
Definition glcorearb.h:781
GLsizei const GLchar *const * path
Definition glcorearb.h:3591
GLint GLuint mask
Definition glcorearb.h:291
std::vector< TrackingParameters > referenceTrackingParameters(o2::detectors::DetID::ID detector, TrackingMode::Type mode)
constexpr int MaxIter
Maximum CA iterations.
constexpr std::array< SurfaceDescriptor, MFTNLayers > kMFTSurfaces
constexpr int MFTNLayers
MFT CA half-disk layer count.
bool configureIndexTableUtils(o2::itsmft::IndexTableUtilsCore &destination, const DetectorParameters &params, int activeSurfaceCount, SurfaceKind kind, gsl::span< const SurfaceChartRange > chartRanges) noexcept
TraversalTopologyBuildResult deriveTraversalTopology(const DetectorConfiguration &layout, const o2::itsmft::IterationParameters &parameters)
TrackerParamConfig< o2::detectors::DetID::MFT > MFTCATrackerParam
BOOST_AUTO_TEST_CASE(Cluster_messageable)
std::string to_string(gsl::span< T, Size > span)
Definition common.h:52
void empty(int)
BOOST_FIXTURE_TEST_CASE(ParserPassLimitsAreExplicitAndChecked, RestoreConfiguration)
BOOST_TEST_GLOBAL_FIXTURE(FieldFixture)
BOOST_CHECK_NO_THROW(algorithm::merge(target, other))
BOOST_CHECK(tree)
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())