Skip to content

Commit aed5e53

Browse files
[PWGDQ] Setup prompt non prompt separation table (#18527)
Co-authored-by: Alexander Tiekötter <alexander.tiekoetter@uni-muenster.de>
1 parent 750e0fd commit aed5e53

4 files changed

Lines changed: 134 additions & 26 deletions

File tree

‎PWGDQ/Core/VarManager.cxx‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,6 +1131,14 @@ void VarManager::SetDefaultVarNames()
11311131
fgVariableUnits[kDCAxy2] = "cm";
11321132
fgVariableNames[kDCAz2] = "DCA_{z}";
11331133
fgVariableUnits[kDCAz2] = "cm";
1134+
fgVariableNames[kDCAxyOverSig1] = "DCA_{xy}/#sigma_{DCA_{xy}}";
1135+
fgVariableUnits[kDCAxyOverSig1] = "";
1136+
fgVariableNames[kDCAzOverSig1] = "DCA_{z}/#sigma_{DCA_{z}}";
1137+
fgVariableUnits[kDCAzOverSig1] = "";
1138+
fgVariableNames[kDCAxyOverSig2] = "DCA_{xy}/#sigma_{DCA_{xy}}";
1139+
fgVariableUnits[kDCAxyOverSig2] = "";
1140+
fgVariableNames[kDCAzOverSig2] = "DCA_{z}/#sigma_{DCA_{z}}";
1141+
fgVariableUnits[kDCAzOverSig2] = "";
11341142
fgVariableNames[kTPCnSigmaEl] = "n #sigma_{e}^{TPC}";
11351143
fgVariableUnits[kTPCnSigmaEl] = "";
11361144
fgVariableNames[kTPCnSigmaEl_Corr] = "n #sigma_{e}^{TPC} Corr.";
@@ -2389,6 +2397,8 @@ void VarManager::SetDefaultVarNames()
23892397
fgVarNamesMap["kCharge1"] = kCharge1;
23902398
fgVarNamesMap["kDCAxy1"] = kDCAxy1;
23912399
fgVarNamesMap["kDCAz1"] = kDCAz1;
2400+
fgVarNamesMap["kDCAxyOverSig1"] = kDCAxyOverSig1;
2401+
fgVarNamesMap["kDCAzOverSig1"] = kDCAzOverSig1;
23922402
fgVarNamesMap["kITSclusterMap1"] = kITSclusterMap1;
23932403
fgVarNamesMap["kTPCnSigmaEl1"] = kTPCnSigmaEl1;
23942404
fgVarNamesMap["kPin_leg1"] = kPin_leg1;
@@ -2399,6 +2409,8 @@ void VarManager::SetDefaultVarNames()
23992409
fgVarNamesMap["kCharge2"] = kCharge2;
24002410
fgVarNamesMap["kDCAxy2"] = kDCAxy2;
24012411
fgVarNamesMap["kDCAz2"] = kDCAz2;
2412+
fgVarNamesMap["kDCAxyOverSig2"] = kDCAxyOverSig2;
2413+
fgVarNamesMap["kDCAzOverSig2"] = kDCAzOverSig2;
24022414
fgVarNamesMap["kITSclusterMap2"] = kITSclusterMap2;
24032415
fgVarNamesMap["kTPCnSigmaEl2"] = kTPCnSigmaEl2;
24042416
fgVarNamesMap["kPin"] = kPin;

‎PWGDQ/Core/VarManager.h‎

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ class VarManager : public TObject
560560
kCharge1,
561561
kDCAxy1,
562562
kDCAz1,
563+
kDCAxyOverSig1,
564+
kDCAzOverSig1,
563565
kITSclusterMap1,
564566
kTPCnSigmaEl1,
565567
kPin_leg1,
@@ -570,6 +572,8 @@ class VarManager : public TObject
570572
kCharge2,
571573
kDCAxy2,
572574
kDCAz2,
575+
kDCAxyOverSig2,
576+
kDCAzOverSig2,
573577
kITSclusterMap2,
574578
kTPCnSigmaEl2,
575579

@@ -4106,14 +4110,18 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values)
41064110
values[kDCAxy2] = dca2XY;
41074111
values[kDCAz2] = dca2Z;
41084112

