Skip to content

Commit b05bde3

Browse files
committed
Support per-layer ITS clusters in strangeness-tracking-workflow
The parallel cluster sizes vector is indexed via ClustersPerLayer::flatIndex so that it cannot diverge from the cluster container offsets.
1 parent 6bbe08b commit b05bde3

5 files changed

Lines changed: 36 additions & 24 deletions

File tree

‎Detectors/GlobalTrackingWorkflow/include/GlobalTrackingWorkflow/StrangenessTrackingSpec.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class StrangenessTrackerSpec : public framework::Task
6060
std::unique_ptr<parameters::GRPObject> mGRP = nullptr;
6161
};
6262

63-
o2::framework::DataProcessorSpec getStrangenessTrackerSpec(o2::dataformats::GlobalTrackID::mask_t src, bool useMC, bool useGeom);
63+
o2::framework::DataProcessorSpec getStrangenessTrackerSpec(o2::dataformats::GlobalTrackID::mask_t src, bool useMC, bool useGeom, bool itsStag);
6464
o2::framework::WorkflowSpec getWorkflow(bool upstreamClusters = false, bool upstreamV0s = false);
6565

6666
} // namespace strangeness_tracking

‎Detectors/GlobalTrackingWorkflow/src/StrangenessTrackingSpec.cxx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,11 @@ void StrangenessTrackerSpec::endOfStream(framework::EndOfStreamContext& ec)
154154
mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1);
155155
}
156156

157-
DataProcessorSpec getStrangenessTrackerSpec(o2::dataformats::GlobalTrackID::mask_t src, bool useMC, bool useGeom)
157+
DataProcessorSpec getStrangenessTrackerSpec(o2::dataformats::GlobalTrackID::mask_t src, bool useMC, bool useGeom, bool itsStag)
158158
{
159159
// ITS
160160
auto dataRequest = std::make_shared<DataRequest>();
161+
dataRequest->setITSPerLayer(itsStag);
161162
dataRequest->requestITSClusters(useMC);
162163
dataRequest->requestTracks(src, useMC);
163164
dataRequest->requestPrimaryVertices(useMC);

‎Detectors/GlobalTrackingWorkflow/src/strangeness-tracking-workflow.cxx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,14 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
6464
auto useRootInput = !configcontext.options().get<bool>("disable-root-input");
6565
auto disableRootOut = configcontext.options().get<bool>("disable-root-output");
6666
auto useGeom = configcontext.options().get<bool>("use-full-geometry");
67+
auto doStag = o2::itsmft::DPLAlpideParamInitializer::isITSStaggeringEnabled(configcontext);
6768

6869
o2::conf::ConfigurableParam::updateFromString(configcontext.options().get<std::string>("configKeyValues"));
6970
o2::conf::ConfigurableParam::writeINI("o2strangeness_tracking_workflow_configuration.ini");
7071
GID::mask_t itsSource = GID::getSourceMask(GID::ITS); // ITS tracks and clusters
7172

7273
WorkflowSpec specs;
73-
specs.emplace_back(o2::strangeness_tracking::getStrangenessTrackerSpec(itsSource, useMC, useGeom));
74+
specs.emplace_back(o2::strangeness_tracking::getStrangenessTrackerSpec(itsSource, useMC, useGeom, doStag));
7475
o2::globaltracking::InputHelper::addInputSpecs(configcontext, specs, itsSource, itsSource, itsSource, useMC, itsSource);
7576
o2::globaltracking::InputHelper::addInputSpecsPVertex(configcontext, specs, useMC); // P-vertex is always needed
7677
o2::globaltracking::InputHelper::addInputSpecsSVertex(configcontext, specs); // S-vertex is always needed

‎Detectors/Vertexing/StrangenessTracking/include/StrangenessTracking/StrangenessTracker.h‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <gsl/gsl>
2020

2121
#include "DataFormatsITSMFT/TopologyDictionary.h"
22+
#include "DataFormatsITSMFT/ClustersPerLayer.h"
2223
#include "StrangenessTracking/IndexTableUtils.h"
2324
#include "StrangenessTracking/StrangenessTrackingConfigParam.h"
2425
#include "ReconstructionDataFormats/PID.h"
@@ -66,6 +67,7 @@ class StrangenessTracker
6667
using PID = o2::track::PID;
6768
using TrackITS = o2::its::TrackITS;
6869
using ITSCluster = o2::BaseCluster<float>;
70+
using ITSClusters = o2::itsmft::ClustersPerLayer<ITSCluster>;
6971
using V0 = o2::dataformats::V0;
7072
using V0Index = o2::dataformats::V0Index;
7173
using Cascade = o2::dataformats::Cascade;
@@ -247,12 +249,12 @@ class StrangenessTracker
247249
auto firstClus = itsTrack.getFirstClusterEntry();
248250
auto ncl = itsTrack.getNumberOfClusters();
249251
for (int icl = 0; icl < ncl; icl++) {
250-
outVec.push_back(mInputClusterSizes[mInputITSidxs[firstClus + icl]]);
252+
outVec.push_back(mInputClusterSizes[mInputITSclusters.flatIndex(mInputITSidxs[firstClus + icl])]);
251253
}
252254
return outVec;
253255
};
254256

