Skip to content

Commit 5296a30

Browse files
committed
Add MID to createTracksVariadic + fixes
1 parent 228d229 commit 5296a30

File tree

1 file changed

+40
-7
lines changed

1 file changed

+40
-7
lines changed

DataFormats/Detectors/GlobalTracking/include/DataFormatsGlobalTracking/RecoContainerCreateTracksVariadic.h

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
376409
template <class T>
377410
inline constexpr auto isTPCTrack()
378411
{

0 commit comments

Comments
 (0)