Skip to content

Commit 3c728a3

Browse files
committed
Use legacy timing classes
1 parent 4b93107 commit 3c728a3

21 files changed

Lines changed: 177 additions & 652 deletions

‎Detectors/ITSMFT/ITS/workflow-ca/include/ITSCAWorkflow/TruthSeeding.h‎

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,46 @@
1515
#include <algorithm>
1616
#include <limits>
1717
#include <optional>
18+
#include <gsl/span>
1819

1920
#include "CommonDataFormat/InteractionRecord.h"
2021
#include "DataFormatsITS/TimeEstBC.h"
21-
#include "ITSMFTTracking/SurfaceTiming.h"
22+
#include "DataFormatsITSMFT/ROFRecord.h"
23+
#include "ITSMFTTracking/ROFLookupTables.h"
2224

2325
namespace o2::its::ca
2426
{
27+
// Keep the readout window anchored to the actual input ROF records, including
28+
// sparse/triggered input, while using the legacy interval and timing types.
29+
inline std::optional<o2::its::TimeEstBC> truthSeedingWindow(
30+
gsl::span<const o2::itsmft::ROFRecord> rofs, const o2::InteractionRecord& origin,
31+
const o2::its::LayerTiming& timing) noexcept
32+
{
33+
if (rofs.empty() || timing.mROFLength == 0) {
34+
return std::nullopt;
35+
}
36+
const int64_t offset = static_cast<int64_t>(timing.mROFDelay) + timing.mROFBias;
37+
const int64_t begin = std::max(int64_t{0}, rofs.front().getBCData().differenceInBC(origin) + offset - timing.mROFAddTimeErr);
38+
const int64_t end = rofs.back().getBCData().differenceInBC(origin) + offset + timing.mROFLength + timing.mROFAddTimeErr;
39+
if (begin >= end || end > std::numeric_limits<o2::its::TimeStampType>::max()) {
40+
return std::nullopt;
41+
}
42+
return o2::its::TimeEstBC{static_cast<uint32_t>(begin), static_cast<uint32_t>(end - begin)};
43+
}
44+
2545
// Use the same origin as cluster loading. ROF delay/bias belong to the
2646
// readout window, not to the collision timestamp. Preserve the existing
2747
// forward uncertainty interval and select only collisions overlapping this TF.
2848
inline std::optional<o2::its::TimeEstBC> truthSeedingTime(
2949
const o2::InteractionRecord& collision, const o2::InteractionRecord& origin,
30-
const o2::itsmft::tracking::ROFIntervalBC& window, uint32_t duration) noexcept
50+
const o2::its::TimeEstBC& window, uint32_t duration) noexcept
3151
{
32-
if (collision.isDummy() || !window.isValid() || duration == 0) {
52+
if (collision.isDummy() || window.lower() >= window.upper() || duration == 0) {
3353
return std::nullopt;
3454
}
3555
const auto begin = collision.differenceInBC(origin);
3656
const auto end = begin + duration;
37-
if (end <= window.begin || begin >= window.end || end <= 0) {
57+
if (end <= window.lower() || begin >= window.upper() || end <= 0) {
3858
return std::nullopt;
3959
}
4060
// TimeEstBC has unsigned bounds; clip only the part preceding this origin.

‎Detectors/ITSMFT/ITS/workflow-ca/src/CATrackerSpec.cxx‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
#include "ITSMFTTracking/Tracker.h"
3939
#include "ITSMFTTracking/TrackPublicationHelpers.h"
4040
#include "ITSMFTTracking/IOUtils.h"
41-
#include "ITSMFTTracking/SurfaceTiming.h"
4241
#include "ITSMFTTracking/ITSMFTDetectorDefinitions.h"
4342
#include "ITSMFTTracking/TrackingConfigParam.h"
4443
#include "ITSMFTTracking/BoundedAllocator.h"
@@ -241,15 +240,10 @@ void CATrackerDPL::addTruthSeedingVertices(const o2::InteractionRecord& origin,
241240
}
242241
LOGP(info, "ITS CA using truth seeds as vertices");
243242
const auto& clock = mSession.frame.getROFViews().overlap.getLayer(0);
244-
const o2::itsmft::tracking::ROFTimingConfig timing{clock.mROFLength, clock.mROFDelay, clock.mROFBias, clock.mROFAddTimeErr};
245-
const auto first = o2::itsmft::tracking::computeROFIntervalBC(rofs.front().getBCData(), origin, timing, 0);
246-
const auto last = o2::itsmft::tracking::computeROFIntervalBC(rofs.back().getBCData(), origin, timing, rofs.size() - 1);
247-
const auto firstWindow = o2::itsmft::tracking::widen(first.interval, timing.rofAddTimeErr);
248-
const auto lastWindow = o2::itsmft::tracking::widen(last.interval, timing.rofAddTimeErr);
249-
if (!first.ok() || !last.ok() || !firstWindow.ok() || !lastWindow.ok()) {
243+
const auto window = truthSeedingWindow(rofs, origin, clock);
244+
if (!window) {
250245
throw std::runtime_error("ITS CA truth seeding received invalid ROF timing");
251246
}
252-
const o2::itsmft::tracking::ROFIntervalBC window{std::max(int64_t{0}, firstWindow.interval.begin), lastWindow.interval.end, 0, 0};
253247
const std::unique_ptr<o2::steer::DigitizationContext> dc{o2::steer::DigitizationContext::loadFromFile(mOptions.truthContext.c_str())};
254248
if (!dc) {
255249
throw std::runtime_error("ITS CA truth seeding could not load " + mOptions.truthContext);
@@ -264,7 +258,7 @@ void CATrackerDPL::addTruthSeedingVertices(const o2::InteractionRecord& origin,
264258
if (collision == eveId2colId.end()) {
265259
continue;
266260
}
267-
const auto timestamp = truthSeedingTime(irs.at(collision->second), origin, window, clock.mROFLength / 2);
261+
const auto timestamp = truthSeedingTime(irs.at(collision->second), origin, *window, clock.mROFLength / 2);
268262
if (timestamp) {
269263
selected.emplace_back(*timestamp, iEve);
270264
}

‎Detectors/ITSMFT/ITS/workflow-ca/test/testITSCATruthSeeding.cxx‎

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,18 @@ BOOST_AUTO_TEST_CASE(ConsecutiveFramesSelectTheirOwnCollisionsAndLookupROFs)
2828
const std::array<o2::InteractionRecord, 2> collisions{firstOrigin + 50, firstOrigin + 250};
2929
const std::array<float, 2> z{1.f, 7.f};
3030
// Two ROFs with nonzero delay and bias, matching the cluster loader.
31-
const ROFTimingConfig timing{100, 10, 20, 0};
31+
const o2::its::LayerTiming timing{.mNROFsTF = 2, .mROFLength = 100, .mROFDelay = 10, .mROFBias = 20};
3232
for (int frame = 0; frame < 2; ++frame) {
3333
const auto origin = firstOrigin + 200 * frame;
34-
const auto first = computeROFIntervalBC(origin, origin, timing, 0);
35-
const auto last = computeROFIntervalBC(origin + 100, origin, timing, 1);
36-
BOOST_REQUIRE(first.ok() && last.ok());
37-
const ROFIntervalBC window{first.interval.begin, last.interval.end, 0, 0};
34+
const std::array<o2::itsmft::ROFRecord, 2> rofs{{{origin, 0, 0, 0}, {origin + 100, 1, 0, 0}}};
35+
const auto window = truthSeedingWindow(rofs, origin, timing);
36+
BOOST_REQUIRE(window);
37+
BOOST_CHECK_EQUAL(window->lower(), 30u);
38+
BOOST_CHECK_EQUAL(window->upper(), 230u);
3839
std::vector<o2::its::Vertex> vertices;
3940
std::vector<int> eventIds;
4041
for (int event = 0; event < 2; ++event) {
41-
if (const auto time = truthSeedingTime(collisions[event], origin, window, 50)) {
42+
if (const auto time = truthSeedingTime(collisions[event], origin, *window, 50)) {
4243
o2::its::Vertex vertex;
4344
vertex.setXYZ(0.f, 0.f, z[event]);
4445
vertex.getTimeStamp() = *time;
@@ -62,7 +63,7 @@ BOOST_AUTO_TEST_CASE(ConsecutiveFramesSelectTheirOwnCollisionsAndLookupROFs)
6263
BOOST_AUTO_TEST_CASE(TruthTimingPreservesOverlapAndRejectsOutOfFrameEvents)
6364
{
6465
const o2::InteractionRecord origin{0, 40};
65-
const ROFIntervalBC window{0, 200, 0, 0};
66+
const o2::its::TimeEstBC window{0, 200};
6667
const auto overlap = truthSeedingTime(origin - 10, origin, window, 50);
6768
BOOST_REQUIRE(overlap);
6869
BOOST_CHECK_EQUAL(overlap->lower(), 0);
@@ -73,3 +74,19 @@ BOOST_AUTO_TEST_CASE(TruthTimingPreservesOverlapAndRejectsOutOfFrameEvents)
7374
BOOST_CHECK(!truthSeedingTime(origin, origin, window, 0));
7475
BOOST_CHECK(!truthSeedingTime(origin, origin, {}, 50));
7576
}
77+
78+
BOOST_AUTO_TEST_CASE(TruthWindowUsesActualROFRecordsAndLegacyTimingFields)
79+
{
80+
const o2::InteractionRecord origin{0, 40};
81+
const std::array<o2::itsmft::ROFRecord, 2> rofs{{{origin, 0, 0, 0}, {origin + 1000, 1, 0, 0}}};
82+
o2::its::LayerTiming timing{.mNROFsTF = 2, .mROFLength = 100, .mROFDelay = 10, .mROFBias = 20, .mROFAddTimeErr = 50};
83+
const auto window = truthSeedingWindow(rofs, origin, timing);
84+
BOOST_REQUIRE(window);
85+
BOOST_CHECK_EQUAL(window->lower(), 0u);
86+
BOOST_CHECK_EQUAL(window->upper(), 1180u);
87+
BOOST_CHECK(!truthSeedingWindow({}, origin, timing));
88+
timing.mROFLength = 0;
89+
BOOST_CHECK(!truthSeedingWindow(rofs, origin, timing));
90+
timing.mROFLength = std::numeric_limits<uint32_t>::max();
91+
BOOST_CHECK(!truthSeedingWindow(rofs, origin, timing));
92+
}

‎Detectors/ITSMFT/MFT/workflow/src/CATrackerSpec.cxx‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#include "ITSMFTTracking/Tracker.h"
3737
#include "ITSMFTTracking/TrackPublicationHelpers.h"
3838
#include "ITSMFTTracking/IOUtils.h"
39-
#include "ITSMFTTracking/SurfaceTiming.h"
4039
#include "ITSMFTTracking/ITSMFTDetectorDefinitions.h"
4140
#include "ITSMFTTracking/TrackingConfigParam.h"
4241
#include "DetectorsBase/Propagator.h"

‎Detectors/ITSMFT/common/tracking/include/ITSMFTTracking/GenericTrack.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include "ITSMFTTracking/IdTypes.h"
2525
#include "ITSMFTTracking/SurfaceTrackState.h"
2626
#include "ITSMFTTracking/LayerMask.h"
27-
#include "ITSMFTTracking/SurfaceTiming.h"
27+
#include "DataFormatsITS/TimeEstBC.h"
2828

2929
namespace o2::itsmft::tracking
3030
{
@@ -46,7 +46,7 @@ struct GenericTrack {
4646
SurfaceTrackState innerState{};
4747
SurfaceTrackState outerState{};
4848
float chi2{0.f};
49-
GenericTrackTimestamp timestamp{};
49+
o2::its::TimeStamp timestamp{};
5050
LayerMask hitLayers{};
5151
uint32_t firstClusterRef{0};
5252
uint32_t clusterRefEnd{0};

‎Detectors/ITSMFT/common/tracking/include/ITSMFTTracking/SurfaceTiming.h‎

Lines changed: 0 additions & 229 deletions
This file was deleted.

0 commit comments

Comments
 (0)