4109-
if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) {
4110-
// Quantities based on the barrel tables
4113+
double dca1sigXY = dca1XY / std::sqrt(t1.cYY());
4114+
double dca2sigXY = dca2XY / std::sqrt(t2.cYY());
4115+
double dca1sigZ = dca1Z / std::sqrt(t1.cZZ());
4116+
double dca2sigZ = dca2Z / std::sqrt(t2.cZZ());
41114117

4112-
double dca1sigXY = dca1XY / std::sqrt(t1.cYY());
4113-
double dca2sigXY = dca2XY / std::sqrt(t2.cYY());
4114-
double dca1sigZ = dca1Z / std::sqrt(t1.cZZ());
4115-
double dca2sigZ = dca2Z / std::sqrt(t2.cZZ());
4118+
values[kDCAxyOverSig1] = dca1sigXY;
4119+
values[kDCAzOverSig1] = dca1sigZ;
4120+
values[kDCAxyOverSig2] = dca2sigXY;
4121+
values[kDCAzOverSig2] = dca2sigZ;
41164122

4123+
if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) {
4124+
// Quantities based on the barrel tables
41174125
values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2);
41184126
values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2);
41194127
values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2);
@@ -5237,6 +5245,9 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
52375245
values[kVertexingLxyErr] = -999.;
52385246
values[kVertexingLxyzErr] = -999.;
52395247
values[kVertexingLzErr] = -999.;
5248+
values[kVertexingLxyOverErr] = -999.;
5249+
values[kVertexingLzOverErr] = -999.;
5250+
values[kVertexingLxyzOverErr] = -999.;
52405251

52415252
values[kVertexingTauxy] = -999.;
52425253
values[kVertexingTauz] = -999.;

‎PWGDQ/Tasks/dqEfficiency_withAssoc.cxx‎

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ DECLARE_SOA_COLUMN(Etaee, etaee, float);
165165
DECLARE_SOA_COLUMN(Rapee, rapee, float);
166166
DECLARE_SOA_COLUMN(Phiee, phiee, float);
167167
DECLARE_SOA_COLUMN(Ptee, ptee, float);
168-
DECLARE_SOA_COLUMN(Lxyee, lxyee, float);
169-
DECLARE_SOA_COLUMN(LxyeePoleMass, lxyeepolemass, float);
168+
DECLARE_SOA_COLUMN(Lxyee, lxyJPsi2ee, float);
169+
DECLARE_SOA_COLUMN(LxyeePoleMass, lxyJPsi2eePoleMass, float);
170170
DECLARE_SOA_COLUMN(Lzee, lzee, float);
171171
DECLARE_SOA_COLUMN(LxyeePoleMassPVrecomputed, lxyeePoleMassPVrecomputed, float);
172172
DECLARE_SOA_COLUMN(Vx, vx, float);
@@ -179,10 +179,26 @@ DECLARE_SOA_COLUMN(DcaZ2, dcaZ2, float);
179179
DECLARE_SOA_COLUMN(MultiplicityFT0A, multiplicityFT0AJPsi2ee, float);
180180
DECLARE_SOA_COLUMN(MultiplicityFT0C, multiplicityFT0CJPsi2ee, float);
181181
DECLARE_SOA_COLUMN(PercentileFT0M, percentileFT0MJPsi2ee, float);
182+
DECLARE_SOA_COLUMN(PercentileFT0C, percentileFT0CJPsi2ee, float);
182183
DECLARE_SOA_COLUMN(MultiplicityNContrib, multiplicityNContribJPsi2ee, float);
183184
DECLARE_SOA_COLUMN(AmbiguousInBunchPairs, AmbiguousJpsiPairsInBunch, bool);
184185
DECLARE_SOA_COLUMN(AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, bool);
185186
DECLARE_SOA_COLUMN(Corrassoc, corrassoc, bool);
187+
// Additional columns for prompt-non-prompt JPsi separation (BDT training), identical to tableReader_withAssoc
188+
DECLARE_SOA_COLUMN(PairFilter, pairFilter, uint32_t); //! twoTrackFilter (cut bits + ambiguity bits 28-31)
189+
DECLARE_SOA_COLUMN(McDecision, mcDecision, uint32_t); //! MC signal bits, 0 in data
190+
DECLARE_SOA_COLUMN(TauxyeeErr, tauxyeeErr, float); //! kVertexingTauxyErr: in ns (not cm) and with the reconstructed mass
191+
DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the reconstructed mass
192+
DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, float); //! kVertexingLxyProjected
193+
DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr
194+
DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz
195+
DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyzOverErr
196+
DECLARE_SOA_COLUMN(Chi2PCAee, chi2PCAee, float); //! kVertexingChi2PCA
197+
DECLARE_SOA_COLUMN(CosPAee, cosPAee, float); //! kCosPointingAngle
198+
DECLARE_SOA_COLUMN(DcaXYOverSig1, dcaXYOverSig1, float);
199+
DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float);
200+
DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float);
201+
DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float);
186202
DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float);
187203
DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float);
188204
// Candidate columns efficiency calculation for prompt-non-prompt JPsi separation
@@ -225,10 +241,19 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA",
225241
dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2,
226242
dqanalysisflags::McFlag);
227243
DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER",
244+
dqanalysisflags::PairFilter, dqanalysisflags::McDecision,
228245
dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee,
229246
dqanalysisflags::Lxyee, dqanalysisflags::LxyeePoleMass, dqanalysisflags::Lzee, dqanalysisflags::LxyeePoleMassPVrecomputed,
230-
dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::TPCnsigmaElleg1, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::TPCnsigmaElleg2,
231-
dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib);
247+
dqanalysisflags::TauxyeeErr, dqanalysisflags::TauzeeErr,
248+
dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr,
249+
dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee,
250+
dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz,
251+
dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1,
252+
dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1,
253+
dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, dqanalysisflags::DcaZOverSig2,
254+
dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2,
255+
dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc,
256+
dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib);
232257
DECLARE_SOA_TABLE(OniaMCTruth, "AOD", "MCTRUTHONIA", dqanalysisflags::OniaPt, dqanalysisflags::OniaEta, dqanalysisflags::OniaY, dqanalysisflags::OniaPhi, dqanalysisflags::OniaVz, dqanalysisflags::OniaVtxZ, dqanalysisflags::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib);
233258
} // namespace o2::aod
234259

