Repository navigation
[PWGDQ] Update table with properties for prompt-non prompt J/psi separation #18370
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
d83aef8
434829c
550d4c7
36cef82
de37198
e47c905
a8cdeb3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -558,6 +558,8 @@ class VarManager : public TObject | |
| kCharge1, | ||
| kDCAxy1, | ||
| kDCAz1, | ||
| kDCASigxy1, // DCAxy / sqrt(cYY) of leg 1 | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please rename the variable to kDCAxyOverSig1 or (or similar) instead of leaving a comment here. Nobody notices that comment. In general, please always name variables to exactly what the do and do not put a comment. |
||
| kDCASigz1, // DCAz / sqrt(cZZ) of leg 1 | ||
| kITSclusterMap1, | ||
| kTPCnSigmaEl1, | ||
| kPin_leg1, | ||
|
|
@@ -568,6 +570,8 @@ class VarManager : public TObject | |
| kCharge2, | ||
| kDCAxy2, | ||
| kDCAz2, | ||
| kDCASigxy2, // DCAxy / sqrt(cYY) of leg 2 | ||
| kDCASigz2, // DCAz / sqrt(cZZ) of leg 2 | ||
| kITSclusterMap2, | ||
| kTPCnSigmaEl2, | ||
|
|
||
|
|
@@ -4024,6 +4028,11 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) | |
| values[kDCAxy2] = dca2XY; | ||
| values[kDCAz2] = dca2Z; | ||
|
|
||
| values[kDCASigxy1] = dca1XY / std::sqrt(t1.cYY()); | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The calculations are done already a few lines below, maybe you can move the definitions below out of the if-condition so it is only calculated once and then add the kDCASig variables. But good notice that they never have been filled |
||
| values[kDCASigz1] = dca1Z / std::sqrt(t1.cZZ()); | ||
| values[kDCASigxy2] = dca2XY / std::sqrt(t2.cYY()); | ||
| values[kDCASigz2] = dca2Z / std::sqrt(t2.cZZ()); | ||
|
|
||
| if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { | ||
| // Quantities based on the barrel tables | ||
|
|
||
|
|
@@ -5023,6 +5032,9 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, | |
| values[kVertexingLxyErr] = -999.; | ||
| values[kVertexingLxyzErr] = -999.; | ||
| values[kVertexingLzErr] = -999.; | ||
| values[kVertexingLxyOverErr] = -999.; | ||
| values[kVertexingLzOverErr] = -999.; | ||
| values[kVertexingLxyzOverErr] = -999.; | ||
|
|
||
| values[kVertexingTauxy] = -999.; | ||
| values[kVertexingTauz] = -999.; | ||
|
|
@@ -5082,6 +5094,10 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, | |
| values[kVertexingLz] = std::sqrt(values[kVertexingLz]); | ||
| values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); | ||
|
|
||
| values[kVertexingLxyOverErr] = values[kVertexingLxy] / values[kVertexingLxyErr]; | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These are already calculated below, around line 5191 (old), respectively 5207 (with your current changes) |
||
| values[kVertexingLzOverErr] = values[kVertexingLz] / values[kVertexingLzErr]; | ||
| values[kVertexingLxyzOverErr] = values[kVertexingLxyz] / values[kVertexingLxyzErr]; | ||
|
|
||
| values[kVertexingTauz] = -dz * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); | ||
| values[kVertexingTauxy] = values[kVertexingLxy] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -164,8 +164,8 @@ DECLARE_SOA_COLUMN(Etaee, etaee, float); | |
| DECLARE_SOA_COLUMN(Rapee, rapee, float); | ||
| DECLARE_SOA_COLUMN(Phiee, phiee, float); | ||
| DECLARE_SOA_COLUMN(Ptee, ptee, float); | ||
| DECLARE_SOA_COLUMN(Lxyee, lxyee, float); | ||
| DECLARE_SOA_COLUMN(LxyeePoleMass, lxyeepolemass, float); | ||
| DECLARE_SOA_COLUMN(Lxyee, lxyJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(LxyeePoleMass, lxyJPsi2eePoleMass, float); | ||
| DECLARE_SOA_COLUMN(Lzee, lzee, float); | ||
| DECLARE_SOA_COLUMN(LxyeePoleMassPVrecomputed, lxyeePoleMassPVrecomputed, float); | ||
| DECLARE_SOA_COLUMN(Vx, vx, float); | ||
|
|
@@ -178,10 +178,26 @@ DECLARE_SOA_COLUMN(DcaZ2, dcaZ2, float); | |
| DECLARE_SOA_COLUMN(MultiplicityFT0A, multiplicityFT0AJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(MultiplicityFT0C, multiplicityFT0CJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(PercentileFT0M, percentileFT0MJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(PercentileFT0C, percentileFT0CJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(MultiplicityNContrib, multiplicityNContribJPsi2ee, float); | ||
| DECLARE_SOA_COLUMN(AmbiguousInBunchPairs, AmbiguousJpsiPairsInBunch, bool); | ||
| DECLARE_SOA_COLUMN(AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, bool); | ||
| DECLARE_SOA_COLUMN(Corrassoc, corrassoc, bool); | ||
| // Additional columns for prompt-non-prompt JPsi separation (BDT training), identical to tableReader_withAssoc | ||
| DECLARE_SOA_COLUMN(PairFilter, pairFilter, uint32_t); //! twoTrackFilter (cut bits + ambiguity bits 28-31) | ||
| DECLARE_SOA_COLUMN(McDecision, mcDecision, uint32_t); //! MC signal bits, 0 in data | ||
| DECLARE_SOA_COLUMN(TauxyeeErr, tauxyeeErr, float); //! kVertexingTauxyErr: in ns (not cm) and with the reconstructed mass | ||
| DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the reconstructed mass | ||
| DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, float); //! kVertexingLxyProjected | ||
| DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr | ||
| DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz | ||
| DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyzOverErr | ||
| DECLARE_SOA_COLUMN(Chi2PCAee, chi2PCAee, float); //! kVertexingChi2PCA | ||
| DECLARE_SOA_COLUMN(CosPAee, cosPAee, float); //! kCosPointingAngle | ||
| DECLARE_SOA_COLUMN(DcaSigXY1, dcaSigXY1, float); //! leg-1 DCAxy / sqrt(cYY), kDCASigxy1 | ||
| DECLARE_SOA_COLUMN(DcaSigZ1, dcaSigZ1, float); //! leg-1 DCAz / sqrt(cZZ), kDCASigz1 | ||
| DECLARE_SOA_COLUMN(DcaSigXY2, dcaSigXY2, float); //! leg-2 DCAxy / sqrt(cYY), kDCASigxy2 | ||
| DECLARE_SOA_COLUMN(DcaSigZ2, dcaSigZ2, float); //! leg-2 DCAz / sqrt(cZZ), kDCASigz2 | ||
| DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float); | ||
| DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); | ||
| // Candidate columns efficiency calculation for prompt-non-prompt JPsi separation | ||
|
|
@@ -224,10 +240,19 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", | |
| dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2, | ||
| dqanalysisflags::McFlag); | ||
| DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", | ||
| dqanalysisflags::PairFilter, dqanalysisflags::McDecision, | ||
| dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, | ||
| dqanalysisflags::Lxyee, dqanalysisflags::LxyeePoleMass, dqanalysisflags::Lzee, dqanalysisflags::LxyeePoleMassPVrecomputed, | ||
| dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::TPCnsigmaElleg1, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::TPCnsigmaElleg2, | ||
| dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib); | ||
| dqanalysisflags::TauxyeeErr, dqanalysisflags::TauzeeErr, | ||
| dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr, | ||
| dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee, | ||
| dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, | ||
| dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaSigXY1, dqanalysisflags::DcaSigZ1, | ||
| dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, | ||
| dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, | ||
| dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, | ||
| dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, | ||
| dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); | ||
| 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); | ||
| } // namespace o2::aod | ||
|
|
||
|
|
@@ -2371,6 +2396,31 @@ struct AnalysisSameEventPairing { | |
| } | ||
| } | ||
| } | ||
| // flat table for prompt / non-prompt BDT training: one row per MC-matched opposite-sign pair | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove the comments here, not necessary |
||
| // (not per cut; select cuts offline via PairFilter). Kept identical to tableReader_withAssoc. | ||
| // Only meaningful with track covariances, the two-prong fitter and an event vertex covariance: | ||
| constexpr bool eventHasVtxCovForTable = ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); | ||
| if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0 && trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { | ||
| // kVertexingProcCode == 0: the fit failed; FillPairVertexing then returns early without updating the | ||
| // projected / pseudo-proper / pointing-angle variables, so they would be stale -> skip the pair | ||
| if (t1.sign() * t2.sign() < 0 && mcDecision > 0) { | ||
| const bool ambiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29)); | ||
| const bool ambiOutOfBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 30)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31)); | ||
| PromptNonPromptSepTable(twoTrackFilter, mcDecision, | ||
| VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kRap], VarManager::fgValues[VarManager::kPhi], | ||
| VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV], | ||
| VarManager::fgValues[VarManager::kVertexingTauxyErr], VarManager::fgValues[VarManager::kVertexingTauzErr], | ||
| VarManager::fgValues[VarManager::kVertexingLxyProjected], VarManager::fgValues[VarManager::kVertexingLxyOverErr], VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzOverErr], | ||
| VarManager::fgValues[VarManager::kVertexingChi2PCA], VarManager::fgValues[VarManager::kCosPointingAngle], | ||
| VarManager::fgValues[VarManager::kVtxX], VarManager::fgValues[VarManager::kVtxY], VarManager::fgValues[VarManager::kVtxZ], | ||
| t1.pt(), t1.eta(), VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kDCASigxy1], VarManager::fgValues[VarManager::kDCASigz1], | ||
| VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(), | ||
| t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCASigxy2], VarManager::fgValues[VarManager::kDCASigz2], | ||
| VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), | ||
| ambiInBunch, ambiOutOfBunch, isCorrectAssoc_leg1 && isCorrectAssoc_leg2, | ||
| VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| if constexpr (TPairType == VarManager::kDecayToMuMu) { | ||
|
|
@@ -2469,11 +2519,6 @@ struct AnalysisSameEventPairing { | |
| // Fill histograms | ||
| bool isAmbiInBunch = false; | ||
| bool isAmbiOutOfBunch = false; | ||
| bool isCorrect_pair = false; | ||
| if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { | ||
| isCorrect_pair = true; | ||
| } | ||
|
|
||
| for (int icut = 0; icut < ncuts; icut++) { | ||
| if (twoTrackFilter & (static_cast<uint32_t>(1) << icut)) { | ||
| isAmbiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29)); | ||
|
|
@@ -2482,10 +2527,6 @@ struct AnalysisSameEventPairing { | |
| fHistMan->FillHistClass(histNames[icut][0].Data(), dqefficiency_helpers::varValues()); // reconstructed, unmatched | ||
| for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals | ||
| if (mcDecision & (static_cast<uint32_t>(1) << isig)) { | ||
| PromptNonPromptSepTable(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kRap], VarManager::fgValues[VarManager::kPhi], | ||
| VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMassRecalculatePV], | ||
| 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], | ||
| isAmbiInBunch, isAmbiOutOfBunch, isCorrect_pair, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); | ||
| fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), dqefficiency_helpers::varValues()); // matched signal | ||
| if (useMiniTree.fConfigMiniTree) { | ||
| if constexpr (TPairType == VarManager::kDecayToMuMu) { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also here, rename to kDCAxyOverSig1 and also for the second leg (as commented in the VarManager.h)