Skip to content

Commit ac0acf0

Browse files
committed
trk
1 parent c02fcdb commit ac0acf0

File tree

4 files changed

+35
-26
lines changed

4 files changed

+35
-26
lines changed

Detectors/ITSMFT/ITS/tracking/include/ITStracking/ROFLookupTables.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ struct LayerTiming {
6666
{
6767
return std::format("NROFsPerTF {} ROFLength {} ROFDelay {} ROFDelta {}", mNROFsTF, mROFLength, mROFDelay, mROFDelta);
6868
}
69+
70+
GPUh() void print() const
71+
{
72+
LOG(info) << asString();
73+
}
6974
};
7075

7176
// Base class for lookup to define layers
@@ -165,6 +170,7 @@ struct ROFOverlapTableView {
165170
{
166171
if (from == to) {
167172
LOGP(error, "No self-lookup supported");
173+
return;
168174
}
169175

170176
constexpr int w_index = 10;

Detectors/ITSMFT/ITS/tracking/include/ITStracking/Tracker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class Tracker
6262
void adoptTimeFrame(TimeFrame<NLayers>& tf);
6363

6464
void clustersToTracks(const LogFunc& info, const LogFunc& error);
65+
const auto& getParameters() const { return mTrkParams; }
6566
void setParameters(const std::vector<TrackingParameters>& p) { mTrkParams = p; }
6667
void setMemoryPool(std::shared_ptr<BoundedMemoryResource> pool) { mMemoryPool = pool; }
6768
std::vector<TrackingParameters>& getParameters() { return mTrkParams; }

Detectors/ITSMFT/ITS/tracking/src/TimeFrame.cxx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ void TimeFrame<NLayers>::initialise(const int iteration, const TrackingParameter
272272
mPositionResolution[iLayer] = o2::gpu::CAMath::Sqrt(0.5f * (trkParam.SystErrorZ2[iLayer] + trkParam.SystErrorY2[iLayer]) + trkParam.LayerResolution[iLayer] * trkParam.LayerResolution[iLayer]);
273273
}
274274
for (unsigned int iLayer{0}; iLayer < std::min((int)mClusters.size(), maxLayers); ++iLayer) {
275-
clearResizeBoundedArray(mIndexTables, getNrof(iLayer) * ((trkParam.ZBins * trkParam.PhiBins) + 1), getMaybeExternalHostResource(maxLayers != NLayers));
275+
clearResizeBoundedVector(mIndexTables[iLayer], getNrof(iLayer) * ((trkParam.ZBins * trkParam.PhiBins) + 1), getMaybeExternalHostResource(maxLayers != NLayers));
276276
}
277277
clearResizeBoundedVector(mLines, getNrof(0), mMemoryPool.get());
278278
clearResizeBoundedVector(mTrackletClusters, getNrof(0), mMemoryPool.get());
@@ -398,14 +398,12 @@ void TimeFrame<NLayers>::setMemoryPool(std::shared_ptr<BoundedMemoryResource> po
398398
{
399399
mMemoryPool = std::move(pool);
400400

401-
auto initVector = [&]<typename T>(bounded_vector<T> & vec, bool useExternal = false)
402-
{
401+
auto initVector = [&]<typename T>(bounded_vector<T>& vec, bool useExternal = false) {
403402
std::pmr::memory_resource* mr = (useExternal) ? mExtMemoryPool.get() : mMemoryPool.get();
404403
deepVectorClear(vec, mr);
405404
};
406405

407-
auto initContainers = [&]<typename Container>(Container & container, bool useExternal = false)
408-
{
406+
auto initContainers = [&]<typename Container>(Container& container, bool useExternal = false) {
409407
for (auto& v : container) {
410408
initVector(v, useExternal);
411409
}

Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "CommonDataFormat/IRFrame.h"
3030
#include "DetectorsBase/GRPGeomHelper.h"
3131
#include "ITStracking/BoundedAllocator.h"
32-
#include "DetectorsRaw/HBFUtils.h"
3332
#include "Framework/InputRecordWalker.h"
3433
#include "Framework/DataRefUtils.h"
3534
#include "Framework/DeviceSpec.h"
@@ -83,30 +82,35 @@ void ITSTrackingInterface::initialise()
8382
mFilter.emplace_back("itsmclabels", "ITS", "CLUSTERSMCTR", iLayer, Lifetime::Timeframe);
8483
}
8584
}
86-
87-
// prepare rof lookup table(s)
88-
const int nOrbitsPerTF = raw::HBFUtils::Instance().getNOrbitsPerTF();
89-
TimeFrameN::ROFOverlapTableN rofTable;
90-
TimeFrameN::ROFVertexLookupTableN vtxTable;
91-
TimeFrameN::ROFTimeSliceTableN sliceTable;
92-
// can use DPL param since call to ccdb has been made
93-
const auto& par = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance();
94-
for (int iLayer = 0; iLayer < NLayers; ++iLayer) {
95-
const int nROFsPerOrbit = o2::constants::lhc::LHCMaxBunches / par.getROFLengthInBC(iLayer);
96-
rofTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
97-
vtxTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
98-
sliceTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
99-
}
100-
rofTable.init();
101-
mTimeFrame->setROFOverlapTable(rofTable);
102-
vtxTable.init();
103-
mTimeFrame->setROFVertexLookupTable(vtxTable);
104-
sliceTable.init(trackParams[0].NTimeSlices);
105-
mTimeFrame->setROFTimeSliceTable(sliceTable);
10685
}
10786

10887
void ITSTrackingInterface::run(framework::ProcessingContext& pc)
10988
{
89+
if (static bool doneOnce{false}; !doneOnce) {
90+
doneOnce = true;
91+
92+
// prepare rof lookup table(s)
93+
// has to be done here to ensure we get the right number of HB per TF
94+
const int nOrbitsPerTF = o2::base::GRPGeomHelper::getNHBFPerTF();
95+
TimeFrameN::ROFOverlapTableN rofTable;
96+
TimeFrameN::ROFVertexLookupTableN vtxTable;
97+
TimeFrameN::ROFTimeSliceTableN sliceTable;
98+
const auto& par = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance();
99+
const auto& trackParams = mTracker->getParameters();
100+
for (int iLayer = 0; iLayer < NLayers; ++iLayer) {
101+
const int nROFsPerOrbit = o2::constants::lhc::LHCMaxBunches / par.getROFLengthInBC(iLayer);
102+
rofTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
103+
vtxTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
104+
sliceTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]);
105+
}
106+
rofTable.init();
107+
mTimeFrame->setROFOverlapTable(rofTable);
108+
vtxTable.init();
109+
mTimeFrame->setROFVertexLookupTable(vtxTable);
110+
sliceTable.init(trackParams[0].NTimeSlices);
111+
mTimeFrame->setROFTimeSliceTable(sliceTable);
112+
}
113+
110114
std::array<gsl::span<const itsmft::CompClusterExt>, NLayers> compClusters;
111115
std::array<gsl::span<const unsigned char>, NLayers> patterns;
112116
std::array<gsl::span<const itsmft::ROFRecord>, NLayers> rofsinput;

0 commit comments

Comments
 (0)