|
38 | 38 |
|
39 | 39 | #include "Framework/DataTypes.h" |
40 | 40 | // #include "MCHTracking/TrackExtrap.h" |
| 41 | +#include "TGeoGlobalMagField.h" |
| 42 | +#include "Field/MagneticField.h" |
41 | 43 | #include "ReconstructionDataFormats/Track.h" |
42 | 44 | #include "ReconstructionDataFormats/Vertex.h" |
43 | 45 | #include "DCAFitter/DCAFitterN.h" |
@@ -802,19 +804,38 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val |
802 | 804 | values = fgValues; |
803 | 805 | } |
804 | 806 | if constexpr ((fillMap & MuonCov) > 0) { |
805 | | - o2::mch::TrackExtrap::setField(); |
806 | 807 | double chi2 = muon.chi2(); |
807 | 808 | SMatrix5 tpars(muon.x(), muon.y(), muon.phi(), muon.tgl(), muon.signed1Pt()); |
808 | 809 | std::vector<double> v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), |
809 | 810 | muon.cPhiPhi(), muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(), |
810 | 811 | muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()}; |
811 | 812 | SMatrix55 tcovs(v1.begin(), v1.end()); |
812 | 813 | o2::track::TrackParCovFwd fwdtrack{muon.z(), tpars, tcovs, chi2}; |
813 | | - o2::dataformats::GlobalFwdTrack track(fwdtrack); |
814 | | - auto mchTrack = mMatching.FwdtoMCH(track); |
815 | | - o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); |
816 | | - auto propmuon = mMatching.MCHtoFwd(mchTrack); |
817 | | - |
| 814 | + o2::dataformats::GlobalFwdTrack propmuon; |
| 815 | + if (static_cast<int>(muon.trackType()) > 2) { |
| 816 | + o2::mch::TrackExtrap::setField(); |
| 817 | + o2::dataformats::GlobalFwdTrack track; |
| 818 | + track.setParameters(tpars); |
| 819 | + track.setZ(fwdtrack.getZ()); |
| 820 | + track.setCovariances(tcovs); |
| 821 | + auto mchTrack = mMatching.FwdtoMCH(track); |
| 822 | + o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); |
| 823 | + auto proptrack = mMatching.MCHtoFwd(mchTrack); |
| 824 | + propmuon.setParameters(proptrack.getParameters()); |
| 825 | + propmuon.setZ(proptrack.getZ()); |
| 826 | + propmuon.setCovariances(proptrack.getCovariances()); |
| 827 | + |
| 828 | + } else if (static_cast<int>(muon.trackType()) < 2) { |
| 829 | + double centerMFT[3] = {0, 0, -61.4}; |
| 830 | + o2::field::MagneticField* field = static_cast<o2::field::MagneticField*>(TGeoGlobalMagField::Instance()->GetField()); |
| 831 | + auto Bz = field->getBz(centerMFT); // Get field at centre of MFT |
| 832 | + auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ()); |
| 833 | + auto x2x0 = static_cast<float>(geoMan.meanX2X0); |
| 834 | + fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0); |
| 835 | + propmuon.setParameters(fwdtrack.getParameters()); |
| 836 | + propmuon.setZ(fwdtrack.getZ()); |
| 837 | + propmuon.setCovariances(fwdtrack.getCovariances()); |
| 838 | + } |
818 | 839 | values[kPt] = propmuon.getPt(); |
819 | 840 | values[kX] = propmuon.getX(); |
820 | 841 | values[kY] = propmuon.getY(); |
@@ -2022,6 +2043,15 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, |
2022 | 2043 | v1 = {pars1.getPt(), pars1.getEta(), pars1.getPhi(), m1}; |
2023 | 2044 | v2 = {pars2.getPt(), pars2.getEta(), pars2.getPhi(), m2}; |
2024 | 2045 | v12 = v1 + v2; |
| 2046 | + values[kMass] = v12.M(); |
| 2047 | + values[kPt] = v12.Pt(); |
| 2048 | + values[kEta] = v12.Eta(); |
| 2049 | + values[kPhi] = v12.Phi(); |
| 2050 | + values[kRap] = -v12.Rapidity(); |
| 2051 | + values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime(KFPV, v12.M()) / (o2::constants::physics::LightSpeedCm2NS); |
| 2052 | + values[kVertexingTauz] = dzPair2PV * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); |
| 2053 | + values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); |
| 2054 | + values[kVertexingTauzErr] = values[kVertexingLzErr] * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); |
2025 | 2055 |
|
2026 | 2056 | values[kPt1] = pars1.getPt(); |
2027 | 2057 | values[kEta1] = pars1.getEta(); |
|
0 commit comments