@@ -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+
353386template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
354387void 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