Skip to content

Commit 7c090e2

Browse files
committed
Adding MFT covariances in AOD associated with global muon tracks
1 parent ecd04ae commit 7c090e2

File tree

3 files changed

+65
-9
lines changed

3 files changed

+65
-9
lines changed

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

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

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

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

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksC
426426
}
427427

428428
template <typename TracksCursorType, typename TracksCovCursorType, typename TracksExtraCursorType, typename TracksQACursorType, typename AmbigTracksCursorType,
429-
typename MFTTracksCursorType, typename AmbigMFTTracksCursorType,
429+
typename MFTTracksCursorType, typename MFTTracksCovCursorType, typename AmbigMFTTracksCursorType,
430430
typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename FwdTrkClsCursorType>
431431
void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
432432
std::uint64_t collisionBC,
@@ -439,6 +439,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
439439
TracksQACursorType& tracksQACursor,
440440
AmbigTracksCursorType& ambigTracksCursor,
441441
MFTTracksCursorType& mftTracksCursor,
442+
MFTTracksCovCursorType& mftTracksCovCursor,
442443
AmbigMFTTracksCursorType& ambigMFTTracksCursor,
443444
FwdTracksCursorType& fwdTracksCursor,
444445
FwdTracksCovCursorType& fwdTracksCovCursor,
@@ -458,6 +459,9 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
458459
} else if (src == GIndex::Source::MCH || src == GIndex::Source::MFTMCH || src == GIndex::Source::MCHMID) {
459460
fwdTracksCursor.reserve(nToReserve + fwdTracksCursor.lastIndex());
460461
fwdTracksCovCursor.reserve(nToReserve + fwdTracksCovCursor.lastIndex());
462+
if (src == GIndex::Source::MFTMCH) {
463+
mftTracksCovCursor.reserve(nToReserve + mftTracksCovCursor.lastIndex());
464+
}
461465
} else {
462466
tracksCursor.reserve(nToReserve + tracksCursor.lastIndex());
463467
tracksCovCursor.reserve(nToReserve + tracksCovCursor.lastIndex());
@@ -477,7 +481,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
477481
if (trackIndex.isAmbiguous() && mGIDToTableFwdID.find(trackIndex) != mGIDToTableFwdID.end()) { // was it already stored ?
478482
continue;
479483
}
480-
addToFwdTracksTable(fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
484+
addToFwdTracksTable(fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, mftTracksCovCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
481485
mGIDToTableFwdID.emplace(trackIndex, mTableTrFwdID);
482486
addClustersToFwdTrkClsTable(data, fwdTrkClsCursor, trackIndex, mTableTrFwdID);
483487
mTableTrFwdID++;
@@ -598,9 +602,9 @@ void AODProducerWorkflowDPL::fillIndexTablesPerCollision(const o2::dataformats::
598602
}
599603
}
600604

601-
template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType>
605+
template <typename FwdTracksCursorType, typename FwdTracksCovCursorType, typename AmbigFwdTracksCursorType, typename mftTracksCovCursorType>
602606
void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksCursor, FwdTracksCovCursorType& fwdTracksCovCursor,
603-
AmbigFwdTracksCursorType& ambigFwdTracksCursor, GIndex trackID,
607+
AmbigFwdTracksCursorType& ambigFwdTracksCursor, mftTracksCovCursorType& mftTracksCovCursor, GIndex trackID,
604608
const o2::globaltracking::RecoContainer& data, int collisionID, std::uint64_t collisionBC,
605609
const std::map<uint64_t, int>& bcsMap)
606610
{
@@ -742,6 +746,8 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
742746
fwdInfo.trackTimeRes = time.getTimeStampError() * 1.e3;
743747
} else { // This is a GlobalMuonTrack or a GlobalForwardTrack
744748
const auto& track = data.getGlobalFwdTrack(trackID);
749+
const auto& mftTracks = data.getMFTTracks();
750+
const auto& mfttrack = mftTracks[track.getMFTTrackID()];
745751
if (!extrapMCHTrack(track.getMCHTrackID())) {
746752
LOGF(warn, "Unable to extrapolate MCH track with ID %d! Dummy parameters will be used", track.getMCHTrackID());
747753
}
@@ -781,6 +787,27 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
781787
fwdCovInfo.rho1PtTgl = (Char_t)(128. * track.getCovariances()(3, 4) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigTgl));
782788

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

786813
std::uint64_t bcOfTimeRef;
@@ -1834,6 +1861,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
18341861
auto fwdTracksCovCursor = createTableCursor<o2::aod::StoredFwdTracksCov>(pc);
18351862
auto fwdTrkClsCursor = createTableCursor<o2::aod::FwdTrkCls>(pc);
18361863
auto mftTracksCursor = createTableCursor<o2::aod::StoredMFTTracks>(pc);
1864+
auto mftTracksCovCursor = createTableCursor<o2::aod::StoredMFTTracksCov>(pc);
18371865
auto tracksCursor = createTableCursor<o2::aod::StoredTracksIU>(pc);
18381866
auto tracksCovCursor = createTableCursor<o2::aod::StoredTracksCovIU>(pc);
18391867
auto tracksExtraCursor = createTableCursor<o2::aod::StoredTracksExtra>(pc);
@@ -2168,7 +2196,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
21682196
auto& trackRef = primVer2TRefs.back(); // references to unassigned tracks are at the end
21692197
// fixme: interaction time is undefined for unassigned tracks (?)
21702198
fillTrackTablesPerCollision(-1, std::uint64_t(-1), trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor,
2171-
ambigTracksCursor, mftTracksCursor, ambigMFTTracksCursor,
2199+
ambigTracksCursor, mftTracksCursor, mftTracksCovCursor, ambigMFTTracksCursor,
21722200
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
21732201

21742202
// filling collisions and tracks into tables
@@ -2210,7 +2238,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
22102238
auto& trackRef = primVer2TRefs[collisionID];
22112239
// passing interaction time in [ps]
22122240
fillTrackTablesPerCollision(collisionID, globalBC, trackRef, primVerGIs, recoData, tracksCursor, tracksCovCursor, tracksExtraCursor, tracksQACursor, ambigTracksCursor,
2213-
mftTracksCursor, ambigMFTTracksCursor,
2241+
mftTracksCursor, mftTracksCovCursor, ambigMFTTracksCursor,
22142242
fwdTracksCursor, fwdTracksCovCursor, ambigFwdTracksCursor, fwdTrkClsCursor, bcsMap);
22152243
collisionID++;
22162244
}
@@ -3123,6 +3151,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
31233151
OutputForTable<StoredFwdTracks>::spec(),
31243152
OutputForTable<StoredFwdTracksCov>::spec(),
31253153
OutputForTable<StoredMFTTracks>::spec(),
3154+
OutputForTable<StoredMFTTracksCov>::spec(),
31263155
OutputForTable<StoredTracksIU>::spec(),
31273156
OutputForTable<StoredTracksCovIU>::spec(),
31283157
OutputForTable<StoredTracksExtra>::spec(),

Framework/Core/include/Framework/AnalysisDataModel.h

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

927+
DECLARE_SOA_TABLE_FULL(StoredMFTTracksCov, "MFTTracksCov", "AOD", "MFTTRACKCOV", //!
928+
o2::soa::Index<>, fwdtrack::MFTTrackId,
929+
fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
930+
fwdtrack::RhoXY, fwdtrack::RhoPhiX, fwdtrack::RhoPhiY, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
931+
fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
932+
933+
DECLARE_SOA_EXTENDED_TABLE(MFTTracksCov, StoredMFTTracksCov, "EXMFTTRACKCOV", 0, //!
934+
aod::fwdtrack::CXX,
935+
aod::fwdtrack::CXY,
936+
aod::fwdtrack::CYY,
937+
aod::fwdtrack::CPhiX,
938+
aod::fwdtrack::CPhiY,
939+
aod::fwdtrack::CPhiPhi,
940+
aod::fwdtrack::CTglX,
941+
aod::fwdtrack::CTglY,
942+
aod::fwdtrack::CTglPhi,
943+
aod::fwdtrack::CTglTgl,
944+
aod::fwdtrack::C1PtX,
945+
aod::fwdtrack::C1PtY,
946+
aod::fwdtrack::C1PtPhi,
947+
aod::fwdtrack::C1PtTgl,
948+
aod::fwdtrack::C1Pt21Pt2);
949+
950+
using MFTTrack = MFTTracks::iterator;
951+
using MFTTrackCovFwd = MFTTracksCov::iterator;
952+
927953
} // namespace aod
928954
namespace soa
929955
{

0 commit comments

Comments
 (0)