Skip to content

Commit c834c68

Browse files
authored
Adding MFT covariances in AOD associated with global muon tracks (#13780)
* Adding MFT covariances in AOD associated with global muon tracks * Clang format
1 parent 9e612a6 commit c834c68

File tree

3 files changed

+64
-9
lines changed

3 files changed

+64
-9
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,8 @@ class AODProducerWorkflowDPL : public Task
520520
GIndex trackID, const o2::globaltracking::RecoContainer& data, int collisionID,
521521
std::uint64_t collisionBC, const std::map<uint64_t, int>& bcsMap);
522522

523-
template <typename fwdTracksCursorType, typename fwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
524-
void addToFwdTracksTable(fwdTracksCursorType& fwdTracksCursor, fwdTracksCovCursorType& fwdTracksCovCursor, AmbigFwdTracksCursorType& ambigFwdTracksCursor,
523+
template <typename fwdTracksCursorType, typename fwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename mftTracksCovCursorType>
524+
void addToFwdTracksTable(fwdTracksCursorType& fwdTracksCursor, fwdTracksCovCursorType& fwdTracksCovCursor, AmbigFwdTracksCursorType& ambigFwdTracksCursor, mftTracksCovCursorType& mftTracksCovCursor,
525525
GIndex trackID, const o2::globaltracking::RecoContainer& data, int collisionID, std::uint64_t collisionBC, const std::map<uint64_t, int>& bcsMap);
526526

527527
TrackExtraInfo processBarrelTrack(int collisionID, std::uint64_t collisionBC, GIndex trackIndex, const o2::globaltracking::RecoContainer& data, const std::map<uint64_t, int>& bcsMap);
@@ -535,7 +535,7 @@ class AODProducerWorkflowDPL : public Task
535535
// * fills tables collision by collision
536536
// * interaction time is for TOF information
537537
template <typename TracksCursorType, typename TracksCovCursorType, typename TracksExtraCursorType, typename TracksQACursorType, typename AmbigTracksCursorType,
538-
typename MFTTracksCursorType, typename AmbigMFTTracksCursorType,
538+
typename MFTTracksCursorType, typename MFTTracksCovCursorType, typename AmbigMFTTracksCursorType,
539539
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename FwdTrkClsCursorType>
540540
void fillTrackTablesPerCollision(int collisionID,
541541
std::uint64_t collisionBC,
@@ -548,6 +548,7 @@ class AODProducerWorkflowDPL : public Task
548548
TracksQACursorType& tracksQACursor,
549549
AmbigTracksCursorType& ambigTracksCursor,
550550
MFTTracksCursorType& mftTracksCursor,
551+
MFTTracksCovCursorType& mftTracksCovCursor,
551552
AmbigMFTTracksCursorType& ambigMFTTracksCursor,
552553
FwdTracksCursorType& fwdTracksCursor,
553554
FwdTracksCovCursorType& fwdTracksCovCursor,

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksC
428428
}
429429

430430
template <typename TracksCursorType, typename TracksCovCursorType, typename TracksExtraCursorType, typename TracksQACursorType, typename AmbigTracksCursorType,
431-
typename MFTTracksCursorType, typename AmbigMFTTracksCursorType,
431+
typename MFTTracksCursorType, typename MFTTracksCovCursorType, typename AmbigMFTTracksCursorType,
432432
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename FwdTrkClsCursorType>
433433
void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
434434
std::uint64_t collisionBC,
@@ -441,6 +441,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
441441
TracksQACursorType& tracksQACursor,
442442
AmbigTracksCursorType& ambigTracksCursor,
443443
MFTTracksCursorType& mftTracksCursor,
444+
MFTTracksCovCursorType& mftTracksCovCursor,
444445
AmbigMFTTracksCursorType& ambigMFTTracksCursor,
445446
FwdTracksCursorType& fwdTracksCursor,
446447
FwdTracksCovCursorType& fwdTracksCovCursor,
@@ -460,6 +461,9 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
460461
} else if (src == GIndex::Source::MCH || src == GIndex::Source::MFTMCH || src == GIndex::Source::MCHMID) {
461462
fwdTracksCursor.reserve(nToReserve + fwdTracksCursor.lastIndex());
462463
fwdTracksCovCursor.reserve(nToReserve + fwdTracksCovCursor.lastIndex());
464+
if (src == GIndex::Source::MFTMCH) {
465+
mftTracksCovCursor.reserve(nToReserve + mftTracksCovCursor.lastIndex());
466+
}
463467
} else {
464468
tracksCursor.reserve(nToReserve + tracksCursor.lastIndex());
465469
tracksCovCursor.reserve(nToReserve + tracksCovCursor.lastIndex());
@@ -479,7 +483,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
479483
if (trackIndex.isAmbiguous() && mGIDToTableFwdID.find(trackIndex) != mGIDToTableFwdID.end()) { // was it already stored ?
480484
continue;
481485
}
482-
addToFwdTracksTable(fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
486+
addToFwdTracksTable(fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, mftTracksCovCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
483487
mGIDToTableFwdID.emplace(trackIndex, mTableTrFwdID);
484488
addClustersToFwdTrkClsTable(data, fwdTrkClsCursor, trackIndex, mTableTrFwdID);
485489
mTableTrFwdID++;
@@ -600,9 +604,9 @@ void AODProducerWorkflowDPL::fillIndexTablesPerCollision(const o2::dataformats::
600604
}
601605
}
602606

603-
template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
607+
template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename mftTracksCovCursorType>
604608
void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksCursor, FwdTracksCovCursorType& fwdTracksCovCursor,
605-
AmbigFwdTracksCursorType& ambigFwdTracksCursor, GIndex trackID,
609+
AmbigFwdTracksCursorType& ambigFwdTracksCursor, mftTracksCovCursorType& mftTracksCovCursor, GIndex trackID,
606610
const o2::globaltracking::RecoContainer& data, int collisionID, std::uint64_t collisionBC,
607611
const std::map<uint64_t, int>& bcsMap)
608612
{
@@ -744,6 +748,8 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
744748
fwdInfo.trackTimeRes = time.getTimeStampError() * 1.e3;
745749
} else { // This is a GlobalMuonTrack or a GlobalForwardTrack
746750
const auto& track = data.getGlobalFwdTrack(trackID);
751+
const auto& mftTracks = data.getMFTTracks();
752+
const auto& mfttrack = mftTracks[track.getMFTTrackID()];
747753
if (!extrapMCHTrack(track.getMCHTrackID())) {
748754
LOGF(warn, "Unable to extrapolate MCH track with ID %d! Dummy parameters will be used", track.getMCHTrackID());
749755
}
@@ -783,6 +789,26 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
783789
fwdCovInfo.rho1PtTgl = (Char_t)(128. * track.getCovariances()(3, 4) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigTgl));
784790

785791
fwdInfo.trackTypeId = (fwdInfo.chi2matchmchmid >= 0) ? o2::aod::fwdtrack::GlobalMuonTrack : o2::aod::fwdtrack::GlobalForwardTrack;
792+
793+
float sX = TMath::Sqrt(mfttrack.getSigma2X()), sY = TMath::Sqrt(mfttrack.getSigma2Y()), sPhi = TMath::Sqrt(mfttrack.getSigma2Phi()),
794+
sTgl = TMath::Sqrt(mfttrack.getSigma2Tanl()), sQ2Pt = TMath::Sqrt(mfttrack.getSigma2InvQPt());
795+
796+
mftTracksCovCursor(fwdInfo.matchmfttrackid,
797+
truncateFloatFraction(sX, mTrackCovDiag),
798+
truncateFloatFraction(sY, mTrackCovDiag),
799+
truncateFloatFraction(sPhi, mTrackCovDiag),
800+
truncateFloatFraction(sTgl, mTrackCovDiag),
801+
truncateFloatFraction(sQ2Pt, mTrackCovDiag),
802+
(Char_t)(128. * mfttrack.getCovariances()(0, 1) / (sX * sY)),
803+
(Char_t)(128. * mfttrack.getCovariances()(0, 2) / (sPhi * sX)),
804+
(Char_t)(128. * mfttrack.getCovariances()(1, 2) / (sPhi * sY)),
805+
(Char_t)(128. * mfttrack.getCovariances()(0, 3) / (sTgl * sX)),
806+
(Char_t)(128. * mfttrack.getCovariances()(1, 3) / (sTgl * sY)),
807+
(Char_t)(128. * mfttrack.getCovariances()(2, 3) / (sTgl * sPhi)),
808+
(Char_t)(128. * mfttrack.getCovariances()(0, 4) / (sQ2Pt * sX)),
809+
(Char_t)(128. * mfttrack.getCovariances()(1, 4) / (sQ2Pt * sY)),
810+
(Char_t)(128. * mfttrack.getCovariances()(2, 4) / (sQ2Pt * sPhi)),
811+
(Char_t)(128. * mfttrack.getCovariances()(3, 4) / (sQ2Pt * sTgl)));
786812
}
787813

