Skip to content

Commit 11430fe

Browse files
authored
Correcting the indices to MCH and MFT tracks in FwdTracks table
1 parent b7d70a4 commit 11430fe

File tree

2 files changed

+65
-5
lines changed

2 files changed

+65
-5
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ class AODProducerWorkflowDPL : public Task
230230
std::unordered_map<GIndex, int> mV0ToTableID;
231231
int mTableV0ID{0};
232232

233+
// std::unordered_map<int, int> mIndexTableFwd;
234+
std::vector<int> mIndexTableFwd;
235+
int mIndexFwdID{0};
236+
// std::unordered_map<int, int> mIndexTableMFT;
237+
std::vector<int> mIndexTableMFT;
238+
int mIndexMFTID{0};
239+
233240
// zdc helper maps to avoid a number of "if" statements
234241
// when filling ZDC table
235242
map<string, float> mZDCEnergyMap; // mapping detector name to a corresponding energy
@@ -379,6 +386,8 @@ class AODProducerWorkflowDPL : public Task
379386
AmbigFwdTracksCursorType& ambigFwdTracksCursor,
380387
const std::map<uint64_t, int>& bcsMap);
381388

389+
void fillIndexTablesPerCollision(const o2::dataformats::VtxTrackRef& trackRef, const gsl::span<const GIndex>& GIndices);
390+
382391
template <typename V0CursorType, typename CascadeCursorType>
383392
void fillSecondaryVertices(const o2::globaltracking::RecoContainer& data, V0CursorType& v0Cursor, CascadeCursorType& cascadeCursor);
384393

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksC
286286
if (needBCSlice) {
287287
ambigMFTTracksCursor(0, mTableTrMFTID, bcSlice);
288288
}
289-
mGIDToTableMFTID.emplace(trackID, mTableTrMFTID);
289+
// mGIDToTableMFTID.emplace(trackID, mTableTrMFTID);
290290
mTableTrMFTID++;
291291
}
292292

@@ -350,6 +350,39 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
350350
}
351351
}
352352

353+
void AODProducerWorkflowDPL::fillIndexTablesPerCollision(const o2::dataformats::VtxTrackRef& trackRef, const gsl::span<const GIndex>& GIndices)
354+
{
355+
for (int src : {GIndex::Source::MFTMCH, GIndex::Source::MCH, GIndex::Source::MFT}) {
356+
int start = trackRef.getFirstEntryOfSource(src);
357+
int end = start + trackRef.getEntriesOfSource(src);
358+
for (int ti = start; ti < end; ti++) {
359+
auto& trackIndex = GIndices[ti];
360+
if (GIndex::includesSource(src, mInputSources)) {
361+
if (src == GIndex::Source::MFT) {
362+
if (trackIndex.isAmbiguous() && mGIDToTableMFTID.find(trackIndex) != mGIDToTableMFTID.end()) {
363+
continue;
364+
}
365+
366+
mGIDToTableMFTID.emplace(trackIndex, mIndexMFTID);
367+
mIndexTableMFT[trackIndex.getIndex()] = mIndexMFTID;
368+
mIndexMFTID++;
369+
370+
} else if (src == GIndex::Source::MCH || src == GIndex::Source::MFTMCH) {
371+
if (trackIndex.isAmbiguous() && mGIDToTableFwdID.find(trackIndex) != mGIDToTableFwdID.end()) {
372+
continue;
373+
}
374+
375+
mGIDToTableFwdID.emplace(trackIndex, mIndexFwdID);
376+
if (src == GIndex::Source::MCH) {
377+
mIndexTableFwd[trackIndex.getIndex()] = mIndexFwdID;
378+
}
379+
mIndexFwdID++;
380+
}
381+
}
382+
}
383+
}
384+
}
385+
353386
template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
354387
void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksCursor, FwdTracksCovCursorType& fwdTracksCovCursor,
355388
AmbigFwdTracksCursorType& ambigFwdTracksCursor, GIndex trackID,
@@ -499,8 +532,8 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
499532
chi2matchmchmid = track.getMIDMatchingChi2();
500533
chi2matchmchmft = track.getMFTMCHMatchingChi2();
501534
matchscoremchmft = track.getMFTMCHMatchingScore();
502-
matchmfttrackid = track.getMFTTrackID();
503-
matchmchtrackid = track.getMCHTrackID();
535+
matchmfttrackid = mIndexTableMFT[track.getMFTTrackID()];
536+
matchmchtrackid = mIndexTableFwd[track.getMCHTrackID()];
504537
trackTime = track.getTimeMUS().getTimeStamp() * 1.e3;
505538
trackTimeRes = track.getTimeMUS().getTimeStampError() * 1.e3;
506539

@@ -577,7 +610,7 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
577610
if (needBCSlice) {
578611
ambigFwdTracksCursor(0, mTableTrFwdID, bcSlice);
579612
}
580-
mGIDToTableFwdID.emplace(trackID, mTableTrFwdID);
613+
// mGIDToTableFwdID.emplace(trackID, mTableTrFwdID);
581614
mTableTrFwdID++;
582615
}
583616

@@ -1487,6 +1520,19 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
14871520

14881521
cacheTriggers(recoData);
14891522

1523+
int collisionID = 0;
1524+
mIndexTableMFT.resize(recoData.getMFTTracks().size());
1525+
mIndexTableFwd.resize(recoData.getMCHTracks().size() * 3); // take an upperbound to the size of the FwdTrack table
1526+
1527+
auto& trackReffwd = primVer2TRefs.back();
1528+
fillIndexTablesPerCollision(trackReffwd, primVerGIs);
1529+
collisionID = 0;
1530+
for (auto& vertex : primVertices) {
1531+
auto& trackReffwd = primVer2TRefs[collisionID];
1532+
fillIndexTablesPerCollision(trackReffwd, primVerGIs); // this function must follow the same track order as 'fillTrackTablesPerCollision' to fill the map of track indices
1533+
collisionID++;
1534+
}
1535+
14901536
// filling unassigned tracks first
14911537
// so that all unassigned tracks are stored in the beginning of the table together
14921538
auto& trackRef = primVer2TRefs.back(); // references to unassigned tracks are at the end
@@ -1496,7 +1542,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
14961542
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, bcsMap);
14971543

14981544
// filling collisions and tracks into tables
1499-
int collisionID = 0;
1545+
collisionID = 0;
15001546
for (auto& vertex : primVertices) {
15011547
auto& cov = vertex.getCov();
15021548
auto& timeStamp = vertex.getTimeStamp(); // this is a relative time
@@ -1620,6 +1666,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
16201666
mV0ToTableID.clear();
16211667
mTableV0ID = 0;
16221668

1669+
mIndexTableFwd.clear();
1670+
mIndexFwdID = 0;
1671+
mIndexTableMFT.clear();
1672+
mIndexMFTID = 0;
1673+
16231674
originCursor(0, tfNumber);
16241675

16251676
pc.outputs().snapshot(Output{"TFN", "TFNumber", 0, Lifetime::Timeframe}, tfNumber);

0 commit comments

Comments
 (0)