@@ -1449,8 +1449,6 @@ class VarManager : public TObject
14491449 template <typename T, typename C>
14501450 static o2::track::TrackParCovFwd PropagateFwd (const T& track, const C& cov, float z);
14511451 template <uint32_t fillMap, typename T, typename C>
1452- static void FillMuonPDca (const T& muon, const C& collision, float * values = nullptr );
1453- template <uint32_t fillMap, typename T, typename C>
14541452 static void FillPropagateMuon (const T& muon, const C& collision, float * values = nullptr );
14551453 template <typename T>
14561454 static void FillBC (T const & bc, float * values = nullptr );
@@ -1837,11 +1835,7 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, const C
18371835 o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift (muon, xShift, yShift, zShift, muon);
18381836 o2::dataformats::GlobalFwdTrack propmuon;
18391837 if (static_cast <int >(muon.trackType ()) > 2 ) {
1840- o2::dataformats::GlobalFwdTrack track;
1841- track.setParameters (fwdtrack.getParameters ());
1842- track.setZ (fwdtrack.getZ ());
1843- track.setCovariances (fwdtrack.getCovariances ());
1844- auto mchTrack = mMatching .FwdtoMCH (track);
1838+ auto mchTrack = mMatching .FwdtoMCH (fwdtrack);
18451839
18461840 if (endPoint == kToVertex ) {
18471841 o2::mch::TrackExtrap::extrapToVertex (mchTrack, collision.posX (), collision.posY (), collision.posZ (), collision.covXX (), collision.covYY ());
@@ -1856,17 +1850,12 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, const C
18561850 o2::mch::TrackExtrap::extrapToVertexWithoutBranson (mchTrack, fgzMatching);
18571851 }
18581852
1859- auto proptrack = mMatching .MCHtoFwd (mchTrack);
1860- propmuon.setParameters (proptrack.getParameters ());
1861- propmuon.setZ (proptrack.getZ ());
1862- propmuon.setCovariances (proptrack.getCovariances ());
1853+ propmuon = mMatching .MCHtoFwd (mchTrack);
18631854
18641855 } else if (static_cast <int >(muon.trackType ()) < 2 ) {
18651856 std::array<double , 3 > dcaInfOrig{999 .f , 999 .f , 999 .f };
18661857 fwdtrack.propagateToDCAhelix (fgMagField, {collision.posX (), collision.posY (), collision.posZ ()}, dcaInfOrig);
1867- propmuon.setParameters (fwdtrack.getParameters ());
1868- propmuon.setZ (fwdtrack.getZ ());
1869- propmuon.setCovariances (fwdtrack.getCovariances ());
1858+ propmuon = fwdtrack;
18701859 }
18711860 return propmuon;
18721861}
@@ -1879,25 +1868,6 @@ o2::track::TrackParCovFwd VarManager::PropagateFwd(const T& track, const C& cov,
18791868 return fwdtrack;
18801869}
18811870
1882- template <uint32_t fillMap, typename T, typename C>
1883- void VarManager::FillMuonPDca (const T& muon, const C& collision, float * values)
1884- {
1885- if (!values) {
1886- values = fgValues;
1887- }
1888-
1889- if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0 ) {
1890-
1891- o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon (muon, collision);
1892- o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon (muon, collision, kToDCA );
1893-
1894- float dcaX = (propmuonAtDCA.getX () - collision.posX ());
1895- float dcaY = (propmuonAtDCA.getY () - collision.posY ());
1896- float dcaXY = std::sqrt (dcaX * dcaX + dcaY * dcaY);
1897- values[kMuonPDca ] = muon.p () * dcaXY;
1898- }
1899- }
1900-
19011871template <uint32_t fillMap, typename T, typename C>
19021872void VarManager::FillPropagateMuon (const T& muon, const C& collision, float * values)
19031873{
@@ -1921,20 +1891,6 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val
19211891 values[kTgl ] = propmuon.getTgl ();
19221892 values[kPhi ] = propmuon.getPhi ();
19231893
1924- // Redo propagation only for muon tracks
1925- // propagation of MFT tracks alredy done in fwdtrack-extention task
1926- if (static_cast <int >(muon.trackType ()) > 2 ) {
1927- o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon (muon, collision, kToDCA );
1928- o2::dataformats::GlobalFwdTrack propmuonAtRabs = PropagateMuon (muon, collision, kToRabs );
1929- float dcaX = (propmuonAtDCA.getX () - collision.posX ());
1930- float dcaY = (propmuonAtDCA.getY () - collision.posY ());
1931- values[kMuonDCAx ] = dcaX;
1932- values[kMuonDCAy ] = dcaY;
1933- double xAbs = propmuonAtRabs.getX ();
1934- double yAbs = propmuonAtRabs.getY ();
1935- values[kMuonRAtAbsorberEnd ] = std::sqrt (xAbs * xAbs + yAbs * yAbs);
1936- }
1937-
19381894 const SMatrix55& cov = propmuon.getCovariances ();
19391895 values[kMuonCXX ] = cov (0 , 0 );
19401896 values[kMuonCXY ] = cov (1 , 0 );
@@ -1971,6 +1927,7 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, co
19711927 double pz = propmuon.getP () * std::cos (o2::constants::math::PIHalf - std::atan (mfttrack.tgl ()));
19721928 double pt = std::sqrt (std::pow (px, 2 ) + std::pow (py, 2 ));
19731929 auto mftprop = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift (mfttrack, xShift, yShift, zShift);
1930+ mftprop.setInvQPt (static_cast <double >(muontrack.sign ()) / pt);
19741931 values[kX ] = mftprop.getX ();
19751932 values[kY ] = mftprop.getY ();
19761933 values[kZ ] = mftprop.getZ ();
@@ -1979,6 +1936,12 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, co
19791936 values[kPz ] = pz;
19801937 values[kEta ] = mftprop.getEta ();
19811938 values[kPhi ] = mftprop.getPhi ();
1939+
1940+ // Helix DCA of the refitted global track w.r.t. the associated collision
1941+ std::array<double , 3 > dca{999 ., 999 ., 999 .};
1942+ mftprop.propagateToDCAhelix (fgMagField, {collision.posX (), collision.posY (), collision.posZ ()}, dca);
1943+ values[kMuonDCAx ] = static_cast <float >(dca[0 ]);
1944+ values[kMuonDCAy ] = static_cast <float >(dca[1 ]);
19821945 }
19831946}
19841947
@@ -2006,6 +1969,12 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack,
20061969 values[kPz ] = globalRefit.getPz ();
20071970 values[kEta ] = globalRefit.getEta ();
20081971 values[kPhi ] = globalRefit.getPhi ();
1972+
1973+ // Helix DCA of the covariance-refitted global track w.r.t. the associated collision
1974+ std::array<double , 3 > dca{999 ., 999 ., 999 .};
1975+ globalRefit.propagateToDCAhelix (fgMagField, {collision.posX (), collision.posY (), collision.posZ ()}, dca);
1976+ values[kMuonDCAx ] = static_cast <float >(dca[0 ]);
1977+ values[kMuonDCAy ] = static_cast <float >(dca[1 ]);
20091978 }
20101979 }
20111980}
@@ -3477,13 +3446,30 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v
34773446 }
34783447 }
34793448 if constexpr ((fillMap & MuonCov) > 0 || (fillMap & MuonCovRealign) > 0 || (fillMap & ReducedMuonCov) > 0 ) {
3449+ float dcaX = 999 .f ;
3450+ float dcaY = 999 .f ;
3451+ if (static_cast <int >(track.trackType ()) <= 2 ) {
3452+ // Global / MCH-MID: helix DCA only (for globals, kMuonPDca is filled from the matched MCH in skimMuons)
3453+ float xShift = 0 .f ;
3454+ float yShift = 0 .f ;
3455+ float zShift = 0 .f ;
3456+ GetFwdShiftForY (track.y (), xShift, yShift, zShift);
3457+ o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift (track, xShift, yShift, zShift, track);
3458+ std::array<double , 3 > dca{999 ., 999 ., 999 .};
3459+ fwdtrack.propagateToDCAhelix (fgMagField, {collision.posX (), collision.posY (), collision.posZ ()}, dca);
3460+ dcaX = static_cast <float >(dca[0 ]);
3461+ dcaY = static_cast <float >(dca[1 ]);
3462+ } else {
3463+ // MCH standalone: DCA and pDCA from MCH extrapolation
3464+ o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon (track, collision, kToDCA );
3465+ dcaX = propmuonAtDCA.getX () - collision.posX ();
3466+ dcaY = propmuonAtDCA.getY () - collision.posY ();
3467+ float dcaXY = std::sqrt (dcaX * dcaX + dcaY * dcaY);
3468+ values[kMuonPDca ] = track.p () * dcaXY;
3469+ }
34803470
3481- o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon (track, collision, kToDCA );
3482-
3483- float dcaX = (propmuonAtDCA.getX () - collision.posX ());
3484- float dcaY = (propmuonAtDCA.getY () - collision.posY ());
3485- float dcaXY = std::sqrt (dcaX * dcaX + dcaY * dcaY);
3486- values[kMuonPDca ] = track.p () * dcaXY;
3471+ values[kMuonDCAx ] = dcaX;
3472+ values[kMuonDCAy ] = dcaY;
34873473 }
34883474}
34893475
0 commit comments