788814
std::uint64_t bcOfTimeRef;
@@ -1837,6 +1863,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
18371863
auto fwdTracksCovCursor = createTableCursor<o2::aod::StoredFwdTracksCov>(pc);
18381864
auto fwdTrkClsCursor = createTableCursor<o2::aod::FwdTrkCls>(pc);
18391865
auto mftTracksCursor = createTableCursor<o2::aod::StoredMFTTracks>(pc);
1866+
auto mftTracksCovCursor = createTableCursor<o2::aod::StoredMFTTracksCov>(pc);
18401867
auto tracksCursor = createTableCursor<o2::aod::StoredTracksIU>(pc);
18411868
auto tracksCovCursor = createTableCursor<o2::aod::StoredTracksCovIU>(pc);
18421869
auto tracksExtraCursor = createTableCursor<o2::aod::StoredTracksExtra>(pc);
@@ -2171,7 +2198,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
21712198
auto& trackRef = primVer2TRefs.back(); // references to unassigned tracks are at the end
21722199
// fixme: interaction time is undefined for unassigned tracks (?)
21732200
fillTrackTablesPerCollision(-1, std::uint64_t(-1), trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor,
2174-
ambigTracksCursor, mftTracksCursor, ambigMFTTracksCursor,
2201+
ambigTracksCursor, mftTracksCursor, mftTracksCovCursor, ambigMFTTracksCursor,
21752202
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
21762203

21772204
// filling collisions and tracks into tables
@@ -2213,7 +2240,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
22132240
auto& trackRef = primVer2TRefs[collisionID];
22142241
// passing interaction time in [ps]
22152242
fillTrackTablesPerCollision(collisionID, globalBC, trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor, ambigTracksCursor,
2216-
mftTracksCursor, ambigMFTTracksCursor,
2243+
mftTracksCursor, mftTracksCovCursor, ambigMFTTracksCursor,
22172244
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
22182245
collisionID++;
22192246
}
@@ -3139,6 +3166,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
31393166
OutputForTable<StoredFwdTracks>::spec(),
31403167
OutputForTable<StoredFwdTracksCov>::spec(),
31413168
OutputForTable<StoredMFTTracks>::spec(),
3169+
OutputForTable<StoredMFTTracksCov>::spec(),
31423170
OutputForTable<StoredTracksIU>::spec(),
31433171
OutputForTable<StoredTracksCovIU>::spec(),
31443172
OutputForTable<StoredTracksExtra>::spec(),

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,32 @@ DECLARE_SOA_EXTENDED_TABLE(FwdTracksCov, StoredFwdTracksCov, "EXFWDTRACKCOV", 0,
951951
using FwdTrack = FwdTracks::iterator;
952952
using FwdTrackCovFwd = FwdTracksCov::iterator;
953953

954+
DECLARE_SOA_TABLE_FULL(StoredMFTTracksCov, "MFTTracksCov", "AOD", "MFTTRACKCOV", //!
955+
o2::soa::Index<>, fwdtrack::MFTTrackId,
956+
fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
957+
fwdtrack::RhoXY, fwdtrack::RhoPhiX, fwdtrack::RhoPhiY, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
958+
fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
959+
960+
DECLARE_SOA_EXTENDED_TABLE(MFTTracksCov, StoredMFTTracksCov, "EXMFTTRACKCOV", 0, //!
961+
aod::fwdtrack::CXX,
962+
aod::fwdtrack::CXY,
963+
aod::fwdtrack::CYY,
964+
aod::fwdtrack::CPhiX,
965+
aod::fwdtrack::CPhiY,
966+
aod::fwdtrack::CPhiPhi,
967+
aod::fwdtrack::CTglX,
968+
aod::fwdtrack::CTglY,
969+
aod::fwdtrack::CTglPhi,
970+
aod::fwdtrack::CTglTgl,
971+
aod::fwdtrack::C1PtX,
972+
aod::fwdtrack::C1PtY,
973+
aod::fwdtrack::C1PtPhi,
974+
aod::fwdtrack::C1PtTgl,
975+
aod::fwdtrack::C1Pt21Pt2);
976+
977+
using MFTTrack = MFTTracks::iterator;
978+
using MFTTrackCovFwd = MFTTracksCov::iterator;
979+
954980
} // namespace aod
955981
namespace soa
956982
{

0 commit comments

Comments
 (0)