Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 74 additions & 105 deletions PWGDQ/Core/CutsLibrary.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,53 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
// These are the Cuts used in the CEFP Task //
// to select tracks in the event selection //
// ///////////////////////////////////////////////
if (!nameStr.compare("Electron")) {
if (!nameStr.compare("Electron2022")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_debug5"));
return cut;
}
if (!nameStr.compare("ElectronTight")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine3"));
if (!nameStr.compare("Electron2023")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_debug1"));
cut->AddCut(GetAnalysisCut("pidCut_lowP_Corr"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP_Corr"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP_Corr"));
cut->AddCut(pidCut_highP);
return cut;
}
if (!nameStr.compare("Electron2023_Tight")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("pidCut_lowP_Corr"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP2_Corr"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP_Corr"));
cut->AddCut(pidCut_highP);
return cut;
}
if (!nameStr.compare("MuonLow")) {
if (!nameStr.compare("MuonLow2022")) {
cut->AddCut(GetAnalysisCut("muonLowPt2"));
cut->AddCut(GetAnalysisCut("muonQualityCuts"));
return cut;
}
if (!nameStr.compare("MuonLow2023")) {
cut->AddCut(GetAnalysisCut("muonLowPt2"));
cut->AddCut(GetAnalysisCut("muonQualityCuts"));
cut->AddCut(GetAnalysisCut("MCHMID"));
return cut;
}
if (!nameStr.compare("MuonHigh")) {
if (!nameStr.compare("MuonHigh2022")) {
cut->AddCut(GetAnalysisCut("muonHighPt2"));
cut->AddCut(GetAnalysisCut("muonQualityCuts"));
return cut;
}
if (!nameStr.compare("MuonHigh2023")) {
cut->AddCut(GetAnalysisCut("muonHighPt6"));
cut->AddCut(GetAnalysisCut("muonQualityCuts"));
cut->AddCut(GetAnalysisCut("MCHMID"));
return cut;
}
Expand Down Expand Up @@ -214,95 +240,53 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
cut->AddCut(GetAnalysisCut("electronPIDnsigmaVeryLoose")); // with 3 sigma El TOF
return cut;
}
//
// New cuts to test for jpsi2ee electron selection (potentially not useful)
//
// With pT > 1.0 GeV/c as primary cut
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_1")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_1")); // Loose pion rejection at high p with no correction maps

return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_1_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_1_Corr")); // Loose pion rejection at high p with correction maps

return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_2")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_2")); // No pion rejection at high p and asymmetrical e selection with no correction maps

return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_2_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_2_Corr")); // No pion rejection at high p and asymmetrical e selection with correction maps

return cut;
}

// With p > 1.5 GeV/c as primary cut
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_3")) {
if (!nameStr.compare("jpsiO2MCdebugCuts_Pdependent_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_1")); // Loose pion rejection at high p with no correction maps
cut->AddCut(GetAnalysisCut("pidCut_lowP_Corr"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP_Corr"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP_Corr"));
cut->AddCut(pidCut_highP);
return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_3_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_1_Corr")); // Loose pion rejection at high p with correction maps

