Skip to content

Commit f63f7a1

Browse files
Adding MFT cluster size and flags to AO2D (#12303)
1 parent 9068537 commit f63f7a1

2 files changed

Lines changed: 44 additions & 3 deletions

File tree

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,7 @@ DECLARE_SOA_COLUMN(Phi, phi, float);
506506
DECLARE_SOA_COLUMN(Tgl, tgl, float); //! TrackParFwd parameter tan(\lamba); (\lambda = 90 - \theta_{polar})
507507
DECLARE_SOA_COLUMN(Signed1Pt, signed1Pt, float); //! TrackParFwd parameter: charged inverse transverse momentum; (q/pt)
508508
DECLARE_SOA_COLUMN(NClusters, nClusters, int8_t); //! Number of clusters
509+
DECLARE_SOA_COLUMN(MFTClusterSizesAndTracksFlags, mftClusterSizesAndTrackFlags, uint64_t); //! Cluster sizes per track, stored per layer (each 6 bits). Remaining 4 bits for MFT flags
509510
DECLARE_SOA_COLUMN(Chi2, chi2, float); //! Track chi^2
510511
DECLARE_SOA_COLUMN(PDca, pDca, float); //! PDca for MUONStandalone
511512
DECLARE_SOA_COLUMN(RAtAbsorberEnd, rAtAbsorberEnd, float); //! RAtAbsorberEnd for MUONStandalone tracks and GlobalMuonTrackstracks
@@ -520,6 +521,8 @@ DECLARE_SOA_COLUMN(TrackTime, trackTime, float);
520521
DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float); //! Resolution of the track time in ns
521522
DECLARE_SOA_DYNAMIC_COLUMN(Sign, sign, //! Sign of the track eletric charge
522523
[](float signed1Pt) -> short { return (signed1Pt > 0) ? 1 : -1; });
524+
DECLARE_SOA_DYNAMIC_COLUMN(IsCA, isCA, //! Returns true if used track-finding algorithm was Cellular Automaton
525+
[](uint64_t mftClusterSizesAndTrackFlags) -> bool { return mftClusterSizesAndTrackFlags & (0x1ULL << 60); });
523526
DECLARE_SOA_EXPRESSION_COLUMN(Eta, eta, float, //!
524527
-1.f * nlog(ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))));
525528
DECLARE_SOA_EXPRESSION_COLUMN(Pt, pt, float, //!
@@ -555,6 +558,20 @@ DECLARE_SOA_DYNAMIC_COLUMN(MIDBoardCh4, midBoardCh4, //!
555558
return static_cast<int>((midBoards >> 24) & 0xFF);
556559
});
557560

561+
namespace v001
562+
{
563+
DECLARE_SOA_DYNAMIC_COLUMN(NClusters, nClusters, //! Number of MFT clusters
564+
[](uint64_t mftClusterSizesAndTrackFlags) -> int8_t {
565+
int8_t nClusters = 0;
566+
for (int layer = 0; layer < 11; layer++) {
567+
if ((mftClusterSizesAndTrackFlags >> (layer * 6)) & 0x3F) {
568+
nClusters++;
569+
}
570+
}
571+
return nClusters;
572+
});
573+
} // namespace v001
574+
558575
// FwdTracksCov columns definitions
559576
DECLARE_SOA_COLUMN(SigmaX, sigmaX, float); //! Covariance matrix
560577
DECLARE_SOA_COLUMN(SigmaY, sigmaY, float); //! Covariance matrix
@@ -605,7 +622,7 @@ DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float, //!
605622
} // namespace fwdtrack
606623

607624
// MFTStandalone tracks
608-
DECLARE_SOA_TABLE_FULL(StoredMFTTracks, "MFTTracks", "AOD", "MFTTRACK", //!
625+
DECLARE_SOA_TABLE_FULL(StoredMFTTracks_000, "MFTTracks", "AOD", "MFTTRACK", //! On disk version of MFTTracks, version 0
609626
o2::soa::Index<>, fwdtrack::CollisionId,
610627
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
611628
fwdtrack::Signed1Pt, fwdtrack::NClusters,
@@ -615,11 +632,29 @@ DECLARE_SOA_TABLE_FULL(StoredMFTTracks, "MFTTracks", "AOD", "MFTTRACK", //!
615632
fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
616633
fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
617634

618-
DECLARE_SOA_EXTENDED_TABLE(MFTTracks, StoredMFTTracks, "MFTTRACK", //!
635+
DECLARE_SOA_TABLE_FULL_VERSIONED(StoredMFTTracks_001, "MFTTracks", "AOD", "MFTTRACK", 1, //! On disk version of MFTTracks, version 1
636+
o2::soa::Index<>, fwdtrack::CollisionId,
637+
fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
638+
fwdtrack::Signed1Pt, fwdtrack::v001::NClusters<fwdtrack::MFTClusterSizesAndTracksFlags>, fwdtrack::MFTClusterSizesAndTracksFlags, fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTracksFlags>,
639+
fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
640+
fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
641+
fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
642+
fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
643+
fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
644+
645+
DECLARE_SOA_EXTENDED_TABLE(MFTTracks_000, StoredMFTTracks_000, "MFTTRACK", //! Additional MFTTracks information (Pt, Eta, P), version 0
646+
aod::fwdtrack::Pt,
647+
aod::fwdtrack::Eta,
648+
aod::fwdtrack::P);
649+
650+
DECLARE_SOA_EXTENDED_TABLE(MFTTracks_001, StoredMFTTracks_001, "MFTTRACK", //! Additional MFTTracks information (Pt, Eta, P), version 1
619651
aod::fwdtrack::Pt,
620652
aod::fwdtrack::Eta,
621653
aod::fwdtrack::P);
622654

655+
using MFTTracks = MFTTracks_000;
656+
using StoredMFTTracks = StoredMFTTracks_000;
657+
623658
using MFTTrack = MFTTracks::iterator;
624659

625660
namespace fwdtrack // Index to MFTtrack column must be defined after table definition.
@@ -1512,6 +1547,8 @@ DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksExtra_001);
15121547
DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::StoredTracksExtra_001);
15131548
DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksExtra_000, aod::StoredTracksExtra_001);
15141549
DECLARE_EQUIVALENT_FOR_INDEX(aod::HMPID_000, aod::HMPID_001);
1550+
DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredMFTTracks, aod::StoredMFTTracks_000);
1551+
DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredMFTTracks, aod::StoredMFTTracks_001);
15151552
} // namespace soa
15161553

15171554
namespace aod

Framework/Core/src/AODReaderHelpers.cxx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,11 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector<InputSpec>& reque
182182
outputs.adopt(Output{origin, description, version}, maker(o2::aod::TracksExtra_001ExtensionMetadata{}));
183183
}
184184
} else if (description == header::DataDescription{"MFTTRACK"}) {
185-
outputs.adopt(Output{origin, description, version}, maker(o2::aod::MFTTracksExtensionMetadata{}));
185+
if (version == 0U) {
186+
outputs.adopt(Output{origin, description, version}, maker(o2::aod::MFTTracks_000ExtensionMetadata{}));
187+
} else if (version == 1U) {
188+
outputs.adopt(Output{origin, description, version}, maker(o2::aod::MFTTracks_001ExtensionMetadata{}));
189+
}
186190
} else if (description == header::DataDescription{"FWDTRACK"}) {
187191
outputs.adopt(Output{origin, description, version}, maker(o2::aod::FwdTracksExtensionMetadata{}));
188192
} else if (description == header::DataDescription{"FWDTRACKCOV"}) {

0 commit comments

Comments
 (0)