@@ -268,6 +268,138 @@ using TrackExtra = TracksExtra::iterator;
268268using FullTracks = soa::Join<Tracks, TracksCov, TracksExtra>;
269269using FullTrack = FullTracks::iterator;
270270
271+ namespace fwdtrack
272+ {
273+ // FwdTracks and MFTTracks Columns definitions
274+ DECLARE_SOA_INDEX_COLUMN (Collision, collision);
275+ DECLARE_SOA_INDEX_COLUMN (BC, bc);
276+ DECLARE_SOA_COLUMN (TrackType, trackType, uint8_t ); // TODO change to ForwardTrackTypeEnum when enums are supported
277+ DECLARE_SOA_COLUMN (X, x, float ); // TrackParFwd parameters: x, y, z, phi, tan(lamba), q/pt
278+ DECLARE_SOA_COLUMN (Y, y, float );
279+ DECLARE_SOA_COLUMN (Z, z, float );
280+ DECLARE_SOA_COLUMN (Phi, phi, float );
281+ DECLARE_SOA_COLUMN (Tgl, tgl, float );
282+ DECLARE_SOA_COLUMN (Signed1Pt, signed1Pt, float );
283+ DECLARE_SOA_COLUMN (NClusters, nClusters, int8_t );
284+ DECLARE_SOA_COLUMN (Chi2, chi2, float );
285+ DECLARE_SOA_COLUMN (PDca, pDca, float ); // PDca for MUONStandalone
286+ DECLARE_SOA_COLUMN (RAtAbsorberEnd, rAtAbsorberEnd, float ); // RAtAbsorberEnd for MUONStandalone tracks and GlobalMuonTrackstracks
287+ DECLARE_SOA_COLUMN (Chi2MatchMCHMID, chi2MatchMCHMID, float ); // MCH-MID Match Chi2 for MUONStandalone tracks
288+ DECLARE_SOA_COLUMN (Chi2MatchMCHMFT, chi2MatchMCHMFT, float ); // MCH-MFT Match Chi2 for GlobalMuonTracks
289+ DECLARE_SOA_COLUMN (MatchScoreMCHMFT, matchScoreMCHMFT, float ); // MCH-MFT Machine Learning Matching Score for GlobalMuonTracks
290+ DECLARE_SOA_COLUMN (MatchMFTTrackID, matchMFTTrackID, int ); // ID of matching MFT track for GlobalMuonTrack (ints while self indexing not available)
291+ DECLARE_SOA_COLUMN (MatchMCHTrackID, matchMCHTrackID, int ); // ID of matching MCH track for GlobalMuonTracks (ints while self indexing not available)
292+
293+ DECLARE_SOA_DYNAMIC_COLUMN (Sign, sign, [](float signed1Pt) -> short { return (signed1Pt > 0 ) ? 1 : -1 ; });
294+ DECLARE_SOA_EXPRESSION_COLUMN (Eta, eta, float , -1 .f * nlog (ntan(0 .25f * static_cast <float >(M_PI) - 0.5f * natan(aod::fwdtrack::tgl))));
295+ DECLARE_SOA_EXPRESSION_COLUMN (Pt, pt, float , nabs(1 .f / aod::fwdtrack::signed1Pt));
296+ DECLARE_SOA_EXPRESSION_COLUMN (P, p, float , 0 .5f * (ntan(0 .25f * static_cast <float >(M_PI) - 0.5f * natan(aod::fwdtrack::tgl)) + 1.f / ntan(0 .25f * static_cast <float >(M_PI) - 0.5f * natan(aod::fwdtrack::tgl))) / nabs(aod::fwdtrack::signed1Pt));
297+ DECLARE_SOA_DYNAMIC_COLUMN (Px, px, [](float pt, float phi) -> float {
298+ return pt * std::cos (phi);
299+ });
300+ DECLARE_SOA_DYNAMIC_COLUMN (Py, py, [](float pt, float phi) -> float {
301+ return pt * std::sin (phi);
302+ });
303+ DECLARE_SOA_DYNAMIC_COLUMN (Pz, pz, [](float pt, float tgl) -> float {
304+ return pt * tgl;
305+ });
306+
307+ // FwdTracksCov columns definitions
308+ DECLARE_SOA_COLUMN (SigmaX, sigmaX, float );
309+ DECLARE_SOA_COLUMN (SigmaY, sigmaY, float );
310+ DECLARE_SOA_COLUMN (SigmaPhi, sigmaPhi, float );
311+ DECLARE_SOA_COLUMN (SigmaTgl, sigmaTgl, float );
312+ DECLARE_SOA_COLUMN (Sigma1Pt, sigma1Pt, float );
313+ DECLARE_SOA_COLUMN (RhoXY, rhoXY, int8_t );
314+ DECLARE_SOA_COLUMN (RhoPhiX, rhoPhiX, int8_t );
315+ DECLARE_SOA_COLUMN (RhoPhiY, rhoPhiY, int8_t );
316+ DECLARE_SOA_COLUMN (RhoTglX, rhoTglX, int8_t );
317+ DECLARE_SOA_COLUMN (RhoTglY, rhoTglY, int8_t );
318+ DECLARE_SOA_COLUMN (RhoTglPhi, rhoTglPhi, int8_t );
319+ DECLARE_SOA_COLUMN (Rho1PtX, rho1PtX, int8_t );
320+ DECLARE_SOA_COLUMN (Rho1PtY, rho1PtY, int8_t );
321+ DECLARE_SOA_COLUMN (Rho1PtPhi, rho1PtPhi, int8_t );
322+ DECLARE_SOA_COLUMN (Rho1PtTgl, rho1PtTgl, int8_t );
323+
324+ DECLARE_SOA_EXPRESSION_COLUMN (CXX, cXX, float , aod::fwdtrack::sigmaX* aod::fwdtrack::sigmaX);
325+ DECLARE_SOA_EXPRESSION_COLUMN (CXY, cXY, float , (aod::fwdtrack::rhoXY / 128 .f) * (aod::fwdtrack::sigmaX * aod::fwdtrack::sigmaY));
326+ DECLARE_SOA_EXPRESSION_COLUMN (CYY, cYY, float , aod::fwdtrack::sigmaY* aod::fwdtrack::sigmaY);
327+ DECLARE_SOA_EXPRESSION_COLUMN (CPhiX, cPhiX, float , (aod::fwdtrack::rhoPhiX / 128 .f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaX));
328+ DECLARE_SOA_EXPRESSION_COLUMN (CPhiY, cPhiY, float , (aod::fwdtrack::rhoPhiY / 128 .f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaY));
329+ DECLARE_SOA_EXPRESSION_COLUMN (CPhiPhi, cPhiPhi, float , aod::fwdtrack::sigmaPhi* aod::fwdtrack::sigmaPhi);
330+ DECLARE_SOA_EXPRESSION_COLUMN (CTglX, cTglX, float , (aod::fwdtrack::rhoTglX / 128 .f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaX));
331+ DECLARE_SOA_EXPRESSION_COLUMN (CTglY, cTglY, float , (aod::fwdtrack::rhoTglY / 128 .f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaY));
332+ DECLARE_SOA_EXPRESSION_COLUMN (CTglPhi, cTglPhi, float , (aod::fwdtrack::rhoTglPhi / 128 .f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaPhi));
333+ DECLARE_SOA_EXPRESSION_COLUMN (CTglTgl, cTglTgl, float , aod::fwdtrack::sigmaTgl* aod::fwdtrack::sigmaTgl);
334+ DECLARE_SOA_EXPRESSION_COLUMN (C1PtY, c1PtY, float , (aod::fwdtrack::rho1PtY / 128 .f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaY));
335+ DECLARE_SOA_EXPRESSION_COLUMN (C1PtX, c1PtX, float , (aod::fwdtrack::rho1PtX / 128 .f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaX));
336+ DECLARE_SOA_EXPRESSION_COLUMN (C1PtPhi, c1PtPhi, float , (aod::fwdtrack::rho1PtPhi / 128 .f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaPhi));
337+ DECLARE_SOA_EXPRESSION_COLUMN (C1PtTgl, c1PtTgl, float , (aod::fwdtrack::rho1PtTgl / 128 .f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaTgl));
338+ DECLARE_SOA_EXPRESSION_COLUMN (C1Pt21Pt2, c1Pt21Pt2, float , aod::fwdtrack::sigma1Pt* aod::fwdtrack::sigma1Pt);
339+ } // namespace fwdtrack
340+
341+ // MFTStandalone tracks
342+ DECLARE_SOA_TABLE_FULL (StoredMFTTracks, " MFTTracks" , " AOD" , " MFTTRACK" ,
343+ o2::soa::Index<>, fwdtrack::CollisionId,
344+ fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
345+ fwdtrack::Signed1Pt, fwdtrack::NClusters,
346+ fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
347+ fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
348+ fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
349+ fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2);
350+
351+ DECLARE_SOA_EXTENDED_TABLE (MFTTracks, StoredMFTTracks, " MFTTRACK" ,
352+ aod::fwdtrack::Pt,
353+ aod::fwdtrack::Eta,
354+ aod::fwdtrack::P);
355+
356+ using MFTTrack = MFTTracks::iterator;
357+
358+ // Tracks including MCH and/or MCH (plus optionally MFT)
359+ DECLARE_SOA_TABLE_FULL (StoredFwdTracks, " FwdTracks" , " AOD" , " FWDTRACK" ,
360+ o2::soa::Index<>, fwdtrack::CollisionId, fwdtrack::BCId, fwdtrack::TrackType,
361+ fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
362+ fwdtrack::Signed1Pt, fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
363+ fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
364+ fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
365+ fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
366+ fwdtrack::Sign<fwdtrack::Signed1Pt>,
367+ fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMID, fwdtrack::Chi2MatchMCHMFT,
368+ fwdtrack::MatchScoreMCHMFT, fwdtrack::MatchMFTTrackID, fwdtrack::MatchMCHTrackID);
369+
370+ DECLARE_SOA_EXTENDED_TABLE (FwdTracks, StoredFwdTracks, " FWDTRACK" ,
371+ aod::fwdtrack::Eta, // NOTE the order is different here than in MFTTracks as table extension has to be unique
372+ aod::fwdtrack::Pt,
373+ aod::fwdtrack::P);
374+
375+ DECLARE_SOA_TABLE_FULL (StoredFwdTracksCov, " FwdTracksCov" , " AOD" , " FWDTRACKCOV" ,
376+ fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
377+ fwdtrack::RhoXY, fwdtrack::RhoPhiY, fwdtrack::RhoPhiX, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
378+ fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
379+
380+ DECLARE_SOA_EXTENDED_TABLE (FwdTracksCov, StoredFwdTracksCov, " FWDTRACKCOV" ,
381+ aod::fwdtrack::CXX,
382+ aod::fwdtrack::CXY,
383+ aod::fwdtrack::CYY,
384+ aod::fwdtrack::CPhiX,
385+ aod::fwdtrack::CPhiY,
386+ aod::fwdtrack::CPhiPhi,
387+ aod::fwdtrack::CTglX,
388+ aod::fwdtrack::CTglY,
389+ aod::fwdtrack::CTglPhi,
390+ aod::fwdtrack::CTglTgl,
391+ aod::fwdtrack::C1PtX,
392+ aod::fwdtrack::C1PtY,
393+ aod::fwdtrack::C1PtPhi,
394+ aod::fwdtrack::C1PtTgl,
395+ aod::fwdtrack::C1Pt21Pt2);
396+
397+ using FwdTrack = FwdTracks::iterator;
398+ using FwdTrackCovFwd = FwdTracksCov::iterator;
399+
400+ using FullFwdTracks = soa::Join<FwdTracks, FwdTracksCov>;
401+ using FullFwdTrack = FullFwdTracks::iterator;
402+
271403namespace unassignedtracks
272404{
273405DECLARE_SOA_INDEX_COLUMN (Collision, collision);
@@ -279,6 +411,17 @@ DECLARE_SOA_TABLE(UnassignedTracks, "AOD", "UNASSIGNEDTRACK",
279411
280412using UnassignedTrack = UnassignedTracks::iterator;
281413
414+ namespace unassignedmfttracks
415+ {
416+ DECLARE_SOA_INDEX_COLUMN (Collision, collision);
417+ DECLARE_SOA_INDEX_COLUMN (MFTTrack, mfttrack);
418+ } // namespace unassignedmfttracks
419+
420+ DECLARE_SOA_TABLE (UnassignedMFTTracks, " AOD" , " UNASSIGNEDMFTTR" ,
421+ unassignedmfttracks::CollisionId, unassignedmfttracks::MFTTrackId);
422+
423+ using UnassignedMFTTrack = UnassignedMFTTracks::iterator;
424+
282425// HMPID information
283426namespace hmpid
284427{
0 commit comments