@@ -2437,6 +2462,28 @@ struct AnalysisSameEventPairing {
24372462
}
24382463
}
24392464
}
2465+
constexpr bool eventHasVtxCovForTable = ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0);
2466+
if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0 && trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) {
2467+
// kVertexingProcCode == 0: the fit failed; FillPairVertexing then returns early without updating the
2468+
// projected / pseudo-proper / pointing-angle variables, so they would be stale -> skip the pair
2469+
if (t1.sign() * t2.sign() < 0 && mcDecision > 0) {
2470+
const bool ambiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29));
2471+
const bool ambiOutOfBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 30)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31));
2472+
PromptNonPromptSepTable(twoTrackFilter, mcDecision,
2473+
VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kRap], VarManager::fgValues[VarManager::kPhi],
2474+
VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV],
2475+
VarManager::fgValues[VarManager::kVertexingTauxyErr], VarManager::fgValues[VarManager::kVertexingTauzErr],
2476+
VarManager::fgValues[VarManager::kVertexingLxyProjected], VarManager::fgValues[VarManager::kVertexingLxyOverErr], VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzOverErr],
2477+
VarManager::fgValues[VarManager::kVertexingChi2PCA], VarManager::fgValues[VarManager::kCosPointingAngle],
2478+
VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ],
2479+
t1.pt(), t1.eta(), VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kDCAxyOverSig1], VarManager::fgValues[VarManager::kDCAzOverSig1],
2480+
VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(),
2481+
t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCAxyOverSig2], VarManager::fgValues[VarManager::kDCAzOverSig2],
2482+
VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(),
2483+
ambiInBunch, ambiOutOfBunch, isCorrectAssoc_leg1 && isCorrectAssoc_leg2,
2484+
VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]);
2485+
}
2486+
}
24402487
}
24412488

24422489
if constexpr (TPairType == VarManager::kDecayToMuMu) {
@@ -2535,11 +2582,6 @@ struct AnalysisSameEventPairing {
25352582
// Fill histograms
25362583
bool isAmbiInBunch = false;
25372584
bool isAmbiOutOfBunch = false;
2538-
bool isCorrect_pair = false;
2539-
if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) {
2540-
isCorrect_pair = true;
2541-
}
2542-
25432585
for (int icut = 0; icut < ncuts; icut++) {
25442586
if (twoTrackFilter & (static_cast<uint32_t>(1) << icut)) {
25452587
isAmbiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29));
@@ -2548,10 +2590,6 @@ struct AnalysisSameEventPairing {
25482590
fHistMan->FillHistClass(histNames[icut][0].Data(), dqefficiency_helpers::varValues()); // reconstructed, unmatched
25492591
for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals
25502592
if (mcDecision & (static_cast<uint32_t>(1) << isig)) {
2551-
PromptNonPromptSepTable(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kRap], VarManager::fgValues[VarManager::kPhi],
2552-
VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV],
2553-
VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ], VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kITSclusterMap1], VarManager::fgValues[VarManager::kTPCnSigmaEl1], VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kITSclusterMap2], VarManager::fgValues[VarManager::kTPCnSigmaEl2],
2554-
isAmbiInBunch, isAmbiOutOfBunch, isCorrect_pair, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]);
25552593
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), dqefficiency_helpers::varValues()); // matched signal
25562594
if (useMiniTree.fConfigMiniTree) {
25572595
if constexpr (TPairType == VarManager::kDecayToMuMu) {

0 commit comments

Comments
 (0)