return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_4")) {
if (!nameStr.compare("jpsiO2MCdebugCuts_Pdependent")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_2")); // No pion rejection at high p and asymmetrical e selection with no correction maps
cut->AddCut(GetAnalysisCut("pidCut_lowP"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP"));
cut->AddCut(pidCut_highP);
return cut;
}
if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_4_Corr")) {
if (!nameStr.compare("jpsiO2MCdebugCuts_Pdependent2_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("jpsi_TPCPID_TEST_2_Corr")); // No pion rejection at high p and asymmetrical e selection with correction maps

return cut;
}

if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_6_Corr")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("pidCut_lowP"));
cut->AddCut(GetAnalysisCut("pidCut_lowP_Corr"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("MySpecial_EleInclusion"));
pidCut_highP->AddCut(GetAnalysisCut("MySpecial_PionExclusion"));
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP2_Corr"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP_Corr"));
cut->AddCut(pidCut_highP);
return cut;
}

if (!nameStr.compare("jpsiO2MCdebugCuts_TEST_5_Corr")) {
if (!nameStr.compare("jpsiO2MCdebugCuts_Pdependent2")) {
cut->AddCut(GetAnalysisCut("jpsiStandardKine4"));
cut->AddCut(GetAnalysisCut("electronStandardQualityForO2MCdebug"));
cut->AddCut(GetAnalysisCut("pidCut_lowP"));

AnalysisCompositeCut* pidCut_highP = new AnalysisCompositeCut("pidCut_highP", "pidCut_highP", kFALSE);
pidCut_highP->AddCut(GetAnalysisCut("MySpecial_EleInclusion"));
pidCut_highP->AddCut(GetAnalysisCut("MySpecial_PionExclusion"));
pidCut_highP->AddCut(GetAnalysisCut("EleInclusion_highP2"));
pidCut_highP->AddCut(GetAnalysisCut("PionExclusion_highP"));
cut->AddCut(pidCut_highP);
return cut;
}
//
// end new test cuts
//

if (!nameStr.compare("JpsiPWGSkimmedCuts1")) { // please do not remove or modify, this is used for the common Skimmed tree production, (Xiaozhi Bai)
cut->AddCut(GetAnalysisCut("jpsiKineSkimmed"));
Expand Down Expand Up @@ -2921,60 +2905,45 @@ AnalysisCut* o2::aod::dqcuts::GetAnalysisCut(const char* cutName)
cut->AddCut(VarManager::kTPCnSigmaPr, 3.5, 999);
return cut;
}
//
// New test for jpsi2ee PID selection
//
if (!nameStr.compare("jpsi_TPCPID_TEST_1_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -3.0, 3.0);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 2.0, 999, false, VarManager::kP, 4.0, 999);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 2.0, 999, false, VarManager::kP, 4.0, 999);

if (!nameStr.compare("pidCut_lowP_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -3.0, 3.0, false, VarManager::kP, 0.0, 5.0);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 3.0, 999, false, VarManager::kP, 0.0, 5.0);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 2.5, 999, false, VarManager::kP, 0.0, 5.0);
return cut;
}
if (!nameStr.compare("jpsi_TPCPID_TEST_1")) {
cut->AddCut(VarManager::kTPCnSigmaEl, -3.0, 3.0);
cut->AddCut(VarManager::kTPCnSigmaPi, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kP, 4.0, 999);
cut->AddCut(VarManager::kTPCnSigmaPr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPr, 2.0, 999, false, VarManager::kP, 4.0, 999);

if (!nameStr.compare("EleInclusion_highP_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -1.0, 4.0, false, VarManager::kP, 5.0, 999.0);
return cut;
}
if (!nameStr.compare("jpsi_TPCPID_TEST_2_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -3.0, 3.0, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -1.0, 4.0, false, VarManager::kP, 4.0, 999);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 2.0, 999, false, VarManager::kP, 4.0, 999);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 2.0, 999, false, VarManager::kP, 4.0, 999);
if (!nameStr.compare("EleInclusion_highP2_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -0.5, 4.0, false, VarManager::kP, 5.0, 999.0);
return cut;
}
if (!nameStr.compare("jpsi_TPCPID_TEST_2")) {
cut->AddCut(VarManager::kTPCnSigmaEl, -3.0, 3.0, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaEl, -1.0, 4.0, false, VarManager::kP, 4.0, 999.0);
cut->AddCut(VarManager::kTPCnSigmaPi, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPi, 0, 999, false, VarManager::kP, 4.0, 999);
cut->AddCut(VarManager::kTPCnSigmaPr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPr, 0, 999, false, VarManager::kP, 4.0, 999);
if (!nameStr.compare("PionExclusion_highP_Corr")) {
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 2.0, 999, false, VarManager::kP, 5.0, 999.0);
return cut;
}

if (!nameStr.compare("pidCut_lowP")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -3.0, 3.0, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaPr_Corr, 3.0, 999, false, VarManager::kP, 0.0, 4.0);
cut->AddCut(VarManager::kTPCnSigmaEl, -3.0, 3.0, false, VarManager::kP, 0.0, 5.0);
cut->AddCut(VarManager::kTPCnSigmaPi, 3.0, 999, false, VarManager::kP, 0.0, 5.0);
cut->AddCut(VarManager::kTPCnSigmaPr, 2.5, 999, false, VarManager::kP, 0.0, 5.0);
return cut;
}

if (!nameStr.compare("MySpecial_EleInclusion")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -1.0, 4.0, false, VarManager::kP, 4.0, 999.0);
if (!nameStr.compare("EleInclusion_highP")) {
cut->AddCut(VarManager::kTPCnSigmaEl, -1.0, 4.0, false, VarManager::kP, 5.0, 999.0);
return cut;
}
if (!nameStr.compare("EleInclusion_highP2")) {
cut->AddCut(VarManager::kTPCnSigmaEl, -0.5, 4.0, false, VarManager::kP, 5.0, 999.0);
return cut;
}
if (!nameStr.compare("MySpecial_PionExclusion")) {
cut->AddCut(VarManager::kTPCnSigmaPi_Corr, 2.0, 999, false, VarManager::kP, 4.0, 999.0);
if (!nameStr.compare("PionExclusion_highP")) {
cut->AddCut(VarManager::kTPCnSigmaPi, 2.0, 999, false, VarManager::kP, 5.0, 999.0);
return cut;
}
// end of new tests cuts

if (!nameStr.compare("lmee_TPCPID_debug1")) {
cut->AddCut(VarManager::kTPCnSigmaEl_Corr, -5.0, 5.0);
Expand Down
42 changes: 36 additions & 6 deletions PWGDQ/Core/VarManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -802,19 +804,38 @@ 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<double> 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);

o2::dataformats::GlobalFwdTrack propmuon;
if (static_cast<int>(muon.trackType()) > 2) {
o2::mch::TrackExtrap::setField();
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.setParameters(proptrack.getParameters());
propmuon.setZ(proptrack.getZ());
propmuon.setCovariances(proptrack.getCovariances());

} else if (static_cast<int>(muon.trackType()) < 2) {
double centerMFT[3] = {0, 0, -61.4};
o2::field::MagneticField* field = static_cast<o2::field::MagneticField*>(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<float>(geoMan.meanX2X0);
fwdtrack.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, Bz, x2x0);
propmuon.setParameters(fwdtrack.getParameters());
propmuon.setZ(fwdtrack.getZ());
propmuon.setCovariances(fwdtrack.getCovariances());
}
values[kPt] = propmuon.getPt();
values[kX] = propmuon.getX();
values[kY] = propmuon.getY();
Expand Down Expand Up @@ -2022,6 +2043,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();
Expand Down
6 changes: 5 additions & 1 deletion PWGDQ/DataModel/ReducedInfoTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion PWGDQ/Tasks/dqEfficiency.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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.);
}
}

Expand Down
Loading