From 3dd984fbbb32dec79f94f1669bbddc102c905613 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Thu, 2 Nov 2023 15:31:33 +0100 Subject: [PATCH 01/17] Add function to propagate muon tracks through absorber to PV --- PWGDQ/Core/VarManager.h | 79 ++++++++++++++++++++++++++++++ PWGDQ/TableProducer/tableMaker.cxx | 28 +++++++---- 2 files changed, 97 insertions(+), 10 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index dc30d826680..5023d1b27bc 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -36,6 +36,9 @@ #include "Math/GenVector/Boost.h" #include "Framework/DataTypes.h" +#include "MCHTracking/TrackExtrap.h" +#include "ReconstructionDataFormats/GlobalFwdTrack.h" +#include "GlobalTracking/MatchGlobalFwd.h" #include "ReconstructionDataFormats/Track.h" #include "ReconstructionDataFormats/Vertex.h" #include "DCAFitter/DCAFitterN.h" @@ -194,9 +197,13 @@ class VarManager : public TObject kNEventWiseVariables, // Basic track/muon/pair wise variables + kX, + kY, + kZ, kPt, kInvPt, kEta, + kTgl, kPhi, kP, kPx, @@ -309,9 +316,19 @@ class VarManager : public TObject kMuonChi2MatchMCHMFT, kMuonMatchScoreMCHMFT, kMuonCXX, + kMuonCYX, kMuonCYY, + kMuonCPhiX, + kMuonCPhiY, kMuonCPhiPhi, + kMuonCTglX, + kMuonCTglY, + kMuonCTglPhi, kMuonCTglTgl, + kMuonC1Pt2X, + kMuonC1Pt2Y, + kMuonC1Pt2Phi, + kMuonC1Pt2Tgl, kMuonC1Pt21Pt2, kNMuonTrackVariables, kMuonTrackType, @@ -558,6 +575,8 @@ class VarManager : public TObject return (1.0 / harm) * TMath::ATan(qnya / qnxa); }; + template + static void FillpropagateMuon(const T& muon, const C& collision, float* values = nullptr); template static void FillEvent(T const& event, float* values = nullptr); template @@ -649,6 +668,7 @@ class VarManager : public TObject static o2::vertexing::DCAFitterN<3> fgFitterThreeProngBarrel; static o2::vertexing::FwdDCAFitterN<2> fgFitterTwoProngFwd; static o2::vertexing::FwdDCAFitterN<3> fgFitterThreeProngFwd; + static o2::globaltracking::MatchGlobalFwd mMatching; static std::map fgCalibs; // map of calibration histograms static bool fgRunTPCPostCalibration[4]; // 0-electron, 1-pion, 2-kaon, 3-proton @@ -743,6 +763,51 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) return kfpVertex; } +template +void VarManager::FillpropagateMuon(const T& muon, const C& collision, float* values) +{ + if constexpr ((fillMap & MuonCov) > 0) { + o2::mch::TrackExtrap::setField(); + double chi2 = muon.chi2(); + SMatrix5 tpars(muon.x(), muon.y(), muon.phi(), muon.tgl(), muon.signed1Pt()); + std::vector v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), + muon.cPhiPhi(), muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(), + muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()}; + SMatrix55 tcovs(v1.begin(), v1.end()); + o2::track::TrackParCovFwd fwdtrack{muon.z(), tpars, tcovs, chi2}; + o2::dataformats::GlobalFwdTrack track{fwdtrack}; + auto mchTrack = mMatching.FwdtoMCH(track); + o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); + auto propmuon = mMatching.MCHtoFwd(mchTrack); + values[kPt] = propmuon.getPt(); + + values[kX] = propmuon.getX(); + values[kY] = propmuon.getY(); + values[kZ] = propmuon.getZ(); + values[kEta] = propmuon.getEta(); + values[kTgl] = propmuon.getTgl(); + values[kPhi] = propmuon.getPhi(); + + SMatrix55 cov = propmuon.getCovariances(); + + values[kMuonCXX] = cov(0, 0); + values[kMuonCYX] = cov(1, 0); + values[kMuonCYY] = cov(1, 1); + values[kMuonCPhiX] = cov(2, 0); + values[kMuonCPhiY] = cov(2, 1); + values[kMuonCPhiPhi] = cov(2, 2); + values[kMuonCTglX] = cov(3, 0); + values[kMuonCTglY] = cov(3, 1); + values[kMuonCTglPhi] = cov(3, 2); + values[kMuonCTglTgl] = cov(3, 3); + values[kMuonC1Pt2X] = cov(4, 0); + values[kMuonC1Pt2Y] = cov(4, 1); + values[kMuonC1Pt2Phi] = cov(4, 2); + values[kMuonC1Pt2Tgl] = cov(4, 3); + values[kMuonC1Pt21Pt2] = cov(4, 4); + } +} + template void VarManager::FillEvent(T const& event, float* values) { @@ -1268,10 +1333,24 @@ void VarManager::FillTrack(T const& track, float* values) } // Quantities based on the muon covariance table if constexpr ((fillMap & ReducedMuonCov) > 0 || (fillMap & MuonCov) > 0) { + values[kX] = track.x(); + values[kY] = track.y(); + values[kZ] = track.z(); + values[kTgl] = track.tgl(); values[kMuonCXX] = track.cXX(); + values[kMuonCYX] = track.cXY(); values[kMuonCYY] = track.cYY(); + values[kMuonCPhiX] = track.cPhiX(); + values[kMuonCPhiY] = track.cPhiY(); values[kMuonCPhiPhi] = track.cPhiPhi(); + values[kMuonCTglX] = track.cTglX(); + values[kMuonCTglY] = track.cTglY(); + values[kMuonCTglPhi] = track.cTglPhi(); values[kMuonCTglTgl] = track.cTglTgl(); + values[kMuonC1Pt2X] = track.c1PtX(); + values[kMuonC1Pt2Y] = track.c1PtY(); + values[kMuonC1Pt2Phi] = track.c1PtPhi(); + values[kMuonC1Pt2Tgl] = track.c1PtTgl(); values[kMuonC1Pt21Pt2] = track.c1Pt21Pt2(); } diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index 5e76a91ae84..37e225664b9 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -163,6 +163,8 @@ struct TableMaker { Configurable fConfigSaveElectronSample{"cfgSaveElectronSample", false, "If true, only save electron sample"}; Configurable fConfigDummyRunlist{"cfgDummyRunlist", false, "If true, use dummy runlist"}; Configurable fConfigInitRunNumber{"cfgInitRunNumber", 543215, "Initial run number used in run by run checks"}; + Configurable fPropMuon{"cfgPropMuon", false, "Propgate muon tracks through absorber"}; + Service fCCDB; AnalysisCompositeCut* fEventCut; //! Event selection cut @@ -603,6 +605,9 @@ struct TableMaker { trackTempFilterMap = uint8_t(0); VarManager::FillTrack(muon); + if (fPropMuon) { + VarManager::FillpropagateMuon(muon, collision); + } if (fDoDetailedQA) { fHistMan->FillHistClass("Muons_BeforeCuts", VarManager::fgValues); if (fIsAmbiguous && isAmbiguous == 1) { @@ -663,7 +668,7 @@ struct TableMaker { } } - muonBasic(event.lastIndex(), trackFilteringTag, muon.pt(), muon.eta(), muon.phi(), muon.sign(), isAmbiguous); + muonBasic(event.lastIndex(), trackFilteringTag, VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], muon.sign(), isAmbiguous); muonExtra(muon.nClusters(), muon.pDca(), muon.rAtAbsorberEnd(), muon.chi2(), muon.chi2MatchMCHMID(), muon.chi2MatchMCHMFT(), muon.matchScoreMCHMFT(), newMatchIndex.find(muon.index())->second, newMFTMatchIndex.find(muon.index())->second, muon.mchBitMap(), muon.midBitMap(), @@ -671,10 +676,10 @@ struct TableMaker { muon.trackTime(), muon.trackTimeRes()); muonInfo(muon.collisionId(), collision.posX(), collision.posY(), collision.posZ()); if constexpr (static_cast(TMuonFillMap & VarManager::ObjTypes::MuonCov)) { - muonCov(muon.x(), muon.y(), muon.z(), muon.phi(), muon.tgl(), muon.signed1Pt(), - muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), muon.cPhiPhi(), - muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(), muon.c1PtX(), muon.c1PtY(), - muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()); + muonCov(VarManager::fgValues[VarManager::kX], VarManager::fgValues[VarManager::kY], VarManager::fgValues[VarManager::kZ], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kTgl], muon.sign() / VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCYX], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], + VarManager::fgValues[VarManager::kMuonCTglX], VarManager::fgValues[VarManager::kMuonCTglY], VarManager::fgValues[VarManager::kMuonCTglPhi], VarManager::fgValues[VarManager::kMuonCTglTgl], VarManager::fgValues[VarManager::kMuonC1Pt2X], VarManager::fgValues[VarManager::kMuonC1Pt2Y], + VarManager::fgValues[VarManager::kMuonC1Pt2Phi], VarManager::fgValues[VarManager::kMuonC1Pt2Tgl], VarManager::fgValues[VarManager::kMuonC1Pt21Pt2]); } } } // end if constexpr (TMuonFillMap) @@ -924,6 +929,9 @@ struct TableMaker { trackTempFilterMap = uint8_t(0); VarManager::FillTrack(muon); + if (fPropMuon) { + VarManager::FillpropagateMuon(muon, collision); + } if (fDoDetailedQA) { fHistMan->FillHistClass("Muons_BeforeCuts", VarManager::fgValues); if (fIsAmbiguous && isAmbiguous == 1) { @@ -970,7 +978,7 @@ struct TableMaker { } } - muonBasic(event.lastIndex(), trackFilteringTag, muon.pt(), muon.eta(), muon.phi(), muon.sign(), isAmbiguous); + muonBasic(event.lastIndex(), trackFilteringTag, VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], muon.sign(), isAmbiguous); muonExtra(muon.nClusters(), muon.pDca(), muon.rAtAbsorberEnd(), muon.chi2(), muon.chi2MatchMCHMID(), muon.chi2MatchMCHMFT(), muon.matchScoreMCHMFT(), newMatchIndex.find(muon.index())->second, -1, muon.mchBitMap(), muon.midBitMap(), @@ -978,10 +986,10 @@ struct TableMaker { muon.trackTime(), muon.trackTimeRes()); muonInfo(muon.collisionId(), collision.posX(), collision.posY(), collision.posZ()); if constexpr (static_cast(TMuonFillMap & VarManager::ObjTypes::MuonCov)) { - muonCov(muon.x(), muon.y(), muon.z(), muon.phi(), muon.tgl(), muon.signed1Pt(), - muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), muon.cPhiPhi(), - muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(), muon.c1PtX(), muon.c1PtY(), - muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()); + muonCov(VarManager::fgValues[VarManager::kX], VarManager::fgValues[VarManager::kY], VarManager::fgValues[VarManager::kZ], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kTgl], muon.sign() / VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCYX], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], + VarManager::fgValues[VarManager::kMuonCTglX], VarManager::fgValues[VarManager::kMuonCTglY], VarManager::fgValues[VarManager::kMuonCTglPhi], VarManager::fgValues[VarManager::kMuonCTglTgl], VarManager::fgValues[VarManager::kMuonC1Pt2X], VarManager::fgValues[VarManager::kMuonC1Pt2Y], + VarManager::fgValues[VarManager::kMuonC1Pt2Phi], VarManager::fgValues[VarManager::kMuonC1Pt2Tgl], VarManager::fgValues[VarManager::kMuonC1Pt21Pt2]); } } } // end if constexpr (TMuonFillMap) From ad0825bcf848bc81768566ea5e635b37c173a8c9 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Thu, 2 Nov 2023 20:17:33 +0100 Subject: [PATCH 02/17] Format --- PWGDQ/Core/VarManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 5023d1b27bc..eb96a765cef 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -779,8 +779,8 @@ void VarManager::FillpropagateMuon(const T& muon, const C& collision, float* val auto mchTrack = mMatching.FwdtoMCH(track); o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); auto propmuon = mMatching.MCHtoFwd(mchTrack); - values[kPt] = propmuon.getPt(); + values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); values[kY] = propmuon.getY(); values[kZ] = propmuon.getZ(); From f22bc425971e061fc322811d4b7c61e69a8f73a6 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 3 Nov 2023 08:32:59 +0100 Subject: [PATCH 03/17] Fix --- PWGDQ/Core/VarManager.h | 1 - 1 file changed, 1 deletion(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index eb96a765cef..992c275268c 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -789,7 +789,6 @@ void VarManager::FillpropagateMuon(const T& muon, const C& collision, float* val values[kPhi] = propmuon.getPhi(); SMatrix55 cov = propmuon.getCovariances(); - values[kMuonCXX] = cov(0, 0); values[kMuonCYX] = cov(1, 0); values[kMuonCYY] = cov(1, 1); From 8cc8dfbeab27bfe9725b6be6eff21d2b8a2f4b15 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Tue, 7 Nov 2023 13:31:39 +0100 Subject: [PATCH 04/17] Fix --- PWGDQ/Core/VarManager.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 992c275268c..9ca5f44560d 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -36,8 +36,6 @@ #include "Math/GenVector/Boost.h" #include "Framework/DataTypes.h" -#include "MCHTracking/TrackExtrap.h" -#include "ReconstructionDataFormats/GlobalFwdTrack.h" #include "GlobalTracking/MatchGlobalFwd.h" #include "ReconstructionDataFormats/Track.h" #include "ReconstructionDataFormats/Vertex.h" @@ -576,7 +574,7 @@ class VarManager : public TObject }; template - static void FillpropagateMuon(const T& muon, const C& collision, float* values = nullptr); + static void FillPropagateMuon(const T& muon, const C& collision, float* values = nullptr); template static void FillEvent(T const& event, float* values = nullptr); template @@ -764,7 +762,7 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) } template -void VarManager::FillpropagateMuon(const T& muon, const C& collision, float* values) +void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* values) { if constexpr ((fillMap & MuonCov) > 0) { o2::mch::TrackExtrap::setField(); From 6c2ae578658a68c3b8d0dff56afd4e70d21a43ac Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Tue, 7 Nov 2023 13:46:52 +0100 Subject: [PATCH 05/17] Fix typo --- PWGDQ/TableProducer/tableMaker.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index 37e225664b9..daae3266abb 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -606,7 +606,7 @@ struct TableMaker { VarManager::FillTrack(muon); if (fPropMuon) { - VarManager::FillpropagateMuon(muon, collision); + VarManager::FillPropagateMuon(muon, collision); } if (fDoDetailedQA) { fHistMan->FillHistClass("Muons_BeforeCuts", VarManager::fgValues); @@ -930,7 +930,7 @@ struct TableMaker { VarManager::FillTrack(muon); if (fPropMuon) { - VarManager::FillpropagateMuon(muon, collision); + VarManager::FillPropagateMuon(muon, collision); } if (fDoDetailedQA) { fHistMan->FillHistClass("Muons_BeforeCuts", VarManager::fgValues); From e6f2130502afbaaf71bca6a1285ca2441e528c6d Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Thu, 9 Nov 2023 18:22:57 +0100 Subject: [PATCH 06/17] Fixing libraries --- PWGDQ/Core/CMakeLists.txt | 2 +- PWGDQ/Core/VarManager.cxx | 1 + PWGDQ/Core/VarManager.h | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/PWGDQ/Core/CMakeLists.txt b/PWGDQ/Core/CMakeLists.txt index 710e9a57283..5ce05ab82d1 100644 --- a/PWGDQ/Core/CMakeLists.txt +++ b/PWGDQ/Core/CMakeLists.txt @@ -21,7 +21,7 @@ o2physics_add_library(PWGDQCore AnalysisCompositeCut.cxx MCProng.cxx MCSignal.cxx - PUBLIC_LINK_LIBRARIES O2::Framework O2::DCAFitter O2Physics::AnalysisCore KFParticle::KFParticle) + PUBLIC_LINK_LIBRARIES O2::Framework O2::DCAFitter O2::GlobalTracking O2Physics::AnalysisCore KFParticle::KFParticle) o2physics_target_root_dictionary(PWGDQCore HEADERS AnalysisCut.h diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index 77156e1aa1d..8e1e75412bf 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -33,6 +33,7 @@ o2::vertexing::DCAFitterN<2> VarManager::fgFitterTwoProngBarrel; o2::vertexing::DCAFitterN<3> VarManager::fgFitterThreeProngBarrel; o2::vertexing::FwdDCAFitterN<2> VarManager::fgFitterTwoProngFwd; o2::vertexing::FwdDCAFitterN<3> VarManager::fgFitterThreeProngFwd; +o2::globaltracking::MatchGlobalFwd VarManager::mMatching; std::map VarManager::fgCalibs; bool VarManager::fgRunTPCPostCalibration[4] = {false, false, false, false}; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 9ca5f44560d..882b25228e1 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -36,7 +36,7 @@ #include "Math/GenVector/Boost.h" #include "Framework/DataTypes.h" -#include "GlobalTracking/MatchGlobalFwd.h" +//#include "MCHTracking/TrackExtrap.h" #include "ReconstructionDataFormats/Track.h" #include "ReconstructionDataFormats/Vertex.h" #include "DCAFitter/DCAFitterN.h" @@ -47,6 +47,7 @@ #include "Math/SMatrix.h" #include "ReconstructionDataFormats/TrackFwd.h" #include "DCAFitter/FwdDCAFitterN.h" +#include "GlobalTracking/MatchGlobalFwd.h" #include "CommonConstants/PhysicsConstants.h" #include "KFParticle.h" From 14c905dd4487ad4fa8325a0a0e501d9ac3611186 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Thu, 9 Nov 2023 18:24:23 +0100 Subject: [PATCH 07/17] Clang format --- PWGDQ/Core/VarManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 882b25228e1..98e7b1d6242 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -36,7 +36,7 @@ #include "Math/GenVector/Boost.h" #include "Framework/DataTypes.h" -//#include "MCHTracking/TrackExtrap.h" +// #include "MCHTracking/TrackExtrap.h" #include "ReconstructionDataFormats/Track.h" #include "ReconstructionDataFormats/Vertex.h" #include "DCAFitter/DCAFitterN.h" From f987b366fbae165037e409759eaa1f95337dcaf7 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Thu, 9 Nov 2023 23:59:35 +0100 Subject: [PATCH 08/17] Missing array definition --- PWGDQ/Core/VarManager.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 98e7b1d6242..458c6e4bbaf 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -765,6 +765,9 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) template void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* values) { + if (!values) { + values = fgValues; + } if constexpr ((fillMap & MuonCov) > 0) { o2::mch::TrackExtrap::setField(); double chi2 = muon.chi2(); From 1d597e295dabc89cc7f5f4881f6417406f8e9a98 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 10 Nov 2023 14:55:28 +0100 Subject: [PATCH 09/17] Retrieving geometry from ccdb --- PWGDQ/TableProducer/tableMaker.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index daae3266abb..e93d3b4e211 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -49,6 +49,12 @@ #include "MathUtils/Primitive2D.h" #include "DataFormatsGlobalTracking/RecoContainer.h" #include "Common/DataModel/CollisionAssociationTables.h" +#include "DataFormatsParameters/GRPMagField.h" +#include "Field/MagneticField.h" +#include "TGeoGlobalMagField.h" +#include "DetectorsBase/Propagator.h" +#include "DetectorsBase/GeometryManager.h" + using std::cout; using std::endl; @@ -164,6 +170,9 @@ struct TableMaker { Configurable fConfigDummyRunlist{"cfgDummyRunlist", false, "If true, use dummy runlist"}; Configurable fConfigInitRunNumber{"cfgInitRunNumber", 543215, "Initial run number used in run by run checks"}; Configurable fPropMuon{"cfgPropMuon", false, "Propgate muon tracks through absorber"}; + Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; + Service fCCDB; @@ -176,6 +185,7 @@ struct TableMaker { Preslice trackIndicesPerCollision = aod::track_association::collisionId; Preslice fwdtrackIndicesPerCollision = aod::track_association::collisionId; + Service ccdb; bool fDoDetailedQA = false; // Bool to set detailed QA true, if QA is set true int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc. @@ -187,6 +197,15 @@ struct TableMaker { void init(o2::framework::InitContext& context) { DefineCuts(); + ccdb->setURL(fConfigCcdbUrl); + ccdb->setCaching(true); + ccdb->setLocalObjectValidityChecking(); + if (fPropMuon){ + if (!o2::base::GeometryManager::isGeometryLoaded()) { + ccdb->get(geoPath); + } + } + VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); From ff2991e7b4810738c5b0aee52501da27ca282da6 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 10 Nov 2023 14:59:35 +0100 Subject: [PATCH 10/17] Clang format --- PWGDQ/TableProducer/tableMaker.cxx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index e93d3b4e211..9b11323e756 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -55,7 +55,6 @@ #include "DetectorsBase/Propagator.h" #include "DetectorsBase/GeometryManager.h" - using std::cout; using std::endl; @@ -173,7 +172,6 @@ struct TableMaker { Configurable geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Service fCCDB; AnalysisCompositeCut* fEventCut; //! Event selection cut @@ -200,13 +198,12 @@ struct TableMaker { ccdb->setURL(fConfigCcdbUrl); ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); - if (fPropMuon){ + if (fPropMuon) { if (!o2::base::GeometryManager::isGeometryLoaded()) { ccdb->get(geoPath); } } - VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); From b2fab9e56f324e73fd7a0e055f11fcb4161287f2 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Wed, 15 Nov 2023 21:35:17 +0100 Subject: [PATCH 11/17] Fixing retrieving of ccdb object --- PWGDQ/TableProducer/tableMaker.cxx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index 9b11323e756..6c0f2855eb4 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -174,6 +174,8 @@ struct TableMaker { Service fCCDB; + o2::parameters::GRPMagField* grpmag = nullptr; + AnalysisCompositeCut* fEventCut; //! Event selection cut std::vector fTrackCuts; //! Barrel track cuts std::vector fMuonCuts; //! Muon track cuts @@ -337,7 +339,8 @@ struct TableMaker { void fullSkimming(TEvent const& collision, aod::BCsWithTimestamps const&, TTracks const& tracksBarrel, TMuons const& tracksMuon, TAmbiTracks const& ambiTracksMid, TAmbiMuons const& ambiTracksFwd, TMFTTracks const& mftTracks = nullptr) { auto bc = collision.template bc_as(); - if (fConfigComputeTPCpostCalib && fCurrentRun != bc.runNumber()) { + if (fCurrentRun != bc.runNumber()) { + if (fConfigComputeTPCpostCalib) { auto calibList = fCCDB->getForTimeStamp(fConfigCcdbPathTPC.value, bc.timestamp()); VarManager::SetCalibrationObject(VarManager::kTPCElectronMean, calibList->FindObject("mean_map_electron")); VarManager::SetCalibrationObject(VarManager::kTPCElectronSigma, calibList->FindObject("sigma_map_electron")); @@ -349,6 +352,11 @@ struct TableMaker { VarManager::SetCalibrationObject(VarManager::kTPCKaonMean, calibList->FindObject("mean_map_kaon")); VarManager::SetCalibrationObject(VarManager::kTPCKaonSigma, calibList->FindObject("sigma_map_kaon")); } + } + grpmag = ccdb->getForTimeStamp(grpmagPath, bc.timestamp()); + if (grpmag != nullptr) { + o2::base::Propagator::initFieldFromGRP(grpmag); + } fCurrentRun = bc.runNumber(); } From d7d43ef94157b337e5a2d81a413ebe1b42b0cf2d Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Wed, 15 Nov 2023 21:38:53 +0100 Subject: [PATCH 12/17] Calng format --- PWGDQ/TableProducer/tableMaker.cxx | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index 6c0f2855eb4..e1a635c5b4e 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -340,23 +340,23 @@ struct TableMaker { { auto bc = collision.template bc_as(); if (fCurrentRun != bc.runNumber()) { - if (fConfigComputeTPCpostCalib) { - auto calibList = fCCDB->getForTimeStamp(fConfigCcdbPathTPC.value, bc.timestamp()); - VarManager::SetCalibrationObject(VarManager::kTPCElectronMean, calibList->FindObject("mean_map_electron")); - VarManager::SetCalibrationObject(VarManager::kTPCElectronSigma, calibList->FindObject("sigma_map_electron")); - VarManager::SetCalibrationObject(VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); - VarManager::SetCalibrationObject(VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); - VarManager::SetCalibrationObject(VarManager::kTPCProtonMean, calibList->FindObject("mean_map_proton")); - VarManager::SetCalibrationObject(VarManager::kTPCProtonSigma, calibList->FindObject("sigma_map_proton")); - if (fConfigComputeTPCpostCalibKaon) { - VarManager::SetCalibrationObject(VarManager::kTPCKaonMean, calibList->FindObject("mean_map_kaon")); - VarManager::SetCalibrationObject(VarManager::kTPCKaonSigma, calibList->FindObject("sigma_map_kaon")); + if (fConfigComputeTPCpostCalib) { + auto calibList = fCCDB->getForTimeStamp(fConfigCcdbPathTPC.value, bc.timestamp()); + VarManager::SetCalibrationObject(VarManager::kTPCElectronMean, calibList->FindObject("mean_map_electron")); + VarManager::SetCalibrationObject(VarManager::kTPCElectronSigma, calibList->FindObject("sigma_map_electron")); + VarManager::SetCalibrationObject(VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); + VarManager::SetCalibrationObject(VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); + VarManager::SetCalibrationObject(VarManager::kTPCProtonMean, calibList->FindObject("mean_map_proton")); + VarManager::SetCalibrationObject(VarManager::kTPCProtonSigma, calibList->FindObject("sigma_map_proton")); + if (fConfigComputeTPCpostCalibKaon) { + VarManager::SetCalibrationObject(VarManager::kTPCKaonMean, calibList->FindObject("mean_map_kaon")); + VarManager::SetCalibrationObject(VarManager::kTPCKaonSigma, calibList->FindObject("sigma_map_kaon")); + } + } + grpmag = ccdb->getForTimeStamp(grpmagPath, bc.timestamp()); + if (grpmag != nullptr) { + o2::base::Propagator::initFieldFromGRP(grpmag); } - } - grpmag = ccdb->getForTimeStamp(grpmagPath, bc.timestamp()); - if (grpmag != nullptr) { - o2::base::Propagator::initFieldFromGRP(grpmag); - } fCurrentRun = bc.runNumber(); } From aa80badd436f504d23806f7ef678b653f0310f5d Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 17 Nov 2023 16:22:19 +0100 Subject: [PATCH 13/17] Fixing covariance name --- PWGDQ/Core/VarManager.h | 6 +++--- PWGDQ/TableProducer/tableMaker.cxx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 458c6e4bbaf..7346fb40679 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -315,7 +315,7 @@ class VarManager : public TObject kMuonChi2MatchMCHMFT, kMuonMatchScoreMCHMFT, kMuonCXX, - kMuonCYX, + kMuonCXY, kMuonCYY, kMuonCPhiX, kMuonCPhiY, @@ -792,7 +792,7 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val SMatrix55 cov = propmuon.getCovariances(); values[kMuonCXX] = cov(0, 0); - values[kMuonCYX] = cov(1, 0); + values[kMuonCXY] = cov(1, 0); values[kMuonCYY] = cov(1, 1); values[kMuonCPhiX] = cov(2, 0); values[kMuonCPhiY] = cov(2, 1); @@ -1339,7 +1339,7 @@ void VarManager::FillTrack(T const& track, float* values) values[kZ] = track.z(); values[kTgl] = track.tgl(); values[kMuonCXX] = track.cXX(); - values[kMuonCYX] = track.cXY(); + values[kMuonCXY] = track.cXY(); values[kMuonCYY] = track.cYY(); values[kMuonCPhiX] = track.cPhiX(); values[kMuonCPhiY] = track.cPhiY(); diff --git a/PWGDQ/TableProducer/tableMaker.cxx b/PWGDQ/TableProducer/tableMaker.cxx index e1a635c5b4e..9a427d02a30 100644 --- a/PWGDQ/TableProducer/tableMaker.cxx +++ b/PWGDQ/TableProducer/tableMaker.cxx @@ -701,7 +701,7 @@ struct TableMaker { muonInfo(muon.collisionId(), collision.posX(), collision.posY(), collision.posZ()); if constexpr (static_cast(TMuonFillMap & VarManager::ObjTypes::MuonCov)) { muonCov(VarManager::fgValues[VarManager::kX], VarManager::fgValues[VarManager::kY], VarManager::fgValues[VarManager::kZ], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kTgl], muon.sign() / VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCYX], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], + VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCXY], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], VarManager::fgValues[VarManager::kMuonCTglX], VarManager::fgValues[VarManager::kMuonCTglY], VarManager::fgValues[VarManager::kMuonCTglPhi], VarManager::fgValues[VarManager::kMuonCTglTgl], VarManager::fgValues[VarManager::kMuonC1Pt2X], VarManager::fgValues[VarManager::kMuonC1Pt2Y], VarManager::fgValues[VarManager::kMuonC1Pt2Phi], VarManager::fgValues[VarManager::kMuonC1Pt2Tgl], VarManager::fgValues[VarManager::kMuonC1Pt21Pt2]); } @@ -1011,7 +1011,7 @@ struct TableMaker { muonInfo(muon.collisionId(), collision.posX(), collision.posY(), collision.posZ()); if constexpr (static_cast(TMuonFillMap & VarManager::ObjTypes::MuonCov)) { muonCov(VarManager::fgValues[VarManager::kX], VarManager::fgValues[VarManager::kY], VarManager::fgValues[VarManager::kZ], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kTgl], muon.sign() / VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCYX], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], + VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCXY], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi], VarManager::fgValues[VarManager::kMuonCTglX], VarManager::fgValues[VarManager::kMuonCTglY], VarManager::fgValues[VarManager::kMuonCTglPhi], VarManager::fgValues[VarManager::kMuonCTglTgl], VarManager::fgValues[VarManager::kMuonC1Pt2X], VarManager::fgValues[VarManager::kMuonC1Pt2Y], VarManager::fgValues[VarManager::kMuonC1Pt2Phi], VarManager::fgValues[VarManager::kMuonC1Pt2Tgl], VarManager::fgValues[VarManager::kMuonC1Pt21Pt2]); } From 3b996feb4bac79051a51db2fe2d8778b48012e29 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Wed, 6 Dec 2023 16:35:57 +0100 Subject: [PATCH 14/17] PWGDQ: Adding propagation for MCH-MID tracks and filling flow variables in dilepton flat table --- PWGDQ/Core/VarManager.h | 20 +++++++++++++++++--- PWGDQ/DataModel/ReducedInfoTables.h | 6 +++++- PWGDQ/Tasks/dqEfficiency.cxx | 2 +- PWGDQ/Tasks/tableReader.cxx | 17 +++++++++-------- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 1f9005519f8..ecfe76aab28 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -38,6 +38,8 @@ #include "Framework/DataTypes.h" // #include "MCHTracking/TrackExtrap.h" +#include "TGeoGlobalMagField.h" +#include "Field/MagneticField.h" #include "ReconstructionDataFormats/Track.h" #include "ReconstructionDataFormats/Vertex.h" #include "DCAFitter/DCAFitterN.h" @@ -801,7 +803,6 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val values = fgValues; } if constexpr ((fillMap & MuonCov) > 0) { - o2::mch::TrackExtrap::setField(); double chi2 = muon.chi2(); SMatrix5 tpars(muon.x(), muon.y(), muon.phi(), muon.tgl(), muon.signed1Pt()); std::vector v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), @@ -809,11 +810,24 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()}; SMatrix55 tcovs(v1.begin(), v1.end()); o2::track::TrackParCovFwd fwdtrack{muon.z(), tpars, tcovs, chi2}; + o2::dataformats::GlobalFwdTrack propmuon; + if (static_cast(muon.trackType()) > 2){ + o2::mch::TrackExtrap::setField(); o2::dataformats::GlobalFwdTrack track(fwdtrack); auto mchTrack = mMatching.FwdtoMCH(track); o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); - auto propmuon = mMatching.MCHtoFwd(mchTrack); - + auto proptrack = mMatching.MCHtoFwd(mchTrack); + propmuon = proptrack; + + }else if (static_cast(muon.trackType()) < 2){ + double centerMFT[3] = {0, 0, -61.4}; + o2::field::MagneticField* field = static_cast(TGeoGlobalMagField::Instance()->GetField()); + auto Bz = field->getBz(centerMFT); // Get field at centre of MFT + auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ()); + auto x2x0 = static_cast(geoMan.meanX2X0); + fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0); + propmuon = fwdtrack; + } values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); values[kY] = propmuon.getY(); diff --git a/PWGDQ/DataModel/ReducedInfoTables.h b/PWGDQ/DataModel/ReducedInfoTables.h index 7146ed9810c..263d61fa275 100644 --- a/PWGDQ/DataModel/ReducedInfoTables.h +++ b/PWGDQ/DataModel/ReducedInfoTables.h @@ -514,7 +514,11 @@ DECLARE_SOA_TABLE(DimuonsAll, "AOD", "RTDIMUONALL", //! dilepton_track_index::PtMC2, dilepton_track_index::EtaMC2, dilepton_track_index::PhiMC2, dilepton_track_index::EMC2, dilepton_track_index::Vx1, dilepton_track_index::Vy1, dilepton_track_index::Vz1, dilepton_track_index::Vt1, dilepton_track_index::Vx2, dilepton_track_index::Vy2, dilepton_track_index::Vz2, dilepton_track_index::Vt2, - dilepton_track_index::IsAmbig1, dilepton_track_index::IsAmbig2); + dilepton_track_index::IsAmbig1, dilepton_track_index::IsAmbig2, + reducedpair::U2Q2, + reducedpair::U3Q3, + reducedpair::Cos2DeltaPhi, + reducedpair::Cos3DeltaPhi); using Dilepton = Dileptons::iterator; using DileptonExtra = DileptonsExtra::iterator; diff --git a/PWGDQ/Tasks/dqEfficiency.cxx b/PWGDQ/Tasks/dqEfficiency.cxx index 00d9a08cb5c..61eae0a79b1 100644 --- a/PWGDQ/Tasks/dqEfficiency.cxx +++ b/PWGDQ/Tasks/dqEfficiency.cxx @@ -797,7 +797,7 @@ struct AnalysisSameEventPairing { t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(), t2.reducedMCTrack().e(), t1.reducedMCTrack().vx(), t1.reducedMCTrack().vy(), t1.reducedMCTrack().vz(), t1.reducedMCTrack().vt(), t2.reducedMCTrack().vx(), t2.reducedMCTrack().vy(), t2.reducedMCTrack().vz(), t2.reducedMCTrack().vt(), - t1.isAmbiguous(), t2.isAmbiguous()); + t1.isAmbiguous(), t2.isAmbiguous(), -999., -999., -999., -999.); } } diff --git a/PWGDQ/Tasks/tableReader.cxx b/PWGDQ/Tasks/tableReader.cxx index bca09220b93..d1f60e6d6e7 100644 --- a/PWGDQ/Tasks/tableReader.cxx +++ b/PWGDQ/Tasks/tableReader.cxx @@ -794,7 +794,7 @@ struct AnalysisSameEventPairing { if (fNoCorr) { VarManager::SetupFwdDCAFitterNoCorr(); - } else if (fCorrFullGeo) { + } else if (fCorrFullGeo || (fConfigUseKFVertexing && fPropToPCA)) { if (!o2::base::GeometryManager::isGeometryLoaded()) { ccdb->get(geoPath); } @@ -942,15 +942,15 @@ struct AnalysisSameEventPairing { if (fConfigUseKFVertexing.value) { VarManager::SetupTwoProngKFParticle(mMagField); } else { - VarManager::SetupTwoProngDCAFitter(mMagField, fPropToPCA.value, 200.0f, 4.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(mMagField, fPropToPCA.value, 200.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); + VarManager::SetupTwoProngDCAFitter(mMagField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(mMagField, true, 200.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); } } else { if (fConfigUseKFVertexing.value) { VarManager::SetupTwoProngKFParticle(fConfigMagField.value); } else { - VarManager::SetupTwoProngDCAFitter(fConfigMagField.value, fPropToPCA.value, 200.0f, 4.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(fConfigMagField.value, fPropToPCA.value, 200.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); + VarManager::SetupTwoProngDCAFitter(fConfigMagField.value, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(fConfigMagField.value, true, 200.0f, 1.0e-3f, 0.9f, fUseAbsDCA.value); } } fCurrentRun = event.runNumber(); @@ -1014,8 +1014,7 @@ struct AnalysisSameEventPairing { if constexpr ((TPairType == pairTypeEE) && trackHasCov) { dileptonExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); } - constexpr bool muonHasCov = ((TTrackFillMap & VarManager::ObjTypes::MuonCov) > 0 || (TTrackFillMap & VarManager::ObjTypes::ReducedMuonCov) > 0); - if constexpr ((TPairType == pairTypeMuMu) && muonHasCov) { + if constexpr (TPairType == pairTypeMuMu) { // LOGP(info, "mu1 collId = {}, mu2 collId = {}", t1.collisionId(), t2.collisionId()); dileptonExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); if (fConfigFlatTables.value) { @@ -1038,7 +1037,9 @@ struct AnalysisSameEventPairing { -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., - t1.isAmbiguous(), t2.isAmbiguous()); + t1.isAmbiguous(), t2.isAmbiguous(), + VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi]); } } From 7763af820173b81ff97469c80c88766d0353faa3 Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Wed, 6 Dec 2023 16:49:39 +0100 Subject: [PATCH 15/17] Clang format --- PWGDQ/Core/VarManager.h | 34 ++++++++++++++--------------- PWGDQ/DataModel/ReducedInfoTables.h | 2 +- PWGDQ/Tasks/tableReader.cxx | 6 ++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index ecfe76aab28..e7135f18faa 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -811,23 +811,23 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val SMatrix55 tcovs(v1.begin(), v1.end()); o2::track::TrackParCovFwd fwdtrack{muon.z(), tpars, tcovs, chi2}; o2::dataformats::GlobalFwdTrack propmuon; - if (static_cast(muon.trackType()) > 2){ - o2::mch::TrackExtrap::setField(); - o2::dataformats::GlobalFwdTrack track(fwdtrack); - auto mchTrack = mMatching.FwdtoMCH(track); - o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); - auto proptrack = mMatching.MCHtoFwd(mchTrack); - propmuon = proptrack; - - }else if (static_cast(muon.trackType()) < 2){ - double centerMFT[3] = {0, 0, -61.4}; - o2::field::MagneticField* field = static_cast(TGeoGlobalMagField::Instance()->GetField()); - auto Bz = field->getBz(centerMFT); // Get field at centre of MFT - auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ()); - auto x2x0 = static_cast(geoMan.meanX2X0); - fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0); - propmuon = fwdtrack; - } + if (static_cast(muon.trackType()) > 2) { + o2::mch::TrackExtrap::setField(); + o2::dataformats::GlobalFwdTrack track(fwdtrack); + auto mchTrack = mMatching.FwdtoMCH(track); + o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); + auto proptrack = mMatching.MCHtoFwd(mchTrack); + propmuon = proptrack; + + } else if (static_cast(muon.trackType()) < 2) { + double centerMFT[3] = {0, 0, -61.4}; + o2::field::MagneticField* field = static_cast(TGeoGlobalMagField::Instance()->GetField()); + auto Bz = field->getBz(centerMFT); // Get field at centre of MFT + auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ()); + auto x2x0 = static_cast(geoMan.meanX2X0); + fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0); + propmuon = fwdtrack; + } values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); values[kY] = propmuon.getY(); diff --git a/PWGDQ/DataModel/ReducedInfoTables.h b/PWGDQ/DataModel/ReducedInfoTables.h index 263d61fa275..613aff6e800 100644 --- a/PWGDQ/DataModel/ReducedInfoTables.h +++ b/PWGDQ/DataModel/ReducedInfoTables.h @@ -515,7 +515,7 @@ DECLARE_SOA_TABLE(DimuonsAll, "AOD", "RTDIMUONALL", //! dilepton_track_index::Vx1, dilepton_track_index::Vy1, dilepton_track_index::Vz1, dilepton_track_index::Vt1, dilepton_track_index::Vx2, dilepton_track_index::Vy2, dilepton_track_index::Vz2, dilepton_track_index::Vt2, dilepton_track_index::IsAmbig1, dilepton_track_index::IsAmbig2, - reducedpair::U2Q2, + reducedpair::U2Q2, reducedpair::U3Q3, reducedpair::Cos2DeltaPhi, reducedpair::Cos3DeltaPhi); diff --git a/PWGDQ/Tasks/tableReader.cxx b/PWGDQ/Tasks/tableReader.cxx index d1f60e6d6e7..6800ff8ad01 100644 --- a/PWGDQ/Tasks/tableReader.cxx +++ b/PWGDQ/Tasks/tableReader.cxx @@ -1037,9 +1037,9 @@ struct AnalysisSameEventPairing { -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., -999., - t1.isAmbiguous(), t2.isAmbiguous(), - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi]); + t1.isAmbiguous(), t2.isAmbiguous(), + VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi]); } } From 0e4b202f741dbfcf239d45fcdedeca7cd83dd50d Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 8 Dec 2023 16:24:59 +0100 Subject: [PATCH 16/17] Bug fixes --- PWGDQ/Core/VarManager.h | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index e7135f18faa..de46ba618b0 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -813,11 +813,16 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val o2::dataformats::GlobalFwdTrack propmuon; if (static_cast(muon.trackType()) > 2) { o2::mch::TrackExtrap::setField(); - o2::dataformats::GlobalFwdTrack track(fwdtrack); + o2::dataformats::GlobalFwdTrack track; + track.setParameters(tpars); + track.setZ(fwdtrack.getZ()); + track.setCovariances(tcovs); auto mchTrack = mMatching.FwdtoMCH(track); o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); auto proptrack = mMatching.MCHtoFwd(mchTrack); - propmuon = proptrack; + propmuon.setParameters(proptrack.getParameters()); + propmuon.setZ(proptrack.getZ()); + propmuon.setCovariances(proptrack.getCovariances()); } else if (static_cast(muon.trackType()) < 2) { double centerMFT[3] = {0, 0, -61.4}; @@ -826,7 +831,9 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val auto geoMan = o2::base::GeometryManager::meanMaterialBudget(muon.x(), muon.y(), muon.z(), collision.posX(), collision.posY(), collision.posZ()); auto x2x0 = static_cast(geoMan.meanX2X0); fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0); - propmuon = fwdtrack; + propmuon.setParameters(fwdtrack.getParameters()); + propmuon.setZ(fwdtrack.getZ()); + propmuon.setCovariances(fwdtrack.getCovariances()); } values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); @@ -2035,6 +2042,15 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, v1 = {pars1.getPt(), pars1.getEta(), pars1.getPhi(), m1}; v2 = {pars2.getPt(), pars2.getEta(), pars2.getPhi(), m2}; v12 = v1 + v2; + values[kMass] = v12.M(); + values[kPt] = v12.Pt(); + values[kEta] = v12.Eta(); + values[kPhi] = v12.Phi(); + values[kRap] = -v12.Rapidity(); + values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime(KFPV, v12.M()) / (o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = dzPair2PV * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauzErr] = values[kVertexingLzErr] * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kPt1] = pars1.getPt(); values[kEta1] = pars1.getEta(); From fcbfd415c432f5894421cfe2067470b96e6af69b Mon Sep 17 00:00:00 2001 From: mcoquet642 Date: Fri, 8 Dec 2023 16:29:46 +0100 Subject: [PATCH 17/17] Clang format --- PWGDQ/Core/VarManager.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index de46ba618b0..f0266017be4 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -2042,11 +2042,11 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, v1 = {pars1.getPt(), pars1.getEta(), pars1.getPhi(), m1}; v2 = {pars2.getPt(), pars2.getEta(), pars2.getPhi(), m2}; v12 = v1 + v2; - values[kMass] = v12.M(); - values[kPt] = v12.Pt(); - values[kEta] = v12.Eta(); - values[kPhi] = v12.Phi(); - values[kRap] = -v12.Rapidity(); + values[kMass] = v12.M(); + values[kPt] = v12.Pt(); + values[kEta] = v12.Eta(); + values[kPhi] = v12.Phi(); + values[kRap] = -v12.Rapidity(); values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime(KFPV, v12.M()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = dzPair2PV * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS);