@@ -89,6 +89,7 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
8989 const auto trkITABRefs = getITSABRefs ();
9090 const auto tracksMFT = getMFTTracks ();
9191 const auto tracksMCH = getMCHTracks ();
92+ const auto tracksMID = getMIDTracks ();
9293 const auto tracksTPC = getTPCTracks ();
9394 const auto tracksTPCITS = getTPCITSTracks ();
9495 const auto tracksMFTMCH = getGlobalFwdTracks ();
@@ -106,6 +107,7 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
106107 usedData[GTrackID::ITS].resize (tracksITS.size ()); // to flag used ITS tracks
107108 usedData[GTrackID::MCH].resize (tracksMCH.size ()); // to flag used MCH tracks
108109 usedData[GTrackID::MFT].resize (tracksMFT.size ()); // to flag used MFT tracks
110+ usedData[GTrackID::MID].resize (tracksMID.size ()); // to flag used MFT tracks
109111 usedData[GTrackID::TPC].resize (tracksTPC.size ()); // to flag used TPC tracks
110112 usedData[GTrackID::ITSTPC].resize (tracksTPCITS.size ()); // to flag used ITSTPC tracks
111113 usedData[GTrackID::MFTMCH].resize (tracksMFTMCH.size ()); // to flag used MFTMCH tracks
@@ -297,7 +299,7 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
297299 continue ;
298300 }
299301 GTrackID gidITS (it, GTrackID::ITS);
300- const auto & trc = getTrack<o2::its::TrackITS>(gidITS) ;
302+ const auto & trc = tracksITS[it] ;
301303 if (creator (trc, gidITS, t0, 0.5 )) {
302304 flagUsed2 (it, GTrackID::ITS);
303305 }
@@ -313,9 +315,12 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
313315 float t0 = rofRec.getBCData ().differenceInBC (startIR) * o2::constants::lhc::LHCBunchSpacingNS * 1e-3 ;
314316 int trlim = rofRec.getFirstEntry () + rofRec.getNEntries ();
315317 for (int it = rofRec.getFirstEntry (); it < trlim; it++) {
316-
318+ if (isUsed2 (it, GTrackID::MFT)) {
319+ flagUsed2 (it, GTrackID::MFT);
320+ continue ;
321+ }
317322 GTrackID gidMFT (it, GTrackID::MFT);
318- const auto & trc = getTrack<o2::mft::TrackMFT>(gidMFT) ;
323+ const auto & trc = tracksMFT[it] ;
319324 if (creator (trc, gidMFT, t0, 0.5 )) {
320325 flagUsed2 (it, GTrackID::MFT);
321326 }
@@ -326,25 +331,47 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
326331 // MCH standalone tracks
327332 {
328333 const auto & rofs = getMCHTracksROFRecords ();
329- constexpr float bc2ns = o2::constants::lhc::LHCBunchSpacingNS * 1e-3 ;
330334 for (const auto & rof : rofs) {
331335 auto bcWidth = 56 ;
332336 // FIXME (LA): should really be rof.getBCWidth() once
333337 // getBCWidth is actually set to a meaningfull value.
334338 // For now we hard-code a 1.4 microseconds window for all tracks
335339 auto rofMeanBC = rof.getBCData ().differenceInBC (startIR) + bcWidth / 2 ;
336- float t0 = rofMeanBC * bc2ns ;
337- float t0err = bc2ns * bcWidth / 2 ;
340+ float t0 = rofMeanBC * o2::constants::lhc::LHCBunchSpacingMUS ;
341+ float t0err = o2::constants::lhc::LHCBunchSpacingMUS * bcWidth / 2 ;
338342 for (int idx = rof.getFirstIdx (); idx <= rof.getLastIdx (); ++idx) {
343+ if (isUsed2 (idx, GTrackID::MCH)) {
344+ flagUsed2 (idx, GTrackID::MCH);
345+ continue ;
346+ }
339347 GTrackID gidMCH (idx, GTrackID::MCH);
340- const auto & trc = getTrack<o2::mch::TrackMCH>(gidMCH) ;
348+ const auto & trc = tracksMCH[idx] ;
341349 if (creator (trc, gidMCH, t0, t0err)) {
342350 flagUsed2 (idx, GTrackID::MCH);
343351 }
344352 }
345353 }
346354 }
347355
356+ // MID standalone tracks
357+ {
358+ const auto & rofs = getMIDTracksROFRecords ();
359+ for (const auto & rof : rofs) {
360+ float t0err = 0.0005 ;
361+ float t0 = rof.interactionRecord .differenceInBC (startIR) * o2::constants::lhc::LHCBunchSpacingMUS;
362+ for (int idx = rof.firstEntry ; idx <= rof.getEndIndex (); ++idx) {
363+ if (isUsed2 (idx, GTrackID::MID)) {
364+ continue ;
365+ }
366+ GTrackID gidMID (idx, GTrackID::MID);
367+ const auto & trc = tracksMID[idx];
368+ if (creator (trc, gidMID, t0, t0err)) {
369+ flagUsed2 (idx, GTrackID::MID);
370+ }
371+ }
372+ }
373+ }
374+
348375 auto current_time = std::chrono::high_resolution_clock::now ();
349376 LOG (INFO) << " RecoContainer::createTracks took " << std::chrono::duration_cast<std::chrono::microseconds>(current_time - start_time).count () * 1e-6 << " CPU s." ;
350377}
@@ -373,6 +400,12 @@ inline constexpr auto isMCHTrack()
373400 return std::is_same_v<std::decay_t <T>, o2::mch::TrackMCH>;
374401}
375402
403+ template <class T >
404+ inline constexpr auto isMIDTrack ()
405+ {
406+ return std::is_same_v<std::decay_t <T>, o2::mid::Track>;
407+ }
408+
376409template <class T >
377410inline constexpr auto isTPCTrack ()
378411{
0 commit comments