@@ -165,6 +165,7 @@ struct muonQa {
165165
166166 Preslice<aod::FwdTrkCl> perMuon = aod::fwdtrkcl::fwdtrackId;
167167 Preslice<aod::FwdTrackAssoc> fwdtrackIndicesPerCollision = aod::track_association::collisionId;
168+ Preslice<aod::MFTTrackAssoc> mfttrackIndicesPerCollision = aod::track_association::collisionId;
168169
169170 HistogramRegistry registry{" registry" , {}};
170171 HistogramRegistry registryDCA{" registryDCA" , {}};
@@ -653,20 +654,50 @@ struct muonQa {
653654 }
654655 }
655656
656- template <typename TEvent, typename TFwdTracks, typename TMFTTracks, typename TFwdCls, typename AssocMuons>
657- void runMuonQA (TEvent const & collision, aod::BCsWithTimestamps const &, TFwdTracks const & muons, TMFTTracks const & mfts, TMuonCls const & clusters, AssocMuons const & fwdtrackIndices)
657+ template <typename TEvent, typename TFwdTracks, typename TMFTTracks, typename TFwdCls, typename AssocMuons, typename AssocMFTs >
658+ void runMuonQA (TEvent const & collision, aod::BCsWithTimestamps const &, TFwdTracks const & muons, TMFTTracks const & mfts, TMuonCls const & clusters, AssocMuons const & fwdtrackIndices, AssocMFTs const & mfttrackIndices )
658659 {
660+ // Loop over re-associated forward tracks
661+ for (auto const & muonId : fwdtrackIndices) {
662+ auto muon = muonId.template fwdtrack_as <TFwdTracks>();
663+ // Consider only global muons having both MFT and MCH informations
664+ if (static_cast <int >(muon.trackType ()) < 2 ) {
665+ auto mfttrack = muon.template matchMFTTrack_as <TMFTTracks>(); // Get the matched MFT track
666+ auto mchtrack = muon.template matchMCHTrack_as <TFwdTracks>(); // Get the matched MCH/MCH-MID trakc
667+
668+ // Re-do the propagation with muon tracking tools
669+ // Do MFT tracks propagation
670+ double chi2 = muon.chi2 ();
671+ SMatrix5 tpars (muon.x (), muon.y (), muon.phi (), muon.tgl (), muon.signed1Pt ());
672+ std::vector<double > v1{muon.cXX (), muon.cXY (), muon.cYY (), muon.cPhiX (), muon.cPhiY (),
673+ muon.cPhiPhi (), muon.cTglX (), muon.cTglY (), muon.cTglPhi (), muon.cTglTgl (),
674+ muon.c1PtX (), muon.c1PtY (), muon.c1PtPhi (), muon.c1PtTgl (), muon.c1Pt21Pt2 ()};
675+ SMatrix55 tcovs (v1.begin (), v1.end ());
676+ o2::track::TrackParCovFwd fwdtrack{muon.z (), tpars, tcovs, chi2};
677+ o2::dataformats::GlobalFwdTrack propmuon;
678+ double centerMFT[3 ] = {0 , 0 , -61.4 };
679+ o2::field::MagneticField* field = static_cast <o2::field::MagneticField*>(TGeoGlobalMagField::Instance ()->GetField ());
680+ auto Bz = field->getBz (centerMFT); // Get field at centre of MFT
681+ auto geoMan = o2::base::GeometryManager::meanMaterialBudget (muon.x (), muon.y (), muon.z (), collision.posX (), collision.posY (), collision.posZ ());
682+ auto x2x0 = static_cast <float >(geoMan.meanX2X0 );
683+ fwdtrack.propagateToVtxhelixWithMCS (collision.posZ (), {collision.posX (), collision.posY ()}, {collision.covXX (), collision.covYY ()}, Bz, x2x0);
684+ propmuon.setParameters (fwdtrack.getParameters ());
685+ propmuon.setZ (fwdtrack.getZ ());
686+ propmuon.setCovariances (fwdtrack.getCovariances ());
687+ }
688+ }
659689 }
660690
661- void processMuonQa (MyEvents const & collisions, aod::BCsWithTimestamps const & bcs, MyMuonsWithCov const & fwdTracks, MyMFTs const & mftTracks, aod::FwdTrkCls const & muonClusters, aod::FwdTrackAssoc const & fwdtrackIndices)
691+ void processMuonQa (MyEvents const & collisions, aod::BCsWithTimestamps const & bcs, MyMuonsWithCov const & fwdTracks, MyMFTs const & mftTracks, aod::FwdTrkCls const & muonClusters, aod::FwdTrackAssoc const & fwdtrackIndices, aod::MFTTrackAssoc const & mfttrackIndices )
662692 {
663693 // Update CCDB informations
664694 initCCDB (bcs);
665695
666696 // Run over collisions
667697 for (auto & collision : collisions) {
668698 auto muonIdsThisCollision = fwdtrackIndices.sliceBy (fwdtrackIndicesPerCollision, collision.globalIndex ());
669- runMuonQA (collision, bcs, fwdTracks, mftTracks, muonClusters, muonIdsThisCollision);
699+ auto mftIdsThisCollision = mfttrackIndices.sliceBy (mfttrackIndicesPerCollision, collision.globalIndex ());
700+ runMuonQA (collision, bcs, fwdTracks, mftTracks, muonClusters, muonIdsThisCollision, mftIdsThisCollision);
670701 }
671702 }
672703 PROCESS_SWITCH (muonQa, processMuonQa, " Process to run muon QA" , true );
0 commit comments