255-
void getClusterSizesITS(std::vector<int>& clusSizeVec, const gsl::span<const o2::itsmft::CompClusterExt> ITSclus, gsl::span<const unsigned char>::iterator& pattIt, const o2::itsmft::TopologyDictionary* mdict)
257+
void getClusterSizesITS(std::vector<int>& clusSizeVec, int offs, const gsl::span<const o2::itsmft::CompClusterExt> ITSclus, gsl::span<const unsigned char>::iterator& pattIt, const o2::itsmft::TopologyDictionary* mdict)
256258
{
257259
for (unsigned int iClus{0}; iClus < ITSclus.size(); ++iClus) {
258260
auto& clus = ITSclus[iClus];
@@ -268,13 +270,13 @@ class StrangenessTracker
268270
npix = mdict->getNpixels(pattID);
269271
patt = mdict->getPattern(pattID);
270272
}
271-
clusSizeVec[iClus] = npix;
273+
clusSizeVec[offs + iClus] = npix;
272274
}
273275
// LOG(info) << " Patt Npixel: " << pattVec[0].getNPixels();
274276
}
275277

276278
#ifdef ENABLE_UPGRADES
277-
void getClusterSizesIT3(std::vector<int>& clusSizeVec, const gsl::span<const o2::itsmft::CompClusterExt> ITSclus, gsl::span<const unsigned char>::iterator& pattIt, const o2::its3::TopologyDictionary* mdict)
279+
void getClusterSizesIT3(std::vector<int>& clusSizeVec, int offs, const gsl::span<const o2::itsmft::CompClusterExt> ITSclus, gsl::span<const unsigned char>::iterator& pattIt, const o2::its3::TopologyDictionary* mdict)
278280
{
279281
for (unsigned int iClus{0}; iClus < ITSclus.size(); ++iClus) {
280282
auto& clus = ITSclus[iClus];
@@ -291,7 +293,7 @@ class StrangenessTracker
291293
npix = mdict->getNpixels(pattID, ib);
292294
patt = mdict->getPattern(pattID, ib);
293295
}
294-
clusSizeVec[iClus] = npix;
296+
clusSizeVec[offs + iClus] = npix;
295297
}
296298
}
297299
#endif
@@ -326,7 +328,7 @@ class StrangenessTracker
326328
std::vector<VBracket> mITSvtxBrackets; // time brackets for ITS tracks
327329
std::vector<int> mTracksIdxTable; // index table for ITS tracks
328330
std::vector<int> mInputClusterSizes; // input cluster sizes
329-
std::vector<ITSCluster> mInputITSclusters; // input ITS clusters
331+
ITSClusters mInputITSclusters; // input ITS clusters, by composed (layer,index) ID
330332
gsl::span<const int> mInputITSidxs; // input ITS track-cluster indexes
331333
gsl::span<const V0> mInputV0tracks; // input V0 of decay daughters
332334
gsl::span<const V0Index> mInputV0Indices; // input V0 indices of decay daughters

‎Detectors/Vertexing/StrangenessTracking/src/StrangenessTracker.cxx‎

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,32 @@ bool StrangenessTracker::loadData(const o2::globaltracking::RecoContainer& recoD
4242
mInputITStracks = recoData.getITSTracks();
4343
mInputITSidxs = recoData.getITSTracksClusterRefs();
4444

45-
auto compClus = recoData.getITSClusters();
46-
auto clusPatt = recoData.getITSClustersPatterns();
47-
auto pattIt = clusPatt.begin();
48-
auto pattIt2 = clusPatt.begin();
49-
mInputITSclusters.reserve(compClus.size());
50-
mInputClusterSizes.resize(compClus.size());
45+
int nLr = recoData.getITSPerLayer() ? o2::globaltracking::MaxITSLayers : 1;
46+
mInputITSclusters.init(nLr);
47+
mInputClusterSizes.clear();
48+
for (int lr = 0; lr < nLr; lr++) { // with a single (monolithic) input all clusters are in the layer slot 0
49+
mInputITSclusters.beginLayer(lr);
50+
auto compClus = recoData.getITSClusters(lr);
51+
auto clusPatt = recoData.getITSClustersPatterns(lr);
52+
auto pattIt = clusPatt.begin();
53+
auto pattIt2 = clusPatt.begin();
54+
int offs = (int)mInputClusterSizes.size();
55+
mInputITSclusters.getClusters().reserve(offs + compClus.size());
56+
mInputClusterSizes.resize(offs + compClus.size());
5157
#ifdef ENABLE_UPGRADES
52-
if (o2::GlobalParams::Instance().withITS3) {
53-
o2::its3::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters, mIT3Dict);
54-
getClusterSizesIT3(mInputClusterSizes, compClus, pattIt2, mIT3Dict);
55-
} else {
56-
o2::its::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters, mITSDict);
57-
getClusterSizesITS(mInputClusterSizes, compClus, pattIt2, mITSDict);
58-
}
58+
if (o2::GlobalParams::Instance().withITS3) {
59+
o2::its3::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters.getClusters(), mIT3Dict);
60+
getClusterSizesIT3(mInputClusterSizes, offs, compClus, pattIt2, mIT3Dict);
61+
} else {
62+
o2::its::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters.getClusters(), mITSDict);
63+
getClusterSizesITS(mInputClusterSizes, offs, compClus, pattIt2, mITSDict);
64+
}
5965
#else
60-
o2::its::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters, mITSDict);
61-
getClusterSizesITS(mInputClusterSizes, compClus, pattIt2, mITSDict);
66+
o2::its::ioutils::convertCompactClusters(compClus, pattIt, mInputITSclusters.getClusters(), mITSDict);
67+
getClusterSizesITS(mInputClusterSizes, offs, compClus, pattIt2, mITSDict);
6268
#endif
69+
}
70+
mInputITSclusters.finalize();
6371

6472
mITSvtxBrackets.resize(mInputITStracks.size());
6573
for (int i = 0; i < mInputITStracks.size(); i++) {

0 commit comments

Comments
 (0)