@@ -165,8 +165,8 @@ DECLARE_SOA_COLUMN(Etaee, etaee, float);
165165DECLARE_SOA_COLUMN (Rapee, rapee, float );
166166DECLARE_SOA_COLUMN (Phiee, phiee, float );
167167DECLARE_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 );
170170DECLARE_SOA_COLUMN (Lzee, lzee, float );
171171DECLARE_SOA_COLUMN (LxyeePoleMassPVrecomputed, lxyeePoleMassPVrecomputed, float );
172172DECLARE_SOA_COLUMN (Vx, vx, float );
@@ -179,10 +179,26 @@ DECLARE_SOA_COLUMN(DcaZ2, dcaZ2, float);
179179DECLARE_SOA_COLUMN (MultiplicityFT0A, multiplicityFT0AJPsi2ee, float );
180180DECLARE_SOA_COLUMN (MultiplicityFT0C, multiplicityFT0CJPsi2ee, float );
181181DECLARE_SOA_COLUMN (PercentileFT0M, percentileFT0MJPsi2ee, float );
182+ DECLARE_SOA_COLUMN (PercentileFT0C, percentileFT0CJPsi2ee, float );
182183DECLARE_SOA_COLUMN (MultiplicityNContrib, multiplicityNContribJPsi2ee, float );
183184DECLARE_SOA_COLUMN (AmbiguousInBunchPairs, AmbiguousJpsiPairsInBunch, bool );
184185DECLARE_SOA_COLUMN (AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, bool );
185186DECLARE_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 );
186202DECLARE_SOA_COLUMN (DeltaEta, deltaEta, float );
187203DECLARE_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);
227243DECLARE_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);
232257DECLARE_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