@@ -506,6 +506,7 @@ DECLARE_SOA_COLUMN(Phi, phi, float);
506506DECLARE_SOA_COLUMN (Tgl, tgl, float ); // ! TrackParFwd parameter tan(\lamba); (\lambda = 90 - \theta_{polar})
507507DECLARE_SOA_COLUMN (Signed1Pt, signed1Pt, float ); // ! TrackParFwd parameter: charged inverse transverse momentum; (q/pt)
508508DECLARE_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
509510DECLARE_SOA_COLUMN (Chi2, chi2, float ); // ! Track chi^2
510511DECLARE_SOA_COLUMN (PDca, pDca, float ); // ! PDca for MUONStandalone
511512DECLARE_SOA_COLUMN (RAtAbsorberEnd, rAtAbsorberEnd, float ); // ! RAtAbsorberEnd for MUONStandalone tracks and GlobalMuonTrackstracks
@@ -520,6 +521,8 @@ DECLARE_SOA_COLUMN(TrackTime, trackTime, float);
520521DECLARE_SOA_COLUMN (TrackTimeRes, trackTimeRes, float ); // ! Resolution of the track time in ns
521522DECLARE_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 ); });
523526DECLARE_SOA_EXPRESSION_COLUMN (Eta, eta, float , // !
524527 -1 .f * nlog (ntan(o2::constants::math::PIQuarter - 0 .5f * natan (aod::fwdtrack::tgl))));
525528DECLARE_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
559576DECLARE_SOA_COLUMN (SigmaX, sigmaX, float ); // ! Covariance matrix
560577DECLARE_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+
623658using MFTTrack = MFTTracks::iterator;
624659
625660namespace fwdtrack // Index to MFTtrack column must be defined after table definition.
@@ -1512,6 +1547,8 @@ DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::StoredTracksExtra_001);
15121547DECLARE_EQUIVALENT_FOR_INDEX (aod::StoredTracksIU, aod::StoredTracksExtra_001);
15131548DECLARE_EQUIVALENT_FOR_INDEX (aod::StoredTracksExtra_000, aod::StoredTracksExtra_001);
15141549DECLARE_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
15171554namespace aod
0 commit comments