From d83aef8d73143817b1e71af587998089a074507c Mon Sep 17 00:00:00 2001 From: Jonathan Witte Date: Tue, 20 Oct 2026 19:36:45 +0200 Subject: [PATCH 1/6] Add more pair and leg features in prompt-non prompt separation table, add FT0C centrality value, and setup stable filling outside the cut loop --- PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 94 ++++++++++++++++++++++---- PWGDQ/Tasks/tableReader_withAssoc.h | 92 +++++++++++++++++++++++-- 2 files changed, 166 insertions(+), 20 deletions(-) diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index 176d7ce64b2..5978d75dad7 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -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); //! kVertexingLxy / kVertexingLxyErr (computed in the task) +DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz +DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyz / kVertexingLxyzErr (computed in the task) +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), computed in the task +DECLARE_SOA_COLUMN(DcaSigZ1, dcaSigZ1, float); //! leg-1 DCAz / sqrt(cZZ), computed in the task +DECLARE_SOA_COLUMN(DcaSigXY2, dcaSigXY2, float); //! leg-2 DCAxy / sqrt(cYY), computed in the task +DECLARE_SOA_COLUMN(DcaSigZ2, dcaSigZ2, float); //! leg-2 DCAz / sqrt(cZZ), computed in the task 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,27 @@ 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", + // bookkeeping / labels + dqanalysisflags::PairFilter, dqanalysisflags::McDecision, + // pair kinematics dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, + // pseudo-proper decay length (Lxyee/Lzee hold kVertexingTauxyProjected/kVertexingTauzProjected) 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, + // secondary vertex + dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr, + dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee, + // primary vertex + dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, + // leg 1 + dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaSigXY1, dqanalysisflags::DcaSigZ1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + // leg 2 + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, + dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, + // ambiguity, event + 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 +2404,50 @@ struct AnalysisSameEventPairing { } } } + // flat table for prompt / non-prompt BDT training: one row per MC-matched opposite-sign pair + // (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 + const bool vertexingOK = VarManager::fgValues[VarManager::kVertexingProcCode] > 0; + if (t1.sign() * t2.sign() < 0 && mcDecision > 0 && vertexingOK) { + const bool ambiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); + const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + + // track DCA significances (DCA w.r.t. the collision the track was stored with, as kDCAxy1/kDCAz1) + auto dcaSig = [](float dca, float cov) -> float { + return cov > 0.f ? dca / std::sqrt(cov) : -999.f; + }; + const float dcaSigXY1 = dcaSig(VarManager::fgValues[VarManager::kDCAxy1], t1.cYY()); + const float dcaSigZ1 = dcaSig(VarManager::fgValues[VarManager::kDCAz1], t1.cZZ()); + const float dcaSigXY2 = dcaSig(VarManager::fgValues[VarManager::kDCAxy2], t2.cYY()); + const float dcaSigZ2 = dcaSig(VarManager::fgValues[VarManager::kDCAz2], t2.cZZ()); + + // decay-length significances: kVertexingLxyOverErr / kVertexingLxyzOverErr are only filled in the + // KFParticle branch of FillPairVertexing, not with the DCAFitter -> compute them explicitly + auto ratio = [](float num, float den) -> float { + return den > 0.f ? num / den : -999.f; + }; + const float lxyOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyErr]); + const float lxyzOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzErr]); + + 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], lxyOverErr, VarManager::fgValues[VarManager::kVertexingLxyz], lxyzOverErr, + 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], dcaSigXY1, dcaSigZ1, + VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(), + t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], dcaSigXY2, dcaSigZ2, + 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 +2546,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(1) << icut)) { isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); @@ -2482,10 +2554,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(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) { diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index e7952a1fdad..f0fc0344e4b 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -176,7 +176,28 @@ DECLARE_SOA_COLUMN(AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, bool) 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); + +// Additional columns for prompt-non-prompt JPsi separation (BDT training) +DECLARE_SOA_COLUMN(PairSign, pairSign, int8_t); //! t1.sign() + t2.sign() +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(Corrassoc, corrassoc, bool); //! correct collision association (MC only, true 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); //! kVertexingLxy / kVertexingLxyErr (computed in the task) +DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz +DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyz / kVertexingLxyzErr (computed in the task) +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), computed in the task +DECLARE_SOA_COLUMN(DcaSigZ1, dcaSigZ1, float); //! leg-1 DCAz / sqrt(cZZ), computed in the task +DECLARE_SOA_COLUMN(DcaSigXY2, dcaSigXY2, float); //! leg-2 DCAxy / sqrt(cYY), computed in the task +DECLARE_SOA_COLUMN(DcaSigZ2, dcaSigZ2, float); //! leg-2 DCAz / sqrt(cZZ), computed in the task + + // Candidate columns for JPsi/muon correlations DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float); DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); @@ -210,12 +231,28 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::MassDileptonCandidate, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Phiassoc, dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2); DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", + // bookkeeping / labels + dqanalysisflags::PairFilter, dqanalysisflags::McDecision, + // pair kinematics dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, + // pseudo-proper decay length (Lxyee/Lzee hold kVertexingTauxyProjected/kVertexingTauzProjected) 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::MultiplicityFT0A, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0M, dqanalysisflags::MultiplicityNContrib); + dqanalysisflags::TauxyeeErr, dqanalysisflags::TauzeeErr, + // secondary vertex + dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr, + dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee, + // primary vertex + dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, + // leg 1 + dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaSigXY1, dqanalysisflags::DcaSigZ1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + // leg 2 + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, + dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, + // ambiguity, event + dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, + dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); } // namespace o2::aod - // Declarations of various short names using MyEvents = o2::soa::Join; using MyEventsBasic = o2::soa::Join; @@ -2152,6 +2189,50 @@ struct AnalysisSameEventPairing { (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) ? VarManager::fgValues[VarManager::kBdtPrompt] : -999.f, (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) ? VarManager::fgValues[VarManager::kBdtNonprompt] : -999.f); } + // flat table for prompt / non-prompt BDT training: one row per pair (not per cut; select cuts offline via PairFilter) + // Only meaningful with track covariances, the two-prong fitter and an event vertex covariance: + // otherwise the vertexing variables are not computed and fgValues would hold stale values from a previous pair. + constexpr bool eventHasVtxCovForTable = ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); + if constexpr (trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { + const bool ambiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); + const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + // 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 + const bool vertexingOK = VarManager::fgValues[VarManager::kVertexingProcCode] > 0; + if (t1.sign() * t2.sign() < 0 && vertexingOK) { + + // track DCA significances (DCA w.r.t. the collision the track was stored with, as kDCAxy1/kDCAz1) + auto dcaSig = [](float dca, float cov) -> float { + return cov > 0.f ? dca / std::sqrt(cov) : -999.f; + }; + const float dcaSigXY1 = dcaSig(VarManager::fgValues[VarManager::kDCAxy1], t1.cYY()); + const float dcaSigZ1 = dcaSig(VarManager::fgValues[VarManager::kDCAz1], t1.cZZ()); + const float dcaSigXY2 = dcaSig(VarManager::fgValues[VarManager::kDCAxy2], t2.cYY()); + const float dcaSigZ2 = dcaSig(VarManager::fgValues[VarManager::kDCAz2], t2.cZZ()); + + // decay-length significances: kVertexingLxyOverErr / kVertexingLxyzOverErr are only filled in the + // KFParticle branch of FillPairVertexing, not with the DCAFitter used here -> compute them explicitly + auto ratio = [](float num, float den) -> float { + return den > 0.f ? num / den : -999.f; + }; + const float lxyOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyErr]); + const float lxyzOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzErr]); + + PromptNonPromptSepTable(twoTrackFilter, dileptonMcDecision, + 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], lxyOverErr, VarManager::fgValues[VarManager::kVertexingLxyz], lxyzOverErr, + 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], dcaSigXY1, dcaSigZ1, + VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(), + t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], dcaSigXY2, dcaSigZ2, + VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), + ambiInBunch, ambiOutOfBunch, true, + VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); + } + } } } @@ -2237,6 +2318,7 @@ struct AnalysisSameEventPairing { VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], VarManager::fgValues[VarManager::kMultDimuons], VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); } + if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { if constexpr (eventHasQvector || eventHasQvectorCentr) { dileptonFlowList(event.collisionId(), VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kCentFT0C], @@ -2293,10 +2375,6 @@ struct AnalysisSameEventPairing { } } if (sign1 * sign2 < 0) { - 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, VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); if constexpr (TPairType == VarManager::kDecayToMuMu) { if (fConfigQA) { fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); From 434829c2e205fdd49b5ff0051f0515c71feeff3d Mon Sep 17 00:00:00 2001 From: Jonathan Witte Date: Fri, 30 Oct 2026 12:47:32 +0100 Subject: [PATCH 2/6] Moving variable calculation to VarManager and remove comments --- PWGDQ/Core/VarManager.cxx | 12 +++++++ PWGDQ/Core/VarManager.h | 16 +++++++++ PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 47 ++++++------------------ PWGDQ/Tasks/tableReader_withAssoc.h | 49 ++++++-------------------- 4 files changed, 49 insertions(+), 75 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index d1b193ec12c..a316b509fae 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -1131,6 +1131,14 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kDCAxy2] = "cm"; fgVariableNames[kDCAz2] = "DCA_{z}"; fgVariableUnits[kDCAz2] = "cm"; + fgVariableNames[kDCASigxy1] = "DCA_{xy}/#sigma_{DCA_{xy}}"; + fgVariableUnits[kDCASigxy1] = ""; + fgVariableNames[kDCASigz1] = "DCA_{z}/#sigma_{DCA_{z}}"; + fgVariableUnits[kDCASigz1] = ""; + fgVariableNames[kDCASigxy2] = "DCA_{xy}/#sigma_{DCA_{xy}}"; + fgVariableUnits[kDCASigxy2] = ""; + fgVariableNames[kDCASigz2] = "DCA_{z}/#sigma_{DCA_{z}}"; + fgVariableUnits[kDCASigz2] = ""; fgVariableNames[kTPCnSigmaEl] = "n #sigma_{e}^{TPC}"; fgVariableUnits[kTPCnSigmaEl] = ""; fgVariableNames[kTPCnSigmaEl_Corr] = "n #sigma_{e}^{TPC} Corr."; @@ -2358,6 +2366,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCharge1"] = kCharge1; fgVarNamesMap["kDCAxy1"] = kDCAxy1; fgVarNamesMap["kDCAz1"] = kDCAz1; + fgVarNamesMap["kDCASigxy1"] = kDCASigxy1; + fgVarNamesMap["kDCASigz1"] = kDCASigz1; fgVarNamesMap["kITSclusterMap1"] = kITSclusterMap1; fgVarNamesMap["kTPCnSigmaEl1"] = kTPCnSigmaEl1; fgVarNamesMap["kPin_leg1"] = kPin_leg1; @@ -2368,6 +2378,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCharge2"] = kCharge2; fgVarNamesMap["kDCAxy2"] = kDCAxy2; fgVarNamesMap["kDCAz2"] = kDCAz2; + fgVarNamesMap["kDCASigxy2"] = kDCASigxy2; + fgVarNamesMap["kDCASigz2"] = kDCASigz2; fgVarNamesMap["kITSclusterMap2"] = kITSclusterMap2; fgVarNamesMap["kTPCnSigmaEl2"] = kTPCnSigmaEl2; fgVarNamesMap["kPin"] = kPin; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index ed09b758655..3aa500da2ed 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -558,6 +558,8 @@ class VarManager : public TObject kCharge1, kDCAxy1, kDCAz1, + kDCASigxy1, // DCAxy / sqrt(cYY) of leg 1 + 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()); + 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]; + 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); diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index 5978d75dad7..58e4da774c5 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -189,15 +189,15 @@ DECLARE_SOA_COLUMN(McDecision, mcDecision, uint32_t); //! MC sign 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); //! kVertexingLxy / kVertexingLxyErr (computed in the task) +DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz -DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyz / kVertexingLxyzErr (computed in the task) +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), computed in the task -DECLARE_SOA_COLUMN(DcaSigZ1, dcaSigZ1, float); //! leg-1 DCAz / sqrt(cZZ), computed in the task -DECLARE_SOA_COLUMN(DcaSigXY2, dcaSigXY2, float); //! leg-2 DCAxy / sqrt(cYY), computed in the task -DECLARE_SOA_COLUMN(DcaSigZ2, dcaSigZ2, float); //! leg-2 DCAz / sqrt(cZZ), computed in the task +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 @@ -240,25 +240,17 @@ 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", - // bookkeeping / labels dqanalysisflags::PairFilter, dqanalysisflags::McDecision, - // pair kinematics dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, - // pseudo-proper decay length (Lxyee/Lzee hold kVertexingTauxyProjected/kVertexingTauzProjected) dqanalysisflags::Lxyee, dqanalysisflags::LxyeePoleMass, dqanalysisflags::Lzee, dqanalysisflags::LxyeePoleMassPVrecomputed, dqanalysisflags::TauxyeeErr, dqanalysisflags::TauzeeErr, - // secondary vertex dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr, dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee, - // primary vertex dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, - // leg 1 dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaSigXY1, dqanalysisflags::DcaSigZ1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - // leg 2 dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, - // ambiguity, event 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); @@ -2411,38 +2403,19 @@ struct AnalysisSameEventPairing { 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 - const bool vertexingOK = VarManager::fgValues[VarManager::kVertexingProcCode] > 0; - if (t1.sign() * t2.sign() < 0 && mcDecision > 0 && vertexingOK) { + if (t1.sign() * t2.sign() < 0 && mcDecision > 0) { const bool ambiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); - - // track DCA significances (DCA w.r.t. the collision the track was stored with, as kDCAxy1/kDCAz1) - auto dcaSig = [](float dca, float cov) -> float { - return cov > 0.f ? dca / std::sqrt(cov) : -999.f; - }; - const float dcaSigXY1 = dcaSig(VarManager::fgValues[VarManager::kDCAxy1], t1.cYY()); - const float dcaSigZ1 = dcaSig(VarManager::fgValues[VarManager::kDCAz1], t1.cZZ()); - const float dcaSigXY2 = dcaSig(VarManager::fgValues[VarManager::kDCAxy2], t2.cYY()); - const float dcaSigZ2 = dcaSig(VarManager::fgValues[VarManager::kDCAz2], t2.cZZ()); - - // decay-length significances: kVertexingLxyOverErr / kVertexingLxyzOverErr are only filled in the - // KFParticle branch of FillPairVertexing, not with the DCAFitter -> compute them explicitly - auto ratio = [](float num, float den) -> float { - return den > 0.f ? num / den : -999.f; - }; - const float lxyOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyErr]); - const float lxyzOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzErr]); - 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], lxyOverErr, VarManager::fgValues[VarManager::kVertexingLxyz], lxyzOverErr, + 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], dcaSigXY1, dcaSigZ1, + 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], dcaSigXY2, dcaSigZ2, + 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]); diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index f0fc0344e4b..bbf6da80f41 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -187,15 +187,15 @@ DECLARE_SOA_COLUMN(Corrassoc, corrassoc, bool); //! corr 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); //! kVertexingLxy / kVertexingLxyErr (computed in the task) +DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz -DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, float); //! kVertexingLxyz / kVertexingLxyzErr (computed in the task) +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), computed in the task -DECLARE_SOA_COLUMN(DcaSigZ1, dcaSigZ1, float); //! leg-1 DCAz / sqrt(cZZ), computed in the task -DECLARE_SOA_COLUMN(DcaSigXY2, dcaSigXY2, float); //! leg-2 DCAxy / sqrt(cYY), computed in the task -DECLARE_SOA_COLUMN(DcaSigZ2, dcaSigZ2, float); //! leg-2 DCAz / sqrt(cZZ), computed in the task +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 // Candidate columns for JPsi/muon correlations @@ -231,25 +231,17 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::MassDileptonCandidate, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Phiassoc, dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2); DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", - // bookkeeping / labels dqanalysisflags::PairFilter, dqanalysisflags::McDecision, - // pair kinematics dqanalysisflags::Massee, dqanalysisflags::Ptee, dqanalysisflags::Etaee, dqanalysisflags::Rapee, dqanalysisflags::Phiee, - // pseudo-proper decay length (Lxyee/Lzee hold kVertexingTauxyProjected/kVertexingTauzProjected) dqanalysisflags::Lxyee, dqanalysisflags::LxyeePoleMass, dqanalysisflags::Lzee, dqanalysisflags::LxyeePoleMassPVrecomputed, dqanalysisflags::TauxyeeErr, dqanalysisflags::TauzeeErr, - // secondary vertex dqanalysisflags::LxyeeProjected, dqanalysisflags::LxyeeOverErr, dqanalysisflags::Lxyzee, dqanalysisflags::LxyzeeOverErr, dqanalysisflags::Chi2PCAee, dqanalysisflags::CosPAee, - // primary vertex dqanalysisflags::Vx, dqanalysisflags::Vy, dqanalysisflags::Vz, - // leg 1 dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaSigXY1, dqanalysisflags::DcaSigZ1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - // leg 2 dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, - // ambiguity, event dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); } // namespace o2::aod @@ -2198,36 +2190,17 @@ struct AnalysisSameEventPairing { const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); // 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 - const bool vertexingOK = VarManager::fgValues[VarManager::kVertexingProcCode] > 0; - if (t1.sign() * t2.sign() < 0 && vertexingOK) { - - // track DCA significances (DCA w.r.t. the collision the track was stored with, as kDCAxy1/kDCAz1) - auto dcaSig = [](float dca, float cov) -> float { - return cov > 0.f ? dca / std::sqrt(cov) : -999.f; - }; - const float dcaSigXY1 = dcaSig(VarManager::fgValues[VarManager::kDCAxy1], t1.cYY()); - const float dcaSigZ1 = dcaSig(VarManager::fgValues[VarManager::kDCAz1], t1.cZZ()); - const float dcaSigXY2 = dcaSig(VarManager::fgValues[VarManager::kDCAxy2], t2.cYY()); - const float dcaSigZ2 = dcaSig(VarManager::fgValues[VarManager::kDCAz2], t2.cZZ()); - - // decay-length significances: kVertexingLxyOverErr / kVertexingLxyzOverErr are only filled in the - // KFParticle branch of FillPairVertexing, not with the DCAFitter used here -> compute them explicitly - auto ratio = [](float num, float den) -> float { - return den > 0.f ? num / den : -999.f; - }; - const float lxyOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyErr]); - const float lxyzOverErr = ratio(VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzErr]); - - PromptNonPromptSepTable(twoTrackFilter, dileptonMcDecision, + if (t1.sign() * t2.sign() < 0) { + PromptNonPromptSepTable(twoTrackFilter, dileptonMcDecision, 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], lxyOverErr, VarManager::fgValues[VarManager::kVertexingLxyz], lxyzOverErr, + 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], dcaSigXY1, dcaSigZ1, + 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], dcaSigXY2, dcaSigZ2, + 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, true, VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); From 550d4c7b9c2b0ef8b850e4b9aab525bbbe8b2a80 Mon Sep 17 00:00:00 2001 From: Jonathan Witte Date: Fri, 30 Oct 2026 14:50:59 +0100 Subject: [PATCH 3/6] Improve naming, remove comments, replace redundant calculations --- PWGDQ/Core/VarManager.cxx | 24 ++++++++++---------- PWGDQ/Core/VarManager.h | 31 +++++++++++--------------- PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 19 +++++++--------- PWGDQ/Tasks/tableReader_withAssoc.h | 19 +++++++--------- 4 files changed, 41 insertions(+), 52 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index a316b509fae..dcc87f5790f 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -1131,14 +1131,14 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kDCAxy2] = "cm"; fgVariableNames[kDCAz2] = "DCA_{z}"; fgVariableUnits[kDCAz2] = "cm"; - fgVariableNames[kDCASigxy1] = "DCA_{xy}/#sigma_{DCA_{xy}}"; - fgVariableUnits[kDCASigxy1] = ""; - fgVariableNames[kDCASigz1] = "DCA_{z}/#sigma_{DCA_{z}}"; - fgVariableUnits[kDCASigz1] = ""; - fgVariableNames[kDCASigxy2] = "DCA_{xy}/#sigma_{DCA_{xy}}"; - fgVariableUnits[kDCASigxy2] = ""; - fgVariableNames[kDCASigz2] = "DCA_{z}/#sigma_{DCA_{z}}"; - fgVariableUnits[kDCASigz2] = ""; + fgVariableNames[kDCAxyOverSig1] = "DCA_{xy}/#sigma_{DCA_{xy}}"; + fgVariableUnits[kDCAxyOverSig1] = ""; + fgVariableNames[kDCAzOverSig1] = "DCA_{z}/#sigma_{DCA_{z}}"; + fgVariableUnits[kDCAzOverSig1] = ""; + fgVariableNames[kDCAxyOverSig2] = "DCA_{xy}/#sigma_{DCA_{xy}}"; + fgVariableUnits[kDCAxyOverSig2] = ""; + fgVariableNames[kDCAzOverSig2] = "DCA_{z}/#sigma_{DCA_{z}}"; + fgVariableUnits[kDCAzOverSig2] = ""; fgVariableNames[kTPCnSigmaEl] = "n #sigma_{e}^{TPC}"; fgVariableUnits[kTPCnSigmaEl] = ""; fgVariableNames[kTPCnSigmaEl_Corr] = "n #sigma_{e}^{TPC} Corr."; @@ -2366,8 +2366,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCharge1"] = kCharge1; fgVarNamesMap["kDCAxy1"] = kDCAxy1; fgVarNamesMap["kDCAz1"] = kDCAz1; - fgVarNamesMap["kDCASigxy1"] = kDCASigxy1; - fgVarNamesMap["kDCASigz1"] = kDCASigz1; + fgVarNamesMap["kDCAxyOverSig1"] = kDCAxyOverSig1; + fgVarNamesMap["kDCAzOverSig1"] = kDCAzOverSig1; fgVarNamesMap["kITSclusterMap1"] = kITSclusterMap1; fgVarNamesMap["kTPCnSigmaEl1"] = kTPCnSigmaEl1; fgVarNamesMap["kPin_leg1"] = kPin_leg1; @@ -2378,8 +2378,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCharge2"] = kCharge2; fgVarNamesMap["kDCAxy2"] = kDCAxy2; fgVarNamesMap["kDCAz2"] = kDCAz2; - fgVarNamesMap["kDCASigxy2"] = kDCASigxy2; - fgVarNamesMap["kDCASigz2"] = kDCASigz2; + fgVarNamesMap["kDCAxyOverSig2"] = kDCAxyOverSig2; + fgVarNamesMap["kDCAzOverSig2"] = kDCAzOverSig2; fgVarNamesMap["kITSclusterMap2"] = kITSclusterMap2; fgVarNamesMap["kTPCnSigmaEl2"] = kTPCnSigmaEl2; fgVarNamesMap["kPin"] = kPin; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 3aa500da2ed..85694a84dcc 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -558,8 +558,8 @@ class VarManager : public TObject kCharge1, kDCAxy1, kDCAz1, - kDCASigxy1, // DCAxy / sqrt(cYY) of leg 1 - kDCASigz1, // DCAz / sqrt(cZZ) of leg 1 + kDCAxyOverSig1, + kDCAzOverSig1, kITSclusterMap1, kTPCnSigmaEl1, kPin_leg1, @@ -570,8 +570,8 @@ class VarManager : public TObject kCharge2, kDCAxy2, kDCAz2, - kDCASigxy2, // DCAxy / sqrt(cYY) of leg 2 - kDCASigz2, // DCAz / sqrt(cZZ) of leg 2 + kDCAxyOverSig2, + kDCAzOverSig2, kITSclusterMap2, kTPCnSigmaEl2, @@ -4028,19 +4028,18 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kDCAxy2] = dca2XY; values[kDCAz2] = dca2Z; - values[kDCASigxy1] = dca1XY / std::sqrt(t1.cYY()); - values[kDCASigz1] = dca1Z / std::sqrt(t1.cZZ()); - values[kDCASigxy2] = dca2XY / std::sqrt(t2.cYY()); - values[kDCASigz2] = dca2Z / std::sqrt(t2.cZZ()); + double dca1sigXY = dca1XY / std::sqrt(t1.cYY()); + double dca2sigXY = dca2XY / std::sqrt(t2.cYY()); + double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); + double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); + + values[kDCAxyOverSig1] = dca1sigXY; + values[kDCAzOverSig1] = dca1sigZ; + values[kDCAxyOverSig2] = dca2sigXY; + values[kDCAzOverSig2] = dca2sigZ; if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { // Quantities based on the barrel tables - - double dca1sigXY = dca1XY / std::sqrt(t1.cYY()); - double dca2sigXY = dca2XY / std::sqrt(t2.cYY()); - double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); - double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); @@ -5094,10 +5093,6 @@ 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]; - 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); diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index 58e4da774c5..647967b6131 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -194,10 +194,10 @@ DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertex 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(DcaXYOverSig1, dcaXYOverSig1, float); +DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); +DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); +DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float); DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); // Candidate columns efficiency calculation for prompt-non-prompt JPsi separation @@ -247,9 +247,9 @@ DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", 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::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); @@ -2396,9 +2396,6 @@ struct AnalysisSameEventPairing { } } } - // flat table for prompt / non-prompt BDT training: one row per MC-matched opposite-sign pair - // (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 @@ -2413,9 +2410,9 @@ struct AnalysisSameEventPairing { 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], + t1.pt(), t1.eta(), VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kDCAxyOverSig1], VarManager::fgValues[VarManager::kDCAzOverSig1], 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], + t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCAxyOverSig2], VarManager::fgValues[VarManager::kDCAzOverSig2], VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, isCorrectAssoc_leg1 && isCorrectAssoc_leg2, VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index bbf6da80f41..31c666bbdeb 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -192,10 +192,10 @@ DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVer 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(DcaXYOverSig1, dcaXYOverSig1, float); +DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); +DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); +DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); // Candidate columns for JPsi/muon correlations @@ -238,9 +238,9 @@ DECLARE_SOA_TABLE(JPsieeCandidates, "AOD", "DQPSEUDOPROPER", 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::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::DcaXY1, dqanalysisflags::DcaZ1, dqanalysisflags::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaSigXY2, dqanalysisflags::DcaSigZ2, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); @@ -2181,9 +2181,6 @@ struct AnalysisSameEventPairing { (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) ? VarManager::fgValues[VarManager::kBdtPrompt] : -999.f, (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) ? VarManager::fgValues[VarManager::kBdtNonprompt] : -999.f); } - // flat table for prompt / non-prompt BDT training: one row per pair (not per cut; select cuts offline via PairFilter) - // Only meaningful with track covariances, the two-prong fitter and an event vertex covariance: - // otherwise the vertexing variables are not computed and fgValues would hold stale values from a previous pair. constexpr bool eventHasVtxCovForTable = ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); if constexpr (trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { const bool ambiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); @@ -2198,9 +2195,9 @@ struct AnalysisSameEventPairing { 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], + t1.pt(), t1.eta(), VarManager::fgValues[VarManager::kDCAxy1], VarManager::fgValues[VarManager::kDCAz1], VarManager::fgValues[VarManager::kDCAxyOverSig1], VarManager::fgValues[VarManager::kDCAzOverSig1], 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], + t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCAxyOverSig2], VarManager::fgValues[VarManager::kDCAzOverSig2], VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); From 36cef82b6a845ec793ee0a5364d4fa1b64c32863 Mon Sep 17 00:00:00 2001 From: Jonathan Witte Date: Fri, 30 Oct 2026 14:52:27 +0100 Subject: [PATCH 4/6] Use clang formatting --- PWGDQ/Core/VarManager.cxx | 666 +-- PWGDQ/Core/VarManager.h | 5817 ++++++++++++++++------- PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 5861 ++++++++++++++++-------- PWGDQ/Tasks/tableReader_withAssoc.h | 5802 ++++++++++++++++------- 4 files changed, 12571 insertions(+), 5575 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index dcc87f5790f..f58704f9d9a 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -1,6 +1,6 @@ // Copyright 2019-2020 CERN and copyright holders of ALICE O2. -// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. -// All rights not expressly granted are reserved. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright +// holders. All rights not expressly granted are reserved. // // This software is distributed under the terms of the GNU General Public // License v3 (GPL Version 3), copied verbatim in the file "COPYING". @@ -72,26 +72,34 @@ int VarManager::fgITSROFBorderMarginLow = 0; int VarManager::fgITSROFBorderMarginHigh = 0; uint64_t VarManager::fgSOR = 0; uint64_t VarManager::fgEOR = 0; -ROOT::Math::PxPyPzEVector VarManager::fgBeamA(0, 0, 6799.99, 6800); // GeV, beam from A-side 4-momentum vector -ROOT::Math::PxPyPzEVector VarManager::fgBeamC(0, 0, -6799.99, 6800); // GeV, beam from C-side 4-momentum vector +ROOT::Math::PxPyPzEVector + VarManager::fgBeamA(0, 0, 6799.99, + 6800); // GeV, beam from A-side 4-momentum vector +ROOT::Math::PxPyPzEVector + VarManager::fgBeamC(0, 0, -6799.99, + 6800); // GeV, beam from C-side 4-momentum vector o2::vertexing::DCAFitterN<2> VarManager::fgFitterTwoProngBarrel; o2::vertexing::DCAFitterN<3> VarManager::fgFitterThreeProngBarrel; o2::vertexing::DCAFitterN<4> VarManager::fgFitterFourProngBarrel; o2::vertexing::FwdDCAFitterN<2> VarManager::fgFitterTwoProngFwd; o2::vertexing::FwdDCAFitterN<3> VarManager::fgFitterThreeProngFwd; o2::globaltracking::MatchGlobalFwd VarManager::mMatching; -std::map VarManager::fgCalibs; -std::array VarManager::fgRunTPCPostCalibration = {false, false, false, false}; -int VarManager::fgCalibrationType = 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb -bool VarManager::fgUseInterpolatedCalibration = true; // use interpolated calibration histograms (default: true) -int VarManager::fgEfficiencyType = 0; // type of efficiency to be applied, default is no efficiency -TObject* VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency -TObject* VarManager::fgPosiPhiMap = nullptr; -TObject* VarManager::fgNegaPhiMap = nullptr; +std::map VarManager::fgCalibs; +std::array VarManager::fgRunTPCPostCalibration = {false, false, false, + false}; +int VarManager::fgCalibrationType = + 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for + // pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb +bool VarManager::fgUseInterpolatedCalibration = + true; // use interpolated calibration histograms (default: true) +int VarManager::fgEfficiencyType = + 0; // type of efficiency to be applied, default is no efficiency +TObject *VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency +TObject *VarManager::fgPosiPhiMap = nullptr; +TObject *VarManager::fgNegaPhiMap = nullptr; bool VarManager::fgUsePhiCorrection = false; //__________________________________________________________________ -VarManager::VarManager() : TObject() -{ +VarManager::VarManager() : TObject() { // // constructor // @@ -102,8 +110,7 @@ VarManager::VarManager() : TObject() VarManager::~VarManager() = default; //__________________________________________________________________ -void VarManager::SetVariableDependencies() -{ +void VarManager::SetVariableDependencies() { // // Set as used variables on which other variables calculation depends // @@ -138,11 +145,11 @@ void VarManager::SetVariableDependencies() } //__________________________________________________________________ -void VarManager::ResetValues(int startValue, int endValue, float* values) -{ +void VarManager::ResetValues(int startValue, int endValue, float *values) { // // reset all variables to an "innocent" value - // NOTE: here we use -9999.0 as a neutral value, but depending on situation, this may not be the case + // NOTE: here we use -9999.0 as a neutral value, but depending on situation, + // this may not be the case if (!values) { values = fgValues; } @@ -152,8 +159,7 @@ void VarManager::ResetValues(int startValue, int endValue, float* values) } //__________________________________________________________________ -void VarManager::SetCollisionSystem(const TString& system, float energy) -{ +void VarManager::SetCollisionSystem(const TString &system, float energy) { // // Set the collision system and the center of mass energy // @@ -205,25 +211,43 @@ void VarManager::SetCollisionSystem(const TString& system, float energy) // TO Do: add more systems // set the beam 4-momentum vectors - float beamAEnergy = energy / 2.0f * std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / NumberOfProtonsC / NumberOfProtonsA); // GeV - float beamCEnergy = energy / 2.0f * std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / NumberOfProtonsA / NumberOfProtonsC); // GeV - float beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - NumberOfNucleonsA * NumberOfNucleonsA * MassProton * MassProton); - float beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - NumberOfNucleonsC * NumberOfNucleonsC * MassProton * MassProton); + float beamAEnergy = + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / + NumberOfProtonsC / NumberOfProtonsA); // GeV + float beamCEnergy = + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / + NumberOfProtonsA / NumberOfProtonsC); // GeV + float beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - + NumberOfNucleonsA * NumberOfNucleonsA * + MassProton * MassProton); + float beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - + NumberOfNucleonsC * NumberOfNucleonsC * + MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } //__________________________________________________________________ -void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif) -{ +void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif) { // - // Set the collision system and the center of mass energy from the GRP information - double beamAEnergy = grplhcif->getBeamEnergyPerNucleonInGeV(o2::constants::lhc::BeamDirection::BeamA); - double beamCEnergy = grplhcif->getBeamEnergyPerNucleonInGeV(o2::constants::lhc::BeamDirection::BeamC); - double beamANucleons = grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); - double beamCNucleons = grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); - double beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - beamANucleons * beamANucleons * MassProton * MassProton); - double beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - beamCNucleons * beamCNucleons * MassProton * MassProton); + // Set the collision system and the center of mass energy from the GRP + // information + double beamAEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( + o2::constants::lhc::BeamDirection::BeamA); + double beamCEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( + o2::constants::lhc::BeamDirection::BeamC); + double beamANucleons = + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); + double beamCNucleons = + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); + double beamAMomentum = + std::sqrt(beamAEnergy * beamAEnergy - + beamANucleons * beamANucleons * MassProton * MassProton); + double beamCMomentum = + std::sqrt(beamCEnergy * beamCEnergy - + beamCNucleons * beamCNucleons * MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } @@ -232,15 +256,18 @@ void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif) // void VarManager::FillEventDerived(float* values) // { // // -// // Fill event-wise derived quantities (these are all quantities which can be computed just based on the values already filled in the FillEvent() function) +// // Fill event-wise derived quantities (these are all quantities which can +// be computed just based on the values already filled in the FillEvent() +// function) // // // } //__________________________________________________________________ -void VarManager::FillTrackDerived(float* values) -{ +void VarManager::FillTrackDerived(float *values) { // - // Fill track-wise derived quantities (these are all quantities which can be computed just based on the values already filled in the FillTrack() function) + // Fill track-wise derived quantities (these are all quantities which can be + // computed just based on the values already filled in the FillTrack() + // function) // if (fgUsedVars[kP]) { values[kP] = values[kPt] * std::cosh(values[kEta]); @@ -248,45 +275,44 @@ void VarManager::FillTrackDerived(float* values) } //__________________________________________________________________ -float VarManager::calculateCosPA(const KFParticle& kfp, const KFParticle& PV) -{ +float VarManager::calculateCosPA(const KFParticle &kfp, const KFParticle &PV) { return cpaFromKF(kfp, PV); } //__________________________________________________________________ -double VarManager::ComputePIDcalibration(int species, double nSigmaValue) -{ +double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { // species: 0 - electron, 1 - pion, 2 - kaon, 3 - proton - // Depending on the PID calibration type, we use different types of calibration histograms + // Depending on the PID calibration type, we use different types of + // calibration histograms if (fgCalibrationType == 1) { // get the calibration histograms CalibObjects calibMean = kTPCElectronMean; CalibObjects calibSigma = kTPCElectronSigma; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - TH3F* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - TH3F* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + TH3F *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + TH3F *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); if (!calibMeanHist || !calibSigmaHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -295,13 +321,19 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) // Get the bin indices for the calibration histograms int binTPCncls = calibMeanHist->GetXaxis()->FindBin(fgValues[kTPCncls]); binTPCncls = (binTPCncls == 0 ? 1 : binTPCncls); - binTPCncls = (binTPCncls > calibMeanHist->GetXaxis()->GetNbins() ? calibMeanHist->GetXaxis()->GetNbins() : binTPCncls); + binTPCncls = (binTPCncls > calibMeanHist->GetXaxis()->GetNbins() + ? calibMeanHist->GetXaxis()->GetNbins() + : binTPCncls); int binPin = calibMeanHist->GetYaxis()->FindBin(fgValues[kPin]); binPin = (binPin == 0 ? 1 : binPin); - binPin = (binPin > calibMeanHist->GetYaxis()->GetNbins() ? calibMeanHist->GetYaxis()->GetNbins() : binPin); + binPin = (binPin > calibMeanHist->GetYaxis()->GetNbins() + ? calibMeanHist->GetYaxis()->GetNbins() + : binPin); int binEta = calibMeanHist->GetZaxis()->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); - binEta = (binEta > calibMeanHist->GetZaxis()->GetNbins() ? calibMeanHist->GetZaxis()->GetNbins() : binEta); + binEta = (binEta > calibMeanHist->GetZaxis()->GetNbins() + ? calibMeanHist->GetZaxis()->GetNbins() + : binEta); double mean = calibMeanHist->GetBinContent(binTPCncls, binPin, binEta); double sigma = calibSigmaHist->GetBinContent(binTPCncls, binPin, binEta); @@ -312,34 +344,34 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) CalibObjects calibSigma = kTPCElectronSigma; CalibObjects calibStatus = kTPCElectronStatus; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - calibStatus = kTPCElectronStatus; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - calibStatus = kTPCPionStatus; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - calibStatus = kTPCKaonStatus; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - calibStatus = kTPCProtonStatus; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + calibStatus = kTPCElectronStatus; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + calibStatus = kTPCPionStatus; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + calibStatus = kTPCKaonStatus; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + calibStatus = kTPCProtonStatus; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - THnF* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - THnF* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); - THnF* calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); + THnF *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + THnF *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + THnF *calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); if (!calibMeanHist || !calibSigmaHist || !calibStatusHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -348,44 +380,56 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) // Get the bin indices for the calibration histograms int binEta = calibMeanHist->GetAxis(0)->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); - binEta = (binEta > calibMeanHist->GetAxis(0)->GetNbins() ? calibMeanHist->GetAxis(0)->GetNbins() : binEta); + binEta = (binEta > calibMeanHist->GetAxis(0)->GetNbins() + ? calibMeanHist->GetAxis(0)->GetNbins() + : binEta); int binNpv = calibMeanHist->GetAxis(1)->FindBin(fgValues[kVtxNcontribReal]); binNpv = (binNpv == 0 ? 1 : binNpv); - binNpv = (binNpv > calibMeanHist->GetAxis(1)->GetNbins() ? calibMeanHist->GetAxis(1)->GetNbins() : binNpv); - int binNlong = calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); + binNpv = (binNpv > calibMeanHist->GetAxis(1)->GetNbins() + ? calibMeanHist->GetAxis(1)->GetNbins() + : binNpv); + int binNlong = + calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); binNlong = (binNlong == 0 ? 1 : binNlong); - binNlong = (binNlong > calibMeanHist->GetAxis(2)->GetNbins() ? calibMeanHist->GetAxis(2)->GetNbins() : binNlong); - int binTlong = calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); + binNlong = (binNlong > calibMeanHist->GetAxis(2)->GetNbins() + ? calibMeanHist->GetAxis(2)->GetNbins() + : binNlong); + int binTlong = + calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); binTlong = (binTlong == 0 ? 1 : binTlong); - binTlong = (binTlong > calibMeanHist->GetAxis(3)->GetNbins() ? calibMeanHist->GetAxis(3)->GetNbins() : binTlong); + binTlong = (binTlong > calibMeanHist->GetAxis(3)->GetNbins() + ? calibMeanHist->GetAxis(3)->GetNbins() + : binTlong); std::array bin{binEta, binNpv, binNlong, binTlong}; int status = static_cast(calibStatusHist->GetBinContent(bin.data())); double mean = calibMeanHist->GetBinContent(bin.data()); double sigma = calibSigmaHist->GetBinContent(bin.data()); switch (status) { - case 0: - // good calibration, return the calibrated nSigma value + case 0: + // good calibration, return the calibrated nSigma value + return (nSigmaValue - mean) / sigma; + break; + case 1: + case 4: + // calibration not valid or interpolation failed, return the original + // nSigma value + return nSigmaValue; + break; + case 2: // calibration constant has poor stat uncertainty, consider the user + // option for what to do + case 3: + // calibration constants have been interpolated + if (fgUseInterpolatedCalibration) { return (nSigmaValue - mean) / sigma; - break; - case 1: - case 4: - // calibration not valid or interpolation failed, return the original nSigma value + } else { + // return the original nSigma value return nSigmaValue; - break; - case 2: // calibration constant has poor stat uncertainty, consider the user option for what to do - case 3: - // calibration constants have been interpolated - if (fgUseInterpolatedCalibration) { - return (nSigmaValue - mean) / sigma; - } else { - // return the original nSigma value - return nSigmaValue; - } - break; - default: - return nSigmaValue; // unknown status, return the original nSigma value - break; + } + break; + default: + return nSigmaValue; // unknown status, return the original nSigma value + break; } } else { // unknown calibration type, return the original nSigma value @@ -395,11 +439,11 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) } //__________________________________________________________________ -void VarManager::SetEfficiencyObject(int efficiencyType, TObject* obj) -{ +void VarManager::SetEfficiencyObject(int efficiencyType, TObject *obj) { // check the type of the efficiency object and set it accordingly if (efficiencyType >= kNEfficiencyTypes || efficiencyType < 0) { - LOG(warning) << "SetEfficiencyObject: unknown efficiency type " << efficiencyType; + LOG(warning) << "SetEfficiencyObject: unknown efficiency type " + << efficiencyType; return; } @@ -409,72 +453,99 @@ void VarManager::SetEfficiencyObject(int efficiencyType, TObject* obj) fgEfficiencyHist = obj; } -void VarManager::FillEfficiency(float* values) -{ - // depending on the efficiency type, we use different types of efficiency histograms and different variables to get the efficiency value +void VarManager::FillEfficiency(float *values) { + // depending on the efficiency type, we use different types of efficiency + // histograms and different variables to get the efficiency value if (!values) { values = fgValues; } if (fgEfficiencyType == kNone) { - values[kPairEfficiency] = 1.0; // if no efficiency is to be applied, set the efficiency value to 1 - values[kPairWeight] = 1.0; // set the weight to 1 + values[kPairEfficiency] = + 1.0; // if no efficiency is to be applied, set the efficiency value to 1 + values[kPairWeight] = 1.0; // set the weight to 1 } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarFT0c) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); - binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() ? efficiencyHist->GetXaxis()->GetNbins() : binPt); + binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); - binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() ? efficiencyHist->GetYaxis()->GetNbins() : binCent); - int binCosThetaStarFT0c = efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); + binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); + int binCosThetaStarFT0c = + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); binCosThetaStarFT0c = (binCosThetaStarFT0c == 0 ? 1 : binCosThetaStarFT0c); - binCosThetaStarFT0c = (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() ? efficiencyHist->GetZaxis()->GetNbins() : binCosThetaStarFT0c); + binCosThetaStarFT0c = + (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarFT0c); // get the efficiency value from the histogram - values[kPairEfficiency] = efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); - values[kPairWeight] = 1.0 / (values[kPairEfficiency] > 0 ? values[kPairEfficiency] : 1.0); // set the weight as the inverse of the efficiency, but avoid division by zero + values[kPairEfficiency] = + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); + values[kPairWeight] = + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarRandom) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); - binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() ? efficiencyHist->GetXaxis()->GetNbins() : binPt); + binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); - binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() ? efficiencyHist->GetYaxis()->GetNbins() : binCent); - int binCosThetaStarRandom = efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); - binCosThetaStarRandom = (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); - binCosThetaStarRandom = (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() ? efficiencyHist->GetZaxis()->GetNbins() : binCosThetaStarRandom); + binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); + int binCosThetaStarRandom = + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); + binCosThetaStarRandom = + (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); + binCosThetaStarRandom = + (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarRandom); // get the efficiency value from the histogram - values[kPairEfficiency] = efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); - values[kPairWeight] = 1.0 / (values[kPairEfficiency] > 0 ? values[kPairEfficiency] : 1.0); // set the weight as the inverse of the efficiency, but avoid division by zero + values[kPairEfficiency] = + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); + values[kPairWeight] = + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else { - LOG(warning) << "FillEfficiency: unknown efficiency type " << fgEfficiencyType << ", using default efficiency = 1"; + LOG(warning) << "FillEfficiency: unknown efficiency type " + << fgEfficiencyType << ", using default efficiency = 1"; values[kPairEfficiency] = 1; values[kPairWeight] = 1; } } -void VarManager::SetPhiMap(TObject* hposi, TObject* hnega, bool option) -{ +void VarManager::SetPhiMap(TObject *hposi, TObject *hnega, bool option) { fgPosiPhiMap = hposi; fgNegaPhiMap = hnega; fgUsePhiCorrection = option; } -double VarManager::SampleRotationPhi(double pt, double eta, int charge) -{ +double VarManager::SampleRotationPhi(double pt, double eta, int charge) { // each type only alarm once static bool warnedEmptyPhi = false; @@ -482,11 +553,11 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) return gRandom->Uniform(0., o2::constants::math::TwoPI); } else { - TH3D* hMap = nullptr; + TH3D *hMap = nullptr; if (charge > 0) { - hMap = dynamic_cast(fgPosiPhiMap); + hMap = dynamic_cast(fgPosiPhiMap); } else { - hMap = dynamic_cast(fgNegaPhiMap); + hMap = dynamic_cast(fgNegaPhiMap); } if (!hMap) { @@ -499,13 +570,9 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) ptBin = std::clamp(ptBin, 1, hMap->GetNbinsX()); etaBin = std::clamp(etaBin, 1, hMap->GetNbinsZ()); - TH1D* hPhi = hMap->ProjectionY( - Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", - charge, ptBin, etaBin), - ptBin, - ptBin, - etaBin, - etaBin); + TH1D *hPhi = hMap->ProjectionY( + Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", charge, ptBin, etaBin), + ptBin, ptBin, etaBin, etaBin); if (!hPhi || hPhi->Integral(1, hPhi->GetNbinsX()) <= 0.) { if (!warnedEmptyPhi) { @@ -513,11 +580,7 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) "Empty phi distribution for " "pt=%f, eta=%f, charge=%d, ptBin=%d, etaBin=%d. " "Falling back to uniform phi sampling.", - pt, - eta, - charge, - ptBin, - etaBin); + pt, eta, charge, ptBin, etaBin); warnedEmptyPhi = true; } @@ -535,8 +598,8 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) } //__________________________________________________________________ -std::tuple VarManager::BimodalityCoefficientUnbinned(const std::vector& data) -{ +std::tuple +VarManager::BimodalityCoefficientUnbinned(const std::vector &data) { // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis size_t n = data.size(); @@ -546,7 +609,7 @@ std::tuple VarManager::BimodalityCoefficientU float mean = std::accumulate(data.begin(), data.end(), 0.0) / n; float m2 = 0.0, m3 = 0.0, m4 = 0.0; - for (const float& x : data) { + for (const float &x : data) { const float diff = x - mean; const float diff2 = diff * diff; m2 += diff2; @@ -566,11 +629,14 @@ std::tuple VarManager::BimodalityCoefficientU float skewness = m3 / (stddev * stddev * stddev); float kurtosis = m4 / (m2 * m2); - return std::make_tuple((skewness * skewness + 1.0) / kurtosis, mean, stddev, skewness, kurtosis); + return std::make_tuple((skewness * skewness + 1.0) / kurtosis, mean, stddev, + skewness, kurtosis); } -std::tuple VarManager::BimodalityCoefficientAndNPeaks(const std::vector& data, float binWidth, int trim, float min, float max) -{ +std::tuple +VarManager::BimodalityCoefficientAndNPeaks(const std::vector &data, + float binWidth, int trim, float min, + float max) { // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis @@ -578,14 +644,16 @@ std::tuple VarManager::BimodalityCoeffic if (binWidth < 0) { // get the tuple from the unbinned calculation auto result = BimodalityCoefficientUnbinned(data); - return std::make_tuple(std::get<0>(result), std::get<1>(result), std::get<2>(result), std::get<3>(result), std::get<4>(result), -1); + return std::make_tuple(std::get<0>(result), std::get<1>(result), + std::get<2>(result), std::get<3>(result), + std::get<4>(result), -1); } // bin the data and put it in a vector int nBins = static_cast((max - min) / binWidth); std::vector counts(nBins, 0.0); - for (const float& x : data) { + for (const float &x : data) { if (x < min || x >= max) { continue; // skip out-of-range values } @@ -595,14 +663,17 @@ std::tuple VarManager::BimodalityCoeffic } } - // trim the distribution if requested, by requiring a minimum of "trim" counts in each bin + // trim the distribution if requested, by requiring a minimum of "trim" counts + // in each bin if (trim > 0) { for (int i = 0; i < nBins; ++i) { // if the count in the bin is less than the trim value, set it to zero if (counts[i] < trim) { // set the count to zero only if this is an isolated bin, - // i.e. if this count belongs to a peak, we want to keep it even if it has counts below the trim limit, as long as the whole peak is not below the trim limit - // check the previous bins until we find an empty bin or we reach the beginning of the histogram + // i.e. if this count belongs to a peak, we want to keep it even if it + // has counts below the trim limit, as long as the whole peak is not + // below the trim limit check the previous bins until we find an empty + // bin or we reach the beginning of the histogram int localPeakCount = counts[i]; for (int j = i - 1; j >= 0; --j) { if (counts[j] == 0) { @@ -610,7 +681,8 @@ std::tuple VarManager::BimodalityCoeffic } localPeakCount += counts[j]; } - // check the next bins until we find an empty bin or we reach the end of the histogram + // check the next bins until we find an empty bin or we reach the end of + // the histogram for (int j = i + 1; j < nBins; ++j) { if (counts[j] == 0) { break; @@ -624,12 +696,14 @@ std::tuple VarManager::BimodalityCoeffic } } if (trim < 0) { - // if trim is negative, then we remove all counts belonging to local peaks with an integrated count below 1/abs(trim) + // if trim is negative, then we remove all counts belonging to local peaks + // with an integrated count below 1/abs(trim) for (int i = 0; i < nBins; ++i) { if (counts[i] == 0) { continue; // skip empty bins } - // check the previous bins until we find an empty bin or we reach the beginning of the histogram + // check the previous bins until we find an empty bin or we reach the + // beginning of the histogram int localPeakCount = counts[i]; for (int j = i - 1; j >= 0; --j) { if (counts[j] == 0) { @@ -637,7 +711,8 @@ std::tuple VarManager::BimodalityCoeffic } localPeakCount += counts[j]; } - // check the next bins until we find an empty bin or we reach the end of the histogram + // check the next bins until we find an empty bin or we reach the end of + // the histogram for (int j = i + 1; j < nBins; ++j) { if (counts[j] == 0) { break; @@ -716,12 +791,12 @@ std::tuple VarManager::BimodalityCoeffic float skewness = m3 / (stddev * stddev * stddev); float kurtosis = m4 / (m2 * m2); // Pearson's kurtosis, not excess - return std::make_tuple((skewness * skewness + 1.0) / kurtosis, mean, stddev, skewness, kurtosis, nPeaks); + return std::make_tuple((skewness * skewness + 1.0) / kurtosis, mean, stddev, + skewness, kurtosis, nPeaks); } //__________________________________________________________________ -void VarManager::SetDefaultVarNames() -{ +void VarManager::SetDefaultVarNames() { // // Set default variable names // @@ -812,7 +887,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kMultTracklets] = ""; fgVariableNames[kMultDimuons] = "Multiplicity Dimuons Unlike Sign"; fgVariableUnits[kMultDimuons] = ""; - fgVariableNames[kMultDimuonsME] = "Multiplicity Dimuons Unlike Sign Mixed Events"; + fgVariableNames[kMultDimuonsME] = + "Multiplicity Dimuons Unlike Sign Mixed Events"; fgVariableUnits[kMultDimuonsME] = ""; fgVariableNames[kCentFT0C] = "Centrality FT0C"; fgVariableUnits[kCentFT0C] = "%"; @@ -826,9 +902,12 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMCEventImpParam] = "MC impact parameter"; fgVariableNames[kMCEventPlaneAngle] = "MC event plane angle"; fgVariableNames[kMCEventCentrFT0C] = "MC Centrality FT0C"; - fgVariableNames[kMultMCNParticlesEta05] = "MC Multiplicity Central Barrel for |eta| < 0.5"; - fgVariableNames[kMultMCNParticlesEta08] = "MC Multiplicity Central Barrel for |eta| < 0.8"; - fgVariableNames[kMultMCNParticlesEta10] = "MC Multiplicity Central Barrel for |eta| < 1.0"; + fgVariableNames[kMultMCNParticlesEta05] = + "MC Multiplicity Central Barrel for |eta| < 0.5"; + fgVariableNames[kMultMCNParticlesEta08] = + "MC Multiplicity Central Barrel for |eta| < 0.8"; + fgVariableNames[kMultMCNParticlesEta10] = + "MC Multiplicity Central Barrel for |eta| < 1.0"; fgVariableUnits[kMCEventGeneratorId] = ""; fgVariableUnits[kMCEventSubGeneratorId] = ""; fgVariableUnits[kMCVtxX] = "cm"; @@ -896,11 +975,13 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kMultNTracksPVeta1] = ""; fgVariableNames[kMultNTracksPVetaHalf] = "# Mult Tracks PV |#eta| < 0.5"; fgVariableUnits[kMultNTracksPVetaHalf] = ""; - fgVariableNames[kTrackOccupancyInTimeRange] = "track occupancy in TPC drift time (PV tracks)"; + fgVariableNames[kTrackOccupancyInTimeRange] = + "track occupancy in TPC drift time (PV tracks)"; fgVariableUnits[kTrackOccupancyInTimeRange] = ""; fgVariableNames[kFT0COccupancyInTimeRange] = "FT0C occupancy"; fgVariableUnits[kFT0COccupancyInTimeRange] = ""; - fgVariableNames[kNoCollInTimeRangeStandard] = "track occupancy in TPC drift standart time"; + fgVariableNames[kNoCollInTimeRangeStandard] = + "track occupancy in TPC drift standart time"; fgVariableUnits[kNoCollInTimeRangeStandard] = ""; fgVariableNames[kMultAllTracksITSTPC] = "# ITS-TPC tracks"; fgVariableUnits[kMultAllTracksITSTPC] = ""; @@ -922,61 +1003,83 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kNTPCcontribLongA] = ""; fgVariableNames[kNTPCcontribLongC] = "# TPC-C pileup, long time range"; fgVariableUnits[kNTPCcontribLongC] = ""; - fgVariableNames[kNTPCmeanTimeLongA] = "# TPC-A pileup mean time, long time range"; + fgVariableNames[kNTPCmeanTimeLongA] = + "# TPC-A pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongA] = "#mu s"; - fgVariableNames[kNTPCmeanTimeLongC] = "# TPC-C pileup mean time, long time range"; + fgVariableNames[kNTPCmeanTimeLongC] = + "# TPC-C pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongC] = "#mu s"; - fgVariableNames[kNTPCmedianTimeLongA] = "# TPC-A pileup median time, long time range"; + fgVariableNames[kNTPCmedianTimeLongA] = + "# TPC-A pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongA] = "#mu s"; - fgVariableNames[kNTPCmedianTimeLongC] = "# TPC-C pileup median time, long time range"; + fgVariableNames[kNTPCmedianTimeLongC] = + "# TPC-C pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongC] = "#mu s"; fgVariableNames[kNTPCcontribShortA] = "# TPC-A pileup, short time range"; fgVariableUnits[kNTPCcontribShortA] = ""; fgVariableNames[kNTPCcontribShortC] = "# TPC-C pileup, short time range"; fgVariableUnits[kNTPCcontribShortC] = ""; - fgVariableNames[kNTPCmeanTimeShortA] = "# TPC-A pileup mean time, short time range"; + fgVariableNames[kNTPCmeanTimeShortA] = + "# TPC-A pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortA] = "#mu s"; - fgVariableNames[kNTPCmeanTimeShortC] = "# TPC-C pileup mean time, short time range"; + fgVariableNames[kNTPCmeanTimeShortC] = + "# TPC-C pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortC] = "#mu s"; - fgVariableNames[kNTPCmedianTimeShortA] = "# TPC-A pileup median time, short time range"; + fgVariableNames[kNTPCmedianTimeShortA] = + "# TPC-A pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortA] = "#mu s"; - fgVariableNames[kNTPCmedianTimeShortC] = "# TPC-C pileup median time, short time range"; + fgVariableNames[kNTPCmedianTimeShortC] = + "# TPC-C pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortC] = "#mu s"; - fgVariableNames[kDCAzBimodalityCoefficient] = "Unbinned Bimodality Coeff of DCAz distribution"; + fgVariableNames[kDCAzBimodalityCoefficient] = + "Unbinned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficient] = ""; - fgVariableNames[kDCAzBimodalityCoefficientBinned] = "Binned Bimodality Coeff of DCAz distribution"; + fgVariableNames[kDCAzBimodalityCoefficientBinned] = + "Binned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficientBinned] = ""; - fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed1] = "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; + fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed1] = + "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed1] = ""; - fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed2] = "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; + fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed2] = + "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed2] = ""; - fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed3] = "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; + fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed3] = + "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed3] = ""; fgVariableNames[kDCAzMean] = "Mean of DCAz distribution"; fgVariableUnits[kDCAzMean] = "cm"; - fgVariableNames[kDCAzMeanBinnedTrimmed1] = "Mean of DCAz distribution (trimmed 1)"; + fgVariableNames[kDCAzMeanBinnedTrimmed1] = + "Mean of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzMeanBinnedTrimmed1] = "cm"; - fgVariableNames[kDCAzMeanBinnedTrimmed2] = "Mean of DCAz distribution (trimmed 2)"; + fgVariableNames[kDCAzMeanBinnedTrimmed2] = + "Mean of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzMeanBinnedTrimmed2] = "cm"; - fgVariableNames[kDCAzMeanBinnedTrimmed3] = "Mean of DCAz distribution (trimmed 3)"; + fgVariableNames[kDCAzMeanBinnedTrimmed3] = + "Mean of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzMeanBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzRMS] = "RMS of DCAz distribution"; fgVariableUnits[kDCAzRMS] = "cm"; - fgVariableNames[kDCAzRMSBinnedTrimmed1] = "RMS of DCAz distribution (trimmed 1)"; + fgVariableNames[kDCAzRMSBinnedTrimmed1] = + "RMS of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzRMSBinnedTrimmed1] = "cm"; - fgVariableNames[kDCAzRMSBinnedTrimmed2] = "RMS of DCAz distribution (trimmed 2)"; + fgVariableNames[kDCAzRMSBinnedTrimmed2] = + "RMS of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzRMSBinnedTrimmed2] = "cm"; - fgVariableNames[kDCAzRMSBinnedTrimmed3] = "RMS of DCAz distribution (trimmed 3)"; + fgVariableNames[kDCAzRMSBinnedTrimmed3] = + "RMS of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzRMSBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzSkewness] = "Skewness of DCAz distribution"; fgVariableUnits[kDCAzSkewness] = ""; fgVariableNames[kDCAzKurtosis] = "Kurtosis of DCAz distribution"; fgVariableUnits[kDCAzKurtosis] = ""; - fgVariableNames[kDCAzFracAbove100um] = "Fraction of tracks with |DCAz| > 100 um"; + fgVariableNames[kDCAzFracAbove100um] = + "Fraction of tracks with |DCAz| > 100 um"; fgVariableUnits[kDCAzFracAbove100um] = ""; - fgVariableNames[kDCAzFracAbove200um] = "Fraction of tracks with |DCAz| > 200 um"; + fgVariableNames[kDCAzFracAbove200um] = + "Fraction of tracks with |DCAz| > 200 um"; fgVariableUnits[kDCAzFracAbove200um] = ""; - fgVariableNames[kDCAzFracAbove500um] = "Fraction of tracks with |DCAz| > 500 um"; + fgVariableNames[kDCAzFracAbove500um] = + "Fraction of tracks with |DCAz| > 500 um"; fgVariableUnits[kDCAzFracAbove500um] = ""; fgVariableNames[kDCAzFracAbove1mm] = "Fraction of tracks with |DCAz| > 1 mm"; fgVariableUnits[kDCAzFracAbove1mm] = ""; @@ -984,15 +1087,19 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kDCAzFracAbove2mm] = ""; fgVariableNames[kDCAzFracAbove5mm] = "Fraction of tracks with |DCAz| > 5 mm"; fgVariableUnits[kDCAzFracAbove5mm] = ""; - fgVariableNames[kDCAzFracAbove10mm] = "Fraction of tracks with |DCAz| > 10 mm"; + fgVariableNames[kDCAzFracAbove10mm] = + "Fraction of tracks with |DCAz| > 10 mm"; fgVariableUnits[kDCAzFracAbove10mm] = ""; fgVariableNames[kDCAzNPeaks] = "Number of peaks in DCAz distribution"; fgVariableUnits[kDCAzNPeaks] = ""; - fgVariableNames[kDCAzNPeaksTrimmed1] = "Number of peaks in binned DCAz distribution (trimmed 1)"; + fgVariableNames[kDCAzNPeaksTrimmed1] = + "Number of peaks in binned DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzNPeaksTrimmed1] = ""; - fgVariableNames[kDCAzNPeaksTrimmed2] = "Number of peaks in binned DCAz distribution (trimmed 2)"; + fgVariableNames[kDCAzNPeaksTrimmed2] = + "Number of peaks in binned DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzNPeaksTrimmed2] = ""; - fgVariableNames[kDCAzNPeaksTrimmed3] = "Number of peaks in binned DCAz distribution (trimmed 3)"; + fgVariableNames[kDCAzNPeaksTrimmed3] = + "Number of peaks in binned DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzNPeaksTrimmed3] = ""; fgVariableNames[kInteractionRate] = "Interaction rate"; fgVariableUnits[kInteractionRate] = "kHz"; @@ -1020,7 +1127,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kRap] = ""; fgVariableNames[kMass] = "mass"; fgVariableUnits[kMass] = "GeV/c2"; - fgVariableNames[kDeltaPtotTracks] = "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; + fgVariableNames[kDeltaPtotTracks] = + "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; fgVariableUnits[kDeltaPtotTracks] = "GeV/c"; fgVariableNames[kCharge] = "charge"; fgVariableUnits[kCharge] = ""; @@ -1040,11 +1148,13 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kTrackTime] = "ns"; fgVariableNames[kTrackTimeRes] = "Resolution of the track time"; fgVariableUnits[kTrackTimeRes] = "ns"; - fgVariableNames[kTrackTimeResRelative] = "Relative resolution of the track time"; + fgVariableNames[kTrackTimeResRelative] = + "Relative resolution of the track time"; fgVariableUnits[kTrackTimeResRelative] = ""; fgVariableNames[kTrackAssocDeltaTime] = "Track-collision association #Deltat"; fgVariableUnits[kTrackAssocDeltaTime] = "ns"; - fgVariableNames[kTrackAssocTimeThreshold] = "Track-collision association time threshold"; + fgVariableNames[kTrackAssocTimeThreshold] = + "Track-collision association time threshold"; fgVariableUnits[kTrackAssocTimeThreshold] = "ns"; fgVariableNames[kTrackAssocDeltaTimeNorm] = "|#Deltat| / threshold"; fgVariableUnits[kTrackAssocDeltaTimeNorm] = ""; @@ -1105,7 +1215,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kEMCalTime] = "ns"; fgVariableNames[kEMCalIsExotic] = "EMCal cluster is exotic"; fgVariableUnits[kEMCalIsExotic] = ""; - fgVariableNames[kEMCalDistanceToBadChannel] = "EMCal cluster distance to bad channel"; + fgVariableNames[kEMCalDistanceToBadChannel] = + "EMCal cluster distance to bad channel"; fgVariableUnits[kEMCalDistanceToBadChannel] = ""; fgVariableNames[kEMCalNLM] = "EMCal cluster no. local maxima"; fgVariableUnits[kEMCalNLM] = ""; @@ -1175,15 +1286,20 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kTOFnSigmaPr] = ""; fgVariableNames[kIsAmbiguous] = "is ambiguous track"; fgVariableUnits[kIsAmbiguous] = ""; - fgVariableNames[kIsLegFromGamma] = "is leg from #gamma #rightarror e^{+}e^{-}"; + fgVariableNames[kIsLegFromGamma] = + "is leg from #gamma #rightarror e^{+}e^{-}"; fgVariableUnits[kIsLegFromGamma] = ""; - fgVariableNames[kIsLegFromK0S] = "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; + fgVariableNames[kIsLegFromK0S] = + "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; fgVariableUnits[kIsLegFromK0S] = ""; - fgVariableNames[kIsLegFromLambda] = "is leg from #Lambda #rightarror p#pi^{-}"; + fgVariableNames[kIsLegFromLambda] = + "is leg from #Lambda #rightarror p#pi^{-}"; fgVariableUnits[kIsLegFromLambda] = ""; - fgVariableNames[kIsLegFromAntiLambda] = "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; + fgVariableNames[kIsLegFromAntiLambda] = + "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; fgVariableUnits[kIsLegFromAntiLambda] = ""; - fgVariableNames[kIsLegFromOmega] = "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; + fgVariableNames[kIsLegFromOmega] = + "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; fgVariableUnits[kIsLegFromOmega] = ""; fgVariableNames[kMuonNClusters] = "muon n-clusters"; fgVariableUnits[kMuonNClusters] = ""; @@ -1335,7 +1451,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kVertexingTauzProjected] = "ns"; fgVariableNames[kVertexingTauxyProjected] = "Pair pseudo-proper Tauxy"; fgVariableUnits[kVertexingTauxyProjected] = "ns"; - fgVariableNames[kVertexingTauxyProjectedPoleJPsiMass] = "Pair pseudo-proper Tauxy (with pole JPsi mass)"; + fgVariableNames[kVertexingTauxyProjectedPoleJPsiMass] = + "Pair pseudo-proper Tauxy (with pole JPsi mass)"; fgVariableUnits[kVertexingTauxyProjectedPoleJPsiMass] = "ns"; fgVariableNames[kVertexingTauxyzProjected] = "Pair pseudo-proper Tauxyz"; fgVariableUnits[kVertexingTauxyzProjected] = "ns"; @@ -1401,9 +1518,11 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kQ1ZNCX] = ""; fgVariableNames[kQ1ZNCY] = "Q_{1,y}^{ZNC} "; fgVariableUnits[kQ1ZNCY] = ""; - fgVariableNames[KIntercalibZNA] = "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; + fgVariableNames[KIntercalibZNA] = + "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; fgVariableUnits[KIntercalibZNA] = ""; - fgVariableNames[KIntercalibZNC] = "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; + fgVariableNames[KIntercalibZNC] = + "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; fgVariableUnits[KIntercalibZNC] = ""; fgVariableNames[kQ1ZNACXX] = "Q_{1,x}^{ZNC} #dot Q_{1,x}^{ZNA} "; fgVariableUnits[kQ1ZNACXX] = ""; @@ -1821,7 +1940,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kQuadEta] = ""; fgVariableNames[kQuadPhi] = "#varphi"; fgVariableUnits[kQuadPhi] = "rad."; - fgVariableNames[kCosthetaDileptonDitrack] = "cos#it{#theta}_{dilepton-ditrack}"; + fgVariableNames[kCosthetaDileptonDitrack] = + "cos#it{#theta}_{dilepton-ditrack}"; fgVariableUnits[kCosthetaDileptonDitrack] = ""; fgVariableNames[kDitrackMass] = "mass di-track"; fgVariableUnits[kDitrackMass] = "GeV/c2"; @@ -1927,7 +2047,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kMultPVetaHalf] = ""; fgVariableNames[kMultGlobalTracks] = "Mult global tracks ALICE3"; fgVariableUnits[kMultGlobalTracks] = ""; - fgVariableNames[kMultGlobalTracksPV] = "Mult global tracks that are PV ALICE3"; + fgVariableNames[kMultGlobalTracksPV] = + "Mult global tracks that are PV ALICE3"; fgVariableUnits[kMultGlobalTracksPV] = ""; fgVariableNames[kMultMCNParticlesAll] = "Multiplicity MC all"; fgVariableUnits[kMultMCNParticlesAll] = ""; @@ -2005,7 +2126,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kRICHnSigmaAl] = ""; fgVariableNames[kTOFEventTime] = "Event time reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTime] = "ns"; - fgVariableNames[kTOFEventTimeErr] = "Event time error reconstructed with ALICE3 TOF"; + fgVariableNames[kTOFEventTimeErr] = + "Event time error reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTimeErr] = "ns"; fgVariableNames[koTOFBeta] = "oTOF #beta"; fgVariableUnits[koTOFBeta] = ""; @@ -2048,7 +2170,8 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kInnerTOFnSigmaAl] = "n #sigma_{Al}^{iTOF}"; fgVariableUnits[kInnerTOFnSigmaAl] = ""; - // Set the variables short names map. This is needed for dynamic configuration via JSON files + // Set the variables short names map. This is needed for dynamic configuration + // via JSON files fgVarNamesMap["kNothing"] = kNothing; fgVarNamesMap["kRunNo"] = kRunNo; fgVarNamesMap["kTFNBCs"] = kTFNBCs; @@ -2151,10 +2274,14 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kNTPCmedianTimeShortA"] = kNTPCmedianTimeShortA; fgVarNamesMap["kNTPCmedianTimeShortC"] = kNTPCmedianTimeShortC; fgVarNamesMap["kDCAzBimodalityCoefficient"] = kDCAzBimodalityCoefficient; - fgVarNamesMap["kDCAzBimodalityCoefficientBinned"] = kDCAzBimodalityCoefficientBinned; - fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed1"] = kDCAzBimodalityCoefficientBinnedTrimmed1; - fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed2"] = kDCAzBimodalityCoefficientBinnedTrimmed2; - fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed3"] = kDCAzBimodalityCoefficientBinnedTrimmed3; + fgVarNamesMap["kDCAzBimodalityCoefficientBinned"] = + kDCAzBimodalityCoefficientBinned; + fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed1"] = + kDCAzBimodalityCoefficientBinnedTrimmed1; + fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed2"] = + kDCAzBimodalityCoefficientBinnedTrimmed2; + fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed3"] = + kDCAzBimodalityCoefficientBinnedTrimmed3; fgVarNamesMap["kDCAzMean"] = kDCAzMean; fgVarNamesMap["kDCAzMeanBinnedTrimmed1"] = kDCAzMeanBinnedTrimmed1; fgVarNamesMap["kDCAzMeanBinnedTrimmed2"] = kDCAzMeanBinnedTrimmed2; @@ -2477,7 +2604,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kIsLegFromLambda"] = kIsLegFromLambda; fgVarNamesMap["kIsLegFromAntiLambda"] = kIsLegFromAntiLambda; fgVarNamesMap["kIsLegFromOmega"] = kIsLegFromOmega; - fgVarNamesMap["kIsProtonFromLambdaAndAntiLambda"] = kIsProtonFromLambdaAndAntiLambda; + fgVarNamesMap["kIsProtonFromLambdaAndAntiLambda"] = + kIsProtonFromLambdaAndAntiLambda; fgVarNamesMap["kIsDalitzLeg"] = kIsDalitzLeg; fgVarNamesMap["kBarrelNAssocsInBunch"] = kBarrelNAssocsInBunch; fgVarNamesMap["kBarrelNAssocsOutOfBunch"] = kBarrelNAssocsOutOfBunch; @@ -2545,10 +2673,14 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kMCCosChi_rec"] = kMCCosChi_rec; fgVarNamesMap["kMCWeight_rec"] = kMCWeight_rec; fgVarNamesMap["kMCdeltaeta_rec"] = kMCdeltaeta_rec; - fgVarNamesMap["kMCCosChi_randomPhi_trans_rec"] = kMCCosChi_randomPhi_trans_rec; - fgVarNamesMap["kMCWeight_randomPhi_trans_rec"] = kMCWeight_randomPhi_trans_rec; - fgVarNamesMap["kMCCosChi_randomPhi_trans_gen"] = kMCCosChi_randomPhi_trans_gen; - fgVarNamesMap["kMCWeight_randomPhi_trans_gen"] = kMCWeight_randomPhi_trans_gen; + fgVarNamesMap["kMCCosChi_randomPhi_trans_rec"] = + kMCCosChi_randomPhi_trans_rec; + fgVarNamesMap["kMCWeight_randomPhi_trans_rec"] = + kMCWeight_randomPhi_trans_rec; + fgVarNamesMap["kMCCosChi_randomPhi_trans_gen"] = + kMCCosChi_randomPhi_trans_gen; + fgVarNamesMap["kMCWeight_randomPhi_trans_gen"] = + kMCWeight_randomPhi_trans_gen; fgVarNamesMap["kMCParticleWeight"] = kMCParticleWeight; fgVarNamesMap["kMCCosTheta"] = kMCCosTheta; fgVarNamesMap["kMCdeltaphi"] = kMCdeltaphi; @@ -2598,7 +2730,8 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kVertexingLxyzProjected"] = kVertexingLxyzProjected; fgVarNamesMap["kVertexingTauzProjected"] = kVertexingTauzProjected; fgVarNamesMap["kVertexingTauxyProjected"] = kVertexingTauxyProjected; - fgVarNamesMap["kVertexingTauxyProjectedPoleJPsiMass"] = kVertexingTauxyProjectedPoleJPsiMass; + fgVarNamesMap["kVertexingTauxyProjectedPoleJPsiMass"] = + kVertexingTauxyProjectedPoleJPsiMass; fgVarNamesMap["kVertexingTauxyProjectedNs"] = kVertexingTauxyProjectedNs; fgVarNamesMap["kVertexingTauxyzProjected"] = kVertexingTauxyzProjected; fgVarNamesMap["kMCVertexingTauzProjected"] = kVertexingTauzProjected; @@ -2780,8 +2913,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kKFJpsiDCAxy"] = kKFJpsiDCAxy; fgVarNamesMap["kKFPairDeviationFromPV"] = kKFPairDeviationFromPV; fgVarNamesMap["kKFPairDeviationxyFromPV"] = kKFPairDeviationxyFromPV; - fgVarNamesMap["kS12"] = kS12, - fgVarNamesMap["kS13"] = kS13, + fgVarNamesMap["kS12"] = kS12, fgVarNamesMap["kS13"] = kS13, fgVarNamesMap["kS23"] = kS23, fgVarNamesMap["kNPairVariables"] = kNPairVariables; fgVarNamesMap["kPairMass"] = kPairMass; @@ -2942,17 +3074,21 @@ void VarManager::SetDefaultVarNames() } //__________________________________________________________________ -bool VarManager::computeBarrelAssocTimeCompat(float trackTime, float trackTimeRes, bool timeResIsRange, bool isPVContributor, - int64_t origBC, float origCollTime, int origNumContrib, - int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values) -{ +bool VarManager::computeBarrelAssocTimeCompat( + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float *values) { // - // Mirrors the time-based association of Common/Core/CollisionAssociation.h::runAssocWithTime for central barrel tracks. - // Every arithmetic step is kept identical to the associator (including the double->int64 truncations), - // so that re-applying it on skimmed associations with a smaller timeMargin reproduces a skim produced directly with that margin. - // Only tracks assigned to a collision in the AO2D are handled (this is always the case for tracks written by the DQ table makers). + // Mirrors the time-based association of + // Common/Core/CollisionAssociation.h::runAssocWithTime for central barrel + // tracks. Every arithmetic step is kept identical to the associator + // (including the double->int64 truncations), + // so that re-applying it on skimmed associations with a smaller timeMargin + // reproduces a skim produced directly with that margin. + // Only tracks assigned to a collision in the AO2D are handled (this is always + // the case for tracks written by the DQ table makers). // if (!values) { values = fgValues; @@ -2963,41 +3099,51 @@ bool VarManager::computeBarrelAssocTimeCompat(float trackTime, float trackTimeRe constexpr double BunchSpacingNS = o2::constants::lhc::LHCBunchSpacingNS; - // (1) BC pre-window (CollisionAssociation.h: trackBCCache, bcOffsetMax, bcOffsetWindow) - // NOTE: the associator uses the raw trackTime here also for PV contributors - const int64_t bcOffsetMax = static_cast(bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); - const int64_t trackBCCache = static_cast(static_cast(origBC) + static_cast(trackTime) / BunchSpacingNS); + // (1) BC pre-window (CollisionAssociation.h: trackBCCache, bcOffsetMax, + // bcOffsetWindow) + // NOTE: the associator uses the raw trackTime here also for PV + // contributors + const int64_t bcOffsetMax = static_cast( + bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); + const int64_t trackBCCache = + static_cast(static_cast(origBC) + + static_cast(trackTime) / BunchSpacingNS); if (std::abs(trackBCCache - collBC) > bcOffsetMax) { return false; } - // (2) PV-contributor handling (usePVAssociation: 0 off, 1 OnlySameBc, 2 SameBcAndLowMult) + // (2) PV-contributor handling (usePVAssociation: 0 off, 1 OnlySameBc, 2 + // SameBcAndLowMult) constexpr int OnlySameBc = 1; constexpr int SameBcAndLowMult = 2; const bool pvMode = (usePVAssociation == OnlySameBc && isPVContributor) || - (usePVAssociation == SameBcAndLowMult && isPVContributor && origNumContrib > maxPvContribLowMult); + (usePVAssociation == SameBcAndLowMult && + isPVContributor && origNumContrib > maxPvContribLowMult); float tTrack = trackTime; float tTrackRes = trackTimeRes; if (pvMode) { - tTrack = origCollTime; // time of the ORIGINAL collision + tTrack = origCollTime; // time of the ORIGINAL collision tTrackRes = static_cast(BunchSpacingNS); // 1 BC } // (3) time difference and threshold const int64_t bcOffset = origBC - collBC; const float collTimeRes2 = collTimeRes * collTimeRes; - const float deltaTime = tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); + const float deltaTime = + tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); float threshold = 0.f; if (pvMode) { threshold = tTrackRes; // margin NOT applied } else if (timeResIsRange) { threshold = tTrackRes + nSigma * std::sqrt(collTimeRes2) + timeMargin; } else { - threshold = nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; + threshold = + nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; } values[kTrackAssocDeltaTime] = deltaTime; values[kTrackAssocTimeThreshold] = threshold; - values[kTrackAssocDeltaTimeNorm] = (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; + values[kTrackAssocDeltaTimeNorm] = + (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; return std::abs(deltaTime) < threshold; } diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 85694a84dcc..f10a712f92e 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -1,6 +1,6 @@ // Copyright 2019-2020 CERN and copyright holders of ALICE O2. -// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. -// All rights not expressly granted are reserved. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright +// holders. All rights not expressly granted are reserved. // // This software is distributed under the terms of the GNU General Public // License v3 (GPL Version 3), copied verbatim in the file "COPYING". @@ -82,18 +82,20 @@ #include #include -using SMatrix55 = ROOT::Math::SMatrix>; +using SMatrix55 = + ROOT::Math::SMatrix>; using SMatrix5 = ROOT::Math::SVector; using Vec3D = ROOT::Math::SVector; //_________________________________________________________________________ -class VarManager : public TObject -{ - public: +class VarManager : public TObject { +public: // map the information contained in the objects passed to the Fill functions enum ObjTypes { - // NOTE: Elements containing "Reduced" in their name refer strictly to skimmed data tables - // and the ones that don't refer to tables from the Framework data model or both models + // NOTE: Elements containing "Reduced" in their name refer strictly to + // skimmed data tables + // and the ones that don't refer to tables from the Framework data + // model or both models BC = BIT(0), Collision = BIT(1), CollisionCentRun2 = BIT(2), @@ -121,7 +123,9 @@ class VarManager : public TObject Track = BIT(0), TrackCov = BIT(1), TrackExtra = BIT(2), - TrackPID = BIT(3), // used for basic PID properties (needed such that we can subscribe to a minimal set of PID tables): e,pi,K,p for TPC and TOF + TrackPID = BIT( + 3), // used for basic PID properties (needed such that we can subscribe + // to a minimal set of PID tables): e,pi,K,p for TPC and TOF TrackPIDExtra = BIT(4), // extra PID information TrackDCA = BIT(5), TrackSelection = BIT(6), @@ -141,19 +145,25 @@ class VarManager : public TObject DalitzBits = BIT(20), TrackTPCPID = BIT(21), TrackMFT = BIT(22), - ReducedTrackCollInfo = BIT(23), // TODO: remove it once new reduced data tables are produced for dielectron with ReducedTracksBarrelInfo - ReducedMuonCollInfo = BIT(24), // TODO: remove it once new reduced data tables are produced for dielectron with ReducedTracksBarrelInfo + ReducedTrackCollInfo = + BIT(23), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo + ReducedMuonCollInfo = + BIT(24), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo MuonRealign = BIT(25), MuonCovRealign = BIT(26), MFTCov = BIT(27), TrackTOFService = BIT(28), ParticleMC = BIT(29), MuonDca = BIT(30), - TrackEMCal = BIT(31) // NOTE: last free bit of the uint32 track fill maps; used both for aod::EMCALClusters and ReducedEMCals + TrackEMCal = BIT(31) // NOTE: last free bit of the uint32 track fill maps; + // used both for aod::EMCALClusters and ReducedEMCals }; enum PairCandidateType { - // TODO: need to agree on a scheme to incorporate all various hypotheses (e.g. e - mu, jpsi - K+, Jpsi - pipi,...) + // TODO: need to agree on a scheme to incorporate all various hypotheses + // (e.g. e - mu, jpsi - K+, Jpsi - pipi,...) kDecayToEE = 0, // e.g. J/psi -> e+ e- kDecayToMuMu, // e.g. J/psi -> mu+ mu- kDecayToPiPi, @@ -165,7 +175,8 @@ class VarManager : public TObject kPsi2StoJpsiPiPi, // e.g. Psi(2S) -> J/psi pi+ pi- kChictoJpsiEE, // e.g. Chi_c1 -> J/psi e+ e- kDstarToD0KPiPi, // e.g. D*+ -> D0 pi+ -> K- pi+ pi+ - kTripleCandidateToEEPhoton, // e.g. chi_c -> e+ e- photon or pi0 -> e+ e- photon + kTripleCandidateToEEPhoton, // e.g. chi_c -> e+ e- photon or pi0 -> e+ e- + // photon kDecayToKPi, // e.g. D0 -> K+ pi- or cc. kTripleCandidateToKPiPi, // e.g. D+ -> K- pi+ pi+ kTripleCandidateToPKPi, // e.g. Lambda_c -> p K- pi+ @@ -191,8 +202,10 @@ class VarManager : public TObject }; enum EMCalClusterFilteringBits { - kEMCalClusterIsMatched = 0, // cluster has at least one matched track (from EMCALMatchedTracks) - kEMCalClusterUserCutsBits = 1 // first bit for the user EMCal cluster selections + kEMCalClusterIsMatched = + 0, // cluster has at least one matched track (from EMCALMatchedTracks) + kEMCalClusterUserCutsBits = + 1 // first bit for the user EMCal cluster selections }; // NOLINTNEXTLINE(readability-enum-initial-value) @@ -218,21 +231,28 @@ class VarManager : public TObject kCollisionTimeRes, kBC, kBCOrbit, - kCollisionRandom, // random number generated per collision (if required, can be used to perform random selections at the collision level) + kCollisionRandom, // random number generated per collision (if required, can + // be used to perform random selections at the collision + // level) kIsPhysicsSelection, - kIsTVXTriggered, // Is trigger TVX - kIsNoTFBorder, // No time frame border - kIsNoITSROFBorder, // No ITS read out frame border (from event selection) + kIsTVXTriggered, // Is trigger TVX + kIsNoTFBorder, // No time frame border + kIsNoITSROFBorder, // No ITS read out frame border (from event selection) kIsNoITSROFBorderRecomputed, // No ITS read out frame border, computed here kIsNoSameBunch, // No collisions with same T0 BC - kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} and z_{PV FT0A-C} - kIsVertexITSTPC, // At least one ITS-TPC track - kIsVertexTOFmatched, // At least one TOF-matched track - kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame border (from event selection) - kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below maximum allowed value - kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are below maximum allowed values - kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are below maximum allowed values - kIsTriggerZNAZNC, // trigger ZNA && ZNC + kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} + // and z_{PV FT0A-C} + kIsVertexITSTPC, // At least one ITS-TPC track + kIsVertexTOFmatched, // At least one TOF-matched track + kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame + // border (from event selection) + kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below + // maximum allowed value + kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are + // below maximum allowed values + kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are + // below maximum allowed values + kIsTriggerZNAZNC, // trigger ZNA && ZNC kIsINT7, kIsEMC7, kIsINT7inMUON, @@ -355,18 +375,26 @@ class VarManager : public TObject kQ1ZNACYY, kQ1ZNACYX, kQ1ZNACXY, - kQ1X0A, // q-vector (e.g. from TPC) with x component (harmonic 1 and power 0), sub-event A - kQ1Y0A, // q-vector (e.g. from TPC) with y component (harmonic 1 and power 0), sub-event A + kQ1X0A, // q-vector (e.g. from TPC) with x component (harmonic 1 and power + // 0), sub-event A + kQ1Y0A, // q-vector (e.g. from TPC) with y component (harmonic 1 and power + // 0), sub-event A kQ1X0B, kQ1Y0B, kQ1X0C, kQ1Y0C, - kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power 0), sub-event A - kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power 0), sub-event A - kQ2X0APOS, // q-vector (e.g. from TPC) with x component (harmonic 2 and power 1), Pos. TPC - kQ2Y0APOS, // q-vector (e.g. from TPC) with y component (harmonic 2 and power 1), Pos. TPC - kQ2X0ANEG, // q-vector (e.g. from TPC) with x component (harmonic 2 and power 1), Neg. TPC - kQ2Y0ANEG, // q-vector (e.g. from TPC) with y component (harmonic 2 and power 1), Neg. TPC + kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power + // 0), sub-event A + kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power + // 0), sub-event A + kQ2X0APOS, // q-vector (e.g. from TPC) with x component (harmonic 2 and + // power 1), Pos. TPC + kQ2Y0APOS, // q-vector (e.g. from TPC) with y component (harmonic 2 and + // power 1), Pos. TPC + kQ2X0ANEG, // q-vector (e.g. from TPC) with x component (harmonic 2 and + // power 1), Neg. TPC + kQ2Y0ANEG, // q-vector (e.g. from TPC) with y component (harmonic 2 and + // power 1), Neg. TPC kQ2X0B, kQ2Y0B, kQ2X0C, @@ -391,14 +419,18 @@ class VarManager : public TObject kNnorm, kMultB, kMultC, - kQ3X0A, // q-vector (e.g. from TPC) with x component (harmonic 3 and power 0), sub-event A - kQ3Y0A, // q-vector (e.g. from TPC) with y component (harmonic 3 and power 0), sub-event A + kQ3X0A, // q-vector (e.g. from TPC) with x component (harmonic 3 and power + // 0), sub-event A + kQ3Y0A, // q-vector (e.g. from TPC) with y component (harmonic 3 and power + // 0), sub-event A kQ3X0B, kQ3Y0B, kQ3X0C, kQ3Y0C, - kQ4X0A, // q-vector (e.g. from TPC) with x component (harmonic 4 and power 0), sub-event A - kQ4Y0A, // q-vector (e.g. from TPC) with y component (harmonic 4 and power 0), sub-event A + kQ4X0A, // q-vector (e.g. from TPC) with x component (harmonic 4 and power + // 0), sub-event A + kQ4Y0A, // q-vector (e.g. from TPC) with y component (harmonic 4 and power + // 0), sub-event A kQ4X0B, kQ4Y0B, kQ4X0C, @@ -457,7 +489,8 @@ class VarManager : public TObject kTwoEvPosR2, kTwoEvCentFT0C1, kTwoEvCentFT0C2, - kTwoEvPVcontrib1, // n-contributors for collision 1 in two events correlations + kTwoEvPVcontrib1, // n-contributors for collision 1 in two events + // correlations kTwoEvPVcontrib2, kTwoEvDeltaZ, // distance in z between collisions kTwoEvDeltaX, // distance in x between collisions @@ -503,20 +536,24 @@ class VarManager : public TObject kV2ME_EP, kWV2ME_SP, kWV2ME_EP, - kTwoR2SP1, // Scalar product resolution of event1 for ME technique - kTwoR2SP2, // Scalar product resolution of event2 for ME technique - kTwoR2EP1, // Event plane resolution of event2 for ME technique - kTwoR2EP2, // Event plane resolution of event2 for ME technique - kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique - kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique - kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique - kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME technique - kCos2DeltaPhiME_FT0C, // Cos(2*Delta phi) of VM to FT0C event plane for ME technique - kCos2DeltaPhiME_FT0A, // Cos(2*Delta phi) of VM to FT0A event plane for ME technique + kTwoR2SP1, // Scalar product resolution of event1 for ME technique + kTwoR2SP2, // Scalar product resolution of event2 for ME technique + kTwoR2EP1, // Event plane resolution of event2 for ME technique + kTwoR2EP2, // Event plane resolution of event2 for ME technique + kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique + kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique + kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique + kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME + // technique + kCos2DeltaPhiME_FT0C, // Cos(2*Delta phi) of VM to FT0C event plane for ME + // technique + kCos2DeltaPhiME_FT0A, // Cos(2*Delta phi) of VM to FT0A event plane for ME + // technique kA2EPME_TPC, // A2 of VM to TPC event plane for ME technique kA2EPME_FT0C, // A2 of VM to FT0C event plane for ME technique kA2EPME_FT0A, // A2 of VM to FT0A event plane for ME technique - kNPairsPerEvent, // number of pairs per event in same-event or mixed-event pairing + kNPairsPerEvent, // number of pairs per event in same-event or mixed-event + // pairing kInteractionRate, // Variables for event mixing with cumulant @@ -558,8 +595,8 @@ class VarManager : public TObject kCharge1, kDCAxy1, kDCAz1, - kDCAxyOverSig1, - kDCAzOverSig1, + kDCAxyOverSig1, + kDCAzOverSig1, kITSclusterMap1, kTPCnSigmaEl1, kPin_leg1, @@ -570,8 +607,8 @@ class VarManager : public TObject kCharge2, kDCAxy2, kDCAz2, - kDCAxyOverSig2, - kDCAzOverSig2, + kDCAxyOverSig2, + kDCAzOverSig2, kITSclusterMap2, kTPCnSigmaEl2, @@ -582,9 +619,14 @@ class VarManager : public TObject kTrackTime, kTrackTimeRes, kTrackTimeResRelative, - kTrackAssocDeltaTime, // track time - time of the associated collision (BC offset included), ns - kTrackAssocTimeThreshold, // time-compatibility threshold of the track-to-collision associator (margin included), ns - kTrackAssocDeltaTimeNorm, // |kTrackAssocDeltaTime| / kTrackAssocTimeThreshold; < 1 means the association is time compatible + kTrackAssocDeltaTime, // track time - time of the associated collision (BC + // offset included), ns + kTrackAssocTimeThreshold, // time-compatibility threshold of the + // track-to-collision associator (margin + // included), ns + kTrackAssocDeltaTimeNorm, // |kTrackAssocDeltaTime| / + // kTrackAssocTimeThreshold; < 1 means the + // association is time compatible kDetectorMap, kHasITS, kHasTRD, @@ -647,8 +689,10 @@ class VarManager : public TObject kTOFnSigmaKa, kTOFnSigmaPr, kTrackTimeResIsRange, // Gaussian or range (see Framework/DataTypes) - kPVContributor, // This track has contributed to the collision vertex fit (see Framework/DataTypes) - kOrphanTrack, // Track has no association with any collision vertex (see Framework/DataTypes) + kPVContributor, // This track has contributed to the collision vertex fit + // (see Framework/DataTypes) + kOrphanTrack, // Track has no association with any collision vertex (see + // Framework/DataTypes) kIsAmbiguous, kIsLegFromGamma, kIsLegFromK0S, @@ -656,25 +700,29 @@ class VarManager : public TObject kIsLegFromAntiLambda, kIsLegFromOmega, kIsProtonFromLambdaAndAntiLambda, - kIsDalitzLeg, // Up to 8 dalitz selections - kBarrelNAssocsInBunch = kIsDalitzLeg + 8, // number of in bunch collision associations - kBarrelNAssocsOutOfBunch, // number of out of bunch collision associations - kEMCalEnergy, // EMCal cluster energy - kEMCalCoreEnergy, // EMCal cluster core energy - kEMCalRawEnergy, // EMCal cluster raw energy - kEMCalEta, // EMCal cluster pseudorapidity - kEMCalPhi, // EMCal cluster azimuthal angle - kEMCalM02, // EMCal shower shape long axis - kEMCalM20, // EMCal shower shape short axis - kEMCalNCells, // number of cells in the EMCal cluster - kEMCalTime, // EMCal cluster time - kEMCalIsExotic, // exotic EMCal cluster flag - kEMCalDistanceToBadChannel, // distance of the EMCal cluster to the closest bad channel - kEMCalNLM, // number of local maxima of the EMCal cluster - kEMCalDefinition, // EMCal cluster definition - kEMCalEoverP, // EMCal cluster energy over matched track momentum - kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the track - kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the track + kIsDalitzLeg, // Up to 8 dalitz selections + kBarrelNAssocsInBunch = + kIsDalitzLeg + 8, // number of in bunch collision associations + kBarrelNAssocsOutOfBunch, // number of out of bunch collision associations + kEMCalEnergy, // EMCal cluster energy + kEMCalCoreEnergy, // EMCal cluster core energy + kEMCalRawEnergy, // EMCal cluster raw energy + kEMCalEta, // EMCal cluster pseudorapidity + kEMCalPhi, // EMCal cluster azimuthal angle + kEMCalM02, // EMCal shower shape long axis + kEMCalM20, // EMCal shower shape short axis + kEMCalNCells, // number of cells in the EMCal cluster + kEMCalTime, // EMCal cluster time + kEMCalIsExotic, // exotic EMCal cluster flag + kEMCalDistanceToBadChannel, // distance of the EMCal cluster to the closest + // bad channel + kEMCalNLM, // number of local maxima of the EMCal cluster + kEMCalDefinition, // EMCal cluster definition + kEMCalEoverP, // EMCal cluster energy over matched track momentum + kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the + // track + kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the + // track kNBarrelTrackVariables, // Muon track variables @@ -1224,12 +1272,7 @@ class VarManager : public TObject kDplusToPiKPi }; - enum EventFilters { - kDoubleGap = 0, - kSingleGapA, - kSingleGapC, - kITSUPCMode - }; + enum EventFilters { kDoubleGap = 0, kSingleGapA, kSingleGapC, kITSUPCMode }; enum MuonExtrapolation { // Index used to set different options for Muon propagation @@ -1239,35 +1282,35 @@ class VarManager : public TObject kToMatching }; - static TString fgVariableNames[kNVars]; // variable names - static TString fgVariableUnits[kNVars]; // variable units - static std::map fgVarNamesMap; // key: variables short name, value: order in the Variables enum + static TString fgVariableNames[kNVars]; // variable names + static TString fgVariableUnits[kNVars]; // variable units + static std::map + fgVarNamesMap; // key: variables short name, value: order in the Variables + // enum static void SetDefaultVarNames(); - static void SetUseVariable(int var) - { + static void SetUseVariable(int var) { if (var >= 0 && var < kNVars) { fgUsedVars[var] = kTRUE; } SetVariableDependencies(); } - static void SetUseVars(const bool* usedVars) - { + static void SetUseVars(const bool *usedVars) { for (int i = 0; i < kNVars; ++i) { if (usedVars[i]) { - fgUsedVars[i] = true; // overwrite only the variables that are being used since there are more channels to modify the used variables array, independently + fgUsedVars[i] = true; // overwrite only the variables that are being + // used since there are more channels to modify + // the used variables array, independently } } SetVariableDependencies(); } - static void SetUseVars(const std::vector& usedVars) - { - for (auto const& var : usedVars) { + static void SetUseVars(const std::vector &usedVars) { + for (auto const &var : usedVars) { fgUsedVars[var] = true; } } - static bool GetUsedVar(int var) - { + static bool GetUsedVar(int var) { if (var >= 0 && var < kNVars) { return fgUsedVars[var]; } @@ -1275,51 +1318,40 @@ class VarManager : public TObject } // Flag to set PV recalculation via KF - static void SetPVrecalculationKF(const bool pvRecalKF) - { + static void SetPVrecalculationKF(const bool pvRecalKF) { fgPVrecalKF = pvRecalKF; } // Setup the collision system - static void SetCollisionSystem(const TString& system, float energy); - static void SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif); + static void SetCollisionSystem(const TString &system, float energy); + static void SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif); - static void SetMagneticField(float magField) - { - fgMagField = magField; - } + static void SetMagneticField(float magField) { fgMagField = magField; } // Setup plane position for MFT-MCH matching - static void SetMatchingPlane(float z) - { - fgzMatching = z; - } + static void SetMatchingPlane(float z) { fgzMatching = z; } - static float GetMatchingPlane() - { - return fgzMatching; - } + static float GetMatchingPlane() { return fgzMatching; } // Set z shift for forward tracks - static void SetZShift(float z) - { + static void SetZShift(float z) { fgzShiftFwd = z; fgUseTopBottomShift = false; } // Set x, y and z shifts for forward tracks - static void Set3DShift(float x, float y, float z) - { + static void Set3DShift(float x, float y, float z) { fgxShiftFwd = x; fgyShiftFwd = y; fgzShiftFwd = z; fgUseTopBottomShift = false; } - // Set separate x, y, z shifts for top (y >= 0) and bottom (y < 0) forward tracks - // Top shifts are stored in fgx/y/zShiftFwd; bottom shifts in fgx/y/zShiftFwdBottom - static void SetTopBottom3DShift(float xTop, float yTop, float zTop, float xBottom, float yBottom, float zBottom) - { + // Set separate x, y, z shifts for top (y >= 0) and bottom (y < 0) forward + // tracks Top shifts are stored in fgx/y/zShiftFwd; bottom shifts in + // fgx/y/zShiftFwdBottom + static void SetTopBottom3DShift(float xTop, float yTop, float zTop, + float xBottom, float yBottom, float zBottom) { fgxShiftFwd = xTop; fgyShiftFwd = yTop; fgzShiftFwd = zTop; @@ -1329,8 +1361,8 @@ class VarManager : public TObject fgUseTopBottomShift = true; } - static void GetFwdShiftForY(float y, float& xShift, float& yShift, float& zShift) - { + static void GetFwdShiftForY(float y, float &xShift, float &yShift, + float &zShift) { if (fgUseTopBottomShift && y < 0.f) { xShift = fgxShiftFwdBottom; yShift = fgyShiftFwdBottom; @@ -1343,20 +1375,18 @@ class VarManager : public TObject } // Setup the 2 prong KFParticle - static void SetupTwoProngKFParticle(float magField) - { + static void SetupTwoProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } // Setup magnetic field for muon propagation - static void SetupMuonMagField() - { - o2::mch::TrackExtrap::setField(); - } + static void SetupMuonMagField() { o2::mch::TrackExtrap::setField(); } // Setup the 2 prong DCAFitterN - static void SetupTwoProngDCAFitter(float magField, bool propagateToPCA, float maxR, float maxDZIni, float minParamChange, float minRelChi2Change, bool useAbsDCA) - { + static void SetupTwoProngDCAFitter(float magField, bool propagateToPCA, + float maxR, float maxDZIni, + float minParamChange, + float minRelChi2Change, bool useAbsDCA) { fgFitterTwoProngBarrel.setBz(magField); fgFitterTwoProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterTwoProngBarrel.setMaxR(maxR); @@ -1368,8 +1398,10 @@ class VarManager : public TObject } // Setup the 2 prong FwdDCAFitterN - static void SetupTwoProngFwdDCAFitter(float magField, bool propagateToPCA, float maxR, float minParamChange, float minRelChi2Change, bool useAbsDCA) - { + static void SetupTwoProngFwdDCAFitter(float magField, bool propagateToPCA, + float maxR, float minParamChange, + float minRelChi2Change, + bool useAbsDCA) { fgFitterTwoProngFwd.setBz(magField); fgFitterTwoProngFwd.setPropagateToPCA(propagateToPCA); fgFitterTwoProngFwd.setMaxR(maxR); @@ -1379,31 +1411,27 @@ class VarManager : public TObject fgUsedKF = false; } // Use MatLayerCylSet to correct MCS in fwdtrack propagation - static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet* m) - { + static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet *m) { fgFitterTwoProngFwd.setTGeoMat(false); fgFitterTwoProngFwd.setMatLUT(m); } // Use GeometryManager to correct MCS in fwdtrack propagation - static void SetupTGeoFwdDCAFitter() - { - fgFitterTwoProngFwd.setTGeoMat(true); - } + static void SetupTGeoFwdDCAFitter() { fgFitterTwoProngFwd.setTGeoMat(true); } // No material budget in fwdtrack propagation - static void SetupFwdDCAFitterNoCorr() - { + static void SetupFwdDCAFitterNoCorr() { fgFitterTwoProngFwd.setTGeoMat(false); } // Setup the 3 prong KFParticle - static void SetupThreeProngKFParticle(float magField) - { + static void SetupThreeProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } // Setup the 3 prong DCAFitterN - static void SetupThreeProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, float minRelChi2Change, bool useAbsDCA) - { + static void SetupThreeProngDCAFitter(float magField, bool propagateToPCA, + float maxR, float /*maxDZIni*/, + float minParamChange, + float minRelChi2Change, bool useAbsDCA) { fgFitterThreeProngBarrel.setBz(magField); fgFitterThreeProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterThreeProngBarrel.setMaxR(maxR); @@ -1414,15 +1442,16 @@ class VarManager : public TObject } // Setup the 4 prong KFParticle - static void SetupFourProngKFParticle(float magField) - { + static void SetupFourProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } // Setup the 4 prong DCAFitterN - static void SetupFourProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, float minRelChi2Change, bool useAbsDCA) - { + static void SetupFourProngDCAFitter(float magField, bool propagateToPCA, + float maxR, float /*maxDZIni*/, + float minParamChange, + float minRelChi2Change, bool useAbsDCA) { fgFitterFourProngBarrel.setBz(magField); fgFitterFourProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterFourProngBarrel.setMaxR(maxR); @@ -1432,170 +1461,280 @@ class VarManager : public TObject fgUsedKF = false; } - static auto getEventPlane(int harm, float qnxa, float qnya) - { + static auto getEventPlane(int harm, float qnxa, float qnya) { // Compute event plane angle from qn vector components for the sub-event A return (1.0 / harm) * TMath::ATan2(qnya, qnxa); }; - static float getDeltaPsiInRange(float psi1, float psi2, unsigned int harmonic) - { - return RecoDecay::constrainAngle(psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); + static float getDeltaPsiInRange(float psi1, float psi2, + unsigned int harmonic) { + return RecoDecay::constrainAngle( + psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); } template - static o2::dataformats::VertexBase RecalculatePrimaryVertex(T const& track0, T const& track1, const T1& collision); + static o2::dataformats::VertexBase + RecalculatePrimaryVertex(T const &track0, T const &track1, + const T1 &collision); - static std::tuple BimodalityCoefficientUnbinned(const std::vector& data); - static std::tuple BimodalityCoefficientAndNPeaks(const std::vector& data, float binWidth, int trim = 0, float min = -15.0, float max = 15.0); + static std::tuple + BimodalityCoefficientUnbinned(const std::vector &data); + static std::tuple + BimodalityCoefficientAndNPeaks(const std::vector &data, float binWidth, + int trim = 0, float min = -15.0, + float max = 15.0); template - static o2::track::TrackParCovFwd FwdToTrackPar(const T& track, const C& cov); + static o2::track::TrackParCovFwd FwdToTrackPar(const T &track, const C &cov); template - static o2::dataformats::GlobalFwdTrack PropagateMuon(const T& muon, const C& collision, int endPoint = kToVertex); + static o2::dataformats::GlobalFwdTrack + PropagateMuon(const T &muon, const C &collision, int endPoint = kToVertex); template - static o2::track::TrackParCovFwd PropagateFwd(const T& track, const C& cov, float z); + static o2::track::TrackParCovFwd PropagateFwd(const T &track, const C &cov, + float z); 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 FillBC(T const& bc, float* values = nullptr); + static void FillBC(T const &bc, float *values = nullptr); template - static void FillEvent(T const& event, float* values = nullptr); + static void FillEvent(T const &event, float *values = nullptr); template - static void FillEventTracks(T const& tracks, float* values = nullptr); + static void FillEventTracks(T const &tracks, float *values = nullptr); template - static void FillTimeFrame(T const& tfTable, float* values = nullptr); + static void FillTimeFrame(T const &tfTable, float *values = nullptr); template - static void FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values = nullptr); + static void FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values = nullptr); template - static void FillTwoEvents(T const& ev1, T const& ev2, float* values = nullptr); + static void FillTwoEvents(T const &ev1, T const &ev2, + float *values = nullptr); template - static void FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& tracks1, T2 const& tracks2, float* values = nullptr); + static void FillTwoMixEvents(T1 const &ev1, T1 const &ev2, T2 const &tracks1, + T2 const &tracks2, float *values = nullptr); template - static void FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values = nullptr); + static void FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values = nullptr); template - static void FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, T const& h_v22ev2, T const& h_v24ev2, T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, + T const &h_v22ev2, T const &h_v24ev2, + T1 const &t1, T2 const &t2, + float *values = nullptr); template - static void FillTrack(T const& track, float* values = nullptr); + static void FillTrack(T const &track, float *values = nullptr); template - static void FillPhoton(T const& track, float* values = nullptr); + static void FillPhoton(T const &track, float *values = nullptr); template - static void FillTrackEMCal(T const& cluster, float trackP = -1.0f, float deltaEta = -999.0f, float deltaPhi = -999.0f, float* values = nullptr); + static void FillTrackEMCal(T const &cluster, float trackP = -1.0f, + float deltaEta = -999.0f, float deltaPhi = -999.0f, + float *values = nullptr); template - static void FillTrackCollision(T const& track, C const& collision, float* values = nullptr); - // Re-evaluation of the time compatibility of a (barrel track, collision) association, mirroring - // Common/Core/CollisionAssociation.h::runAssocWithTime. Fills kTrackAssocDeltaTime, kTrackAssocTimeThreshold, kTrackAssocDeltaTimeNorm. - // orig* : collision originally assigned to the track in the AO2D (reference of trackTime) - // coll* : collision of the association under test - // The last 5 parameters must match the configuration of track-to-collision-associator used at skimming time - // (timeMargin and nSigma may be smaller in order to tighten the association at analysis level). - static bool computeBarrelAssocTimeCompat(float trackTime, float trackTimeRes, bool timeResIsRange, bool isPVContributor, - int64_t origBC, float origCollTime, int origNumContrib, - int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values = nullptr); - // Same as above for DQ skimmed tables: track = ReducedTracks+ReducedTracksBarrel, collision/origCollision = ReducedEvents+ReducedEventsExtended + static void FillTrackCollision(T const &track, C const &collision, + float *values = nullptr); + // Re-evaluation of the time compatibility of a (barrel track, collision) + // association, mirroring + // Common/Core/CollisionAssociation.h::runAssocWithTime. Fills + // kTrackAssocDeltaTime, kTrackAssocTimeThreshold, kTrackAssocDeltaTimeNorm. + // orig* : collision originally assigned to the track in the AO2D (reference + // of trackTime) coll* : collision of the association under test The last 5 + // parameters must match the configuration of track-to-collision-associator + // used at skimming time (timeMargin and nSigma may be smaller in order to + // tighten the association at analysis level). + static bool computeBarrelAssocTimeCompat( + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float *values = nullptr); + // Same as above for DQ skimmed tables: track = + // ReducedTracks+ReducedTracksBarrel, collision/origCollision = + // ReducedEvents+ReducedEventsExtended template - static bool isBarrelAssocTimeCompatible(T const& track, C const& collision, C const& origCollision, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values = nullptr); - template - static void FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C const& collision, float* values = nullptr); + static bool isBarrelAssocTimeCompatible( + T const &track, C const &collision, C const &origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float *values = nullptr); + template + static void FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, + C const &collision, float *values = nullptr); template - static void FillTrackCollisionMC(T1 const& track, const std::array& collPos, float massHyp = -1., float* values = nullptr); + static void + FillTrackCollisionMC(T1 const &track, const std::array &collPos, + float massHyp = -1., float *values = nullptr); template - static void FillTrackCollisionMatCorr(T const& track, C const& collision, M const& materialCorr, P const& propagator, float* values = nullptr); + static void FillTrackCollisionMatCorr(T const &track, C const &collision, + M const &materialCorr, + P const &propagator, + float *values = nullptr); template - static void FillTrackMC(const U& mcStack, T const& track, float* values = nullptr); + static void FillTrackMC(const U &mcStack, T const &track, + float *values = nullptr); template - static void FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values = nullptr, float Translow = 1. / 3, float Transhigh = 2. / 3, float Accweight = 1.0f); + static void + FillEnergyCorrelatorsMC(T const &track, T1 const &t1, float *values = nullptr, + float Translow = 1. / 3, float Transhigh = 2. / 3, + float Accweight = 1.0f); template - static void FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C& collision, float* values = nullptr); + static void FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, + const C &collision, + float *values = nullptr); template - static void FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, const C& collision, float* values = nullptr); - template - static void FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, const C& collision, C2 const& mftcov, float* values = nullptr); + static void FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, + const C &collision, float *values = nullptr); + template + static void FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, + const C &collision, C2 const &mftcov, + float *values = nullptr); template - static void FillPair(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPair(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillPairRotation(T1 const& t1, T2 const& t2, int rotation, float* values = nullptr); + static void FillPairRotation(T1 const &t1, T2 const &t2, int rotation, + float *values = nullptr); template - static void FillPairRotation_ME(T const& t1, T const& t2, int rotation, float* values = nullptr); - template - static void FillPairCollision(C const& collision, T1 const& t1, T2 const& t2, float* values = nullptr); - template - static void FillPairCollisionMatCorr(C const& collision, T1 const& t1, T2 const& t2, M const& materialCorr, P const& propagator, float* values = nullptr); + static void FillPairRotation_ME(T const &t1, T const &t2, int rotation, + float *values = nullptr); + template + static void FillPairCollision(C const &collision, T1 const &t1, T2 const &t2, + float *values = nullptr); + template + static void FillPairCollisionMatCorr(C const &collision, T1 const &t1, + T2 const &t2, M const &materialCorr, + P const &propagator, + float *values = nullptr); template - static void FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, PairCandidateType pairType = kTripleCandidateToEEPhoton); + static void + FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, float *values = nullptr, + PairCandidateType pairType = kTripleCandidateToEEPhoton); template - static void FillPairME(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairME(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillPairMEAcrossTFs(T const& t1, T const& t2, float* values = nullptr); + static void FillPairMEAcrossTFs(T const &t1, T const &t2, + float *values = nullptr); template - static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairMC(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr); + static void FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, + float *values = nullptr); template - static void FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, float* values = nullptr); - template - static void FillPairVertexing(C const& collision, T const& t1, T const& t2, float* values = nullptr); - template - static void FillPairVertexingRecomputePV(C const& /*collision*/, T const& t1, T const& t2, const o2::dataformats::VertexBase& pvRefitted, float* values = nullptr); + static void FillQuadMC(T1 const &dilepton, T2 const &track1, T2 const &track2, + float *values = nullptr); + template + static void FillPairVertexing(C const &collision, T const &t1, T const &t2, + float *values = nullptr); + template + static void FillPairVertexingRecomputePV( + C const & /*collision*/, T const &t1, T const &t2, + const o2::dataformats::VertexBase &pvRefitted, float *values = nullptr); template - static void FillTripletVertexing(C const& collision, T const& t1, T const& t2, T const& t3, PairCandidateType tripletType, float* values = nullptr); - template - static void FillDileptonTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track, float* values); + static void FillTripletVertexing(C const &collision, T const &t1, T const &t2, + T const &t3, PairCandidateType tripletType, + float *values = nullptr); + template + static void FillDileptonTrackVertexing(C const &collision, T1 const &lepton1, + T1 const &lepton2, T1 const &track, + float *values); template - static void FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values = nullptr, float hadronMass = 0.0f); - template - static void FillEnergyCorrelatorTriple(C const& collision, T1 const& lepton1, T2 const& lepton2, T3 const& hadron, float* values = nullptr, float Translow = 1. / 3, float Transhigh = 2. / 3, bool applyFitMass = false, float sidebandMass = 0.0f, float weight = 1.0f); - template - static void FillEnergyCorrelatorsUnfoldingTriple(T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, T5 const& t1, float* values = nullptr, bool applyFitMass = false, float Effweight_rec = 1.f, float Accweight_gen = 1.f, float Translow = 1. / 3, float Transhigh = 2. / 3); + static void FillDileptonHadron(T1 const &dilepton, T2 const &hadron, + float *values = nullptr, + float hadronMass = 0.0f); + template + static void FillEnergyCorrelatorTriple( + C const &collision, T1 const &lepton1, T2 const &lepton2, + T3 const &hadron, float *values = nullptr, float Translow = 1. / 3, + float Transhigh = 2. / 3, bool applyFitMass = false, + float sidebandMass = 0.0f, float weight = 1.0f); + template + static void FillEnergyCorrelatorsUnfoldingTriple( + T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, + T5 const &t1, float *values = nullptr, bool applyFitMass = false, + float Effweight_rec = 1.f, float Accweight_gen = 1.f, + float Translow = 1. / 3, float Transhigh = 2. / 3); template - static void FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* values = nullptr); + static void FillDileptonPhoton(T1 const &dilepton, T2 const &photon, + float *values = nullptr); template - static void FillHadron(T const& hadron, float* values = nullptr, float hadronMass = 0.0f); + static void FillHadron(T const &hadron, float *values = nullptr, + float hadronMass = 0.0f); template - static void FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper, T& bdtScoreCharmHad, float* values = nullptr); - template - static void FillDileptonCharmHadron(DQ const& dilepton, HF const& charmHadron, H hfHelper, T& bdtScoreCharmHad, float* values = nullptr); + static void FillSingleDileptonCharmHadron(Cand const &candidate, H hfHelper, + T &bdtScoreCharmHad, + float *values = nullptr); + template + static void FillDileptonCharmHadron(DQ const &dilepton, HF const &charmHadron, + H hfHelper, T &bdtScoreCharmHad, + float *values = nullptr); template - static void FillQVectorFromGFW(C const& collision, A const& compA11, A const& compB11, A const& compC11, A const& compA21, A const& compB21, A const& compC21, A const& compA31, A const& compB31, A const& compC31, A const& compA41, A const& compB41, A const& compC41, A const& compA23, A const& compA42, float S10A = 1.0, float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, float* values = nullptr); + static void FillQVectorFromGFW( + C const &collision, A const &compA11, A const &compB11, A const &compC11, + A const &compA21, A const &compB21, A const &compC21, A const &compA31, + A const &compB31, A const &compC31, A const &compA41, A const &compB41, + A const &compC41, A const &compA23, A const &compA42, float S10A = 1.0, + float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, + float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, + float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, + float *values = nullptr); template - static void FillQVectorFromCentralFW(C const& collision, float* values = nullptr); + static void FillQVectorFromCentralFW(C const &collision, + float *values = nullptr); template - static void FillNewQVectorFromCentralFW(C const& collision, float* values = nullptr); + static void FillNewQVectorFromCentralFW(C const &collision, + float *values = nullptr); template - static void FillSpectatorPlane(C const& collision, float* values = nullptr); + static void FillSpectatorPlane(C const &collision, float *values = nullptr); template - static void FillPairVn(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairVn(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, T3 const& hadron2, float* values = nullptr); - template - static void FillDileptonTrackTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track1, T1 const& track2, float* values); + static void FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, + T3 const &hadron2, + float *values = nullptr); + template + static void + FillDileptonTrackTrackVertexing(C const &collision, T1 const &lepton1, + T1 const &lepton2, T1 const &track1, + T1 const &track2, float *values); template - static void FillZDC(const T& zdc, float* values = nullptr); + static void FillZDC(const T &zdc, float *values = nullptr); template - static void FillBdtScore(const T& bdtScore, float* values = nullptr); + static void FillBdtScore(const T &bdtScore, float *values = nullptr); template - static void FillFIT(const T1& bc, const T2& bcs, const T3& ft0s, const T4& fv0as, const T5& fdds, float* values = nullptr); + static void FillFIT(const T1 &bc, const T2 &bcs, const T3 &ft0s, + const T4 &fv0as, const T5 &fdds, float *values = nullptr); template - static void FillPairAlice3(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairAlice3(T1 const &t1, T2 const &t2, + float *values = nullptr); template - static void FillEventAlice3(T const& event, float* values = nullptr); + static void FillEventAlice3(T const &event, float *values = nullptr); template - static void FillTrackAlice3(T const& track, float* values = nullptr); + static void FillTrackAlice3(T const &track, float *values = nullptr); template - static void FillResolutions(M const& mcTrack, T const& track, float* values = nullptr); - template - static void FillPairVertexingAlice3(C const& collision, T const& t1, T const& t2, bool propToSV = false, float* values = nullptr); + static void FillResolutions(M const &mcTrack, T const &track, + float *values = nullptr); + template + static void FillPairVertexingAlice3(C const &collision, T const &t1, + T const &t2, bool propToSV = false, + float *values = nullptr); template - static void FillTripletVertexingALICE3(C const& collision, T const& t1, T const& t2, T const& t3, VarManager::PairCandidateType tripletType, float* values = nullptr); + static void FillTripletVertexingALICE3( + C const &collision, T const &t1, T const &t2, T const &t3, + VarManager::PairCandidateType tripletType, float *values = nullptr); - static void SetCalibrationObject(CalibObjects calib, TObject* obj) - { + static void SetCalibrationObject(CalibObjects calib, TObject *obj) { fgCalibs[calib] = obj; - // Check whether all the needed objects for TPC postcalibration are available - if (fgCalibs.contains(kTPCElectronMean) && fgCalibs.contains(kTPCElectronSigma)) { + // Check whether all the needed objects for TPC postcalibration are + // available + if (fgCalibs.contains(kTPCElectronMean) && + fgCalibs.contains(kTPCElectronSigma)) { fgRunTPCPostCalibration[0] = true; fgUsedVars[kTPCnSigmaEl_Corr] = true; } @@ -1607,14 +1746,14 @@ class VarManager : public TObject fgRunTPCPostCalibration[2] = true; fgUsedVars[kTPCnSigmaKa_Corr] = true; } - if (fgCalibs.contains(kTPCProtonMean) && fgCalibs.contains(kTPCProtonSigma)) { + if (fgCalibs.contains(kTPCProtonMean) && + fgCalibs.contains(kTPCProtonSigma)) { fgRunTPCPostCalibration[3] = true; fgUsedVars[kTPCnSigmaPr_Corr] = true; } } - static void SetCalibrationType(int type, bool useInterpolation = true) - { + static void SetCalibrationType(int type, bool useInterpolation = true) { if (type < 0 || type > 2) { LOG(fatal) << "Invalid calibration type. Must be 0, 1, or 2."; } @@ -1623,32 +1762,29 @@ class VarManager : public TObject } static double ComputePIDcalibration(int species, double nSigmaValue); - static void SetEfficiencyObject(int type, TObject* obj); - static void FillEfficiency(float* values = nullptr); - static void SetPhiMap(TObject* h1, TObject* h2, bool option); + static void SetEfficiencyObject(int type, TObject *obj); + static void FillEfficiency(float *values = nullptr); + static void SetPhiMap(TObject *h1, TObject *h2, bool option); static double SampleRotationPhi(double pT, double eta, int charge); - static TObject* GetCalibrationObject(CalibObjects calib) - { + static TObject *GetCalibrationObject(CalibObjects calib) { auto obj = fgCalibs.find(calib); if (obj == fgCalibs.end()) { return nullptr; } return obj->second; } - static void SetTPCInterSectorBoundary(float boundarySize) - { + static void SetTPCInterSectorBoundary(float boundarySize) { fgTPCInterSectorBoundary = boundarySize; } - static void SetITSROFBorderselection(int bias, int length, int marginLow, int marginHigh) - { + static void SetITSROFBorderselection(int bias, int length, int marginLow, + int marginHigh) { fgITSROFbias = bias; fgITSROFlength = length; fgITSROFBorderMarginLow = marginLow; fgITSROFBorderMarginHigh = marginHigh; } - static void SetSORandEOR(uint64_t sor, uint64_t eor) - { + static void SetSORandEOR(uint64_t sor, uint64_t eor) { fgSOR = sor; fgEOR = eor; } @@ -1656,14 +1792,19 @@ class VarManager : public TObject VarManager(); ~VarManager() override; - static float fgValues[kNVars]; // array holding all variables computed during analysis - static void ResetValues(int startValue = 0, int endValue = kNVars, float* values = nullptr); + static float + fgValues[kNVars]; // array holding all variables computed during analysis + static void ResetValues(int startValue = 0, int endValue = kNVars, + float *values = nullptr); - private: - static bool fgUsedVars[kNVars]; // holds flags for when the corresponding variable is needed (e.g., in the histogram manager, in cuts, mixing handler, etc.) +private: + static bool fgUsedVars[kNVars]; // holds flags for when the corresponding + // variable is needed (e.g., in the histogram + // manager, in cuts, mixing handler, etc.) static bool fgUsedKF; static bool fgPVrecalKF; - static void SetVariableDependencies(); // toggle those variables on which other used variables might depend + static void SetVariableDependencies(); // toggle those variables on which + // other used variables might depend static float fgMagField; static float fgzMatching; @@ -1674,33 +1815,36 @@ class VarManager : public TObject static float fgxShiftFwdBottom; static float fgyShiftFwdBottom; static float fgzShiftFwdBottom; - static float fgCenterOfMassEnergy; // collision energy - static float fgMassofCollidingParticle; // mass of the colliding particle - static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the TPC outer radius, in cm - static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) - static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) - static int fgITSROFBorderMarginLow; // ITS ROF border low margin - static int fgITSROFBorderMarginHigh; // ITS ROF border high margin - static uint64_t fgSOR; // Timestamp for start of run - static uint64_t fgEOR; // Timestamp for end of run - static ROOT::Math::PxPyPzEVector fgBeamA; // beam from A-side 4-momentum vector - static ROOT::Math::PxPyPzEVector fgBeamC; // beam from C-side 4-momentum vector + static float fgCenterOfMassEnergy; // collision energy + static float fgMassofCollidingParticle; // mass of the colliding particle + static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the + // TPC outer radius, in cm + static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) + static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) + static int fgITSROFBorderMarginLow; // ITS ROF border low margin + static int fgITSROFBorderMarginHigh; // ITS ROF border high margin + static uint64_t fgSOR; // Timestamp for start of run + static uint64_t fgEOR; // Timestamp for end of run + static ROOT::Math::PxPyPzEVector + fgBeamA; // beam from A-side 4-momentum vector + static ROOT::Math::PxPyPzEVector + fgBeamC; // beam from C-side 4-momentum vector // static void FillEventDerived(float* values = nullptr); - static void FillTrackDerived(float* values = nullptr); + static void FillTrackDerived(float *values = nullptr); template - static auto getRotatedCovMatrixXX(const T& matrix, U phi, V theta); + static auto getRotatedCovMatrixXX(const T &matrix, U phi, V theta); + template static KFPTrack createKFPTrackFromTrack(const T &track); template - static KFPTrack createKFPTrackFromTrack(const T& track); + static KFPTrack createKFPFwdTrackFromFwdTrack(const T &muon); template - static KFPTrack createKFPFwdTrackFromFwdTrack(const T& muon); - template - static KFPVertex createKFPVertexFromCollision(const T& collision); - static float calculateCosPA(const KFParticle& kfp, const KFParticle& PV); + static KFPVertex createKFPVertexFromCollision(const T &collision); + static float calculateCosPA(const KFParticle &kfp, const KFParticle &PV); template - static float calculatePhiV(const T1& t1, const T2& t2); + static float calculatePhiV(const T1 &t1, const T2 &t2); template - static float LorentzTransformJpsihadroncosChi(const TString& Option, const T1& v1, const T2& v2); + static float LorentzTransformJpsihadroncosChi(const TString &Option, + const T1 &v1, const T2 &v2); static o2::vertexing::DCAFitterN<2> fgFitterTwoProngBarrel; static o2::vertexing::DCAFitterN<3> fgFitterThreeProngBarrel; @@ -1709,38 +1853,46 @@ class VarManager : public TObject static o2::vertexing::FwdDCAFitterN<3> fgFitterThreeProngFwd; static o2::globaltracking::MatchGlobalFwd mMatching; - static std::map fgCalibs; // map of calibration histograms - static std::array fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton - static int fgCalibrationType; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb - static bool fgUseInterpolatedCalibration; // use interpolated calibration histograms (default: true) + static std::map + fgCalibs; // map of calibration histograms + static std::array + fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton + static int + fgCalibrationType; // 0 - no calibration, 1 - calibration vs + // (TPCncls,pIN,eta) typically for pp, 2 - calibration + // vs (eta,nPV,nLong,tLong) typically for PbPb + static bool fgUseInterpolatedCalibration; // use interpolated calibration + // histograms (default: true) static int fgEfficiencyType; // type of efficiency correction to apply - static TObject* fgEfficiencyHist; // histogram for efficiency correction + static TObject *fgEfficiencyHist; // histogram for efficiency correction - static TObject* fgPosiPhiMap; // phi map to correct track rotation - static TObject* fgNegaPhiMap; + static TObject *fgPosiPhiMap; // phi map to correct track rotation + static TObject *fgNegaPhiMap; static bool fgUsePhiCorrection; - VarManager& operator=(const VarManager& c); - VarManager(const VarManager& c); + VarManager &operator=(const VarManager &c); + VarManager(const VarManager &c); }; template -o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T& track, const C& cov) -{ +o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T &track, + const C &cov) { double chi2 = track.chi2(); - SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()); - std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), cov.cPhiX(), cov.cPhiY(), - cov.cPhiPhi(), cov.cTglX(), cov.cTglY(), cov.cTglPhi(), cov.cTglTgl(), - cov.c1PtX(), cov.c1PtY(), cov.c1PtPhi(), cov.c1PtTgl(), cov.c1Pt21Pt2()}; + SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), + track.signed1Pt()); + std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), + cov.cPhiX(), cov.cPhiY(), cov.cPhiPhi(), + cov.cTglX(), cov.cTglY(), cov.cTglPhi(), + cov.cTglTgl(), cov.c1PtX(), cov.c1PtY(), + cov.c1PtPhi(), cov.c1PtTgl(), cov.c1Pt21Pt2()}; SMatrix55 tcovs(v1.begin(), v1.end()); o2::track::TrackParCovFwd trackparCov{track.z(), tpars, tcovs, chi2}; return trackparCov; } template -auto VarManager::getRotatedCovMatrixXX(const T& matrix, U phi, V theta) -{ +auto VarManager::getRotatedCovMatrixXX(const T &matrix, U phi, V theta) { // auto cp = std::cos(phi); auto sp = std::sin(phi); @@ -1755,21 +1907,25 @@ auto VarManager::getRotatedCovMatrixXX(const T& matrix, U phi, V theta) } template -KFPTrack VarManager::createKFPTrackFromTrack(const T& track) -{ - std::array trackpars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; - std::array trackcovs = {track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), track.cSnpZ(), - track.cSnpSnp(), track.cTglY(), track.cTglZ(), track.cTglSnp(), track.cTglTgl(), - track.c1PtY(), track.c1PtZ(), track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; - o2::track::TrackParametrizationWithError trackparCov{track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; +KFPTrack VarManager::createKFPTrackFromTrack(const T &track) { + std::array trackpars = {track.y(), track.z(), track.snp(), + track.tgl(), track.signed1Pt()}; + std::array trackcovs = { + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + o2::track::TrackParametrizationWithError trackparCov{ + track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; std::array trkpos_par{}; std::array trkmom_par{}; std::array trk_cov{}; trackparCov.getXYZGlo(trkpos_par); trackparCov.getPxPyPzGlo(trkmom_par); trackparCov.getCovXYZPxPyPzGlo(trk_cov); - std::array trkpar_KF = {trkpos_par[0], trkpos_par[1], trkpos_par[2], - trkmom_par[0], trkmom_par[1], trkmom_par[2]}; + std::array trkpar_KF = {trkpos_par[0], trkpos_par[1], + trkpos_par[2], trkmom_par[0], + trkmom_par[1], trkmom_par[2]}; std::array trkcov_KF = trk_cov; KFPTrack kfpTrack; kfpTrack.SetParameters(trkpar_KF.data()); @@ -1781,14 +1937,14 @@ KFPTrack VarManager::createKFPTrackFromTrack(const T& track) } template -KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T& muon) -{ +KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T &muon) { o2::track::TrackParCovFwd trackparCov = FwdToTrackPar(muon, muon); std::array trk_cov{}; trackparCov.getCovXYZPxPyPzGlo(trk_cov); - std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), trackparCov.getZ(), - trackparCov.getPx(), trackparCov.getPy(), trackparCov.getPz()}; + std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), + trackparCov.getZ(), trackparCov.getPx(), + trackparCov.getPy(), trackparCov.getPz()}; std::array trkcov_KF = trk_cov; KFPTrack kfpTrack; kfpTrack.SetParameters(trkpar_KF.data()); @@ -1800,11 +1956,12 @@ KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T& muon) } template -KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) -{ +KFPVertex VarManager::createKFPVertexFromCollision(const T &collision) { KFPVertex kfpVertex; kfpVertex.SetXYZ(collision.posX(), collision.posY(), collision.posZ()); - kfpVertex.SetCovarianceMatrix(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()); + kfpVertex.SetCovarianceMatrix(collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()); kfpVertex.SetChi2(collision.chi2()); kfpVertex.SetNDF(2 * collision.numContrib() - 3); kfpVertex.SetNContributors(collision.numContrib()); @@ -1812,8 +1969,9 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) } template -o2::dataformats::VertexBase VarManager::RecalculatePrimaryVertex(T const& track0, T const& track1, const T1& collision) -{ +o2::dataformats::VertexBase +VarManager::RecalculatePrimaryVertex(T const &track0, T const &track1, + const T1 &collision) { KFParticle trk0KF; KFPTrack kfpTrack0 = createKFPTrackFromTrack(track0); trk0KF = KFParticle(kfpTrack0, -11 * track0.sign()); @@ -1832,7 +1990,8 @@ o2::dataformats::VertexBase VarManager::RecalculatePrimaryVertex(T const& track0 kVtx.Covariance(3) = collision.covXZ(); kVtx.Covariance(4) = collision.covYZ(); kVtx.Covariance(5) = collision.covZZ(); - kVtx.Chi2() = collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo + kVtx.Chi2() = + collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo kVtx.NDF() = 2 * collision.multNTracksPV() - 3; // KFVertex kfpVertex(kVtx); // kfpVertex.Initialize(); @@ -1843,29 +2002,38 @@ o2::dataformats::VertexBase VarManager::RecalculatePrimaryVertex(T const& track0 trk1KF.SubtractFromVertex(kVtx); /*printf("track2 -> subtracting \n");*/ } - o2::math_utils::Point3D vtxXYZ(kVtx.Parameter(0), kVtx.Parameter(1), kVtx.Parameter(2)); - std::array vtxCov{kVtx.Covariance(0), kVtx.Covariance(1), kVtx.Covariance(2), kVtx.Covariance(3), kVtx.Covariance(4), kVtx.Covariance(5)}; + o2::math_utils::Point3D vtxXYZ(kVtx.Parameter(0), kVtx.Parameter(1), + kVtx.Parameter(2)); + std::array vtxCov{kVtx.Covariance(0), kVtx.Covariance(1), + kVtx.Covariance(2), kVtx.Covariance(3), + kVtx.Covariance(4), kVtx.Covariance(5)}; o2::dataformats::VertexBase primaryVertexRec = {vtxXYZ, vtxCov}; return primaryVertexRec; } template -o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, const C& collision, const int endPoint) -{ +o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T &muon, + const C &collision, + const int endPoint) { float xShift = 0.f; float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(muon.y(), xShift, yShift, zShift); - o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, zShift, muon); + o2::track::TrackParCovFwd fwdtrack = + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, + zShift, muon); o2::dataformats::GlobalFwdTrack propmuon; if (static_cast(muon.trackType()) > 2) { auto mchTrack = mMatching.FwdtoMCH(fwdtrack); if (endPoint == kToVertex) { - o2::mch::TrackExtrap::extrapToVertex(mchTrack, collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covYY()); + o2::mch::TrackExtrap::extrapToVertex( + mchTrack, collision.posX(), collision.posY(), collision.posZ(), + collision.covXX(), collision.covYY()); } if (endPoint == kToDCA) { - o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrack, collision.posZ()); + o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrack, + collision.posZ()); } if (endPoint == kToRabs) { o2::mch::TrackExtrap::extrapToZ(mchTrack, -505.); @@ -1878,34 +2046,40 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, const C } else if (static_cast(muon.trackType()) < 2) { std::array dcaInfOrig{999.f, 999.f, 999.f}; - fwdtrack.propagateToDCAhelix(fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, dcaInfOrig); + fwdtrack.propagateToDCAhelix( + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dcaInfOrig); propmuon = fwdtrack; } return propmuon; } template -o2::track::TrackParCovFwd VarManager::PropagateFwd(const T& track, const C& cov, float z) -{ +o2::track::TrackParCovFwd VarManager::PropagateFwd(const T &track, const C &cov, + float z) { o2::track::TrackParCovFwd fwdtrack = FwdToTrackPar(track, cov); fwdtrack.propagateToZhelix(z, fgMagField); return fwdtrack; } template -void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* values) -{ +void VarManager::FillPropagateMuon(const T &muon, const C &collision, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedMuonCov) > 0) { - if (muon.filteringFlags() & (uint8_t(1) << VarManager::kMuonIsPropagated)) { // the muon is already propagated, so nothing to do + if (muon.filteringFlags() & + (uint8_t(1) + << VarManager::kMuonIsPropagated)) { // the muon is already propagated, + // so nothing to do return; } } - if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0 || (fillMap & MuonCovRealign) > 0) { + if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0 || + (fillMap & MuonCovRealign) > 0) { o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muon, collision); values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); @@ -1915,7 +2089,7 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val values[kTgl] = propmuon.getTgl(); values[kPhi] = propmuon.getPhi(); - const SMatrix55& cov = propmuon.getCovariances(); + const SMatrix55 &cov = propmuon.getCovariances(); values[kMuonCXX] = cov(0, 0); values[kMuonCXY] = cov(1, 0); values[kMuonCYY] = cov(1, 1); @@ -1935,22 +2109,31 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val } template -void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, const C& collision, float* values) -{ +void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, + const C &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { float xShift = 0.f; float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muontrack, collision, kToVertex); - double px = propmuon.getP() * std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * std::cos(mfttrack.phi()); - double py = propmuon.getP() * std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * std::sin(mfttrack.phi()); - double pz = propmuon.getP() * std::cos(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())); + o2::dataformats::GlobalFwdTrack propmuon = + PropagateMuon(muontrack, collision, kToVertex); + double px = + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::cos(mfttrack.phi()); + double py = + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::sin(mfttrack.phi()); + double pz = propmuon.getP() * std::cos(o2::constants::math::PIHalf - + std::atan(mfttrack.tgl())); double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2)); - auto mftprop = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(mfttrack, xShift, yShift, zShift); + auto mftprop = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + mfttrack, xShift, yShift, zShift); mftprop.setInvQPt(static_cast(muontrack.sign()) / pt); values[kX] = mftprop.getX(); values[kY] = mftprop.getY(); @@ -1963,17 +2146,21 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, co // Helix DCA of the refitted global track w.r.t. the associated collision std::array dca{999., 999., 999.}; - mftprop.propagateToDCAhelix(fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, dca); + mftprop.propagateToDCAhelix( + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } } -template -void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, const C& collision, C2 const& mftcov, float* values) -{ +template +void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, + const C &collision, C2 const &mftcov, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((MuonfillMap & MuonCov) > 0) { if constexpr ((MFTfillMap & MFTCov) > 0) { @@ -1981,10 +2168,13 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muontrack, collision, kToVertex); - auto mft = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(mfttrack, xShift, yShift, zShift, mftcov); + o2::dataformats::GlobalFwdTrack propmuon = + PropagateMuon(muontrack, collision, kToVertex); + auto mft = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + mfttrack, xShift, yShift, zShift, mftcov); - o2::dataformats::GlobalFwdTrack globalRefit = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + o2::dataformats::GlobalFwdTrack globalRefit = + o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); values[kX] = globalRefit.getX(); values[kY] = globalRefit.getY(); values[kZ] = globalRefit.getZ(); @@ -1994,9 +2184,12 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, values[kEta] = globalRefit.getEta(); values[kPhi] = globalRefit.getPhi(); - // Helix DCA of the covariance-refitted global track w.r.t. the associated collision + // Helix DCA of the covariance-refitted global track w.r.t. the associated + // collision std::array dca{999., 999., 999.}; - globalRefit.propagateToDCAhelix(fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, dca); + globalRefit.propagateToDCAhelix( + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } @@ -2004,10 +2197,9 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, } template -void VarManager::FillTimeFrame(T const& tf, float* values) -{ +void VarManager::FillTimeFrame(T const &tf, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (T::template contains()) { values[kTFNBCs] = tf.size(); @@ -2029,11 +2221,9 @@ void VarManager::FillTimeFrame(T const& tf, float* values) } } -template -void VarManager::FillBC(T const& bc, float* values) -{ +template void VarManager::FillBC(T const &bc, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kRunNo] = bc.runNumber(); values[kBC] = bc.globalBC(); @@ -2043,10 +2233,9 @@ void VarManager::FillBC(T const& bc, float* values) } template -void VarManager::FillEvent(T const& event, float* values) -{ +void VarManager::FillEvent(T const &event, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { @@ -2058,15 +2247,18 @@ void VarManager::FillEvent(T const& event, float* values) } if (fgUsedVars[kRandomPsi2]) { - values[kRandomPsi2] = gRandom->Uniform(-o2::constants::math::PIHalf, o2::constants::math::PIHalf); + values[kRandomPsi2] = gRandom->Uniform(-o2::constants::math::PIHalf, + o2::constants::math::PIHalf); } if constexpr ((fillMap & Collision) > 0) { // TODO: trigger info from the event selection requires a separate flag - // so that it can be switched off independently of the rest of Collision variables (e.g. if event selection is not available) + // so that it can be switched off independently of the rest of + // Collision variables (e.g. if event selection is not available) if (fgUsedVars[kIsNoITSROFBorder]) { - values[kIsNoITSROFBorder] = event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); + values[kIsNoITSROFBorder] = + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); } if (fgUsedVars[kTrackOccupancyInTimeRange]) { values[kTrackOccupancyInTimeRange] = event.trackOccupancyInTimeRange(); @@ -2075,40 +2267,55 @@ void VarManager::FillEvent(T const& event, float* values) values[kFT0COccupancyInTimeRange] = event.ft0cOccupancyInTimeRange(); } if (fgUsedVars[kNoCollInTimeRangeStandard]) { - values[kNoCollInTimeRangeStandard] = event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); + values[kNoCollInTimeRangeStandard] = + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); } if (fgUsedVars[kIsTVXTriggered]) { - values[kIsTVXTriggered] = event.selection_bit(o2::aod::evsel::kIsTriggerTVX); + values[kIsTVXTriggered] = + event.selection_bit(o2::aod::evsel::kIsTriggerTVX); } if (fgUsedVars[kIsNoTFBorder]) { - values[kIsNoTFBorder] = event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); + values[kIsNoTFBorder] = + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); } if (fgUsedVars[kIsTriggerZNAZNC]) { - values[kIsTriggerZNAZNC] = static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && event.selection_bit(o2::aod::evsel::kIsBBZNC)); + values[kIsTriggerZNAZNC] = + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsNoSameBunch]) { - values[kIsNoSameBunch] = event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); + values[kIsNoSameBunch] = + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { - values[kIsGoodZvtxFT0vsPV] = event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); + values[kIsGoodZvtxFT0vsPV] = + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); } if (fgUsedVars[kIsVertexITSTPC]) { - values[kIsVertexITSTPC] = event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); + values[kIsVertexITSTPC] = + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); } if (fgUsedVars[kIsVertexTOFmatched]) { - values[kIsVertexTOFmatched] = event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); + values[kIsVertexTOFmatched] = + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); } if (fgUsedVars[kIsSel8]) { - values[kIsSel8] = static_cast(event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); + values[kIsSel8] = static_cast( + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { - values[kIsGoodITSLayer3] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + values[kIsGoodITSLayer3] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { - values[kIsGoodITSLayer0123] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + values[kIsGoodITSLayer0123] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { - values[kIsGoodITSLayersAll] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + values[kIsGoodITSLayersAll] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2117,19 +2324,24 @@ void VarManager::FillEvent(T const& event, float* values) values[kIsEMC7] = static_cast(event.alias_bit(kEMC7) > 0); } if (fgUsedVars[kIsINT7inMUON]) { - values[kIsINT7inMUON] = static_cast(event.alias_bit(kINT7inMUON) > 0); + values[kIsINT7inMUON] = + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { - values[kIsMuonSingleLowPt7] = static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + values[kIsMuonSingleLowPt7] = + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { - values[kIsMuonSingleHighPt7] = static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + values[kIsMuonSingleHighPt7] = + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { - values[kIsMuonUnlikeLowPt7] = static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + values[kIsMuonUnlikeLowPt7] = + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { - values[kIsMuonLikeLowPt7] = static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + values[kIsMuonLikeLowPt7] = + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2162,7 +2374,8 @@ void VarManager::FillEvent(T const& event, float* values) values[kCentVZERO] = event.centRun2V0M(); } - if constexpr ((fillMap & CollisionCent) > 0 || (fillMap & ReducedEventExtended) > 0) { + if constexpr ((fillMap & CollisionCent) > 0 || + (fillMap & ReducedEventExtended) > 0) { if constexpr ((fillMap & CollisionMC) == 0) { values[kCentFT0C] = event.centFT0C(); values[kCentFT0A] = event.centFT0A(); @@ -2170,7 +2383,8 @@ void VarManager::FillEvent(T const& event, float* values) } } - if constexpr ((fillMap & CollisionMult) > 0 || (fillMap & ReducedEventExtended) > 0) { + if constexpr ((fillMap & CollisionMult) > 0 || + (fillMap & ReducedEventExtended) > 0) { values[kMultFV0A] = event.multFV0A(); values[kMultFT0A] = event.multFT0A(); values[kMultFT0C] = event.multFT0C(); @@ -2184,7 +2398,8 @@ void VarManager::FillEvent(T const& event, float* values) values[kVtxNcontribReal] = event.multNTracksPV(); } - if constexpr ((fillMap & CollisionMultExtra) > 0 || (fillMap & ReducedEventMultExtra) > 0) { + if constexpr ((fillMap & CollisionMultExtra) > 0 || + (fillMap & ReducedEventMultExtra) > 0) { values[kMultNTracksHasITS] = event.multNTracksHasITS(); values[kMultNTracksHasTPC] = event.multNTracksHasTPC(); values[kMultNTracksHasTOF] = event.multNTracksHasTOF(); @@ -2213,7 +2428,8 @@ void VarManager::FillEvent(T const& event, float* values) values[kNTPCmedianTimeShortC] = event.nTPCoccupMedianTimeShortC(); } } - // TODO: need to add EvSels and Cents tables, etc. in case of the central data model + // TODO: need to add EvSels and Cents tables, etc. in case of the central data + // model if constexpr ((fillMap & ReducedEvent) > 0) { values[kRunNo] = event.runNumber(); @@ -2221,15 +2437,23 @@ void VarManager::FillEvent(T const& event, float* values) values[kVtxY] = event.posY(); values[kVtxZ] = event.posZ(); values[kVtxNcontrib] = event.numContrib(); - if (fgUsedVars[kIsDoubleGap] || fgUsedVars[kIsSingleGap] || fgUsedVars[kIsSingleGapA] || fgUsedVars[kIsSingleGapC] || fgUsedVars[kIsNoGap]) { - values[kIsDoubleGap] = static_cast(event.tag_bit(56 + kDoubleGap) > 0); - values[kIsSingleGapA] = static_cast(event.tag_bit(56 + kSingleGapA) > 0); - values[kIsSingleGapC] = static_cast(event.tag_bit(56 + kSingleGapC) > 0); - values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); - values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && values[kIsSingleGap] == 0.f); + if (fgUsedVars[kIsDoubleGap] || fgUsedVars[kIsSingleGap] || + fgUsedVars[kIsSingleGapA] || fgUsedVars[kIsSingleGapC] || + fgUsedVars[kIsNoGap]) { + values[kIsDoubleGap] = + static_cast(event.tag_bit(56 + kDoubleGap) > 0); + values[kIsSingleGapA] = + static_cast(event.tag_bit(56 + kSingleGapA) > 0); + values[kIsSingleGapC] = + static_cast(event.tag_bit(56 + kSingleGapC) > 0); + values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || + values[kIsSingleGapC] != 0.f); + values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && + values[kIsSingleGap] == 0.f); } if (fgUsedVars[kIsITSUPCMode]) { - values[kIsITSUPCMode] = static_cast(event.tag_bit(56 + kITSUPCMode) > 0); + values[kIsITSUPCMode] = + static_cast(event.tag_bit(56 + kITSUPCMode) > 0); } values[kCollisionTime] = event.collisionTime(); values[kCollisionTimeRes] = event.collisionTimeRes(); @@ -2239,51 +2463,73 @@ void VarManager::FillEvent(T const& event, float* values) values[kBC] = event.globalBC(); values[kBCOrbit] = event.globalBC() % o2::constants::lhc::LHCMaxBunches; values[kTimestamp] = event.timestamp(); - values[kTimeFromSOR] = (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); + values[kTimeFromSOR] = + (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); values[kCentVZERO] = event.centRun2V0M(); values[kCentFT0C] = event.centFT0C(); if (fgUsedVars[kIsNoITSROFBorderRecomputed]) { - uint16_t bcInITSROF = (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; - values[kIsNoITSROFBorderRecomputed] = bcInITSROF > fgITSROFBorderMarginLow && bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh ? 1.0 : 0.0; + uint16_t bcInITSROF = + (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; + values[kIsNoITSROFBorderRecomputed] = + bcInITSROF > fgITSROFBorderMarginLow && + bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh + ? 1.0 + : 0.0; } if (fgUsedVars[kIsNoITSROFBorder]) { - values[kIsNoITSROFBorder] = static_cast(event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); + values[kIsNoITSROFBorder] = static_cast( + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); } if (fgUsedVars[kIsTVXTriggered]) { - values[kIsTVXTriggered] = static_cast(event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); + values[kIsTVXTriggered] = static_cast( + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); } if (fgUsedVars[kIsNoTFBorder]) { - values[kIsNoTFBorder] = static_cast(event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); + values[kIsNoTFBorder] = static_cast( + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); } if (fgUsedVars[kNoCollInTimeRangeStandard]) { - values[kNoCollInTimeRangeStandard] = static_cast(event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); + values[kNoCollInTimeRangeStandard] = static_cast( + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); } if (fgUsedVars[kIsNoSameBunch]) { - values[kIsNoSameBunch] = static_cast(event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); + values[kIsNoSameBunch] = static_cast( + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); } if (fgUsedVars[kIsTriggerZNAZNC]) { - values[kIsTriggerZNAZNC] = static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && event.selection_bit(o2::aod::evsel::kIsBBZNC)); + values[kIsTriggerZNAZNC] = + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { - values[kIsGoodZvtxFT0vsPV] = static_cast(event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); + values[kIsGoodZvtxFT0vsPV] = static_cast( + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); } if (fgUsedVars[kIsVertexITSTPC]) { - values[kIsVertexITSTPC] = static_cast(event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); + values[kIsVertexITSTPC] = static_cast( + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); } if (fgUsedVars[kIsVertexTOFmatched]) { - values[kIsVertexTOFmatched] = static_cast(event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); + values[kIsVertexTOFmatched] = static_cast( + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); } if (fgUsedVars[kIsSel8]) { - values[kIsSel8] = static_cast(event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); + values[kIsSel8] = static_cast( + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { - values[kIsGoodITSLayer3] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + values[kIsGoodITSLayer3] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { - values[kIsGoodITSLayer0123] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + values[kIsGoodITSLayer0123] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { - values[kIsGoodITSLayersAll] = event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + values[kIsGoodITSLayersAll] = + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2292,19 +2538,24 @@ void VarManager::FillEvent(T const& event, float* values) values[kIsEMC7] = static_cast(event.alias_bit(kEMC7) > 0); } if (fgUsedVars[kIsINT7inMUON]) { - values[kIsINT7inMUON] = static_cast(event.alias_bit(kINT7inMUON) > 0); + values[kIsINT7inMUON] = + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { - values[kIsMuonSingleLowPt7] = static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + values[kIsMuonSingleLowPt7] = + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { - values[kIsMuonSingleHighPt7] = static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + values[kIsMuonSingleHighPt7] = + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { - values[kIsMuonUnlikeLowPt7] = static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + values[kIsMuonUnlikeLowPt7] = + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { - values[kIsMuonLikeLowPt7] = static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + values[kIsMuonLikeLowPt7] = + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2383,12 +2634,49 @@ void VarManager::FillEvent(T const& event, float* values) values[kMultA] = event.multa(); values[kCORR2REFetagap] = event.corr2refetagap(); values[kM11REFetagap] = event.m11refetagap(); - values[kCORR2REF] = std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : event.corr2ref(); - values[kCORR4REF] = std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : event.corr4ref(); - values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REF]) || std::isinf(values[kM11M1111REF]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF]) ? 0 : event.corr2ref() * event.corr4ref(); - values[kM11REF] = !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? event.m11ref() : 0; - values[kM1111REF] = !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) ? event.m1111ref() : 0; - values[kM11M1111REF] = !(std::isnan(values[kM11M1111REF]) || std::isinf(values[kM11M1111REF]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF])) ? event.m11ref() * event.m1111ref() : 0; + values[kCORR2REF] = + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : event.corr2ref(); + values[kCORR4REF] = + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : event.corr4ref(); + values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REF]) || + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : event.corr2ref() * event.corr4ref(); + values[kM11REF] = + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) + ? event.m11ref() + : 0; + values[kM1111REF] = + !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) + ? event.m1111ref() + : 0; + values[kM11M1111REF] = !(std::isnan(values[kM11M1111REF]) || + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF])) + ? event.m11ref() * event.m1111ref() + : 0; } } @@ -2399,8 +2687,11 @@ void VarManager::FillEvent(T const& event, float* values) values[kQ1Y0B] = -999; values[kQ1X0C] = -999; values[kQ1Y0C] = -999; - // values[kQ2X0A] = (event.qvecBPosRe() * event.nTrkBPos() + event.qvecBNegRe() * event.nTrkBNeg()) / (event.nTrkBPos() + event.nTrkBNeg()); - // values[kQ2Y0A] = (event.qvecBPosIm() * event.nTrkBPos() + event.qvecBNegIm() * event.nTrkBNeg()) / (event.nTrkBPos() + event.nTrkBNeg()); + // values[kQ2X0A] = (event.qvecBPosRe() * event.nTrkBPos() + + // event.qvecBNegRe() * event.nTrkBNeg()) / (event.nTrkBPos() + + // event.nTrkBNeg()); values[kQ2Y0A] = (event.qvecBPosIm() * + // event.nTrkBPos() + event.qvecBNegIm() * event.nTrkBNeg()) / + // (event.nTrkBPos() + event.nTrkBNeg()); values[kQ2X0A] = event.qvecBAllRe(); values[kQ2Y0A] = event.qvecBAllIm(); values[kQ2X0APOS] = event.qvecBPosRe(); @@ -2444,8 +2735,10 @@ void VarManager::FillEvent(T const& event, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); - float Psi2APOS = epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); - float Psi2ANEG = epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + float Psi2APOS = + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + float Psi2ANEG = + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2455,51 +2748,101 @@ void VarManager::FillEvent(T const& event, float* values) values[kPsi2B] = Psi2B; values[kPsi2C] = Psi2C; - float R2SP_AB = (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); - float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); - float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); - float R2SP_AC = (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); - float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); - float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); - float R2SP_BC = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); - float R2SP_AB_Im = (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); - float R2SP_AC_Im = (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); - float R2SP_BC_Im = (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); - values[kR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; - values[kR2SP_FT0CTPCPOS] = std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; - values[kR2SP_FT0CTPCNEG] = std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + float R2SP_AB = + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + + values[kQ2Y0APOS] * values[kQ2Y0B]); + float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + + values[kQ2Y0ANEG] * values[kQ2Y0B]); + float R2SP_AC = + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + + values[kQ2Y0APOS] * values[kQ2Y0C]); + float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + + values[kQ2Y0ANEG] * values[kQ2Y0C]); + float R2SP_BC = + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + float R2SP_AB_Im = + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + float R2SP_AC_Im = + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + float R2SP_BC_Im = + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + values[kR2SP_AB] = + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + values[kR2SP_FT0CTPCPOS] = + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + values[kR2SP_FT0CTPCNEG] = + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; - values[kR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; - values[kR2SP_FT0ATPCPOS] = std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; - values[kR2SP_FT0ATPCNEG] = std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + values[kR2SP_AC] = + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + values[kR2SP_FT0ATPCPOS] = + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + values[kR2SP_FT0ATPCNEG] = + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; - values[kR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + values[kR2SP_BC] = + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; - values[kR2SP_AB_Im] = std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; - values[kWR2SP_AB_Im] = std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; - values[kR2SP_AC_Im] = std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; - values[kWR2SP_AC_Im] = std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; - values[kR2SP_BC_Im] = std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; - values[kWR2SP_BC_Im] = std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; - - float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2B) || std::isinf(Psi2B) ? 0. : TMath::Cos(2 * (Psi2A - Psi2B)); - float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Cos(2 * (Psi2A - Psi2C)); - float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Cos(2 * (Psi2B - Psi2C)); - float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2B) || std::isinf(Psi2B) ? 0. : TMath::Sin(2 * (Psi2A - Psi2B)); - float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Sin(2 * (Psi2A - Psi2C)); - float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Sin(2 * (Psi2B - Psi2C)); - values[kR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + values[kR2SP_AB_Im] = + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + values[kWR2SP_AB_Im] = + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + values[kR2SP_AC_Im] = + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + values[kWR2SP_AC_Im] = + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + values[kR2SP_BC_Im] = + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + values[kWR2SP_BC_Im] = + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + + float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); + float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); + float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); + float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); + float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); + float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); + values[kR2EP_AB] = + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; - values[kR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + values[kR2EP_AC] = + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; - values[kR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + values[kR2EP_BC] = + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; - values[kR2EP_AB_Im] = std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; - values[kWR2EP_AB_Im] = std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; - values[kR2EP_AC_Im] = std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; - values[kWR2EP_AC_Im] = std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; - values[kR2EP_BC_Im] = std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; - values[kWR2EP_BC_Im] = std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + values[kR2EP_AB_Im] = + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + values[kWR2EP_AB_Im] = + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + values[kR2EP_AC_Im] = + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + values[kWR2EP_AC_Im] = + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + values[kR2EP_BC_Im] = + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + values[kWR2EP_BC_Im] = + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionQvectCentr) > 0) { @@ -2539,8 +2882,10 @@ void VarManager::FillEvent(T const& event, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); - float Psi2APOS = epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); - float Psi2ANEG = epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + float Psi2APOS = + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + float Psi2ANEG = + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2550,51 +2895,101 @@ void VarManager::FillEvent(T const& event, float* values) values[kPsi2B] = Psi2B; values[kPsi2C] = Psi2C; - float R2SP_AB = (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); - float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); - float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); - float R2SP_AC = (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); - float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); - float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); - float R2SP_BC = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); - float R2SP_AB_Im = (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); - float R2SP_AC_Im = (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); - float R2SP_BC_Im = (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); - values[kR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; - values[kR2SP_FT0CTPCPOS] = std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; - values[kR2SP_FT0CTPCNEG] = std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + float R2SP_AB = + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + + values[kQ2Y0APOS] * values[kQ2Y0B]); + float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + + values[kQ2Y0ANEG] * values[kQ2Y0B]); + float R2SP_AC = + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + + values[kQ2Y0APOS] * values[kQ2Y0C]); + float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + + values[kQ2Y0ANEG] * values[kQ2Y0C]); + float R2SP_BC = + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + float R2SP_AB_Im = + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + float R2SP_AC_Im = + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + float R2SP_BC_Im = + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + values[kR2SP_AB] = + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + values[kR2SP_FT0CTPCPOS] = + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + values[kR2SP_FT0CTPCNEG] = + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; - values[kR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; - values[kR2SP_FT0ATPCPOS] = std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; - values[kR2SP_FT0ATPCNEG] = std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + values[kR2SP_AC] = + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + values[kR2SP_FT0ATPCPOS] = + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + values[kR2SP_FT0ATPCNEG] = + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; - values[kR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + values[kR2SP_BC] = + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; - values[kR2SP_AB_Im] = std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; - values[kWR2SP_AB_Im] = std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; - values[kR2SP_AC_Im] = std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; - values[kWR2SP_AC_Im] = std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; - values[kR2SP_BC_Im] = std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; - values[kWR2SP_BC_Im] = std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; - - float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2B) || std::isinf(Psi2B) ? 0. : TMath::Cos(2 * (Psi2A - Psi2B)); - float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Cos(2 * (Psi2A - Psi2C)); - float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Cos(2 * (Psi2B - Psi2C)); - float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2B) || std::isinf(Psi2B) ? 0. : TMath::Sin(2 * (Psi2A - Psi2B)); - float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Sin(2 * (Psi2A - Psi2C)); - float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || std::isnan(Psi2C) || std::isinf(Psi2C) ? 0. : TMath::Sin(2 * (Psi2B - Psi2C)); - values[kR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + values[kR2SP_AB_Im] = + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + values[kWR2SP_AB_Im] = + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + values[kR2SP_AC_Im] = + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + values[kWR2SP_AC_Im] = + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + values[kR2SP_BC_Im] = + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + values[kWR2SP_BC_Im] = + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + + float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); + float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); + float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); + float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); + float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); + float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); + values[kR2EP_AB] = + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; - values[kR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + values[kR2EP_AC] = + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; - values[kR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + values[kR2EP_BC] = + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; - values[kR2EP_AB_Im] = std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; - values[kWR2EP_AB_Im] = std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; - values[kR2EP_AC_Im] = std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; - values[kWR2EP_AC_Im] = std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; - values[kR2EP_BC_Im] = std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; - values[kWR2EP_BC_Im] = std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + values[kR2EP_AB_Im] = + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + values[kWR2EP_AB_Im] = + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + values[kR2EP_AC_Im] = + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + values[kWR2EP_AC_Im] = + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + values[kR2EP_BC_Im] = + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + values[kWR2EP_BC_Im] = + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionMC) > 0) { @@ -2608,7 +3003,8 @@ void VarManager::FillEvent(T const& event, float* values) values[kMCEventImpParam] = event.impactParameter(); values[kMCEventPlaneAngle] = event.eventPlaneAngle(); if constexpr (requires { event.bestCollisionCentFT0C(); }) { - // WARNING: temporary solution, ongoing work to provide proper MC gen. centrality + // WARNING: temporary solution, ongoing work to provide proper MC gen. + // centrality values[kMCEventCentrFT0C] = event.bestCollisionCentFT0C(); values[kMultMCNParticlesEta05] = event.multMCNParticlesEta05(); values[kMultMCNParticlesEta08] = event.multMCNParticlesEta08(); @@ -2631,13 +3027,20 @@ void VarManager::FillEvent(T const& event, float* values) values[kMultMCNParticlesEta10] = event.multMCNParticlesEta10(); } - if constexpr ((fillMap & EventFilter) > 0 || (fillMap & RapidityGapFilter) > 0) { - values[kIsDoubleGap] = static_cast((event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); - values[kIsSingleGapA] = static_cast((event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); - values[kIsSingleGapC] = static_cast((event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); - values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); - values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && values[kIsSingleGap] == 0.f); - values[kIsITSUPCMode] = static_cast((event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); + if constexpr ((fillMap & EventFilter) > 0 || + (fillMap & RapidityGapFilter) > 0) { + values[kIsDoubleGap] = static_cast( + (event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); + values[kIsSingleGapA] = static_cast( + (event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); + values[kIsSingleGapC] = static_cast( + (event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); + values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || + values[kIsSingleGapC] != 0.f); + values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && + values[kIsSingleGap] == 0.f); + values[kIsITSUPCMode] = static_cast( + (event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); } if constexpr ((fillMap & ReducedZdc) > 0) { @@ -2676,13 +3079,18 @@ void VarManager::FillEvent(T const& event, float* values) values[kBGFDDCpf] = event.bgFDDCpf(); } - // check if the template T type includes the O2remerge table and if so, fill the corresponding variables + // check if the template T type includes the O2remerge table and if so, fill + // the corresponding variables if constexpr (requires { event.dcazBimodalityCoefficient(); }) { values[kDCAzBimodalityCoefficient] = event.dcazBimodalityCoefficient(); - values[kDCAzBimodalityCoefficientBinned] = event.dcazBimodalityCoefficientBinned(); - values[kDCAzBimodalityCoefficientBinnedTrimmed1] = event.dcazBimodalityCoefficientBinnedTrimmed1(); - values[kDCAzBimodalityCoefficientBinnedTrimmed2] = event.dcazBimodalityCoefficientBinnedTrimmed2(); - values[kDCAzBimodalityCoefficientBinnedTrimmed3] = event.dcazBimodalityCoefficientBinnedTrimmed3(); + values[kDCAzBimodalityCoefficientBinned] = + event.dcazBimodalityCoefficientBinned(); + values[kDCAzBimodalityCoefficientBinnedTrimmed1] = + event.dcazBimodalityCoefficientBinnedTrimmed1(); + values[kDCAzBimodalityCoefficientBinnedTrimmed2] = + event.dcazBimodalityCoefficientBinnedTrimmed2(); + values[kDCAzBimodalityCoefficientBinnedTrimmed3] = + event.dcazBimodalityCoefficientBinnedTrimmed3(); values[kDCAzMean] = event.dcazMean(); values[kDCAzMeanBinnedTrimmed1] = event.dcazMeanBinnedTrimmed1(); values[kDCAzMeanBinnedTrimmed2] = event.dcazMeanBinnedTrimmed2(); @@ -2710,15 +3118,14 @@ void VarManager::FillEvent(T const& event, float* values) } template -void VarManager::FillEventTracks(T const& tracks, float* values) -{ +void VarManager::FillEventTracks(T const &tracks, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // compute event properties based on DCAz of the tracks std::vector dcazValues; - for (const auto& track : tracks) { + for (const auto &track : tracks) { if (!track.hasITS()) { continue; // skip tracks without ITS information } @@ -2736,7 +3143,8 @@ void VarManager::FillEventTracks(T const& tracks, float* values) } // compute the unbinned bimodality coefficient and related statistics - auto [bimodalityCoefficient, mean, stddev, skewness, kurtosis, nPeaks] = BimodalityCoefficientAndNPeaks(dcazValues, -1.0); + auto [bimodalityCoefficient, mean, stddev, skewness, kurtosis, nPeaks] = + BimodalityCoefficientAndNPeaks(dcazValues, -1.0); if (stddev > -1.0) { values[kDCAzBimodalityCoefficient] = bimodalityCoefficient; values[kDCAzMean] = mean; @@ -2752,20 +3160,27 @@ void VarManager::FillEventTracks(T const& tracks, float* values) values[kDCAzKurtosis] = -9999.0; values[kDCAzNPeaks] = -9999.0; } - // compute the binned bimodality coefficient and related statistics with a bin width of 50um - auto [bimodalityCoefficientBin, meanBin, stddevBin, skewnessBin, kurtosisBin, nPeaksBin] = BimodalityCoefficientAndNPeaks(dcazValues, 0.005); + // compute the binned bimodality coefficient and related statistics with a bin + // width of 50um + auto [bimodalityCoefficientBin, meanBin, stddevBin, skewnessBin, kurtosisBin, + nPeaksBin] = BimodalityCoefficientAndNPeaks(dcazValues, 0.005); if (stddevBin > -1.0) { values[kDCAzBimodalityCoefficientBinned] = bimodalityCoefficientBin; } else { values[kDCAzBimodalityCoefficientBinned] = -9999.0; } values[kDCAzNPeaks] = nPeaksBin; - // cout << "Bimodality coefficient binned: " << bimodalityCoefficientBin << ", mean: " << mean << ", stddev: " << stddev << ", skewness: " << skewness << ", kurtosis: " << kurtosis << ", nPeaks: " << nPeaksBin << endl; - // compute the binned bimodality coefficient and related statistics with a bin width of 50um and different trimming versions - // more then 3 counts per bin - auto [bimodalityCoefficientBinTrimmed1, meanBinTrimmed1, stddevBinTrimmed1, skewnessBinTrimmed1, kurtosisBinTrimmed1, nPeaksBinTrimmed1] = BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); + // cout << "Bimodality coefficient binned: " << bimodalityCoefficientBin << ", + // mean: " << mean << ", stddev: " << stddev << ", skewness: " << skewness << + // ", kurtosis: " << kurtosis << ", nPeaks: " << nPeaksBin << endl; compute + // the binned bimodality coefficient and related statistics with a bin width + // of 50um and different trimming versions more then 3 counts per bin + auto [bimodalityCoefficientBinTrimmed1, meanBinTrimmed1, stddevBinTrimmed1, + skewnessBinTrimmed1, kurtosisBinTrimmed1, nPeaksBinTrimmed1] = + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); if (stddevBinTrimmed1 > -1.0) { - values[kDCAzBimodalityCoefficientBinnedTrimmed1] = bimodalityCoefficientBinTrimmed1; + values[kDCAzBimodalityCoefficientBinnedTrimmed1] = + bimodalityCoefficientBinTrimmed1; values[kDCAzMeanBinnedTrimmed1] = meanBinTrimmed1; values[kDCAzRMSBinnedTrimmed1] = stddevBinTrimmed1; } else { @@ -2774,11 +3189,17 @@ void VarManager::FillEventTracks(T const& tracks, float* values) values[kDCAzRMSBinnedTrimmed1] = -9999.0; } values[kDCAzNPeaksTrimmed1] = nPeaksBinTrimmed1; - // cout << "Bimodality coefficient (trimmed 1): " << bimodalityCoefficientBinTrimmed1 << ", mean: " << meanBinTrimmed1 << ", stddev: " << stddevBinTrimmed1 << ", skewness: " << skewnessBinTrimmed1 << ", kurtosis: " << kurtosisBinTrimmed1 << ", nPeaks: " << nPeaksBinTrimmed1 << endl; - // more than 3% of the entries per peak - auto [bimodalityCoefficientBinTrimmed2, meanBinTrimmed2, stddevBinTrimmed2, skewnessBinTrimmed2, kurtosisBinTrimmed2, nPeaksBinTrimmed2] = BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); + // cout << "Bimodality coefficient (trimmed 1): " << + // bimodalityCoefficientBinTrimmed1 << ", mean: " << meanBinTrimmed1 << ", + // stddev: " << stddevBinTrimmed1 << ", skewness: " << skewnessBinTrimmed1 << + // ", kurtosis: " << kurtosisBinTrimmed1 << ", nPeaks: " << nPeaksBinTrimmed1 + // << endl; more than 3% of the entries per peak + auto [bimodalityCoefficientBinTrimmed2, meanBinTrimmed2, stddevBinTrimmed2, + skewnessBinTrimmed2, kurtosisBinTrimmed2, nPeaksBinTrimmed2] = + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); if (stddevBinTrimmed2 > -1.0) { - values[kDCAzBimodalityCoefficientBinnedTrimmed2] = bimodalityCoefficientBinTrimmed2; + values[kDCAzBimodalityCoefficientBinnedTrimmed2] = + bimodalityCoefficientBinTrimmed2; values[kDCAzMeanBinnedTrimmed2] = meanBinTrimmed2; values[kDCAzRMSBinnedTrimmed2] = stddevBinTrimmed2; } else { @@ -2787,11 +3208,17 @@ void VarManager::FillEventTracks(T const& tracks, float* values) values[kDCAzRMSBinnedTrimmed2] = -9999.0; } values[kDCAzNPeaksTrimmed2] = nPeaksBinTrimmed2; - // cout << "Bimodality coefficient (trimmed 2): " << bimodalityCoefficientBinTrimmed2 << ", mean: " << meanBinTrimmed2 << ", stddev: " << stddevBinTrimmed2 << ", skewness: " << skewnessBinTrimmed2 << ", kurtosis: " << kurtosisBinTrimmed2 << ", nPeaks: " << nPeaksBinTrimmed2 << endl; - // more than 5% of the entries per peak - auto [bimodalityCoefficientBinTrimmed3, meanBinTrimmed3, stddevBinTrimmed3, skewnessBinTrimmed3, kurtosisBinTrimmed3, nPeaksBinTrimmed3] = BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); + // cout << "Bimodality coefficient (trimmed 2): " << + // bimodalityCoefficientBinTrimmed2 << ", mean: " << meanBinTrimmed2 << ", + // stddev: " << stddevBinTrimmed2 << ", skewness: " << skewnessBinTrimmed2 << + // ", kurtosis: " << kurtosisBinTrimmed2 << ", nPeaks: " << nPeaksBinTrimmed2 + // << endl; more than 5% of the entries per peak + auto [bimodalityCoefficientBinTrimmed3, meanBinTrimmed3, stddevBinTrimmed3, + skewnessBinTrimmed3, kurtosisBinTrimmed3, nPeaksBinTrimmed3] = + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); if (stddevBinTrimmed3 > -1.0) { - values[kDCAzBimodalityCoefficientBinnedTrimmed3] = bimodalityCoefficientBinTrimmed3; + values[kDCAzBimodalityCoefficientBinnedTrimmed3] = + bimodalityCoefficientBinTrimmed3; values[kDCAzMeanBinnedTrimmed3] = meanBinTrimmed3; values[kDCAzRMSBinnedTrimmed3] = stddevBinTrimmed3; } else { @@ -2800,10 +3227,15 @@ void VarManager::FillEventTracks(T const& tracks, float* values) values[kDCAzRMSBinnedTrimmed3] = -9999.0; } values[kDCAzNPeaksTrimmed3] = nPeaksBinTrimmed3; - // cout << "Bimodality coefficient (trimmed 3): " << bimodalityCoefficientBinTrimmed3 << ", mean: " << meanBinTrimmed3 << ", stddev: " << stddevBinTrimmed3 << ", skewness: " << skewnessBinTrimmed3 << ", kurtosis: " << kurtosisBinTrimmed3 << ", nPeaks: " << nPeaksBinTrimmed3 << endl; - - // compute fraction of tracks with |DCAz| > 100um, 200um, 500um, 1mm, 2mm, 5mm, 10mm - // make a loop over the DCAz values and count how many are above each threshold + // cout << "Bimodality coefficient (trimmed 3): " << + // bimodalityCoefficientBinTrimmed3 << ", mean: " << meanBinTrimmed3 << ", + // stddev: " << stddevBinTrimmed3 << ", skewness: " << skewnessBinTrimmed3 << + // ", kurtosis: " << kurtosisBinTrimmed3 << ", nPeaks: " << nPeaksBinTrimmed3 + // << endl; + + // compute fraction of tracks with |DCAz| > 100um, 200um, 500um, 1mm, 2mm, + // 5mm, 10mm make a loop over the DCAz values and count how many are above + // each threshold int counter100um = 0; int counter200um = 0; int counter500um = 0; @@ -2811,7 +3243,7 @@ void VarManager::FillEventTracks(T const& tracks, float* values) int counter2mm = 0; int counter5mm = 0; int counter10mm = 0; - for (auto const& d : dcazValues) { + for (auto const &d : dcazValues) { double absD = std::abs(d); if (absD > 0.01) { counter100um++; @@ -2846,10 +3278,10 @@ void VarManager::FillEventTracks(T const& tracks, float* values) } template -void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values) -{ +void VarManager::FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kCentFT0C] >= 0.) { @@ -2862,10 +3294,10 @@ void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* } template -void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values) -{ +void VarManager::FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kTwoEvCentFT0C1] >= 0.) { @@ -2886,10 +3318,12 @@ void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, } template -void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, T const& h_v22ev2, T const& h_v24ev2, T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, + T const &h_v22ev2, T const &h_v24ev2, + T1 const &t1, T2 const &t2, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } int idx_v22ev1 = 0; @@ -2932,44 +3366,51 @@ void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, } template -void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values) -{ +void VarManager::FillTwoEvents(T const &ev1, T const &ev2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // if constexpr (T::template contains()) { values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); - values[kTwoEvPosR1] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); - values[kTwoEvPosR2] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + values[kTwoEvPosR1] = + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + values[kTwoEvPosR2] = + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvDeltaZ] = ev1.posZ() - ev2.posZ(); values[kTwoEvDeltaX] = ev1.posX() - ev2.posX(); values[kTwoEvDeltaY] = ev1.posY() - ev2.posY(); //} values[kTwoEvPVcontrib1] = ev1.numContrib(); values[kTwoEvPVcontrib2] = ev2.numContrib(); - values[kTwoEvDeltaR] = std::sqrt(values[kTwoEvDeltaX] * values[kTwoEvDeltaX] + values[kTwoEvDeltaY] * values[kTwoEvDeltaY]); + values[kTwoEvDeltaR] = std::sqrt(values[kTwoEvDeltaX] * values[kTwoEvDeltaX] + + values[kTwoEvDeltaY] * values[kTwoEvDeltaY]); } template -void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*tracks1*/, T2 const& /*tracks2*/, float* values) -{ +void VarManager::FillTwoMixEvents(T1 const &ev1, T1 const &ev2, + T2 const & /*tracks1*/, + T2 const & /*tracks2*/, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); - values[kTwoEvPosR1] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); - values[kTwoEvPosR2] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + values[kTwoEvPosR1] = + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + values[kTwoEvPosR2] = + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvPVcontrib1] = ev1.numContrib(); values[kTwoEvPVcontrib2] = ev2.numContrib(); /* uint32_t Track1Filter = 0; uint32_t Track2Filter = 0; - for (auto const& track1 : tracks1) { Track1Filter = uint32_t(track1.isMuonSelected());} - for (auto const& track2 : tracks2) { Track2Filter = uint32_t(track2.isMuonSelected());} + for (auto const& track1 : tracks1) { Track1Filter = + uint32_t(track1.isMuonSelected());} for (auto const& track2 : tracks2) { + Track2Filter = uint32_t(track2.isMuonSelected());} */ - if constexpr ((fillMap & CollisionCent) > 0 || (fillMap & ReducedEventExtended) > 0) { + if constexpr ((fillMap & CollisionCent) > 0 || + (fillMap & ReducedEventExtended) > 0) { values[kTwoEvCentFT0C1] = ev1.centFT0C(); values[kTwoEvCentFT0C2] = ev2.centFT0C(); } @@ -2992,10 +3433,18 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*trac } if constexpr ((fillMap & CollisionQvect) > 0) { // Tobe used for the calculation of u1q1 and u2q2 - values[kQ2X0A1] = (ev1.qvecBPosRe() * ev1.nTrkBPos() + ev1.qvecBNegRe() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg()); - values[kQ2X0A2] = (ev2.qvecBPosRe() * ev2.nTrkBPos() + ev2.qvecBNegRe() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg()); - values[kQ2Y0A1] = (ev1.qvecBPosIm() * ev1.nTrkBPos() + ev1.qvecBNegIm() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg()); - values[kQ2Y0A2] = (ev2.qvecBPosIm() * ev2.nTrkBPos() + ev2.qvecBNegIm() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg()); + values[kQ2X0A1] = (ev1.qvecBPosRe() * ev1.nTrkBPos() + + ev1.qvecBNegRe() * ev1.nTrkBNeg()) / + (ev1.nTrkBPos() + ev1.nTrkBNeg()); + values[kQ2X0A2] = (ev2.qvecBPosRe() * ev2.nTrkBPos() + + ev2.qvecBNegRe() * ev2.nTrkBNeg()) / + (ev2.nTrkBPos() + ev2.nTrkBNeg()); + values[kQ2Y0A1] = (ev1.qvecBPosIm() * ev1.nTrkBPos() + + ev1.qvecBNegIm() * ev1.nTrkBNeg()) / + (ev1.nTrkBPos() + ev1.nTrkBNeg()); + values[kQ2Y0A2] = (ev2.qvecBPosIm() * ev2.nTrkBPos() + + ev2.qvecBNegIm() * ev2.nTrkBNeg()) / + (ev2.nTrkBPos() + ev2.nTrkBNeg()); values[kQ2X0B1] = ev1.qvecFT0ARe(); values[kQ2X0B2] = ev2.qvecFT0ARe(); @@ -3010,10 +3459,9 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*trac } template -void VarManager::FillTrack(T const& track, float* values) -{ +void VarManager::FillTrack(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & TrackMFT) > 0) { @@ -3035,8 +3483,11 @@ void VarManager::FillTrack(T const& track, float* values) values[kMftMeanClusterSize] = meanClusterSize; } - // Quantities based on the basic table (contains just kine information and filter bits) - if constexpr ((fillMap & Track) > 0 || (fillMap & Muon) > 0 || (fillMap & MuonRealign) > 0 || (fillMap & ReducedTrack) > 0 || (fillMap & ReducedMuon) > 0) { + // Quantities based on the basic table (contains just kine information and + // filter bits) + if constexpr ((fillMap & Track) > 0 || (fillMap & Muon) > 0 || + (fillMap & MuonRealign) > 0 || (fillMap & ReducedTrack) > 0 || + (fillMap & ReducedMuon) > 0) { values[kPt] = track.pt(); values[kSignedPt] = track.pt() * track.sign(); if (fgUsedVars[kP]) { @@ -3058,18 +3509,28 @@ void VarManager::FillTrack(T const& track, float* values) values[kPhi] = track.phi(); values[kCharge] = track.sign(); if (fgUsedVars[kPhiTPCOuter]) { - values[kPhiTPCOuter] = RecoDecay::constrainAngle(track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * (o2::constants::math::PIHalf - TMath::ACos(0.22 * fgMagField / track.pt()))); + values[kPhiTPCOuter] = RecoDecay::constrainAngle( + track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * + (o2::constants::math::PIHalf - + TMath::ACos(0.22 * fgMagField / track.pt()))); } if (fgUsedVars[kTrackIsInsideTPCModule]) { - float localSectorPhi = values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / o2::constants::math::TwoPI) * (o2::constants::math::TwoPI / 18.0); - float edge = fgTPCInterSectorBoundary / 2.0 / 246.6; // minimal inter-sector boundary as angle - float curvature = 3.0 * 3.33 * track.pt() / fgMagField * (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); + float localSectorPhi = + values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / + o2::constants::math::TwoPI) * + (o2::constants::math::TwoPI / 18.0); + float edge = fgTPCInterSectorBoundary / 2.0 / + 246.6; // minimal inter-sector boundary as angle + float curvature = + 3.0 * 3.33 * track.pt() / fgMagField * + (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); if (curvature / 2.466 > edge) { edge = curvature / 2.466; } double min = edge; double max = o2::constants::math::TwoPI / 18.0 - edge; - values[kTrackIsInsideTPCModule] = (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); + values[kTrackIsInsideTPCModule] = + (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); } if constexpr ((fillMap & ReducedTrack) > 0 && !((fillMap & Pair) > 0)) { @@ -3077,87 +3538,220 @@ void VarManager::FillTrack(T const& track, float* values) // values[kIsGlobalTrackSDD] = track.filteringFlags_bit(1); values[kIsAmbiguous] = track.isAmbiguous(); - values[kIsLegFromGamma] = track.filteringFlags_bit(VarManager::kIsConversionLeg); + values[kIsLegFromGamma] = + track.filteringFlags_bit(VarManager::kIsConversionLeg); values[kIsLegFromK0S] = track.filteringFlags_bit(VarManager::kIsK0sLeg); - values[kIsLegFromLambda] = track.filteringFlags_bit(VarManager::kIsLambdaLeg); - values[kIsLegFromAntiLambda] = track.filteringFlags_bit(VarManager::kIsALambdaLeg); - values[kIsLegFromOmega] = track.filteringFlags_bit(VarManager::kIsOmegaLeg); + values[kIsLegFromLambda] = + track.filteringFlags_bit(VarManager::kIsLambdaLeg); + values[kIsLegFromAntiLambda] = + track.filteringFlags_bit(VarManager::kIsALambdaLeg); + values[kIsLegFromOmega] = + track.filteringFlags_bit(VarManager::kIsOmegaLeg); - values[kIsProtonFromLambdaAndAntiLambda] = static_cast((values[kIsLegFromLambda] * track.sign() > 0) || (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + values[kIsProtonFromLambdaAndAntiLambda] = static_cast( + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); for (int i = 0; i < 8; i++) { - values[kIsDalitzLeg + i] = track.filteringFlags_bit(VarManager::kDalitzBits + i); + values[kIsDalitzLeg + i] = + track.filteringFlags_bit(VarManager::kDalitzBits + i); } } if (fgUsedVars[kM11REFoverMpsingle]) { float m = o2::constants::physics::MassMuon; ROOT::Math::PtEtaPhiMVector v(track.pt(), track.eta(), track.phi(), m); - std::complex Q21(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]); + std::complex Q21(values[kQ2X0A] * values[kS11A], + values[kQ2Y0A] * values[kS11A]); std::complex Q42(values[kQ42XA], values[kQ42YA]); std::complex Q23(values[kQ23XA], values[kQ23YA]); std::complex P2(TMath::Cos(2 * v.Phi()), TMath::Sin(2 * v.Phi())); - values[kM11REFoverMpsingle] = values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultSingleMuons] : 0; - values[kM1111REFoverMpsingle] = values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) ? values[kM1111REF] / values[kMultSingleMuons] : 0; - values[kCORR2REFbysinglemu] = std::isnan(values[kM11REFoverMpsingle]) || std::isinf(values[kM11REFoverMpsingle]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REFoverMpsingle]) || std::isinf(values[kM1111REFoverMpsingle]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kCORR2REF]; - values[kCORR4REFbysinglemu] = std::isnan(values[kM1111REFoverMpsingle]) || std::isinf(values[kM1111REFoverMpsingle]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REFoverMpsingle]) || std::isinf(values[kM11REFoverMpsingle]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kCORR4REF]; + values[kM11REFoverMpsingle] = + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultSingleMuons] + : 0; + values[kM1111REFoverMpsingle] = + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultSingleMuons] + : 0; + values[kCORR2REFbysinglemu] = + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; + values[kCORR4REFbysinglemu] = + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POI]; values[kM01POIsingle] = values[kMultSingleMuons] * values[kS11A]; - values[kM0111POIsingle] = values[kMultSingleMuons] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]); + values[kM0111POIsingle] = + values[kMultSingleMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POIsingle]; - values[kCORR4POIsingle] = (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)).real() / values[kM0111POIsingle]; - values[kM01POIsingle] = std::isnan(values[kM01POIsingle]) || std::isinf(values[kM01POIsingle]) || std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) ? 0 : values[kM01POIsingle]; - values[kM0111POIsingle] = std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) ? 0 : values[kM0111POIsingle]; - values[kCORR2POIsingle] = std::isnan(values[kM01POIsingle]) || std::isinf(values[kM01POIsingle]) || std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) ? 0 : values[kCORR2POIsingle]; - values[kCORR4POIsingle] = std::isnan(values[kM01POIsingle]) || std::isinf(values[kM01POIsingle]) || std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) ? 0 : values[kCORR4POIsingle]; - values[kM01POIoverMpsingle] = values[kMultSingleMuons] > 0 && !(std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) || std::isnan(values[kM01POIsingle]) || std::isinf(values[kM01POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle])) ? values[kM01POIsingle] / values[kMultSingleMuons] : 0; - values[kM0111POIoverMpsingle] = values[kMultSingleMuons] > 0 && !(std::isnan(values[kM0111POIsingle]) || std::isinf(values[kM0111POIsingle]) || std::isnan(values[kCORR4POIsingle]) || std::isinf(values[kCORR4POIsingle]) || std::isnan(values[kM01POIsingle]) || std::isinf(values[kM01POIsingle]) || std::isnan(values[kCORR2POIsingle]) || std::isinf(values[kCORR2POIsingle])) ? values[kM0111POIsingle] / values[kMultSingleMuons] : 0; + values[kCORR4POIsingle] = + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIsingle]; + values[kM01POIsingle] = std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kM01POIsingle]; + values[kM0111POIsingle] = std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kM0111POIsingle]; + values[kCORR2POIsingle] = std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR2POIsingle]; + values[kCORR4POIsingle] = std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR4POIsingle]; + values[kM01POIoverMpsingle] = + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM01POIsingle] / values[kMultSingleMuons] + : 0; + values[kM0111POIoverMpsingle] = + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM0111POIsingle] / values[kMultSingleMuons] + : 0; } } // Quantities based on the barrel tables - if constexpr ((fillMap & TrackExtra) > 0 || (fillMap & ReducedTrackBarrel) > 0) { + if constexpr ((fillMap & TrackExtra) > 0 || + (fillMap & ReducedTrackBarrel) > 0) { values[kPin] = track.tpcInnerParam(); values[kSignedPin] = track.tpcInnerParam() * track.sign(); if (fgUsedVars[kIsITSrefit]) { - values[kIsITSrefit] = static_cast((track.flags() & o2::aod::track::ITSrefit) > 0); // NOTE: This is just for Run-2 + values[kIsITSrefit] = + static_cast((track.flags() & o2::aod::track::ITSrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kTrackTimeResIsRange]) { - values[kTrackTimeResIsRange] = static_cast((track.flags() & o2::aod::track::TrackTimeResIsRange) > 0); // NOTE: This is NOT for Run-2 + values[kTrackTimeResIsRange] = static_cast( + (track.flags() & o2::aod::track::TrackTimeResIsRange) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsTPCrefit]) { - values[kIsTPCrefit] = static_cast((track.flags() & o2::aod::track::TPCrefit) > 0); // NOTE: This is just for Run-2 + values[kIsTPCrefit] = + static_cast((track.flags() & o2::aod::track::TPCrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kPVContributor]) { - values[kPVContributor] = static_cast((track.flags() & o2::aod::track::PVContributor) > 0); // NOTE: This is NOT for Run-2 + values[kPVContributor] = + static_cast((track.flags() & o2::aod::track::PVContributor) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsGoldenChi2]) { - values[kIsGoldenChi2] = static_cast((track.flags() & o2::aod::track::GoldenChi2) > 0); // NOTE: This is just for Run-2 + values[kIsGoldenChi2] = + static_cast((track.flags() & o2::aod::track::GoldenChi2) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kOrphanTrack]) { - values[kOrphanTrack] = static_cast((track.flags() & o2::aod::track::OrphanTrack) > 0); // NOTE: This is NOT for Run-2 + values[kOrphanTrack] = + static_cast((track.flags() & o2::aod::track::OrphanTrack) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsSPDfirst]) { - values[kIsSPDfirst] = static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + values[kIsSPDfirst] = + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsSPDboth]) { - values[kIsSPDboth] = static_cast((track.itsClusterMap() & uint8_t(3)) > 0); + values[kIsSPDboth] = + static_cast((track.itsClusterMap() & uint8_t(3)) > 0); } if (fgUsedVars[kIsSPDany]) { - values[kIsSPDany] = static_cast((track.itsClusterMap() & uint8_t(1)) || (track.itsClusterMap() & uint8_t(2))); + values[kIsSPDany] = + static_cast((track.itsClusterMap() & uint8_t(1)) || + (track.itsClusterMap() & uint8_t(2))); } if (fgUsedVars[kITSClusterMap]) { values[kITSClusterMap] = track.itsClusterMap(); } if (fgUsedVars[kIsITSibFirst]) { - values[kIsITSibFirst] = static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + values[kIsITSibFirst] = + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsITSibAny]) { - values[kIsITSibAny] = static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + values[kIsITSibAny] = + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } if (fgUsedVars[kIsITSibAll]) { - values[kIsITSibAll] = static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + values[kIsITSibAll] = + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } values[kTrackTime] = track.trackTime(); @@ -3255,7 +3849,8 @@ void VarManager::FillTrack(T const& track, float* values) } // Quantities based on the barrel covariance tables - if constexpr ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0) { + if constexpr ((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0) { values[kTrackCYY] = track.cYY(); values[kTrackCZZ] = track.cZZ(); values[kTrackCSnpSnp] = track.cSnpSnp(); @@ -3266,22 +3861,31 @@ void VarManager::FillTrack(T const& track, float* values) // Quantities based on the dalitz selections if constexpr ((fillMap & DalitzBits) > 0) { for (int i = 0; i < 8; i++) { - values[kIsDalitzLeg + i] = static_cast(track.dalitzBits() & (uint8_t(1) << i)); + values[kIsDalitzLeg + i] = + static_cast(track.dalitzBits() & (uint8_t(1) << i)); } } // Quantities based on the V0 selections if constexpr ((fillMap & TrackV0Bits) > 0) { - values[kIsLegFromGamma] = static_cast(track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); - values[kIsLegFromK0S] = static_cast(track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); - values[kIsLegFromLambda] = static_cast(track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); - values[kIsLegFromAntiLambda] = static_cast(track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); - values[kIsLegFromOmega] = static_cast(track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); - values[kIsProtonFromLambdaAndAntiLambda] = static_cast((values[kIsLegFromLambda] * track.sign() > 0) || (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + values[kIsLegFromGamma] = static_cast( + track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); + values[kIsLegFromK0S] = static_cast( + track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); + values[kIsLegFromLambda] = static_cast( + track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); + values[kIsLegFromAntiLambda] = static_cast( + track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); + values[kIsLegFromOmega] = static_cast( + track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); + values[kIsProtonFromLambdaAndAntiLambda] = static_cast( + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); } // Quantities based on the barrel PID tables - if constexpr ((fillMap & TrackPID) > 0 || (fillMap & TrackTPCPID) > 0 || (fillMap & ReducedTrackBarrelPID) > 0) { + if constexpr ((fillMap & TrackPID) > 0 || (fillMap & TrackTPCPID) > 0 || + (fillMap & ReducedTrackBarrelPID) > 0) { values[kTPCnSigmaEl] = track.tpcNSigmaEl(); values[kTPCnSigmaPi] = track.tpcNSigmaPi(); values[kTPCnSigmaKa] = track.tpcNSigmaKa(); @@ -3293,12 +3897,16 @@ void VarManager::FillTrack(T const& track, float* values) isTPCCalibrated = true; } } - // compute TPC postcalibrated electron nsigma based on calibration histograms from CCDB + // compute TPC postcalibrated electron nsigma based on calibration + // histograms from CCDB if (fgUsedVars[kTPCnSigmaEl_Corr] && fgRunTPCPostCalibration[0]) { if (!isTPCCalibrated) { - values[kTPCnSigmaEl_Corr] = ComputePIDcalibration(0, values[kTPCnSigmaEl]); + values[kTPCnSigmaEl_Corr] = + ComputePIDcalibration(0, values[kTPCnSigmaEl]); } else { - LOG(fatal) << "TPC PID postcalibration is configured but the tracks are already postcalibrated. This is not allowed. Please check your configuration."; + LOG(fatal) << "TPC PID postcalibration is configured but the tracks " + "are already postcalibrated. This is not allowed. Please " + "check your configuration."; values[kTPCnSigmaEl_Corr] = track.tpcNSigmaEl(); } } @@ -3306,32 +3914,42 @@ void VarManager::FillTrack(T const& track, float* values) // compute TPC postcalibrated pion nsigma if required if (fgUsedVars[kTPCnSigmaPi_Corr] && fgRunTPCPostCalibration[1]) { if (!isTPCCalibrated) { - values[kTPCnSigmaPi_Corr] = ComputePIDcalibration(1, values[kTPCnSigmaPi]); + values[kTPCnSigmaPi_Corr] = + ComputePIDcalibration(1, values[kTPCnSigmaPi]); } else { - LOG(fatal) << "TPC PID postcalibration is configured but the tracks are already postcalibrated. This is not allowed. Please check your configuration."; + LOG(fatal) << "TPC PID postcalibration is configured but the tracks " + "are already postcalibrated. This is not allowed. Please " + "check your configuration."; values[kTPCnSigmaPi_Corr] = track.tpcNSigmaPi(); } } if (fgUsedVars[kTPCnSigmaKa_Corr] && fgRunTPCPostCalibration[2]) { // compute TPC postcalibrated kaon nsigma if required if (!isTPCCalibrated) { - values[kTPCnSigmaKa_Corr] = ComputePIDcalibration(2, values[kTPCnSigmaKa]); + values[kTPCnSigmaKa_Corr] = + ComputePIDcalibration(2, values[kTPCnSigmaKa]); } else { - LOG(fatal) << "TPC PID postcalibration is configured but the tracks are already postcalibrated. This is not allowed. Please check your configuration."; + LOG(fatal) << "TPC PID postcalibration is configured but the tracks " + "are already postcalibrated. This is not allowed. Please " + "check your configuration."; values[kTPCnSigmaKa_Corr] = track.tpcNSigmaKa(); } } // compute TPC postcalibrated proton nsigma if required if (fgUsedVars[kTPCnSigmaPr_Corr] && fgRunTPCPostCalibration[3]) { if (!isTPCCalibrated) { - values[kTPCnSigmaPr_Corr] = ComputePIDcalibration(3, values[kTPCnSigmaPr]); + values[kTPCnSigmaPr_Corr] = + ComputePIDcalibration(3, values[kTPCnSigmaPr]); } else { - LOG(fatal) << "TPC PID postcalibration is configured but the tracks are already postcalibrated. This is not allowed. Please check your configuration."; + LOG(fatal) << "TPC PID postcalibration is configured but the tracks " + "are already postcalibrated. This is not allowed. Please " + "check your configuration."; values[kTPCnSigmaPr_Corr] = track.tpcNSigmaPr(); } } - if constexpr ((fillMap & TrackPID) > 0 || (fillMap & ReducedTrackBarrelPID) > 0) { + if constexpr ((fillMap & TrackPID) > 0 || + (fillMap & ReducedTrackBarrelPID) > 0) { values[kTOFnSigmaEl] = track.tofNSigmaEl(); values[kTOFnSigmaPi] = track.tofNSigmaPi(); values[kTOFnSigmaKa] = track.tofNSigmaKa(); @@ -3365,7 +3983,8 @@ void VarManager::FillTrack(T const& track, float* values) } // Quantities based on the muon extra table - if constexpr ((fillMap & ReducedMuonExtra) > 0 || (fillMap & Muon) > 0 || (fillMap & MuonRealign) > 0) { + if constexpr ((fillMap & ReducedMuonExtra) > 0 || (fillMap & Muon) > 0 || + (fillMap & MuonRealign) > 0) { values[kMuonNClusters] = track.nClusters(); values[kMuonPDca] = track.pDca(); values[kMCHBitMap] = track.mchBitMap(); @@ -3409,7 +4028,8 @@ void VarManager::FillTrack(T const& track, float* values) float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); - auto muonTrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(track, xShift, yShift, zShift, track); + auto muonTrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + track, xShift, yShift, zShift, track); auto muonCov = muonTrack.getCovariances(); values[kX] = muonTrack.getX(); values[kY] = muonTrack.getY(); @@ -3435,7 +4055,8 @@ void VarManager::FillTrack(T const& track, float* values) // Quantities based on the pair table(s) if constexpr ((fillMap & Pair) > 0) { values[kMass] = track.mass(); - ROOT::Math::PtEtaPhiMVector vpair(track.pt(), track.eta(), track.phi(), track.mass()); + ROOT::Math::PtEtaPhiMVector vpair(track.pt(), track.eta(), track.phi(), + track.mass()); values[kRap] = vpair.Rapidity(); } @@ -3444,21 +4065,25 @@ void VarManager::FillTrack(T const& track, float* values) } template -void VarManager::FillTrackCollision(T const& track, C const& collision, float* values) -{ +void VarManager::FillTrackCollision(T const &track, C const &collision, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { + if constexpr ((fillMap & ReducedTrackBarrel) > 0 || + (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); std::array dca{1e10f, 1e10f}; - trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca); + trackPar.propagateParamToDCA( + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca); values[kTrackDCAxy] = dca[0]; values[kTrackDCAz] = dca[1]; - if constexpr ((fillMap & ReducedTrackBarrelCov) > 0 || (fillMap & TrackCov) > 0) { + if constexpr ((fillMap & ReducedTrackBarrelCov) > 0 || + (fillMap & TrackCov) > 0) { if (fgUsedVars[kTrackDCAsigXY]) { values[kTrackDCAsigXY] = dca[0] / std::sqrt(track.cYY()); } @@ -3467,23 +4092,30 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v } } } - if constexpr ((fillMap & MuonCov) > 0 || (fillMap & MuonCovRealign) > 0 || (fillMap & ReducedMuonCov) > 0) { + if constexpr ((fillMap & MuonCov) > 0 || (fillMap & MuonCovRealign) > 0 || + (fillMap & ReducedMuonCov) > 0) { float dcaX = 999.f; float dcaY = 999.f; if (static_cast(track.trackType()) <= 2) { - // Global / MCH-MID: helix DCA only (for globals, kMuonPDca is filled from the matched MCH in skimMuons) + // Global / MCH-MID: helix DCA only (for globals, kMuonPDca is filled from + // the matched MCH in skimMuons) float xShift = 0.f; float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); - o2::track::TrackParCovFwd fwdtrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(track, xShift, yShift, zShift, track); + o2::track::TrackParCovFwd fwdtrack = + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + track, xShift, yShift, zShift, track); std::array dca{999., 999., 999.}; - fwdtrack.propagateToDCAhelix(fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, dca); + fwdtrack.propagateToDCAhelix( + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); dcaX = static_cast(dca[0]); dcaY = static_cast(dca[1]); } else { // MCH standalone: DCA and pDCA from MCH extrapolation - o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(track, collision, kToDCA); + o2::dataformats::GlobalFwdTrack propmuonAtDCA = + PropagateMuon(track, collision, kToDCA); dcaX = propmuonAtDCA.getX() - collision.posX(); dcaY = propmuonAtDCA.getY() - collision.posY(); float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY); @@ -3496,35 +4128,44 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v } template -bool VarManager::isBarrelAssocTimeCompatible(T const& track, C const& collision, C const& origCollision, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values) -{ - return computeBarrelAssocTimeCompat(track.trackTime(), track.trackTimeRes(), - (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, track.isPVContributor(), - static_cast(origCollision.globalBC()), origCollision.collisionTime(), origCollision.numContrib(), - static_cast(collision.globalBC()), collision.collisionTime(), collision.collisionTimeRes(), - nSigma, timeMargin, bcWindowForOneSigma, usePVAssociation, maxPvContribLowMult, values); +bool VarManager::isBarrelAssocTimeCompatible( + T const &track, C const &collision, C const &origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float *values) { + return computeBarrelAssocTimeCompat( + track.trackTime(), track.trackTimeRes(), + (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, + track.isPVContributor(), static_cast(origCollision.globalBC()), + origCollision.collisionTime(), origCollision.numContrib(), + static_cast(collision.globalBC()), collision.collisionTime(), + collision.collisionTimeRes(), nSigma, timeMargin, bcWindowForOneSigma, + usePVAssociation, maxPvContribLowMult, values); } template -void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, M const& materialCorr, P const& propagator, float* values) -{ +void VarManager::FillTrackCollisionMatCorr(T const &track, C const &collision, + M const &materialCorr, + P const &propagator, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { + if constexpr ((fillMap & ReducedTrackBarrel) > 0 || + (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); std::array dca{1e10f, 1e10f}; std::array pVec = {track.px(), track.py(), track.pz()}; - // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca); - propagator->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, materialCorr, &dca); + // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), + // collision.posZ()}, fgMagField, &dca); + propagator->propagateToDCABxByBz( + {collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, + materialCorr, &dca); getPxPyPz(trackPar, pVec); values[kTrackDCAxy] = dca[0]; values[kTrackDCAz] = dca[1]; - if constexpr ((fillMap & ReducedTrackBarrelCov) > 0 || (fillMap & TrackCov) > 0) { + if constexpr ((fillMap & ReducedTrackBarrelCov) > 0 || + (fillMap & TrackCov) > 0) { if (fgUsedVars[kTrackDCAsigXY]) { values[kTrackDCAsigXY] = dca[0] / std::sqrt(track.cYY()); } @@ -3536,13 +4177,13 @@ void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, M } template -void VarManager::FillPhoton(T const& track, float* values) -{ +void VarManager::FillPhoton(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - // Quantities based on the basic table (contains just kine information and filter bits) + // Quantities based on the basic table (contains just kine information and + // filter bits) if constexpr ((fillMap & Track) > 0 || (fillMap & ReducedTrack) > 0) { values[kPt] = track.pt(); if (fgUsedVars[kP]) { @@ -3568,14 +4209,18 @@ void VarManager::FillPhoton(T const& track, float* values) } template -void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, float deltaPhi, float* values) -{ - // Fill the EMCal cluster quantities; the cluster can be either an aod::EMCALCluster (skimming) - // or an aod::ReducedEMCal (analysis on skimmed data), the column schemas are identical. - // trackP: momentum of the matched track, used to compute E/p when called in a track-cluster matching context; - // the default (negative) value leaves E/p at the -999 sentinel, as for tracks without a matched cluster. +void VarManager::FillTrackEMCal(T const &cluster, float trackP, float deltaEta, + float deltaPhi, float *values) { + // Fill the EMCal cluster quantities; the cluster can be either an + // aod::EMCALCluster (skimming) + // or an aod::ReducedEMCal (analysis on skimmed data), the column schemas + // are identical. + // trackP: momentum of the matched track, used to compute E/p when called in a + // track-cluster matching context; + // the default (negative) value leaves E/p at the -999 sentinel, as for + // tracks without a matched cluster. if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kEMCalEnergy] = cluster.energy(); @@ -3597,10 +4242,9 @@ void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, } template -void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) -{ +void VarManager::FillTrackMC(const U &mcStack, T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Quantities based on the mc particle table @@ -3629,12 +4273,13 @@ void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) FillTrackDerived(values); } -template -void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C const& collision, float* values) -{ +template +void VarManager::FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, + C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassBPlus; @@ -3644,7 +4289,8 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C pdgLifetime = 1.517e-12; // s } - // Extract the collision primary vertex position using constexpr, since the collision type may be CollisionMC or ReducedMCEvent + // Extract the collision primary vertex position using constexpr, since the + // collision type may be CollisionMC or ReducedMCEvent std::array collPos = {0.0, 0.0, 0.0}; if constexpr (fillMap & ObjTypes::CollisionMC) { collPos[0] = collision.posX(); @@ -3656,39 +4302,64 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C collPos[2] = collision.mcPosZ(); } - // displaced vertex is compued with decay product (track) and momentum of mother particle (MotherTrack) - values[kMCVertexingLxy] = (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + - (collPos[1] - track.vy()) * (collPos[1] - track.vy()); - values[kMCVertexingLz] = (collPos[2] - track.vz()) * (collPos[2] - track.vz()); + // displaced vertex is compued with decay product (track) and momentum of + // mother particle (MotherTrack) + values[kMCVertexingLxy] = + (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + + (collPos[1] - track.vy()) * (collPos[1] - track.vy()); + values[kMCVertexingLz] = + (collPos[2] - track.vz()) * (collPos[2] - track.vz()); values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz]; values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]); values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]); values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]); - values[kMCVertexingTauz] = (collPos[2] - track.vz()) * m / (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kMCVertexingTauxy] = values[kMCVertexingLxy] * m / (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kMCCosPointingAngle] = ((collPos[0] - track.vx()) * MotherTrack.px() + - (collPos[1] - track.vy()) * MotherTrack.py() + - (collPos[2] - track.vz()) * MotherTrack.pz()) / - (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); - - values[kMCLxyExpected] = (MotherTrack.pt() / m) * (pdgLifetime * o2::constants::physics::LightSpeedCm2S); - values[kMCLxyzExpected] = (MotherTrack.p() / m) * (pdgLifetime * o2::constants::physics::LightSpeedCm2S); - - values[kMCVertexingLzProjected] = ((track.vz() - collPos[2]) * MotherTrack.pz()) / TMath::Abs(MotherTrack.pz()); - values[kMCVertexingLxyProjected] = (((track.vx() - collPos[0]) * MotherTrack.px()) + ((track.vy() - collPos[1]) * MotherTrack.py())) / TMath::Abs(MotherTrack.pt()); - values[kMCVertexingLxyzProjected] = (((track.vx() - collPos[1]) * MotherTrack.px()) + ((track.vy() - collPos[1]) * MotherTrack.py()) + ((track.vz() - collPos[2]) * MotherTrack.pz())) / MotherTrack.p(); - values[kMCVertexingTauxyProjected] = values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); - values[kMCVertexingTauzProjected] = values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); - values[kMCVertexingTauxyzProjected] = values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); + values[kMCVertexingTauz] = + (collPos[2] - track.vz()) * m / + (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kMCVertexingTauxy] = + values[kMCVertexingLxy] * m / + (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kMCCosPointingAngle] = + ((collPos[0] - track.vx()) * MotherTrack.px() + + (collPos[1] - track.vy()) * MotherTrack.py() + + (collPos[2] - track.vz()) * MotherTrack.pz()) / + (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); + + values[kMCLxyExpected] = + (MotherTrack.pt() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + values[kMCLxyzExpected] = + (MotherTrack.p() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + + values[kMCVertexingLzProjected] = + ((track.vz() - collPos[2]) * MotherTrack.pz()) / + TMath::Abs(MotherTrack.pz()); + values[kMCVertexingLxyProjected] = + (((track.vx() - collPos[0]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py())) / + TMath::Abs(MotherTrack.pt()); + values[kMCVertexingLxyzProjected] = + (((track.vx() - collPos[1]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py()) + + ((track.vz() - collPos[2]) * MotherTrack.pz())) / + MotherTrack.p(); + values[kMCVertexingTauxyProjected] = + values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); + values[kMCVertexingTauzProjected] = + values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); + values[kMCVertexingTauxyzProjected] = + values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); } template -void VarManager::FillTrackCollisionMC(T1 const& track, const std::array& collPos, float massHyp, float* values) -{ +void VarManager::FillTrackCollisionMC(T1 const &track, + const std::array &collPos, + float massHyp, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassJPsi; @@ -3697,34 +4368,54 @@ void VarManager::FillTrackCollisionMC(T1 const& track, const std::array -void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values, float Translow, float Transhigh, float Accweight) -{ +void VarManager::FillEnergyCorrelatorsMC(T const &track, T1 const &t1, + float *values, float Translow, + float Transhigh, float Accweight) { // energy correlators float MassHadron = o2::constants::physics::MassPionCharged; if constexpr (pairType == kJpsiHadronMass) { MassHadron = TMath::Sqrt(t1.e() * t1.e() - t1.p() * t1.p()); } - ROOT::Math::PtEtaPhiMVector v1(track.pt(), track.eta(), track.phi(), o2::constants::physics::MassJPsi); - float deltaphi = RecoDecay::constrainAngle(track.phi() - t1.phi(), -o2::constants::math::PIHalf); + ROOT::Math::PtEtaPhiMVector v1(track.pt(), track.eta(), track.phi(), + o2::constants::physics::MassJPsi); + float deltaphi = RecoDecay::constrainAngle(track.phi() - t1.phi(), + -o2::constants::math::PIHalf); float deltaeta = t1.eta() - track.eta(); ROOT::Math::PtEtaPhiMVector v2(t1.pt(), t1.eta(), t1.phi(), MassHadron); float E_boost = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2); @@ -3732,14 +4423,17 @@ void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* va float CosTheta = LorentzTransformJpsihadroncosChi("costheta", v1, v2); values[kMCAccweight] = Accweight; values[kMCCosChi] = CosChi; - values[kMCWeight_before] = t1.pt() / o2::constants::physics::MassJPsi * Accweight; - values[kMCEWeight_before] = t1.e() / o2::constants::physics::MassJPsi * Accweight; + values[kMCWeight_before] = + t1.pt() / o2::constants::physics::MassJPsi * Accweight; + values[kMCEWeight_before] = + t1.e() / o2::constants::physics::MassJPsi * Accweight; values[kMCCosTheta] = CosTheta; values[kMCdeltaphi] = deltaphi; values[kMCdeltaeta] = deltaeta; values[kMCHadronPt] = t1.pt(); values[kMCHadronEta] = t1.eta(); - values[kMCHadronPhi] = RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); + values[kMCHadronPhi] = + RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); values[kMCHadronPdgCode] = t1.pdgCode(); values[kMCWeight] = E_boost / o2::constants::physics::MassJPsi * Accweight; @@ -3755,44 +4449,71 @@ void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* va float randomPhi_toward = -o2::constants::math::PIHalf; float randomPhi_away = -o2::constants::math::PIHalf; - float deltaphitrans = RecoDecay::constrainAngle(track.phi() - t1.phi(), -o2::constants::math::PI); - if ((deltaphitrans > -Transhigh * o2::constants::math::PI && deltaphitrans < -Translow * o2::constants::math::PI) || (deltaphitrans > Translow * o2::constants::math::PI && deltaphitrans < Transhigh * o2::constants::math::PI)) { - randomPhi_trans = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); - randomPhi_toward = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); - randomPhi_away = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); + float deltaphitrans = RecoDecay::constrainAngle(track.phi() - t1.phi(), + -o2::constants::math::PI); + if ((deltaphitrans > -Transhigh * o2::constants::math::PI && + deltaphitrans < -Translow * o2::constants::math::PI) || + (deltaphitrans > Translow * o2::constants::math::PI && + deltaphitrans < Transhigh * o2::constants::math::PI)) { + randomPhi_trans = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); + randomPhi_toward = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); + randomPhi_away = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); values[kMCHadronpt_randomPhi_trans] = v2.pt(); - ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans(v2.pt(), v2.eta(), randomPhi_trans, MassHadron); - values[kMCCosChi_randomPhi_trans] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); - values[kMCWeight_randomPhi_trans] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_trans) / v1.M() * Accweight; - - ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward(v2.pt(), v2.eta(), randomPhi_toward, MassHadron); - values[kMCCosChi_randomPhi_toward] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); - values[kMCWeight_randomPhi_toward] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_toward) / v1.M() * Accweight; - - ROOT::Math::PtEtaPhiMVector v2_randomPhi_away(v2.pt(), v2.eta(), randomPhi_away, MassHadron); - values[kMCCosChi_randomPhi_away] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); - values[kMCWeight_randomPhi_away] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_away) / v1.M() * Accweight; - - values[kMCdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle(v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); - values[kMCdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle(v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); - values[kMCdeltaphi_randomPhi_away] = RecoDecay::constrainAngle(v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans(v2.pt(), v2.eta(), + randomPhi_trans, MassHadron); + values[kMCCosChi_randomPhi_trans] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + values[kMCWeight_randomPhi_trans] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * Accweight; + + ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( + v2.pt(), v2.eta(), randomPhi_toward, MassHadron); + values[kMCCosChi_randomPhi_toward] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + values[kMCWeight_randomPhi_toward] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * Accweight; + + ROOT::Math::PtEtaPhiMVector v2_randomPhi_away(v2.pt(), v2.eta(), + randomPhi_away, MassHadron); + values[kMCCosChi_randomPhi_away] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + values[kMCWeight_randomPhi_away] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * Accweight; + + values[kMCdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + values[kMCdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + values[kMCdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } template -void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C& collision, float* values) -{ +void VarManager::FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, + const C &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } o2::dataformats::GlobalFwdTrack propmuon1 = PropagateMuon(muon1, collision); o2::dataformats::GlobalFwdTrack propmuon2 = PropagateMuon(muon2, collision); float m = o2::constants::physics::MassMuon; - ROOT::Math::PtEtaPhiMVector v1(propmuon1.getPt(), propmuon1.getEta(), propmuon1.getPhi(), m); - ROOT::Math::PtEtaPhiMVector v2(propmuon2.getPt(), propmuon2.getEta(), propmuon2.getPhi(), m); + ROOT::Math::PtEtaPhiMVector v1(propmuon1.getPt(), propmuon1.getEta(), + propmuon1.getPhi(), m); + ROOT::Math::PtEtaPhiMVector v2(propmuon2.getPt(), propmuon2.getEta(), + propmuon2.getPhi(), m); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; values[kMass] = v12.M(); values[kPt] = v12.Pt(); @@ -3800,16 +4521,17 @@ void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C values[kPhi] = v12.Phi(); values[kRap] = -v12.Rapidity(); - double Ptot1 = TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); - double Ptot2 = TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + double Ptot1 = + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + double Ptot2 = + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; } template -void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -3848,8 +4570,10 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // values[kPhi] = v12.Phi(); values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); - double Ptot1 = TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); - double Ptot2 = TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + double Ptot1 = + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + double Ptot2 = + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -3860,7 +4584,8 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kPhi2] = t2.phi(); if (fgUsedVars[kDeltaPhiPair2]) { - values[kDeltaPhiPair2] = RecoDecay::constrainAngle(v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + values[kDeltaPhiPair2] = RecoDecay::constrainAngle( + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -3868,9 +4593,15 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPsiPair]) { - values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) ? (v1.Phi() - v2.Phi()) : (v2.Phi() - v1.Phi()); - double xipair = TMath::ACos((v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / v2.P()); - values[kPsiPair] = (t1.sign() * fgMagField > 0.) ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); + double xipair = TMath::ACos( + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); + values[kPsiPair] = (t1.sign() * fgMagField > 0.) + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -3892,9 +4623,10 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame - bool useCS = fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + bool useCS = + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -3914,14 +4646,19 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kCosThetaHE] = zaxis_HE.Dot(v_CM); } if (fgUsedVars[kPhiHE]) { - values[kPhiHE] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + values[kPhiHE] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -3937,14 +4674,19 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kCosThetaCS] = zaxis_CS.Dot(v_CM); } if (fgUsedVars[kPhiCS]) { - values[kPhiCS] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + values[kPhiCS] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -3953,21 +4695,27 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) } if (usePP) { - ROOT::Math::XYZVector zaxis_PP = ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector zaxis_PP = + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { values[kCosThetaPP] = zaxis_PP.Dot(v_CM) / std::sqrt(zaxis_PP.Mag2()); } if (fgUsedVars[kPhiPP]) { - values[kPhiPP] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + values[kPhiPP] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -3978,7 +4726,10 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) if (useRM) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); - ROOT::Math::XYZVectorF zaxis_RM(randomCostheta, std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + ROOT::Math::XYZVectorF zaxis_RM( + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -3994,14 +4745,22 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) ROOT::Math::XYZVectorF v_CM = (t1.sign() > 0 ? v1_CM : v2_CM); // Randomize the event plane angle to check the unpolarized contribution - ROOT::Math::XYZVector zaxisRandom = ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), TMath::Sin(values[kRandomPsi2]), 0).Unit(); + ROOT::Math::XYZVector zaxisRandom = + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); - values[kCos2ThetaStarRandom] = values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCos2ThetaStarRandom] = + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; - // if the truth event plane angle is available, calculate the cos(theta*) with respect to the true event plane angle for comparison + // if the truth event plane angle is available, calculate the cos(theta*) + // with respect to the true event plane angle for comparison if (fgUsedVars[kMCCosThetaStar] && fgUsedVars[kMCEventPlaneAngle]) { // truth event plane angle - ROOT::Math::XYZVector zaxisTrue = ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), TMath::Sin(values[kMCEventPlaneAngle]), 0).Unit(); + ROOT::Math::XYZVector zaxisTrue = + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } } @@ -4017,7 +4776,8 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kTPCnSigmaEl2] = t2.tpcNSigmaEl(); } - if constexpr (((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { + if constexpr (((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0)) { double dca1XY = t1.dcaXY(); double dca2XY = t2.dcaXY(); double dca1Z = t1.dcaZ(); @@ -4032,37 +4792,53 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) double dca2sigXY = dca2XY / std::sqrt(t2.cYY()); double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); - + values[kDCAxyOverSig1] = dca1sigXY; values[kDCAzOverSig1] = dca1sigZ; values[kDCAxyOverSig2] = dca2sigXY; values[kDCAzOverSig2] = dca2sigZ; - if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { + if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || + fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || + fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { // Quantities based on the barrel tables - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); - values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + values[kQuadDCAsigXY] = + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); - values[kQuadDCAsigZ] = std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); - values[kSignQuadDCAsigXY] = t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * TMath::Sign(1., dca2sigXY) * std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAsigZ] = + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + values[kSignQuadDCAsigXY] = + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); if ((det1 < 0) || (det2 < 0)) { values[kQuadDCAsigXYZ] = -999; } else { - double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - 2. * dca1XY * dca1Z * t1.cZY()) / det1; - double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - 2. * dca2XY * dca2Z * t2.cZY()) / det2; + double chi2t1 = + (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; + double chi2t2 = + (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); - values[kQuadDCAsigXYZ] = std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + values[kQuadDCAsigXYZ] = std::sqrt( + (dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } } - if constexpr ((pairType == kDecayToMuMu) && ((fillMap & ReducedMuonExtra) > 0)) { + if constexpr ((pairType == kDecayToMuMu) && + ((fillMap & ReducedMuonExtra) > 0)) { if (fgUsedVars[kQuadDCAabsXY]) { double dca1X = t1.fwdDcaX(); double dca1Y = t1.fwdDcaY(); @@ -4070,11 +4846,14 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) double dca2X = t2.fwdDcaX(); double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } - if constexpr ((pairType == kElectronMuon) && ((fillMap & ReducedTrackBarrel) > 0)) { - // DCA of the barrel (electron) leg; not filled in FillPairME since the mixed-event barrel track type has no DCA columns + if constexpr ((pairType == kElectronMuon) && + ((fillMap & ReducedTrackBarrel) > 0)) { + // DCA of the barrel (electron) leg; not filled in FillPairME since the + // mixed-event barrel track type has no DCA columns values[kDCAxy1] = t1.dcaXY(); values[kDCAz1] = t1.dcaZ(); } @@ -4085,10 +4864,10 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // change_start: rotation pair template -void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, float* values) -{ +void VarManager::FillPairRotation(T1 const &t1, T2 const &t2, int rotation, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4143,8 +4922,10 @@ void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, floa // values[kPhi] = v12.Phi(); values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); - double Ptot1 = TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); - double Ptot2 = TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + double Ptot1 = + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + double Ptot2 = + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -4156,23 +4937,31 @@ void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, floa } template -void VarManager::FillPairCollision(const C& collision, T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairCollision(const C &collision, T1 const &t1, + T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if constexpr ((pairType == kDecayToEE) && ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { + if constexpr ((pairType == kDecayToEE) && + ((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0)) { - if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { + if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || + fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || + fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { auto trackPart1 = getTrackPar(t1); std::array dca1{1e10f, 1e10f}; - trackPart1.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca1); + trackPart1.propagateParamToDCA( + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca1); auto trackPart2 = getTrackPar(t2); std::array dca2{1e10f, 1e10f}; - trackPart2.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca2); + trackPart2.propagateParamToDCA( + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca2); // Recalculated quantities double dca1XY = dca1[0]; @@ -4184,52 +4973,75 @@ void VarManager::FillPairCollision(const C& collision, T1 const& t1, T2 const& t double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); - values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + values[kQuadDCAsigXY] = + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); - values[kQuadDCAsigZ] = std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); - values[kSignQuadDCAsigXY] = t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * TMath::Sign(1., dca2sigXY) * std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAsigZ] = + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + values[kSignQuadDCAsigXY] = + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); if ((det1 < 0) || (det2 < 0)) { values[kQuadDCAsigXYZ] = -999; } else { - double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - 2. * dca1XY * dca1Z * t1.cZY()) / det1; - double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - 2. * dca2XY * dca2Z * t2.cZY()) / det2; + double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; + double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); - values[kQuadDCAsigXYZ] = std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + values[kQuadDCAsigXYZ] = + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } } -template -void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, T2 const& t2, M const& materialCorr, P const& propagator, float* values) -{ +template +void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, + T2 const &t2, M const &materialCorr, + P const &propagator, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if constexpr ((pairType == kDecayToEE) && ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { + if constexpr ((pairType == kDecayToEE) && + ((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0)) { - if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { + if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || + fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || + fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { auto trackPart1 = getTrackPar(t1); std::array dca1{1e10f, 1e10f}; std::array pVect1 = {t1.px(), t1.py(), t1.pz()}; - // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca); - propagator->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackPart1, 2.f, materialCorr, &dca1); + // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), + // collision.posZ()}, fgMagField, &dca); + propagator->propagateToDCABxByBz( + {collision.posX(), collision.posY(), collision.posZ()}, trackPart1, + 2.f, materialCorr, &dca1); getPxPyPz(trackPart1, pVect1); auto trackPart2 = getTrackPar(t2); std::array dca2{1e10f, 1e10f}; std::array pVect2 = {t2.px(), t2.py(), t2.pz()}; - // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca); - propagator->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackPart2, 2.f, materialCorr, &dca2); + // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), + // collision.posZ()}, fgMagField, &dca); + propagator->propagateToDCABxByBz( + {collision.posX(), collision.posY(), collision.posZ()}, trackPart2, + 2.f, materialCorr, &dca2); getPxPyPz(trackPart2, pVect2); // Recalculated quantities @@ -4242,35 +5054,46 @@ void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, T2 c double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); - values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + values[kQuadDCAsigXY] = + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); - values[kQuadDCAsigZ] = std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); - values[kSignQuadDCAsigXY] = t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * TMath::Sign(1., dca2sigXY) * std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAsigZ] = + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + values[kSignQuadDCAsigXY] = + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); if ((det1 < 0) || (det2 < 0)) { values[kQuadDCAsigXYZ] = -999; } else { - double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - 2. * dca1XY * dca1Z * t1.cZY()) / det1; - double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - 2. * dca2XY * dca2Z * t2.cZY()) / det2; + double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; + double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); - values[kQuadDCAsigXYZ] = std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + values[kQuadDCAsigXYZ] = + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } } template -void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* values, PairCandidateType pairType) -{ +void VarManager::FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, + float *values, PairCandidateType pairType) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (pairType == kTripleCandidateToEEPhoton) { float m1 = o2::constants::physics::MassElectron; @@ -4338,13 +5161,12 @@ void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* val } template -void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { // // Lightweight fill function called from the innermost event mixing loop // if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4373,7 +5195,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); - // Per-track quantities so ME histograms can use kPt1/kPt2/kEta1/kEta2/kPhi1/kPhi2 just like SE FillPair does. + // Per-track quantities so ME histograms can use + // kPt1/kPt2/kEta1/kEta2/kPhi1/kPhi2 just like SE FillPair does. values[kPt1] = t1.pt(); values[kEta1] = t1.eta(); values[kPhi1] = t1.phi(); @@ -4382,7 +5205,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kPhi2] = t2.phi(); if (fgUsedVars[kDeltaPhiPair2]) { - values[kDeltaPhiPair2] = RecoDecay::constrainAngle(v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + values[kDeltaPhiPair2] = RecoDecay::constrainAngle( + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -4391,9 +5215,10 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame - bool useCS = fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + bool useCS = + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -4413,14 +5238,19 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kCosThetaHE] = zaxis_HE.Dot(v_CM); } if (fgUsedVars[kPhiHE]) { - values[kPhiHE] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + values[kPhiHE] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -4436,14 +5266,19 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kCosThetaCS] = zaxis_CS.Dot(v_CM); } if (fgUsedVars[kPhiCS]) { - values[kPhiCS] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + values[kPhiCS] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -4452,21 +5287,27 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } if (usePP) { - ROOT::Math::XYZVector zaxis_PP = ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector zaxis_PP = + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { values[kCosThetaPP] = zaxis_PP.Dot(v_CM) / std::sqrt(zaxis_PP.Mag2()); } if (fgUsedVars[kPhiPP]) { - values[kPhiPP] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + values[kPhiPP] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -4477,28 +5318,39 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) if (useRM) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); - ROOT::Math::XYZVectorF zaxis_RM(randomCostheta, std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + ROOT::Math::XYZVectorF zaxis_RM( + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } } } - if constexpr ((fillMap & ReducedEventQvector) > 0 || (fillMap & CollisionQvect) > 0) { + if constexpr ((fillMap & ReducedEventQvector) > 0 || + (fillMap & CollisionQvect) > 0) { // TODO: provide different computations for vn - // Compute the scalar product UQ for two muon from different event using Q-vector from A, for second and third harmonic + // Compute the scalar product UQ for two muon from different event using + // Q-vector from A, for second and third harmonic float Psi2A1 = getEventPlane(2, values[kQ2X0A1], values[kQ2Y0A1]); float Psi2A2 = getEventPlane(2, values[kQ2X0A2], values[kQ2Y0A2]); float Psi2B1 = getEventPlane(2, values[kQ2X0B1], values[kQ2Y0B1]); float Psi2B2 = getEventPlane(2, values[kQ2X0B2], values[kQ2Y0B2]); float Psi2C1 = getEventPlane(2, values[kQ2X0C1], values[kQ2Y0C1]); float Psi2C2 = getEventPlane(2, values[kQ2X0C2], values[kQ2Y0C2]); - values[kCos2DeltaPhi] = TMath::Cos(2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP + values[kCos2DeltaPhi] = TMath::Cos( + 2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP values[kCos2DeltaPhiEv1] = TMath::Cos(2 * (v1.Phi() - Psi2A1)); values[kCos2DeltaPhiEv2] = TMath::Cos(2 * (v2.Phi() - Psi2A2)); - values[kU2Q2] = values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + values[kQ2Y0A1] * TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP - values[kU2Q2Ev1] = values[kQ2X0A1] * TMath::Cos(2 * v1.Phi()) + values[kQ2Y0A1] * TMath::Sin(2 * v1.Phi()); - values[kU2Q2Ev2] = values[kQ2X0A2] * TMath::Cos(2 * v2.Phi()) + values[kQ2Y0A2] * TMath::Sin(2 * v2.Phi()); + values[kU2Q2] = + values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0A1] * + TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP + values[kU2Q2Ev1] = values[kQ2X0A1] * TMath::Cos(2 * v1.Phi()) + + values[kQ2Y0A1] * TMath::Sin(2 * v1.Phi()); + values[kU2Q2Ev2] = values[kQ2X0A2] * TMath::Cos(2 * v2.Phi()) + + values[kQ2Y0A2] * TMath::Sin(2 * v2.Phi()); values[kCos2DeltaPhiMu1] = TMath::Cos(2 * (v1.Phi() - v12.Phi())); values[kCos2DeltaPhiMu2] = TMath::Cos(2 * (v2.Phi() - v12.Phi())); @@ -4508,43 +5360,79 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kV2EP1] = values[kCos2DeltaPhiEv1] / values[kTwoR2EP1]; values[kV2EP2] = values[kCos2DeltaPhiEv2] / values[kTwoR2EP2]; - float V2ME_SP = values[kV2SP1] * values[kCos2DeltaPhiMu1] + values[kV2SP2] * values[kCos2DeltaPhiMu2]; - float V2ME_EP = values[kV2EP1] * values[kCos2DeltaPhiMu1] + values[kV2EP2] * values[kCos2DeltaPhiMu2]; - values[kV2ME_SP] = std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; + float V2ME_SP = values[kV2SP1] * values[kCos2DeltaPhiMu1] + + values[kV2SP2] * values[kCos2DeltaPhiMu2]; + float V2ME_EP = values[kV2EP1] * values[kCos2DeltaPhiMu1] + + values[kV2EP2] * values[kCos2DeltaPhiMu2]; + values[kV2ME_SP] = + std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; values[kWV2ME_SP] = std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : 1.0; - values[kV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; + values[kV2ME_EP] = + std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; values[kWV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : 1.0; // Cumulant part - float V22ME = values[kV22m] * values[kCos2DeltaPhiMu1] + values[kV22p] * values[kCos2DeltaPhiMu2]; - float V24ME = values[kV24m] * values[kCos2DeltaPhiMu1] + values[kV24p] * values[kCos2DeltaPhiMu2]; - values[kV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : V22ME; - values[kWV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : 1.0; - values[kV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : V24ME; - values[kWV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : 1.0; + float V22ME = values[kV22m] * values[kCos2DeltaPhiMu1] + + values[kV22p] * values[kCos2DeltaPhiMu2]; + float V24ME = values[kV24m] * values[kCos2DeltaPhiMu1] + + values[kV24p] * values[kCos2DeltaPhiMu2]; + values[kV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || + std::isnan(V24ME) || std::isinf(V24ME)) + ? 0. + : V22ME; + values[kWV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || + std::isnan(V24ME) || std::isinf(V24ME)) + ? 0. + : 1.0; + values[kV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || + std::isnan(V24ME) || std::isinf(V24ME)) + ? 0. + : V24ME; + values[kWV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || + std::isnan(V24ME) || std::isinf(V24ME)) + ? 0. + : 1.0; // coherent Jpsi A2 - bool useCoherentJpsiA2 = fgUsedVars[kA2EPME_TPC] || fgUsedVars[kA2EPME_FT0A] || fgUsedVars[kA2EPME_FT0C]; + bool useCoherentJpsiA2 = fgUsedVars[kA2EPME_TPC] || + fgUsedVars[kA2EPME_FT0A] || + fgUsedVars[kA2EPME_FT0C]; if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; - ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(t1.sign() > 0 ? v1 : v2); + ROOT::Math::PtEtaPhiMVector v_daughter = + boostv12(t1.sign() > 0 ? v1 : v2); float Psi2A = t1.sign() > 0 ? Psi2A1 : Psi2A2; float Psi2B = t1.sign() > 0 ? Psi2B1 : Psi2B2; float Psi2C = t1.sign() > 0 ? Psi2C1 : Psi2C2; float R2EP = t1.sign() > 0 ? values[kTwoR2EP1] : values[kTwoR2EP2]; // reaction plane - float phi = RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + float phi = + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhiME_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; - values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] : values[kDeltaPhiME_TPC]; + values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; values[kDeltaPhiME_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; - values[kDeltaPhiME_FT0A] = values[kDeltaPhiME_FT0A] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] : values[kDeltaPhiME_FT0A]; + values[kDeltaPhiME_FT0A] = + values[kDeltaPhiME_FT0A] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; values[kDeltaPhiME_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; - values[kDeltaPhiME_FT0C] = values[kDeltaPhiME_FT0C] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] : values[kDeltaPhiME_FT0C]; + values[kDeltaPhiME_FT0C] = + values[kDeltaPhiME_FT0C] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; // fold delta phMEi to [0, pi/2] - values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiME_TPC] : values[kDeltaPhiME_TPC]; - values[kDeltaPhiME_FT0A] = values[kDeltaPhiME_FT0A] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiME_FT0A] : values[kDeltaPhiME_FT0A]; - values[kDeltaPhiME_FT0C] = values[kDeltaPhiME_FT0C] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiME_FT0C] : values[kDeltaPhiME_FT0C]; + values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; + values[kDeltaPhiME_FT0A] = values[kDeltaPhiME_FT0A] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; + values[kDeltaPhiME_FT0C] = values[kDeltaPhiME_FT0C] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; values[kCos2DeltaPhiME_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhiME_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhiME_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -4552,28 +5440,115 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) float A2_TPC = values[kCos2DeltaPhiME_TPC] / R2EP; float A2_FT0A = values[kCos2DeltaPhiME_FT0A] / R2EP; float A2_FT0C = values[kCos2DeltaPhiME_FT0C] / R2EP; - values[kA2EPME_TPC] = std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; - values[kA2EPME_FT0A] = std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; - values[kA2EPME_FT0C] = std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; + values[kA2EPME_TPC] = + std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; + values[kA2EPME_FT0A] = + std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; + values[kA2EPME_FT0C] = + std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; } if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) { - std::complex Q21(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]); + std::complex Q21(values[kQ2X0A] * values[kS11A], + values[kQ2Y0A] * values[kS11A]); std::complex Q42(values[kQ42XA], values[kQ42YA]); std::complex Q23(values[kQ23XA], values[kQ23YA]); - std::complex P2(TMath::Cos(2 * v12.Phi()), TMath::Sin(2 * v12.Phi())); + std::complex P2(TMath::Cos(2 * v12.Phi()), + TMath::Sin(2 * v12.Phi())); values[kM01POIME] = values[kMultDimuonsME] * values[kS11A]; - values[kM0111POIME] = values[kMultDimuonsME] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]); + values[kM0111POIME] = + values[kMultDimuonsME] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIME] = (P2 * conj(Q21)).real() / values[kM01POIME]; - values[kCORR4POIME] = (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)).real() / values[kM0111POIME]; - values[kM01POIoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME])) ? values[kM01POIME] / values[kMultDimuonsME] : 0; - values[kM0111POIoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME])) ? values[kM0111POIME] / values[kMultDimuonsME] : 0; - values[kM11REFoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultDimuonsME] : 0; - values[kM1111REFoverMpME] = values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) ? values[kM1111REF] / values[kMultDimuonsME] : 0; - values[kCORR2REFbydimuonsME] = std::isnan(values[kM11REFoverMpME]) || std::isinf(values[kM11REFoverMpME]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REFoverMpME]) || std::isinf(values[kM1111REFoverMpME]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kCORR2REF]; - values[kCORR4REFbydimuonsME] = std::isnan(values[kM1111REFoverMpME]) || std::isinf(values[kM1111REFoverMpME]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REFoverMpME]) || std::isinf(values[kM11REFoverMpME]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kCORR4REF]; - values[kCORR2POIME] = std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) || std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) ? 0 : values[kCORR2POIME]; - values[kCORR4POIME] = std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || std::isnan(values[kM0111POIME]) || std::isinf(values[kM0111POIME]) || std::isnan(values[kCORR2POIME]) || std::isinf(values[kCORR2POIME]) || std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) ? 0 : values[kCORR4POIME]; + values[kCORR4POIME] = + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIME]; + values[kM01POIoverMpME] = + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME])) + ? values[kM01POIME] / values[kMultDimuonsME] + : 0; + values[kM0111POIoverMpME] = + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME])) + ? values[kM0111POIME] / values[kMultDimuonsME] + : 0; + values[kM11REFoverMpME] = + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuonsME] + : 0; + values[kM1111REFoverMpME] = + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuonsME] + : 0; + values[kCORR2REFbydimuonsME] = + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; + values[kCORR4REFbydimuonsME] = + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; + values[kCORR2POIME] = std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) + ? 0 + : values[kCORR2POIME]; + values[kCORR4POIME] = + std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) + ? 0 + : values[kCORR4POIME]; } } if constexpr (pairType == kDecayToMuMu) { @@ -4584,7 +5559,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) double dca2X = t2.fwdDcaX(); double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } if (fgUsedVars[kPairPhiv]) { @@ -4593,8 +5569,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } template -void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, float* values) -{ +void VarManager::FillPairRotation_ME(T const &t1, T const &t2, int rotation, + float *values) { if (!values) { values = fgValues; } @@ -4625,8 +5601,10 @@ void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, flo // values[kPhi] = v12.Phi(); values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); - double Ptot1 = TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); - double Ptot2 = TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + double Ptot1 = + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + double Ptot2 = + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt; @@ -4638,10 +5616,9 @@ void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, flo } template -void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) -{ +void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4660,21 +5637,30 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) if (fgUsedVars[kCosThetaStarRandom]) { // Randomize the event plane angle to check the unpolarized contribution - ROOT::Math::XYZVector zaxisRandom = ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), TMath::Sin(values[kRandomPsi2]), 0).Unit(); + ROOT::Math::XYZVector zaxisRandom = + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); - values[kCos2ThetaStarRandom] = values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCos2ThetaStarRandom] = + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; } if (fgUsedVars[kCosThetaStarFT0C]) { // event plane angle from FT0C - ROOT::Math::XYZVector zaxisFT0C = ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), TMath::Sin(values[kPsi2C]), 0).Unit(); + ROOT::Math::XYZVector zaxisFT0C = + ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), + TMath::Sin(values[kPsi2C]), 0) + .Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); - values[kCos2ThetaStarFT0C] = values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCos2ThetaStarFT0C] = + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } } - bool useCoherentJpsiA2 = fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + bool useCoherentJpsiA2 = + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(v1); @@ -4683,17 +5669,30 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) float Psi2C = values[kPsi2C]; // reaction plane - float phi = RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + float phi = + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; - values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; - values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; - values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] - values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhi_TPC] : values[kDeltaPhi_TPC]; - values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhi_FT0A] : values[kDeltaPhi_FT0A]; - values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhi_FT0C] : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; + values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() / 2. + ? TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -4701,17 +5700,19 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) float A2RP_TPC = values[kCos2DeltaPhi_TPC] / values[kR2EP]; float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; - values[kA2EP_TPC] = std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; - values[kA2EP_FT0A] = std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; - values[kA2EP_FT0C] = std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + values[kA2EP_TPC] = + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + values[kA2EP_FT0A] = + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + values[kA2EP_FT0C] = + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } } template -void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4752,10 +5753,12 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) values[kMCP2] = t2.p(); // polarization parameters - bool useHE = fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame - bool useCS = fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame + bool useHE = + fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame + bool useCS = + fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -4775,14 +5778,19 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) values[kMCCosThetaHE] = zaxis_HE.Dot(v_CM); } if (fgUsedVars[kMCPhiHE]) { - values[kMCPhiHE] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + values[kMCPhiHE] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeHE]) { if (fgUsedVars[kMCCosThetaHE] && fgUsedVars[kMCPhiHE]) { if (values[kMCCosThetaHE] > 0) { - values[kMCPhiTildeHE] = RecoDecay::constrainAngle(values[kMCPhiHE] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiTildeHE] = RecoDecay::constrainAngle( + values[kMCPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kMCPhiTildeHE] = RecoDecay::constrainAngle(values[kMCPhiHE] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiTildeHE] = RecoDecay::constrainAngle( + values[kMCPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeHE] = -999; // not computable @@ -4798,14 +5806,19 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) values[kMCCosThetaCS] = zaxis_CS.Dot(v_CM); } if (fgUsedVars[kMCPhiCS]) { - values[kMCPhiCS] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + values[kMCPhiCS] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeCS]) { if (fgUsedVars[kMCCosThetaCS] && fgUsedVars[kMCPhiCS]) { if (values[kMCCosThetaCS] > 0) { - values[kMCPhiTildeCS] = RecoDecay::constrainAngle(values[kMCPhiCS] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiTildeCS] = RecoDecay::constrainAngle( + values[kMCPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kMCPhiTildeCS] = RecoDecay::constrainAngle(values[kMCPhiCS] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiTildeCS] = RecoDecay::constrainAngle( + values[kMCPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeCS] = -999; // not computable @@ -4814,21 +5827,27 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) } if (usePP) { - ROOT::Math::XYZVector zaxis_PP = ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector zaxis_PP = + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{v12.Vect().Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kMCCosThetaPP]) { values[kMCCosThetaPP] = zaxis_PP.Dot(v_CM); } if (fgUsedVars[kMCPhiPP]) { - values[kMCPhiPP] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + values[kMCPhiPP] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildePP]) { if (fgUsedVars[kMCCosThetaPP] && fgUsedVars[kMCPhiPP]) { if (values[kMCCosThetaPP] > 0) { - values[kMCPhiTildePP] = RecoDecay::constrainAngle(values[kMCPhiPP] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiTildePP] = RecoDecay::constrainAngle( + values[kMCPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kMCPhiTildePP] = RecoDecay::constrainAngle(values[kMCPhiPP] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiTildePP] = RecoDecay::constrainAngle( + values[kMCPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildePP] = -999; // not computable @@ -4839,7 +5858,10 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) if (useRM) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); - ROOT::Math::XYZVectorF zaxis_RM(randomCostheta, std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + ROOT::Math::XYZVectorF zaxis_RM( + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kMCCosThetaRM]) { values[kMCCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -4855,38 +5877,60 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) ROOT::Math::XYZVectorF v_CM = (t1.pdgCode() > 0 ? v1_CM : v2_CM); // Randomize the event plane angle to check the unpolarized contribution - ROOT::Math::XYZVector zaxisRandom = ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), TMath::Sin(values[kRandomPsi2]), 0).Unit(); + ROOT::Math::XYZVector zaxisRandom = + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); - values[kCos2ThetaStarRandom] = values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCos2ThetaStarRandom] = + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; // truth event plane angle - ROOT::Math::XYZVector zaxisTrue = ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), TMath::Sin(values[kMCEventPlaneAngle]), 0).Unit(); + ROOT::Math::XYZVector zaxisTrue = + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } - if (fgUsedVars[kCos2DeltaPhi_Random] || fgUsedVars[kCos2DeltaPhiPP_Random] || fgUsedVars[kCos2DeltaPhi_MC] || fgUsedVars[kCos2DeltaPhiPP_MC]) { + if (fgUsedVars[kCos2DeltaPhi_Random] || fgUsedVars[kCos2DeltaPhiPP_Random] || + fgUsedVars[kCos2DeltaPhi_MC] || fgUsedVars[kCos2DeltaPhiPP_MC]) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; - ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(t1.pdgCode() > 0 ? v1 : v2); + ROOT::Math::PtEtaPhiMVector v_daughter = + boostv12(t1.pdgCode() > 0 ? v1 : v2); // reaction plane - float phi = RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + float phi = + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_Random] = phi - values[kRandomPsi2]; - values[kDeltaPhi_Random] = values[kDeltaPhi_Random] > o2::constants::math::PI ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] : values[kDeltaPhi_Random]; + values[kDeltaPhi_Random] = + values[kDeltaPhi_Random] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; values[kDeltaPhi_MC] = phi - values[kMCEventPlaneAngle]; - values[kDeltaPhi_MC] = values[kDeltaPhi_MC] > o2::constants::math::PI ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] : values[kDeltaPhi_MC]; + values[kDeltaPhi_MC] = + values[kDeltaPhi_MC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; // fold delta phi into [-pi/2, pi/2] - values[kDeltaPhi_Random] = values[kDeltaPhi_Random] > o2::constants::math::PIHalf ? o2::constants::math::PI - values[kDeltaPhi_Random] : values[kDeltaPhi_Random]; - values[kDeltaPhi_MC] = values[kDeltaPhi_MC] > o2::constants::math::PIHalf ? o2::constants::math::PI - values[kDeltaPhi_MC] : values[kDeltaPhi_MC]; + values[kDeltaPhi_Random] = + values[kDeltaPhi_Random] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; + values[kDeltaPhi_MC] = values[kDeltaPhi_MC] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; values[kCos2DeltaPhi_Random] = TMath::Cos(2. * (phi - values[kRandomPsi2])); - values[kCos2DeltaPhi_MC] = TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); + values[kCos2DeltaPhi_MC] = + TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); } } template -void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* values) -{ +void VarManager::FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (candidateType == kTripleCandidateToEEPhoton) { @@ -4967,16 +6011,20 @@ void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* v } } -template -void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, float* values) -{ +template +void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, + float *values) { // check at compile time that the event and cov matrix have the cov matrix - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); - constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); - constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool trackHasCov = + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + constexpr bool muonHasCov = + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -4996,20 +6044,25 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, if (!fgUsedKF) { int procCode = 0; - // TODO: use trackUtilities functions to initialize the various matrices to avoid code duplication - // auto pars1 = getTrackParCov(t1); - // auto pars2 = getTrackParCov(t2); - // We need to hide the cov data members from the cases when no cov table is provided - if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { - std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; - std::array t1covs = {t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + // TODO: use trackUtilities functions to initialize the various matrices to + // avoid code duplication auto pars1 = getTrackParCov(t1); auto pars2 = + // getTrackParCov(t2); We need to hide the cov data members from the cases + // when no cov table is provided + if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) { + std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), + t1.signed1Pt()}; + std::array t1covs = { + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; - std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; - std::array t2covs = {t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), + t2.signed1Pt()}; + std::array t2covs = { + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else if constexpr ((pairType == kDecayToMuMu) && muonHasCov) { @@ -5053,15 +6106,24 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, // get track impact parameters // This modifies track momenta! // auto primaryVertex = getPrimaryVertex(collision); - std::array covMatrixPV{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + std::array covMatrixPV{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; - if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { + if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) { secondaryVertex = fgFitterTwoProngBarrel.getPCACandidate(); - // printf("secVtx (first) %f %f %f \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); + // printf("secVtx (first) %f %f %f + // \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); covMatrixPCA = fgFitterTwoProngBarrel.calcPCACovMatrixFlat(); - values[kVertexingChi2PCA] = fgFitterTwoProngBarrel.getChi2AtPCACandidate(); - v1 = {fgFitterTwoProngBarrel.getTrack(0).getPt(), fgFitterTwoProngBarrel.getTrack(0).getEta(), fgFitterTwoProngBarrel.getTrack(0).getPhi(), m1}; - v2 = {fgFitterTwoProngBarrel.getTrack(1).getPt(), fgFitterTwoProngBarrel.getTrack(1).getEta(), fgFitterTwoProngBarrel.getTrack(1).getPhi(), m2}; + values[kVertexingChi2PCA] = + fgFitterTwoProngBarrel.getChi2AtPCACandidate(); + v1 = {fgFitterTwoProngBarrel.getTrack(0).getPt(), + fgFitterTwoProngBarrel.getTrack(0).getEta(), + fgFitterTwoProngBarrel.getTrack(0).getPhi(), m1}; + v2 = {fgFitterTwoProngBarrel.getTrack(1).getPt(), + fgFitterTwoProngBarrel.getTrack(1).getEta(), + fgFitterTwoProngBarrel.getTrack(1).getPhi(), m2}; v12 = v1 + v2; if (fgPVrecalKF) { primaryVertexNew = RecalculatePrimaryVertex(t1, t2, collision); @@ -5072,8 +6134,12 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, secondaryVertex = fgFitterTwoProngFwd.getPCACandidate(); covMatrixPCA = fgFitterTwoProngFwd.calcPCACovMatrixFlat(); values[kVertexingChi2PCA] = fgFitterTwoProngFwd.getChi2AtPCACandidate(); - v1 = {fgFitterTwoProngFwd.getTrack(0).getPt(), fgFitterTwoProngFwd.getTrack(0).getEta(), fgFitterTwoProngFwd.getTrack(0).getPhi(), m1}; - v2 = {fgFitterTwoProngFwd.getTrack(1).getPt(), fgFitterTwoProngFwd.getTrack(1).getEta(), fgFitterTwoProngFwd.getTrack(1).getPhi(), m2}; + v1 = {fgFitterTwoProngFwd.getTrack(0).getPt(), + fgFitterTwoProngFwd.getTrack(0).getEta(), + fgFitterTwoProngFwd.getTrack(0).getPhi(), m1}; + v2 = {fgFitterTwoProngFwd.getTrack(1).getPt(), + fgFitterTwoProngFwd.getTrack(1).getEta(), + fgFitterTwoProngFwd.getTrack(1).getPhi(), m2}; v12 = v1 + v2; } const double dx = secondaryVertex[0] - collision.posX(); @@ -5082,9 +6148,15 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, double phi = std::atan2(dy, dx); double theta = std::atan2(dz, std::sqrt(dx * dx + dy * dy)); - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingLxy] = dx * dx + dy * dy; values[kVertexingLz] = dz * dz; @@ -5093,35 +6165,65 @@ 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[kVertexingTauz] = -dz * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + 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); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; - values[kVertexingTauzErr] = values[kVertexingLzErr] * 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[kVertexingTauxyErr] = + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); - values[kCosPointingAngle] = (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + values[kCosPointingAngle] = + (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 - values[kVertexingLzProjected] = (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); + values[kVertexingLzProjected] = + (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); values[kVertexingLxyProjected] = (dx * v12.Px()) + (dy * v12.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); - values[kVertexingLxyzProjected] = (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + (v12.Pz() * v12.Pz())); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); - values[kVertexingTauxyProjectedPoleJPsiMass] = values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / (v12.Pt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyzProjected] = + (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingTauxyProjectedPoleJPsiMass] = + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { - values[kVertexingLxyProjectedRecalculatePV] = (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); - values[kVertexingLxyProjectedRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); - values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] * o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] = + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + values[kVertexingLxyProjectedRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); - values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * v12.M() / (v12.P()); - } - } else if constexpr (((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) || ((pairType == kDecayToMuMu) && muonHasCov)) { + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingTauxyzProjected] = + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + } + } else if constexpr (((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) || + ((pairType == kDecayToMuMu) && muonHasCov)) { KFParticle trk0KF; KFParticle trk1KF; KFParticle KFGeoTwoProng; @@ -5155,57 +6257,130 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, double dxPair2PV = KFGeoTwoProng.GetX() - KFPV.GetX(); double dyPair2PV = KFGeoTwoProng.GetY() - KFPV.GetY(); double dzPair2PV = KFGeoTwoProng.GetZ() - KFPV.GetZ(); - if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || fgUsedVars[kVertexingLxyz] || fgUsedVars[kVertexingLxyErr] || fgUsedVars[kVertexingLzErr] || fgUsedVars[kVertexingTauxy] || fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr] || fgUsedVars[kCosPointingAngle]) { - values[kVertexingLxy] = std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); + if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || + fgUsedVars[kVertexingLxyz] || fgUsedVars[kVertexingLxyErr] || + fgUsedVars[kVertexingLzErr] || fgUsedVars[kVertexingTauxy] || + fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || + fgUsedVars[kVertexingLxyzOverErr] || fgUsedVars[kCosPointingAngle]) { + values[kVertexingLxy] = + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); values[kVertexingLz] = std::sqrt(dzPair2PV * dzPair2PV); - values[kVertexingLxyz] = std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + dzPair2PV * dzPair2PV); - values[kVertexingLxyErr] = (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * dxPair2PV * dxPair2PV + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * dyPair2PV * dyPair2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * dxPair2PV * dyPair2PV); - values[kVertexingLzErr] = (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * dzPair2PV * dzPair2PV; - values[kVertexingLxyzErr] = (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * dxPair2PV * dxPair2PV + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * dyPair2PV * dyPair2PV + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * dzPair2PV * dzPair2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * dxPair2PV * dyPair2PV + (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * dxPair2PV * dzPair2PV + (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * dyPair2PV * dzPair2PV); + values[kVertexingLxyz] = + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + + dzPair2PV * dzPair2PV); + values[kVertexingLxyErr] = + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV); + values[kVertexingLzErr] = + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV; + values[kVertexingLxyzErr] = + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV + + (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * + dxPair2PV * dzPair2PV + + (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * + dyPair2PV * dzPair2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } - values[kVertexingLxyErr] = values[kVertexingLxyErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] = + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } - values[kVertexingLzErr] = values[kVertexingLzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] = + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } - values[kVertexingLxyzErr] = values[kVertexingLxyzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; - values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime(KFPV, KFGeoTwoProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauz] = -1 * dzPair2PV * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyzErr] = + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime( + KFPV, KFGeoTwoProng.GetMass()) / + (o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = -1 * dzPair2PV * KFGeoTwoProng.GetMass() / + (TMath::Abs(KFGeoTwoProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(KFGeoTwoProng.GetPz()); values[kVertexingSV] = KFGeoTwoProng.GetZ(); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); - values[kCosPointingAngle] = (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + - std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + - std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / + (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauzErr] = values[kVertexingLzErr] * + KFGeoTwoProng.GetMass() / + (TMath::Abs(KFGeoTwoProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); + values[kCosPointingAngle] = + (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + + std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + + std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); } // As defined in Run 2 (projected onto momentum) - if (fgUsedVars[kVertexingLxyProjected] || fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { - values[kVertexingLzProjected] = (dzPair2PV * KFGeoTwoProng.GetPz()) / TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); - values[kVertexingLxyProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); - values[kVertexingLxyzProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()) + (dzPair2PV * KFGeoTwoProng.GetPz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoTwoProng.GetMass() / (KFGeoTwoProng.GetPt()); - values[kVertexingTauxyProjectedPoleJPsiMass] = values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / (KFGeoTwoProng.GetPt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoTwoProng.GetMass() / TMath::Abs(KFGeoTwoProng.GetPz()); + if (fgUsedVars[kVertexingLxyProjected] || + fgUsedVars[kVertexingLxyzProjected] || + fgUsedVars[kVertexingLzProjected]) { + values[kVertexingLzProjected] = + (dzPair2PV * KFGeoTwoProng.GetPz()) / + TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); + values[kVertexingLxyProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + + (dyPair2PV * KFGeoTwoProng.GetPy()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); + values[kVertexingLxyzProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + + (dyPair2PV * KFGeoTwoProng.GetPy()) + + (dzPair2PV * KFGeoTwoProng.GetPz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + + (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); + values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * + KFGeoTwoProng.GetMass() / + (KFGeoTwoProng.GetPt()); + values[kVertexingTauxyProjectedPoleJPsiMass] = + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (KFGeoTwoProng.GetPt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauzProjected] = values[kVertexingLzProjected] * + KFGeoTwoProng.GetMass() / + TMath::Abs(KFGeoTwoProng.GetPz()); } - if (fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr]) { - values[kVertexingLxyOverErr] = values[kVertexingLxy] / values[kVertexingLxyErr]; - values[kVertexingLzOverErr] = values[kVertexingLz] / values[kVertexingLzErr]; - values[kVertexingLxyzOverErr] = values[kVertexingLxyz] / values[kVertexingLxyzErr]; + if (fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || + fgUsedVars[kVertexingLxyzOverErr]) { + values[kVertexingLxyOverErr] = + values[kVertexingLxy] / values[kVertexingLxyErr]; + values[kVertexingLzOverErr] = + values[kVertexingLz] / values[kVertexingLzErr]; + values[kVertexingLxyzOverErr] = + values[kVertexingLxyz] / values[kVertexingLxyzErr]; } if (fgUsedVars[kKFChi2OverNDFGeo]) { - values[kKFChi2OverNDFGeo] = KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); + values[kKFChi2OverNDFGeo] = + KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); } if (fgUsedVars[kKFCosPA]) { values[kKFCosPA] = calculateCosPA(KFGeoTwoProng, KFPV); @@ -5224,22 +6399,33 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kKFDCAxyzBetweenProngs] = trk0KF.GetDistanceFromParticle(trk1KF); } if (fgUsedVars[kKFDCAxyBetweenProngs]) { - values[kKFDCAxyBetweenProngs] = trk0KF.GetDistanceFromParticleXY(trk1KF); + values[kKFDCAxyBetweenProngs] = + trk0KF.GetDistanceFromParticleXY(trk1KF); } if (fgUsedVars[kKFTracksDCAxyzMax]) { - values[kKFTracksDCAxyzMax] = values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] ? values[kKFTrack0DCAxyz] : values[kKFTrack1DCAxyz]; + values[kKFTracksDCAxyzMax] = + values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] + ? values[kKFTrack0DCAxyz] + : values[kKFTrack1DCAxyz]; } if (fgUsedVars[kKFTracksDCAxyMax]) { - values[kKFTracksDCAxyMax] = TMath::Abs(values[kKFTrack0DCAxy]) > TMath::Abs(values[kKFTrack1DCAxy]) ? values[kKFTrack0DCAxy] : values[kKFTrack1DCAxy]; + values[kKFTracksDCAxyMax] = TMath::Abs(values[kKFTrack0DCAxy]) > + TMath::Abs(values[kKFTrack1DCAxy]) + ? values[kKFTrack0DCAxy] + : values[kKFTrack1DCAxy]; } - if (fgUsedVars[kKFTrack0DeviationFromPV] || fgUsedVars[kKFTrack1DeviationFromPV]) { + if (fgUsedVars[kKFTrack0DeviationFromPV] || + fgUsedVars[kKFTrack1DeviationFromPV]) { values[kKFTrack0DeviationFromPV] = trk0KF.GetDeviationFromVertex(KFPV); values[kKFTrack1DeviationFromPV] = trk1KF.GetDeviationFromVertex(KFPV); } - if (fgUsedVars[kKFTrack0DeviationxyFromPV] || fgUsedVars[kKFTrack1DeviationxyFromPV]) { - values[kKFTrack0DeviationxyFromPV] = trk0KF.GetDeviationFromVertexXY(KFPV); - values[kKFTrack1DeviationxyFromPV] = trk1KF.GetDeviationFromVertexXY(KFPV); + if (fgUsedVars[kKFTrack0DeviationxyFromPV] || + fgUsedVars[kKFTrack1DeviationxyFromPV]) { + values[kKFTrack0DeviationxyFromPV] = + trk0KF.GetDeviationFromVertexXY(KFPV); + values[kKFTrack1DeviationxyFromPV] = + trk1KF.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFJpsiDCAxyz]) { values[kKFJpsiDCAxyz] = KFGeoTwoProng.GetDistanceFromVertex(KFPV); @@ -5247,14 +6433,18 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, if (fgUsedVars[kKFJpsiDCAxy]) { values[kKFJpsiDCAxy] = KFGeoTwoProng.GetDistanceFromVertexXY(KFPV); } - if (fgUsedVars[kKFPairDeviationFromPV] || fgUsedVars[kKFPairDeviationxyFromPV]) { - values[kKFPairDeviationFromPV] = KFGeoTwoProng.GetDeviationFromVertex(KFPV); - values[kKFPairDeviationxyFromPV] = KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); + if (fgUsedVars[kKFPairDeviationFromPV] || + fgUsedVars[kKFPairDeviationxyFromPV]) { + values[kKFPairDeviationFromPV] = + KFGeoTwoProng.GetDeviationFromVertex(KFPV); + values[kKFPairDeviationxyFromPV] = + KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFChi2OverNDFGeoTop] || fgUsedVars[kKFMassGeoTop]) { KFParticle KFGeoTopTwoProngBarrel = KFGeoTwoProng; KFGeoTopTwoProngBarrel.SetProductionVertex(KFPV); - values[kKFChi2OverNDFGeoTop] = KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); + values[kKFChi2OverNDFGeoTop] = + KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); float mass = 0., massErr = 0.; if (!KFGeoTopTwoProngBarrel.GetMass(mass, massErr)) { values[kKFMassGeoTop] = mass; @@ -5263,7 +6453,8 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, } } - float sv[3] = {KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY(), KFGeoTwoProng.GetZ()}; + float sv[3] = {KFGeoTwoProng.GetX(), KFGeoTwoProng.GetY(), + KFGeoTwoProng.GetZ()}; KFParticle trk0AtSV = trk0KF; KFParticle trk1AtSV = trk1KF; trk0AtSV.TransportToPoint(sv); @@ -5286,18 +6477,23 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kPhi2] = v2.Phi(); } -template -void VarManager::FillPairVertexingRecomputePV(C const& /*collision*/, T const& t1, T const& t2, const o2::dataformats::VertexBase& pvRefitted, float* values) -{ +template +void VarManager::FillPairVertexingRecomputePV( + C const & /*collision*/, T const &t1, T const &t2, + const o2::dataformats::VertexBase &pvRefitted, float *values) { // recompute decay lenght variables using updated primary vertex // check at compile time that the event and cov matrix have the cov matrix - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); - constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); - constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool trackHasCov = + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + constexpr bool muonHasCov = + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5322,43 +6518,58 @@ void VarManager::FillPairVertexingRecomputePV(C const& /*collision*/, T const& t if (!fgUsedKF) { // to be updated when seconday vertex is computed with KF if constexpr (eventHasVtxCov) { - if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { + if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) { // Get pca candidate from forward DCA fitter - // no need to re-compute secondary vertex (done already in FillPairVertexing) + // no need to re-compute secondary vertex (done already in + // FillPairVertexing) secondaryVertex = fgFitterTwoProngBarrel.getPCACandidate(); auto trackParVar0 = fgFitterTwoProngBarrel.getTrack(0); auto trackParVar1 = fgFitterTwoProngBarrel.getTrack(1); - v1 = {trackParVar0.getPt(), trackParVar0.getEta(), trackParVar0.getPhi(), m1}; - v2 = {trackParVar1.getPt(), trackParVar1.getEta(), trackParVar1.getPhi(), m2}; + v1 = {trackParVar0.getPt(), trackParVar0.getEta(), + trackParVar0.getPhi(), m1}; + v2 = {trackParVar1.getPt(), trackParVar1.getEta(), + trackParVar1.getPhi(), m2}; v12 = v1 + v2; } else if constexpr (pairType == kDecayToMuMu && muonHasCov) { // Get pca candidate from forward DCA fitter - // no need to re-compute secondary vertex (done already in FillPairVertexing) + // no need to re-compute secondary vertex (done already in + // FillPairVertexing) secondaryVertex = fgFitterTwoProngFwd.getPCACandidate(); auto trackParVar0 = fgFitterTwoProngFwd.getTrack(0); auto trackParVar1 = fgFitterTwoProngFwd.getTrack(1); - v1 = {trackParVar0.getPt(), trackParVar0.getEta(), trackParVar0.getPhi(), m1}; - v2 = {trackParVar1.getPt(), trackParVar1.getEta(), trackParVar1.getPhi(), m2}; + v1 = {trackParVar0.getPt(), trackParVar0.getEta(), + trackParVar0.getPhi(), m1}; + v2 = {trackParVar1.getPt(), trackParVar1.getEta(), + trackParVar1.getPhi(), m2}; v12 = v1 + v2; } - values[kVertexingLxyProjectedRecalculatePV] = (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); - values[kVertexingLxyProjectedRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); - values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] * o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] = + (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + + (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); + values[kVertexingLxyProjectedRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } } } template -void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& t2, T const& t3, VarManager::PairCandidateType tripletType, float* values) -{ +void VarManager::FillTripletVertexing(C const &collision, T const &t1, + T const &t2, T const &t3, + VarManager::PairCandidateType tripletType, + float *values) { // TODO: Vertexing error variables - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -5380,22 +6591,29 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& int procCode = 0; if (trackHasCov) { - std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; - std::array t1covs = {t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), + t1.signed1Pt()}; + std::array t1covs = { + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; - std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; - std::array t2covs = {t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), + t2.signed1Pt()}; + std::array t2covs = { + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; - std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; - std::array t3covs = {t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), + t3.signed1Pt()}; + std::array t3covs = { + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; - procCode = VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + procCode = + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -5431,10 +6649,14 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& if constexpr (eventHasVtxCov) { secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); - std::array covMatrixPCA = fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + std::array covMatrixPCA = + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), + collision.posZ()); + std::array vtxCov{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; auto covMatrixPV = primaryVertex.getCov(); @@ -5443,44 +6665,82 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& values[VarManager::kVertexingChi2PCA] = chi2PCA; } - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); - - values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); + double phi = std::atan2(secondaryVertex[1] - collision.posY(), + secondaryVertex[0] - collision.posX()); + double theta = + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); + + values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); + values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; values[kVertexingLxy] = std::sqrt(values[kVertexingLxy]); values[kVertexingLz] = std::sqrt(values[kVertexingLz]); values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); - - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kVertexingTauzErr] = values[kVertexingLzErr] * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); - // run 2 definitions: Decay length projected onto the momentum vector of the candidate - values[kVertexingLzProjected] = (secondaryVertex[2] - collision.posZ()) * v123.Pz(); - values[kVertexingLzProjected] = values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + (v123.Pz() * v123.Pz())); - - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); - values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + + values[kVertexingTauz] = + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kVertexingTauzErr] = + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kCosPointingAngle] = + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); + // run 2 definitions: Decay length projected onto the momentum vector of + // the candidate + values[kVertexingLzProjected] = + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + values[kVertexingLzProjected] = + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLxyProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyzProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); + + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingTauxyzProjected] = + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } else { KFParticle trk0KF; @@ -5530,58 +6790,126 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const& double dyTriplet2PV = KFGeoThreeProng.GetY() - KFPV.GetY(); double dzTriplet2PV = KFGeoThreeProng.GetZ() - KFPV.GetZ(); - values[kVertexingLxy] = std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); + values[kVertexingLxy] = + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); values[kVertexingLz] = std::sqrt(dzTriplet2PV * dzTriplet2PV); - values[kVertexingLxyz] = std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + dzTriplet2PV * dzTriplet2PV); - - values[kVertexingLxyErr] = (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * dxTriplet2PV * dxTriplet2PV + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * dyTriplet2PV * dyTriplet2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * dxTriplet2PV * dyTriplet2PV); - values[kVertexingLzErr] = (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * dzTriplet2PV * dzTriplet2PV; - values[kVertexingLxyzErr] = (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * dxTriplet2PV * dxTriplet2PV + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * dyTriplet2PV * dyTriplet2PV + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * dzTriplet2PV * dzTriplet2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * dxTriplet2PV * dyTriplet2PV + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * dxTriplet2PV * dzTriplet2PV + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * dyTriplet2PV * dzTriplet2PV); + values[kVertexingLxyz] = + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + + dzTriplet2PV * dzTriplet2PV); + + values[kVertexingLxyErr] = + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV); + values[kVertexingLzErr] = + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV; + values[kVertexingLxyzErr] = + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet2PV * dzTriplet2PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet2PV * dzTriplet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } - values[kVertexingLxyErr] = values[kVertexingLxyErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] = + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } - values[kVertexingLzErr] = values[kVertexingLzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] = + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } - values[kVertexingLxyzErr] = values[kVertexingLxyzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; - - values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime(KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauz] = -1 * dzTriplet2PV * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyzErr] = + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + + values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( + KFPV, KFGeoThreeProng.GetMass()) / + (o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = -1 * dzTriplet2PV * KFGeoThreeProng.GetMass() / + (TMath::Abs(KFGeoThreeProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(KFGeoThreeProng.GetPz()); values[kVertexingSV] = KFGeoThreeProng.GetZ(); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); - values[kCosPointingAngle] = (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + - std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + - std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); - - values[kVertexingLzProjected] = (dzTriplet2PV * KFGeoThreeProng.GetPz()) / TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); - values[kVertexingLxyProjected] = (dxTriplet2PV * KFGeoThreeProng.GetPx()) + (dyTriplet2PV * KFGeoThreeProng.GetPy()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); - values[kVertexingLxyzProjected] = (dxTriplet2PV * KFGeoThreeProng.GetPx()) + (dyTriplet2PV * KFGeoThreeProng.GetPy()) + (dzTriplet2PV * KFGeoThreeProng.GetPz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass() / (KFGeoThreeProng.GetPt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoThreeProng.GetMass() / TMath::Abs(KFGeoThreeProng.GetPz()); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauzErr] = values[kVertexingLzErr] * + KFGeoThreeProng.GetMass() / + (TMath::Abs(KFGeoThreeProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); + values[kCosPointingAngle] = + (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + + std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + + std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); + + values[kVertexingLzProjected] = + (dzTriplet2PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + values[kVertexingLxyProjected] = + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyzProjected] = + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()) + + (dzTriplet2PV * KFGeoThreeProng.GetPz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * + KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauzProjected] = values[kVertexingLzProjected] * + KFGeoThreeProng.GetMass() / + TMath::Abs(KFGeoThreeProng.GetPz()); } } } -template -void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track, float* values) -{ - - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); - constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); - constexpr bool muonHasCov = ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); +template +void VarManager::FillDileptonTrackVertexing(C const &collision, + T1 const &lepton1, + T1 const &lepton2, T1 const &track, + float *values) { + + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool trackHasCov = + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + constexpr bool muonHasCov = + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mtrack = o2::constants::physics::MassMuon; @@ -5601,7 +6929,9 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton procCode = VarManager::fgFitterThreeProngFwd.process(pars1, pars2, pars3); procCodeJpsi = VarManager::fgFitterTwoProngFwd.process(pars1, pars2); - } else if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi) && trackHasCov) { + } else if constexpr ((candidateType == kBtoJpsiEEK || + candidateType == kDstarToD0KPiPi) && + trackHasCov) { if constexpr (candidateType == kBtoJpsiEEK) { mlepton1 = o2::constants::physics::MassElectron; mlepton2 = o2::constants::physics::MassElectron; @@ -5611,32 +6941,53 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton mlepton2 = o2::constants::physics::MassPionCharged; mtrack = o2::constants::physics::MassPionCharged; } - std::array lepton1pars = {lepton1.y(), lepton1.z(), lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; - std::array lepton1covs = {lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), lepton1.cSnpY(), lepton1.cSnpZ(), - lepton1.cSnpSnp(), lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), lepton1.cTglTgl(), - lepton1.c1PtY(), lepton1.c1PtZ(), lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; - o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, lepton1covs}; - std::array lepton2pars = {lepton2.y(), lepton2.z(), lepton2.snp(), lepton2.tgl(), lepton2.signed1Pt()}; - std::array lepton2covs = {lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), lepton2.cSnpY(), lepton2.cSnpZ(), - lepton2.cSnpSnp(), lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), lepton2.cTglTgl(), - lepton2.c1PtY(), lepton2.c1PtZ(), lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; - o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, lepton2covs}; - std::array lepton3pars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; - std::array lepton3covs = {track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), track.cSnpZ(), - track.cSnpSnp(), track.cTglY(), track.cTglZ(), track.cTglSnp(), track.cTglTgl(), - track.c1PtY(), track.c1PtZ(), track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; - o2::track::TrackParCov pars3{track.x(), track.alpha(), lepton3pars, lepton3covs}; - procCode = VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + std::array lepton1pars = {lepton1.y(), lepton1.z(), + lepton1.snp(), lepton1.tgl(), + lepton1.signed1Pt()}; + std::array lepton1covs = { + lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), + lepton1.cSnpY(), lepton1.cSnpZ(), lepton1.cSnpSnp(), + lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), + lepton1.cTglTgl(), lepton1.c1PtY(), lepton1.c1PtZ(), + lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; + o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, + lepton1covs}; + std::array lepton2pars = {lepton2.y(), lepton2.z(), + lepton2.snp(), lepton2.tgl(), + lepton2.signed1Pt()}; + std::array lepton2covs = { + lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), + lepton2.cSnpY(), lepton2.cSnpZ(), lepton2.cSnpSnp(), + lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), + lepton2.cTglTgl(), lepton2.c1PtY(), lepton2.c1PtZ(), + lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; + o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, + lepton2covs}; + std::array lepton3pars = {track.y(), track.z(), track.snp(), + track.tgl(), track.signed1Pt()}; + std::array lepton3covs = { + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + o2::track::TrackParCov pars3{track.x(), track.alpha(), lepton3pars, + lepton3covs}; + procCode = + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); procCodeJpsi = VarManager::fgFitterTwoProngBarrel.process(pars1, pars2); } else { return; } - ROOT::Math::PtEtaPhiMVector v1(lepton1.pt(), lepton1.eta(), lepton1.phi(), mlepton1); - ROOT::Math::PtEtaPhiMVector v2(lepton2.pt(), lepton2.eta(), lepton2.phi(), mlepton2); - ROOT::Math::PtEtaPhiMVector v3(track.pt(), track.eta(), track.phi(), mtrack); + ROOT::Math::PtEtaPhiMVector v1(lepton1.pt(), lepton1.eta(), lepton1.phi(), + mlepton1); + ROOT::Math::PtEtaPhiMVector v2(lepton2.pt(), lepton2.eta(), lepton2.phi(), + mlepton2); + ROOT::Math::PtEtaPhiMVector v3(track.pt(), track.eta(), track.phi(), + mtrack); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; - ROOT::Math::PtEtaPhiMVector vdilepton(v12.pt(), v12.eta(), v12.phi(), v12.M()); + ROOT::Math::PtEtaPhiMVector vdilepton(v12.pt(), v12.eta(), v12.phi(), + v12.M()); ROOT::Math::PtEtaPhiMVector v123 = vdilepton + v3; values[VarManager::kPairMass] = v123.M(); values[VarManager::kMassDau] = mtrack; @@ -5680,12 +7031,17 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton o2::dataformats::DCA impactParameter0; o2::dataformats::DCA impactParameter1; - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), + collision.posZ()); + std::array vtxCov{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; auto covMatrixPV = primaryVertex.getCov(); - if constexpr ((candidateType == kBtoJpsiEEK || candidateType == kDstarToD0KPiPi) && trackHasCov) { + if constexpr ((candidateType == kBtoJpsiEEK || + candidateType == kDstarToD0KPiPi) && + trackHasCov) { secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); covMatrixPCA = fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); } else if constexpr (candidateType == kBcToThreeMuons && muonHasCov) { @@ -5698,52 +7054,99 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton values[VarManager::kVertexingChi2PCA] = chi2PCA; } - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); - if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || fgUsedVars[kVertexingLxyz]) { - - values[VarManager::kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[VarManager::kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); - values[VarManager::kVertexingLxyz] = values[VarManager::kVertexingLxy] + values[VarManager::kVertexingLz]; - values[VarManager::kVertexingLxy] = std::sqrt(values[VarManager::kVertexingLxy]); - values[VarManager::kVertexingLz] = std::sqrt(values[VarManager::kVertexingLz]); - values[VarManager::kVertexingLxyz] = std::sqrt(values[VarManager::kVertexingLxyz]); + double phi = std::atan2(secondaryVertex[1] - collision.posY(), + secondaryVertex[0] - collision.posX()); + double theta = + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); + if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || + fgUsedVars[kVertexingLxyz]) { + + values[VarManager::kVertexingLxy] = + (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); + values[VarManager::kVertexingLz] = + (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); + values[VarManager::kVertexingLxyz] = values[VarManager::kVertexingLxy] + + values[VarManager::kVertexingLz]; + values[VarManager::kVertexingLxy] = + std::sqrt(values[VarManager::kVertexingLxy]); + values[VarManager::kVertexingLz] = + std::sqrt(values[VarManager::kVertexingLz]); + values[VarManager::kVertexingLxyz] = + std::sqrt(values[VarManager::kVertexingLxyz]); } - if (fgUsedVars[kVertexingLxyzErr] || fgUsedVars[kVertexingLxyErr] || fgUsedVars[kVertexingLzErr]) { - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + if (fgUsedVars[kVertexingLxyzErr] || fgUsedVars[kVertexingLxyErr] || + fgUsedVars[kVertexingLzErr]) { + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); } - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v123.Pz()); values[kVertexingSV] = secondaryVertex[2]; - values[kVertexingTauzErr] = values[kVertexingLzErr] * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauzErr] = + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); if (fgUsedVars[kCosPointingAngle] && fgUsedVars[kVertexingLxyz]) { - values[VarManager::kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + values[VarManager::kCosPointingAngle] = + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); } - // run 2 definitions: Lxy projected onto the momentum vector of the candidate - if (fgUsedVars[kVertexingLxyProjected] || fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingTauxyProjected]) { - values[kVertexingLzProjected] = (secondaryVertex[2] - collision.posZ()) * v123.Pz(); - values[kVertexingLzProjected] = values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + (v123.Pz() * v123.Pz())); - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v123.M() / v123.Pt(); + // run 2 definitions: Lxy projected onto the momentum vector of the + // candidate + if (fgUsedVars[kVertexingLxyProjected] || + fgUsedVars[kVertexingLxyzProjected] || + fgUsedVars[kVertexingTauxyProjected]) { + values[kVertexingLzProjected] = + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + values[kVertexingLzProjected] = + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLxyProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyzProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * v123.M() / v123.Pt(); } } } else { @@ -5772,7 +7175,8 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton // Quantities between 3rd prong and candidate if (fgUsedVars[kKFDCAxyzBetweenProngs]) { - values[kKFDCAxyzBetweenProngs] = KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); + values[kKFDCAxyzBetweenProngs] = + KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); } KFGeoThreeProng.SetConstructMethod(2); @@ -5790,51 +7194,118 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton double dyTriplet3PV = KFGeoThreeProng.GetY() - KFPV.GetY(); double dzTriplet3PV = KFGeoThreeProng.GetZ() - KFPV.GetZ(); - if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || fgUsedVars[kVertexingLxyz] || fgUsedVars[kVertexingLxyErr] || fgUsedVars[kVertexingLzErr] || fgUsedVars[kVertexingTauxy] || fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr] || fgUsedVars[kCosPointingAngle]) { - values[kVertexingLxy] = std::sqrt(dxTriplet3PV * dxTriplet3PV + dyTriplet3PV * dyTriplet3PV); + if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || + fgUsedVars[kVertexingLxyz] || fgUsedVars[kVertexingLxyErr] || + fgUsedVars[kVertexingLzErr] || fgUsedVars[kVertexingTauxy] || + fgUsedVars[kVertexingLxyOverErr] || + fgUsedVars[kVertexingLzOverErr] || + fgUsedVars[kVertexingLxyzOverErr] || + fgUsedVars[kCosPointingAngle]) { + values[kVertexingLxy] = std::sqrt(dxTriplet3PV * dxTriplet3PV + + dyTriplet3PV * dyTriplet3PV); values[kVertexingLz] = std::sqrt(dzTriplet3PV * dzTriplet3PV); - values[kVertexingLxyz] = std::sqrt(dxTriplet3PV * dxTriplet3PV + dyTriplet3PV * dyTriplet3PV + dzTriplet3PV * dzTriplet3PV); - values[kVertexingLxyErr] = (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * dxTriplet3PV * dxTriplet3PV + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * dyTriplet3PV * dyTriplet3PV + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * dxTriplet3PV * dyTriplet3PV); - values[kVertexingLzErr] = (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * dzTriplet3PV * dzTriplet3PV; - values[kVertexingLxyzErr] = (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * dxTriplet3PV * dxTriplet3PV + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * dyTriplet3PV * dyTriplet3PV + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * dzTriplet3PV * dzTriplet3PV + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * dxTriplet3PV * dyTriplet3PV + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * dxTriplet3PV * dzTriplet3PV + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * dyTriplet3PV * dzTriplet3PV); + values[kVertexingLxyz] = std::sqrt(dxTriplet3PV * dxTriplet3PV + + dyTriplet3PV * dyTriplet3PV + + dzTriplet3PV * dzTriplet3PV); + values[kVertexingLxyErr] = + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV); + values[kVertexingLzErr] = + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV; + values[kVertexingLxyzErr] = + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet3PV * dzTriplet3PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet3PV * dzTriplet3PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } - values[kVertexingLxyErr] = values[kVertexingLxyErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] = + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } - values[kVertexingLzErr] = values[kVertexingLzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] = + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } - values[kVertexingLxyzErr] = values[kVertexingLxyzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] = + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / + values[kVertexingLxyz]; if (fgUsedVars[kVertexingTauxy]) { - values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime(KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( + KFPV, KFGeoThreeProng.GetMass()) / + (o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kVertexingTauxyErr]) { - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * + o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kCosPointingAngle]) { - values[VarManager::kCosPointingAngle] = (dxTriplet3PV * KFGeoThreeProng.GetPx() + - dyTriplet3PV * KFGeoThreeProng.GetPy() + - dzTriplet3PV * KFGeoThreeProng.GetPz()) / - (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); + values[VarManager::kCosPointingAngle] = + (dxTriplet3PV * KFGeoThreeProng.GetPx() + + dyTriplet3PV * KFGeoThreeProng.GetPy() + + dzTriplet3PV * KFGeoThreeProng.GetPz()) / + (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); } } // end calculate vertex variables // As defined in Run 2 (projected onto momentum) - if (fgUsedVars[kVertexingLxyProjected] || fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { - values[kVertexingLzProjected] = (dzTriplet3PV * KFGeoThreeProng.GetPz()) / TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); - values[kVertexingLxyProjected] = (dxTriplet3PV * KFGeoThreeProng.GetPx()) + (dyTriplet3PV * KFGeoThreeProng.GetPy()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); - values[kVertexingLxyzProjected] = (dxTriplet3PV * KFGeoThreeProng.GetPx()) + (dyTriplet3PV * KFGeoThreeProng.GetPy()) + (dzTriplet3PV * KFGeoThreeProng.GetPz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); - values[kVertexingTauxyProjected] = (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / (KFGeoThreeProng.GetPt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; - values[kVertexingTauzProjected] = (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / TMath::Abs(KFGeoThreeProng.GetPz()); + if (fgUsedVars[kVertexingLxyProjected] || + fgUsedVars[kVertexingLxyzProjected] || + fgUsedVars[kVertexingLzProjected]) { + values[kVertexingLzProjected] = + (dzTriplet3PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + values[kVertexingLxyProjected] = + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyzProjected] = + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()) + + (dzTriplet3PV * KFGeoThreeProng.GetPz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingTauxyProjected] = + (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / + (KFGeoThreeProng.GetPt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauzProjected] = + (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / + TMath::Abs(KFGeoThreeProng.GetPz()); } // end Run 2 quantities } // end eventHasVtxCov } // end (candidateType == kBtoJpsiEEK) && trackHasCov @@ -5842,14 +7313,21 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, T1 const& lepton } template -void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A const& compB11, A const& compC11, A const& compA21, A const& compB21, A const& compC21, A const& compA31, A const& compB31, A const& compC31, A const& compA41, A const& compB41, A const& compC41, A const& compA23, A const& compA42, float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, float S41A, float* values) -{ +void VarManager::FillQVectorFromGFW( + C const & /*collision*/, A const &compA11, A const &compB11, + A const &compC11, A const &compA21, A const &compB21, A const &compC21, + A const &compA31, A const &compB31, A const &compC31, A const &compA41, + A const &compB41, A const &compC41, A const &compA23, A const &compA42, + float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, + float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, + float S41A, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - // Fill Qn vectors from generic flow framework for different eta gap A, B, C (n=1,2,3,4) with proper normalisation - // Use normalized Q-vectors for SP and EP + // Fill Qn vectors from generic flow framework for different eta gap A, B, C + // (n=1,2,3,4) with proper normalisation Use normalized Q-vectors for SP and + // EP values[kQ1X0A] = compA11.real() / S11A; values[kQ1Y0A] = compA11.imag() / S11A; values[kQ1X0B] = compB11.real() / S11B; @@ -5874,10 +7352,14 @@ void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A values[kQ4Y0B] = compB41.imag() / S11B; values[kQ4X0C] = compC41.real() / S11C; values[kQ4Y0C] = compC41.imag() / S11C; - values[kQ42XA] = compA42.real(); // Only being used by cumulants, no need for normalization - values[kQ42YA] = compA42.imag(); // Only being used by cumulants, no need for normalization - values[kQ23XA] = compA23.real(); // Only being used by cumulants, no need for normalization - values[kQ23YA] = compA23.imag(); // Only being used by cumulants, no need for normalization + values[kQ42XA] = + compA42.real(); // Only being used by cumulants, no need for normalization + values[kQ42YA] = + compA42.imag(); // Only being used by cumulants, no need for normalization + values[kQ23XA] = + compA23.real(); // Only being used by cumulants, no need for normalization + values[kQ23YA] = + compA23.imag(); // Only being used by cumulants, no need for normalization values[kS11A] = S11A; values[kS12A] = S12A; values[kS13A] = S13A; @@ -5904,28 +7386,60 @@ void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A // Fill necessary quantities for cumulant calculations with weighted Q-vectors values[kM11REF] = S21A - S12A; - values[kM1111REF] = S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; + values[kM1111REF] = + S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; values[kCORR2REF] = (norm(compA21) - S12A) / values[kM11REF]; - values[kCORR4REF] = (std::pow(norm(compA21), 2) + norm(compA42) - 2. * (compA42 * conj(compA21) * conj(compA21)).real() + 8. * (compA23 * conj(compA21)).real() - 4. * S12A * norm(compA21) - 6. * S14A + 2. * S22A) / values[kM1111REF]; - values[kCORR2REF] = std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kCORR2REF]; - values[kM11REF] = std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kM11REF]; - values[kCORR4REF] = std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kCORR4REF]; - values[kM1111REF] = std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kM1111REF]; + values[kCORR4REF] = (std::pow(norm(compA21), 2) + norm(compA42) - + 2. * (compA42 * conj(compA21) * conj(compA21)).real() + + 8. * (compA23 * conj(compA21)).real() - + 4. * S12A * norm(compA21) - 6. * S14A + 2. * S22A) / + values[kM1111REF]; + values[kCORR2REF] = + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR2REF]; + values[kM11REF] = + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kM11REF]; + values[kCORR4REF] = + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR4REF]; + values[kM1111REF] = + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kM1111REF]; values[kCORR2CORR4REF] = values[kCORR2REF] * values[kCORR4REF]; values[kM11M1111REF] = values[kM11REF] * values[kM1111REF]; // For cumulants: A = Full TPC, B = Negative TPC, C = Positive TPC - std::complex QA(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]); + std::complex QA(values[kQ2X0A] * values[kS11A], + values[kQ2Y0A] * values[kS11A]); std::complex QB(values[kQ2X0B] * S11B, values[kQ2Y0B] * S11B); std::complex QC(values[kQ2X0C] * S11C, values[kQ2Y0C] * S11C); values[kM11REFetagap] = S11B * S11C; values[kCORR2REFetagap] = ((QB * conj(QC)).real()) / values[kM11REFetagap]; - values[kCORR2REFetagap] = std::isnan(values[kM11REFetagap]) || std::isinf(values[kM11REFetagap]) || std::isnan(values[kCORR2REFetagap]) || std::isinf(values[kCORR2REFetagap]) ? 0 : values[kCORR2REFetagap]; - values[kM11REFetagap] = std::isnan(values[kM11REFetagap]) || std::isinf(values[kM11REFetagap]) || std::isnan(values[kCORR2REFetagap]) || std::isinf(values[kCORR2REFetagap]) ? 0 : values[kM11REFetagap]; + values[kCORR2REFetagap] = std::isnan(values[kM11REFetagap]) || + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) + ? 0 + : values[kCORR2REFetagap]; + values[kM11REFetagap] = std::isnan(values[kM11REFetagap]) || + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) + ? 0 + : values[kM11REFetagap]; // TODO: provide different computations for R - // Compute the R factor using the 2 sub-events technique for second and third harmonic - // Compute event planes + // Compute the R factor using the 2 sub-events technique for second and third + // harmonic Compute event planes auto Psi2A = getEventPlane(2, values[kQ2X0A], values[kQ2Y0A]); auto Psi2B = getEventPlane(2, values[kQ2X0B], values[kQ2Y0B]); auto Psi3B = getEventPlane(3, values[kQ3X0B], values[kQ3Y0B]); @@ -5935,10 +7449,14 @@ void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A values[kPsi2B] = Psi2B; values[kPsi2C] = Psi2C; - values[kR2SP_AB] = (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); - values[kR2SP_AC] = (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); - values[kR2SP_BC] = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); - values[kR3SP] = (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + values[kR2SP_AB] = + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + values[kR2SP_AC] = + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + values[kR2SP_BC] = + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + values[kR3SP] = + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); values[kR2EP_AB] = TMath::Cos(2 * (Psi2A - Psi2B)); values[kR2EP_AC] = TMath::Cos(2 * (Psi2A - Psi2C)); @@ -5947,10 +7465,9 @@ void VarManager::FillQVectorFromGFW(C const& /*collision*/, A const& compA11, A } template -void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) -{ +void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float xQVecFT0a = collision.qvecFT0ARe(); // already normalised @@ -5979,8 +7496,12 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kMultA] = collision.nTrkTPCpos() + collision.nTrkTPCneg(); values[kMultAPOS] = collision.nTrkTPCpos(); values[kMultANEG] = collision.nTrkTPCneg(); - values[kMultB] = collision.sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity - values[kMultC] = collision.sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity + values[kMultB] = + collision + .sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity + values[kMultC] = + collision + .sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity // Q-vectors components correlation (A, B, C) values[kQ2YYAB] = values[kQ2Y0A] * values[kQ2Y0B]; @@ -5998,8 +7519,10 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); - float Psi2APOS = epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); - float Psi2ANEG = epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + float Psi2APOS = + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + float Psi2ANEG = + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -6009,9 +7532,12 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kPsi2B] = Psi2B; values[kPsi2C] = Psi2C; - values[kR2SP_AB] = (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); - values[kR2SP_AC] = (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); - values[kR2SP_BC] = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + values[kR2SP_AB] = + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + values[kR2SP_AC] = + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + values[kR2SP_BC] = + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR2SP_FT0CTPCPOS] = (xQVecFT0c * xQVecBPos + yQVecFT0c * yQVecBPos); values[kR2SP_FT0CTPCNEG] = (xQVecFT0c * xQVecBNeg + yQVecFT0c * yQVecBNeg); values[kR2SP_FT0ATPCPOS] = (xQVecFT0a * xQVecBPos + yQVecFT0a * yQVecBPos); @@ -6032,26 +7558,34 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kR2EP_AB] = TMath::Cos(2 * getDeltaPsiInRange(epTPCFull, epFT0a, 2)); values[kR2EP_AC] = TMath::Cos(2 * getDeltaPsiInRange(epTPCFull, epFT0c, 2)); values[kR2EP_BC] = TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epFT0c, 2)); - values[kR2EP_FT0CTPCPOS] = TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); - values[kR2EP_FT0CTPCNEG] = TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); - values[kR2EP_FT0ATPCPOS] = TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); - values[kR2EP_FT0ATPCNEG] = TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); - values[kR2EP_FT0MTPCPOS] = TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); - values[kR2EP_FT0MTPCNEG] = TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); - values[kR2EP_FV0ATPCPOS] = TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); - values[kR2EP_FV0ATPCNEG] = TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); + values[kR2EP_FT0CTPCPOS] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); + values[kR2EP_FT0CTPCNEG] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); + values[kR2EP_FT0ATPCPOS] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); + values[kR2EP_FT0ATPCNEG] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); + values[kR2EP_FT0MTPCPOS] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); + values[kR2EP_FT0MTPCNEG] = + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); + values[kR2EP_FV0ATPCPOS] = + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); + values[kR2EP_FV0ATPCNEG] = + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); } template -void VarManager::FillSpectatorPlane(C const& collision, float* values) -{ +void VarManager::FillSpectatorPlane(C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } auto zncEnergy = collision.energySectorZNC(); auto znaEnergy = collision.energySectorZNA(); - for (int i = 0; i < 4; i++) { // avoid std::numeric_limits::infinity() in the table + for (int i = 0; i < 4; + i++) { // avoid std::numeric_limits::infinity() in the table if (zncEnergy[i] < -1.e12) { zncEnergy[i] = -1.f; } @@ -6059,10 +7593,14 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) znaEnergy[i] = -1.f; } } - float znaCommon = collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); - float zncCommon = collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); - float zpaCommon = collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); - float zpcCommon = collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); + float znaCommon = + collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); + float zncCommon = + collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); + float zpaCommon = + collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); + float zpcCommon = + collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); // Store ZNA and ZNC energies for calibrations values[kEnergyCommonZNA] = znaCommon; @@ -6085,9 +7623,10 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) // constexpr float beamEne = 5.36 * 0.5; constexpr std::array x = {-1.75f, 1.75f, -1.75f, 1.75f}; constexpr std::array y = {-1.75f, -1.75f, 1.75f, 1.75f}; - // constexpr float intcalibZNA[4] = {0.7997028, 0.8453715, 0.7879917, 0.7695486}; - // constexpr float intcalibZNC[4] = {0.7631577, 0.8408003, 0.7083920, 0.7731769}; - // constexpr float alpha = 0.395; // WARNING: Run 2 coorection, to be checked + // constexpr float intcalibZNA[4] = {0.7997028, 0.8453715, 0.7879917, + // 0.7695486}; constexpr float intcalibZNC[4] = {0.7631577, 0.8408003, + // 0.7083920, 0.7731769}; constexpr float alpha = 0.395; // WARNING: Run 2 + // coorection, to be checked constexpr float alpha = 1.; float numXZNC = 0., numYZNC = 0., denZNC = 0.; float numXZNA = 0., numYZNA = 0., denZNA = 0.; @@ -6115,8 +7654,9 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) } if (denZNC != 0.) { - // float nSpecnC = zncCommon / beamEne; // WARNING: Run 2 correction, to be checked - // float cZNC = 1.89358 - 0.71262 / (nSpecnC + 0.71789); // WARNING: Run 2 correction, to be checked + // float nSpecnC = zncCommon / beamEne; // WARNING: Run 2 + // correction, to be checked float cZNC = 1.89358 - 0.71262 / (nSpecnC + + // 0.71789); // WARNING: Run 2 correction, to be checked float cZNC = 1.; values[kQ1ZNCX] = cZNC * numXZNC / denZNC; values[kQ1ZNCY] = cZNC * numYZNC / denZNC; @@ -6125,8 +7665,9 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) } if (denZNA != 0.) { - // float nSpecnA = znaCommon / beamEne; // WARNING: Run 2 correction, to be checked - // float cZNA = 1.89358 - 0.71262 / (nSpecnA + 0.71789); // WARNING: Run 2 correction, to be checked + // float nSpecnA = znaCommon / beamEne; // WARNING: Run 2 + // correction, to be checked float cZNA = 1.89358 - 0.71262 / (nSpecnA + + // 0.71789); // WARNING: Run 2 correction, to be checked float cZNA = 1.; values[kQ1ZNAX] = cZNA * numXZNA / denZNA; values[kQ1ZNAY] = cZNA * numYZNA / denZNA; @@ -6140,7 +7681,8 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) values[kQ1ZNACYX] = values[kQ1ZNAY] * values[kQ1ZNCX]; values[kQ1ZNACXY] = values[kQ1ZNAX] * values[kQ1ZNCY]; } else { - values[kQ1ZNACXX] = values[kQ1ZNACYY] = values[kQ1ZNACYX] = values[kQ1ZNACXY] = 999.; + values[kQ1ZNACXX] = values[kQ1ZNACYY] = values[kQ1ZNACYX] = + values[kQ1ZNACXY] = 999.; } if (znaCommon != 0 && sumZNA != 0 && zncCommon != 0 && sumZNC != 0) { @@ -6150,11 +7692,10 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) } template -void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -6181,16 +7722,25 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) values[kPt2] = t2.pt(); // TODO: provide different computations for vn - // Compute the scalar product UQ using Q-vector from A, for second and third harmonic - // Dilepton vn could be accessible after dividing this product with the R factor - values[kU2Q2] = values[kQ2X0A] * TMath::Cos(2 * v12.Phi()) + values[kQ2Y0A] * TMath::Sin(2 * v12.Phi()); - values[kU2Q2POS] = values[kQ2X0APOS] * TMath::Cos(2 * v12.Phi()) + values[kQ2Y0APOS] * TMath::Sin(2 * v12.Phi()); - values[kU2Q2NEG] = values[kQ2X0ANEG] * TMath::Cos(2 * v12.Phi()) + values[kQ2Y0ANEG] * TMath::Sin(2 * v12.Phi()); - values[kU3Q3] = values[kQ3X0A] * TMath::Cos(3 * v12.Phi()) + values[kQ3Y0A] * TMath::Sin(3 * v12.Phi()); - values[kR2SP_AB] = (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); - values[kR2SP_AC] = (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); - values[kR2SP_BC] = (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); - values[kR3SP] = (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + // Compute the scalar product UQ using Q-vector from A, for second and third + // harmonic Dilepton vn could be accessible after dividing this product with + // the R factor + values[kU2Q2] = values[kQ2X0A] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0A] * TMath::Sin(2 * v12.Phi()); + values[kU2Q2POS] = values[kQ2X0APOS] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0APOS] * TMath::Sin(2 * v12.Phi()); + values[kU2Q2NEG] = values[kQ2X0ANEG] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0ANEG] * TMath::Sin(2 * v12.Phi()); + values[kU3Q3] = values[kQ3X0A] * TMath::Cos(3 * v12.Phi()) + + values[kQ3Y0A] * TMath::Sin(3 * v12.Phi()); + values[kR2SP_AB] = + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + values[kR2SP_AC] = + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + values[kR2SP_BC] = + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + values[kR3SP] = + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); float Psi2A = getEventPlane(2, values[kQ2X0A], values[kQ2Y0A]); float Psi2APOS = getEventPlane(2, values[kQ2X0APOS], values[kQ2Y0APOS]); @@ -6216,7 +7766,8 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) values[kV2SP] = std::isnan(V2SP) || std::isinf(V2SP) ? 0. : V2SP; values[kWV2SP] = std::isnan(V2SP) || std::isinf(V2SP) ? 0. : 1.0; values[kV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : V2EP; - values[kV2EP_FT0C] = std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; + values[kV2EP_FT0C] = + std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; values[kWV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : 1.0; if (std::isnan(VarManager::fgValues[VarManager::kU2Q2])) { @@ -6241,7 +7792,9 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) } // global polarization parameters - bool useGlobalPolarizatiobSpinOne = fgUsedVars[kCosThetaStarTPC] || fgUsedVars[kCosThetaStarFT0A] || fgUsedVars[kCosThetaStarFT0C]; + bool useGlobalPolarizatiobSpinOne = fgUsedVars[kCosThetaStarTPC] || + fgUsedVars[kCosThetaStarFT0A] || + fgUsedVars[kCosThetaStarFT0C]; if (useGlobalPolarizatiobSpinOne) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::XYZVectorF v1_CM{(boostv12(v1).Vect()).Unit()}; @@ -6250,20 +7803,25 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) // using positive sign convention for the first track ROOT::Math::XYZVectorF v_CM = (t1.sign() > 0 ? v1_CM : v2_CM); - ROOT::Math::XYZVector zaxisTPC = ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); + ROOT::Math::XYZVector zaxisTPC = + ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); values[kCosThetaStarTPC] = v_CM.Dot(zaxisTPC); - ROOT::Math::XYZVector zaxisFT0A = ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); + ROOT::Math::XYZVector zaxisFT0A = + ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); values[kCosThetaStarFT0A] = v_CM.Dot(zaxisFT0A); - ROOT::Math::XYZVector zaxisFT0C = ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); + ROOT::Math::XYZVector zaxisFT0C = + ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); - values[kCos2ThetaStarFT0C] = values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCos2ThetaStarFT0C] = + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } // Coherent Jpsi A2 - bool useCoherentJpsiA2 = fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + bool useCoherentJpsiA2 = + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { // remove daughter from TPC Q-vector // TODO: remove based on track cut in qVectorTable @@ -6301,23 +7859,44 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) values[kPsi2A] = Psi2ATPC; // pT ~ 0.2, non-relativistic - // ROOT::Math::PtEtaPhiMVector v_daughter = t1.sign() > 0 ? v1 - v2 : v2 - v1; - // boost to Jpsi rest frame, then calculate the angle with respect to the event plane + // ROOT::Math::PtEtaPhiMVector v_daughter = t1.sign() > 0 ? v1 - v2 : v2 - + // v1; boost to Jpsi rest frame, then calculate the angle with respect to + // the event plane ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(t1.sign() > 0 ? v1 : v2); // reaction plane - float phi = v_daughter.Phi() > o2::constants::math::PI ? o2::constants::math::TwoPI - v_daughter.Phi() : v_daughter.Phi(); + float phi = v_daughter.Phi() > o2::constants::math::PI + ? o2::constants::math::TwoPI - v_daughter.Phi() + : v_daughter.Phi(); values[kDeltaPhi_TPC] = phi > Psi2ATPC ? phi - Psi2ATPC : Psi2ATPC - phi; - values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > o2::constants::math::PI ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] = + values[kDeltaPhi_TPC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; - values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > o2::constants::math::PI ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] = + values[kDeltaPhi_FT0A] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; - values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > o2::constants::math::PI ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] = + values[kDeltaPhi_FT0C] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] - values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > o2::constants::math::PIHalf ? o2::constants::math::PI - values[kDeltaPhi_TPC] : values[kDeltaPhi_TPC]; - values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf ? o2::constants::math::PI - values[kDeltaPhi_FT0A] : values[kDeltaPhi_FT0A]; - values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf ? o2::constants::math::PI - values[kDeltaPhi_FT0C] : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_TPC] = + values[kDeltaPhi_TPC] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; + values[kDeltaPhi_FT0A] = + values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0C] = + values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2ATPC)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -6325,91 +7904,412 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) float A2RP_TPC = values[kCos2DeltaPhi_TPC] / values[kR2EP]; float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; - values[kA2EP_TPC] = std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; - values[kA2EP_FT0A] = std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; - values[kA2EP_FT0C] = std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + values[kA2EP_TPC] = + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + values[kA2EP_FT0A] = + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + values[kA2EP_FT0C] = + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } // kV4, kC4POI, kC4REF etc. if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) { - std::complex Q21(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]); + std::complex Q21(values[kQ2X0A] * values[kS11A], + values[kQ2Y0A] * values[kS11A]); std::complex Q42(values[kQ42XA], values[kQ42YA]); std::complex Q23(values[kQ23XA], values[kQ23YA]); - std::complex P2(TMath::Cos(2 * v12.Phi()), TMath::Sin(2 * v12.Phi())); + std::complex P2(TMath::Cos(2 * v12.Phi()), + TMath::Sin(2 * v12.Phi())); values[kM01POI] = values[kMultDimuons] * values[kS11A]; - values[kM0111POI] = values[kMultDimuons] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]); + values[kM0111POI] = values[kMultDimuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POI] = (P2 * conj(Q21)).real() / values[kM01POI]; - values[kCORR4POI] = (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)).real() / values[kM0111POI]; - values[kM01POIoverMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI])) ? values[kM01POI] / values[kMultDimuons] : 0; - values[kM0111POIoverMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI])) ? values[kM0111POI] / values[kMultDimuons] : 0; - values[kM11REFoverMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultDimuons] : 0; - values[kM1111REFoverMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) ? values[kM1111REF] / values[kMultDimuons] : 0; - values[kCORR2REFbydimuons] = std::isnan(values[kM11REFoverMp]) || std::isinf(values[kM11REFoverMp]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REFoverMp]) || std::isinf(values[kM1111REFoverMp]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) ? 0 : values[kCORR2REF]; - values[kCORR4REFbydimuons] = std::isnan(values[kM1111REFoverMp]) || std::isinf(values[kM1111REFoverMp]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || std::isnan(values[kM11REFoverMp]) || std::isinf(values[kM11REFoverMp]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) ? 0 : values[kCORR4REF]; - values[kCORR2POI] = std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) ? 0 : values[kCORR2POI]; - values[kCORR4POI] = std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) ? 0 : values[kCORR4POI]; - values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REFoverMp]) || std::isinf(values[kM11M1111REFoverMp]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF]) ? 0 : values[kCORR2CORR4REF]; - values[kCORR2POICORR4POI] = std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) ? 0 : values[kCORR2POI] * values[kCORR4POI]; - values[kCORR2REFCORR4POI] = std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) ? 0 : values[kCORR2REF] * values[kCORR4POI]; - values[kCORR2REFCORR2POI] = std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) ? 0 : values[kCORR2REF] * values[kCORR2POI]; - values[kM11M1111REFoverMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || std::isinf(values[kM11M1111REF]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF])) ? values[kM11M1111REF] / values[kMultDimuons] : 0; - values[kM01M0111overMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI])) ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] : 0; - values[kM11M0111overMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI])) ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] : 0; - values[kM11M01overMp] = values[kMultDimuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI])) ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] : 0; - - std::complex P2plus(TMath::Cos(2 * v1.Phi()), TMath::Sin(2 * v1.Phi())); - std::complex P2minus(TMath::Cos(2 * v2.Phi()), TMath::Sin(2 * v2.Phi())); - values[kM11REFoverMpplus] = values[kMultAntiMuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultAntiMuons] : 0; - values[kM1111REFoverMpplus] = values[kMultAntiMuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM1111REF] / values[kMultAntiMuons] : 0; - values[kM11REFoverMpminus] = values[kMultMuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM11REF] / values[kMultMuons] : 0; - values[kM1111REFoverMpminus] = values[kMultMuons] > 0 && !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) ? values[kM1111REF] / values[kMultMuons] : 0; + values[kCORR4POI] = + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POI]; + values[kM01POIoverMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? values[kM01POI] / values[kMultDimuons] + : 0; + values[kM0111POIoverMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? values[kM0111POI] / values[kMultDimuons] + : 0; + values[kM11REFoverMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuons] + : 0; + values[kM1111REFoverMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuons] + : 0; + values[kCORR2REFbydimuons] = std::isnan(values[kM11REFoverMp]) || + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMp]) || + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; + values[kCORR4REFbydimuons] = std::isnan(values[kM1111REFoverMp]) || + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMp]) || + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; + values[kCORR2POI] = + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI]; + values[kCORR4POI] = + std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR4POI]; + values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REFoverMp]) || + std::isinf(values[kM11M1111REFoverMp]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : values[kCORR2CORR4REF]; + values[kCORR2POICORR4POI] = + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI] * values[kCORR4POI]; + values[kCORR2REFCORR4POI] = + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2REF] * values[kCORR4POI]; + values[kCORR2REFCORR2POI] = + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR2REF] * values[kCORR2POI]; + values[kM11M1111REFoverMp] = + values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF])) + ? values[kM11M1111REF] / values[kMultDimuons] + : 0; + values[kM01M0111overMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] + : 0; + values[kM11M0111overMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] + : 0; + values[kM11M01overMp] = + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] + : 0; + + std::complex P2plus(TMath::Cos(2 * v1.Phi()), + TMath::Sin(2 * v1.Phi())); + std::complex P2minus(TMath::Cos(2 * v2.Phi()), + TMath::Sin(2 * v2.Phi())); + values[kM11REFoverMpplus] = + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultAntiMuons] + : 0; + values[kM1111REFoverMpplus] = + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultAntiMuons] + : 0; + values[kM11REFoverMpminus] = + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultMuons] + : 0; + values[kM1111REFoverMpminus] = + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultMuons] + : 0; values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POI]; values[kCORR2POIminus] = (P2minus * conj(Q21)).real() / values[kM01POI]; values[kM01POIplus] = values[kMultAntiMuons] * values[kS11A]; - values[kM0111POIplus] = values[kMultAntiMuons] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]); + values[kM0111POIplus] = + values[kMultAntiMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POIplus]; - values[kCORR4POIplus] = (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)).real() / values[kM0111POIplus]; + values[kCORR4POIplus] = + (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)) + .real() / + values[kM0111POIplus]; values[kM01POIminus] = values[kMultMuons] * values[kS11A]; - values[kM0111POIminus] = values[kMultMuons] * (values[kS31A] - 3. * values[kS11A] * values[kS12A] + 2. * values[kS13A]); - values[kCORR2POIminus] = (P2minus * conj(Q21)).real() / values[kM01POIminus]; - values[kCORR4POIminus] = (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)).real() / values[kM0111POIminus]; - values[kM01POIplus] = std::isnan(values[kM01POIplus]) || std::isinf(values[kM01POIplus]) || std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) ? 0 : values[kM01POIplus]; - values[kM0111POIplus] = std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) ? 0 : values[kM0111POIplus]; - values[kCORR2POIplus] = std::isnan(values[kM01POIplus]) || std::isinf(values[kM01POIplus]) || std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) ? 0 : values[kCORR2POIplus]; - values[kCORR4POIplus] = std::isnan(values[kM01POIplus]) || std::isinf(values[kM01POIplus]) || std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) ? 0 : values[kCORR4POIplus]; - values[kM01POIminus] = std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) ? 0 : values[kM01POIminus]; - values[kM0111POIminus] = std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) ? 0 : values[kM0111POIminus]; - values[kCORR2POIminus] = std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) ? 0 : values[kCORR2POIminus]; - values[kCORR4POIminus] = std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) ? 0 : values[kCORR4POIminus]; - values[kM01POIoverMpminus] = values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) || std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus])) ? values[kM01POIminus] / values[kMultMuons] : 0; - values[kM0111POIoverMpminus] = values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || std::isinf(values[kM0111POIminus]) || std::isnan(values[kCORR4POIminus]) || std::isinf(values[kCORR4POIminus]) || std::isnan(values[kM01POIminus]) || std::isinf(values[kM01POIminus]) || std::isnan(values[kCORR2POIminus]) || std::isinf(values[kCORR2POIminus])) ? values[kM0111POIminus] / values[kMultMuons] : 0; - values[kM01POIoverMpplus] = values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) || std::isnan(values[kM01POIplus]) || std::isinf(values[kM01POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus])) ? values[kM01POIplus] / values[kMultAntiMuons] : 0; - values[kM0111POIoverMpplus] = values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || std::isinf(values[kM0111POIplus]) || std::isnan(values[kCORR4POIplus]) || std::isinf(values[kCORR4POIplus]) || std::isnan(values[kM01POIplus]) || std::isinf(values[kM01POIplus]) || std::isnan(values[kCORR2POIplus]) || std::isinf(values[kCORR2POIplus])) ? values[kM0111POIplus] / values[kMultAntiMuons] : 0; - } - - ROOT::Math::PtEtaPhiMVector v1_vp(v1.Pt(), v1.Eta(), v1.Phi() - Psi2B, v1.M()); - ROOT::Math::PtEtaPhiMVector v2_vp(v2.Pt(), v2.Eta(), v2.Phi() - Psi2B, v2.M()); + values[kM0111POIminus] = + values[kMultMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); + values[kCORR2POIminus] = + (P2minus * conj(Q21)).real() / values[kM01POIminus]; + values[kCORR4POIminus] = + (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)) + .real() / + values[kM0111POIminus]; + values[kM01POIplus] = std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kM01POIplus]; + values[kM0111POIplus] = std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kM0111POIplus]; + values[kCORR2POIplus] = std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR2POIplus]; + values[kCORR4POIplus] = std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR4POIplus]; + values[kM01POIminus] = std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kM01POIminus]; + values[kM0111POIminus] = std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kM0111POIminus]; + values[kCORR2POIminus] = std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR2POIminus]; + values[kCORR4POIminus] = std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR4POIminus]; + values[kM01POIoverMpminus] = + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM01POIminus] / values[kMultMuons] + : 0; + values[kM0111POIoverMpminus] = + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM0111POIminus] / values[kMultMuons] + : 0; + values[kM01POIoverMpplus] = + values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM01POIplus] / values[kMultAntiMuons] + : 0; + values[kM0111POIoverMpplus] = + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM0111POIplus] / values[kMultAntiMuons] + : 0; + } + + ROOT::Math::PtEtaPhiMVector v1_vp(v1.Pt(), v1.Eta(), v1.Phi() - Psi2B, + v1.M()); + ROOT::Math::PtEtaPhiMVector v2_vp(v2.Pt(), v2.Eta(), v2.Phi() - Psi2B, + v2.M()); ROOT::Math::PtEtaPhiMVector v12_vp = v1_vp + v2_vp; auto p12_vp = ROOT::Math::XYZVectorF(v12_vp.Px(), v12_vp.Py(), v12_vp.Pz()); auto p12_vp_projXZ = ROOT::Math::XYZVectorF(p12_vp.X(), 0, p12_vp.Z()); - auto vDimu = (t1.sign() > 0 ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()).Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz())) - : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()).Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()))); + auto vDimu = (t1.sign() > 0 + ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), + v2_vp.Pz())) + : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), + v1_vp.Pz()))); auto vRef = p12_vp.Cross(p12_vp_projXZ); values[kCosPhiVP] = vDimu.Dot(vRef) / (vRef.R() * vDimu.R()); values[kPhiVP] = std::acos(vDimu.Dot(vRef) / (vRef.R() * vDimu.R())); } -template -void VarManager::FillZDC(T const& zdc, float* values) -{ +template void VarManager::FillZDC(T const &zdc, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - values[kEnergyCommonZNA] = (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; - values[kEnergyCommonZNC] = (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; - values[kEnergyCommonZPA] = (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; - values[kEnergyCommonZPC] = (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; + values[kEnergyCommonZNA] = + (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; + values[kEnergyCommonZNC] = + (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; + values[kEnergyCommonZPA] = + (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; + values[kEnergyCommonZPC] = + (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; values[kTimeZNA] = zdc.timeZNA(); values[kTimeZNC] = zdc.timeZNC(); values[kTimeZPA] = zdc.timeZPA(); @@ -6417,15 +8317,19 @@ void VarManager::FillZDC(T const& zdc, float* values) } template -void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values, float hadronMass) -{ +void VarManager::FillDileptonHadron(T1 const &dilepton, T2 const &hadron, + float *values, float hadronMass) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi] || fgUsedVars[kPairMassDau] || fgUsedVars[kPairPtDau] || fgUsedVars[kDileptonHadronKstar]) { - ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass()); - ROOT::Math::PtEtaPhiMVector v2(hadron.pt(), hadron.eta(), hadron.phi(), hadronMass); + if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || + fgUsedVars[kPairPhi] || fgUsedVars[kPairMassDau] || + fgUsedVars[kPairPtDau] || fgUsedVars[kDileptonHadronKstar]) { + ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), + dilepton.phi(), dilepton.mass()); + ROOT::Math::PtEtaPhiMVector v2(hadron.pt(), hadron.eta(), hadron.phi(), + hadronMass); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; values[kPairMass] = v12.M(); values[kPairPt] = v12.Pt(); @@ -6438,12 +8342,14 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* // Calculate kstar of Dilepton and hadron pair ROOT::Math::PtEtaPhiMVector v12_Qvect = v1 - v2; double Pinv = v12.M(); - double Q1 = (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; + double Q1 = + (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; values[kDileptonHadronKstar] = std::sqrt(Q1 * Q1 - v12_Qvect.M2()) / 2.0; } if (fgUsedVars[kDeltaPhi]) { - values[kDeltaPhi] = RecoDecay::constrainAngle(dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); + values[kDeltaPhi] = RecoDecay::constrainAngle(dilepton.phi() - hadron.phi(), + -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaPhiSym]) { double delta = std::abs(dilepton.phi() - hadron.phi()); @@ -6457,20 +8363,29 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* } } -template -void VarManager::FillEnergyCorrelatorTriple(C const& collision, T1 const& lepton1, T2 const& lepton2, T3 const& hadron, float* values, float Translow, float Transhigh, bool applyFitMass, float sidebandMass, float weight) -{ +template +void VarManager::FillEnergyCorrelatorTriple(C const &collision, + T1 const &lepton1, + T2 const &lepton2, T3 const &hadron, + float *values, float Translow, + float Transhigh, bool applyFitMass, + float sidebandMass, float weight) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - if (fgUsedVars[kVertexingTauxyProjectedPoleJPsiMass] || fgUsedVars[kVertexingLxyProjected]) { - FillPairVertexing(collision, lepton1, lepton2, values); + if (fgUsedVars[kVertexingTauxyProjectedPoleJPsiMass] || + fgUsedVars[kVertexingLxyProjected]) { + FillPairVertexing(collision, lepton1, + lepton2, values); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; - ROOT::Math::PtEtaPhiMVector v_lepton1(lepton1.pt(), lepton1.eta(), lepton1.phi(), m1); - ROOT::Math::PtEtaPhiMVector v_lepton2(lepton2.pt(), lepton2.eta(), lepton2.phi(), m2); + ROOT::Math::PtEtaPhiMVector v_lepton1(lepton1.pt(), lepton1.eta(), + lepton1.phi(), m1); + ROOT::Math::PtEtaPhiMVector v_lepton2(lepton2.pt(), lepton2.eta(), + lepton2.phi(), m2); ROOT::Math::PtEtaPhiMVector dilepton = v_lepton1 + v_lepton2; float dileptonmass = o2::constants::physics::MassJPsi; @@ -6481,11 +8396,19 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, T1 const& lepton dileptonmass = sidebandMass; } - if (fgUsedVars[kPairMassDau] || fgUsedVars[kCosChi] || fgUsedVars[kECWeight] || fgUsedVars[kCosTheta] || fgUsedVars[kEWeight_before] || fgUsedVars[kPtDau] || fgUsedVars[kEtaDau] || fgUsedVars[kPhiDau] || fgUsedVars[kCosChi_randomPhi_trans] || fgUsedVars[kCosChi_randomPhi_toward] || fgUsedVars[kCosChi_randomPhi_away]) { + if (fgUsedVars[kPairMassDau] || fgUsedVars[kCosChi] || + fgUsedVars[kECWeight] || fgUsedVars[kCosTheta] || + fgUsedVars[kEWeight_before] || fgUsedVars[kPtDau] || + fgUsedVars[kEtaDau] || fgUsedVars[kPhiDau] || + fgUsedVars[kCosChi_randomPhi_trans] || + fgUsedVars[kCosChi_randomPhi_toward] || + fgUsedVars[kCosChi_randomPhi_away]) { values[kPairMassDau] = dilepton.mass(); values[kdileptonmass] = dileptonmass; - ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dileptonmass); - ROOT::Math::PtEtaPhiMVector v2(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged); + ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), + dilepton.phi(), dileptonmass); + ROOT::Math::PtEtaPhiMVector v2(hadron.pt(), hadron.eta(), hadron.phi(), + o2::constants::physics::MassPionCharged); values[kCosChi] = LorentzTransformJpsihadroncosChi("coschi", v1, v2); float E_boost = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2); values[kWeight] = weight; @@ -6495,10 +8418,13 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, T1 const& lepton values[kWeight_before] = v2.Pt() / v1.M() * weight; values[kPtDau] = v2.pt(); values[kEtaDau] = v2.eta(); - values[kPhiDau] = RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); + values[kPhiDau] = + RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); - float deltaphi = RecoDecay::constrainAngle(v1.phi() - v2.phi(), -o2::constants::math::PI); - values[kDeltaPhi] = RecoDecay::constrainAngle(v1.phi() - v2.phi(), -o2::constants::math::PIHalf); + float deltaphi = RecoDecay::constrainAngle(v1.phi() - v2.phi(), + -o2::constants::math::PI); + values[kDeltaPhi] = RecoDecay::constrainAngle(v1.phi() - v2.phi(), + -o2::constants::math::PIHalf); values[kDeltaEta] = v1.eta() - v2.eta(); values[kCosChi_randomPhi_trans] = -999.9f; values[kCosChi_randomPhi_toward] = -999.9f; @@ -6512,40 +8438,74 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, T1 const& lepton float randomPhi_toward = -o2::constants::math::PIHalf; float randomPhi_away = -o2::constants::math::PIHalf; - if ((deltaphi > -Transhigh * o2::constants::math::PI && deltaphi < -Translow * o2::constants::math::PI) || (deltaphi > Translow * o2::constants::math::PI && deltaphi < Transhigh * o2::constants::math::PI)) { - randomPhi_trans = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); - randomPhi_toward = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); - randomPhi_away = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); + if ((deltaphi > -Transhigh * o2::constants::math::PI && + deltaphi < -Translow * o2::constants::math::PI) || + (deltaphi > Translow * o2::constants::math::PI && + deltaphi < Transhigh * o2::constants::math::PI)) { + randomPhi_trans = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); + randomPhi_toward = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); + randomPhi_away = gRandom->Uniform(-o2::constants::math::PIHalf, + 3. * o2::constants::math::PIHalf); values[kPtDau_randomPhi_trans] = v2.pt(); - ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans(v2.pt(), v2.eta(), randomPhi_trans, o2::constants::physics::MassPionCharged); - values[kCosChi_randomPhi_trans] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); - values[kWeight_randomPhi_trans] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_trans) / v1.M() * weight; - - ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward(v2.pt(), v2.eta(), randomPhi_toward, o2::constants::physics::MassPionCharged); - values[kCosChi_randomPhi_toward] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); - values[kWeight_randomPhi_toward] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_toward) / v1.M() * weight; - ROOT::Math::PtEtaPhiMVector v2_randomPhi_away(v2.pt(), v2.eta(), randomPhi_away, o2::constants::physics::MassPionCharged); - values[kCosChi_randomPhi_away] = LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); - values[kWeight_randomPhi_away] = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2_randomPhi_away) / v1.M() * weight; - - values[kdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle(v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); - values[kdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle(v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); - values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle(v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans( + v2.pt(), v2.eta(), randomPhi_trans, + o2::constants::physics::MassPionCharged); + values[kCosChi_randomPhi_trans] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + values[kWeight_randomPhi_trans] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * weight; + + ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( + v2.pt(), v2.eta(), randomPhi_toward, + o2::constants::physics::MassPionCharged); + values[kCosChi_randomPhi_toward] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + values[kWeight_randomPhi_toward] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * weight; + ROOT::Math::PtEtaPhiMVector v2_randomPhi_away( + v2.pt(), v2.eta(), randomPhi_away, + o2::constants::physics::MassPionCharged); + values[kCosChi_randomPhi_away] = + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + values[kWeight_randomPhi_away] = + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * weight; + + values[kdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + values[kdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } } -template -void VarManager::FillEnergyCorrelatorsUnfoldingTriple(T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, T5 const& t1, float* values, bool applyFitMass, float Effweight_rec, float Accweight_gen, float Translow, float Transhigh) -{ - if (fgUsedVars[kMCCosChi_gen] || fgUsedVars[kMCWeight_gen] || fgUsedVars[kMCdeltaeta_gen] || fgUsedVars[kMCCosChi_rec] || fgUsedVars[kMCWeight_rec] || fgUsedVars[kMCdeltaeta_rec]) { +template +void VarManager::FillEnergyCorrelatorsUnfoldingTriple( + T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, + T5 const &t1, float *values, bool applyFitMass, float Effweight_rec, + float Accweight_gen, float Translow, float Transhigh) { + if (fgUsedVars[kMCCosChi_gen] || fgUsedVars[kMCWeight_gen] || + fgUsedVars[kMCdeltaeta_gen] || fgUsedVars[kMCCosChi_rec] || + fgUsedVars[kMCWeight_rec] || fgUsedVars[kMCdeltaeta_rec]) { // energy correlators float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; - ROOT::Math::PtEtaPhiMVector v_lepton1(lepton1.pt(), lepton1.eta(), lepton1.phi(), m1); - ROOT::Math::PtEtaPhiMVector v_lepton2(lepton2.pt(), lepton2.eta(), lepton2.phi(), m2); + ROOT::Math::PtEtaPhiMVector v_lepton1(lepton1.pt(), lepton1.eta(), + lepton1.phi(), m1); + ROOT::Math::PtEtaPhiMVector v_lepton2(lepton2.pt(), lepton2.eta(), + lepton2.phi(), m2); ROOT::Math::PtEtaPhiMVector dilepton = v_lepton1 + v_lepton2; float dileptonmass = o2::constants::physics::MassJPsi; @@ -6557,46 +8517,73 @@ void VarManager::FillEnergyCorrelatorsUnfoldingTriple(T1 const& lepton1, T2 cons if constexpr (pairType == kJpsiHadronMass) { MassHadron = TMath::Sqrt(t1.e() * t1.e() - t1.p() * t1.p()); } - ROOT::Math::PtEtaPhiMVector v1_gen(track.pt(), track.eta(), track.phi(), o2::constants::physics::MassJPsi); + ROOT::Math::PtEtaPhiMVector v1_gen(track.pt(), track.eta(), track.phi(), + o2::constants::physics::MassJPsi); ROOT::Math::PtEtaPhiMVector v2_gen(t1.pt(), t1.eta(), t1.phi(), MassHadron); - float E_boost_gen = LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); - float CosChi_gen = LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); + float E_boost_gen = + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); + float CosChi_gen = + LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); values[kMCCosChi_gen] = CosChi_gen; - values[kMCWeight_gen] = E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; + values[kMCWeight_gen] = + E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; values[kMCdeltaeta_gen] = track.eta() - t1.eta(); - ROOT::Math::PtEtaPhiMVector v1_rec(dilepton.pt(), dilepton.eta(), dilepton.phi(), dileptonmass); - ROOT::Math::PtEtaPhiMVector v2_rec(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged); - values[kMCCosChi_rec] = LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); - float E_boost_rec = LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); + ROOT::Math::PtEtaPhiMVector v1_rec(dilepton.pt(), dilepton.eta(), + dilepton.phi(), dileptonmass); + ROOT::Math::PtEtaPhiMVector v2_rec(hadron.pt(), hadron.eta(), hadron.phi(), + o2::constants::physics::MassPionCharged); + values[kMCCosChi_rec] = + LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); + float E_boost_rec = + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); values[kMCWeight_rec] = E_boost_rec / v1_rec.M() * Effweight_rec; values[kMCdeltaeta_rec] = dilepton.eta() - hadron.eta(); values[kMCCosChi_randomPhi_trans_rec] = -999.9f; values[kMCCosChi_randomPhi_trans_gen] = -999.9f; - float deltaphi_rec = RecoDecay::constrainAngle(dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); - - if ((deltaphi_rec > -Transhigh * o2::constants::math::PI && deltaphi_rec < -Translow * o2::constants::math::PI) || (deltaphi_rec > Translow * o2::constants::math::PI && deltaphi_rec < Transhigh * o2::constants::math::PI)) { - float randomPhi_trans_rec = gRandom->Uniform(-o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); - ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_rec(v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, o2::constants::physics::MassPionCharged); - values[kMCCosChi_randomPhi_trans_rec] = LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_randomPhi_trans_rec); - values[kMCWeight_randomPhi_trans_rec] = LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_randomPhi_trans_rec) / v1_rec.M() * Effweight_rec; - ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_gen(v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); - values[kMCCosChi_randomPhi_trans_gen] = LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_randomPhi_trans_gen); - values[kMCWeight_randomPhi_trans_gen] = LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_randomPhi_trans_gen) / v1_gen.M() * Accweight_gen; + float deltaphi_rec = RecoDecay::constrainAngle( + dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); + + if ((deltaphi_rec > -Transhigh * o2::constants::math::PI && + deltaphi_rec < -Translow * o2::constants::math::PI) || + (deltaphi_rec > Translow * o2::constants::math::PI && + deltaphi_rec < Transhigh * o2::constants::math::PI)) { + float randomPhi_trans_rec = gRandom->Uniform( + -o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); + ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_rec( + v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, + o2::constants::physics::MassPionCharged); + values[kMCCosChi_randomPhi_trans_rec] = LorentzTransformJpsihadroncosChi( + "coschi", v1_rec, v2_randomPhi_trans_rec); + values[kMCWeight_randomPhi_trans_rec] = + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, + v2_randomPhi_trans_rec) / + v1_rec.M() * Effweight_rec; + ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_gen( + v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); + values[kMCCosChi_randomPhi_trans_gen] = LorentzTransformJpsihadroncosChi( + "coschi", v1_gen, v2_randomPhi_trans_gen); + values[kMCWeight_randomPhi_trans_gen] = + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, + v2_randomPhi_trans_gen) / + v1_gen.M() * Accweight_gen; } } } template -void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* values) -{ +void VarManager::FillDileptonPhoton(T1 const &dilepton, T2 const &photon, + float *values) { if (!values) { - values = static_cast(fgValues); - } - if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi]) { - ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass()); - ROOT::Math::PtEtaPhiMVector v2(photon.pt(), photon.eta(), photon.phi(), photon.mGamma()); + values = static_cast(fgValues); + } + if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || + fgUsedVars[kPairPhi]) { + ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), + dilepton.phi(), dilepton.mass()); + ROOT::Math::PtEtaPhiMVector v2(photon.pt(), photon.eta(), photon.phi(), + photon.mGamma()); ROOT::Math::PtEtaPhiMVector v12 = v1 + v2; values[kPairMass] = v12.M(); values[kPairPt] = v12.Pt(); @@ -6616,13 +8603,13 @@ void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* } template -void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) -{ +void VarManager::FillHadron(T const &hadron, float *values, float hadronMass) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } - ROOT::Math::PtEtaPhiMVector vhadron(hadron.pt(), hadron.eta(), hadron.phi(), hadronMass); + ROOT::Math::PtEtaPhiMVector vhadron(hadron.pt(), hadron.eta(), hadron.phi(), + hadronMass); values[kMass] = hadronMass; values[kPt] = hadron.pt(); values[kEta] = hadron.eta(); @@ -6631,10 +8618,11 @@ void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) } template -void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper, T& bdtScoreCharmHad, float* values) -{ +void VarManager::FillSingleDileptonCharmHadron(Cand const &candidate, + H hfHelper, T &bdtScoreCharmHad, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (partType == kJPsi) { @@ -6666,18 +8654,22 @@ void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper } } -template -void VarManager::FillDileptonCharmHadron(DQ const& dilepton, HF const& charmHadron, H hfHelper, T& bdtScoreCharmHad, float* values) -{ - FillSingleDileptonCharmHadron(dilepton, hfHelper, bdtScoreCharmHad, values); - FillSingleDileptonCharmHadron(charmHadron, hfHelper, bdtScoreCharmHad, values); +template +void VarManager::FillDileptonCharmHadron(DQ const &dilepton, + HF const &charmHadron, H hfHelper, + T &bdtScoreCharmHad, float *values) { + FillSingleDileptonCharmHadron(dilepton, hfHelper, bdtScoreCharmHad, + values); + FillSingleDileptonCharmHadron(charmHadron, hfHelper, + bdtScoreCharmHad, values); } template -void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, T3 const& hadron2, float* values) -{ +void VarManager::FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, + T3 const &hadron2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -6694,9 +8686,12 @@ void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, T hadronMass2 = o2::constants::physics::MassElectron; } - ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass()); - ROOT::Math::PtEtaPhiMVector v2(hadron1.pt(), hadron1.eta(), hadron1.phi(), hadronMass1); - ROOT::Math::PtEtaPhiMVector v3(hadron2.pt(), hadron2.eta(), hadron2.phi(), hadronMass2); + ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), + dilepton.mass()); + ROOT::Math::PtEtaPhiMVector v2(hadron1.pt(), hadron1.eta(), hadron1.phi(), + hadronMass1); + ROOT::Math::PtEtaPhiMVector v3(hadron2.pt(), hadron2.eta(), hadron2.phi(), + hadronMass2); ROOT::Math::PtEtaPhiMVector v123 = v1 + v2 + v3; values[kQuadMass] = v123.M(); values[kQuadDefaultDileptonMass] = v123.M() - v1.M() + defaultDileptonMass; @@ -6712,34 +8707,44 @@ void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, T values[kTrackDCAzProng2] = hadron2.dcaZ(); values[kPt2] = hadron2.pt(); - if (fgUsedVars[kCosthetaDileptonDitrack] || fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kDitrackPt] || fgUsedVars[kDitrackMass] || fgUsedVars[kQ] || fgUsedVars[kDeltaR1] || fgUsedVars[kDeltaR2] || fgUsedVars[kRap]) { + if (fgUsedVars[kCosthetaDileptonDitrack] || fgUsedVars[kPairMass] || + fgUsedVars[kPairPt] || fgUsedVars[kDitrackPt] || + fgUsedVars[kDitrackMass] || fgUsedVars[kQ] || fgUsedVars[kDeltaR1] || + fgUsedVars[kDeltaR2] || fgUsedVars[kRap]) { ROOT::Math::PtEtaPhiMVector v23 = v2 + v3; values[kPairMass] = v1.M(); values[kPairPt] = v1.Pt(); values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); - values[kCosthetaDileptonDitrack] = (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / (v1.P() * v123.P()); + values[kCosthetaDileptonDitrack] = + (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / + (v1.P() * v123.P()); values[kQ] = v123.M() - defaultDileptonMass - v23.M(); values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); - values[kDeltaR] = std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); + values[kDeltaR] = std::sqrt(std::pow(values[kDeltaR1], 2) + + std::pow(values[kDeltaR2], 2)); values[kRap] = v123.Rapidity(); } } //__________________________________________________________________ -template -void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track1, T1 const& track2, float* values) -{ - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); - constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); +template +void VarManager::FillDileptonTrackTrackVertexing( + C const &collision, T1 const &lepton1, T1 const &lepton2, T1 const &track1, + T1 const &track2, float *values) { + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool trackHasCov = + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!eventHasVtxCov || !trackHasCov) { return; } if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mlepton1 = o2::constants::physics::MassElectron; @@ -6752,10 +8757,14 @@ void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& l mMother = o2::constants::physics::MassX3872; } - ROOT::Math::PtEtaPhiMVector v1(lepton1.pt(), lepton1.eta(), lepton1.phi(), mlepton1); - ROOT::Math::PtEtaPhiMVector v2(lepton2.pt(), lepton2.eta(), lepton2.phi(), mlepton2); - ROOT::Math::PtEtaPhiMVector v3(track1.pt(), track1.eta(), track1.phi(), mtrack1); - ROOT::Math::PtEtaPhiMVector v4(track2.pt(), track2.eta(), track2.phi(), mtrack2); + ROOT::Math::PtEtaPhiMVector v1(lepton1.pt(), lepton1.eta(), lepton1.phi(), + mlepton1); + ROOT::Math::PtEtaPhiMVector v2(lepton2.pt(), lepton2.eta(), lepton2.phi(), + mlepton2); + ROOT::Math::PtEtaPhiMVector v3(track1.pt(), track1.eta(), track1.phi(), + mtrack1); + ROOT::Math::PtEtaPhiMVector v4(track2.pt(), track2.eta(), track2.phi(), + mtrack2); ROOT::Math::PtEtaPhiMVector v1234 = v1 + v2 + v3 + v4; int procCodeDilepton = 0; @@ -6768,32 +8777,60 @@ void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& l o2::track::TrackParCov pars2 = getTrackParCov(lepton2); o2::track::TrackParCov pars3 = getTrackParCov(track1); o2::track::TrackParCov pars4 = getTrackParCov(track2); - // std::array lepton1pars = {lepton1.y(), lepton1.z(), lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; - // std::array lepton1covs = {lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), lepton1.cSnpY(), lepton1.cSnpZ(), - // lepton1.cSnpSnp(), lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), lepton1.cTglTgl(), - // lepton1.c1PtY(), lepton1.c1PtZ(), lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; - // o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, lepton1covs}; - // std::array lepton2pars = {lepton2.y(), lepton2.z(), lepton2.snp(), lepton2.tgl(), lepton2.signed1Pt()}; - // std::array lepton2covs = {lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), lepton2.cSnpY(), lepton2.cSnpZ(), - // lepton2.cSnpSnp(), lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), lepton2.cTglTgl(), - // lepton2.c1PtY(), lepton2.c1PtZ(), lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; - // o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, lepton2covs}; - // std::array track1pars = {track1.y(), track1.z(), track1.snp(), track1.tgl(), track1.signed1Pt()}; - // std::array track1covs = {track1.cYY(), track1.cZY(), track1.cZZ(), track1.cSnpY(), track1.cSnpZ(), - // track1.cSnpSnp(), track1.cTglY(), track1.cTglZ(), track1.cTglSnp(), track1.cTglTgl(), - // track1.c1PtY(), track1.c1PtZ(), track1.c1PtSnp(), track1.c1PtTgl(), track1.c1Pt21Pt2()}; - // o2::track::TrackParCov pars3{track1.x(), track1.alpha(), track1pars, track1covs}; - // std::array track2pars = {track2.y(), track2.z(), track2.snp(), track2.tgl(), track2.signed1Pt()}; - // std::array track2covs = {track2.cYY(), track2.cZY(), track2.cZZ(), track2.cSnpY(), track2.cSnpZ(), - // track2.cSnpSnp(), track2.cTglY(), track2.cTglZ(), track2.cTglSnp(), track2.cTglTgl(), - // track2.c1PtY(), track2.c1PtZ(), track2.c1PtSnp(), track2.c1PtTgl(), track2.c1Pt21Pt2()}; - // o2::track::TrackParCov pars4{track2.x(), track2.alpha(), track2pars, track2covs}; + // std::array lepton1pars = {lepton1.y(), lepton1.z(), + // lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; std::array + // lepton1covs = {lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), + // lepton1.cSnpY(), lepton1.cSnpZ(), + // lepton1.cSnpSnp(), lepton1.cTglY(), + // lepton1.cTglZ(), lepton1.cTglSnp(), + // lepton1.cTglTgl(), lepton1.c1PtY(), + // lepton1.c1PtZ(), lepton1.c1PtSnp(), + // lepton1.c1PtTgl(), + // lepton1.c1Pt21Pt2()}; + // o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, + // lepton1covs}; std::array lepton2pars = {lepton2.y(), + // lepton2.z(), lepton2.snp(), lepton2.tgl(), lepton2.signed1Pt()}; + // std::array lepton2covs = {lepton2.cYY(), lepton2.cZY(), + // lepton2.cZZ(), lepton2.cSnpY(), lepton2.cSnpZ(), + // lepton2.cSnpSnp(), lepton2.cTglY(), + // lepton2.cTglZ(), lepton2.cTglSnp(), + // lepton2.cTglTgl(), lepton2.c1PtY(), + // lepton2.c1PtZ(), lepton2.c1PtSnp(), + // lepton2.c1PtTgl(), + // lepton2.c1Pt21Pt2()}; + // o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, + // lepton2covs}; std::array track1pars = {track1.y(), track1.z(), + // track1.snp(), track1.tgl(), track1.signed1Pt()}; std::array + // track1covs = {track1.cYY(), track1.cZY(), track1.cZZ(), track1.cSnpY(), + // track1.cSnpZ(), + // track1.cSnpSnp(), track1.cTglY(), + // track1.cTglZ(), track1.cTglSnp(), + // track1.cTglTgl(), track1.c1PtY(), + // track1.c1PtZ(), track1.c1PtSnp(), + // track1.c1PtTgl(), + // track1.c1Pt21Pt2()}; + // o2::track::TrackParCov pars3{track1.x(), track1.alpha(), track1pars, + // track1covs}; std::array track2pars = {track2.y(), track2.z(), + // track2.snp(), track2.tgl(), track2.signed1Pt()}; std::array + // track2covs = {track2.cYY(), track2.cZY(), track2.cZZ(), track2.cSnpY(), + // track2.cSnpZ(), + // track2.cSnpSnp(), track2.cTglY(), + // track2.cTglZ(), track2.cTglSnp(), + // track2.cTglTgl(), track2.c1PtY(), + // track2.c1PtZ(), track2.c1PtSnp(), + // track2.c1PtTgl(), + // track2.c1Pt21Pt2()}; + // o2::track::TrackParCov pars4{track2.x(), track2.alpha(), track2pars, + // track2covs}; procCodeDilepton = VarManager::fgFitterTwoProngBarrel.process(pars1, pars2); // create dilepton track - // o2::track::TrackParCov parsDilepton = VarManager::fgFitterTwoProngBarrel.createParentTrackParCov(0); - // procCodeDileptonTrackTrack = VarManager::fgFitterThreeProngBarrel.process(parsDilepton, pars3, pars4); - procCodeDileptonTrackTrack = VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); + // o2::track::TrackParCov parsDilepton = + // VarManager::fgFitterTwoProngBarrel.createParentTrackParCov(0); + // procCodeDileptonTrackTrack = + // VarManager::fgFitterThreeProngBarrel.process(parsDilepton, pars3, pars4); + procCodeDileptonTrackTrack = + VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); values[kVertexingProcCode] = procCodeDilepton; values[kVertexingQuadProcCode] = procCodeDileptonTrackTrack; @@ -6824,50 +8861,91 @@ void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& l secondaryVertex = fgFitterFourProngBarrel.getPCACandidate(); covMatrixPCA = fgFitterFourProngBarrel.calcPCACovMatrixFlat(); - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), + collision.posZ()); + std::array vtxCov{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; auto covMatrixPV = primaryVertex.getCov(); - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); + double phi = std::atan2(secondaryVertex[1] - collision.posY(), + secondaryVertex[0] - collision.posX()); + double theta = + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingChi2PCA] = fgFitterFourProngBarrel.getChi2AtPCACandidate(); - values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); + values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); + values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; values[kVertexingLxy] = std::sqrt(values[kVertexingLxy]); values[kVertexingLz] = std::sqrt(values[kVertexingLz]); values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); - - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * mMother / (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * mMother / (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kVertexingTauzErr] = values[kVertexingLzErr] * mMother / (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * mMother / (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v1234.Px() + - (secondaryVertex[1] - collision.posY()) * v1234.Py() + - (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); - // // run 2 definitions: Decay length projected onto the momentum vector of the candidate - values[kVertexingLzProjected] = (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); - values[kVertexingLzProjected] = values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + ((secondaryVertex[1] - collision.posY()) * v1234.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + (v1234.Pz() * v1234.Pz())); - - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * mMother / (v1234.Pt()); - values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * mMother / (v1234.P()); + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + + values[kVertexingTauz] = + (collision.posZ() - secondaryVertex[2]) * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = + values[kVertexingLxy] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kVertexingTauzErr] = + values[kVertexingLzErr] * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kCosPointingAngle] = + ((secondaryVertex[0] - collision.posX()) * v1234.Px() + + (secondaryVertex[1] - collision.posY()) * v1234.Py() + + (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); + // // run 2 definitions: Decay length projected onto the momentum vector of + // the candidate + values[kVertexingLzProjected] = + (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); + values[kVertexingLzProjected] = + values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); + values[kVertexingLxyProjected] = + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); + values[kVertexingLxyzProjected] = + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + + (v1234.Pz() * v1234.Pz())); + + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * mMother / (v1234.Pt()); + values[kVertexingTauxyzProjected] = + values[kVertexingLxyzProjected] * mMother / (v1234.P()); } else { KFParticle lepton1KF; // lepton1 KFParticle lepton2KF; // lepton2 @@ -6950,58 +9028,120 @@ void VarManager::FillDileptonTrackTrackVertexing(C const& collision, T1 const& l double dyQuadlet2PV = KFGeoFourProng.GetY() - KFPV.GetY(); double dzQuadlet2PV = KFGeoFourProng.GetZ() - KFPV.GetZ(); - values[kVertexingLxy] = std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); + values[kVertexingLxy] = + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); values[kVertexingLz] = std::sqrt(dzQuadlet2PV * dzQuadlet2PV); - values[kVertexingLxyz] = std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + dzQuadlet2PV * dzQuadlet2PV); - - values[kVertexingLxyErr] = (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * dxQuadlet2PV * dxQuadlet2PV + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * dyQuadlet2PV * dyQuadlet2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * dxQuadlet2PV * dyQuadlet2PV); - values[kVertexingLzErr] = (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * dzQuadlet2PV * dzQuadlet2PV; - values[kVertexingLxyzErr] = (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * dxQuadlet2PV * dxQuadlet2PV + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * dyQuadlet2PV * dyQuadlet2PV + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * dzQuadlet2PV * dzQuadlet2PV + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * dxQuadlet2PV * dyQuadlet2PV + (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * dxQuadlet2PV * dzQuadlet2PV + (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * dyQuadlet2PV * dzQuadlet2PV); + values[kVertexingLxyz] = + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + + dzQuadlet2PV * dzQuadlet2PV); + + values[kVertexingLxyErr] = + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV); + values[kVertexingLzErr] = + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV; + values[kVertexingLxyzErr] = + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * + dxQuadlet2PV * dzQuadlet2PV + + (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * + dyQuadlet2PV * dzQuadlet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } - values[kVertexingLxyErr] = values[kVertexingLxyErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] = + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } - values[kVertexingLzErr] = values[kVertexingLzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] = + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } - values[kVertexingLxyzErr] = values[kVertexingLxyzErr] < 0. ? 1.e8f : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; - - values[kVertexingTauxy] = KFGeoFourProng.GetPseudoProperDecayTime(KFPV, KFGeoFourProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauz] = -1 * dzQuadlet2PV * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyzErr] = + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + + values[kVertexingTauxy] = KFGeoFourProng.GetPseudoProperDecayTime( + KFPV, KFGeoFourProng.GetMass()) / + (o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = -1 * dzQuadlet2PV * KFGeoFourProng.GetMass() / + (TMath::Abs(KFGeoFourProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(KFGeoFourProng.GetPz()); values[kVertexingSV] = KFGeoFourProng.GetZ(); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / + (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauzErr] = values[kVertexingLzErr] * + KFGeoFourProng.GetMass() / + (TMath::Abs(KFGeoFourProng.GetPz()) * + o2::constants::physics::LightSpeedCm2NS); values[kVertexingChi2PCA] = KFGeoFourProng.GetChi2(); - values[kCosPointingAngle] = (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + - std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + - std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); - // // run 2 definitions: Decay length projected onto the momentum vector of the candidate - values[kVertexingLzProjected] = (dzQuadlet2PV * KFGeoFourProng.GetPz()) / TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); - values[kVertexingLxyProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); - values[kVertexingLxyzProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()) + (dzQuadlet2PV * KFGeoFourProng.GetPz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoFourProng.GetMass() / (KFGeoFourProng.GetPt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoFourProng.GetMass() / TMath::Abs(KFGeoFourProng.GetPz()); - values[kKFChi2OverNDFGeo] = KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); + values[kCosPointingAngle] = + (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + + std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + + std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); + // // run 2 definitions: Decay length projected onto the momentum vector of + // the candidate + values[kVertexingLzProjected] = + (dzQuadlet2PV * KFGeoFourProng.GetPz()) / + TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); + values[kVertexingLxyProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + + (dyQuadlet2PV * KFGeoFourProng.GetPy()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); + values[kVertexingLxyzProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + + (dyQuadlet2PV * KFGeoFourProng.GetPy()) + + (dzQuadlet2PV * KFGeoFourProng.GetPz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + + (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); + values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * + KFGeoFourProng.GetMass() / + (KFGeoFourProng.GetPt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauzProjected] = values[kVertexingLzProjected] * + KFGeoFourProng.GetMass() / + TMath::Abs(KFGeoFourProng.GetPz()); + values[kKFChi2OverNDFGeo] = + KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); } } //__________________________________________________________________ template -void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, float* values) -{ +void VarManager::FillQuadMC(T1 const &dilepton, T2 const &track1, + T2 const &track2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -7013,9 +9153,12 @@ void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& trac hadronMass2 = o2::constants::physics::MassPionCharged; } - ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), defaultDileptonMass); - ROOT::Math::PtEtaPhiMVector v2(track1.pt(), track1.eta(), track1.phi(), hadronMass1); - ROOT::Math::PtEtaPhiMVector v3(track2.pt(), track2.eta(), track2.phi(), hadronMass2); + ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), + defaultDileptonMass); + ROOT::Math::PtEtaPhiMVector v2(track1.pt(), track1.eta(), track1.phi(), + hadronMass1); + ROOT::Math::PtEtaPhiMVector v3(track2.pt(), track2.eta(), track2.phi(), + hadronMass2); ROOT::Math::PtEtaPhiMVector v123 = v1 + v2 + v3; ROOT::Math::PtEtaPhiMVector v23 = v2 + v3; values[kQuadMass] = v123.M(); @@ -7026,20 +9169,20 @@ void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& trac values[kQ] = v123.M() - defaultDileptonMass - v23.M(); values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); - values[kDeltaR] = std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); + values[kDeltaR] = + std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); } //__________________________________________________________________ template -float VarManager::calculatePhiV(T1 const& t1, T2 const& t2) -{ +float VarManager::calculatePhiV(T1 const &t1, T2 const &t2) { // cos(phiv) = w*a /|w||a| // with w = u x v - // and a = u x z / |u x z| , unit vector perpendicular to v12 and z-direction (magnetic field) - // u = v12 / |v12| , the unit vector of v12 - // v = v1 x v2 / |v1 x v2| , unit vector perpendicular to v1 and v2 + // and a = u x z / |u x z| , unit vector perpendicular to v12 and + // z-direction (magnetic field) u = v12 / |v12| , the unit vector + // of v12 v = v1 x v2 / |v1 x v2| , unit vector perpendicular to v1 and v2 float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -7140,19 +9283,20 @@ float VarManager::calculatePhiV(T1 const& t1, T2 const& t2) // The third axis defined by vector product (ux,uy,uz)X(vx,vy,vz) float wx = uy * vz - uz * vy; float wy = uz * vx - ux * vz; - // by construction, (wx,wy,wz) must be a unit vector. Measure angle between (wx,wy,wz) and (ax,ay,0). - // The angle between them should be small if the pair is conversion. This function then returns values close to pi! - pairPhiV = TMath::ACos(wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; + // by construction, (wx,wy,wz) must be a unit vector. Measure angle between + // (wx,wy,wz) and (ax,ay,0). The angle between them should be small if the + // pair is conversion. This function then returns values close to pi! + pairPhiV = TMath::ACos( + wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; return pairPhiV; } /// Fill BDT score values. /// Supports binary (1 output) and multiclass (3 outputs) models. template -void VarManager::FillBdtScore(T1 const& bdtScore, float* values) -{ +void VarManager::FillBdtScore(T1 const &bdtScore, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (bdtScore.size() == 1) { @@ -7167,8 +9311,8 @@ void VarManager::FillBdtScore(T1 const& bdtScore, float* values) } //__________________________________________________________________ template -float VarManager::LorentzTransformJpsihadroncosChi(const TString& Option, T1 const& v1, T2 const& v2) -{ +float VarManager::LorentzTransformJpsihadroncosChi(const TString &Option, + T1 const &v1, T2 const &v2) { float value = -999.0f; auto beta_v1 = v1.BoostToCM(); ROOT::Math::Boost boostv1{beta_v1}; @@ -7190,10 +9334,10 @@ float VarManager::LorentzTransformJpsihadroncosChi(const TString& Option, T1 con } template -void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, T4 const& fv0as, T5 const& fdds, float* values) -{ +void VarManager::FillFIT(T1 const &bc, T2 const &bcs, T3 const &ft0s, + T4 const &fv0as, T5 const &fdds, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Initialize FIT info structure @@ -7250,10 +9394,9 @@ void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, T4 const& } template -void VarManager::FillEventAlice3(T const& event, float* values) -{ +void VarManager::FillEventAlice3(T const &event, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { values[kTimestamp] = event.timestamp(); @@ -7338,10 +9481,9 @@ void VarManager::FillEventAlice3(T const& event, float* values) } template -void VarManager::FillTrackAlice3(T const& track, float* values) -{ +void VarManager::FillTrackAlice3(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & Track) > 0 || (fillMap & ReducedTrack) > 0) { @@ -7367,7 +9509,8 @@ void VarManager::FillTrackAlice3(T const& track, float* values) values[kCharge] = track.sign(); if (fgUsedVars[kPVContributor]) { - values[kPVContributor] = static_cast((track.flags() & o2::aod::track::PVContributor) > 0); + values[kPVContributor] = static_cast( + (track.flags() & o2::aod::track::PVContributor) > 0); } if (fgUsedVars[kITSClusterMap]) { @@ -7380,7 +9523,8 @@ void VarManager::FillTrackAlice3(T const& track, float* values) } // Quantities based on the barrel tables - if constexpr ((fillMap & TrackExtra) > 0 || (fillMap & ReducedTrackBarrel) > 0) { + if constexpr ((fillMap & TrackExtra) > 0 || + (fillMap & ReducedTrackBarrel) > 0) { values[kTrackLength] = track.length(); @@ -7425,7 +9569,8 @@ void VarManager::FillTrackAlice3(T const& track, float* values) } // Quantities based on the barrel covariance tables - if constexpr ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0) { + if constexpr ((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0) { values[kTrackCYY] = track.cYY(); values[kTrackCZZ] = track.cZZ(); values[kTrackCSnpSnp] = track.cSnpSnp(); @@ -7433,7 +9578,8 @@ void VarManager::FillTrackAlice3(T const& track, float* values) values[kTrackC1Pt21Pt2] = track.c1Pt21Pt2(); } - if constexpr ((fillMap & TrackPID) > 0 || (fillMap & ReducedTrackBarrelPID) > 0) { + if constexpr ((fillMap & TrackPID) > 0 || + (fillMap & ReducedTrackBarrelPID) > 0) { values[kHasRICHSig] = track.hasSig(); values[kHasRICHSigInGas] = track.hasSigInGas(); @@ -7457,8 +9603,12 @@ void VarManager::FillTrackAlice3(T const& track, float* values) values[kRICHnSigmaAl] = track.nSigmaAlphaRich(); values[kTOFEventTime] = track.tofEventTime(); values[kTOFEventTimeErr] = track.tofEventTimeErr(); - values[kiTOFBeta] = track.innerTOFTrackLengthReco() / (track.innerTOFTrackTimeReco() - track.tofEventTime()) * o2::constants::physics::invLightSpeedCm2PS; - values[koTOFBeta] = track.outerTOFTrackLengthReco() / (track.outerTOFTrackTimeReco() - track.tofEventTime()) * o2::constants::physics::invLightSpeedCm2PS; + values[kiTOFBeta] = track.innerTOFTrackLengthReco() / + (track.innerTOFTrackTimeReco() - track.tofEventTime()) * + o2::constants::physics::invLightSpeedCm2PS; + values[koTOFBeta] = track.outerTOFTrackLengthReco() / + (track.outerTOFTrackTimeReco() - track.tofEventTime()) * + o2::constants::physics::invLightSpeedCm2PS; values[kOuterTOFnSigmaEl] = track.nSigmaElectronOuterTOF(); values[kOuterTOFnSigmaMu] = track.nSigmaMuonOuterTOF(); values[kOuterTOFnSigmaPi] = track.nSigmaPionOuterTOF(); @@ -7482,7 +9632,8 @@ void VarManager::FillTrackAlice3(T const& track, float* values) // Quantities based on the pair table(s) if constexpr ((fillMap & Pair) > 0) { values[kMass] = track.mass(); - ROOT::Math::PtEtaPhiMVector vpair(track.pt(), track.eta(), track.phi(), track.mass()); + ROOT::Math::PtEtaPhiMVector vpair(track.pt(), track.eta(), track.phi(), + track.mass()); values[kRap] = vpair.Rapidity(); } @@ -7491,10 +9642,9 @@ void VarManager::FillTrackAlice3(T const& track, float* values) } template -void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -7525,8 +9675,10 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) values[kEta] = v12.Eta(); values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); - double Ptot1 = TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); - double Ptot2 = TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + double Ptot1 = + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + double Ptot2 = + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -7537,7 +9689,8 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) values[kPhi2] = t2.phi(); if (fgUsedVars[kDeltaPhiPair2]) { - values[kDeltaPhiPair2] = RecoDecay::constrainAngle(v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + values[kDeltaPhiPair2] = RecoDecay::constrainAngle( + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -7545,9 +9698,15 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPsiPair]) { - values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) ? (v1.Phi() - v2.Phi()) : (v2.Phi() - v1.Phi()); - double xipair = TMath::ACos((v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / v2.P()); - values[kPsiPair] = (t1.sign() * fgMagField > 0.) ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); + double xipair = TMath::ACos( + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); + values[kPsiPair] = (t1.sign() * fgMagField > 0.) + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -7569,9 +9728,10 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame - bool useCS = fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + bool useCS = + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -7591,14 +9751,19 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) values[kCosThetaHE] = zaxis_HE.Dot(v_CM); } if (fgUsedVars[kPhiHE]) { - values[kPhiHE] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + values[kPhiHE] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeHE] = RecoDecay::constrainAngle(values[kPhiHE] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeHE] = RecoDecay::constrainAngle( + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -7614,14 +9779,19 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) values[kCosThetaCS] = zaxis_CS.Dot(v_CM); } if (fgUsedVars[kPhiCS]) { - values[kPhiCS] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + values[kPhiCS] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildeCS] = RecoDecay::constrainAngle(values[kPhiCS] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildeCS] = RecoDecay::constrainAngle( + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -7630,21 +9800,27 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } if (usePP) { - ROOT::Math::XYZVector zaxis_PP = ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector zaxis_PP = + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { values[kCosThetaPP] = zaxis_PP.Dot(v_CM) / std::sqrt(zaxis_PP.Mag2()); } if (fgUsedVars[kPhiPP]) { - values[kPhiPP] = RecoDecay::constrainAngle(TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + values[kPhiPP] = RecoDecay::constrainAngle( + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { - values[kPhiTildePP] = RecoDecay::constrainAngle(values[kPhiPP] - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiTildePP] = RecoDecay::constrainAngle( + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -7655,16 +9831,23 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) if (useRM) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); - ROOT::Math::XYZVectorF zaxis_RM(randomCostheta, std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + ROOT::Math::XYZVectorF zaxis_RM( + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } } } - if constexpr ((pairType == kDecayToEE) && ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0)) { + if constexpr ((pairType == kDecayToEE) && + ((fillMap & TrackCov) > 0 || + (fillMap & ReducedTrackBarrelCov) > 0)) { - if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { + if (fgUsedVars[kQuadDCAabsXY] || fgUsedVars[kQuadDCAsigXY] || + fgUsedVars[kQuadDCAabsZ] || fgUsedVars[kQuadDCAsigZ] || + fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { // Quantities based on the barrel tables double dca1XY = t1.dcaXY(); double dca2XY = t2.dcaXY(); @@ -7675,24 +9858,35 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) double dca1sigZ = dca1Z / std::sqrt(t1.cZZ()); double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); - values[kQuadDCAabsXY] = std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); - values[kQuadDCAsigXY] = std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAabsXY] = + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + values[kQuadDCAsigXY] = + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); - values[kQuadDCAsigZ] = std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); - values[kSignQuadDCAsigXY] = t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * TMath::Sign(1., dca2sigXY) * std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + values[kQuadDCAsigZ] = + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + values[kSignQuadDCAsigXY] = + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); if ((det1 < 0) || (det2 < 0)) { values[kQuadDCAsigXYZ] = -999; } else { - double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - 2. * dca1XY * dca1Z * t1.cZY()) / det1; - double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - 2. * dca2XY * dca2Z * t2.cZY()) / det2; + double chi2t1 = (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; + double chi2t2 = (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); - values[kQuadDCAsigXYZ] = std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + values[kQuadDCAsigXYZ] = + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -7702,10 +9896,10 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } template -void VarManager::FillResolutions(M const& mcTrack, T const& track, float* values) -{ +void VarManager::FillResolutions(M const &mcTrack, T const &track, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kDeltaPt] = track.pt() - mcTrack.pt(); @@ -7714,15 +9908,19 @@ void VarManager::FillResolutions(M const& mcTrack, T const& track, float* values values[kEtaResolution] = track.eta() - mcTrack.eta(); } -template -void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, T const& t2, bool propToSV, float* values) -{ +template +void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, + T const &t2, bool propToSV, + float *values) { // check at compile time that the event and cov matrix have the cov matrix - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); - constexpr bool trackHasCov = ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool trackHasCov = + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -7738,20 +9936,25 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, T cons if (!fgUsedKF) { int procCode = 0; - // TODO: use trackUtilities functions to initialize the various matrices to avoid code duplication - // auto pars1 = getTrackParCov(t1); - // auto pars2 = getTrackParCov(t2); - // We need to hide the cov data members from the cases when no cov table is provided - if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { - std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; - std::array t1covs = {t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + // TODO: use trackUtilities functions to initialize the various matrices to + // avoid code duplication auto pars1 = getTrackParCov(t1); auto pars2 = + // getTrackParCov(t2); We need to hide the cov data members from the cases + // when no cov table is provided + if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) { + std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), + t1.signed1Pt()}; + std::array t1covs = { + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; - std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; - std::array t2covs = {t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), + t2.signed1Pt()}; + std::array t2covs = { + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else { @@ -7786,72 +9989,125 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, T cons std::array covMatrixPCA{}; // get track impact parameters // This modifies track momenta! - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), + collision.posZ()); + std::array vtxCov{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; // auto primaryVertex = getPrimaryVertex(collision); auto covMatrixPV = primaryVertex.getCov(); - if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) { + if constexpr ((pairType == kDecayToEE || pairType == kDecayToKPi) && + trackHasCov) { secondaryVertex = fgFitterTwoProngBarrel.getPCACandidate(); - // printf("secVtx (first) %f %f %f \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); + // printf("secVtx (first) %f %f %f + // \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); covMatrixPCA = fgFitterTwoProngBarrel.calcPCACovMatrixFlat(); auto chi2PCA = fgFitterTwoProngBarrel.getChi2AtPCACandidate(); auto trackParVar0 = fgFitterTwoProngBarrel.getTrack(0); auto trackParVar1 = fgFitterTwoProngBarrel.getTrack(1); values[kVertexingChi2PCA] = chi2PCA; - v1 = {trackParVar0.getPt(), trackParVar0.getEta(), trackParVar0.getPhi(), m1}; - v2 = {trackParVar1.getPt(), trackParVar1.getEta(), trackParVar1.getPhi(), m2}; + v1 = {trackParVar0.getPt(), trackParVar0.getEta(), + trackParVar0.getPhi(), m1}; + v2 = {trackParVar1.getPt(), trackParVar1.getEta(), + trackParVar1.getPhi(), m2}; v12 = v1 + v2; } - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); - - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); - - values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); + double phi = std::atan2(secondaryVertex[1] - collision.posY(), + secondaryVertex[0] - collision.posX()); + double theta = + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); + + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + + values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); + values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; values[kVertexingLxy] = std::sqrt(values[kVertexingLxy]); values[kVertexingLz] = std::sqrt(values[kVertexingLz]); values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauz] = + (collision.posZ() - secondaryVertex[2]) * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = + values[kVertexingLxy] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; - values[kVertexingTauzErr] = values[kVertexingLzErr] * v12.M() / (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v12.M() / (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v12.Px() + - (secondaryVertex[1] - collision.posY()) * v12.Py() + - (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + values[kVertexingTauzErr] = + values[kVertexingLzErr] * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kCosPointingAngle] = + ((secondaryVertex[0] - collision.posX()) * v12.Px() + + (secondaryVertex[1] - collision.posY()) * v12.Py() + + (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 - values[kVertexingLzProjected] = ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v12.Px()) + ((secondaryVertex[1] - collision.posY()) * v12.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v12.Px()) + ((secondaryVertex[1] - collision.posY()) * v12.Py()) + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + (v12.Pz() * v12.Pz())); + values[kVertexingLzProjected] = + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + TMath::Sqrt(v12.Pz() * v12.Pz()); + values[kVertexingLxyProjected] = + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyzProjected] = + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); if (fgPVrecalKF) { - values[kVertexingLxyProjectedRecalculatePV] = (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); - values[kVertexingLxyProjectedRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] = + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + values[kVertexingLxyProjectedRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); } - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); - values[kVertexingTauxyProjectedPoleJPsiMass] = values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / (v12.Pt()); - values[kVertexingTauxyProjectedNs] = values[kVertexingTauxyProjected] / o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingTauxyProjectedPoleJPsiMass] = + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); + values[kVertexingTauxyProjectedNs] = + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { - values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = values[kVertexingLxyProjectedRecalculatePV] * o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); - values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingTauxyzProjected] = + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } } if (propToSV) { @@ -7872,14 +10128,16 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, T cons } template -void VarManager::FillTripletVertexingALICE3(C const& collision, T const& t1, T const& t2, T const& t3, VarManager::PairCandidateType tripletType, float* values) -{ +void VarManager::FillTripletVertexingALICE3( + C const &collision, T const &t1, T const &t2, T const &t3, + VarManager::PairCandidateType tripletType, float *values) { // TODO: Vertexing error variables - constexpr bool eventHasVtxCov = ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + constexpr bool eventHasVtxCov = + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -7904,22 +10162,29 @@ void VarManager::FillTripletVertexingALICE3(C const& collision, T const& t1, T c int procCode = 0; if (trackHasCov) { - std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; - std::array t1covs = {t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), + t1.signed1Pt()}; + std::array t1covs = { + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; - std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; - std::array t2covs = {t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), + t2.signed1Pt()}; + std::array t2covs = { + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; - std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; - std::array t3covs = {t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), + t3.signed1Pt()}; + std::array t3covs = { + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; - procCode = VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + procCode = + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -7955,10 +10220,14 @@ void VarManager::FillTripletVertexingALICE3(C const& collision, T const& t1, T c if constexpr (eventHasVtxCov) { secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); - std::array covMatrixPCA = fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + std::array covMatrixPCA = + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); - o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); - std::array vtxCov{collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ()}; + o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), + collision.posZ()); + std::array vtxCov{collision.covXX(), collision.covXY(), + collision.covYY(), collision.covXZ(), + collision.covYZ(), collision.covZZ()}; o2::dataformats::VertexBase primaryVertex = {vtxXYZ, vtxCov}; auto covMatrixPV = primaryVertex.getCov(); @@ -7967,44 +10236,82 @@ void VarManager::FillTripletVertexingALICE3(C const& collision, T const& t1, T c values[VarManager::kVertexingChi2PCA] = chi2PCA; } - double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); - double theta = std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * (secondaryVertex[1] - collision.posY()))); - - values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * (collision.posY() - secondaryVertex[1]); - values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); + double phi = std::atan2(secondaryVertex[1] - collision.posY(), + secondaryVertex[0] - collision.posX()); + double theta = + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); + + values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); + values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; values[kVertexingLxy] = std::sqrt(values[kVertexingLxy]); values[kVertexingLz] = std::sqrt(values[kVertexingLz]); values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); - values[kVertexingLxyzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); - values[kVertexingLxyErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); - values[kVertexingLzErr] = std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); - - values[kVertexingTauz] = (collision.posZ() - secondaryVertex[2]) * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxy] = values[kVertexingLxy] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kVertexingTauzErr] = values[kVertexingLzErr] * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); - values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); - - values[kCosPointingAngle] = ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); - // run 2 definitions: Decay length projected onto the momentum vector of the candidate - values[kVertexingLzProjected] = (secondaryVertex[2] - collision.posZ()) * v123.Pz(); - values[kVertexingLzProjected] = values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); - values[kVertexingLxyProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()); - values[kVertexingLxyProjected] = values[kVertexingLxyProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); - values[kVertexingLxyzProjected] = ((secondaryVertex[0] - collision.posX()) * v123.Px()) + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); - values[kVertexingLxyzProjected] = values[kVertexingLxyzProjected] / TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + (v123.Pz() * v123.Pz())); - - values[kVertexingTauzProjected] = values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); - values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); - values[kVertexingTauxyzProjected] = values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + values[kVertexingLxyErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + values[kVertexingLzErr] = + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + + values[kVertexingTauz] = + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxy] = + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kVertexingTauzErr] = + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingTauxyErr] = + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + + values[kCosPointingAngle] = + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); + // run 2 definitions: Decay length projected onto the momentum vector of the + // candidate + values[kVertexingLzProjected] = + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + values[kVertexingLzProjected] = + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLxyProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); + values[kVertexingLxyProjected] = + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyzProjected] = + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + values[kVertexingLxyzProjected] = + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); + + values[kVertexingTauzProjected] = + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingTauxyProjected] = + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingTauxyzProjected] = + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index 647967b6131..b1c3d2b25d8 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -1,6 +1,6 @@ // Copyright 2019-2020 CERN and copyright holders of ALICE O2. -// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. -// All rights not expressly granted are reserved. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright +// holders. All rights not expressly granted are reserved. // // This software is distributed under the terms of the GNU General Public // License v3 (GPL Version 3), copied verbatim in the file "COPYING". @@ -75,19 +75,28 @@ using namespace o2::aod; using namespace o2::common::core; // Some definitions -namespace o2::aod -{ -namespace dqanalysisflags -{ -DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing //need to understand -DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, 32); //! Event decision -DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelected, isBarrelSelected, 32); //! Barrel track decisions -DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, int8_t); //! Barrel track in-bunch ambiguity -DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity -DECLARE_SOA_BITMAP_COLUMN(IsMuonSelected, isMuonSelected, 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) -DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity -DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, int8_t); //! Muon track out of bunch ambiguity -DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) +namespace o2::aod { +namespace dqanalysisflags { +DECLARE_SOA_COLUMN(MixingHash, mixingHash, + int); //! Hash used in event mixing //need to understand +DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, + 32); //! Event decision +DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelected, isBarrelSelected, + 32); //! Barrel track decisions +DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, + int8_t); //! Barrel track in-bunch ambiguity +DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, + int8_t); //! Barrel track out of bunch ambiguity +DECLARE_SOA_BITMAP_COLUMN( + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) +DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, + int8_t); //! Muon track in-bunch ambiguity +DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, + int8_t); //! Muon track out of bunch ambiguity +DECLARE_SOA_BITMAP_COLUMN( + IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, + 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) // Bcandidate columns for ML analysis of B->Jpsi+K DECLARE_SOA_COLUMN(RunNumber, runNumber, uint64_t); DECLARE_SOA_COLUMN(EventIdx, eventIdx, uint64_t); @@ -181,26 +190,38 @@ 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(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(DcaXYOverSig1, dcaXYOverSig1, float); -DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); -DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); -DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); +// 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(DcaXYOverSig1, dcaXYOverSig1, float); +DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); +DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); +DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float); DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); -// Candidate columns efficiency calculation for prompt-non-prompt JPsi separation +// Candidate columns efficiency calculation for prompt-non-prompt JPsi +// separation DECLARE_SOA_COLUMN(OniaPt, oniaPt, float); DECLARE_SOA_COLUMN(OniaY, oniaY, float); DECLARE_SOA_COLUMN(OniaEta, oniaEta, float); @@ -209,101 +230,235 @@ DECLARE_SOA_COLUMN(OniaVz, oniaVz, float); DECLARE_SOA_COLUMN(OniaVtxZ, oniaVtxZ, float); } // namespace dqanalysisflags -DECLARE_SOA_TABLE(EventCuts, "AOD", "DQANAEVCUTS", dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents -DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents -DECLARE_SOA_TABLE(BarrelTrackCuts, "AOD", "DQANATRKCUTS", dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc -DECLARE_SOA_TABLE(BarrelAmbiguities, "AOD", "DQBARRELAMB", dqanalysisflags::BarrelAmbiguityInBunch, dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to ReducedBarrelTracks -DECLARE_SOA_TABLE(MuonTrackCuts, "AOD", "DQANAMUONCUTS", dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc -DECLARE_SOA_TABLE(MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to ReducedMuonTracks -DECLARE_SOA_TABLE(Prefilter, "AOD", "DQPREFILTER", dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to ReducedTracksAssoc -DECLARE_SOA_TABLE(BmesonCandidates, "AOD", "DQBMESONS", - dqanalysisflags::RunNumber, dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, dqanalysisflags::RapBcandidate, - dqanalysisflags::LxyBcandidate, dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, dqanalysisflags::LzBcandidateErr, - dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, - dqanalysisflags::MCLxyBcandidate, dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, - dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, dqanalysisflags::MCCosPBcandidate, - dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, - dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, - dqanalysisflags::PINleg1, dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, dqanalysisflags::Etaleg2, - dqanalysisflags::TPCnsigmaKaassoc, dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, dqanalysisflags::TOFnsigmaKaassoc, - dqanalysisflags::TPCnsigmaElleg1, dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, dqanalysisflags::TPCnsigmaPrleg2, - dqanalysisflags::ITSClusterMapassoc, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, dqanalysisflags::ITSChi2leg2, - dqanalysisflags::TPCNclsassoc, dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, dqanalysisflags::TPCChi2leg2, - dqanalysisflags::IsJpsiFromBSelected, dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); +DECLARE_SOA_TABLE( + EventCuts, "AOD", "DQANAEVCUTS", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents +DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", + dqanalysisflags::MixingHash); //! joinable to ReducedEvents +DECLARE_SOA_TABLE( + BarrelTrackCuts, "AOD", "DQANATRKCUTS", + dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc +DECLARE_SOA_TABLE( + BarrelAmbiguities, "AOD", "DQBARRELAMB", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks +DECLARE_SOA_TABLE( + MuonTrackCuts, "AOD", "DQANAMUONCUTS", + dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc +DECLARE_SOA_TABLE( + MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks +DECLARE_SOA_TABLE( + Prefilter, "AOD", "DQPREFILTER", + dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to + //! ReducedTracksAssoc +DECLARE_SOA_TABLE( + BmesonCandidates, "AOD", "DQBMESONS", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, + dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, + dqanalysisflags::LzBcandidateErr, dqanalysisflags::TauxyBcandidate, + dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, + dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, + dqanalysisflags::Chi2Bcandidate, dqanalysisflags::MCLxyBcandidate, + dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, + dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, + dqanalysisflags::MCCosPBcandidate, dqanalysisflags::GlobalIndexassoc, + dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, + dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, + dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, - dqanalysisflags::MassDileptonCandidate, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Phiassoc, - 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, dqanalysisflags::DcaZOverSig2, - 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); + dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::Ptpair, dqanalysisflags::Etapair, + dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, + dqanalysisflags::Phiassoc, 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, 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 // Declarations of various short names -using MyEvents = soa::Join; -using MyEventsSelected = soa::Join; -using MyEventsVtxCov = soa::Join; -using MyEventsVtxCovSelected = soa::Join; -using MyEventsVtxCovSelectedInfo = soa::Join; -using MyEventsVtxCovSelectedMultExtra = soa::Join; -using MyEventsVtxCovSelectedQvector = soa::Join; -using MyEventsQvector = soa::Join; -using MyEventsVtxCovHashSelected = soa::Join; - -using MyBarrelTracks = soa::Join; -using MyBarrelTracksWithAmbiguities = soa::Join; -using MyBarrelTracksWithCov = soa::Join; -using MyBarrelTracksWithCovWithAmbiguities = soa::Join; -using MyBarrelTracksWithCovWithAmbiguitiesWithColl = soa::Join; -using MyDielectronCandidates = soa::Join; +using MyEvents = soa::Join; +using MyEventsSelected = + soa::Join; +using MyEventsVtxCov = + soa::Join; +using MyEventsVtxCovSelected = + soa::Join; +using MyEventsVtxCovSelectedInfo = + soa::Join; +using MyEventsVtxCovSelectedMultExtra = + soa::Join; +using MyEventsVtxCovSelectedQvector = + soa::Join; +using MyEventsQvector = + soa::Join; +using MyEventsVtxCovHashSelected = + soa::Join; + +using MyBarrelTracks = + soa::Join; +using MyBarrelTracksWithAmbiguities = + soa::Join; +using MyBarrelTracksWithCov = + soa::Join; +using MyBarrelTracksWithCovWithAmbiguities = + soa::Join; +using MyBarrelTracksWithCovWithAmbiguitiesWithColl = + soa::Join; +using MyDielectronCandidates = + soa::Join; using MyDitrackCandidates = soa::Join; using MyDimuonCandidates = soa::Join; -using MyMuonTracks = soa::Join; -using MyMuonTracksWithCov = soa::Join; -using MyMuonTracksWithCovWithAmbiguities = soa::Join; -// using MyMuonTracksSelectedWithColl = soa::Join; +using MyMuonTracks = soa::Join; +using MyMuonTracksWithCov = + soa::Join; +using MyMuonTracksWithCovWithAmbiguities = + soa::Join; +// using MyMuonTracksSelectedWithColl = soa::Join; // bit maps used for the Fill functions of the VarManager -constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended; -constexpr static uint32_t gkEventFillMapWithCov = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov; -constexpr static uint32_t gkEventFillMapWithCovMultExtra = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ObjTypes::ReducedEventMultExtra; -// constexpr static uint32_t gkEventFillMapWithQvector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventQvector; -// constexpr static uint32_t gkEventFillMapWithCovQvector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ObjTypes::ReducedEventQvector; -constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelPID; -constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov | VarManager::ObjTypes::ReducedTrackBarrelPID; -constexpr static uint32_t gkTrackFillMapWithCovWithColl = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov | VarManager::ObjTypes::ReducedTrackBarrelPID | VarManager::ObjTypes::ReducedTrackCollInfo; -// constexpr static uint32_t gkTrackFillMapWithColl = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelPID | VarManager::ObjTypes::ReducedTrackCollInfo; - -constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; -constexpr static uint32_t gkMuonFillMapWithCov = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | VarManager::ObjTypes::ReducedMuonCov; -// constexpr static uint32_t gkMuonFillMapWithColl = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | VarManager::ObjTypes::ReducedMuonCollInfo; - -namespace dqefficiency_helpers -{ -inline float* varValues() { return static_cast(VarManager::fgValues); } -inline TString* varNames() { return static_cast(VarManager::fgVariableNames); } -inline TString* varUnits() { return static_cast(VarManager::fgVariableUnits); } +constexpr static uint32_t gkEventFillMap = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; +constexpr static uint32_t gkEventFillMapWithCov = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; +constexpr static uint32_t gkEventFillMapWithCovMultExtra = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | + VarManager::ObjTypes::ReducedEventMultExtra; +// constexpr static uint32_t gkEventFillMapWithQvector = +// VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t +// gkEventFillMapWithCovQvector = VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventVtxCov | +// VarManager::ObjTypes::ReducedEventQvector; +constexpr static uint32_t gkTrackFillMap = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; +constexpr static uint32_t gkTrackFillMapWithCov = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; +constexpr static uint32_t gkTrackFillMapWithCovWithColl = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; +// constexpr static uint32_t gkTrackFillMapWithColl = +// VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel +// | VarManager::ObjTypes::ReducedTrackBarrelPID | +// VarManager::ObjTypes::ReducedTrackCollInfo; + +constexpr static uint32_t gkMuonFillMap = + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; +constexpr static uint32_t gkMuonFillMapWithCov = + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; +// constexpr static uint32_t gkMuonFillMapWithColl = +// VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | +// VarManager::ObjTypes::ReducedMuonCollInfo; + +namespace dqefficiency_helpers { +inline float *varValues() { return static_cast(VarManager::fgValues); } +inline TString *varNames() { + return static_cast(VarManager::fgVariableNames); +} +inline TString *varUnits() { + return static_cast(VarManager::fgVariableUnits); +} } // namespace dqefficiency_helpers // Global function used to define needed histogram classes -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, const char* histGroups); // defines histograms for all tasks +void DefineHistograms( + HistogramManager *histMan, const TString &histClasses, + const char *histGroups); // defines histograms for all tasks // template // void PrintBitMap(TMap map, int nbits) @@ -313,42 +468,69 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, con // } // } -// Analysis task that produces event decisions and the Hash table used in event mixing +// Analysis task that produces event decisions and the Hash table used in event +// mixing struct AnalysisEventSelection { Produces eventSel; Produces hash; Produces JetEvents; OutputObj fOutputList{"output"}; - Configurable fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"}; - Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"}; - Configurable fConfigEventCutsJSON{"cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + Configurable fConfigMixingVariables{ + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; + Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", + "Event selection"}; + Configurable fConfigEventCutsJSON{ + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - Configurable fConfigAddEventHistogram{"cfgAddEventHistogram", "", "Comma separated list of histograms"}; - Configurable fConfigAddEventMCHistogram{"cfgAddEventMCHistogram", "generator", "Comma separated list of histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Add event histograms defined via JSON formatting (see HistogramsLibrary)"}; - - Configurable fConfigSplitCollisionsDeltaZ{"splitCollisionsDeltaZ", 1.0, "maximum delta-z (cm) between two collisions to consider them as split candidates"}; - Configurable fConfigSplitCollisionsDeltaBC{"splitCollisionsDeltaBC", 100, "maximum delta-BC between two collisions to consider them as split candidates; do not apply if value is negative"}; - Configurable fConfigCheckSplitCollisions{"checkSplitCollisions", false, "If true, run the split collision check and fill histograms"}; - - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - - HistogramManager* fHistMan = nullptr; - MixingHandler* fMixHandler = nullptr; - - AnalysisCompositeCut* fEventCut = nullptr; + Configurable fConfigAddEventHistogram{ + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + Configurable fConfigAddEventMCHistogram{ + "cfgAddEventMCHistogram", "generator", + "Comma separated list of histograms"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; + + Configurable fConfigSplitCollisionsDeltaZ{ + "splitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; + Configurable fConfigSplitCollisionsDeltaBC{ + "splitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; + Configurable fConfigCheckSplitCollisions{ + "checkSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; + + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + + HistogramManager *fHistMan = nullptr; + MixingHandler *fMixHandler = nullptr; + + AnalysisCompositeCut *fEventCut = nullptr; Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; - std::map fSelMap; // key: reduced event global index, value: event selection decision - std::map> fBCCollMap; // key: global BC, value: vector of reduced event global indices + std::map fSelMap; // key: reduced event global index, value: + // event selection decision + std::map> + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices std::map fMetadataRCT, fHeader; int fCurrentRun = -1; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -357,7 +539,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut* cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut *cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -365,24 +547,33 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const& cutIt : jsonCuts) { + std::vector jsonCuts = + dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const &cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); - DefineHistograms(fHistMan, "Event_BeforeCuts;Event_AfterCuts;", fConfigAddEventHistogram.value.data()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); + DefineHistograms(fHistMan, "Event_BeforeCuts;Event_AfterCuts;", + fConfigAddEventHistogram.value.data()); if (fConfigCheckSplitCollisions) { - DefineHistograms(fHistMan, "OutOfBunchCorrelations;SameBunchCorrelations;", ""); - } - DefineHistograms(fHistMan, "EventsMC", fConfigAddEventMCHistogram.value.data()); - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // aditional histograms via JSON + DefineHistograms(fHistMan, + "OutOfBunchCorrelations;SameBunchCorrelations;", ""); + } + DefineHistograms(fHistMan, "EventsMC", + fConfigAddEventMCHistogram.value.data()); + dqhistograms::AddHistogramsFromJSON( + fHistMan, fConfigAddJSONHistograms.value + .c_str()); // aditional histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -406,10 +597,11 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const& events, TEventsMC const& mcEvents) - { + void runEventSelection(TEvents const &events, TEventsMC const &mcEvents) { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { - fHeader = fCCDBApi.retrieveHeaders(Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), fMetadataRCT, -1); + fHeader = fCCDBApi.retrieveHeaders( + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + fMetadataRCT, -1); uint64_t sor = std::atol(fHeader["SOR"].c_str()); uint64_t eor = std::atol(fHeader["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -418,22 +610,27 @@ struct AnalysisEventSelection { fSelMap.clear(); fBCCollMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); if (event.has_reducedMCevent()) { - VarManager::FillEvent(event.reducedMCevent()); + VarManager::FillEvent( + event.reducedMCevent()); } bool decision = false; // if QA is requested fill histograms before event selections if (fConfigQA) { - fHistMan->FillHistClass("Event_BeforeCuts", dqefficiency_helpers::varValues()); // automatically fill all the histograms in the class Event + fHistMan->FillHistClass( + "Event_BeforeCuts", + dqefficiency_helpers::varValues()); // automatically fill all the + // histograms in the class Event } if (fEventCut->IsSelected(dqefficiency_helpers::varValues())) { if (fConfigQA) { - fHistMan->FillHistClass("Event_AfterCuts", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("Event_AfterCuts", + dqefficiency_helpers::varValues()); } decision = true; } @@ -442,16 +639,17 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto& evIndices = fBCCollMap[event.globalBC()]; + auto &evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } if (fMixHandler != nullptr) { - int hh = fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); + int hh = + fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); hash(hh); } } - for (auto const& event : mcEvents) { + for (auto const &event : mcEvents) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); @@ -462,31 +660,39 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const& events) - { - std::map collisionSplittingMap; // key: event global index, value: whether pileup event is a possible splitting + void publishSelections(TEvents const &events) { + std::map + collisionSplittingMap; // key: event global index, value: whether pileup + // event is a possible splitting // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); - // loop over the BC map, get the collision vectors and make in-bunch and out of bunch 2-event correlations + // loop over the BC map, get the collision vectors and make in-bunch and out + // of bunch 2-event correlations for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { uint64_t bc1 = bc1It->first; - auto const& bc1Events = bc1It->second; + auto const &bc1Events = bc1It->second; // same bunch event correlations, if more than 1 collisions in this bunch if (bc1Events.size() > 1) { - for (auto ev1It = bc1Events.begin(); ev1It != bc1Events.end(); ++ev1It) { + for (auto ev1It = bc1Events.begin(); ev1It != bc1Events.end(); + ++ev1It) { auto ev1 = events.rawIteratorAt(*ev1It); - for (auto ev2It = std::next(ev1It); ev2It != bc1Events.end(); ++ev2It) { + for (auto ev2It = std::next(ev1It); ev2It != bc1Events.end(); + ++ev2It) { auto ev2 = events.rawIteratorAt(*ev2It); - // compute 2-event quantities and mark the candidate split collisions + // compute 2-event quantities and mark the candidate split + // collisions VarManager::FillTwoEvents(ev1, ev2); - if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < fConfigSplitCollisionsDeltaZ) { // this is a possible collision split + if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < + fConfigSplitCollisionsDeltaZ) { // this is a possible collision + // split collisionSplittingMap[*ev1It] = true; collisionSplittingMap[*ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("SameBunchCorrelations", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("SameBunchCorrelations", + dqefficiency_helpers::varValues()); } } // end second event loop } // end first event loop @@ -495,25 +701,30 @@ struct AnalysisEventSelection { // loop over the following BCs in the TF for (auto bc2It = std::next(bc1It); bc2It != fBCCollMap.end(); ++bc2It) { uint64_t bc2 = bc2It->first; - if ((bc2 > bc1 ? bc2 - bc1 : bc1 - bc2) > fConfigSplitCollisionsDeltaBC) { + if ((bc2 > bc1 ? bc2 - bc1 : bc1 - bc2) > + fConfigSplitCollisionsDeltaBC) { break; } - auto const& bc2Events = bc2It->second; + auto const &bc2Events = bc2It->second; // loop over events in the first BC - for (const auto& ev1It : bc1Events) { + for (const auto &ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (const auto& ev2It : bc2Events) { + for (const auto &ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); - // compute 2-event quantities and mark the candidate split collisions + // compute 2-event quantities and mark the candidate split + // collisions VarManager::FillTwoEvents(ev1, ev2); - if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < fConfigSplitCollisionsDeltaZ) { // this is a possible collision split + if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < + fConfigSplitCollisionsDeltaZ) { // this is a possible collision + // split collisionSplittingMap[ev1It] = true; collisionSplittingMap[ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("OutOfBunchCorrelations", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("OutOfBunchCorrelations", + dqefficiency_helpers::varValues()); } } } @@ -522,7 +733,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const& event : events) { + for (auto const &event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -531,89 +742,136 @@ struct AnalysisEventSelection { if (sameBunchEvents.size() > 1) { // event with in-bunch pileup evSel |= (static_cast(1) << 1); } - if (collisionSplittingMap.find(event.globalIndex()) != collisionSplittingMap.end()) { // event with possible fake in-bunch pileup (collision splitting) + if (collisionSplittingMap.find(event.globalIndex()) != + collisionSplittingMap.end()) { // event with possible fake in-bunch + // pileup (collision splitting) evSel |= (static_cast(1) << 2); } eventSel(evSel); } } - void processSkimmed(MyEvents const& events, aod::ReducedMCEvents const& mcEvents) - { + void processSkimmed(MyEvents const &events, + aod::ReducedMCEvents const &mcEvents) { runEventSelection(events, mcEvents); publishSelections(events); } - void processFillEvents(MyEvents const& events) // Used to forward the event table from tablemaker, typical use for now is jet analysis. + void + processFillEvents(MyEvents const &events) // Used to forward the event table + // from tablemaker, typical use for + // now is jet analysis. { - for (auto const& event : events) { - JetEvents(event.tag_raw(), - event.runNumber(), - event.posX(), - event.posY(), - event.posZ(), - event.numContrib(), - event.collisionTime(), + for (auto const &event : events) { + JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), + event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisEventSelection, processSkimmed, "Run event selection on DQ skimmed events", false); - PROCESS_SWITCH(AnalysisEventSelection, processFillEvents, "Fill storedReducedEvents table for use in JE framework", false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmed, + "Run event selection on DQ skimmed events", false); + PROCESS_SWITCH(AnalysisEventSelection, processFillEvents, + "Fill storedReducedEvents table for use in JE framework", + false); PROCESS_SWITCH(AnalysisEventSelection, processDummy, "Dummy function", true); }; -// Produces a table with barrel track decisions (joinable to the ReducedTracksAssociations) -// Here one should add all the track cuts needed through the workflow (e.g. cuts for same-even pairing, electron prefiltering, track for dilepton-track correlations) +// Produces a table with barrel track decisions (joinable to the +// ReducedTracksAssociations) Here one should add all the track cuts needed +// through the workflow (e.g. cuts for same-even pairing, electron prefiltering, +// track for dilepton-track correlations) struct AnalysisTrackSelection { Produces trackSel; Produces trackAmbiguities; OutputObj fOutputList{"output"}; - Configurable fConfigCuts{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"}; - Configurable fConfigCutsJSON{"cfgBarrelTrackCutsJSON", "", "Additional list of barrel track cuts in JSON format"}; + Configurable fConfigCuts{ + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; + Configurable fConfigCutsJSON{ + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - Configurable fConfigAddTrackHistogram{"cfgAddTrackHistogram", "", "Comma separated list of histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; - // Re-application of the track-to-collision time compatibility on the skimmed associations. - // timeMargin and nSigma must be <= the values used by track-to-collision-associator at skimming time; - // bcWindow, usePVAssociation and maxPvContributors must be identical to those values. + Configurable fConfigAddTrackHistogram{ + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + Configurable fConfigPublishAmbiguity{ + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; + // Re-application of the track-to-collision time compatibility on the skimmed + // associations. + // timeMargin and nSigma must be <= the values used by + // track-to-collision-associator at skimming time; bcWindow, + // usePVAssociation and maxPvContributors must be identical to those values. struct : ConfigurableGroup { - Configurable cfgAssocTimeCut{"cfgAssocTimeCut", false, "If true, reject associations failing the time compatibility computed with the parameters below"}; - Configurable cfgAssocTimeMargin{"cfgAssocTimeMargin", 0.f, "time margin (ns); must be <= skimming timeMargin"}; - Configurable cfgAssocNSigma{"cfgAssocNSigma", 4.f, "nSigmaForTimeCompat; must be <= skimming value"}; - Configurable cfgAssocBcWindowForOneSigma{"cfgAssocBcWindowForOneSigma", 60, "bcWindowForOneSigma; must be equal to the skimming value"}; - Configurable cfgAssocUsePVAssociation{"cfgAssocUsePVAssociation", 1, "usePVAssociation; must be equal to the skimming value"}; - Configurable cfgAssocMaxPvContributorsForLowMultReassoc{"cfgAssocMaxPvContributorsForLowMultReassoc", 10, "maxPvContributorsForLowMultReassoc; must be equal to the skimming value"}; + Configurable cfgAssocTimeCut{ + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; + Configurable cfgAssocTimeMargin{ + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; + Configurable cfgAssocNSigma{ + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; + Configurable cfgAssocBcWindowForOneSigma{ + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; + Configurable cfgAssocUsePVAssociation{ + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; + Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable fConfigCcdbPathTPC{"ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", "base path to the ccdb object"}; - Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - Configurable fConfigComputeTPCpostCalib{"cfgTPCpostCalib", false, "If true, compute TPC post-calibrated n-sigmas"}; - Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - - Configurable fConfigMCSignals{"cfgTrackMCSignals", "", "Comma separated list of MC signals"}; - Configurable fConfigMCSignalsJSON{"cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable fConfigCcdbPathTPC{ + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; + Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + Configurable fConfigComputeTPCpostCalib{ + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; + Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + + Configurable fConfigMCSignals{ + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + Configurable fConfigMCSignalsJSON{ + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fTrackCuts; - std::vector fMCSignals; // list of signals to be checked + HistogramManager *fHistMan = nullptr; + std::vector fTrackCuts; + std::vector fMCSignals; // list of signals to be checked std::vector fHistNamesReco; std::vector fHistNamesMCMatched; - int fCurrentRun = 0; // current run (needed to detect run changes for loading CCDB parameters) + int fCurrentRun = 0; // current run (needed to detect run changes for loading + // CCDB parameters) - std::map> fNAssocsInBunch; // key: track global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) - std::map> fNAssocsOutOfBunch; // key: track global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) + std::map> + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) + std::map> + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -624,24 +882,29 @@ struct AnalysisTrackSelection { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fTrackCuts.push_back(dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fTrackCuts.push_back( + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // add extra cuts from JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -652,8 +915,9 @@ struct AnalysisTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -662,33 +926,46 @@ struct AnalysisTrackSelection { } if (fConfigQA) { - fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + fHistMan = + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); // Configure histogram classes for each track cut; - // Add histogram classes for each track cut and for each requested MC signal (reconstructed tracks with MC truth) + // Add histogram classes for each track cut and for each requested MC + // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsBarrel_BeforeCuts;"; - for (auto const& cut : fTrackCuts) { + for (auto const &cut : fTrackCuts) { TString nameStr = Form("AssocsBarrel_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { - TString nameStr2 = Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); + for (auto const &sig : fMCSignals) { + TString nameStr2 = + Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); - nameStr2 = Form("AssocsIncorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); + nameStr2 = Form("AssocsIncorrectBarrel_%s_%s", cut->GetName(), + sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); } } - DefineHistograms(fHistMan, histClasses.Data(), fConfigAddTrackHistogram.value.data()); + DefineHistograms(fHistMan, histClasses.Data(), + fConfigAddTrackHistogram.value.data()); if (fConfigPublishAmbiguity) { - DefineHistograms(fHistMan, "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", "ambiguity"); - } - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + DefineHistograms( + fHistMan, + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", + "ambiguity"); + } + dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -700,29 +977,45 @@ struct AnalysisTrackSelection { } } - template - void runTrackSelection(ReducedTracksAssoc const& assocs, TEvents const& events, TTracks const& tracks, TEventsMC const& /*eventsMC*/, TTracksMC const& tracksMC) - { + template + void runTrackSelection(ReducedTracksAssoc const &assocs, + TEvents const &events, TTracks const &tracks, + TEventsMC const & /*eventsMC*/, + TTracksMC const &tracksMC) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); // TODO: Check if postcalibration needed for MC if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { - auto calibList = fCCDB->getForTimeStamp(fConfigCcdbPathTPC.value, events.begin().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")); - } - - auto grpmag = fCCDB->getForTimeStamp(grpmagPath, events.begin().timestamp()); + auto calibList = fCCDB->getForTimeStamp( + fConfigCcdbPathTPC.value, events.begin().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")); + } + + auto grpmag = fCCDB->getForTimeStamp( + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", events.begin().timestamp()); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + events.begin().timestamp()); } fCurrentRun = events.begin().runNumber(); @@ -732,7 +1025,7 @@ struct AnalysisTrackSelection { trackAmbiguities.reserve(tracks.size()); // Loop over associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { trackSel(0); @@ -740,29 +1033,35 @@ struct AnalysisTrackSelection { } VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); - // fill event information which might be needed in histograms/cuts that combine track and event properties + // fill event information which might be needed in histograms/cuts that + // combine track and event properties VarManager::FillEvent(event); if (event.has_reducedMCevent()) { - VarManager::FillEvent(event.reducedMCevent()); + VarManager::FillEvent( + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); - // Reject incompatible associations while preserving the row alignment of trackSel. - // The track time is referenced to its original collision, not the associated one. + // Reject incompatible associations while preserving the row alignment of + // trackSel. The track time is referenced to its original collision, not + // the associated one. if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); - if (!VarManager::isBarrelAssocTimeCompatible(track, event, origEvent, - fConfigAssocTime.cfgAssocNSigma, fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + if (!VarManager::isBarrelAssocTimeCompatible( + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } } VarManager::FillTrack(track); - // compute quantities which depend on the associated collision, such as DCA + // compute quantities which depend on the associated collision, such as + // DCA VarManager::FillTrackCollision(track, event); bool isCorrectAssoc = false; @@ -770,42 +1069,57 @@ struct AnalysisTrackSelection { auto trackMC = track.reducedMCTrack(); auto eventMCfromTrack = trackMC.reducedMCevent(); if (event.has_reducedMCevent()) { - isCorrectAssoc = (eventMCfromTrack.globalIndex() == event.reducedMCevent().globalIndex()); + isCorrectAssoc = (eventMCfromTrack.globalIndex() == + event.reducedMCevent().globalIndex()); } VarManager::FillTrackMC(tracksMC, trackMC); } if (fConfigQA) { - fHistMan->FillHistClass("AssocsBarrel_BeforeCuts", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("AssocsBarrel_BeforeCuts", + dqefficiency_helpers::varValues()); } int iCut = 0; auto filterMap = static_cast(0); - for (auto cut = fTrackCuts.begin(); cut != fTrackCuts.end(); cut++, iCut++) { + for (auto cut = fTrackCuts.begin(); cut != fTrackCuts.end(); + cut++, iCut++) { if ((*cut)->IsSelected(dqefficiency_helpers::varValues())) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(fHistNamesReco[iCut], dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(fHistNamesReco[iCut], + dqefficiency_helpers::varValues()); } } } // end loop over cuts trackSel(filterMap); - // compute MC matching decisions and fill histograms for matched associations + // compute MC matching decisions and fill histograms for matched + // associations int isig = 0; if (filterMap > 0 && track.has_reducedMCTrack() && fConfigQA) { // loop over all MC signals - for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) { + for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); + sig++, isig++) { // check if this MC signal is matched if ((*sig)->CheckSignal(true, track.reducedMCTrack())) { // mcDecision |= (static_cast(1) << isig); - // loop over cuts and fill histograms for the cuts that are fulfilled + // loop over cuts and fill histograms for the cuts that are + // fulfilled for (unsigned int icut = 0; icut < fTrackCuts.size(); icut++) { if (filterMap & (static_cast(1) << icut)) { if (isCorrectAssoc) { - fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig] + .Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(fHistNamesMCMatched[icut * 2 * fMCSignals.size() + 2 * isig + 1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -820,9 +1134,12 @@ struct AnalysisTrackSelection { for (unsigned int j = 0; j < fTrackCuts.size(); j++) { if (filterMap & (static_cast(1) << j)) { if (isCorrectAssoc) { - fHistMan->FillHistClass(fHistNamesMCMatched[j * fMCSignals.size() + 2 * i].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(fHistNamesMCMatched[j * + fMCSignals.size() + 2 * i].Data(), dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(fHistNamesMCMatched[j * fMCSignals.size() + 2 * i + 1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(fHistNamesMCMatched[j * + fMCSignals.size() + 2 * i + 1].Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -833,20 +1150,23 @@ struct AnalysisTrackSelection { // count the number of associations per track if (fConfigPublishAmbiguity && filterMap > 0) { if (event.isEventSelected_bit(1)) { - // for this track, count the number of associated collisions with in-bunch pileup and out of bunch associations - if (fNAssocsInBunch.find(track.globalIndex()) == fNAssocsInBunch.end()) { + // for this track, count the number of associated collisions with + // in-bunch pileup and out of bunch associations + if (fNAssocsInBunch.find(track.globalIndex()) == + fNAssocsInBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { - if (fNAssocsOutOfBunch.find(track.globalIndex()) == fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) == + fNAssocsOutOfBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -854,41 +1174,48 @@ struct AnalysisTrackSelection { } // end loop over associations // QA the collision-track associations - // TODO: some tracks can be associated to both collisions that have in bunch pileup and collisions from different bunches + // TODO: some tracks can be associated to both collisions that have in bunch + // pileup and collisions from different bunches // So one could QA these tracks separately if (fConfigPublishAmbiguity) { if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } auto track = tracks.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqefficiency_helpers::varValues()); + VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", + dqefficiency_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } auto track = tracks.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); + VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", + dqefficiency_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : tracks) { + for (auto const &track : tracks) { int8_t nInBunch = 0; - if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) != + fNAssocsInBunch.end()) { nInBunch = fNAssocsInBunch[track.globalIndex()].size(); } int8_t nOutOfBunch = 0; - if (fNAssocsOutOfBunch.find(track.globalIndex()) != fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) != + fNAssocsOutOfBunch.end()) { nOutOfBunch = fNAssocsOutOfBunch[track.globalIndex()].size(); } trackAmbiguities(nInBunch, nOutOfBunch); @@ -896,59 +1223,93 @@ struct AnalysisTrackSelection { } } // end runTrackSelection() - void processSkimmed(ReducedTracksAssoc const& assocs, MyEventsSelected const& events, MyBarrelTracks const& tracks, ReducedMCEvents const& eventsMC, ReducedMCTracks const& tracksMC) - { - runTrackSelection(assocs, events, tracks, eventsMC, tracksMC); + void processSkimmed(ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { + runTrackSelection(assocs, events, tracks, + eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedTracksAssoc const& assocs, MyEventsVtxCovSelected const& events, MyBarrelTracksWithCov const& tracks, ReducedMCEvents const& eventsMC, ReducedMCTracks const& tracksMC) - { - runTrackSelection(assocs, events, tracks, eventsMC, tracksMC); + void processSkimmedWithCov(ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCov const &tracks, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { + runTrackSelection( + assocs, events, tracks, eventsMC, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmed, "Run barrel track selection on DQ skimmed track associations", false); - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCov, "Run barrel track selection on DQ skimmed tracks w/ cov matrix associations", false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmed, + "Run barrel track selection on DQ skimmed track associations", + false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCov, + "Run barrel track selection on DQ skimmed tracks w/ cov " + "matrix associations", + false); PROCESS_SWITCH(AnalysisTrackSelection, processDummy, "Dummy function", true); }; -// Produces a table with muon decisions (joinable to the ReducedMuonsAssociations) -// Here one should add all the track cuts needed through the workflow (e.g. cuts for same-event pairing, track for dilepton-track correlations) +// Produces a table with muon decisions (joinable to the +// ReducedMuonsAssociations) Here one should add all the track cuts needed +// through the workflow (e.g. cuts for same-event pairing, track for +// dilepton-track correlations) struct AnalysisMuonSelection { Produces muonSel; Produces muonAmbiguities; OutputObj fOutputList{"output"}; - Configurable fConfigCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; - Configurable fConfigCutsJSON{"cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + Configurable fConfigCuts{"cfgMuonCuts", "muonQualityCuts", + "Comma separated list of muon cuts"}; + Configurable fConfigCutsJSON{ + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - Configurable fConfigAddMuonHistogram{"cfgAddMuonHistogram", "", "Comma separated list of histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; - - Configurable fConfigMCSignals{"cfgMuonMCSignals", "", "Comma separated list of MC signals"}; - Configurable fConfigMCSignalsJSON{"cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; - - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; + Configurable fConfigAddMuonHistogram{ + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + Configurable fConfigPublishAmbiguity{ + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; + + Configurable fConfigMCSignals{ + "cfgMuonMCSignals", "", "Comma separated list of MC signals"}; + Configurable fConfigMCSignalsJSON{ + "cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager *fHistMan = nullptr; + std::vector fMuonCuts; std::vector fHistNamesReco; std::vector fHistNamesMCMatched; - std::vector fMCSignals; // list of signals to be checked + std::vector fMCSignals; // list of signals to be checked - int fCurrentRun = 0; // current run (needed to detect run changes for loading CCDB parameters) + int fCurrentRun = 0; // current run (needed to detect run changes for loading + // CCDB parameters) - std::map> fNAssocsInBunch; // key: track global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) - std::map> fNAssocsOutOfBunch; // key: track global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) + std::map> + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) + std::map> + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -959,24 +1320,29 @@ struct AnalysisMuonSelection { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fMuonCuts.push_back(dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fMuonCuts.push_back( + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Add cuts configured via JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const& t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const &t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -987,8 +1353,9 @@ struct AnalysisMuonSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -997,22 +1364,27 @@ struct AnalysisMuonSelection { } if (fConfigQA) { - fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + fHistMan = + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); // Configure histogram classes for each track cut; - // Add histogram classes for each track cut and for each requested MC signal (reconstructed tracks with MC truth) + // Add histogram classes for each track cut and for each requested MC + // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsMuon_BeforeCuts;"; - for (auto const& cut : fMuonCuts) { + for (auto const &cut : fMuonCuts) { TString nameStr = Form("AssocsMuon_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { - TString nameStr2 = Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + for (auto const &sig : fMCSignals) { + TString nameStr2 = + Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); - nameStr2 = Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + nameStr2 = + Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); } @@ -1021,9 +1393,15 @@ struct AnalysisMuonSelection { histClasses += "Muon_AmbiguityInBunch;Muon_AmbiguityOutOfBunch;"; } - DefineHistograms(fHistMan, histClasses.Data(), fConfigAddMuonHistogram.value.data()); // define all histograms - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + DefineHistograms( + fHistMan, histClasses.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms + dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1033,9 +1411,12 @@ struct AnalysisMuonSelection { fCCDB->setCreatedNotAfter(fConfigNoLaterThan.value); } - template - void runMuonSelection(ReducedMuonsAssoc const& assocs, TEvents const& events, TMuons const& muons, ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& muonsMC) - { + template + void runMuonSelection(ReducedMuonsAssoc const &assocs, TEvents const &events, + TMuons const &muons, + ReducedMCEvents const & /*eventsMC*/, + ReducedMCTracks const &muonsMC) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1045,16 +1426,21 @@ struct AnalysisMuonSelection { muonSel.reserve(assocs.size()); - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); - if (!event.has_reducedMCevent() || !event.isEventSelected_bit(0)) { // condition on reducedMCevent to avoid rec. events with no generated event + if (!event.has_reducedMCevent() || + !event.isEventSelected_bit( + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event muonSel(0); continue; } VarManager::ResetValues(0, VarManager::kNVars); - // fill event information which might be needed in histograms/cuts that combine track and event properties + // fill event information which might be needed in histograms/cuts that + // combine track and event properties VarManager::FillEvent(event); - VarManager::FillEvent(event.reducedMCevent()); + VarManager::FillEvent( + event.reducedMCevent()); auto track = assoc.template reducedmuon_as(); VarManager::FillTrack(track); @@ -1063,21 +1449,25 @@ struct AnalysisMuonSelection { if (track.has_reducedMCTrack()) { auto trackMC = track.reducedMCTrack(); auto eventMCfromTrack = trackMC.reducedMCevent(); - isCorrectAssoc = (eventMCfromTrack.globalIndex() == event.reducedMCevent().globalIndex()); + isCorrectAssoc = (eventMCfromTrack.globalIndex() == + event.reducedMCevent().globalIndex()); VarManager::FillTrackMC(muonsMC, trackMC); } if (fConfigQA) { - fHistMan->FillHistClass("AssocsMuon_BeforeCuts", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("AssocsMuon_BeforeCuts", + dqefficiency_helpers::varValues()); } int iCut = 0; auto filterMap = static_cast(0); - for (auto cut = fMuonCuts.begin(); cut != fMuonCuts.end(); cut++, iCut++) { + for (auto cut = fMuonCuts.begin(); cut != fMuonCuts.end(); + cut++, iCut++) { if ((*cut)->IsSelected(dqefficiency_helpers::varValues())) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(fHistNamesReco[iCut].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(fHistNamesReco[iCut].Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1097,7 +1487,8 @@ struct AnalysisMuonSelection { // compute MC matching decisions auto mcDecision = static_cast(0); int isig = 0; - for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) { + for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); + sig++, isig++) { if constexpr ((TMuonFillMap & VarManager::ObjTypes::ReducedMuon) > 0) { if (track.has_reducedMCTrack()) { if ((*sig)->CheckSignal(true, track.reducedMCTrack())) { @@ -1115,9 +1506,14 @@ struct AnalysisMuonSelection { for (unsigned int j = 0; j < fMuonCuts.size(); j++) { if (filterMap & (static_cast(1) << j)) { if (isCorrectAssoc) { - fHistMan->FillHistClass(fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1126,19 +1522,21 @@ struct AnalysisMuonSelection { // count the number of associations per track if (fConfigPublishAmbiguity && filterMap > 0) { if (event.isEventSelected_bit(1)) { - if (fNAssocsInBunch.find(track.globalIndex()) == fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) == + fNAssocsInBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { - if (fNAssocsOutOfBunch.find(track.globalIndex()) == fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) == + fNAssocsOutOfBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1146,43 +1544,50 @@ struct AnalysisMuonSelection { } // end loop over assocs // QA the collision-track associations - // TODO: some tracks can be associated to both collisions that have in bunch pileup and collisions from different bunches + // TODO: some tracks can be associated to both collisions that have in bunch + // pileup and collisions from different bunches // So one could QA these tracks separately if (fConfigPublishAmbiguity) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = static_cast(evIndices.size()); + VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = + static_cast(evIndices.size()); if (fConfigQA) { - fHistMan->FillHistClass("Muon_AmbiguityInBunch", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("Muon_AmbiguityInBunch", + dqefficiency_helpers::varValues()); } } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = static_cast(evIndices.size()); + VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = + static_cast(evIndices.size()); if (fConfigQA) { - fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); + fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", + dqefficiency_helpers::varValues()); } } // end loop over out-of-bunch ambiguous tracks // publish the ambiguity table - for (auto const& track : muons) { + for (auto const &track : muons) { int8_t nInBunch = 0; - if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) != + fNAssocsInBunch.end()) { nInBunch = fNAssocsInBunch[track.globalIndex()].size(); } int8_t nOutOfBunch = 0; - if (fNAssocsOutOfBunch.find(track.globalIndex()) != fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) != + fNAssocsOutOfBunch.end()) { nOutOfBunch = fNAssocsOutOfBunch[track.globalIndex()].size(); } muonAmbiguities(nInBunch, nOutOfBunch); @@ -1190,49 +1595,67 @@ struct AnalysisMuonSelection { } } - void processSkimmed(ReducedMuonsAssoc const& assocs, MyEventsSelected const& events, MyMuonTracks const& muons, ReducedMCEvents const& eventsMC, ReducedMCTracks const& tracksMC) - { - runMuonSelection(assocs, events, muons, eventsMC, tracksMC); + void processSkimmed(ReducedMuonsAssoc const &assocs, + MyEventsSelected const &events, MyMuonTracks const &muons, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { + runMuonSelection(assocs, events, muons, + eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedMuonsAssoc const& assocs, MyEventsVtxCovSelected const& events, MyMuonTracksWithCov const& muons, ReducedMCEvents const& eventsMC, ReducedMCTracks const& tracksMC) - { - runMuonSelection(assocs, events, muons, eventsMC, tracksMC); + void processSkimmedWithCov(ReducedMuonsAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyMuonTracksWithCov const &muons, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { + runMuonSelection( + assocs, events, muons, eventsMC, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisMuonSelection, processSkimmed, "Run muon selection on DQ skimmed muons", false); - PROCESS_SWITCH(AnalysisMuonSelection, processSkimmedWithCov, "Run muon selection on DQ skimmed muons, with event and track covariances", false); + PROCESS_SWITCH(AnalysisMuonSelection, processSkimmed, + "Run muon selection on DQ skimmed muons", false); + PROCESS_SWITCH(AnalysisMuonSelection, processSkimmedWithCov, + "Run muon selection on DQ skimmed muons, with event and track " + "covariances", + false); PROCESS_SWITCH(AnalysisMuonSelection, processDummy, "Dummy function", true); }; -// Run the prefilter selection (e.g. electron prefiltering for photon conversions) -// This takes uses a sample of tracks selected with loose cuts (fConfigPrefilterTrackCut) and combines them -// with the sample of tracks to be used in downstream analysis (fConfigTrackCuts). If a pair is found to pass -// the pair prefilter cut (cfgPrefilterPairCut), the analysis track is tagged to be removed from analysis. +// Run the prefilter selection (e.g. electron prefiltering for photon +// conversions) This takes uses a sample of tracks selected with loose cuts +// (fConfigPrefilterTrackCut) and combines them +// with the sample of tracks to be used in downstream analysis +// (fConfigTrackCuts). If a pair is found to pass the pair prefilter cut +// (cfgPrefilterPairCut), the analysis track is tagged to be removed from +// analysis. // TODO: Add optional QA histograms struct AnalysisPrefilterSelection { Produces prefilter; // joinable with ReducedTracksAssoc // Configurables - Configurable fConfigPrefilterTrackCut{"cfgPrefilterTrackCut", "", "Prefilter track cut"}; - Configurable fConfigPrefilterPairCut{"cfgPrefilterPairCut", "", "Prefilter pair cut"}; - Configurable fConfigTrackCuts{"cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + Configurable fConfigPrefilterTrackCut{"cfgPrefilterTrackCut", "", + "Prefilter track cut"}; + Configurable fConfigPrefilterPairCut{"cfgPrefilterPairCut", "", + "Prefilter pair cut"}; + Configurable fConfigTrackCuts{ + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // Track related options - Configurable fPropTrack{"cfgPropTrack", false, "Propgate tracks to associated collision to recalculate DCA and momentum vector"}; + Configurable fPropTrack{"cfgPropTrack", false, + "Propgate tracks to associated collision to " + "recalculate DCA and momentum vector"}; std::map fPrefilterMap; - AnalysisCompositeCut* fPairCut = nullptr; + AnalysisCompositeCut *fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; - Preslice trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + Preslice trackAssocsPerCollision = + aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1241,7 +1664,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1254,34 +1677,43 @@ struct AnalysisPrefilterSelection { // get the cut to be used as loose selection TString prefilterTrackCutStr = fConfigPrefilterTrackCut.value; if (prefilterTrackCutStr.IsNull()) { - LOG(warn) << " No prefilter loose selection specified! Prefilter will not be run"; + LOG(warn) << " No prefilter loose selection specified! Prefilter will " + "not be run"; runPrefilter = false; } fPrefilterMask = 0; fPrefilterCutBit = -1; if (runPrefilter) { - // get the list of cuts that were computed in the barrel track-selection task and create a bit mask + // get the list of cuts that were computed in the barrel track-selection + // task and create a bit mask // to mark just the ones we want to apply a prefilter on std::string trackCuts; - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", trackCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", trackCuts, false); TString allTrackCutsStr = trackCuts; - // check also the cuts added via JSON and add them to the std::string of cuts - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", trackCuts, false); + // check also the cuts added via JSON and add them to the std::string of + // cuts + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", trackCuts, + false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { - LOG(fatal) << " Not getting any track cuts from the barrel-track-selection "; + LOG(fatal) + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { - LOG(fatal) << " Prefilter track cut not among the cuts calculated by the track-selection task! "; + LOG(fatal) << " Prefilter track cut not among the cuts calculated by " + "the track-selection task! "; } for (int icut = 0; icut < objArray->GetEntries(); ++icut) { TString tempStr = objArray->At(icut)->GetName(); @@ -1300,131 +1732,168 @@ struct AnalysisPrefilterSelection { } } if (fPrefilterMask == static_cast(0) || fPrefilterCutBit < 0) { - LOG(warn) << "No specified loose cut or track cuts for prefiltering. This task will do nothing."; + LOG(warn) << "No specified loose cut or track cuts for prefiltering. " + "This task will do nothing."; } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill - VarManager::SetupTwoProngDCAFitter(5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true); + VarManager::SetupTwoProngDCAFitter( + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, + true); } template - void runPrefilter(TEvent const& event, soa::Join const& assocs, TTracks const& /*tracks*/) - { + void runPrefilter( + TEvent const &event, + soa::Join const &assocs, + TTracks const & /*tracks*/) { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); - // NOTE: here we restrict to just pairs of opposite sign (conversions), but in principle this can be made - // a configurable and check also same-sign pairs (track splitting) + // NOTE: here we restrict to just pairs of opposite sign (conversions), + // but in principle this can be made a configurable and check also + // same-sign pairs (track splitting) if (track1.sign() * track2.sign() > 0) { continue; } - // here we check the cuts fulfilled by both tracks, for both the tight and loose selections - uint32_t track1Candidate = (assoc1.isBarrelSelected_raw() & fPrefilterMask); - uint32_t track2Candidate = (assoc2.isBarrelSelected_raw() & fPrefilterMask); + // here we check the cuts fulfilled by both tracks, for both the tight and + // loose selections + uint32_t track1Candidate = + (assoc1.isBarrelSelected_raw() & fPrefilterMask); + uint32_t track2Candidate = + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); - if ((track1Candidate == 0 || !track2Loose) && (track2Candidate == 0 || !track1Loose)) { + if ((track1Candidate == 0 || !track2Loose) && + (track2Candidate == 0 || !track1Loose)) { continue; } // compute pair quantities - VarManager::FillPair(track1, track2); + VarManager::FillPair(track1, + track2); if (fPropTrack) { - VarManager::FillPairCollision(event, track1, track2); + VarManager::FillPairCollision( + event, track1, track2); } - // if the pair fullfils the criteria, add an entry into the prefilter map for the two tracks + // if the pair fullfils the criteria, add an entry into the prefilter map + // for the two tracks if (fPairCut->IsSelected(dqefficiency_helpers::varValues())) { - if (fPrefilterMap.find(track1.globalIndex()) == fPrefilterMap.end() && track1Candidate > 0) { + if (fPrefilterMap.find(track1.globalIndex()) == fPrefilterMap.end() && + track1Candidate > 0) { fPrefilterMap[track1.globalIndex()] = track1Candidate; } - if (fPrefilterMap.find(track2.globalIndex()) == fPrefilterMap.end() && track2Candidate > 0) { + if (fPrefilterMap.find(track2.globalIndex()) == fPrefilterMap.end() && + track2Candidate > 0) { fPrefilterMap[track2.globalIndex()] = track2Candidate; } } } // end loop over combinations } - void processBarrelSkimmed(MyEvents const& events, soa::Join const& assocs, MyBarrelTracks const& tracks) - { + void processBarrelSkimmed( + MyEvents const &events, + soa::Join const &assocs, + MyBarrelTracks const &tracks) { fPrefilterMap.clear(); - for (auto const& event : events) { - auto groupedAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + for (auto const &event : events) { + auto groupedAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(event, groupedAssocs, tracks); } } uint32_t mymap = -1; - // If cuts were not configured, then produce a map with all 1's and publish it for all associations + // If cuts were not configured, then produce a map with all 1's and publish + // it for all associations if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { for (int i = 0; i < assocs.size(); ++i) { prefilter(mymap); } } else { - for (auto const& assoc : assocs) { - // TODO: just use the index from the assoc (no need to cast the whole track) + for (auto const &assoc : assocs) { + // TODO: just use the index from the assoc (no need to cast the whole + // track) auto track = assoc.template reducedtrack_as(); mymap = -1; if (fPrefilterMap.contains(track.globalIndex())) { - // NOTE: publish the bitwise negated bits (~), so there will be zeroes for cuts that failed the prefiltering and 1 everywhere else + // NOTE: publish the bitwise negated bits (~), so there will be zeroes + // for cuts that failed the prefiltering and 1 everywhere else mymap = ~fPrefilterMap[track.globalIndex()]; prefilter(mymap); } else { - prefilter(mymap); // track did not pass the prefilter selections, so publish just 1's + prefilter(mymap); // track did not pass the prefilter selections, so + // publish just 1's } } } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisPrefilterSelection, processBarrelSkimmed, "Run Prefilter selection on reduced tracks", false); + PROCESS_SWITCH(AnalysisPrefilterSelection, processBarrelSkimmed, + "Run Prefilter selection on reduced tracks", false); PROCESS_SWITCH(AnalysisPrefilterSelection, processDummy, "Do nothing", true); }; -// Single-track selection on the barrel tracks after the prefilter decisions (which are not visible in the -// AnalysisTrackSelection histograms): fills track-level histograms separately for surviving and vetoed tracks, -// per track cut and per MC signal. -// NOTE: Histograms are filled per association, regardless of whether the association is the correct one. +// Single-track selection on the barrel tracks after the prefilter decisions +// (which are not visible in the +// AnalysisTrackSelection histograms): fills track-level histograms separately +// for surviving and vetoed tracks, per track cut and per MC signal. +// NOTE: Histograms are filled per association, regardless of whether the +// association is the correct one. struct AnalysisPostPrefilterTrackSelection { OutputObj fOutputList{"output"}; - Configurable fConfigTrackCuts{"cfgTrackCuts", "", "Comma separated list of track cuts (among those of analysis-track-selection) for which to fill histograms"}; - Configurable fConfigAddTrackHistogram{"cfgAddTrackHistogram", "", "Comma separated list of histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - Configurable fConfigMCSignals{"cfgTrackMCSignals", "", "Comma separated list of MC signals"}; - Configurable fConfigMCSignalsJSON{"cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; + Configurable fConfigTrackCuts{ + "cfgTrackCuts", "", + "Comma separated list of track cuts (among those of " + "analysis-track-selection) for which to fill histograms"}; + Configurable fConfigAddTrackHistogram{ + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + Configurable fConfigMCSignals{ + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + Configurable fConfigMCSignalsJSON{ + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMCSignals; - std::vector fCutBits; // bit positions of the requested cuts in the track-selection task cut list + HistogramManager *fHistMan = nullptr; + std::vector fMCSignals; + std::vector fCutBits; // bit positions of the requested cuts in the + // track-selection task cut list std::vector fHistNamesSurvived; // [icut] std::vector fHistNamesVetoed; // [icut] std::vector fHistNamesMCSurvived; // [icut * nSignals + isig] std::vector fHistNamesMCVetoed; // [icut * nSignals + isig] - int fCurrentRun = 0; // current run (needed to detect run changes for loading CCDB parameters) + int fCurrentRun = 0; // current run (needed to detect run changes for loading + // CCDB parameters) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1434,30 +1903,38 @@ struct AnalysisPostPrefilterTrackSelection { TString trackCutsStr = fConfigTrackCuts.value; std::unique_ptr objArrayCuts(trackCutsStr.Tokenize(",")); if (objArrayCuts == nullptr || objArrayCuts->GetEntries() == 0) { - LOG(fatal) << " No track cuts specified! Check the cfgTrackCuts configurable"; + LOG(fatal) + << " No track cuts specified! Check the cfgTrackCuts configurable"; } - // get the full list of cuts computed by the track-selection task and resolve the requested cuts to bit positions + // get the full list of cuts computed by the track-selection task and + // resolve the requested cuts to bit positions std::string trackCuts; - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", trackCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", trackCuts, false); TString allTrackCutsStr = trackCuts; // check also the cuts added via JSON and add them to the string of cuts - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", trackCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } std::unique_ptr objArrayAllCuts(allTrackCutsStr.Tokenize(",")); if (objArrayAllCuts == nullptr) { - LOG(fatal) << " Not getting any track cuts from the barrel-track-selection "; + LOG(fatal) + << " Not getting any track cuts from the barrel-track-selection "; } std::vector cutNames; for (int icut = 0; icut < objArrayCuts->GetEntries(); ++icut) { TString cutName = objArrayCuts->At(icut)->GetName(); if (objArrayAllCuts->FindObject(cutName.Data()) == nullptr) { - LOG(fatal) << " Track cut " << cutName << " not among the cuts calculated by the track-selection task! "; + LOG(fatal) + << " Track cut " << cutName + << " not among the cuts calculated by the track-selection task! "; } for (int jcut = 0; jcut < objArrayAllCuts->GetEntries(); ++jcut) { if (cutName.CompareTo(objArrayAllCuts->At(jcut)->GetName()) == 0) { @@ -1471,7 +1948,8 @@ struct AnalysisPostPrefilterTrackSelection { TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -1482,8 +1960,9 @@ struct AnalysisPostPrefilterTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -1493,31 +1972,40 @@ struct AnalysisPostPrefilterTrackSelection { fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); - // Configure histogram classes for each track cut, separately for prefilter-surviving and prefilter-vetoed tracks, + // Configure histogram classes for each track cut, separately for + // prefilter-surviving and prefilter-vetoed tracks, // and for each requested MC signal (reconstructed tracks with MC truth) TString histClasses = ""; - for (auto const& cutName : cutNames) { + for (auto const &cutName : cutNames) { TString nameStr = Form("TrackBarrelPostPrefilter_%s", cutName.Data()); fHistNamesSurvived.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); nameStr = Form("TrackBarrelPrefilterVetoed_%s", cutName.Data()); fHistNamesVetoed.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { - TString nameStr2 = Form("TrackBarrelPostPrefilter_%s_%s", cutName.Data(), sig->GetName()); + for (auto const &sig : fMCSignals) { + TString nameStr2 = Form("TrackBarrelPostPrefilter_%s_%s", + cutName.Data(), sig->GetName()); fHistNamesMCSurvived.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); - nameStr2 = Form("TrackBarrelPrefilterVetoed_%s_%s", cutName.Data(), sig->GetName()); + nameStr2 = Form("TrackBarrelPrefilterVetoed_%s_%s", cutName.Data(), + sig->GetName()); fHistNamesMCVetoed.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); } } - DefineHistograms(fHistMan, histClasses.Data(), fConfigAddTrackHistogram.value.data()); - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + DefineHistograms(fHistMan, histClasses.Data(), + fConfigAddTrackHistogram.value.data()); + dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); fCCDB->setURL(fConfigCcdbUrl.value); @@ -1525,29 +2013,36 @@ struct AnalysisPostPrefilterTrackSelection { fCCDB->setLocalObjectValidityChecking(); } - template - void runPostPrefilterTrackSelection(soa::Join const& assocs, - TEvents const& events, TTracks const& /*tracks*/, TTracksMC const& tracksMC) - { - // load the magnetic field (needed to recompute the DCA with respect to the associated collision) + template + void runPostPrefilterTrackSelection( + soa::Join const &assocs, + TEvents const &events, TTracks const & /*tracks*/, + TTracksMC const &tracksMC) { + // load the magnetic field (needed to recompute the DCA with respect to the + // associated collision) if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { - auto grpmag = fCCDB->getForTimeStamp(grpmagPath, events.begin().timestamp()); + auto grpmag = fCCDB->getForTimeStamp( + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", events.begin().timestamp()); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + events.begin().timestamp()); } fCurrentRun = events.begin().runNumber(); } // Loop over associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { continue; } - // check which of the requested cuts are fulfilled by this association and which of those are prefilter-vetoed + // check which of the requested cuts are fulfilled by this association and + // which of those are prefilter-vetoed uint32_t selectedMap = 0; uint32_t vetoMap = 0; for (std::size_t icut = 0; icut < fCutBits.size(); ++icut) { @@ -1563,15 +2058,18 @@ struct AnalysisPostPrefilterTrackSelection { } VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); - // fill event information which might be needed in histograms that combine track and event properties + // fill event information which might be needed in histograms that combine + // track and event properties VarManager::FillEvent(event); if (event.has_reducedMCevent()) { - VarManager::FillEvent(event.reducedMCevent()); + VarManager::FillEvent( + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); VarManager::FillTrack(track); - // compute quantities which depend on the associated collision, such as DCA + // compute quantities which depend on the associated collision, such as + // DCA VarManager::FillTrackCollision(track, event); if (track.has_reducedMCTrack()) { VarManager::FillTrackMC(tracksMC, track.reducedMCTrack()); @@ -1582,12 +2080,21 @@ struct AnalysisPostPrefilterTrackSelection { continue; } bool isVetoed = (vetoMap & (static_cast(1) << icut)) > 0; - fHistMan->FillHistClass((isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]).Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + (isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]) + .Data(), + dqefficiency_helpers::varValues()); if (track.has_reducedMCTrack()) { int isig = 0; - for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) { + for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); + sig++, isig++) { if ((*sig)->CheckSignal(true, track.reducedMCTrack())) { - fHistMan->FillHistClass((isVetoed ? fHistNamesMCVetoed : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + (isVetoed + ? fHistNamesMCVetoed + : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig] + .Data(), + dqefficiency_helpers::varValues()); } } } @@ -1595,26 +2102,43 @@ struct AnalysisPostPrefilterTrackSelection { } // end loop over associations } - void processSkimmed(soa::Join const& assocs, MyEventsSelected const& events, MyBarrelTracks const& tracks, ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& tracksMC) - { - runPostPrefilterTrackSelection(assocs, events, tracks, tracksMC); + void processSkimmed(soa::Join const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks, + ReducedMCEvents const & /*eventsMC*/, + ReducedMCTracks const &tracksMC) { + runPostPrefilterTrackSelection( + assocs, events, tracks, tracksMC); } - void processSkimmedWithCov(soa::Join const& assocs, MyEventsVtxCovSelected const& events, MyBarrelTracksWithCov const& tracks, ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& tracksMC) - { - runPostPrefilterTrackSelection(assocs, events, tracks, tracksMC); + void processSkimmedWithCov( + soa::Join const &assocs, + MyEventsVtxCovSelected const &events, MyBarrelTracksWithCov const &tracks, + ReducedMCEvents const & /*eventsMC*/, ReducedMCTracks const &tracksMC) { + runPostPrefilterTrackSelection(assocs, events, + tracks, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processSkimmed, "Run barrel track post-prefilter selection on DQ skimmed track associations", false); - PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processSkimmedWithCov, "Run barrel track post-prefilter selection on DQ skimmed track associations w/ cov matrix", false); - PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processDummy, "Dummy function", true); + PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processSkimmed, + "Run barrel track post-prefilter selection on DQ skimmed " + "track associations", + false); + PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processSkimmedWithCov, + "Run barrel track post-prefilter selection on DQ skimmed " + "track associations w/ cov matrix", + false); + PROCESS_SWITCH(AnalysisPostPrefilterTrackSelection, processDummy, + "Dummy function", true); }; // Run the same-event pairing -// This task assumes that both legs of the resonance fulfill the same cuts (symmetric decay channel) +// This task assumes that both legs of the resonance fulfill the same cuts +// (symmetric decay channel) // Runs combinatorics for barrel-barrel, muon-muon and barrel-muon combinations // TODO: implement properly the barrel-muon combinations // The task implements also process functions for running event mixing @@ -1634,87 +2158,146 @@ struct AnalysisSameEventPairing { Produces MCTruthTableEffi; Produces dileptonPolarList; - o2::base::MatLayerCylSet* fLUT = nullptr; - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + o2::base::MatLayerCylSet *fLUT = nullptr; + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. OutputObj fOutputList{"output"}; struct : ConfigurableGroup { - Configurable track{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"}; - Configurable muon{"cfgMuonCuts", "", "Comma separated list of muon cuts"}; - Configurable pair{"cfgPairCuts", "", "Comma separated list of pair cuts, !!! Use only if you know what you are doing, otherwise leave empty"}; - Configurable MCgenAcc{"cfgMCGenAccCuts", "", "Comma separated list of MC generated particles acceptance cuts, !!! Use only if you know what you are doing, otherwise leave empty"}; + Configurable track{ + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; + Configurable muon{"cfgMuonCuts", "", + "Comma separated list of muon cuts"}; + Configurable pair{ + "cfgPairCuts", "", + "Comma separated list of pair cuts, !!! Use only if you know what you " + "are doing, otherwise leave empty"}; + Configurable MCgenAcc{ + "cfgMCGenAccCuts", "", + "Comma separated list of MC generated particles acceptance cuts, !!! " + "Use only if you know what you are doing, otherwise leave empty"}; // TODO: Add pair cuts via JSON } fConfigCuts; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - Configurable fConfigAddSEPHistogram{"cfgAddSEPHistogram", "", "Comma separated list of histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; + Configurable fConfigAddSEPHistogram{ + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; struct : ConfigurableGroup { - Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable grpMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable lutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", + "url of the ccdb repository"}; + Configurable grpMagPath{"grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + Configurable lutPath{"lutPath", "GLO/Param/MatLUT", + "Path of the Lut parametrization"}; } fConfigCCDB; struct : ConfigurableGroup { - Configurable flatTables{"cfgFlatTables", false, "Produce a single flat tables with all relevant information of the pairs and single tracks"}; - Configurable polarTables{"cfgPolarTables", false, "Produce tables with dilepton polarization information"}; - Configurable useKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - Configurable noCorr{"cfgNoCorrFwdProp", false, "Do not correct for MCS effects in track propagation"}; - Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; - Configurable centerMassEnergy{"energy", 13600, "Center of mass energy in GeV"}; + Configurable flatTables{ + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; + Configurable polarTables{ + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; + Configurable useKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; + Configurable useAbsDCA{"cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of " + "chi^2 minimization in secondary vertexing"}; + Configurable noCorr{ + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; + Configurable collisionSystem{"syst", "pp", + "Collision system, pp or PbPb"}; + Configurable centerMassEnergy{"energy", 13600, + "Center of mass energy in GeV"}; } fConfigOptions; struct : ConfigurableGroup { - Configurable genSignals{"cfgBarrelMCGenSignals", "", "Comma separated list of MC signals (generated)"}; - Configurable genSignalsJSON{"cfgMCGenSignalsJSON", "", "Additional list of MC signals (generated) via JSON"}; - Configurable recSignals{"cfgBarrelMCRecSignals", "", "Comma separated list of MC signals (reconstructed)"}; - Configurable recSignalsJSON{"cfgMCRecSignalsJSON", "", "Comma separated list of MC signals (reconstructed) via JSON"}; - Configurable emuRecSignals{"cfgEmuMCRecSignals", "", "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; - Configurable emuRecSignalsJSON{"cfgEmuMCRecSignalsJSON", "", "Additional list of MC signals (reconstructed) for e-mu pairs via JSON"}; - Configurable finalStateSignals{"cfgBarrelMCFinalStateSignals", "eFromJpsi", "Comma separated list of MC signals (final state particles)"}; - Configurable skimSignalOnly{"cfgSkimSignalOnly", false, "Configurable to select only matched candidates"}; + Configurable genSignals{ + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; + Configurable genSignalsJSON{ + "cfgMCGenSignalsJSON", "", + "Additional list of MC signals (generated) via JSON"}; + Configurable recSignals{ + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; + Configurable recSignalsJSON{ + "cfgMCRecSignalsJSON", "", + "Comma separated list of MC signals (reconstructed) via JSON"}; + Configurable emuRecSignals{ + "cfgEmuMCRecSignals", "", + "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; + Configurable emuRecSignalsJSON{ + "cfgEmuMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) for e-mu pairs via " + "JSON"}; + Configurable finalStateSignals{ + "cfgBarrelMCFinalStateSignals", "eFromJpsi", + "Comma separated list of MC signals (final state particles)"}; + Configurable skimSignalOnly{ + "cfgSkimSignalOnly", false, + "Configurable to select only matched candidates"}; } fConfigMC; struct : ConfigurableGroup { - Configurable fConfigMiniTree{"useMiniTree.cfgMiniTree", false, "Produce a single flat table with minimal information for analysis"}; - Configurable fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; - Configurable fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; + Configurable fConfigMiniTree{ + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; + Configurable fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", + 2, "Min. mass cut for minitree"}; + Configurable fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", + 5, "Max. mass cut for minitree"}; } useMiniTree; // Track related options - Configurable fPropTrack{"cfgPropTrack", true, "Propgate tracks to associated collision to recalculate DCA and momentum vector"}; + Configurable fPropTrack{"cfgPropTrack", true, + "Propgate tracks to associated collision to " + "recalculate DCA and momentum vector"}; Service fCCDB{}; // PDG database Service pdgDB{}; - // Filter filterEventSelected = aod::dqanalysisflags::isEventSelected & uint32_t(1); - Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); + // Filter filterEventSelected = aod::dqanalysisflags::isEventSelected & + // uint32_t(1); + Filter eventFilter = aod::dqanalysisflags::isEventSelected > + static_cast(0); - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; - // keep histogram class names in maps, so we don't have to buld their names in the pair loops + // keep histogram class names in maps, so we don't have to buld their names in + // the pair loops std::map> fTrackHistNames; std::map> fBarrelHistNamesMCmatched; std::map> fMuonHistNames; std::map> fMuonHistNamesMCmatched; std::map> fTrackMuonHistNames; std::map> fTrackMuonHistNamesMCmatched; - std::vector fRecMCSignals; - std::vector fEmuRecMCSignals; - std::vector fGenMCSignals; - std::vector fFinalStateMCSignals; + std::vector fRecMCSignals; + std::vector fEmuRecMCSignals; + std::vector fGenMCSignals; + std::vector fFinalStateMCSignals; std::vector fPairCuts; - std::vector fMCGenAccCuts; + std::vector fMCGenAccCuts; bool fUseMCGenAccCut = false; - uint32_t fTrackFilterMask = 0; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream - uint32_t fMuonFilterMask = 0; // mask for the muon cuts required in this task to be applied on the muon cuts produced upstream + uint32_t fTrackFilterMask = + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream + uint32_t fMuonFilterMask = + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -1725,44 +2308,61 @@ struct AnalysisSameEventPairing { bool fEnableBarrelMuonHistos = false; bool fEnableBarrelMuonMixingHistos = false; - Preslice> trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; - Preslice> muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + Preslice< + soa::Join> + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + Preslice> + muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; - Configurable fConfigMixingDepth{"cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + Configurable fConfigMixingDepth{ + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; NoBinningPolicy hashBin; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } - bool isMCGen = context.mOptions.get("processMCGen") || context.mOptions.get("processMCGenWithGrouping") || context.mOptions.get("processBarrelOnlySkimmed"); + bool isMCGen = context.mOptions.get("processMCGen") || + context.mOptions.get("processMCGenWithGrouping") || + context.mOptions.get("processBarrelOnlySkimmed"); VarManager::SetDefaultVarNames(); - fEnableBarrelHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processBarrelOnlySkimmed") || context.mOptions.get("processBarrelOnlyWithCollSkimmed"); - fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed") || context.mOptions.get("processMuonOnlyVertexingSkimmed"); - fEnableBarrelMuonHistos = context.mOptions.get("processElectronMuonSkimmed"); - fEnableBarrelMuonMixingHistos = context.mOptions.get("processMixingElectronMuonSkimmed"); - - // Keep track of all the histogram class names to avoid composing strings in the pairing loop + fEnableBarrelHistos = + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed"); + fEnableMuonHistos = + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); + fEnableBarrelMuonHistos = + context.mOptions.get("processElectronMuonSkimmed"); + fEnableBarrelMuonMixingHistos = + context.mOptions.get("processMixingElectronMuonSkimmed"); + + // Keep track of all the histogram class names to avoid composing strings in + // the pairing loop TString histNames = ""; TString cutNamesStr = fConfigCuts.pair.value; if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fPairCuts.push_back(*dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fPairCuts.push_back( + *dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } - // get the list of cuts for tracks/muons, check that they were played by the barrel/muon selection tasks - // and make a mask for active cuts (barrel and muon selection tasks may run more cuts, needed for other analyses) + // get the list of cuts for tracks/muons, check that they were played by the + // barrel/muon selection tasks + // and make a mask for active cuts (barrel and muon selection tasks may + // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray* objArrayMuonCuts = nullptr; + TObjArray *objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -1771,7 +2371,8 @@ struct AnalysisSameEventPairing { TString sigNamesStr = fConfigMC.recSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -1783,8 +2384,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMC.recSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2) { // NOTE: only 2 prong signals continue; } @@ -1792,11 +2394,13 @@ struct AnalysisSameEventPairing { } } - // Setting the MC rec signal names for e-mu pairs (independent list; the pair has leg1=electron, leg2=muon) + // Setting the MC rec signal names for e-mu pairs (independent list; the + // pair has leg1=electron, leg2=muon) TString emuSigNamesStr = fConfigMC.emuRecSignals.value; std::unique_ptr objEmuRecSigArray(emuSigNamesStr.Tokenize(",")); for (int isig = 0; isig < objEmuRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objEmuRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objEmuRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -1806,8 +2410,9 @@ struct AnalysisSameEventPairing { } TString addEmuMCSignalsStr = fConfigMC.emuRecSignalsJSON.value; if (addEmuMCSignalsStr != "") { - std::vector addEmuMCSignals = dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); - for (auto const& mcIt : addEmuMCSignals) { + std::vector addEmuMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); + for (auto const &mcIt : addEmuMCSignals) { if (mcIt->GetNProngs() != 2) { continue; } @@ -1817,90 +2422,132 @@ struct AnalysisSameEventPairing { // get the barrel track selection cuts std::string tempCuts; - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; - // check also the cuts added via JSON and add them to the std::string of cuts - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, false); + // check also the cuts added via JSON and add them to the std::string of + // cuts + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } // check that the barrel track cuts array required in this task is not empty if (!trackCutsStr.IsNull()) { - // tokenize and loop over the barrel cuts produced by the barrel track selection task + // tokenize and loop over the barrel cuts produced by the barrel track + // selection task std::unique_ptr objArray(tempCutsStr.Tokenize(",")); fNCutsBarrel = objArray->GetEntries(); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { TString tempStr = objArray->At(icut)->GetName(); - // if the current barrel selection cut is required in this task, then switch on the corresponding bit in the mask - // and assign histogram directories + // if the current barrel selection cut is required in this task, then + // switch on the corresponding bit in the mask and assign histogram + // directories if (objArrayTrackCuts->FindObject(tempStr.Data()) != nullptr) { fTrackFilterMask |= (static_cast(1) << icut); if (fEnableBarrelHistos) { // assign the pair hist directories for the current cut std::vector names = { - Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks - names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEMM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEPP_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEMM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEPP_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEMM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fTrackHistNames[icut] = names; - // if there are pair cuts specified, assign hist directories for each barrel cut - pair cut combination - // NOTE: This could possibly lead to large histogram outputs. It is strongly advised to use pair cuts only + // if there are pair cuts specified, assign hist directories for + // each barrel cut - pair cut combination NOTE: This could possibly + // lead to large histogram outputs. It is strongly advised to use + // pair cuts only // if you know what you are doing. TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(pairCutNamesStr.Tokenize(",")); + std::unique_ptr objArrayPair( + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); - // NOTE: In the numbering scheme for the map key, we use the number of barrel cuts in the barrel-track selection task - fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = names; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); + // NOTE: In the numbering scheme for the map key, we use the + // number of barrel cuts in the barrel-track selection task + fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = + names; } // end loop (pair cuts) } // end if (pair cuts) - // assign hist directories for the MC matched pairs for each (track cut,MCsignal) combination + // assign hist directories for the MC matched pairs for each (track + // cut,MCsignal) combination if (!sigNamesStr.IsNull()) { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); - names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), sig->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), sig->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), sig->GetName())}; + names = {Form("PairsBarrelSEPM_%s_%s", + objArray->At(icut)->GetName(), sig->GetName()), + Form("PairsBarrelSEPP_%s_%s", + objArray->At(icut)->GetName(), sig->GetName()), + Form("PairsBarrelSEMM_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())}; if (fConfigQA) { - names.push_back(Form("PairsBarrelSEPMCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPMIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form("PairsBarrelSEPMCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back(Form("PairsBarrelSEPMIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back( + Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form( + "PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back( + Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form( + "PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form( + "PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } - fBarrelHistNamesMCmatched.try_emplace(icut * fRecMCSignals.size() + isig, names); + fBarrelHistNamesMCmatched.try_emplace( + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } // end if enableBarrelHistos @@ -1909,21 +2556,26 @@ struct AnalysisSameEventPairing { } // get the muon track selection cuts - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCuts", tempCuts, false); tempCutsStr = tempCuts; - // check also the cuts added via JSON and add them to the std::string of cuts - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); + // check also the cuts added via JSON and add them to the std::string of + // cuts + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const& t : addMuonCuts) { + std::vector addMuonCuts = + dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const &t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } // check that in this task we have specified muon cuts if (!muonCutsStr.IsNull()) { - // loop over the muon cuts computed by the muon selection task and build a filter mask for those required in this task + // loop over the muon cuts computed by the muon selection task and build a + // filter mask for those required in this task std::unique_ptr objArray(tempCutsStr.Tokenize(",")); fNCutsMuon = objArray->GetEntries(); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { @@ -1935,61 +2587,96 @@ struct AnalysisSameEventPairing { if (fEnableMuonHistos) { // assign pair hist directories for each required muon cut std::vector names = { - Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks - names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEMM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPP_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEMM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPP_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fMuonHistNames[icut] = names; - // if there are specified pair cuts, assign hist dirs for each muon cut - pair cut combination + // if there are specified pair cuts, assign hist dirs for each muon + // cut - pair cut combination TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(pairCutNamesStr.Tokenize(",")); + std::unique_ptr objArrayPair( + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); - fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = names; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); + fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = + names; } // end loop (pair cuts) } // end if (pair cuts) - // assign hist directories for pairs matched to MC signals for each (muon cut, MCrec signal) combination + // assign hist directories for pairs matched to MC signals for each + // (muon cut, MCrec signal) combination if (!sigNamesStr.IsNull()) { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), sig->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), sig->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), sig->GetName()), + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), }; if (fConfigQA) { - names.push_back(Form("PairsMuonSEPMCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPMIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form("PairsMuonSEPMCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back(Form("PairsMuonSEPMIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s_%s", + objArray->At(icut)->GetName(), + sig->GetName())); + names.push_back( + Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back( + Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back( + Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form( + "PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); + names.push_back(Form( + "PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } - fMuonHistNamesMCmatched.try_emplace(icut * fRecMCSignals.size() + isig, names); + fMuonHistNamesMCmatched.try_emplace( + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } @@ -1997,108 +2684,168 @@ struct AnalysisSameEventPairing { } // end loop over cuts } // end if (muonCutsStr) - // build the hist directories for e-mu pairs (track cut x muon cut [x pair cut]) and for the MC matched variants + // build the hist directories for e-mu pairs (track cut x muon cut [x pair + // cut]) and for the MC matched variants if (fEnableBarrelMuonHistos || fEnableBarrelMuonMixingHistos) { - // re-fetch the barrel cut list from upstream (we lost it when the muon block reused tempCuts/tempCutsStr) + // re-fetch the barrel cut list from upstream (we lost it when the muon + // block reused tempCuts/tempCutsStr) std::string tempBarrelCutsStr; - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", tempBarrelCutsStr, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", tempBarrelCutsStr, false); TString barrelCutsAll = tempBarrelCutsStr; - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempBarrelCutsStr, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", + tempBarrelCutsStr, false); TString barrelCutsJSONStr = tempBarrelCutsStr; if (barrelCutsJSONStr != "") { - std::vector addCuts = dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); - for (auto const& t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); + for (auto const &t : addCuts) { barrelCutsAll += Form(",%s", t->GetName()); } } std::unique_ptr objArrayBarrel(barrelCutsAll.Tokenize(",")); std::string tempMuonCutsStr; - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCuts", tempMuonCutsStr, false); + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCuts", tempMuonCutsStr, false); TString muonCutsAll = tempMuonCutsStr; - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCutsJSON", tempMuonCutsStr, false); + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCutsJSON", tempMuonCutsStr, + false); TString muonCutsJSONStr = tempMuonCutsStr; if (muonCutsJSONStr != "") { - std::vector addCuts = dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); - for (auto const& t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); + for (auto const &t : addCuts) { muonCutsAll += Form(",%s", t->GetName()); } } std::unique_ptr objArrayMuon(muonCutsAll.Tokenize(",")); TString pairCutNamesStr = fConfigCuts.pair.value; - std::unique_ptr objArrayPair(pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); - int nPairCuts = (objArrayPair && objArrayPair->GetEntries() > 0) ? objArrayPair->GetEntries() : 1; + std::unique_ptr objArrayPair( + pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); + int nPairCuts = (objArrayPair && objArrayPair->GetEntries() > 0) + ? objArrayPair->GetEntries() + : 1; for (int iTrack = 0; iTrack < objArrayBarrel->GetEntries(); ++iTrack) { TString trackCutName = objArrayBarrel->At(iTrack)->GetName(); - if (objArrayTrackCuts == nullptr || objArrayTrackCuts->FindObject(trackCutName.Data()) == nullptr) { + if (objArrayTrackCuts == nullptr || + objArrayTrackCuts->FindObject(trackCutName.Data()) == nullptr) { continue; } for (int iMuon = 0; iMuon < objArrayMuon->GetEntries(); ++iMuon) { TString muonCutName = objArrayMuon->At(iMuon)->GetName(); - if (objArrayMuonCuts == nullptr || objArrayMuonCuts->FindObject(muonCutName.Data()) == nullptr) { + if (objArrayMuonCuts == nullptr || + objArrayMuonCuts->FindObject(muonCutName.Data()) == nullptr) { continue; } // base (no pair-cut) entry std::vector names = { - Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), muonCutName.Data()), - Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), muonCutName.Data()), - Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), muonCutName.Data())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); + Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); if (fEnableBarrelMuonMixingHistos) { - names.push_back(Form("PairsEleMuMEPM_%s_%s", trackCutName.Data(), muonCutName.Data())); - names.push_back(Form("PairsEleMuMEPP_%s_%s", trackCutName.Data(), muonCutName.Data())); - names.push_back(Form("PairsEleMuMEMM_%s_%s", trackCutName.Data(), muonCutName.Data())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names.push_back(Form("PairsEleMuMEPM_%s_%s", trackCutName.Data(), + muonCutName.Data())); + names.push_back(Form("PairsEleMuMEPP_%s_%s", trackCutName.Data(), + muonCutName.Data())); + names.push_back(Form("PairsEleMuMEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); } - // NOTE: the map key encodes (iTrack, iMuon) without a pair-cut axis, so this base entry sits at iTrack*fNCutsMuon + iMuon. - // Pair-cut entries below use a different stride so they do not collide. + // NOTE: the map key encodes (iTrack, iMuon) without a pair-cut axis, + // so this base entry sits at iTrack*fNCutsMuon + iMuon. Pair-cut + // entries below use a different stride so they do not collide. fTrackMuonHistNames[iTrack * fNCutsMuon + iMuon] = names; // (track cut, muon cut, pair cut) entries if (objArrayPair && objArrayPair->GetEntries() > 0) { - for (int iPairCut = 0; iPairCut < objArrayPair->GetEntries(); ++iPairCut) { - names = { - Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); + for (int iPairCut = 0; iPairCut < objArrayPair->GetEntries(); + ++iPairCut) { + names = {Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); if (fEnableBarrelMuonMixingHistos) { - names.push_back(Form("PairsEleMuMEPM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - names.push_back(Form("PairsEleMuMEPP_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - names.push_back(Form("PairsEleMuMEMM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names.push_back(Form("PairsEleMuMEPM_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + names.push_back(Form("PairsEleMuMEPP_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + names.push_back(Form("PairsEleMuMEMM_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); } - int index = fNCutsBarrel * fNCutsMuon + iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + int index = fNCutsBarrel * fNCutsMuon + + iTrack * (fNCutsMuon * nPairCuts) + + iMuon * nPairCuts + iPairCut; fTrackMuonHistNames[index] = names; } } // (track cut, muon cut, MC rec signal) MC-matched entries if (!fEmuRecMCSignals.empty()) { - for (unsigned int isig = 0; isig < fEmuRecMCSignals.size(); isig++) { + for (unsigned int isig = 0; isig < fEmuRecMCSignals.size(); + isig++) { auto sig = fEmuRecMCSignals.at(isig); - names = { - Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()), - Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName()), - Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())}; + names = {Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), sig->GetName()), + Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), sig->GetName()), + Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), sig->GetName())}; if (fConfigQA) { - names.push_back(Form("PairsEleMuSEPMCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPMIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousInBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); - names.push_back(Form("PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), sig->GetName())); + names.push_back(Form("PairsEleMuSEPMCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + sig->GetName())); + names.push_back(Form("PairsEleMuSEPMIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + sig->GetName())); + names.push_back(Form("PairsEleMuSEPM_ambiguousInBunch_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + sig->GetName())); + names.push_back(Form( + "PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); + names.push_back(Form( + "PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); + names.push_back(Form( + "PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); + names.push_back(Form( + "PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); + names.push_back(Form( + "PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } - int index = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + iMuon * fEmuRecMCSignals.size() + isig; + int index = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + + iMuon * fEmuRecMCSignals.size() + isig; fTrackMuonHistNamesMCmatched.try_emplace(index, names); } } @@ -2111,7 +2858,8 @@ struct AnalysisSameEventPairing { if (!mcgenCutsStr.IsNull()) { std::unique_ptr objArray(mcgenCutsStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - AnalysisCut* cut = dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); + AnalysisCut *cut = + dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); if (cut != nullptr) { fMCGenAccCuts.push_back(cut); } @@ -2120,11 +2868,13 @@ struct AnalysisSameEventPairing { } // Add histogram classes for each specified MCsignal at the generator level - // TODO: create a std::vector of hist classes to be used at Fill time, to avoid using Form in the process function + // TODO: create a std::vector of hist classes to be used at Fill time, to + // avoid using Form in the process function TString sigGenNamesStr = fConfigMC.genSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { fGenMCSignals.push_back(sig); } @@ -2133,8 +2883,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsGenStr = fConfigMC.genSignalsJSON.value; if (addMCSignalsGenStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() > 2) { // NOTE: only 2 prong signals continue; } @@ -2144,18 +2895,23 @@ struct AnalysisSameEventPairing { // define final state MC signals TString sigFinalStateNamesStr = fConfigMC.finalStateSignals.value; - std::unique_ptr objFinalStateSigArray(sigFinalStateNamesStr.Tokenize(",")); + std::unique_ptr objFinalStateSigArray( + sigFinalStateNamesStr.Tokenize(",")); for (int isig = 0; isig < objFinalStateSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objFinalStateSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objFinalStateSigArray->At(isig)->GetName()); if (sig) { fFinalStateMCSignals.push_back(sig); } } if (isMCGen) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() == 1) { - histNames += Form("MCTruthGen_%s;", sig->GetName()); // TODO: Add these names to a std::vector to avoid using Form in the process function + histNames += + Form("MCTruthGen_%s;", + sig->GetName()); // TODO: Add these names to a std::vector to + // avoid using Form in the process function histNames += Form("MCTruthGenSel_%s;", sig->GetName()); } else if (sig->GetNProngs() == 2) { histNames += Form("MCTruthGenPair_%s;", sig->GetName()); @@ -2163,11 +2919,14 @@ struct AnalysisSameEventPairing { histNames += Form("MCTruthGenPseudoPolPair_%s;", sig->GetName()); histNames += Form("MCTruthGenPseudoPolPairSel_%s;", sig->GetName()); fHasTwoProngGenMCsignals = true; - // for these pair level signals, also add histograms for each MCgenAcc cut if specified + // for these pair level signals, also add histograms for each MCgenAcc + // cut if specified if (fUseMCGenAccCut) { - for (auto const& cut : fMCGenAccCuts) { - histNames += Form("MCTruthGenPairSel_%s_%s;", sig->GetName(), cut->GetName()); - histNames += Form("MCTruthGenPseudoPolPairSel_%s_%s;", sig->GetName(), cut->GetName()); + for (auto const &cut : fMCGenAccCuts) { + histNames += Form("MCTruthGenPairSel_%s_%s;", sig->GetName(), + cut->GetName()); + histNames += Form("MCTruthGenPseudoPolPairSel_%s_%s;", + sig->GetName(), cut->GetName()); } } } @@ -2183,47 +2942,74 @@ struct AnalysisSameEventPairing { if (fConfigOptions.noCorr) { VarManager::SetupFwdDCAFitterNoCorr(); } else { - fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigCCDB.lutPath)); + fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); - - VarManager::SetCollisionSystem((TString)fConfigOptions.collisionSystem, fConfigOptions.centerMassEnergy); // set collision system and center of mass energy - - DefineHistograms(fHistMan, histNames.Data(), fConfigAddSEPHistogram.value.data()); // define all histograms - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); + + VarManager::SetCollisionSystem( + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center of + // mass energy + + DefineHistograms( + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms + dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); + void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (withTwoProngFitter) { if (fConfigOptions.useKFVertexing.value) { VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, + 0.9f, + fConfigOptions.useAbsDCA.value); } } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } } - // Template function to run same event pairing (barrel-barrel, muon-muon, barrel-muon) - template - void runSameEventPairing(TEvents const& events, Preslice& preslice, TTrackAssocs const& assocs, TTracks const& /*tracks*/, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + // Template function to run same event pairing (barrel-barrel, muon-muon, + // barrel-muon) + template + void + runSameEventPairing(TEvents const &events, Preslice &preslice, + TTrackAssocs const &assocs, TTracks const & /*tracks*/, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; @@ -2254,11 +3040,11 @@ struct AnalysisSameEventPairing { // estimate reserved size int64_t reserveSize = 0; int64_t reserveSizeGen = mcTracks.size(); - for (auto const& event : events) { + for (auto const &event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const& t : groupedAssocs) { + for (auto const &t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -2291,30 +3077,42 @@ struct AnalysisSameEventPairing { dileptonPolarList.reserve(reserveSize); } - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool trackHasCov = + ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { - if (!event.has_reducedMCevent() || !event.isEventSelected_bit(0)) { // condition on reducedMCevent to avoid rec. events with no generated event + for (auto const &event : events) { + if (!event.has_reducedMCevent() || + !event.isEventSelected_bit( + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event continue; } uint8_t evSel = event.isEventSelected_raw(); // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqefficiency_helpers::varValues()); - VarManager::FillEvent(event.reducedMCevent(), dqefficiency_helpers::varValues()); + VarManager::FillEvent(event, + dqefficiency_helpers::varValues()); + VarManager::FillEvent( + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); if (groupedAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { + for (auto const &[a1, a2] : + o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { - twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + twoTrackFilter = + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } @@ -2322,7 +3120,8 @@ struct AnalysisSameEventPairing { auto t2 = a2.template reducedtrack_as(); sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter if (t1.barrelAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); } @@ -2339,103 +3138,220 @@ struct AnalysisSameEventPairing { // run MC matching for this pair int isig = 0; mcDecision = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, isig++) { if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack())) { + if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), + t2.reducedMCTrack())) { mcDecision |= (static_cast(1) << isig); } } } // end loop over MC signals if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); - isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == + event.reducedMCevent()); + isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == + event.reducedMCevent()); } VarManager::FillPair(t1, t2); if (fPropTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, + t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); } if (!fConfigMC.skimSignalOnly || mcDecision > 0) { - dielectronList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], + dielectronList(event.globalIndex(), + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, mcDecision); - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { - dielectronInfoList(event.collisionId(), t1.trackId(), t2.trackId()); - dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { + dielectronInfoList(event.collisionId(), t1.trackId(), + t2.trackId()); + dileptonInfoList(event.collisionId(), event.posX(), event.posY(), + event.posZ()); } if constexpr (trackHasCov && TTwoProngFitter) { - dielectronsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { - if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - dielectronAllList(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, mcDecision, - t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), - t2.pt(), t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], VarManager::fgValues[VarManager::kKFTrack1DCAxyz], VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], VarManager::fgValues[VarManager::kKFTrack0DCAxy], VarManager::fgValues[VarManager::kKFTrack1DCAxy], VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzOverErr], VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyOverErr], VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], VarManager::fgValues[VarManager::kKFCosPA], VarManager::fgValues[VarManager::kKFJpsiDCAxyz], VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], - VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); + dielectronsExtraList( + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { + if (fConfigOptions.flatTables.value && + t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { + dielectronAllList( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + t1.sign() + t2.sign(), twoTrackFilter, mcDecision, + t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), + t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), + t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), + t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), + t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), + t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), t2.eta(), + t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), + t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), + t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), + t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), + t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues + [VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues + [VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues + [VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } - if (fConfigOptions.polarTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - dileptonPolarList(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), twoTrackFilter, - VarManager::fgValues[VarManager::kCosThetaHE], VarManager::fgValues[VarManager::kPhiHE], VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], VarManager::fgValues[VarManager::kPhiCS], VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], VarManager::fgValues[VarManager::kPhiPP], VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], VarManager::fgValues[VarManager::kCosThetaStarFT0A], VarManager::fgValues[VarManager::kCosThetaStarFT0C], VarManager::fgValues[VarManager::kCosThetaStarRandom]); + if (fConfigOptions.polarTables.value && + t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { + dileptonPolarList( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + t1.sign() + t2.sign(), twoTrackFilter, + VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); } } } } - 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 + 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(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(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::kDCAxyOverSig1], VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(), - t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCAxyOverSig2], VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), - ambiInBunch, ambiOutOfBunch, isCorrectAssoc_leg1 && isCorrectAssoc_leg2, - VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); + const bool ambiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + const bool ambiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + 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) { - twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & + fMuonFilterMask; + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } auto t1 = a1.template reducedmuon_as(); auto t2 = a2.template reducedmuon_as(); - if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && t1.matchMCHTrackId() >= 0) { + if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && + t1.matchMCHTrackId() >= 0) { continue; } - if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && t1.matchMFTTrackId() >= 0) { + if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && + t1.matchMFTTrackId() >= 0) { continue; } sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter if (t1.muonAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); } @@ -2452,65 +3368,96 @@ struct AnalysisSameEventPairing { // run MC matching for this pair int isig = 0; mcDecision = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, isig++) { if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack())) { + if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), + t2.reducedMCTrack())) { mcDecision |= (static_cast(1) << isig); } } } // end loop over MC signals if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); - isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == + event.reducedMCevent()); + isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == + event.reducedMCevent()); } VarManager::FillPair(t1, t2); if (fPropTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, + t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); } - dimuonList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], + dimuonList(event.globalIndex(), + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, mcDecision); - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { - dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + dileptonInfoList(event.collisionId(), event.posX(), event.posY(), + event.posZ()); } - dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); - if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, - event.reducedMCevent().mcPosX(), event.reducedMCevent().mcPosY(), event.reducedMCevent().mcPosZ(), - VarManager::fgValues[VarManager::kMass], - mcDecision, - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - t1.mcMask(), t2.mcMask(), - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), - t1.chi2(), t2.chi2(), - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), - 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(), - (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), - isCorrectAssoc_leg1, isCorrectAssoc_leg2, - -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); + dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingLz], + VarManager::fgValues[VarManager::kVertexingLxy]); + if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && + t2.has_reducedMCTrack()) { + dimuonAllList( + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, event.reducedMCevent().mcPosX(), + event.reducedMCevent().mcPosY(), + event.reducedMCevent().mcPosZ(), + VarManager::fgValues[VarManager::kMass], mcDecision, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), + t1.mcMask(), t2.mcMask(), t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), + t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), + 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(), + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + isCorrectAssoc_leg1, isCorrectAssoc_leg2, -999.0, -999.0, + -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, + -999.0, VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } // Fill histograms @@ -2518,123 +3465,207 @@ struct AnalysisSameEventPairing { bool isAmbiOutOfBunch = false; for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { - isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); - if (sign1 * sign2 < 0) { // +- pairs - fHistMan->FillHistClass(histNames[icut][0].Data(), dqefficiency_helpers::varValues()); // reconstructed, unmatched - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + isAmbiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + isAmbiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); + if (sign1 * sign2 < 0) { // +- pairs + 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(1) << isig)) { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), dqefficiency_helpers::varValues()); // matched signal + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), + dqefficiency_helpers::varValues()); // matched signal if (useMiniTree.fConfigMiniTree) { if constexpr (TPairType == VarManager::kDecayToMuMu) { - twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + twoTrackFilter = a1.isMuonSelected_raw() & + a2.isMuonSelected_raw() & + fMuonFilterMask; + if (!twoTrackFilter) { // the tracks must have at least + // one filter bit in common to + // continue continue; } auto t1 = a1.template reducedmuon_as(); auto t2 = a2.template reducedmuon_as(); - float dileptonMass = VarManager::fgValues[VarManager::kMass]; - if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { - // In the miniTree the positive daughter is positioned as first + float dileptonMass = + VarManager::fgValues[VarManager::kMass]; + if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && + dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { + // In the miniTree the positive daughter is positioned + // as first if (t1.sign() > 0) { - dileptonMiniTreeRec(mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kCentFT0C], - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(), - t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(), - t1.pt(), t1.eta(), t1.phi(), - t2.pt(), t2.eta(), t2.phi()); + dileptonMiniTreeRec( + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), t1.pt(), t1.eta(), + t1.phi(), t2.pt(), t2.eta(), t2.phi()); } else { - dileptonMiniTreeRec(mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kCentFT0C], - t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(), - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(), - t2.pt(), t2.eta(), t2.phi(), - t1.pt(), t1.eta(), t1.phi()); + dileptonMiniTreeRec( + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t2.pt(), t2.eta(), + t2.phi(), t1.pt(), t1.eta(), t1.phi()); } } } } if (fConfigQA) { - if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { // correct track-collision association - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][3].Data(), dqefficiency_helpers::varValues()); + if (isCorrectAssoc_leg1 && + isCorrectAssoc_leg2) { // correct track-collision + // association + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][3] + .Data(), + dqefficiency_helpers::varValues()); } else { // incorrect track-collision association - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][4].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][4] + .Data(), + dqefficiency_helpers::varValues()); } if (isAmbiInBunch) { // ambiguous in bunch - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][5].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][5] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][6].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][6] + .Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][7].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][7] + .Data(), + dqefficiency_helpers::varValues()); } } if (isAmbiOutOfBunch) { // ambiguous out of bunch - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][8].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][8] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][9].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][9] + .Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][10].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][10] + .Data(), + dqefficiency_helpers::varValues()); } } } } if (fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][3].Data(), + dqefficiency_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][3 + 3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][3 + 3].Data(), + dqefficiency_helpers::varValues()); } } } } else { if (sign1 > 0) { // ++ pairs - fHistMan->FillHistClass(histNames[icut][1].Data(), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + fHistMan->FillHistClass(histNames[icut][1].Data(), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][1] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][4].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][4].Data(), + dqefficiency_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][4 + 3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][4 + 3].Data(), + dqefficiency_helpers::varValues()); } } } else { // -- pairs - fHistMan->FillHistClass(histNames[icut][2].Data(), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + fHistMan->FillHistClass(histNames[icut][2].Data(), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][2].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNamesMC[icut * fRecMCSignals.size() + isig][2] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][5].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][5].Data(), + dqefficiency_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][5 + 3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][5 + 3].Data(), + dqefficiency_helpers::varValues()); } } } } - for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) { + for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); + iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); - if (!(cut.IsSelected(dqefficiency_helpers::varValues()))) { // apply pair cuts + if (!(cut.IsSelected( + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][0].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * fPairCuts.size() + iPairCut][0] + .Data(), + dqefficiency_helpers::varValues()); } else { if (sign1 > 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * fPairCuts.size() + iPairCut][1] + .Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(histNames[ncuts + icut * fPairCuts.size() + iPairCut][2].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * fPairCuts.size() + iPairCut][2] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop (pair cuts) @@ -2644,32 +3675,37 @@ struct AnalysisSameEventPairing { } // end loop over events } - PresliceUnsorted perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId; + PresliceUnsorted perReducedMcEvent = + aod::reducedtrackMC::reducedMCeventId; template - void runMCGen(TEvents const& events, - ReducedMCEvents const& mcEvents, - ReducedMCTracks const& mcTracks) - { + void runMCGen(TEvents const &events, ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { uint32_t mcDecision = 0; int isig = 0; - // Loop over all MC single particles to fill generator level histograms, disregarding of whether they belong to selected reconstructed events or not - for (auto const& mctrack : mcTracks) { - for (auto const& sig : fGenMCSignals) { + // Loop over all MC single particles to fill generator level histograms, + // disregarding of whether they belong to selected reconstructed events or + // not + for (auto const &mctrack : mcTracks) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { VarManager::FillTrackMC(mcTracks, mctrack); - fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } // cout << "Filled single MC particle generator histograms." << endl; - // make a vector of global indices of mc particles which fulfill the selected track-level signal definition (to speed up the two mc particle combinatorics) + // make a vector of global indices of mc particles which fulfill the + // selected track-level signal definition (to speed up the two mc particle + // combinatorics) std::vector FinalStateMcParticleIndices; - // Now loop over reconstructed events to select only MC particles belonging to the same MC collision as the reconstructed event - for (auto const& event : events) { + // Now loop over reconstructed events to select only MC particles belonging + // to the same MC collision as the reconstructed event + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -2679,55 +3715,79 @@ struct AnalysisSameEventPairing { FinalStateMcParticleIndices.clear(); - auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + auto groupedMCTracks = + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { - if (track.reducedMCeventId() != event.reducedMCeventId()) { // check that the mc track belongs to the same mc collision as the reconstructed event + if (track.reducedMCeventId() != + event.reducedMCeventId()) { // check that the mc track belongs + // to the same mc collision as the + // reconstructed event continue; } VarManager::FillTrackMC(mcTracks, track); mcDecision |= (static_cast(1) << isig); - fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); - MCTruthTableEffi(VarManager::fgValues[VarManager::kMCPt], VarManager::fgValues[VarManager::kMCEta], VarManager::fgValues[VarManager::kMCY], VarManager::fgValues[VarManager::kMCPhi], VarManager::fgValues[VarManager::kMCVz], VarManager::fgValues[VarManager::kMCVtxZ], VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); + fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); + MCTruthTableEffi( + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { - auto mcEvent = mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); - dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); + auto mcEvent = + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), + track_raw.pt(), track_raw.eta(), + track_raw.phi(), -999, -999, -999); } } isig++; } - for (auto const& sig : fFinalStateMCSignals) { + for (auto const &sig : fFinalStateMCSignals) { if (sig->CheckSignal(true, track_raw)) { FinalStateMcParticleIndices.push_back(track.globalIndex()); - break; // if one of the final state signals is matched, no need to check the others + break; // if one of the final state signals is matched, no need to + // check the others } } - // cout << "Filled single MC particle generator histograms for reconstructed event." << endl; + // cout << "Filled single MC particle generator histograms for + // reconstructed event." << endl; } if (fHasTwoProngGenMCsignals) { - // loop over combinations of the selected mc particles to fill generator level pair histograms - for (auto const& t1 : FinalStateMcParticleIndices) { + // loop over combinations of the selected mc particles to fill generator + // level pair histograms + for (auto const &t1 : FinalStateMcParticleIndices) { auto t1_raw = mcTracks.rawIteratorAt(t1); - for (auto const& t2 : FinalStateMcParticleIndices) { + for (auto const &t2 : FinalStateMcParticleIndices) { if (t2 <= t1) { continue; // avoid double counting and self-pairing } - // for (auto const& [t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) { - // cout << "Processing pair of mcTracks with globalIndices = " << t1.globalIndex() << ", " << t2.globalIndex() << endl; + // for (auto const& [t1, t2] : combinations(groupedMCTracks, + // groupedMCTracks)) { cout << "Processing pair of mcTracks with + // globalIndices = " << t1.globalIndex() << ", " << t2.globalIndex() + // << endl; auto t2_raw = mcTracks.rawIteratorAt(t2); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { - if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here + for (auto const &sig : fGenMCSignals) { + if (sig->GetNProngs() != + 2) { // NOTE: 2-prong signals required here continue; } // cout << " Checking signal: " << sig->GetName() << endl; @@ -2735,31 +3795,50 @@ struct AnalysisSameEventPairing { // cout << " Signal matched!" << endl; mcDecision |= (static_cast(1) << isig); VarManager::FillPairMC(t1_raw, t2_raw); - // check if t1_raw and t2_raw have same mother to compute decay length related variables + // check if t1_raw and t2_raw have same mother to compute decay + // length related variables if (t1_raw.has_mothers() && t2_raw.has_mothers()) { - auto motherMCParticle_t1 = t1_raw.template mothers_first_as(); - auto motherMCParticle_t2 = t2_raw.template mothers_first_as(); + auto motherMCParticle_t1 = + t1_raw.template mothers_first_as(); + auto motherMCParticle_t2 = + t2_raw.template mothers_first_as(); if (motherMCParticle_t1 == motherMCParticle_t2) { - auto mcEvent = mcEvents.rawIteratorAt(motherMCParticle_t1.reducedMCeventId()); - std::array collVtxPos = {mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; - VarManager::FillTrackCollisionMC(motherMCParticle_t1, collVtxPos, pdgDB->Mass(motherMCParticle_t1.pdgCode())); + auto mcEvent = mcEvents.rawIteratorAt( + motherMCParticle_t1.reducedMCeventId()); + std::array collVtxPos = { + mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; + VarManager::FillTrackCollisionMC( + motherMCParticle_t1, collVtxPos, + pdgDB->Mass(motherMCParticle_t1.pdgCode())); } } // cout << " Filled VarManager for the pair." << endl; - fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); - fHistMan->FillHistClass(Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // Fill also acceptance cut histograms if requested if (fUseMCGenAccCut) { - for (auto const& cut : fMCGenAccCuts) { + for (auto const &cut : fMCGenAccCuts) { if (cut->IsSelected(dqefficiency_helpers::varValues())) { - fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s_%s", sig->GetName(), cut->GetName()), dqefficiency_helpers::varValues()); - fHistMan->FillHistClass(Form("MCTruthGenPseudoPolPairSel_%s_%s", sig->GetName(), cut->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenPairSel_%s_%s", sig->GetName(), + cut->GetName()), + dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenPseudoPolPairSel_%s_%s", + sig->GetName(), cut->GetName()), + dqefficiency_helpers::varValues()); } } } if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked - dileptonMiniTreeGen(mcDecision, -999, t1_raw.pt(), t1_raw.eta(), t1_raw.phi(), t2_raw.pt(), t2_raw.eta(), t2_raw.phi()); + dileptonMiniTreeGen(mcDecision, -999, t1_raw.pt(), + t1_raw.eta(), t1_raw.phi(), t2_raw.pt(), + t2_raw.eta(), t2_raw.phi()); } } isig++; @@ -2771,13 +3850,22 @@ struct AnalysisSameEventPairing { // cout << "AnalysisSameEventPairing::runMCGen() completed" << endl; } - // Run same-event e-mu pairing on reconstructed tracks. Logic mirrors runEmuSameEventPairing in tableReader_withAssoc.h - // with MC matching added: for each pair we evaluate the user-supplied fEmuRecMCSignals (2-prong, leg1=e, leg2=µ) - // and fill an MC-matched histogram per (track cut, muon cut, signal) when CheckSignal returns true on the linked - // ReducedMCTracks. Mixed events are handled in runEmuMixedPairing / runEmuSameSideMixing and do not perform MC matching. - template - void runEmuSameEventPairing(TEvents const& events, Preslice& preslice1, TTrackAssocs const& assocs1, TTracks const& /*tracks1*/, Preslice& preslice2, TMuonAssocs const& assocs2, TMuons const& /*tracks2*/, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& /*mcTracks*/) - { + // Run same-event e-mu pairing on reconstructed tracks. Logic mirrors + // runEmuSameEventPairing in tableReader_withAssoc.h with MC matching added: + // for each pair we evaluate the user-supplied fEmuRecMCSignals (2-prong, + // leg1=e, leg2=µ) and fill an MC-matched histogram per (track cut, muon cut, + // signal) when CheckSignal returns true on the linked ReducedMCTracks. Mixed + // events are handled in runEmuMixedPairing / runEmuSameSideMixing and do not + // perform MC matching. + template + void runEmuSameEventPairing( + TEvents const &events, Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const & /*tracks1*/, + Preslice &preslice2, TMuonAssocs const &assocs2, + TMuons const & /*tracks2*/, ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/) { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), true); @@ -2785,8 +3873,8 @@ struct AnalysisSameEventPairing { } } - const auto& histNames = fTrackMuonHistNames; - const auto& histNamesMC = fTrackMuonHistNamesMCmatched; + const auto &histNames = fTrackMuonHistNames; + const auto &histNamesMC = fTrackMuonHistNamesMCmatched; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; uint32_t twoTrackFilter = 0; @@ -2796,17 +3884,21 @@ struct AnalysisSameEventPairing { int sign1 = 0; int sign2 = 0; - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool eventHasQvectorCentr = + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.has_reducedMCevent() || !event.isEventSelected_bit(0)) { continue; } VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqefficiency_helpers::varValues()); - VarManager::FillEvent(event.reducedMCevent(), dqefficiency_helpers::varValues()); + VarManager::FillEvent(event, + dqefficiency_helpers::varValues()); + VarManager::FillEvent( + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event.globalIndex()); if (groupedAssocs1.size() == 0) { @@ -2817,8 +3909,11 @@ struct AnalysisSameEventPairing { continue; } - for (auto const& [a1, a2] : o2::soa::combinations(soa::CombinationsFullIndexPolicy(groupedAssocs1, groupedAssocs2))) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { + for (auto const &[a1, a2] : + o2::soa::combinations(soa::CombinationsFullIndexPolicy( + groupedAssocs1, groupedAssocs2))) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + fTrackFilterMask)) { continue; } if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { @@ -2830,15 +3925,18 @@ struct AnalysisSameEventPairing { sign1 = t1.sign(); sign2 = t2.sign(); - // build the per-pair filter: a bit is set iff the same bit index is set in both the barrel and muon raw selections + // build the per-pair filter: a bit is set iff the same bit index is set + // in both the barrel and muon raw selections twoTrackFilter = 0; int minCuts = std::min(fNCutsBarrel, fNCutsMuon); for (int i = 0; i < minCuts; ++i) { - if ((a1.isBarrelSelected_raw() & (static_cast(1) << i)) && (a2.isMuonSelected_raw() & (static_cast(1) << i))) { + if ((a1.isBarrelSelected_raw() & (static_cast(1) << i)) && + (a2.isMuonSelected_raw() & (static_cast(1) << i))) { twoTrackFilter |= (static_cast(1) << i); } } - // ambiguity bits in the upper 4 slots, matching the convention used by dilepton MC histograms + // ambiguity bits in the upper 4 slots, matching the convention used by + // dilepton MC histograms if (t1.barrelAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); } @@ -2852,24 +3950,30 @@ struct AnalysisSameEventPairing { twoTrackFilter |= (static_cast(1) << 31); } - // MC matching: pass the legs in fixed order (electron, muon) to satisfy the 2-prong template ordering + // MC matching: pass the legs in fixed order (electron, muon) to satisfy + // the 2-prong template ordering mcDecision = 0; isCorrectAssoc_leg1 = false; isCorrectAssoc_leg2 = false; if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { int isig = 0; - for (auto sig = fEmuRecMCSignals.begin(); sig != fEmuRecMCSignals.end(); sig++, isig++) { - if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack())) { + for (auto sig = fEmuRecMCSignals.begin(); + sig != fEmuRecMCSignals.end(); sig++, isig++) { + if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), + t2.reducedMCTrack())) { mcDecision |= (static_cast(1) << isig); } } - isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); - isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_leg1 = + (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_leg2 = + (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); } VarManager::FillPair(t1, t2); if (fPropTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, + t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2878,17 +3982,24 @@ struct AnalysisSameEventPairing { VarManager::FillPairVn(t1, t2); } - bool isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - bool isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + bool isAmbiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + bool isAmbiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); bool isCorrectPair = isCorrectAssoc_leg1 && isCorrectAssoc_leg2; - // fill reco histograms per (track cut, muon cut[, pair cut]) and the MC-matched variants per signal + // fill reco histograms per (track cut, muon cut[, pair cut]) and the + // MC-matched variants per signal for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { - if (!(a1.isBarrelSelected_raw() & (static_cast(1) << iTrack))) { + if (!(a1.isBarrelSelected_raw() & + (static_cast(1) << iTrack))) { continue; } for (int iMuon = 0; iMuon < fNCutsMuon; ++iMuon) { - if (!(a2.isMuonSelected_raw() & (static_cast(1) << iMuon))) { + if (!(a2.isMuonSelected_raw() & + (static_cast(1) << iMuon))) { continue; } @@ -2896,11 +4007,14 @@ struct AnalysisSameEventPairing { auto itHistBase = histNames.find(iTrack * fNCutsMuon + iMuon); if (itHistBase != histNames.end()) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHistBase->second[0].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[0].Data(), + dqefficiency_helpers::varValues()); } else if (sign1 > 0) { - fHistMan->FillHistClass(itHistBase->second[1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[1].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(itHistBase->second[2].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[2].Data(), + dqefficiency_helpers::varValues()); } } @@ -2915,65 +4029,85 @@ struct AnalysisSameEventPairing { if (fPairCuts.empty()) { continue; // already filled above } - int index = fNCutsBarrel * fNCutsMuon + iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + int index = fNCutsBarrel * fNCutsMuon + + iTrack * (fNCutsMuon * nPairCuts) + + iMuon * nPairCuts + iPairCut; auto itHist = histNames.find(index); if (itHist == histNames.end()) { continue; } if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHist->second[0].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[0].Data(), + dqefficiency_helpers::varValues()); } else if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[1].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(itHist->second[2].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[2].Data(), + dqefficiency_helpers::varValues()); } } - // MC-matched entries (only when at least one signal fired and both legs have MC links) + // MC-matched entries (only when at least one signal fired and both + // legs have MC links) if (mcDecision == 0 || fEmuRecMCSignals.empty()) { continue; } - for (unsigned int isig = 0; isig < fEmuRecMCSignals.size(); isig++) { + for (unsigned int isig = 0; isig < fEmuRecMCSignals.size(); + isig++) { if (!(mcDecision & (static_cast(1) << isig))) { continue; } - int indexMC = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + iMuon * fEmuRecMCSignals.size() + isig; + int indexMC = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + + iMuon * fEmuRecMCSignals.size() + isig; auto itHistMC = histNamesMC.find(indexMC); if (itHistMC == histNamesMC.end()) { continue; } - const auto& mcNames = itHistMC->second; + const auto &mcNames = itHistMC->second; if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(mcNames[0].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[0].Data(), + dqefficiency_helpers::varValues()); } else if (sign1 > 0) { - fHistMan->FillHistClass(mcNames[1].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[1].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(mcNames[2].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[2].Data(), + dqefficiency_helpers::varValues()); } if (!fConfigQA || mcNames.size() < 11) { continue; } - // QA fills (PM only, mirroring the dilepton MC layout: indices 3..10) + // QA fills (PM only, mirroring the dilepton MC layout: + // indices 3..10) if (sign1 * sign2 < 0) { if (isCorrectPair) { - fHistMan->FillHistClass(mcNames[3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[3].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(mcNames[4].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[4].Data(), + dqefficiency_helpers::varValues()); } if (isAmbiInBunch) { - fHistMan->FillHistClass(mcNames[5].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[5].Data(), + dqefficiency_helpers::varValues()); if (isCorrectPair) { - fHistMan->FillHistClass(mcNames[6].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[6].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(mcNames[7].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[7].Data(), + dqefficiency_helpers::varValues()); } } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(mcNames[8].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[8].Data(), + dqefficiency_helpers::varValues()); if (isCorrectPair) { - fHistMan->FillHistClass(mcNames[9].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[9].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(mcNames[10].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(mcNames[10].Data(), + dqefficiency_helpers::varValues()); } } } @@ -2984,22 +4118,27 @@ struct AnalysisSameEventPairing { } } - template - void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, TTracks1 const& /*tracks1*/, TTracks2 const& /*tracks2*/) - { - const auto& histNames = fTrackMuonHistNames; + template + void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { + const auto &histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; int sign1 = 0; int sign2 = 0; - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool eventHasQvectorCentr = + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& a1 : assocs1) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { + for (auto const &a1 : assocs1) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + fTrackFilterMask)) { continue; } - for (auto const& a2 : assocs2) { + for (auto const &a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -3017,22 +4156,28 @@ struct AnalysisSameEventPairing { } for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { - if (!(a1.isBarrelSelected_raw() & (static_cast(1) << iTrack))) { + if (!(a1.isBarrelSelected_raw() & + (static_cast(1) << iTrack))) { continue; } for (int iMuon = 0; iMuon < fNCutsMuon; ++iMuon) { - if (!(a2.isMuonSelected_raw() & (static_cast(1) << iMuon))) { + if (!(a2.isMuonSelected_raw() & + (static_cast(1) << iMuon))) { continue; } // base ME entry auto itHistBase = histNames.find(iTrack * fNCutsMuon + iMuon); - if (itHistBase != histNames.end() && itHistBase->second.size() >= 6) { + if (itHistBase != histNames.end() && + itHistBase->second.size() >= 6) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHistBase->second[3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[3].Data(), + dqefficiency_helpers::varValues()); } else if (sign1 > 0) { - fHistMan->FillHistClass(itHistBase->second[4].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[4].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(itHistBase->second[5].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHistBase->second[5].Data(), + dqefficiency_helpers::varValues()); } } for (int iPairCut = 0; iPairCut < nPairCuts; ++iPairCut) { @@ -3045,17 +4190,22 @@ struct AnalysisSameEventPairing { if (fPairCuts.empty()) { continue; } - int index = fNCutsBarrel * fNCutsMuon + iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + int index = fNCutsBarrel * fNCutsMuon + + iTrack * (fNCutsMuon * nPairCuts) + + iMuon * nPairCuts + iPairCut; auto itHist = histNames.find(index); if (itHist == histNames.end() || itHist->second.size() < 6) { continue; } if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHist->second[3].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[3].Data(), + dqefficiency_helpers::varValues()); } else if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[4].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[4].Data(), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(itHist->second[5].Data(), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[5].Data(), + dqefficiency_helpers::varValues()); } } } @@ -3064,16 +4214,21 @@ struct AnalysisSameEventPairing { } } - template - void runEmuSameSideMixing(TEvents& events, Preslice& preslice1, TTrackAssocs const& assocs1, TTracks const& tracks1, - Preslice& preslice2, TMuonAssocs const& assocs2, TMuons const& tracks2) - { + template + void runEmuSameSideMixing(TEvents &events, Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const &tracks1, + Preslice &preslice2, + TMuonAssocs const &assocs2, TMuons const &tracks2) { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { + for (auto const &[event1, event2] : + selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event1, dqefficiency_helpers::varValues()); + VarManager::FillEvent(event1, + dqefficiency_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event1.globalIndex()); groupedAssocs1.bindExternalIndices(&events); @@ -3085,85 +4240,121 @@ struct AnalysisSameEventPairing { if (groupedAssocs2.size() == 0) { continue; } - runEmuMixedPairing(groupedAssocs1, groupedAssocs2, tracks1, tracks2); + runEmuMixedPairing( + groupedAssocs1, groupedAssocs2, tracks1, tracks2); } } - void processAllSkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + void processAllSkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runSameEventPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks, + mcEvents, mcTracks); + runSameEventPairing( + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } - void processBarrelOnlySkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); + void processBarrelOnlySkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runSameEventPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks, + mcEvents, mcTracks); runMCGen(events, mcEvents, mcTracks); } - void processBarrelOnlyWithCollSkimmed(MyEventsVtxCovSelectedInfo const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); + void processBarrelOnlyWithCollSkimmed( + MyEventsVtxCovSelectedInfo const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); runMCGen(events, mcEvents, mcTracks); } - void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + void processMuonOnlySkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runSameEventPairing( + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); // Feature replaced by processMCGen /* if (fConfigMC.runMCGenPair) { runMCGen(mcEvents, mcTracks); }*/ } - void processMuonOnlyVertexingSkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + void processMuonOnlyVertexingSkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runSameEventPairing( + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } - PresliceUnsorted perReducedMcGenEvent = aod::reducedtrackMC::reducedMCeventId; + PresliceUnsorted perReducedMcGenEvent = + aod::reducedtrackMC::reducedMCeventId; - void processMCGen(soa::Filtered const& events, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + void processMCGen(soa::Filtered const &events, + ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { // Fill Generated histograms taking into account all generated tracks uint32_t mcDecision = 0; int isig = 0; - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); - // NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete. - // NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member. + // NOTE: Signals are checked here mostly based on the skimmed MC stack, so + // depending on the requested signal, the stack could be incomplete. NOTE: + // However, the working model is that the decisions on MC signals are + // precomputed during skimming and are stored in the mcReducedFlags + // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { - fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } // Fill Generated histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } if (!event.has_reducedMCevent()) { continue; } - VarManager::FillEvent(event, dqefficiency_helpers::varValues()); - VarManager::FillEvent(event.reducedMCevent(), dqefficiency_helpers::varValues()); - // auto groupedMCTracks = mcTracks.sliceBy(perReducedMcGenEvent, event.reducedMCeventId()); + VarManager::FillEvent(event, + dqefficiency_helpers::varValues()); + VarManager::FillEvent( + event.reducedMCevent(), dqefficiency_helpers::varValues()); + // auto groupedMCTracks = mcTracks.sliceBy(perReducedMcGenEvent, + // event.reducedMCeventId()); // groupedMCTracks.bindInternalIndicesTo(&mcTracks); // for (auto const& track : groupedMCTracks) { - for (auto const& track : mcTracks) { + for (auto const &track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -3172,15 +4363,29 @@ struct AnalysisSameEventPairing { // auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); - fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); - MCTruthTableEffi(VarManager::fgValues[VarManager::kMCPt], VarManager::fgValues[VarManager::kMCEta], VarManager::fgValues[VarManager::kMCY], VarManager::fgValues[VarManager::kMCPhi], VarManager::fgValues[VarManager::kMCVz], VarManager::fgValues[VarManager::kMCVtxZ], VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); + fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); + MCTruthTableEffi( + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { - auto mcEvent = mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); - dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); + auto mcEvent = + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), + track_raw.pt(), track_raw.eta(), + track_raw.phi(), -999, -999, -999); } } isig++; @@ -3188,24 +4393,26 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { - VarManager::FillPairMC(t1, t2); // NOTE: This feature will only work for muons - fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); + VarManager::FillPairMC( + t1, t2); // NOTE: This feature will only work for muons + fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } // Fill Generated PAIR histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -3214,7 +4421,7 @@ struct AnalysisSameEventPairing { } if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { if (t1.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -3226,17 +4433,22 @@ struct AnalysisSameEventPairing { if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { - if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here + for (auto const &sig : fGenMCSignals) { + if (sig->GetNProngs() != + 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); - VarManager::FillPairMC(t1, t2); // NOTE: This feature will only work for muons - fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); + VarManager::FillPairMC( + t1, t2); // NOTE: This feature will only work for muons + fHistMan->FillHistClass( + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked - dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi()); + dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), + t1.phi(), t2.pt(), t2.eta(), t2.phi()); } } isig++; @@ -3247,24 +4459,30 @@ struct AnalysisSameEventPairing { } // end loop over reconstructed events } - void processMCGenWithGrouping(soa::Filtered const& events, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + void + processMCGenWithGrouping(soa::Filtered const &events, + ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { uint32_t mcDecision = 0; int isig = 0; - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); - // NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete. - // NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member. + // NOTE: Signals are checked here mostly based on the skimmed MC stack, so + // depending on the requested signal, the stack could be incomplete. NOTE: + // However, the working model is that the decisions on MC signals are + // precomputed during skimming and are stored in the mcReducedFlags + // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { - fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } // Fill Generated histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -3272,7 +4490,7 @@ struct AnalysisSameEventPairing { continue; } - for (auto const& track : mcTracks) { + for (auto const &track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -3280,15 +4498,29 @@ struct AnalysisSameEventPairing { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); - fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); - MCTruthTableEffi(VarManager::fgValues[VarManager::kMCPt], VarManager::fgValues[VarManager::kMCEta], VarManager::fgValues[VarManager::kMCY], VarManager::fgValues[VarManager::kMCPhi], VarManager::fgValues[VarManager::kMCVz], VarManager::fgValues[VarManager::kMCVtxZ], VarManager::fgValues[VarManager::kMultFT0A], VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kVtxNcontribReal]); + fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); + MCTruthTableEffi( + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { - auto mcEvent = mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); - dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); + auto mcEvent = + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), + track_raw.pt(), track_raw.eta(), + track_raw.phi(), -999, -999, -999); } } isig++; @@ -3296,23 +4528,25 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { - VarManager::FillPairMC(t1, t2); // NOTE: This feature will only work for muons - fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); + VarManager::FillPairMC( + t1, t2); // NOTE: This feature will only work for muons + fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -3321,25 +4555,32 @@ struct AnalysisSameEventPairing { } // CURRENTLY ONLY FOR 1-GENERATION 2-PRONG SIGNALS if (fHasTwoProngGenMCsignals) { - auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + auto groupedMCTracks = + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& [t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) { + for (auto const &[t1, t2] : + combinations(groupedMCTracks, groupedMCTracks)) { auto t1_raw = groupedMCTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { - if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here + for (auto const &sig : fGenMCSignals) { + if (sig->GetNProngs() != + 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); - VarManager::FillPairMC(t1, t2); // NOTE: This feature will only work for muons - fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); + VarManager::FillPairMC( + t1, t2); // NOTE: This feature will only work for muons + fHistMan->FillHistClass( + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked - dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi()); + dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), + t1.phi(), t2.pt(), t2.eta(), t2.phi()); } } isig++; @@ -3350,88 +4591,162 @@ struct AnalysisSameEventPairing { } } - void processElectronMuonSkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runEmuSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + void processElectronMuonSkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runEmuSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } - void processMixingElectronMuonSkimmed(soa::Filtered& events, - soa::Join const& barrelAssocs, MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runEmuSameSideMixing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, muonAssocsPerCollision, muonAssocs, muons); + void processMixingElectronMuonSkimmed( + soa::Filtered &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runEmuSameSideMixing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisSameEventPairing, processAllSkimmed, "Run all types of pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, "Run barrel only pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, "Run barrel only pairing, with skimmed tracks and with collision information", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, "Run muon only pairing with two-prong vertexing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, "Run electron-muon mixing pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMCGen, "Loop over MC particle stack and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMCGenWithGrouping, "Loop over MC particle stack (grouped MCTracks) and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processDummy, "Dummy function, enabled only if none of the others are enabled", true); + PROCESS_SWITCH(AnalysisSameEventPairing, processAllSkimmed, + "Run all types of pairing, with skimmed tracks/muons", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, + "Run barrel only pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, + "Run barrel only pairing, with skimmed tracks and with " + "collision information", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, + "Run muon only pairing, with skimmed tracks", false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, + "Run electron-muon pairing, with skimmed tracks/muons", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, + "Run electron-muon mixing pairing, with skimmed tracks/muons", + false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMCGenWithGrouping, + "Loop over MC particle stack (grouped MCTracks) and fill " + "generator level histograms", + false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; -// Run pairing for resonance with legs fulfilling separate cuts (asymmetric decay channel) +// Run pairing for resonance with legs fulfilling separate cuts (asymmetric +// decay channel) struct AnalysisAsymmetricPairing { Produces ditrackList; Produces ditrackExtraList; - o2::base::MatLayerCylSet* fLUT = nullptr; - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + o2::base::MatLayerCylSet *fLUT = nullptr; + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. // Output objects OutputObj fOutputList{"output"}; // Configurables - Configurable fConfigLegCuts{"cfgLegCuts", "", ":[:],[:[:],...]"}; - Configurable fConfigLegAFilterMask{"cfgLegAFilterMask", 0, "Filter mask corresponding to cuts in event-selection"}; - Configurable fConfigLegBFilterMask{"cfgLegBFilterMask", 0, "Filter mask corresponding to cuts in event-selection"}; - Configurable fConfigLegCFilterMask{"cfgLegCFilterMask", 0, "Filter mask corresponding to cuts in event-selection"}; - Configurable fConfigCommonTrackCuts{"cfgCommonTrackCuts", "", "Comma separated list of cuts to be applied to all legs"}; - Configurable fConfigPairCuts{"cfgPairCuts", "", "Comma separated list of pair cuts"}; - Configurable fConfigPairCutsJSON{"cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; - Configurable fConfigSkipAmbiguousIdCombinations{"cfgSkipAmbiguousIdCombinations", true, "Choose whether to skip pairs/triples which pass a stricter combination of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; - - Configurable fConfigHistogramSubgroups{"cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", "Comma separated list of asymmetric-pairing histogram subgroups"}; - Configurable fConfigSameSignHistograms{"cfgSameSignHistograms", false, "Include same sign pair histograms for 2-prong decays"}; - // Configurable fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", false, "Include separate histograms for pairs/triplets with ambiguous tracks"}; - Configurable fConfigReflectedHistograms{"cfgReflectedHistograms", false, "Include separate histograms for pairs which are reflections of previously counted pairs"}; + Configurable fConfigLegCuts{ + "cfgLegCuts", "", + ":[:],[:[:],...]"}; + Configurable fConfigLegAFilterMask{ + "cfgLegAFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; + Configurable fConfigLegBFilterMask{ + "cfgLegBFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; + Configurable fConfigLegCFilterMask{ + "cfgLegCFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; + Configurable fConfigCommonTrackCuts{ + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; + Configurable fConfigPairCuts{ + "cfgPairCuts", "", "Comma separated list of pair cuts"}; + Configurable fConfigPairCutsJSON{ + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + Configurable fConfigSkipAmbiguousIdCombinations{ + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + + Configurable fConfigHistogramSubgroups{ + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; + Configurable fConfigSameSignHistograms{ + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; + // Configurable fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", + // false, "Include separate histograms for pairs/triplets with ambiguous + // tracks"}; + Configurable fConfigReflectedHistograms{ + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable fConfigGRPMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - - Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - Configurable fConfigUseAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; - - Configurable fConfigMCGenSignals{"cfgBarrelMCGenSignals", "", "Comma separated list of MC signals (generated)"}; - Configurable fConfigMCRecSignals{"cfgBarrelMCRecSignals", "", "Comma separated list of MC signals (reconstructed)"}; - Configurable fConfigMCRecSignalsJSON{"cfgMCRecSignalsJSON", "", "Additional list of MC signals (reconstructed) via JSON"}; - Configurable fConfigMCGenSignalsJSON{"cfgMCGenSignalsJSON", "", "Comma separated list of MC signals (generated) via JSON"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable fConfigGRPMagPath{ + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + + Configurable fConfigUseKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; + Configurable fConfigUseAbsDCA{ + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; + Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", + "Path of the Lut parametrization"}; + + Configurable fConfigMCGenSignals{ + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; + Configurable fConfigMCRecSignals{ + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; + Configurable fConfigMCRecSignalsJSON{ + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; + Configurable fConfigMCGenSignalsJSON{ + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; // Filter masks to find legs in BarrelTrackCuts table uint32_t fLegAFilterMask = 0; @@ -3449,27 +4764,36 @@ struct AnalysisAsymmetricPairing { int fNLegCuts = 0; int fNPairCuts = 0; int fNCommonTrackCuts = 0; - // vectors for cut names and signal names, for easy access when calling FillHistogramList() + // vectors for cut names and signal names, for easy access when calling + // FillHistogramList() std::vector fLegCutNames; std::vector fPairCutNames; std::vector fCommonCutNames; std::vector fRecMCSignalNames; - Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); + Filter eventFilter = aod::dqanalysisflags::isEventSelected > + static_cast(0); - Preslice> trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + Preslice> + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs - Partition> legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegAFilterMask) > static_cast(0); - Partition> legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegBFilterMask) > static_cast(0); - Partition> legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegCFilterMask) > static_cast(0); + Partition> + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); + Partition> + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); + Partition> + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext& context) - { - bool isMCGen = context.mOptions.get("processMCGen") || context.mOptions.get("processMCGenWithEventSelection"); + void init(o2::framework::InitContext &context) { + bool isMCGen = context.mOptions.get("processMCGen") || + context.mOptions.get("processMCGenWithEventSelection"); if (context.mOptions.get("processDummy")) { return; } @@ -3477,7 +4801,8 @@ struct AnalysisAsymmetricPairing { VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); // Get the leg cut filter masks fLegAFilterMask = fConfigLegAFilterMask.value; @@ -3489,15 +4814,17 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fPairCuts.push_back(dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fPairCuts.push_back( + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -3511,7 +4838,8 @@ struct AnalysisAsymmetricPairing { TString sigNamesStr = fConfigMCRecSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { fRecMCSignals.push_back(sig); } @@ -3519,10 +4847,13 @@ struct AnalysisAsymmetricPairing { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2 && mcIt->GetNProngs() != 3) { - LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " << "does not have 2 or 3 prongs! Fix it"; + LOG(fatal) << "Signal at reconstructed level requested (" + << mcIt->GetName() << ") " + << "does not have 2 or 3 prongs! Fix it"; } fRecMCSignals.push_back(mcIt); sigNamesStr += Form(",%s", mcIt->GetName()); @@ -3536,14 +4867,18 @@ struct AnalysisAsymmetricPairing { // Get the barrel track selection cuts std::string tempCuts; - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; - // check also the cuts added via JSON and add them to the std::string of cuts - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, false); + // check also the cuts added via JSON and add them to the std::string of + // cuts + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -3557,23 +4892,44 @@ struct AnalysisAsymmetricPairing { for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { commonCutIdx = objArray->IndexOf(objArrayCommon->At(icut)); if (commonCutIdx >= 0) { - fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); - fCommonTrackCutFilterMasks[icut] = static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); + fCommonTrackCutMask |= static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); + fCommonTrackCutFilterMasks[icut] = + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { - LOGF(fatal, "Common track cut %s was not calculated upstream. Check the config!", objArrayCommon->At(icut)->GetName()); + LOGF(fatal, + "Common track cut %s was not calculated upstream. Check the " + "config!", + objArrayCommon->At(icut)->GetName()); } } } // Check that the leg cut masks make sense - if (static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegAFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1, objArray->GetEntries()); - } - if (static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegBFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1, objArray->GetEntries()); - } - if (static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegCFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1, objArray->GetEntries()); + if (static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegAFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1, + objArray->GetEntries()); + } + if (static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegBFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1, + objArray->GetEntries()); + } + if (static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegCFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1, + objArray->GetEntries()); } // Get the cuts defining the legs @@ -3599,33 +4955,43 @@ struct AnalysisAsymmetricPairing { } else if (legs->GetEntries() == 2) { isThreeProng.push_back(false); } else { - LOGF(fatal, "Leg cuts %s has the wrong format and could not be parsed!", legsStr.Data()); + LOGF(fatal, "Leg cuts %s has the wrong format and could not be parsed!", + legsStr.Data()); continue; } // Find leg cuts in the track selection cuts legAIdx = objArray->IndexOf(legs->At(0)); if (legAIdx >= 0) { fConstructedLegAFilterMask |= static_cast(1) << legAIdx; - fConstructedLegAFilterMasksMap[icut] |= static_cast(1) << legAIdx; + fConstructedLegAFilterMasksMap[icut] |= static_cast(1) + << legAIdx; } else { - LOGF(fatal, "Leg A cut %s was not calculated upstream. Check the config!", legs->At(0)->GetName()); + LOGF(fatal, + "Leg A cut %s was not calculated upstream. Check the config!", + legs->At(0)->GetName()); continue; } legBIdx = objArray->IndexOf(legs->At(1)); if (legBIdx >= 0) { fConstructedLegBFilterMask |= static_cast(1) << legBIdx; - fConstructedLegBFilterMasksMap[icut] |= static_cast(1) << legBIdx; + fConstructedLegBFilterMasksMap[icut] |= static_cast(1) + << legBIdx; } else { - LOGF(fatal, "Leg B cut %s was not calculated upstream. Check the config!", legs->At(1)->GetName()); + LOGF(fatal, + "Leg B cut %s was not calculated upstream. Check the config!", + legs->At(1)->GetName()); continue; } if (isThreeProng[icut]) { legCIdx = objArray->IndexOf(legs->At(2)); if (legCIdx >= 0) { fConstructedLegCFilterMask |= static_cast(1) << legCIdx; - fConstructedLegCFilterMasksMap[icut] |= static_cast(1) << legCIdx; + fConstructedLegCFilterMasksMap[icut] |= static_cast(1) + << legCIdx; } else { - LOGF(fatal, "Leg C cut %s was not calculated upstream. Check the config!", legs->At(2)->GetName()); + LOGF(fatal, + "Leg C cut %s was not calculated upstream. Check the config!", + legs->At(2)->GetName()); continue; } } @@ -3634,44 +5000,82 @@ struct AnalysisAsymmetricPairing { // Define histogram and histogram directory names if (isThreeProng[icut]) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s", legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); if (fConfigQA) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } TString pairCutNamesStr = fConfigPairCuts.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(pairCutNamesStr.Tokenize(",")); + std::unique_ptr objArrayPair( + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s", legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) - // TODO: assign hist directories for the MC matched triplets for each (leg cut combo,MCsignal) combination + // TODO: assign hist directories for the MC matched triplets for each + // (leg cut combo,MCsignal) combination if (!sigNamesStr.IsNull()) { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); - - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); + + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), objArrayPair->At(iPairCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + std::unique_ptr objArrayPair( + cutNamesStr.Tokenize(",")); + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts + DefineHistograms( + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayPair->At(iPairCut)->GetName(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms( + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) @@ -3686,69 +5090,129 @@ struct AnalysisAsymmetricPairing { fNPairHistPrefixes = pairHistPrefixes.size(); for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigQA) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_ambiguous_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_ambiguous_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } } if (fConfigReflectedHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_reflected_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_reflected_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } } if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) - // assign hist directories for the MC matched triplets for each (leg cut combo,MCsignal) combination + // assign hist directories for the MC matched triplets for each (leg cut + // combo,MCsignal) combination if (!sigNamesStr.IsNull()) { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (fConfigReflectedHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_reflected_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_reflected_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } if (!cutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + std::unique_ptr objArrayPair( + cutNamesStr.Tokenize(",")); + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayPair->At(iPairCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; + ++iPrefix) { + DefineHistograms( + fHistMan, + Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } // end loop (common cuts) } // end loop (pair cuts) @@ -3759,16 +5223,26 @@ struct AnalysisAsymmetricPairing { } // Add histogram classes for each specified MCsignal at the generator level - // TODO: create a std::vector of hist classes to be used at Fill time, to avoid using Form in the process function + // TODO: create a std::vector of hist classes to be used at Fill time, to + // avoid using Form in the process function TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); - DefineHistograms(fHistMan, Form("MCTruthGen_%s;", sig->GetName()), fConfigHistogramSubgroups.value.data()); // TODO: Add these names to a std::vector to avoid using Form in the process function - DefineHistograms(fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), fConfigHistogramSubgroups.value.data()); // TODO: Add these names to a std::vector to avoid using Form in the process function + DefineHistograms( + fHistMan, Form("MCTruthGen_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function + DefineHistograms( + fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } @@ -3776,30 +5250,50 @@ struct AnalysisAsymmetricPairing { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); - DefineHistograms(fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), fConfigHistogramSubgroups.value.data()); // TODO: Add these names to a std::vector to avoid using Form in the process function - DefineHistograms(fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), fConfigHistogramSubgroups.value.data()); // TODO: Add these names to a std::vector to avoid using Form in the process function + DefineHistograms( + fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function + DefineHistograms( + fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } // Make sure the leg cuts are covered by the configured filter masks if (fLegAFilterMask != fConstructedLegAFilterMask) { - LOGF(fatal, "cfgLegAFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegAFilterMask, fConstructedLegAFilterMask); + LOGF(fatal, + "cfgLegAFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegAFilterMask, fConstructedLegAFilterMask); } if (fLegBFilterMask != fConstructedLegBFilterMask) { - LOGF(fatal, "cfgLegBFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegBFilterMask, fConstructedLegBFilterMask); + LOGF(fatal, + "cfgLegBFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegBFilterMask, fConstructedLegBFilterMask); } if (fLegCFilterMask != fConstructedLegCFilterMask) { - LOGF(fatal, "cfgLegCFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegCFilterMask, fConstructedLegCFilterMask); + LOGF(fatal, + "cfgLegCFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegCFilterMask, fConstructedLegCFilterMask); } // Make sure only pairs or only triplets of leg cuts were given - int tripletCheckSum = std::count(isThreeProng.begin(), isThreeProng.end(), true); + int tripletCheckSum = + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check your config!"); + LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -3808,45 +5302,64 @@ struct AnalysisAsymmetricPairing { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); - fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigLutPath)); + fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); - dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (isTriplets) { if (fConfigUseKFVertexing.value) { VarManager::SetupThreeProngKFParticle(magField); } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, + 1.0e-3f, 0.9f, + fConfigUseAbsDCA.value); } } else { if (fConfigUseKFVertexing.value) { VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } - // Template function to run same event pairing with asymmetric pairs (e.g. kaon-pion) - template - void runAsymmetricPairing(TEvents const& events, Preslice& preslice, TTrackAssocs const& /*assocs*/, TTracks const& /*tracks*/, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& /*mcTracks*/) - { + // Template function to run same event pairing with asymmetric pairs (e.g. + // kaon-pion) + template + void runAsymmetricPairing(TEvents const &events, + Preslice &preslice, + TTrackAssocs const & /*assocs*/, + TTracks const & /*tracks*/, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/) { fPairCount.clear(); - if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber() + if (events.size() > 0) { // Additional protection to avoid crashing of + // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), false); fCurrentRun = events.begin().runNumber(); @@ -3859,26 +5372,32 @@ struct AnalysisAsymmetricPairing { ditrackList.reserve(1); ditrackExtraList.reserve(1); - constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + constexpr bool trackHasCov = + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqefficiency_helpers::varValues()); + VarManager::FillEvent(event, + dqefficiency_helpers::varValues()); - auto groupedLegAAssocs = legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegAAssocs = + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } - auto groupedLegBAssocs = legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegBAssocs = + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : combinations(soa::CombinationsFullIndexPolicy(groupedLegAAssocs, groupedLegBAssocs))) { + for (auto const &[a1, a2] : combinations(soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs))) { uint32_t twoTrackFilter = 0; uint32_t twoTrackCommonFilter = 0; @@ -3886,10 +5405,14 @@ struct AnalysisAsymmetricPairing { bool isPairIdWrong = false; for (int icut = 0; icut < fNLegCuts; ++icut) { // Find leg pair definitions both candidates participate in - if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut])) { + if ((a1.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) && + (a2.isBarrelSelected_raw() & + fConstructedLegBFilterMasksMap[icut])) { twoTrackFilter |= static_cast(1) << icut; // If the supposed pion passes a kaon cut, this is a K+K-. Skip it. - if (TPairType == VarManager::kDecayToKPi && fConfigSkipAmbiguousIdCombinations.value) { + if (TPairType == VarManager::kDecayToKPi && + fConfigSkipAmbiguousIdCombinations.value) { if (a2.isBarrelSelected_raw() & fLegAFilterMask) { isPairIdWrong = true; } @@ -3902,7 +5425,8 @@ struct AnalysisAsymmetricPairing { } // Find common track cuts both candidates pass - twoTrackCommonFilter |= a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & fCommonTrackCutMask; + twoTrackCommonFilter |= a1.isBarrelSelected_raw() & + a2.isBarrelSelected_raw() & fCommonTrackCutMask; auto t1 = a1.template reducedtrack_as(); auto t2 = a2.template reducedtrack_as(); @@ -3913,9 +5437,11 @@ struct AnalysisAsymmetricPairing { } bool isReflected = false; - std::pair trackIds(t1.globalIndex(), t2.globalIndex()); + std::pair trackIds(t1.globalIndex(), + t2.globalIndex()); if (fPairCount.contains(trackIds)) { - // Double counting is possible due to track-collision ambiguity. Skip pairs which were counted before + // Double counting is possible due to track-collision ambiguity. Skip + // pairs which were counted before fPairCount[trackIds] += 1; continue; } @@ -3926,21 +5452,27 @@ struct AnalysisAsymmetricPairing { sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter - if (t1.barrelAmbiguityInBunch() > 1 || t1.barrelAmbiguityOutOfBunch() > 1) { + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter + if (t1.barrelAmbiguityInBunch() > 1 || + t1.barrelAmbiguityOutOfBunch() > 1) { twoTrackFilter |= static_cast(1) << 30; } - if (t2.barrelAmbiguityInBunch() > 1 || t2.barrelAmbiguityOutOfBunch() > 1) { + if (t2.barrelAmbiguityInBunch() > 1 || + t2.barrelAmbiguityOutOfBunch() > 1) { twoTrackFilter |= static_cast(1) << 31; } // run MC matching for this pair int iSigMc = 0; mcDecision = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, iSigMc++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, iSigMc++) { if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { - VarManager::FillPairMC(t1.reducedMCTrack(), t2.reducedMCTrack()); - if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack())) { + VarManager::FillPairMC(t1.reducedMCTrack(), + t2.reducedMCTrack()); + if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), + t2.reducedMCTrack())) { mcDecision |= static_cast(1) << iSigMc; } } @@ -3948,83 +5480,153 @@ struct AnalysisAsymmetricPairing { VarManager::FillPair(t1, t2); if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } // Fill histograms bool isAmbi = false; for (int icut = 0; icut < fNLegCuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { - isAmbi = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); - if (sign1 * sign2 < 0) { // +- pairs - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); // reconstructed, unmatched + isAmbi = (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); + if (sign1 * sign2 < 0) { // +- pairs + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_reflected_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_reflected_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { // ++ pairs - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_reflected_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_reflected_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } } else { // -- pairs - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms) { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_reflected_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_reflected_%s", + fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } } } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_reflected_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_reflected_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_reflected_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } } } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (twoTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (twoTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -4032,55 +5634,118 @@ struct AnalysisAsymmetricPairing { } } // end loop (common cuts) int iPairCut = 0; - for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { - if (!((*cut)->IsSelected(dqefficiency_helpers::varValues()))) { // apply pair cuts + for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); + cut++, iPairCut++) { + if (!((*cut)->IsSelected( + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); // Histograms with pair cuts if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } } // Histograms with pair cuts and common track cuts - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - if (twoTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + if (twoTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } } - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -4090,90 +5755,126 @@ struct AnalysisAsymmetricPairing { } // end loop (pair cuts) } } // end loop (cuts) - ditrackList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], - t1.sign() + t2.sign(), twoTrackFilter, pairFilter, twoTrackCommonFilter); + ditrackList( + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { - ditrackExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); + ditrackExtraList( + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop } // Template function to run same event triplets (e.g. D+->K-pi+pi+) - template - void runThreeProng(TEvents const& events, Preslice& preslice, TTrackAssocs const& /*assocs*/, TTracks const& tracks, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& /*mcTracks*/, VarManager::PairCandidateType tripletType) - { - if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber() + template + void runThreeProng(TEvents const &events, Preslice &preslice, + TTrackAssocs const & /*assocs*/, TTracks const &tracks, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/, + VarManager::PairCandidateType tripletType) { + if (events.size() > 0) { // Additional protection to avoid crashing of + // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), true); fCurrentRun = events.begin().runNumber(); } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqefficiency_helpers::varValues()); + VarManager::FillEvent(event, + dqefficiency_helpers::varValues()); - auto groupedLegAAssocs = legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegAAssocs = + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } - auto groupedLegBAssocs = legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegBAssocs = + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - auto groupedLegCAssocs = legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegCAssocs = + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const& [a1, a2, a3] : combinations(soa::CombinationsFullIndexPolicy(groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { - readTriplet(a1, a2, a3, tracks, event, tripletType); + for (auto const &[a1, a2, a3] : + combinations(soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + readTriplet( + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const& a1 : groupedLegAAssocs) { - for (auto const& [a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { - readTriplet(a1, a2, a3, tracks, event, tripletType); + for (auto const &a1 : groupedLegAAssocs) { + for (auto const &[a2, a3] : + combinations(groupedLegBAssocs, groupedLegCAssocs)) { + readTriplet( + a1, a2, a3, tracks, event, tripletType); } } } else { - LOG(fatal) << "Given tripletType not recognized. Don't know how to make combinations!"; + LOG(fatal) << "Given tripletType not recognized. Don't know how to " + "make combinations!"; } } // end event loop } // Helper function to process triplet - template - void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, TTrackAssoc const& a3, TTracks const& /*tracks*/, TEvent const& event, VarManager::PairCandidateType tripletType) - { + template + void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, + TTrackAssoc const &a3, TTracks const & /*tracks*/, + TEvent const &event, + VarManager::PairCandidateType tripletType) { uint32_t mcDecision = 0; uint32_t threeTrackFilter = 0; uint32_t threeTrackCommonFilter = 0; for (int icut = 0; icut < fNLegCuts; ++icut) { // Find out which leg cut combinations the triplet passes - if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut]) && (a3.isBarrelSelected_raw() & fConstructedLegCFilterMasksMap[icut])) { + if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && + (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut]) && + (a3.isBarrelSelected_raw() & fConstructedLegCFilterMasksMap[icut])) { threeTrackFilter |= (static_cast(1) << icut); - if (tripletType == VarManager::kTripleCandidateToPKPi && fConfigSkipAmbiguousIdCombinations.value) { - // Check if the supposed pion passes as a proton or kaon, if so, skip this triplet. It is pKp or pKK. - if ((a3.isBarrelSelected_raw() & fLegAFilterMask) || (a3.isBarrelSelected_raw() & fLegBFilterMask)) { + if (tripletType == VarManager::kTripleCandidateToPKPi && + fConfigSkipAmbiguousIdCombinations.value) { + // Check if the supposed pion passes as a proton or kaon, if so, skip + // this triplet. It is pKp or pKK. + if ((a3.isBarrelSelected_raw() & fLegAFilterMask) || + (a3.isBarrelSelected_raw() & fLegBFilterMask)) { return; } - // Check if the supposed kaon passes as a proton, if so, skip this triplet. It is ppPi. + // Check if the supposed kaon passes as a proton, if so, skip this + // triplet. It is ppPi. if (a2.isBarrelSelected_raw() & fLegAFilterMask) { return; } } - if (tripletType == VarManager::kTripleCandidateToKPiPi && fConfigSkipAmbiguousIdCombinations.value) { - // Check if one of the supposed pions pass as a kaon, if so, skip this triplet. It is KKPi. - if ((a2.isBarrelSelected_raw() & fLegAFilterMask) || (a3.isBarrelSelected_raw() & fLegAFilterMask)) { + if (tripletType == VarManager::kTripleCandidateToKPiPi && + fConfigSkipAmbiguousIdCombinations.value) { + // Check if one of the supposed pions pass as a kaon, if so, skip this + // triplet. It is KKPi. + if ((a2.isBarrelSelected_raw() & fLegAFilterMask) || + (a3.isBarrelSelected_raw() & fLegAFilterMask)) { return; } } @@ -4184,7 +5885,9 @@ struct AnalysisAsymmetricPairing { } // Find common track cuts all candidates pass - threeTrackCommonFilter |= a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a3.isBarrelSelected_raw() & fCommonTrackCutMask; + threeTrackCommonFilter |= a1.isBarrelSelected_raw() & + a2.isBarrelSelected_raw() & + a3.isBarrelSelected_raw() & fCommonTrackCutMask; auto t1 = a1.template reducedtrack_as(); auto t2 = a2.template reducedtrack_as(); @@ -4196,17 +5899,20 @@ struct AnalysisAsymmetricPairing { } // Check charge if (tripletType == VarManager::kTripleCandidateToKPiPi) { - if (!((t1.sign() == -1 && t2.sign() == 1 && t3.sign() == 1) || (t1.sign() == 1 && t2.sign() == -1 && t3.sign() == -1))) { + if (!((t1.sign() == -1 && t2.sign() == 1 && t3.sign() == 1) || + (t1.sign() == 1 && t2.sign() == -1 && t3.sign() == -1))) { return; } } if (tripletType == VarManager::kTripleCandidateToPKPi) { - if (!((t1.sign() == 1 && t2.sign() == -1 && t3.sign() == 1) || (t1.sign() == -1 && t2.sign() == 1 && t3.sign() == -1))) { + if (!((t1.sign() == 1 && t2.sign() == -1 && t3.sign() == 1) || + (t1.sign() == -1 && t2.sign() == 1 && t3.sign() == -1))) { return; } } - // store the ambiguity of the three legs in the last 3 digits of the two-track filter + // store the ambiguity of the three legs in the last 3 digits of the + // two-track filter if (t1.barrelAmbiguityInBunch() > 1 || t1.barrelAmbiguityOutOfBunch() > 1) { threeTrackFilter |= (static_cast(1) << 29); } @@ -4220,62 +5926,108 @@ struct AnalysisAsymmetricPairing { // run MC matching for this triplet int iSigMc = 0; mcDecision = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, iSigMc++) { - if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack() && t3.has_reducedMCTrack()) { - if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack(), t3.reducedMCTrack())) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, iSigMc++) { + if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack() && + t3.has_reducedMCTrack()) { + if ((*sig)->CheckSignal(true, t1.reducedMCTrack(), t2.reducedMCTrack(), + t3.reducedMCTrack())) { mcDecision |= (static_cast(1) << iSigMc); } } } // end loop over MC signals - VarManager::FillTriple(t1, t2, t3, dqefficiency_helpers::varValues(), tripletType); + VarManager::FillTriple(t1, t2, t3, dqefficiency_helpers::varValues(), + tripletType); if constexpr (TThreeProngFitter) { - VarManager::FillTripletVertexing(event, t1, t2, t3, tripletType); + VarManager::FillTripletVertexing( + event, t1, t2, t3, tripletType); } // Fill histograms bool isAmbi = false; for (int icut = 0; icut < fNLegCuts; icut++) { - isAmbi = (threeTrackFilter & (static_cast(1) << 29)) || (threeTrackFilter & (static_cast(1) << 30)) || (threeTrackFilter & (static_cast(1) << 31)); + isAmbi = (threeTrackFilter & (static_cast(1) << 29)) || + (threeTrackFilter & (static_cast(1) << 30)) || + (threeTrackFilter & (static_cast(1) << 31)); if (threeTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); // matched signal + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) if (fConfigQA && isAmbi) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); // matched signal + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } } // end loop (common cuts) int iPairCut = 0; - for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { - if (!((*cut)->IsSelected(dqefficiency_helpers::varValues()))) { // apply pair cuts + for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); + cut++, iPairCut++) { + if (!((*cut)->IsSelected( + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); // matched signal + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) // Histograms with pair cuts and common track cuts - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); - for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + if (threeTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); + for (unsigned int isig = 0; isig < fRecMCSignals.size(); + isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); // matched signal + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } @@ -4285,55 +6037,72 @@ struct AnalysisAsymmetricPairing { } // end loop (cuts) } - void processKaonPionSkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); + void processKaonPionSkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runAsymmetricPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks, + mcEvents, mcTracks); } - void processKaonPionSkimmedMultExtra(MyEventsVtxCovSelectedMultExtra const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); + void processKaonPionSkimmedMultExtra( + MyEventsVtxCovSelectedMultExtra const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runAsymmetricPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); } - void processKaonPionPionSkimmed(MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { - runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks, VarManager::kTripleCandidateToKPiPi); + void processKaonPionPionSkimmed( + MyEventsVtxCovSelected const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + runThreeProng( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks, VarManager::kTripleCandidateToKPiPi); } - void processMCGen(ReducedMCTracks const& mcTracks) - { + void processMCGen(ReducedMCTracks const &mcTracks) { // loop over mc stack and fill histograms for pure MC truth signals - // group all the MC tracks which belong to the MC event corresponding to the current reconstructed event - // auto groupedMCTracks = tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, event.reducedMCevent().globalIndex()); - for (auto const& mctrack : mcTracks) { + // group all the MC tracks which belong to the MC event corresponding to the + // current reconstructed event auto groupedMCTracks = + // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, + // event.reducedMCevent().globalIndex()); + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); - // NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete. - // NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member. + // NOTE: Signals are checked here mostly based on the skimmed MC stack, so + // depending on the requested signal, the stack could be incomplete. NOTE: + // However, the working model is that the decisions on MC signals are + // precomputed during skimming and are stored in the mcReducedFlags + // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { - fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } - PresliceUnsorted perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId; + PresliceUnsorted perReducedMcEvent = + aod::reducedtrackMC::reducedMCeventId; - void processMCGenWithEventSelection(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { - for (auto const& event : events) { + void processMCGenWithEventSelection( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4341,125 +6110,218 @@ struct AnalysisAsymmetricPairing { continue; } - auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + auto groupedMCTracks = + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { - fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } // end loop over reconstructed events } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmed, "Run kaon pion pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmedMultExtra, "Run kaon pion pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, "Run kaon pion pion triplets, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processMCGen, "Loop over MC particle stack and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processMCGenWithEventSelection, "Loop over MC particle stack and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processDummy, "Dummy function, enabled only if none of the others are enabled", true); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmed, + "Run kaon pion pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmedMultExtra, + "Run kaon pion pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, + "Run kaon pion pion triplets, with skimmed tracks", false); + PROCESS_SWITCH( + AnalysisAsymmetricPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); + PROCESS_SWITCH( + AnalysisAsymmetricPairing, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); + PROCESS_SWITCH( + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; -// Combines dileptons with barrel or muon tracks for either resonance or correlation analyses -// Dileptons produced with all the selection cuts specified in the same-event pairing task are combined with the -// tracks passing the fConfigTrackCut cut. The dileptons cuts from the same-event pairing task are auto-detected +// Combines dileptons with barrel or muon tracks for either resonance or +// correlation analyses Dileptons produced with all the selection cuts specified +// in the same-event pairing task are combined with the +// tracks passing the fConfigTrackCut cut. The dileptons cuts from the +// same-event pairing task are auto-detected struct AnalysisDileptonTrack { Produces BmesonsTable; Produces DileptonTrackTable; OutputObj fOutputList{"output"}; - Configurable fConfigTrackCuts{"cfgTrackCuts", "kaonPID", "Comma separated list of track cuts to be correlated with the dileptons"}; - Configurable fConfigDileptonLowMass{"cfgDileptonLowMass", 2.8, "Low mass cut for the dileptons used in analysis"}; - Configurable fConfigDileptonHighMass{"cfgDileptonHighMass", 3.2, "High mass cut for the dileptons used in analysis"}; - Configurable fConfigDileptonpTCut{"cfgDileptonpTCut", 0.0, "pT cut for dileptons used in the triplet vertexing"}; - Configurable fConfigDileptonLxyCut{"cfgDileptonLxyCut", 0.0, "Lxy cut for dileptons used in the triplet vertexing"}; - Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - Configurable fConfigDileptonLowpTCut{"cfgDileptonLowpTCut", 0.0, "Low pT cut for dileptons used in the triplet vertexing"}; - Configurable fConfigDileptonHighpTCut{"cfgDileptonHighpTCut", 1E5, "High pT cut for dileptons used in the triplet vertexing"}; - Configurable fConfigDileptonRapCutAbs{"cfgDileptonRapCutAbs", 1.0, "Rap cut for dileptons used in the triplet vertexing"}; - Configurable fConfigHistogramSubgroups{"cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", "Comma separated list of dilepton-track histogram subgroups"}; - Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - - Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - Configurable fConfigGeoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; - - Configurable fConfigMCRecSignals{"cfgMCRecSignals", "", "Comma separated list of MC signals (reconstructed)"}; - Configurable fConfigMCGenSignals{"cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; - Configurable fConfigMCRecSignalsJSON{"cfgMCRecSignalsJSON", "", "Additional list of MC signals (reconstructed) via JSON"}; - Configurable fConfigMCGenSignalsJSON{"cfgMCGenSignalsJSON", "", "Comma separated list of MC signals (generated) via JSON"}; - Configurable fConfigMCGenSignalDileptonLegPos{"cfgMCGenSignalDileptonLegPos", 0, "generator level positive dilepton leg signal (bit number according to table-maker)"}; - Configurable fConfigMCGenSignalDileptonLegNeg{"cfgMCGenSignalDileptonLegNeg", 0, "generator level negative dilepton leg signal (bit number according to table-maker)"}; - Configurable fConfigMCGenSignalHadron{"cfgMCGenSignalHadron", 0, "generator level associated hadron signal (bit number according to table-maker)"}; - Configurable fConfigMCGenDileptonLegPtMin{"cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; - Configurable fConfigMCGenHadronPtMin{"cfgMCGenHadronPtMin", 1.0f, "minimum pt for the hadron"}; - Configurable fConfigMCGenDileptonLegEtaAbs{"cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; - Configurable fConfigMCGenHadronEtaAbs{"cfgMCGenHadronEtaAbs", 0.9f, "eta abs range for the hadron"}; - Configurable fConfigUseMCRapcut{"cfgUseMCRapcut", false, "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; - Configurable fConfigUseCorrectlyAssociatedMC{"cfgUseCorrectlyAssociatedMC", true, "Use only correctly associated track to construct triplet"}; - Configurable fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"}; - - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + Configurable fConfigTrackCuts{ + "cfgTrackCuts", "kaonPID", + "Comma separated list of track cuts to be correlated with the dileptons"}; + Configurable fConfigDileptonLowMass{ + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; + Configurable fConfigDileptonHighMass{ + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; + Configurable fConfigDileptonpTCut{ + "cfgDileptonpTCut", 0.0, + "pT cut for dileptons used in the triplet vertexing"}; + Configurable fConfigDileptonLxyCut{ + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; + Configurable fConfigUseKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; + Configurable fConfigDileptonLowpTCut{ + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; + Configurable fConfigDileptonHighpTCut{ + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; + Configurable fConfigDileptonRapCutAbs{ + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; + Configurable fConfigHistogramSubgroups{ + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; + Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + + Configurable fConfigGRPmagPath{ + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + Configurable fConfigGeoPath{ + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + + Configurable fConfigMCRecSignals{ + "cfgMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; + Configurable fConfigMCGenSignals{ + "cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; + Configurable fConfigMCRecSignalsJSON{ + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; + Configurable fConfigMCGenSignalsJSON{ + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; + Configurable fConfigMCGenSignalDileptonLegPos{ + "cfgMCGenSignalDileptonLegPos", 0, + "generator level positive dilepton leg signal (bit number according to " + "table-maker)"}; + Configurable fConfigMCGenSignalDileptonLegNeg{ + "cfgMCGenSignalDileptonLegNeg", 0, + "generator level negative dilepton leg signal (bit number according to " + "table-maker)"}; + Configurable fConfigMCGenSignalHadron{ + "cfgMCGenSignalHadron", 0, + "generator level associated hadron signal (bit number according to " + "table-maker)"}; + Configurable fConfigMCGenDileptonLegPtMin{ + "cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; + Configurable fConfigMCGenHadronPtMin{"cfgMCGenHadronPtMin", 1.0f, + "minimum pt for the hadron"}; + Configurable fConfigMCGenDileptonLegEtaAbs{ + "cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; + Configurable fConfigMCGenHadronEtaAbs{"cfgMCGenHadronEtaAbs", 0.9f, + "eta abs range for the hadron"}; + Configurable fConfigUseMCRapcut{ + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; + Configurable fConfigUseCorrectlyAssociatedMC{ + "cfgUseCorrectlyAssociatedMC", true, + "Use only correctly associated track to construct triplet"}; + Configurable fConfigMixingDepth{"cfgMixingDepth", 5, + "Event mixing pool depth"}; + + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. int fNCuts = 0; int fNLegCuts = 0; int fNPairCuts = 0; int fNCommonTrackCuts = 0; std::map fCommonTrackCutMap; - uint32_t fTrackCutBitMap = 0; // track cut bit mask to be used in the selection of tracks associated with dileptons - // vector for single-lepton and track cut names for easy access when calling FillHistogramList() + uint32_t fTrackCutBitMap = 0; // track cut bit mask to be used in the + // selection of tracks associated with dileptons + // vector for single-lepton and track cut names for easy access when calling + // FillHistogramList() std::vector fTrackCutNames; std::vector fLegCutNames; - // vector for pair cut names, used mainly for pairs built via the asymmetric pairing task + // vector for pair cut names, used mainly for pairs built via the asymmetric + // pairing task std::vector fPairCutNames; std::vector fCommonPairCutNames; Service fCCDB{}; - // TODO: The filter expressions seem to always use the default value of configurables, not the values from the actual configuration file - Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); - Filter dileptonFilter = aod::reducedpair::pt > fConfigDileptonLowpTCut&& aod::reducedpair::pt fConfigDileptonLowMass&& aod::reducedpair::mass fConfigDileptonLxyCut; - Filter filterBarrel = aod::dqanalysisflags::isBarrelSelected > static_cast(0); - Filter filterMuon = aod::dqanalysisflags::isMuonSelected > static_cast(0); - - constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map + // TODO: The filter expressions seem to always use the default value of + // configurables, not the values from the actual configuration file + Filter eventFilter = aod::dqanalysisflags::isEventSelected > + static_cast(0); + Filter dileptonFilter = + aod::reducedpair::pt > + fConfigDileptonLowpTCut + &&aod::reducedpair::pt fConfigDileptonLowMass + &&aod::reducedpair::mass + fConfigDileptonLxyCut; + Filter filterBarrel = aod::dqanalysisflags::isBarrelSelected > + static_cast(0); + Filter filterMuon = aod::dqanalysisflags::isMuonSelected > + static_cast(0); + + constexpr static uint32_t fgDileptonFillMap = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton = nullptr; - float* fValuesHadron = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesDilepton = nullptr; + float *fValuesHadron = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; NoBinningPolicy fHashBin; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); bool isMuon = context.mOptions.get("processMuonSkimmed"); - bool isMCGen = context.mOptions.get("processMCGen") || context.mOptions.get("processMCGenWithEventSelection"); + bool isMCGen = context.mOptions.get("processMCGen") || + context.mOptions.get("processMCGenWithEventSelection"); bool isDummy = context.mOptions.get("processDummy"); - bool isMCGen_energycorrelators = context.mOptions.get("processMCGenEnergyCorrelators") || context.mOptions.get("processMCGenEnergyCorrelatorsPion"); - bool isMCGen_energycorrelatorsME = context.mOptions.get("processMCGenEnergyCorrelatorsME") || context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); + bool isMCGen_energycorrelators = + context.mOptions.get("processMCGenEnergyCorrelators") || + context.mOptions.get("processMCGenEnergyCorrelatorsPion"); + bool isMCGen_energycorrelatorsME = + context.mOptions.get("processMCGenEnergyCorrelatorsME") || + context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); if (isDummy) { if (isBarrel || isMuon || isBarrelAsymmetric || isMCGen) { - LOG(fatal) << "Dummy function is enabled even if there are normal process functions running! Fix your config!"; + LOG(fatal) << "Dummy function is enabled even if there are normal " + "process functions running! Fix your config!"; } else { - LOG(info) << "Dummy function is enabled. Skipping the rest of the init function"; + LOG(info) << "Dummy function is enabled. Skipping the rest of the init " + "function"; return; } } @@ -4480,20 +6342,26 @@ struct AnalysisDileptonTrack { VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); - fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), + dqefficiency_helpers::varUnits()); TString sigNamesStr = fConfigMCRecSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); if (!sigNamesStr.IsNull()) { for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 3) { - LOG(fatal) << "Signal at reconstructed level requested (" << sig->GetName() << ") " << "does not have 3 prongs! Fix it"; + LOG(fatal) << "Signal at reconstructed level requested (" + << sig->GetName() << ") " + << "does not have 3 prongs! Fix it"; } fRecMCSignals.push_back(sig); } else { - LOG(fatal) << "Signal at reconstructed level requested (" << objRecSigArray->At(isig)->GetName() << ") " << "could not be retrieved from the library! -> skipped"; + LOG(fatal) << "Signal at reconstructed level requested (" + << objRecSigArray->At(isig)->GetName() << ") " + << "could not be retrieved from the library! -> skipped"; } } } @@ -4501,21 +6369,26 @@ struct AnalysisDileptonTrack { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 3) { - LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " << "does not have 3 prongs! Fix it"; + LOG(fatal) << "Signal at reconstructed level requested (" + << mcIt->GetName() << ") " + << "does not have 3 prongs! Fix it"; } fRecMCSignals.push_back(mcIt); } } // Add histogram classes for each specified MCsignal at the generator level - // TODO: create a std::vector of hist classes to be used at Fill time, to avoid using Form in the process function + // TODO: create a std::vector of hist classes to be used at Fill time, to + // avoid using Form in the process function TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal(objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); @@ -4526,42 +6399,55 @@ struct AnalysisDileptonTrack { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); } } } - // For each track/muon selection used to produce dileptons, create a separate histogram directory using the - // name of the track/muon cut. + // For each track/muon selection used to produce dileptons, create a + // separate histogram directory using the name of the track/muon cut. - // Get the list of single track and muon cuts computed in the dedicated tasks upstream - // We need this to know the order in which they were computed, and also to make sure that in this task we do not ask - // for cuts which were not computed (in which case this will trigger a fatal) + // Get the list of single track and muon cuts computed in the dedicated + // tasks upstream We need this to know the order in which they were + // computed, and also to make sure that in this task we do not ask + // for cuts which were not computed (in which case this will trigger a + // fatal) std::string cfgTrackSelection_TrackCuts; if (isBarrel || isBarrelAsymmetric) { - getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", cfgTrackSelection_TrackCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgTrackCuts", + cfgTrackSelection_TrackCuts, false); } else { - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCuts", cfgTrackSelection_TrackCuts, false); + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCuts", + cfgTrackSelection_TrackCuts, false); } - TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { - cfgTrackSelection_objArrayTrackCuts = TString(cfgTrackSelection_TrackCuts).Tokenize(","); + cfgTrackSelection_objArrayTrackCuts = + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { - getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", cfgTrackSelection_TrackCuts, false); + getTaskOptionValue(context, "analysis-track-selection", + "cfgBarrelTrackCutsJSON", + cfgTrackSelection_TrackCuts, false); } else { - getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCutsJSON", cfgTrackSelection_TrackCuts, false); + getTaskOptionValue(context, "analysis-muon-selection", + "cfgMuonCutsJSON", + cfgTrackSelection_TrackCuts, false); } if (!cfgTrackSelection_TrackCuts.empty()) { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); + for (auto const &t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } @@ -4570,26 +6456,38 @@ struct AnalysisDileptonTrack { LOG(fatal) << " No track cuts found in the barrel or muon upstream tasks"; } // store all the computed track cut names in a vector - for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { - fTrackCutNames.push_back(cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); + icut++) { + fTrackCutNames.push_back( + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } // get the list of associated track cuts to be combined with the dileptons, // check that these were computed upstream, and create a bit mask - TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { - cfgDileptonTrack_objArrayTrackCuts = TString(fConfigTrackCuts.value).Tokenize(","); + cfgDileptonTrack_objArrayTrackCuts = + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } - // loop over these cuts and check they were computed upstream (otherwise trigger a fatal) - for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { - if (!cfgTrackSelection_objArrayTrackCuts->FindObject(cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { - LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the single barrel / muon selection tasks"; - } - } - // loop over all the upstream cuts and make a bit mask for the track cuts specified in this task - for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { - if (cfgDileptonTrack_objArrayTrackCuts->FindObject(cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + // loop over these cuts and check they were computed upstream (otherwise + // trigger a fatal) + for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); + icut++) { + if (!cfgTrackSelection_objArrayTrackCuts->FindObject( + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + LOG(fatal) << "Specified track cut (" + << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() + << ") not found in the list of computed cuts by the single " + "barrel / muon selection tasks"; + } + } + // loop over all the upstream cuts and make a bit mask for the track cuts + // specified in this task + for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); + icut++) { + if (cfgDileptonTrack_objArrayTrackCuts->FindObject( + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } @@ -4597,36 +6495,59 @@ struct AnalysisDileptonTrack { fNCuts = fTrackCutNames.size(); // get the cuts employed for same-event pairing - // NOTE: The track/muon cuts in analysis-same-event-pairing are used to select electrons/muons to build dielectrons/dimuons - // NOTE: The cfgPairCuts in analysis-same-event-pairing are used to apply an additional selection on top of the already produced dileptons - // but this is only used for histograms, not for the produced dilepton tables + // NOTE: The track/muon cuts in analysis-same-event-pairing are used to + // select electrons/muons to build dielectrons/dimuons NOTE: The cfgPairCuts + // in analysis-same-event-pairing are used to apply an additional selection + // on top of the already produced dileptons + // but this is only used for histograms, not for the produced + // dilepton tables std::string cfgPairing_TrackCuts; std::string cfgPairing_PairCuts; std::string cfgPairing_PairCutsJSON; std::string cfgPairing_CommonTrackCuts; if (isBarrel) { - getTaskOptionValue(context, "analysis-same-event-pairing", "cfgTrackCuts", cfgPairing_TrackCuts, false); - getTaskOptionValue(context, "analysis-same-event-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); + getTaskOptionValue(context, "analysis-same-event-pairing", + "cfgTrackCuts", cfgPairing_TrackCuts, + false); + getTaskOptionValue(context, "analysis-same-event-pairing", + "cfgPairCuts", cfgPairing_PairCuts, + false); } else if (isMuon) { - getTaskOptionValue(context, "analysis-same-event-pairing", "cfgMuonCuts", cfgPairing_TrackCuts, false); - getTaskOptionValue(context, "analysis-same-event-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); + getTaskOptionValue(context, "analysis-same-event-pairing", + "cfgMuonCuts", cfgPairing_TrackCuts, + false); + getTaskOptionValue(context, "analysis-same-event-pairing", + "cfgPairCuts", cfgPairing_PairCuts, + false); } else if (isBarrelAsymmetric) { - getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgLegCuts", cfgPairing_TrackCuts, false); - getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); - getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", cfgPairing_CommonTrackCuts, false); + getTaskOptionValue(context, "analysis-asymmetric-pairing", + "cfgLegCuts", cfgPairing_TrackCuts, + false); + getTaskOptionValue(context, "analysis-asymmetric-pairing", + "cfgPairCuts", cfgPairing_PairCuts, + false); + getTaskOptionValue(context, "analysis-asymmetric-pairing", + "cfgCommonTrackCuts", + cfgPairing_CommonTrackCuts, false); } if (cfgPairing_TrackCuts.empty()) { - LOG(fatal) << "There are no dilepton cuts specified in the upstream in the same-event-pairing or asymmetric-pairing"; + LOG(fatal) << "There are no dilepton cuts specified in the upstream in " + "the same-event-pairing or asymmetric-pairing"; } // If asymmetric pair is used, it may have common track cuts TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { - for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { - if (std::strcmp(cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), objArrayCommon->At(icut)->GetName()) == 0) { + for (int iicut = 0; + iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); + iicut++) { + if (std::strcmp( + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; fCommonPairCutNames.push_back(objArrayCommon->At(icut)->GetName()); } @@ -4636,25 +6557,31 @@ struct AnalysisDileptonTrack { // Get also the pair cuts specified via the JSON parameters if (isBarrelAsymmetric) { - getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", cfgPairing_PairCutsJSON, false); + getTaskOptionValue(context, "analysis-asymmetric-pairing", + "cfgPairCutsJSON", + cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } - std::unique_ptr objArrayPairCuts(TString(cfgPairing_PairCuts).Tokenize(",")); + std::unique_ptr objArrayPairCuts( + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); } // array of single lepton cuts specified in the same-analysis-pairing task - std::unique_ptr cfgPairing_objArrayTrackCuts(TString(cfgPairing_TrackCuts).Tokenize(",")); - // If asymmetric pairs are used, the number of cuts should come from the asymmetric-pairing task + std::unique_ptr cfgPairing_objArrayTrackCuts( + TString(cfgPairing_TrackCuts).Tokenize(",")); + // If asymmetric pairs are used, the number of cuts should come from the + // asymmetric-pairing task if (isBarrelAsymmetric) { fNLegCuts = cfgPairing_objArrayTrackCuts->GetEntries(); } else { @@ -4667,40 +6594,73 @@ struct AnalysisDileptonTrack { TString pairLegCutName; - // here we check that this cut is one of those used for building the dileptons + // here we check that this cut is one of those used for building the + // dileptons if (!isBarrelAsymmetric) { - if (!cfgPairing_objArrayTrackCuts->FindObject(fTrackCutNames[icut].Data())) { + if (!cfgPairing_objArrayTrackCuts->FindObject( + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead - pairLegCutName = dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut))->GetString(); + pairLegCutName = + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); // define dilepton histograms - DefineHistograms(fHistMan, Form("DileptonsSelected_%s", pairLegCutName.Data()), "barrel,vertexing"); - // loop over track cuts and create dilepton - track histogram directories + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s", pairLegCutName.Data()), + "barrel,vertexing"); + // loop over track cuts and create dilepton - track histogram + // directories for (int iCutTrack = 0; iCutTrack < fNCuts; iCutTrack++) { - // here we check that this track cut is one of those required to associate with the dileptons - if ((fTrackCutBitMap & (static_cast(1) << iCutTrack)) == 0) { + // here we check that this track cut is one of those required to + // associate with the dileptons + if ((fTrackCutBitMap & (static_cast(1) << iCutTrack)) == + 0) { continue; } - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { - DefineHistograms(fHistMan, Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); + for (auto const &sig : fRecMCSignals) { + DefineHistograms( + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { - DefineHistograms(fHistMan, Form("DileptonTrackMCMatched_%s_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iCutTrack].Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); + for (auto const &sig : fRecMCSignals) { + DefineHistograms(fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iCutTrack].Data(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } } @@ -4708,19 +6668,53 @@ struct AnalysisDileptonTrack { if (fNPairCuts != 0) { for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s", pairLegCutName.Data(), fPairCutNames[iPairCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s", pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { - DefineHistograms(fHistMan, Form("DileptonTrackMCMatched_%s_%s_%s_%s", pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s", + pairLegCutName.Data(), + fPairCutNames[iPairCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s", + pairLegCutName.Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); + for (auto const &sig : fRecMCSignals) { + DefineHistograms( + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data(), sig->GetName()), fConfigHistogramSubgroups.value.data()); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); + for (auto const &sig : fRecMCSignals) { + DefineHistograms( + fHistMan, + Form("DileptonTrack_%s_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } } @@ -4731,25 +6725,31 @@ struct AnalysisDileptonTrack { } // end if (isBarrel || isBarrelAsymmetric || isMuon) if (isMCGen) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { DefineHistograms(fHistMan, Form("MCTruthGen_%s", sig->GetName()), ""); - DefineHistograms(fHistMan, Form("MCTruthGenSel_%s", sig->GetName()), ""); + DefineHistograms(fHistMan, Form("MCTruthGenSel_%s", sig->GetName()), + ""); } - for (auto const& sig : fRecMCSignals) { - DefineHistograms(fHistMan, Form("MCTruthGenSelBR_%s", sig->GetName()), ""); - DefineHistograms(fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); + for (auto const &sig : fRecMCSignals) { + DefineHistograms(fHistMan, Form("MCTruthGenSelBR_%s", sig->GetName()), + ""); + DefineHistograms( + fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelators) { - for (auto const& sig : fGenMCSignals) { - DefineHistograms(fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); + for (auto const &sig : fGenMCSignals) { + DefineHistograms( + fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelatorsME) { - for (auto const& sig : fGenMCSignals) { - DefineHistograms(fHistMan, Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), ""); + for (auto const &sig : fGenMCSignals) { + DefineHistograms(fHistMan, + Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), + ""); } } @@ -4762,32 +6762,41 @@ struct AnalysisDileptonTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + void initParamsFromCCDB(uint64_t timestamp) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (fConfigUseKFVertexing.value) { VarManager::SetupThreeProngKFParticle(magField); } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables + VarManager::SetupThreeProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } // Template function to run pair - hadron combinations - template - void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, TTracks const& tracks, TDileptons const& dileptons, ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + template + void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, TDileptons const &dileptons, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const &mcTracks) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); - VarManager::FillEvent(event.reducedMCevent(), fValuesHadron); + VarManager::FillEvent( + event.reducedMCevent(), fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); - VarManager::FillEvent(event.reducedMCevent(), fValuesDilepton); + VarManager::FillEvent( + event.reducedMCevent(), fValuesDilepton); auto mcDecision = static_cast(0); size_t iSigMc = 0; @@ -4795,7 +6804,7 @@ struct AnalysisDileptonTrack { bool isCorrectAssoc_lepton2 = false; bool isCorrectAssoc_assoc = false; - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -4816,8 +6825,10 @@ struct AnalysisDileptonTrack { // Correct association if (fConfigUseCorrectlyAssociatedMC) { - isCorrectAssoc_lepton1 = (lepton1MC.reducedMCevent() == event.reducedMCevent()); - isCorrectAssoc_lepton2 = (lepton2MC.reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_lepton1 = + (lepton1MC.reducedMCevent() == event.reducedMCevent()); + isCorrectAssoc_lepton2 = + (lepton2MC.reducedMCevent() == event.reducedMCevent()); } VarManager::FillTrack(dilepton, fValuesDilepton); @@ -4830,21 +6841,40 @@ struct AnalysisDileptonTrack { } // regular dileptons - fHistMan->FillHistClass(Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), fValuesDilepton); + fHistMan->FillHistClass( + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s - if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons don't have the PairFilterMap column - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { + if constexpr (TCandidateType == + VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons + // don't have the + // PairFilterMap column + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data()), fValuesDilepton); + fHistMan->FillHistClass( + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[icut].Data()), fValuesDilepton); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[icut].Data()), fValuesDilepton); + fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -4853,13 +6883,14 @@ struct AnalysisDileptonTrack { } // loop over track associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); uint32_t trackSelection = 0; if constexpr (TCandidateType == VarManager::kBtoJpsiEEK) { - // check the cuts fulfilled by this candidate track; if none just continue + // check the cuts fulfilled by this candidate track; if none just + // continue trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); if (!trackSelection) { continue; @@ -4867,15 +6898,20 @@ struct AnalysisDileptonTrack { // get the track from this association auto track = assoc.template reducedtrack_as(); // check that this track is not included in the current dilepton - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } auto trackMC = track.reducedMCTrack(); - if (fConfigUseCorrectlyAssociatedMC) { // check if correctly associated - isCorrectAssoc_assoc = (trackMC.reducedMCevent() == event.reducedMCevent()); + if (fConfigUseCorrectlyAssociatedMC) { // check if correctly + // associated + isCorrectAssoc_assoc = + (trackMC.reducedMCevent() == event.reducedMCevent()); } - bool isCorrect_triplet = isCorrectAssoc_lepton1 && isCorrectAssoc_lepton2 && isCorrectAssoc_assoc; + bool isCorrect_triplet = isCorrectAssoc_lepton1 && + isCorrectAssoc_lepton2 && + isCorrectAssoc_assoc; if (fConfigUseCorrectlyAssociatedMC) { if (!isCorrect_triplet) { continue; @@ -4884,11 +6920,14 @@ struct AnalysisDileptonTrack { // compute needed quantities VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); mcDecision = 0; iSigMc = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, iSigMc++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, iSigMc++) { if ((*sig)->CheckSignal(true, lepton1MC, lepton2MC, trackMC)) { mcDecision |= (static_cast(1) << iSigMc); } @@ -4899,37 +6938,70 @@ struct AnalysisDileptonTrack { if (mcDecision > 0) { while (true) { if (currentMCParticle.has_mothers()) { - currentMCParticle = currentMCParticle.template mothers_first_as(); - if (std::abs(currentMCParticle.pdgCode()) > 500 && std::abs(currentMCParticle.pdgCode()) < 549) { // nb! hardcoded pdgcodes - VarManager::FillTrackMC(mcTracks, currentMCParticle, fValuesHadron); + currentMCParticle = + currentMCParticle + .template mothers_first_as(); + if (std::abs(currentMCParticle.pdgCode()) > 500 && + std::abs(currentMCParticle.pdgCode()) < + 549) { // nb! hardcoded pdgcodes + VarManager::FillTrackMC(mcTracks, currentMCParticle, + fValuesHadron); break; } } else { break; } } - // fill mc truth vertexing (for the associated track as this will have a displaced vertex, while the B hadron is produced in the PV) - VarManager::FillTrackCollisionMC(trackMC, currentMCParticle, event.reducedMCevent(), fValuesHadron); + // fill mc truth vertexing (for the associated track as this will + // have a displaced vertex, while the B hadron is produced in the + // PV) + VarManager::FillTrackCollisionMC( + trackMC, currentMCParticle, event.reducedMCevent(), + fValuesHadron); } // table to be written out for ML analysis - BmesonsTable(event.runNumber(), event.globalIndex(), event.timestamp(), - fValuesHadron[VarManager::kPairMass], dilepton.mass(), fValuesHadron[VarManager::kDeltaMass], fValuesHadron[VarManager::kPairPt], fValuesHadron[VarManager::kPairEta], fValuesHadron[VarManager::kPairPhi], fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], fValuesHadron[VarManager::kVertexingLxyErr], fValuesHadron[VarManager::kVertexingLxyz], fValuesHadron[VarManager::kVertexingLxyzErr], fValuesHadron[VarManager::kVertexingLz], fValuesHadron[VarManager::kVertexingLzErr], - fValuesHadron[VarManager::kVertexingTauxy], fValuesHadron[VarManager::kVertexingTauxyErr], fValuesHadron[VarManager::kVertexingTauz], fValuesHadron[VarManager::kVertexingTauzErr], fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], - fValuesHadron[VarManager::kMCVertexingLxy], fValuesHadron[VarManager::kMCVertexingLxyz], fValuesHadron[VarManager::kMCVertexingLz], - fValuesHadron[VarManager::kMCVertexingTauxy], fValuesHadron[VarManager::kMCVertexingTauz], fValuesHadron[VarManager::kMCCosPointingAngle], - track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), lepton2.eta(), - track.tpcNSigmaKa(), track.tpcNSigmaPi(), track.tpcNSigmaPr(), track.tofNSigmaKa(), - lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), - track.itsClusterMap(), lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), lepton2.tpcNClsFound(), - track.tpcChi2NCl(), lepton1.tpcChi2NCl(), lepton2.tpcChi2NCl(), - dilepton.filterMap_raw(), trackSelection, mcDecision); + BmesonsTable( + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyErr], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLxyzErr], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingLzErr], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauxyErr], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kVertexingTauzErr], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], + fValuesHadron[VarManager::kMCVertexingLxy], + fValuesHadron[VarManager::kMCVertexingLxyz], + fValuesHadron[VarManager::kMCVertexingLz], + fValuesHadron[VarManager::kMCVertexingTauxy], + fValuesHadron[VarManager::kMCVertexingTauz], + fValuesHadron[VarManager::kMCCosPointingAngle], + track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection, + mcDecision); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { @@ -4939,20 +7011,28 @@ struct AnalysisDileptonTrack { } auto track = assoc.template reducedtrack_as(); - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } - // Check that the charge combination makes sense for D*+ -> D0 pi+ or D*- -> D0bar pi- - if (!((track.sign() == 1 && lepton1.sign() == -1 && lepton2.sign() == 1) || (track.sign() == -1 && lepton1.sign() == 1 && lepton2.sign() == -1))) { + // Check that the charge combination makes sense for D*+ -> D0 pi+ or + // D*- -> D0bar pi- + if (!((track.sign() == 1 && lepton1.sign() == -1 && + lepton2.sign() == 1) || + (track.sign() == -1 && lepton1.sign() == 1 && + lepton2.sign() == -1))) { continue; } VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); auto trackMC = track.reducedMCTrack(); mcDecision = 0; iSigMc = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, iSigMc++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, iSigMc++) { if ((*sig)->CheckSignal(true, lepton1MC, lepton2MC, trackMC)) { mcDecision |= (static_cast(1) << iSigMc); } @@ -4966,12 +7046,15 @@ struct AnalysisDileptonTrack { } auto track = assoc.template reducedmuon_as(); - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); if (!track.has_reducedMCTrack()) { continue; @@ -4979,16 +7062,19 @@ struct AnalysisDileptonTrack { auto trackMC = track.reducedMCTrack(); mcDecision = 0; iSigMc = 0; - for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, iSigMc++) { + for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); + sig++, iSigMc++) { if ((*sig)->CheckSignal(true, lepton1MC, lepton2MC, trackMC)) { mcDecision |= (static_cast(1) << iSigMc); } } // Fill table for correlation analysis - DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], fValuesHadron[VarManager::kDeltaPhi], - dilepton.mass(), dilepton.pt(), dilepton.eta(), track.pt(), track.eta(), track.phi(), - lepton1.pt(), lepton1.eta(), lepton1.phi(), lepton2.pt(), lepton2.eta(), lepton2.phi(), - mcDecision); + DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], + fValuesHadron[VarManager::kDeltaPhi], + dilepton.mass(), dilepton.pt(), dilepton.eta(), + track.pt(), track.eta(), track.phi(), lepton1.pt(), + lepton1.eta(), lepton1.phi(), lepton2.pt(), + lepton2.eta(), lepton2.phi(), mcDecision); } // Fill histograms for the triplets @@ -4999,45 +7085,95 @@ struct AnalysisDileptonTrack { continue; } - // loop over specified track cuts (the tracks to be combined with the dileptons) + // loop over specified track cuts (the tracks to be combined with the + // dileptons) for (int iTrackCut = 0; iTrackCut < fNCuts; iTrackCut++) { if (!(trackSelection & (static_cast(1) << iTrackCut))) { continue; } - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s", fLegCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); + fHistMan->FillHistClass(Form("DileptonTrack_%s_%s", + fLegCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonTrackMCMatched_%s_%s_%s", fLegCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data(), fRecMCSignals[isig]->GetName()), fValuesHadron); + fHistMan->FillHistClass(Form("DileptonTrackMCMatched_%s_%s_%s", + fLegCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } - if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons don't have the PairFilterMap column - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); + if constexpr (TCandidateType == + VarManager::kDstarToD0KPiPi) { // Dielectrons and + // Dimuons don't have + // the PairFilterMap + // column + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonTrackMCMatched_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iTrackCut].Data(), fRecMCSignals[isig]->GetName()), fValuesHadron); + fHistMan->FillHistClass( + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonTrackMCMatched_%s_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data(), fRecMCSignals[isig]->GetName()), fValuesHadron); + fHistMan->FillHistClass( + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); - for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); + for (uint32_t isig = 0; isig < fRecMCSignals.size(); + isig++) { if (mcDecision & (static_cast(1) << isig)) { - fHistMan->FillHistClass(Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data(), fRecMCSignals[isig]->GetName()), fValuesHadron); + fHistMan->FillHistClass( + Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } @@ -5051,15 +7187,20 @@ struct AnalysisDileptonTrack { } // end loop over dileptons } - Preslice trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; - Preslice dielectronsPerCollision = aod::reducedpair::reducedeventId; - Preslice ditracksPerCollision = aod::reducedpair::reducedeventId; - - void processBarrelSkimmed(soa::Filtered const& events, - soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, soa::Filtered const& dileptons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + Preslice trackAssocsPerCollision = + aod::reducedtrack_association::reducedeventId; + Preslice dielectronsPerCollision = + aod::reducedpair::reducedeventId; + Preslice ditracksPerCollision = + aod::reducedpair::reducedeventId; + + void processBarrelSkimmed( + soa::Filtered const &events, + soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + soa::Filtered const &dileptons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -5068,21 +7209,28 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } - auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); - auto groupedDielectrons = dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons, mcEvents, mcTracks); + auto groupedBarrelAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDielectrons = + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + runDileptonHadron(event, groupedBarrelAssocs, + tracks, groupedDielectrons, + mcEvents, mcTracks); } } - void processDstarToD0Pi(soa::Filtered const& events, - soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, soa::Filtered const& ditracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + void processDstarToD0Pi( + soa::Filtered const &events, + soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + soa::Filtered const &ditracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -5091,21 +7239,30 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { - auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); - auto groupedDitracks = ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDitracks, mcEvents, mcTracks); + for (auto const &event : events) { + auto groupedBarrelAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDitracks = + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + runDileptonHadron(event, groupedBarrelAssocs, + tracks, groupedDitracks, + mcEvents, mcTracks); } } - Preslice muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; - Preslice dimuonsPerCollision = aod::reducedpair::reducedeventId; - - void processMuonSkimmed(soa::Filtered const& events, - soa::Filtered> const& assocs, - MyMuonTracksWithCov const& tracks, soa::Filtered const& dileptons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + Preslice muonAssocsPerCollision = + aod::reducedtrack_association::reducedeventId; + Preslice dimuonsPerCollision = + aod::reducedpair::reducedeventId; + + void processMuonSkimmed( + soa::Filtered const &events, + soa::Filtered> const + &assocs, + MyMuonTracksWithCov const &tracks, + soa::Filtered const &dileptons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -5114,66 +7271,82 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } - auto groupedMuonAssocs = assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); - auto groupedDimuons = dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); + auto groupedMuonAssocs = + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + auto groupedDimuons = + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + runDileptonHadron( + event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); } } - void processMCGen(ReducedMCTracks const& mcTracks) - { + void processMCGen(ReducedMCTracks const &mcTracks) { // loop over mc stack and fill histograms for pure MC truth signals - // group all the MC tracks which belong to the MC event corresponding to the current reconstructed event - // auto groupedMCTracks = tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, event.reducedMCevent().globalIndex()); - for (auto const& mctrack : mcTracks) { - - // if ((std::abs(mctrack.pdgCode()) > 400 && std::abs(mctrack.pdgCode()) < 599) || - // (std::abs(mctrack.pdgCode()) > 4000 && std::abs(mctrack.pdgCode()) < 5999) || - // mctrack.mcReducedFlags() > 0) { - // /*cout << ">>>>>>>>>>>>>>>>>>>>>>> track idx / pdg / selections: " << mctrack.globalIndex() << " / " << mctrack.pdgCode() << " / "; + // group all the MC tracks which belong to the MC event corresponding to the + // current reconstructed event auto groupedMCTracks = + // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, + // event.reducedMCevent().globalIndex()); + for (auto const &mctrack : mcTracks) { + + // if ((std::abs(mctrack.pdgCode()) > 400 && std::abs(mctrack.pdgCode()) < + // 599) || + // (std::abs(mctrack.pdgCode()) > 4000 && std::abs(mctrack.pdgCode()) + // < 5999) || mctrack.mcReducedFlags() > 0) { + // /*cout << ">>>>>>>>>>>>>>>>>>>>>>> track idx / pdg / selections: " << + // mctrack.globalIndex() << " / " << mctrack.pdgCode() << " / "; // PrintBitMap(mctrack.mcReducedFlags(), 16); // cout << endl; // if (mctrack.has_mothers()) { // for (auto& m : mctrack.mothersIds()) { // if (m < mcTracks.size()) { // protect against bad mother indices // auto aMother = mcTracks.rawIteratorAt(m); - // cout << "<<<<<< mother idx / pdg: " << m << " / " << aMother.pdgCode() << endl; + // cout << "<<<<<< mother idx / pdg: " << m << " / " << + // aMother.pdgCode() << endl; // } // } // } // // if (mctrack.has_daughters()) { - // for (int d = mctrack.daughtersIds()[0]; d <= mctrack.daughtersIds()[1]; ++d) { - // if (d < mcTracks.size()) { // protect against bad daughter indices + // for (int d = mctrack.daughtersIds()[0]; d <= + // mctrack.daughtersIds()[1]; ++d) { + // if (d < mcTracks.size()) { // protect against bad daughter + // indices // auto aDaughter = mcTracks.rawIteratorAt(d); - // cout << "<<<<<< daughter idx / pdg: " << d << " / " << aDaughter.pdgCode() << endl; + // cout << "<<<<<< daughter idx / pdg: " << d << " / " << + // aDaughter.pdgCode() << endl; // } // } // }*/ // } VarManager::FillTrackMC(mcTracks, mctrack); - // NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete. - // NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member. + // NOTE: Signals are checked here mostly based on the skimmed MC stack, so + // depending on the requested signal, the stack could be incomplete. NOTE: + // However, the working model is that the decisions on MC signals are + // precomputed during skimming and are stored in the mcReducedFlags + // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { - fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } - PresliceUnsorted perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId; + PresliceUnsorted perReducedMcEvent = + aod::reducedtrackMC::reducedMCeventId; - void processMCGenWithEventSelection(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { - for (auto const& event : events) { + void processMCGenWithEventSelection( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5181,36 +7354,39 @@ struct AnalysisDileptonTrack { continue; } - auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + auto groupedMCTracks = + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { - fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } - // make a list of all MC tracks in the MC collision corresponding to the current reconstructed event + // make a list of all MC tracks in the MC collision corresponding to the + // current reconstructed event std::vector mcTrackIndices; - for (auto const& t : groupedMCTracks) { + for (auto const &t : groupedMCTracks) { mcTrackIndices.push_back(t.globalIndex()); } // make a three nested for loop over all MC tracks in the vector - for (const auto& t1 : mcTrackIndices) { + for (const auto &t1 : mcTrackIndices) { auto track1 = mcTracks.rawIteratorAt(t1); - for (const auto& t2 : mcTrackIndices) { + for (const auto &t2 : mcTrackIndices) { if (t1 == t2) { continue; } // if (t2 < t1) continue; auto track2 = mcTracks.rawIteratorAt(t2); - for (const auto& t3 : mcTrackIndices) { + for (const auto &t3 : mcTrackIndices) { if (t3 == t1) { continue; } @@ -5219,24 +7395,36 @@ struct AnalysisDileptonTrack { } auto track3 = mcTracks.rawIteratorAt(t3); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { if (sig->CheckSignal(true, track1, track2, track3)) { - VarManager::FillTripleMC(track1, track2, track3, dqefficiency_helpers::varValues()); // nb! hardcoded for jpsiK + VarManager::FillTripleMC( + track1, track2, track3, + dqefficiency_helpers::varValues()); // nb! hardcoded for + // jpsiK - fHistMan->FillHistClass(Form("MCTruthGenSelBR_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenSelBR_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // apply kinematic cuts - if (track1.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track1.eta()) > fConfigMCGenDileptonLegEtaAbs.value) { + if (track1.pt() < fConfigMCGenDileptonLegPtMin.value || + std::abs(track1.eta()) > + fConfigMCGenDileptonLegEtaAbs.value) { continue; } - if (track2.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track2.eta()) > fConfigMCGenDileptonLegEtaAbs.value) { + if (track2.pt() < fConfigMCGenDileptonLegPtMin.value || + std::abs(track2.eta()) > + fConfigMCGenDileptonLegEtaAbs.value) { continue; } - if (track3.pt() < fConfigMCGenHadronPtMin.value || std::abs(track3.eta()) > fConfigMCGenHadronEtaAbs.value) { + if (track3.pt() < fConfigMCGenHadronPtMin.value || + std::abs(track3.eta()) > fConfigMCGenHadronEtaAbs.value) { continue; } - fHistMan->FillHistClass(Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -5246,48 +7434,55 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelators(TEvent const& event, TMCTracks const& mcTracks) - { - auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + void runEnergyCorrelators(TEvent const &event, TMCTracks const &mcTracks) { + auto groupedMCTracks = + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& t1 : groupedMCTracks) { + for (auto const &t1 : groupedMCTracks) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal - if ((t1_raw.pt() < fConfigDileptonLowpTCut || t1_raw.pt() > fConfigDileptonHighpTCut)) { + if ((t1_raw.pt() < fConfigDileptonLowpTCut || + t1_raw.pt() > fConfigDileptonHighpTCut)) { continue; } if (std::abs(t1_raw.y()) > fConfigDileptonRapCutAbs) { continue; } // for the energy correlators - for (auto const& t2 : groupedMCTracks) { + for (auto const &t2 : groupedMCTracks) { auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); - if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || std::abs(t2_raw.pdgCode()) == PDG_t::kGamma) { + if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || + std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || + std::abs(t2_raw.pdgCode()) == PDG_t::kGamma) { continue; } - if (t2_raw.pt() < fConfigMCGenHadronPtMin.value || std::abs(t2_raw.eta()) > fConfigMCGenHadronEtaAbs.value) { + if (t2_raw.pt() < fConfigMCGenHadronPtMin.value || + std::abs(t2_raw.eta()) > fConfigMCGenHadronEtaAbs.value) { continue; } if (t2_raw.getGenStatusCode() <= 0) { continue; } - VarManager::FillEnergyCorrelatorsMC(t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const& sig : fGenMCSignals) { + VarManager::FillEnergyCorrelatorsMC( + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { - fHistMan->FillHistClass(Form("MCTruthEenergyCorrelators_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthEenergyCorrelators_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } - void processMCGenEnergyCorrelators(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + void processMCGenEnergyCorrelators( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5298,14 +7493,14 @@ struct AnalysisDileptonTrack { } } - void processMCGenEnergyCorrelatorsPion(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + void processMCGenEnergyCorrelatorsPion( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5317,117 +7512,152 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelatorsMixedEvent(TEvent const& event1, TEvent const& event2, TMCTracks const& mcTracks) - { - auto groupedMCTracks1 = mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); - auto groupedMCTracks2 = mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); + void runEnergyCorrelatorsMixedEvent(TEvent const &event1, + TEvent const &event2, + TMCTracks const &mcTracks) { + auto groupedMCTracks1 = + mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); + auto groupedMCTracks2 = + mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); groupedMCTracks1.bindInternalIndicesTo(&mcTracks); groupedMCTracks2.bindInternalIndicesTo(&mcTracks); - for (auto const& t1 : groupedMCTracks1) { + for (auto const &t1 : groupedMCTracks1) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal - if ((t1_raw.pt() < fConfigDileptonLowpTCut || t1_raw.pt() > fConfigDileptonHighpTCut)) { + if ((t1_raw.pt() < fConfigDileptonLowpTCut || + t1_raw.pt() > fConfigDileptonHighpTCut)) { continue; } if (std::abs(t1_raw.y()) > fConfigDileptonRapCutAbs) { continue; } // for the energy correlators - for (auto const& t2 : groupedMCTracks2) { + for (auto const &t2 : groupedMCTracks2) { auto t2_raw = groupedMCTracks2.rawIteratorAt(t2.globalIndex()); - if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || std::abs(t2_raw.pdgCode()) == PDG_t::kGamma) { + if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || + std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || + std::abs(t2_raw.pdgCode()) == PDG_t::kGamma) { continue; } - if (t2_raw.pt() < fConfigMCGenHadronPtMin.value || std::abs(t2_raw.eta()) > fConfigMCGenHadronEtaAbs.value) { + if (t2_raw.pt() < fConfigMCGenHadronPtMin.value || + std::abs(t2_raw.eta()) > fConfigMCGenHadronEtaAbs.value) { continue; } if (t2_raw.getGenStatusCode() <= 0) { continue; } - VarManager::FillEnergyCorrelatorsMC(t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const& sig : fGenMCSignals) { + VarManager::FillEnergyCorrelatorsMC( + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { - fHistMan->FillHistClass(Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), dqefficiency_helpers::varValues()); + fHistMan->FillHistClass( + Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } - void processMCGenEnergyCorrelatorsME(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + void processMCGenEnergyCorrelatorsME( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations(fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } if (!event1.has_reducedMCevent() || !event2.has_reducedMCevent()) { continue; } - runEnergyCorrelatorsMixedEvent(event1, event2, mcTracks); + runEnergyCorrelatorsMixedEvent( + event1, event2, mcTracks); } } - void processMCGenEnergyCorrelatorsPionME(soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + void processMCGenEnergyCorrelatorsPionME( + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations(fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } if (!event1.has_reducedMCevent() || !event2.has_reducedMCevent()) { continue; } - runEnergyCorrelatorsMixedEvent(event1, event2, mcTracks); + runEnergyCorrelatorsMixedEvent(event1, event2, + mcTracks); } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } - PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelSkimmed, "Run barrel dilepton-track pairing, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processDstarToD0Pi, "Run barrel pairing of D0 daughters with pion candidate, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, "Run muon dilepton-track pairing, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGen, "Loop over MC particle stack and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenWithEventSelection, "Loop over MC particle stack and fill generator level histograms", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelators, "Loop over MC particle stack and fill generator level histograms(energy correlators)", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsPion, "Loop over MC particle stack and fill generator level histograms(energy correlators)", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsME, "Loop over MC particle stack and fill generator level histograms(energy correlators)", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsPionME, "Loop over MC particle stack and fill generator level histograms(energy correlators)", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelSkimmed, + "Run barrel dilepton-track pairing, using skimmed data", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processDstarToD0Pi, + "Run barrel pairing of D0 daughters with pion candidate, " + "using skimmed data", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, + "Run muon dilepton-track pairing, using skimmed data", false); + PROCESS_SWITCH( + AnalysisDileptonTrack, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); + PROCESS_SWITCH( + AnalysisDileptonTrack, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelators, + "Loop over MC particle stack and fill generator level " + "histograms(energy correlators)", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsPion, + "Loop over MC particle stack and fill generator level " + "histograms(energy correlators)", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsME, + "Loop over MC particle stack and fill generator level " + "histograms(energy correlators)", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelatorsPionME, + "Loop over MC particle stack and fill generator level " + "histograms(energy correlators)", + false); PROCESS_SWITCH(AnalysisDileptonTrack, processDummy, "Dummy function", true); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) -{ +WorkflowSpec defineDataProcessing(ConfigContext const &cfgc) { return WorkflowSpec{ - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc)}; + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc)}; } -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, const char* histGroups) -{ +void DefineHistograms(HistogramManager *histMan, const TString &histClasses, + const char *histGroups) { // // Define here the histograms for all the classes required in analysis. - // The histogram classes are provided in the histClasses string, separated by semicolon ";" - // The histogram classes and their components histograms are defined below depending on the name of the histogram class + // The histogram classes are provided in the histClasses string, separated by + // semicolon ";" The histogram classes and their components histograms are + // defined below depending on the name of the histogram class // std::unique_ptr objArray(histClasses.Tokenize(";")); for (Int_t iclass = 0; iclass < objArray->GetEntries(); ++iclass) { @@ -5435,90 +7665,119 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, con histMan->AddHistClass(classStr.Data()); TString histName = histGroups; - // NOTE: The level of detail for histogramming can be controlled via configurables + // NOTE: The level of detail for histogramming can be controlled via + // configurables if (classStr.Contains("Event")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "event", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "event", histName); } - if (classStr.Contains("SameBunchCorrelations") || classStr.Contains("OutOfBunchCorrelations")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); + if (classStr.Contains("SameBunchCorrelations") || + classStr.Contains("OutOfBunchCorrelations")) { + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "two-collisions", histName); } - if ((classStr.Contains("Track") || classStr.Contains("Assoc")) && !classStr.Contains("Pairs")) { + if ((classStr.Contains("Track") || classStr.Contains("Assoc")) && + !classStr.Contains("Pairs")) { if (classStr.Contains("Barrel")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "track", histName); if (classStr.Contains("PIDCalibElectron")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_electron"); + dqhistograms::DefineHistograms(histMan, + objArray->At(iclass)->GetName(), + "track", "postcalib_electron"); } if (classStr.Contains("PIDCalibPion")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_pion"); + dqhistograms::DefineHistograms(histMan, + objArray->At(iclass)->GetName(), + "track", "postcalib_pion"); } if (classStr.Contains("PIDCalibProton")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_proton"); + dqhistograms::DefineHistograms(histMan, + objArray->At(iclass)->GetName(), + "track", "postcalib_proton"); } if (classStr.Contains("Ambiguity")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } } if (classStr.Contains("Muon") && !classStr.Contains("Pairs")) { if (!classStr.Contains("Ambiguity")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "track", histName); } else { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "muon-ambiguity"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "track", "muon-ambiguity"); } } if (classStr.Contains("Pairs")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "pair", histName); } if (classStr.Contains("Triplets")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "pair", histName); } if (classStr.Contains("MCTruthGenPair")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth_pair", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "mctruth_pair", histName); } if (classStr.Contains("MCTruthGenPseudoPolPair")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "polarization-pseudoproper-gen", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "polarization-pseudoproper-gen", histName); } if (classStr.Contains("MCTruthGenSelBR")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth_triple"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "mctruth_triple"); } else if (classStr.Contains("MCTruthGen")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth_track"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "mctruth_track"); } // if (classStr.Contains("MCTruthGen")) { - // dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth_track"); + // dqhistograms::DefineHistograms(histMan, + // objArray->At(iclass)->GetName(), "mctruth_track"); // } if (classStr.Contains("DileptonsSelected")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "pair", "barrel,vertexing"); } if (classStr.Contains("DileptonTrack") && !classStr.Contains("ME")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "dilepton-track", histName); } if (classStr.Contains("DileptonTrackME")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-track", "mixedevent"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "dilepton-track", "mixedevent"); } if (classStr.Contains("HadronsSelected")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "track", histName); } if (classStr.Contains("DileptonHadronInvMass")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "dilepton-hadron-mass"); } if (classStr.Contains("DileptonHadronCorrelation")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-correlation"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "dilepton-hadron-correlation"); } if (classStr.Contains("MCTruthEenergyCorrelators")) { - dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "energy-correlator-gen"); + dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), + "energy-correlator-gen"); } } // end loop over histogram classes diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index 31c666bbdeb..f2d8f7cb4bf 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -1,6 +1,6 @@ // Copyright 2019-2020 CERN and copyright holders of ALICE O2. -// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. -// All rights not expressly granted are reserved. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright +// holders. All rights not expressly granted are reserved. // // This software is distributed under the terms of the GNU General Public // License v3 (GPL Version 3), copied verbatim in the file "COPYING". @@ -82,19 +82,27 @@ #include // Some definitions -namespace o2::aod -{ -namespace dqanalysisflags -{ -DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing -DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, 8); //! Event decision -DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelected, isBarrelSelected, 32); //! Barrel track decisions -DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, int8_t); //! Barrel track in-bunch ambiguity -DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity -DECLARE_SOA_BITMAP_COLUMN(IsMuonSelected, isMuonSelected, 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) -DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity -DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, int8_t); //! Muon track out of bunch ambiguity -DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, 32); //! Barrel prefilter decisions (joinable to o2::aod::ReducedTracksAssoc) +namespace o2::aod { +namespace dqanalysisflags { +DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing +DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, + 8); //! Event decision +DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelected, isBarrelSelected, + 32); //! Barrel track decisions +DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, + int8_t); //! Barrel track in-bunch ambiguity +DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, + int8_t); //! Barrel track out of bunch ambiguity +DECLARE_SOA_BITMAP_COLUMN( + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) +DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, + int8_t); //! Muon track in-bunch ambiguity +DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, + int8_t); //! Muon track out of bunch ambiguity +DECLARE_SOA_BITMAP_COLUMN(IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, + 32); //! Barrel prefilter decisions (joinable to + //! o2::aod::ReducedTracksAssoc) // Bcandidate columns for ML analysis of B->Jpsi+K DECLARE_SOA_COLUMN(RunNumber, runNumber, uint64_t); DECLARE_SOA_COLUMN(EventIdx, eventIdx, uint64_t); @@ -172,7 +180,8 @@ DECLARE_SOA_COLUMN(DcaZ1, dcaZ1, float); DECLARE_SOA_COLUMN(DcaXY2, dcaXY2, float); DECLARE_SOA_COLUMN(DcaZ2, dcaZ2, float); DECLARE_SOA_COLUMN(AmbiguousInBunchPairs, AmbiguousJpsiPairsInBunch, bool); -DECLARE_SOA_COLUMN(AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, bool); +DECLARE_SOA_COLUMN(AmbiguousOutOfBunchPairs, AmbiguousJpsiPairsOutOfBunch, + bool); DECLARE_SOA_COLUMN(MultiplicityFT0A, multiplicityFT0AJPsi2ee, float); DECLARE_SOA_COLUMN(MultiplicityFT0C, multiplicityFT0CJPsi2ee, float); DECLARE_SOA_COLUMN(PercentileFT0M, percentileFT0MJPsi2ee, float); @@ -180,156 +189,392 @@ DECLARE_SOA_COLUMN(PercentileFT0C, percentileFT0CJPsi2ee, float); DECLARE_SOA_COLUMN(MultiplicityNContrib, multiplicityNContribJPsi2ee, float); // Additional columns for prompt-non-prompt JPsi separation (BDT training) -DECLARE_SOA_COLUMN(PairSign, pairSign, int8_t); //! t1.sign() + t2.sign() -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(Corrassoc, corrassoc, bool); //! correct collision association (MC only, true 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(DcaXYOverSig1, dcaXYOverSig1, float); -DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); -DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); -DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); - +DECLARE_SOA_COLUMN(PairSign, pairSign, int8_t); //! t1.sign() + t2.sign() +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( + Corrassoc, corrassoc, + bool); //! correct collision association (MC only, true 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(DcaXYOverSig1, dcaXYOverSig1, float); +DECLARE_SOA_COLUMN(DcaZOverSig1, dcaZOverSig1, float); +DECLARE_SOA_COLUMN(DcaXYOverSig2, dcaXYOverSig2, float); +DECLARE_SOA_COLUMN(DcaZOverSig2, dcaZOverSig2, float); // Candidate columns for JPsi/muon correlations DECLARE_SOA_COLUMN(DeltaEta, deltaEta, float); DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); } // namespace dqanalysisflags -DECLARE_SOA_TABLE(EventCuts, "AOD", "DQANAEVCUTSA", dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents -DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents -DECLARE_SOA_TABLE(BarrelTrackCuts, "AOD", "DQANATRKCUTSA", dqanalysisflags::IsBarrelSelected); //! joinable to o2::aod::ReducedTracksAssoc -DECLARE_SOA_TABLE(BarrelAmbiguities, "AOD", "DQBARRELAMBA", dqanalysisflags::BarrelAmbiguityInBunch, dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to ReducedBarrelTracks -DECLARE_SOA_TABLE(MuonTrackCuts, "AOD", "DQANAMUONCUTSA", dqanalysisflags::IsMuonSelected); //! joinable to o2::aod::ReducedMuonsAssoc -DECLARE_SOA_TABLE(MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to ReducedMuonTracks -DECLARE_SOA_TABLE(Prefilter, "AOD", "DQPREFILTERA", dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc -DECLARE_SOA_TABLE(BmesonCandidates, "AOD", "DQBMESONSA", - dqanalysisflags::RunNumber, dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, dqanalysisflags::RapBcandidate, - dqanalysisflags::LxyBcandidate, dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, - dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, - dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, - dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, - dqanalysisflags::PINleg1, dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, dqanalysisflags::Etaleg2, - dqanalysisflags::TPCnsigmaKaassoc, dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, dqanalysisflags::TOFnsigmaKaassoc, - dqanalysisflags::TPCnsigmaElleg1, dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, dqanalysisflags::TPCnsigmaPrleg2, - dqanalysisflags::ITSClusterMapassoc, dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, dqanalysisflags::ITSChi2leg2, - dqanalysisflags::TPCNclsassoc, dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, dqanalysisflags::TPCChi2leg2, - dqanalysisflags::IsJpsiFromBSelected, dqanalysisflags::IsBarrelSelected); +DECLARE_SOA_TABLE( + EventCuts, "AOD", "DQANAEVCUTSA", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents +DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", + dqanalysisflags::MixingHash); //! joinable to ReducedEvents +DECLARE_SOA_TABLE( + BarrelTrackCuts, "AOD", "DQANATRKCUTSA", + dqanalysisflags::IsBarrelSelected); //! joinable to + //! o2::aod::ReducedTracksAssoc +DECLARE_SOA_TABLE( + BarrelAmbiguities, "AOD", "DQBARRELAMBA", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks +DECLARE_SOA_TABLE( + MuonTrackCuts, "AOD", "DQANAMUONCUTSA", + dqanalysisflags::IsMuonSelected); //! joinable to + //! o2::aod::ReducedMuonsAssoc +DECLARE_SOA_TABLE( + MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks +DECLARE_SOA_TABLE( + Prefilter, "AOD", "DQPREFILTERA", + dqanalysisflags:: + IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc +DECLARE_SOA_TABLE( + BmesonCandidates, "AOD", "DQBMESONSA", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, + dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, + dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, + dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, + dqanalysisflags::GlobalIndexleg2, dqanalysisflags::PINassoc, + dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, + dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, - dqanalysisflags::MassDileptonCandidate, dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, dqanalysisflags::Phiassoc, - dqanalysisflags::Ptleg1, dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2); -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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, dqanalysisflags::DcaZOverSig2, - dqanalysisflags::ITSClusterMapleg2, dqanalysisflags::ITSChi2leg2, - dqanalysisflags::AmbiguousInBunchPairs, dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, - dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, dqanalysisflags::MultiplicityNContrib); + dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::Ptpair, dqanalysisflags::Etapair, + dqanalysisflags::Ptassoc, dqanalysisflags::Etaassoc, + dqanalysisflags::Phiassoc, dqanalysisflags::Ptleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::Phileg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, + dqanalysisflags::Phileg2); +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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, + dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, + dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, + dqanalysisflags::MultiplicityNContrib); } // namespace o2::aod // Declarations of various short names -using MyEvents = o2::soa::Join; -using MyEventsBasic = o2::soa::Join; -using MyEventsMultExtraNoQvector = o2::soa::Join; -using MyEventsMultExtra = o2::soa::Join; -using MyEventsMultExtraQVector = o2::soa::Join; -using MyEventsZdc = o2::soa::Join; -using MyEventsMultExtraZdc = o2::soa::Join; -using MyEventsMultExtraZdcFit = o2::soa::Join; -using MyEventsSelected = o2::soa::Join; -using MyEventsMultExtraSelected = o2::soa::Join; -using MyEventsVtxCovSelectedMultExtra = o2::soa::Join; -using MyEventsHashSelected = o2::soa::Join; -using MyEventsVtxCov = o2::soa::Join; -using MyEventsVtxCovSelected = o2::soa::Join; -using MyEventsVtxCovSelectedInfo = o2::soa::Join; -using MyEventsVtxCovSelectedQvector = o2::soa::Join; -using MyEventsVtxCovSelectedQvectorWithHash = o2::soa::Join; -using MyEventsVtxCovZdcFitSelected = o2::soa::Join; -using MyEventsVtxCovZdcFitSelectedMultExtra = o2::soa::Join; -using MyEventsQvector = o2::soa::Join; -using MyEventsHashSelectedQvector = o2::soa::Join; -using MyEventsQvectorCentr = o2::soa::Join; -using MyEventsQvectorCentrMerge = o2::soa::Join; -using MyEventsQvectorCentrSelected = o2::soa::Join; -using MyEventsHashSelectedQvectorCentr = o2::soa::Join; - -using MyBarrelTracks = o2::soa::Join; -using MyBarrelTracksWithAmbiguities = o2::soa::Join; -using MyBarrelTracksWithCov = o2::soa::Join; -using MyBarrelTracksWithCovWithAmbiguities = o2::soa::Join; -using MyBarrelTracksWithCovWithAmbiguitiesWithColl = o2::soa::Join; -using MyBarrelTracksWithEMCal = o2::soa::Join; -using MyBarrelTracksWithCovWithEMCal = o2::soa::Join; -using MyDielectronCandidates = o2::soa::Join; -using MyDitrackCandidates = o2::soa::Join; -using MyDimuonCandidates = o2::soa::Join; -using MyMuonTracks = o2::soa::Join; -using MyMuonTracksWithCov = o2::soa::Join; -using MyMuonTracksWithCovWithAmbiguities = o2::soa::Join; -using MyMuonTracksSelectedWithColl = o2::soa::Join; +using MyEvents = + o2::soa::Join; +using MyEventsBasic = + o2::soa::Join; +using MyEventsMultExtraNoQvector = + o2::soa::Join; +using MyEventsMultExtra = + o2::soa::Join; +using MyEventsMultExtraQVector = + o2::soa::Join; +using MyEventsZdc = + o2::soa::Join; +using MyEventsMultExtraZdc = + o2::soa::Join; +using MyEventsMultExtraZdcFit = + o2::soa::Join; +using MyEventsSelected = + o2::soa::Join; +using MyEventsMultExtraSelected = + o2::soa::Join; +using MyEventsVtxCovSelectedMultExtra = + o2::soa::Join; +using MyEventsHashSelected = + o2::soa::Join; +using MyEventsVtxCov = + o2::soa::Join; +using MyEventsVtxCovSelected = + o2::soa::Join; +using MyEventsVtxCovSelectedInfo = + o2::soa::Join; +using MyEventsVtxCovSelectedQvector = + o2::soa::Join; +using MyEventsVtxCovSelectedQvectorWithHash = + o2::soa::Join; +using MyEventsVtxCovZdcFitSelected = + o2::soa::Join; +using MyEventsVtxCovZdcFitSelectedMultExtra = + o2::soa::Join; +using MyEventsQvector = + o2::soa::Join; +using MyEventsHashSelectedQvector = + o2::soa::Join; +using MyEventsQvectorCentr = + o2::soa::Join; +using MyEventsQvectorCentrMerge = + o2::soa::Join; +using MyEventsQvectorCentrSelected = + o2::soa::Join; +using MyEventsHashSelectedQvectorCentr = + o2::soa::Join; + +using MyBarrelTracks = + o2::soa::Join; +using MyBarrelTracksWithAmbiguities = + o2::soa::Join; +using MyBarrelTracksWithCov = + o2::soa::Join; +using MyBarrelTracksWithCovWithAmbiguities = + o2::soa::Join; +using MyBarrelTracksWithCovWithAmbiguitiesWithColl = + o2::soa::Join; +using MyBarrelTracksWithEMCal = + o2::soa::Join; +using MyBarrelTracksWithCovWithEMCal = + o2::soa::Join; +using MyDielectronCandidates = + o2::soa::Join; +using MyDitrackCandidates = + o2::soa::Join; +using MyDimuonCandidates = + o2::soa::Join; +using MyMuonTracks = + o2::soa::Join; +using MyMuonTracksWithCov = + o2::soa::Join; +using MyMuonTracksWithCovWithAmbiguities = + o2::soa::Join; +using MyMuonTracksSelectedWithColl = + o2::soa::Join; // bit maps used for the Fill functions of the VarManager -constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended; -constexpr static uint32_t gkEventFillMapWithZdc = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; -constexpr static uint32_t gkEventFillMapWithCov = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov; -// constexpr static uint32_t gkEventFillMapWithCovFlow = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ObjTypes::ReducedEventQvector; -constexpr static uint32_t gkEventFillMapWithCovZdcFit = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | VarManager::ReducedFit; -constexpr static uint32_t gkEventFillMapWithMultExtra = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventMultExtra; +constexpr static uint32_t gkEventFillMap = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; +constexpr static uint32_t gkEventFillMapWithZdc = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; +constexpr static uint32_t gkEventFillMapWithCov = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; +// constexpr static uint32_t gkEventFillMapWithCovFlow = +// VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventVtxCov | +// VarManager::ObjTypes::ReducedEventQvector; +constexpr static uint32_t gkEventFillMapWithCovZdcFit = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit; +constexpr static uint32_t gkEventFillMapWithMultExtra = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra; // New fillmap -constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ObjTypes::CollisionQvect; -// constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ObjTypes::ReducedEventQvector; -constexpr static uint32_t gkEventFillMapWithMultExtraZdc = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; -constexpr static uint32_t gkEventFillMapWithMultExtraZdcFit = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | VarManager::ReducedFit; -constexpr static uint32_t gkEventFillMapWithCovZdcFitMultExtra = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | VarManager::ReducedFit | VarManager::ReducedEventMultExtra; -constexpr static uint32_t gkEventFillMapWithQvectorCentr = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::CollisionQvect | VarManager::ObjTypes::ReducedEventMultExtra; -// constexpr static uint32_t gkEventFillMapWithQvector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventQvector; -// constexpr static uint32_t gkEventFillMapWithCovQvector = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended | VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ObjTypes::ReducedEventQvector; -constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelPID; -constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov | VarManager::ObjTypes::ReducedTrackBarrelPID; -constexpr static uint32_t gkTrackFillMapWithCovWithColl = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov | VarManager::ObjTypes::ReducedTrackBarrelPID | VarManager::ObjTypes::ReducedTrackCollInfo; -constexpr static uint32_t gkTrackFillMapWithEMCal = gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; -constexpr static uint32_t gkTrackFillMapWithCovWithEMCal = gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; - -// constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; -constexpr static uint32_t gkMuonFillMapWithCov = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | VarManager::ObjTypes::ReducedMuonCov; -// constexpr static uint32_t gkMuonFillMapWithColl = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | VarManager::ObjTypes::ReducedMuonCollInfo; +constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | + VarManager::ObjTypes::CollisionQvect; +// constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = +// VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventMultExtra | +// VarManager::ObjTypes::ReducedEventQvector; +constexpr static uint32_t gkEventFillMapWithMultExtraZdc = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; +constexpr static uint32_t gkEventFillMapWithMultExtraZdcFit = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | + VarManager::ReducedFit; +constexpr static uint32_t gkEventFillMapWithCovZdcFitMultExtra = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit | VarManager::ReducedEventMultExtra; +constexpr static uint32_t gkEventFillMapWithQvectorCentr = + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::CollisionQvect | + VarManager::ObjTypes::ReducedEventMultExtra; +// constexpr static uint32_t gkEventFillMapWithQvector = +// VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t +// gkEventFillMapWithCovQvector = VarManager::ObjTypes::ReducedEvent | +// VarManager::ObjTypes::ReducedEventExtended | +// VarManager::ObjTypes::ReducedEventVtxCov | +// VarManager::ObjTypes::ReducedEventQvector; +constexpr static uint32_t gkTrackFillMap = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; +constexpr static uint32_t gkTrackFillMapWithCov = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; +constexpr static uint32_t gkTrackFillMapWithCovWithColl = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; +constexpr static uint32_t gkTrackFillMapWithEMCal = + gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; +constexpr static uint32_t gkTrackFillMapWithCovWithEMCal = + gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; + +// constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | +// VarManager::ObjTypes::ReducedMuonExtra; +constexpr static uint32_t gkMuonFillMapWithCov = + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; +// constexpr static uint32_t gkMuonFillMapWithColl = +// VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | +// VarManager::ObjTypes::ReducedMuonCollInfo; constexpr static int pairTypeEE = VarManager::kDecayToEE; constexpr static int pairTypeMuMu = VarManager::kDecayToMuMu; // constexpr static int pairTypeEMu = VarManager::kElectronMuon; -namespace dqtablereader_helpers -{ -inline float* varValues() { return static_cast(VarManager::fgValues); } -inline TString* varNames() { return static_cast(VarManager::fgVariableNames); } -inline TString* varUnits() { return static_cast(VarManager::fgVariableUnits); } +namespace dqtablereader_helpers { +inline float *varValues() { return static_cast(VarManager::fgValues); } +inline TString *varNames() { + return static_cast(VarManager::fgVariableNames); +} +inline TString *varUnits() { + return static_cast(VarManager::fgVariableUnits); +} } // namespace dqtablereader_helpers // Global function used to define needed histogram classes -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, const char* histGroups); // defines histograms for all tasks +void DefineHistograms( + HistogramManager *histMan, const TString &histClasses, + const char *histGroups); // defines histograms for all tasks -template -void PrintBitMap(TMap map, int nbits) -{ +template void PrintBitMap(TMap map, int nbits) { std::string bits; bits.reserve(nbits); for (int i = 0; i < nbits; i++) { @@ -338,7 +583,8 @@ void PrintBitMap(TMap map, int nbits) LOG(info) << bits; } -// Analysis task that produces event decisions (analysis cut, in bunch pileup and split collision check) and the Hash table used in event mixing +// Analysis task that produces event decisions (analysis cut, in bunch pileup +// and split collision check) and the Hash table used in event mixing struct AnalysisEventSelection { o2::framework::Produces eventSel; @@ -346,49 +592,99 @@ struct AnalysisEventSelection { o2::framework::Produces JetEvents; o2::framework::OutputObj fOutputList{"output"}; - // TODO: Provide the mixing variables and binning directly via configurables (e.g. vectors of float) - o2::framework::Configurable fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"}; - o2::framework::Configurable fConfigMixingVariablesJson{"cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; - o2::framework::Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"}; - o2::framework::Configurable fConfigEventCutsJSON{"cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; - o2::framework::Configurable fConfigAddEventHistogram{"cfgAddEventHistogram", "", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Add event histograms defined via JSON formatting (see HistogramsLibrary)"}; - o2::framework::Configurable fConfigQA{"cfgQA", true, "If true, QA histograms will be created and filled"}; - - o2::framework::Configurable fConfigITSROFrameStartBorderMargin{"cfgITSROFrameStartBorderMargin", -1, "Number of bcs at the start of ITS RO Frame border. Take from CCDB if -1"}; - o2::framework::Configurable fConfigITSROFrameEndBorderMargin{"cfgITSROFrameEndBorderMargin", -1, "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; - - o2::framework::Configurable fConfigSplitCollisionsDeltaZ{"cfgSplitCollisionsDeltaZ", 1.0, "maximum delta-z (cm) between two collisions to consider them as split candidates"}; - o2::framework::Configurable fConfigSplitCollisionsDeltaBC{"cfgSplitCollisionsDeltaBC", 100, "maximum delta-BC between two collisions to consider them as split candidates; do not apply if value is negative"}; - o2::framework::Configurable fConfigCheckSplitCollisions{"cfgCheckSplitCollisions", false, "If true, run the split collision check and fill histograms"}; - - o2::framework::Configurable fConfigRunZorro{"cfgRunZorro", false, "Enable event selection with zorro [WARNING: under debug, do not enable!]"}; - o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - o2::framework::Configurable fConfigFetchInteractionRate{"cfgFetchInteractionRate", false, "Fetch event-wise interaction rate from the CCDB"}; - o2::framework::Configurable fConfigIRSource{"cfgIRSource", "ZNC hadronic", "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; - - HistogramManager* fHistMan = nullptr; - MixingHandler* fMixHandler = nullptr; - AnalysisCompositeCut* fEventCut = nullptr; + // TODO: Provide the mixing variables and binning directly via configurables + // (e.g. vectors of float) + o2::framework::Configurable fConfigMixingVariables{ + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; + o2::framework::Configurable fConfigMixingVariablesJson{ + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + o2::framework::Configurable fConfigEventCuts{ + "cfgEventCuts", "eventStandard", "Event selection"}; + o2::framework::Configurable fConfigEventCutsJSON{ + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + o2::framework::Configurable fConfigAddEventHistogram{ + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; + o2::framework::Configurable fConfigQA{ + "cfgQA", true, "If true, QA histograms will be created and filled"}; + + o2::framework::Configurable fConfigITSROFrameStartBorderMargin{ + "cfgITSROFrameStartBorderMargin", -1, + "Number of bcs at the start of ITS RO Frame border. Take from CCDB if " + "-1"}; + o2::framework::Configurable fConfigITSROFrameEndBorderMargin{ + "cfgITSROFrameEndBorderMargin", -1, + "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; + + o2::framework::Configurable fConfigSplitCollisionsDeltaZ{ + "cfgSplitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; + o2::framework::Configurable fConfigSplitCollisionsDeltaBC{ + "cfgSplitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; + o2::framework::Configurable fConfigCheckSplitCollisions{ + "cfgCheckSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; + + o2::framework::Configurable fConfigRunZorro{ + "cfgRunZorro", false, + "Enable event selection with zorro [WARNING: under debug, do not " + "enable!]"}; + o2::framework::Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + o2::framework::Configurable fConfigFetchInteractionRate{ + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; + o2::framework::Configurable fConfigIRSource{ + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; + + HistogramManager *fHistMan = nullptr; + MixingHandler *fMixHandler = nullptr; + AnalysisCompositeCut *fEventCut = nullptr; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; o2::ctpRateFetcher rateFetcher; - std::map fSelMap; // key: reduced event global index, value: event selection decision - std::map> fBCCollMap; // key: global BC, value: vector of reduced event global indices + std::map fSelMap; // key: reduced event global index, value: + // event selection decision + std::map> + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices int fCurrentRun = -1; - void init(o2::framework::InitContext& context) - { - - bool isAnyProcessEnabled = context.mOptions.get("processSkimmed") || context.mOptions.get("processSkimmedBasic") || context.mOptions.get("processSkimmedWithZdc") || context.mOptions.get("processSkimmedWithMultExtra") || context.mOptions.get("processSkimmedWithMultExtraNoQvector") || context.mOptions.get("processSkimmedWithMultExtraZdc") || context.mOptions.get("processSkimmedWithMultExtraZdcFit") || context.mOptions.get("processSkimmedWithQvectorCentr") || context.mOptions.get("processSkimmedWithQvectorCentrMerge"); + void init(o2::framework::InitContext &context) { + + bool isAnyProcessEnabled = + context.mOptions.get("processSkimmed") || + context.mOptions.get("processSkimmedBasic") || + context.mOptions.get("processSkimmedWithZdc") || + context.mOptions.get("processSkimmedWithMultExtra") || + context.mOptions.get("processSkimmedWithMultExtraNoQvector") || + context.mOptions.get("processSkimmedWithMultExtraZdc") || + context.mOptions.get("processSkimmedWithMultExtraZdcFit") || + context.mOptions.get("processSkimmedWithQvectorCentr") || + context.mOptions.get("processSkimmedWithQvectorCentrMerge"); bool isDummyEnabled = context.mOptions.get("processDummy"); if (isDummyEnabled) { if (isAnyProcessEnabled) { - LOG(fatal) << "You have enabled both the dummy process and at least one normal process function! Check your config!"; + LOG(fatal) << "You have enabled both the dummy process and at least " + "one normal process function! Check your config!"; } return; } @@ -401,7 +697,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut* cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut *cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -409,24 +705,31 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const& cutIt : jsonCuts) { + std::vector jsonCuts = + o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const &cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); - DefineHistograms(fHistMan, "Event_BeforeCuts;Event_AfterCuts;", fConfigAddEventHistogram.value.data()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); + DefineHistograms(fHistMan, "Event_BeforeCuts;Event_AfterCuts;", + fConfigAddEventHistogram.value.data()); if (fConfigCheckSplitCollisions) { - DefineHistograms(fHistMan, "SameBunchCorrelations;OutOfBunchCorrelations;", ""); + DefineHistograms(fHistMan, + "SameBunchCorrelations;OutOfBunchCorrelations;", ""); } // Additional histograms via JSON - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, fConfigAddJSONHistograms.value.c_str()); VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -439,11 +742,13 @@ struct AnalysisEventSelection { fMixHandler->Init(); if (objArray->GetEntries() > 0) { for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) { - o2::aod::dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName()); + o2::aod::dqmixing::SetUpMixing(fMixHandler, + objArray->At(iVar)->GetName()); } } if (mixVarsJsonString != "") { - o2::aod::dqmixing::SetUpMixingFromJSON(fMixHandler, mixVarsJsonString.Data()); + o2::aod::dqmixing::SetUpMixingFromJSON(fMixHandler, + mixVarsJsonString.Data()); } } @@ -456,53 +761,71 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const& events) - { + void runEventSelection(TEvents const &events) { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { std::map metadataRCT, header; - header = fCCDBApi.retrieveHeaders(Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), metadataRCT, -1); + header = fCCDBApi.retrieveHeaders( + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); - auto alppar = fCCDB->getForTimeStamp>("ITS/Config/AlpideParam", events.begin().timestamp()); - auto par = fCCDB->getForTimeStamp("EventSelection/EventSelectionParams", events.begin().timestamp()); - int itsROFrameStartBorderMargin = fConfigITSROFrameStartBorderMargin < 0 ? par->fITSROFrameStartBorderMargin : fConfigITSROFrameStartBorderMargin; - int itsROFrameEndBorderMargin = fConfigITSROFrameEndBorderMargin < 0 ? par->fITSROFrameEndBorderMargin : fConfigITSROFrameEndBorderMargin; - VarManager::SetITSROFBorderselection(alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); + auto alppar = fCCDB->getForTimeStamp>( + "ITS/Config/AlpideParam", events.begin().timestamp()); + auto par = fCCDB->getForTimeStamp( + "EventSelection/EventSelectionParams", events.begin().timestamp()); + int itsROFrameStartBorderMargin = + fConfigITSROFrameStartBorderMargin < 0 + ? par->fITSROFrameStartBorderMargin + : fConfigITSROFrameStartBorderMargin; + int itsROFrameEndBorderMargin = fConfigITSROFrameEndBorderMargin < 0 + ? par->fITSROFrameEndBorderMargin + : fConfigITSROFrameEndBorderMargin; + VarManager::SetITSROFBorderselection( + alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, + itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); fCurrentRun = events.begin().runNumber(); } fSelMap.clear(); fBCCollMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { - VarManager::fgValues[VarManager::kInteractionRate] = rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, fConfigIRSource.value, true) / 1000.; // kHz + VarManager::fgValues[VarManager::kInteractionRate] = + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } bool decision = false; // Fill histograms in the class Event, before cuts if (fConfigQA) { - fHistMan->FillHistClass("Event_BeforeCuts", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("Event_BeforeCuts", + dqtablereader_helpers::varValues()); } // Apply event cuts and fill histograms after selection if (fEventCut->IsSelected(dqtablereader_helpers::varValues())) { if (fConfigRunZorro) { - if (event.tag_bit(56)) { // This is the bit used for the software trigger event selections [TO BE DONE: find a more clear way to use it] + if (event.tag_bit(56)) { // This is the bit used for the software + // trigger event selections [TO BE DONE: find + // a more clear way to use it] if (fConfigQA) { - fHistMan->FillHistClass("Event_AfterCuts", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("Event_AfterCuts", + dqtablereader_helpers::varValues()); } decision = true; } } else { if (fConfigQA) { - fHistMan->FillHistClass("Event_AfterCuts", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("Event_AfterCuts", + dqtablereader_helpers::varValues()); } decision = true; } @@ -516,14 +839,16 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto& evIndices = fBCCollMap[event.globalBC()]; + auto &evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } // create the mixing hash and publish it into the hash table if (fMixHandler != nullptr) { - int hh = fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); - // events outside the mixing limits (-1) get a distinct negative hash so that they are not mixed with each other + int hh = + fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); + // events outside the mixing limits (-1) get a distinct negative hash so + // that they are not mixed with each other if (hh < 0) { hh = -1 - static_cast(event.globalIndex()); } @@ -533,61 +858,76 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const& events) - { + void publishSelections(TEvents const &events) { // Create a map for collisions which are candidate of being split - // key: event global index, value: whether pileup event is a possible splitting + // key: event global index, value: whether pileup event is a possible + // splitting std::map collisionSplittingMap; if (fConfigCheckSplitCollisions) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); - // loop over the BC map, get the collision vectors and make in-bunch and out of bunch 2-event correlations - for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { + // loop over the BC map, get the collision vectors and make in-bunch and + // out of bunch 2-event correlations + for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); + ++bc1It) { uint64_t bc1 = bc1It->first; - auto const& bc1Events = bc1It->second; + auto const &bc1Events = bc1It->second; - // same bunch event correlations, if more than 1 collisions in this bunch + // same bunch event correlations, if more than 1 collisions in this + // bunch if (bc1Events.size() > 1) { - for (auto ev1It = bc1Events.begin(); ev1It != bc1Events.end(); ++ev1It) { + for (auto ev1It = bc1Events.begin(); ev1It != bc1Events.end(); + ++ev1It) { auto ev1 = events.rawIteratorAt(*ev1It); - for (auto ev2It = std::next(ev1It); ev2It != bc1Events.end(); ++ev2It) { + for (auto ev2It = std::next(ev1It); ev2It != bc1Events.end(); + ++ev2It) { auto ev2 = events.rawIteratorAt(*ev2It); - // compute 2-event quantities and mark the candidate split collisions + // compute 2-event quantities and mark the candidate split + // collisions VarManager::FillTwoEvents(ev1, ev2); - if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < fConfigSplitCollisionsDeltaZ) { // this is a possible collision split + if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < + fConfigSplitCollisionsDeltaZ) { // this is a possible + // collision split collisionSplittingMap[*ev1It] = true; collisionSplittingMap[*ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("SameBunchCorrelations", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("SameBunchCorrelations", + dqtablereader_helpers::varValues()); } } // end second event loop } // end first event loop } // end if BC1 events > 1 // loop over the following BCs in the TF - for (auto bc2It = std::next(bc1It); bc2It != fBCCollMap.end(); ++bc2It) { + for (auto bc2It = std::next(bc1It); bc2It != fBCCollMap.end(); + ++bc2It) { uint64_t bc2 = bc2It->first; - if ((bc2 > bc1 ? bc2 - bc1 : bc1 - bc2) > fConfigSplitCollisionsDeltaBC) { + if ((bc2 > bc1 ? bc2 - bc1 : bc1 - bc2) > + fConfigSplitCollisionsDeltaBC) { break; } - auto const& bc2Events = bc2It->second; + auto const &bc2Events = bc2It->second; // loop over events in the first BC - for (auto const& ev1It : bc1Events) { + for (auto const &ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (auto const& ev2It : bc2Events) { + for (auto const &ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); - // compute 2-event quantities and mark the candidate split collisions + // compute 2-event quantities and mark the candidate split + // collisions VarManager::FillTwoEvents(ev1, ev2); - if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < fConfigSplitCollisionsDeltaZ) { // this is a possible collision split + if (TMath::Abs(VarManager::fgValues[VarManager::kTwoEvDeltaZ]) < + fConfigSplitCollisionsDeltaZ) { // this is a possible + // collision split collisionSplittingMap[ev1It] = true; collisionSplittingMap[ev2It] = true; } if (fConfigQA) { - fHistMan->FillHistClass("OutOfBunchCorrelations", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("OutOfBunchCorrelations", + dqtablereader_helpers::varValues()); } } } @@ -597,7 +937,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const& event : events) { + for (auto const &event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -606,138 +946,206 @@ struct AnalysisEventSelection { if (sameBunchEvents.size() > 1) { // event with in-bunch pileup evSel |= (static_cast(1) << 1); } - if (collisionSplittingMap.find(event.globalIndex()) != collisionSplittingMap.end()) { // event with possible fake in-bunch pileup (collision splitting) + if (collisionSplittingMap.find(event.globalIndex()) != + collisionSplittingMap.end()) { // event with possible fake in-bunch + // pileup (collision splitting) evSel |= (static_cast(1) << 2); } eventSel(evSel); } } - void processSkimmed(MyEvents const& events) - { + void processSkimmed(MyEvents const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedBasic(MyEventsBasic const& events) - { + void processSkimmedBasic(MyEventsBasic const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithZdc(MyEventsZdc const& events) - { + void processSkimmedWithZdc(MyEventsZdc const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtra(MyEventsMultExtra const& events) - { + void processSkimmedWithMultExtra(MyEventsMultExtra const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtraNoQvector(MyEventsMultExtraNoQvector const& events) - { + void processSkimmedWithMultExtraNoQvector( + MyEventsMultExtraNoQvector const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const& events) - { + void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const& events) - { + void + processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const& events) - { + void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const& events) - { + void + processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const &events) { runEventSelection(events); publishSelections(events); } - void processFillEvents(MyEventsBasic const& events) // Used to forward the event table from tablemaker, typical use for now is jet analysis. + void processFillEvents( + MyEventsBasic const + &events) // Used to forward the event table from tablemaker, typical + // use for now is jet analysis. { - for (auto const& event : events) { - JetEvents(event.tag_raw(), - event.runNumber(), - event.posX(), - event.posY(), - event.posZ(), - event.numContrib(), - event.collisionTime(), + for (auto const &event : events) { + JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), + event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisEventSelection, processSkimmed, "Run event selection on DQ skimmed events", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedBasic, "Run event selection on DQ skimmed events with basic tables", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithZdc, "Run event selection on DQ skimmed events, with ZDC", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtra, "Run event selection on DQ skimmed events, with mult extra", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtraNoQvector, "Run event selection on DQ skimmed events, with mult extra and without Q-vector", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtraZdc, "Run event selection on DQ skimmed events, with mult extra and ZDC", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentr, "Run event selection on DQ skimmed events, with Q-vector", false); - PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentrMerge, "Run event selection on DQ skimmed events, with Q-vector and ReducedEventsMergingTable", false); - PROCESS_SWITCH(AnalysisEventSelection, processFillEvents, "Fill storedReducedEvents table for use in JE framework", false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmed, + "Run event selection on DQ skimmed events", false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedBasic, + "Run event selection on DQ skimmed events with basic tables", + false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithZdc, + "Run event selection on DQ skimmed events, with ZDC", false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtra, + "Run event selection on DQ skimmed events, with mult extra", + false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithMultExtraNoQvector, + "Run event selection on DQ skimmed events, with mult extra " + "and without Q-vector", + false); + PROCESS_SWITCH( + AnalysisEventSelection, processSkimmedWithMultExtraZdc, + "Run event selection on DQ skimmed events, with mult extra and ZDC", + false); + PROCESS_SWITCH( + AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, + "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", + false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentr, + "Run event selection on DQ skimmed events, with Q-vector", + false); + PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentrMerge, + "Run event selection on DQ skimmed events, with Q-vector and " + "ReducedEventsMergingTable", + false); + PROCESS_SWITCH(AnalysisEventSelection, processFillEvents, + "Fill storedReducedEvents table for use in JE framework", + false); PROCESS_SWITCH(AnalysisEventSelection, processDummy, "Dummy function", true); }; -// o2::framework::Produces a table with barrel track decisions (joinable to the ReducedTracksAssociations) -// Here one should add all the track cuts needed through the workflow (e.g. cuts for same-even pairing, electron prefiltering, track for dilepton-track correlations) +// o2::framework::Produces a table with barrel track decisions (joinable to the +// ReducedTracksAssociations) Here one should add all the track cuts needed +// through the workflow (e.g. cuts for same-even pairing, electron prefiltering, +// track for dilepton-track correlations) struct AnalysisTrackSelection { o2::framework::Produces trackSel; o2::framework::Produces trackAmbiguities; o2::framework::OutputObj fOutputList{"output"}; - o2::framework::Configurable fConfigCuts{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"}; - o2::framework::Configurable fConfigCutsJSON{"cfgBarrelTrackCutsJSON", "", "Additional list of barrel track cuts in JSON format"}; - o2::framework::Configurable fConfigAddTrackHistogram{"cfgAddTrackHistogram", "", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - o2::framework::Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; - // Re-application of the track-to-collision time compatibility on the skimmed associations. - // timeMargin and nSigma must be <= the values used by track-to-collision-associator at skimming time; - // bcWindow, usePVAssociation and maxPvContributors must be identical to those values. + o2::framework::Configurable fConfigCuts{ + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; + o2::framework::Configurable fConfigCutsJSON{ + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; + o2::framework::Configurable fConfigAddTrackHistogram{ + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + o2::framework::Configurable fConfigQA{"cfgQA", false, + "If true, fill QA histograms"}; + o2::framework::Configurable fConfigPublishAmbiguity{ + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; + // Re-application of the track-to-collision time compatibility on the skimmed + // associations. + // timeMargin and nSigma must be <= the values used by + // track-to-collision-associator at skimming time; bcWindow, + // usePVAssociation and maxPvContributors must be identical to those values. struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable cfgAssocTimeCut{"cfgAssocTimeCut", false, "If true, reject associations failing the time compatibility computed with the parameters below"}; - o2::framework::Configurable cfgAssocTimeMargin{"cfgAssocTimeMargin", 0.f, "time margin (ns); must be <= skimming timeMargin"}; - o2::framework::Configurable cfgAssocNSigma{"cfgAssocNSigma", 4.f, "nSigmaForTimeCompat; must be <= skimming value"}; - o2::framework::Configurable cfgAssocBcWindowForOneSigma{"cfgAssocBcWindowForOneSigma", 60, "bcWindowForOneSigma; must be equal to the skimming value"}; - o2::framework::Configurable cfgAssocUsePVAssociation{"cfgAssocUsePVAssociation", 1, "usePVAssociation; must be equal to the skimming value"}; - o2::framework::Configurable cfgAssocMaxPvContributorsForLowMultReassoc{"cfgAssocMaxPvContributorsForLowMultReassoc", 10, "maxPvContributorsForLowMultReassoc; must be equal to the skimming value"}; + o2::framework::Configurable cfgAssocTimeCut{ + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; + o2::framework::Configurable cfgAssocTimeMargin{ + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; + o2::framework::Configurable cfgAssocNSigma{ + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; + o2::framework::Configurable cfgAssocBcWindowForOneSigma{ + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; + o2::framework::Configurable cfgAssocUsePVAssociation{ + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; + o2::framework::Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; - o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable fConfigCcdbPathTPC{"ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", "base path to the ccdb object"}; - o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - - o2::framework::Configurable fConfigComputeTPCpostCalib{"cfgTPCpostCalib", false, "If true, compute TPC post-calibrated n-sigmas"}; - o2::framework::Configurable fConfigTPCpostCalibType{"cfgTPCpostCalibType", 1, "1: (TPCncls,pIN,eta) calibration typically for pp, 2: (eta,nPV,nLong,tLong) calibration typically for PbPb"}; - o2::framework::Configurable fConfigTPCuseInterpolatedCalib{"cfgTPCpostCalibUseInterpolation", true, "If true, use interpolated calibration values (default: true)"}; - o2::framework::Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; + o2::framework::Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable fConfigCcdbPathTPC{ + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; + o2::framework::Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + + o2::framework::Configurable fConfigComputeTPCpostCalib{ + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; + o2::framework::Configurable fConfigTPCpostCalibType{ + "cfgTPCpostCalibType", 1, + "1: (TPCncls,pIN,eta) calibration typically for pp, 2: " + "(eta,nPV,nLong,tLong) calibration typically for PbPb"}; + o2::framework::Configurable fConfigTPCuseInterpolatedCalib{ + "cfgTPCpostCalibUseInterpolation", true, + "If true, use interpolated calibration values (default: true)"}; + o2::framework::Configurable grpmagPath{ + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; // Track related options - o2::framework::Configurable fPropTrack{"cfgPropTrack", true, "Propgate tracks to associated collision to recalculate DCA and momentum vector"}; + o2::framework::Configurable fPropTrack{ + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and momentum " + "vector"}; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; - HistogramManager* fHistMan = nullptr; - std::vector fTrackCuts; + HistogramManager *fHistMan = nullptr; + std::vector fTrackCuts; - int fCurrentRun = 0; // current run kept to detect run changes and trigger loading params from CCDB + int fCurrentRun = 0; // current run kept to detect run changes and trigger + // loading params from CCDB - std::map> fNAssocsInBunch; // key: track global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) - std::map> fNAssocsOutOfBunch; // key: track global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) + std::map> + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) + std::map> + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -748,37 +1156,50 @@ struct AnalysisTrackSelection { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fTrackCuts.push_back(o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fTrackCuts.push_back( + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra cuts via JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { - fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + fHistMan = + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackBarrel_BeforeCuts;"; - for (auto const& cut : fTrackCuts) { + for (auto const &cut : fTrackCuts) { histDirNames += Form("TrackBarrel_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { - histDirNames += "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; - } - - DefineHistograms(fHistMan, histDirNames.Data(), fConfigAddTrackHistogram.value.data()); // define all histograms - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + histDirNames += + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; + } + + DefineHistograms( + fHistMan, histDirNames.Data(), + fConfigAddTrackHistogram.value.data()); // define all histograms + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -789,38 +1210,61 @@ struct AnalysisTrackSelection { fCCDBApi.init(fConfigCcdbUrl.value); } - template - void runTrackSelection(o2::aod::ReducedTracksAssoc const& assocs, TEvents const& events, TTracks const& tracks) - { + template + void runTrackSelection(o2::aod::ReducedTracksAssoc const &assocs, + TEvents const &events, TTracks const &tracks) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { - auto calibList = fCCDB->getForTimeStamp(fConfigCcdbPathTPC.value, events.begin().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")); + auto calibList = fCCDB->getForTimeStamp( + fConfigCcdbPathTPC.value, events.begin().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 (fConfigTPCpostCalibType == 2) { - VarManager::SetCalibrationObject(VarManager::kTPCElectronStatus, calibList->FindObject("status_map_electron")); - VarManager::SetCalibrationObject(VarManager::kTPCPionStatus, calibList->FindObject("status_map_pion")); - VarManager::SetCalibrationObject(VarManager::kTPCProtonStatus, calibList->FindObject("status_map_proton")); + VarManager::SetCalibrationObject( + VarManager::kTPCElectronStatus, + calibList->FindObject("status_map_electron")); + VarManager::SetCalibrationObject( + VarManager::kTPCPionStatus, + calibList->FindObject("status_map_pion")); + VarManager::SetCalibrationObject( + VarManager::kTPCProtonStatus, + calibList->FindObject("status_map_proton")); } - VarManager::SetCalibrationType(fConfigTPCpostCalibType, fConfigTPCuseInterpolatedCalib); + VarManager::SetCalibrationType(fConfigTPCpostCalibType, + fConfigTPCuseInterpolatedCalib); } - auto grpmag = fCCDB->getForTimeStamp(grpmagPath, events.begin().timestamp()); + auto grpmag = fCCDB->getForTimeStamp( + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", events.begin().timestamp()); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + events.begin().timestamp()); } std::map metadataRCT, header; - header = fCCDBApi.retrieveHeaders(Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), metadataRCT, -1); + header = fCCDBApi.retrieveHeaders( + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -833,28 +1277,33 @@ struct AnalysisTrackSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { - // if the event from this association is not selected, reject also the association + // if the event from this association is not selected, reject also the + // association auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { trackSel(0); continue; } VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); - // fill event information which might be needed in histograms/cuts that combine track and event properties + // fill event information which might be needed in histograms/cuts that + // combine track and event properties VarManager::FillEvent(event); auto track = assoc.template reducedtrack_as(); - // Reject incompatible associations while preserving the row alignment of trackSel. - // The track time is referenced to its original collision, not the associated one. + // Reject incompatible associations while preserving the row alignment of + // trackSel. The track time is referenced to its original collision, not + // the associated one. if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); - if (!VarManager::isBarrelAssocTimeCompatible(track, event, origEvent, - fConfigAssocTime.cfgAssocNSigma, fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + if (!VarManager::isBarrelAssocTimeCompatible( + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } @@ -862,27 +1311,36 @@ struct AnalysisTrackSelection { filterMap = static_cast(0); VarManager::FillTrack(track); - // compute quantities which depend on the associated collision, such as DCA + // compute quantities which depend on the associated collision, such as + // DCA if (fPropTrack) { VarManager::FillTrackCollision(track, event); } // fill the quantities of the matched EMCal cluster (e.g. E/p); - // tracks without a matched cluster keep the sentinel values set by ResetValues - if constexpr (static_cast(TTrackFillMap & VarManager::ObjTypes::TrackEMCal)) { + // tracks without a matched cluster keep the sentinel values set by + // ResetValues + if constexpr (static_cast(TTrackFillMap & + VarManager::ObjTypes::TrackEMCal)) { if (track.has_matchedEMCalCluster()) { - auto cluster = track.template matchedEMCalCluster_as(); - VarManager::FillTrackEMCal(cluster, track.p(), track.emcalMatchDeltaEta(), track.emcalMatchDeltaPhi()); + auto cluster = + track.template matchedEMCalCluster_as(); + VarManager::FillTrackEMCal(cluster, track.p(), + track.emcalMatchDeltaEta(), + track.emcalMatchDeltaPhi()); } } if (fConfigQA) { - fHistMan->FillHistClass("TrackBarrel_BeforeCuts", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("TrackBarrel_BeforeCuts", + dqtablereader_helpers::varValues()); } iCut = 0; - for (auto cut = fTrackCuts.begin(); cut != fTrackCuts.end(); cut++, iCut++) { + for (auto cut = fTrackCuts.begin(); cut != fTrackCuts.end(); + cut++, iCut++) { if ((*cut)->IsSelected(dqtablereader_helpers::varValues())) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(Form("TrackBarrel_%s", (*cut)->GetName()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("TrackBarrel_%s", (*cut)->GetName()), + dqtablereader_helpers::varValues()); } } } // end loop over cuts @@ -892,21 +1350,24 @@ struct AnalysisTrackSelection { // count the number of associations per track if (fConfigPublishAmbiguity && filterMap > 0) { - // for this track, count the number of associated collisions with in-bunch pileup and out of bunch associations + // for this track, count the number of associated collisions with + // in-bunch pileup and out of bunch associations if (event.isEventSelected_bit(1)) { - if (fNAssocsInBunch.find(track.globalIndex()) == fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) == + fNAssocsInBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { - if (fNAssocsOutOfBunch.find(track.globalIndex()) == fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) == + fNAssocsOutOfBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -916,19 +1377,22 @@ struct AnalysisTrackSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } auto track = tracks.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); - // Exceptionally, set the VarManager ambiguity number here, to be used in histograms - VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqtablereader_helpers::varValues()); + // Exceptionally, set the VarManager ambiguity number here, to be used + // in histograms + VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", + dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -936,19 +1400,23 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); // Exceptionally, set the VarManager ambiguity number here - VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); + VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", + dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : tracks) { + for (auto const &track : tracks) { int8_t nInBunch = 0; - if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) != + fNAssocsInBunch.end()) { nInBunch = fNAssocsInBunch[track.globalIndex()].size(); } int8_t nOutOfBunch = 0; - if (fNAssocsOutOfBunch.find(track.globalIndex()) != fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) != + fNAssocsOutOfBunch.end()) { nOutOfBunch = fNAssocsOutOfBunch[track.globalIndex()].size(); } trackAmbiguities(nInBunch, nOutOfBunch); @@ -957,68 +1425,114 @@ struct AnalysisTrackSelection { } // end runTrackSelection() - void processSkimmed(o2::aod::ReducedTracksAssoc const& assocs, MyEventsSelected const& events, MyBarrelTracks const& tracks) - { + void processSkimmed(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks) { runTrackSelection(assocs, events, tracks); } - void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const& assocs, MyEventsMultExtraSelected const& events, MyBarrelTracks const& tracks) - { - runTrackSelection(assocs, events, tracks); + void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsMultExtraSelected const &events, + MyBarrelTracks const &tracks) { + runTrackSelection( + assocs, events, tracks); } - void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const& assocs, MyEventsVtxCovSelected const& events, MyBarrelTracksWithCov const& tracks) - { - runTrackSelection(assocs, events, tracks); + void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCov const &tracks) { + runTrackSelection( + assocs, events, tracks); } - void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, MyEventsSelected const& events, MyBarrelTracksWithEMCal const& tracks, o2::aod::ReducedEMCals const& /*emcals*/) - { - runTrackSelection(assocs, events, tracks); + void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracksWithEMCal const &tracks, + o2::aod::ReducedEMCals const & /*emcals*/) { + runTrackSelection(assocs, events, + tracks); } - void processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, MyEventsVtxCovSelected const& events, MyBarrelTracksWithCovWithEMCal const& tracks, o2::aod::ReducedEMCals const& /*emcals*/) - { - runTrackSelection(assocs, events, tracks); + void + processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCovWithEMCal const &tracks, + o2::aod::ReducedEMCals const & /*emcals*/) { + runTrackSelection( + assocs, events, tracks); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmed, "Run barrel track selection on DQ skimmed track associations", false); - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithMultExtra, "Run barrel track selection on DQ skimmed track associations, with extra multiplicity tables", false); - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCov, "Run barrel track selection on DQ skimmed tracks w/ cov matrix associations", false); - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithEMCal, "Run barrel track selection on DQ skimmed track associations, with EMCal matching info", false); - PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCovWithEMCal, "Run barrel track selection on DQ skimmed tracks w/ cov matrix associations, with EMCal matching info", false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmed, + "Run barrel track selection on DQ skimmed track associations", + false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithMultExtra, + "Run barrel track selection on DQ skimmed track associations, " + "with extra multiplicity tables", + false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCov, + "Run barrel track selection on DQ skimmed tracks w/ cov " + "matrix associations", + false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithEMCal, + "Run barrel track selection on DQ skimmed track associations, " + "with EMCal matching info", + false); + PROCESS_SWITCH(AnalysisTrackSelection, processSkimmedWithCovWithEMCal, + "Run barrel track selection on DQ skimmed tracks w/ cov " + "matrix associations, with EMCal matching info", + false); PROCESS_SWITCH(AnalysisTrackSelection, processDummy, "Dummy function", true); }; -// o2::framework::Produces a table with muon decisions (joinable to the ReducedMuonsAssociations) -// Here one should add all the track cuts needed through the workflow (e.g. cuts for same-event pairing, track for dilepton-track correlations) +// o2::framework::Produces a table with muon decisions (joinable to the +// ReducedMuonsAssociations) Here one should add all the track cuts needed +// through the workflow (e.g. cuts for same-event pairing, track for +// dilepton-track correlations) struct AnalysisMuonSelection { o2::framework::Produces muonSel; o2::framework::Produces muonAmbiguities; o2::framework::OutputObj fOutputList{"output"}; - o2::framework::Configurable fConfigCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; - o2::framework::Configurable fConfigCutsJSON{"cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; - o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; - o2::framework::Configurable fConfigAddMuonHistogram{"cfgAddMuonHistogram", "", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - o2::framework::Configurable fConfigPublishAmbiguity{"cfgPublishAmbiguity", true, "If true, publish ambiguity table and fill QA histograms"}; - - o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; + o2::framework::Configurable fConfigCuts{ + "cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; + o2::framework::Configurable fConfigCutsJSON{ + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + o2::framework::Configurable fConfigQA{"cfgQA", false, + "If true, fill QA histograms"}; + o2::framework::Configurable fConfigAddMuonHistogram{ + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + o2::framework::Configurable fConfigPublishAmbiguity{ + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; + + o2::framework::Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager *fHistMan = nullptr; + std::vector fMuonCuts; - int fCurrentRun = 0; // current run kept to detect run changes and trigger loading params from CCDB + int fCurrentRun = 0; // current run kept to detect run changes and trigger + // loading params from CCDB - std::map> fNAssocsInBunch; // key: muon global index, value: vector of global index for events associated in-bunch (events that have in-bunch pileup or splitting) - std::map> fNAssocsOutOfBunch; // key: muon global index, value: vector of global index for events associated out-of-bunch (events that have no in-bunch pileup) + std::map> + fNAssocsInBunch; // key: muon global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) + std::map> + fNAssocsOutOfBunch; // key: muon global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1029,37 +1543,50 @@ struct AnalysisMuonSelection { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fMuonCuts.push_back(o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fMuonCuts.push_back( + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // extra cuts from JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const& t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const &t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { - fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + fHistMan = + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackMuon_BeforeCuts;"; - for (auto const& cut : fMuonCuts) { + for (auto const &cut : fMuonCuts) { histDirNames += Form("TrackMuon_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { - histDirNames += "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; - } - - DefineHistograms(fHistMan, histDirNames.Data(), fConfigAddMuonHistogram.value.data()); // define all histograms - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + histDirNames += + "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; + } + + DefineHistograms( + fHistMan, histDirNames.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1069,9 +1596,10 @@ struct AnalysisMuonSelection { fCCDB->setCreatedNotAfter(fConfigNoLaterThan.value); } - template - void runMuonSelection(o2::aod::ReducedMuonsAssoc const& assocs, TEvents const& events, TMuons const& muons) - { + template + void runMuonSelection(o2::aod::ReducedMuonsAssoc const &assocs, + TEvents const &events, TMuons const &muons) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1084,28 +1612,32 @@ struct AnalysisMuonSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { muonSel(0); continue; } VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); - // fill event information which might be needed in histograms/cuts that combine track and event properties + // fill event information which might be needed in histograms/cuts that + // combine track and event properties VarManager::FillEvent(event); auto track = assoc.template reducedmuon_as(); filterMap = static_cast(0); VarManager::FillTrack(track); if (fConfigQA) { - fHistMan->FillHistClass("TrackMuon_BeforeCuts", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("TrackMuon_BeforeCuts", + dqtablereader_helpers::varValues()); } iCut = 0; - for (auto cut = fMuonCuts.begin(); cut != fMuonCuts.end(); cut++, iCut++) { + for (auto cut = fMuonCuts.begin(); cut != fMuonCuts.end(); + cut++, iCut++) { if ((*cut)->IsSelected(dqtablereader_helpers::varValues())) { filterMap |= (static_cast(1) << iCut); if (fConfigQA) { - fHistMan->FillHistClass(Form("TrackMuon_%s", (*cut)->GetName()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("TrackMuon_%s", (*cut)->GetName()), + dqtablereader_helpers::varValues()); } } } // end loop over cuts @@ -1114,19 +1646,21 @@ struct AnalysisMuonSelection { // count the number of associations per track if (fConfigPublishAmbiguity && filterMap > 0) { if (event.isEventSelected_bit(1)) { - if (fNAssocsInBunch.find(track.globalIndex()) == fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) == + fNAssocsInBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { - if (fNAssocsOutOfBunch.find(track.globalIndex()) == fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) == + fNAssocsOutOfBunch.end()) { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1136,37 +1670,43 @@ struct AnalysisMuonSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", dqtablereader_helpers::varValues()); + VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", + dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } auto track = muons.rawIteratorAt(trackIdx); VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); - VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = static_cast(evIndices.size()); - fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); + VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = + static_cast(evIndices.size()); + fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", + dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : muons) { + for (auto const &track : muons) { int8_t nInBunch = 0; - if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { + if (fNAssocsInBunch.find(track.globalIndex()) != + fNAssocsInBunch.end()) { nInBunch = fNAssocsInBunch[track.globalIndex()].size(); } int8_t nOutOfBunch = 0; - if (fNAssocsOutOfBunch.find(track.globalIndex()) != fNAssocsOutOfBunch.end()) { + if (fNAssocsOutOfBunch.find(track.globalIndex()) != + fNAssocsOutOfBunch.end()) { nOutOfBunch = fNAssocsOutOfBunch[track.globalIndex()].size(); } muonAmbiguities(nInBunch, nOutOfBunch); @@ -1174,42 +1714,51 @@ struct AnalysisMuonSelection { } } - void processSkimmed(o2::aod::ReducedMuonsAssoc const& assocs, MyEventsVtxCovSelected const& events, MyMuonTracksWithCov const& muons) - { - runMuonSelection(assocs, events, muons); + void processSkimmed(o2::aod::ReducedMuonsAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyMuonTracksWithCov const &muons) { + runMuonSelection( + assocs, events, muons); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisMuonSelection, processSkimmed, "Run muon selection on DQ skimmed muons", false); + PROCESS_SWITCH(AnalysisMuonSelection, processSkimmed, + "Run muon selection on DQ skimmed muons", false); PROCESS_SWITCH(AnalysisMuonSelection, processDummy, "Dummy function", true); }; -// Run the prefilter selection (e.g. electron prefiltering for photon conversions) -// This takes uses a sample of tracks selected with loose cuts (fConfigPrefilterTrackCut) and combines them -// with the sample of tracks to be used in downstream analysis (fConfigTrackCuts). If a pair is found to pass -// the pair prefilter cut (cfgPrefilterPairCut), the analysis track is tagged to be removed from analysis. +// Run the prefilter selection (e.g. electron prefiltering for photon +// conversions) This takes uses a sample of tracks selected with loose cuts +// (fConfigPrefilterTrackCut) and combines them +// with the sample of tracks to be used in downstream analysis +// (fConfigTrackCuts). If a pair is found to pass the pair prefilter cut +// (cfgPrefilterPairCut), the analysis track is tagged to be removed from +// analysis. struct AnalysisPrefilterSelection { - o2::framework::Produces prefilter; // joinable with o2::aod::ReducedTracksAssoc + o2::framework::Produces + prefilter; // joinable with o2::aod::ReducedTracksAssoc // Configurables - o2::framework::Configurable fConfigPrefilterTrackCut{"cfgPrefilterTrackCut", "", "Prefilter track cut"}; - o2::framework::Configurable fConfigPrefilterPairCut{"cfgPrefilterPairCut", "", "Prefilter pair cut"}; - o2::framework::Configurable fConfigTrackCuts{"cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + o2::framework::Configurable fConfigPrefilterTrackCut{ + "cfgPrefilterTrackCut", "", "Prefilter track cut"}; + o2::framework::Configurable fConfigPrefilterPairCut{ + "cfgPrefilterPairCut", "", "Prefilter pair cut"}; + o2::framework::Configurable fConfigTrackCuts{ + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // TODO: Add prefilter pair cut via JSON std::map fPrefilterMap; - AnalysisCompositeCut* fPairCut = nullptr; + AnalysisCompositeCut *fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; - o2::framework::Preslice trackAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1218,7 +1767,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1231,34 +1780,43 @@ struct AnalysisPrefilterSelection { // get the cut to be used as loose selection TString prefilterTrackCutStr = fConfigPrefilterTrackCut.value; if (prefilterTrackCutStr.IsNull()) { - LOG(warn) << " No prefilter loose selection specified! Prefilter will not be run"; + LOG(warn) << " No prefilter loose selection specified! Prefilter will " + "not be run"; runPrefilter = false; } fPrefilterMask = static_cast(0); fPrefilterCutBit = -1; if (runPrefilter) { - // get the list of cuts that were computed in the barrel track-selection task and create a bit mask + // get the list of cuts that were computed in the barrel track-selection + // task and create a bit mask // to mark just the ones we want to apply a prefilter on std::string trackCuts; - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", trackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgTrackCuts", trackCuts, + false); TString allTrackCutsStr = trackCuts; // check also the cuts added via JSON and add them to the string of cuts - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", trackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { - LOG(fatal) << " Not getting any track cuts from the barrel-track-selection "; + LOG(fatal) + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { - LOG(fatal) << " Prefilter track cut not among the cuts calculated by the track-selection task! "; + LOG(fatal) << " Prefilter track cut not among the cuts calculated by " + "the track-selection task! "; } for (int icut = 0; icut < objArray->GetEntries(); ++icut) { TString tempStr = objArray->At(icut)->GetName(); @@ -1277,100 +1835,125 @@ struct AnalysisPrefilterSelection { } } if (fPrefilterMask == static_cast(0) || fPrefilterCutBit < 0) { - LOG(warn) << "No specified loose cut or track cuts for prefiltering. This task will do nothing."; - } - - VarManager::SetUseVars(AnalysisCut::fgUsedVars); // provide the list of required variables so that VarManager knows what to fill - VarManager::SetupTwoProngDCAFitter(5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables - // VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true); + LOG(warn) << "No specified loose cut or track cuts for prefiltering. " + "This task will do nothing."; + } + + VarManager::SetUseVars( + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill + VarManager::SetupTwoProngDCAFitter( + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables + // VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, + // true); } template - void runPrefilter(o2::soa::Join const& assocs, TTracks const& /*tracks*/) - { + void runPrefilter(o2::soa::Join const &assocs, + TTracks const & /*tracks*/) { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); - // NOTE: here we restrict to just pairs of opposite sign (conversions), but in principle this can be made - // a configurable and check also same-sign pairs (track splitting) + // NOTE: here we restrict to just pairs of opposite sign (conversions), + // but in principle this can be made a configurable and check also + // same-sign pairs (track splitting) if (track1.sign() * track2.sign() > 0) { continue; } - // here we check the cuts fulfilled by both tracks, for both the tight and loose selections - uint32_t track1Candidate = (assoc1.isBarrelSelected_raw() & fPrefilterMask); - uint32_t track2Candidate = (assoc2.isBarrelSelected_raw() & fPrefilterMask); + // here we check the cuts fulfilled by both tracks, for both the tight and + // loose selections + uint32_t track1Candidate = + (assoc1.isBarrelSelected_raw() & fPrefilterMask); + uint32_t track2Candidate = + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); // Here we check if we should apply the prefilter for this pair - if ((track1Candidate == 0 || !track2Loose) && (track2Candidate == 0 || !track1Loose)) { + if ((track1Candidate == 0 || !track2Loose) && + (track2Candidate == 0 || !track1Loose)) { continue; } // compute pair quantities - VarManager::FillPair(track1, track2); - // if the pair fullfils the criteria, add an entry into the prefilter map for the two tracks + VarManager::FillPair(track1, + track2); + // if the pair fullfils the criteria, add an entry into the prefilter map + // for the two tracks if (fPairCut->IsSelected(dqtablereader_helpers::varValues())) { - if (fPrefilterMap.find(track1.globalIndex()) == fPrefilterMap.end() && track1Candidate > 0) { + if (fPrefilterMap.find(track1.globalIndex()) == fPrefilterMap.end() && + track1Candidate > 0) { fPrefilterMap[track1.globalIndex()] = track1Candidate; } - if (fPrefilterMap.find(track2.globalIndex()) == fPrefilterMap.end() && track2Candidate > 0) { + if (fPrefilterMap.find(track2.globalIndex()) == fPrefilterMap.end() && + track2Candidate > 0) { fPrefilterMap[track2.globalIndex()] = track2Candidate; } } } // end loop over combinations } - void processBarrelSkimmed(MyEventsBasic const& events, o2::soa::Join const& assocs, MyBarrelTracks const& tracks) - { + void processBarrelSkimmed( + MyEventsBasic const &events, + o2::soa::Join const + &assocs, + MyBarrelTracks const &tracks) { fPrefilterMap.clear(); - for (auto const& event : events) { - auto groupedAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + for (auto const &event : events) { + auto groupedAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(groupedAssocs, tracks); } } uint32_t mymap = -1; - // If cuts were not configured, then produce a map with all 1's and publish it for all associations + // If cuts were not configured, then produce a map with all 1's and publish + // it for all associations if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { for (int i = 0; i < assocs.size(); ++i) { prefilter(mymap); } } else { - for (auto const& assoc : assocs) { - // TODO: just use the index from the assoc (no need to cast the whole track) + for (auto const &assoc : assocs) { + // TODO: just use the index from the assoc (no need to cast the whole + // track) auto track = assoc.template reducedtrack_as(); mymap = -1; if (fPrefilterMap.contains(track.globalIndex())) { - // NOTE: publish the bitwise negated bits (~), so there will be zeroes for cuts that failed the prefiltering and 1 everywhere else + // NOTE: publish the bitwise negated bits (~), so there will be zeroes + // for cuts that failed the prefiltering and 1 everywhere else mymap = ~fPrefilterMap[track.globalIndex()]; prefilter(mymap); } else { - prefilter(mymap); // track did not pass the prefilter selections, so publish just 1's + prefilter(mymap); // track did not pass the prefilter selections, so + // publish just 1's } } } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisPrefilterSelection, processBarrelSkimmed, "Run Prefilter selection on reduced tracks", false); + PROCESS_SWITCH(AnalysisPrefilterSelection, processBarrelSkimmed, + "Run Prefilter selection on reduced tracks", false); PROCESS_SWITCH(AnalysisPrefilterSelection, processDummy, "Do nothing", true); }; // Run the same-event pairing -// This task assumes that both legs of the resonance fulfill the same cuts (symmetric decay channel) +// This task assumes that both legs of the resonance fulfill the same cuts +// (symmetric decay channel) // Runs combinatorics for barrel-barrel, muon-muon and barrel-muon combinations // TODO: implement properly the barrel-muon combinations // The task implements also process functions for running event mixing @@ -1392,87 +1975,171 @@ struct AnalysisSameEventPairing { o2::framework::Produces dileptonEventInfoList; o2::framework::Produces dileptonMiniTree; - o2::base::MatLayerCylSet* fLUT = nullptr; - TH1D* ResoFlowSP = nullptr; - TH1D* ResoFlowEP = nullptr; - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + o2::base::MatLayerCylSet *fLUT = nullptr; + TH1D *ResoFlowSP = nullptr; + TH1D *ResoFlowEP = nullptr; + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. o2::framework::OutputObj fOutputList{"output"}; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable track{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"}; - o2::framework::Configurable muon{"cfgMuonCuts", "", "Comma separated list of muon cuts"}; - o2::framework::Configurable pair{"cfgPairCuts", "", "Comma separated list of pair cuts"}; - o2::framework::Configurable qVector{"cfgQvectorTrackCut", "", "Track cut of Q-vector, enable this if you want to remove the auto-correlation in TPC"}; - o2::framework::Configurable event{"cfgRemoveCollSplittingCandidates", false, "If true, remove collision splitting candidates as determined by the event selection task upstream"}; + o2::framework::Configurable track{ + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; + o2::framework::Configurable muon{ + "cfgMuonCuts", "", "Comma separated list of muon cuts"}; + o2::framework::Configurable pair{ + "cfgPairCuts", "", "Comma separated list of pair cuts"}; + o2::framework::Configurable qVector{ + "cfgQvectorTrackCut", "", + "Track cut of Q-vector, enable this if you want to remove the " + "auto-correlation in TPC"}; + o2::framework::Configurable event{ + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; // TODO: Add pair cuts via JSON } fConfigCuts; - o2::framework::Configurable fConfigMixingDepth{"cfgMixingDepth", 100, "Number of Events stored for event mixing"}; - o2::framework::Configurable fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"}; - o2::framework::Configurable fConfigMixingVariablesJson{"cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; - o2::framework::Configurable fConfigRunMixingAcrossTFs{"cfgRunMixingAcrossTFs", false, "If true, run event mixing using the MixingHandler which accumulates events across multiple TFs"}; - // o2::framework::Configurable fConfigAddEventMixingHistogram{"cfgAddEventMixingHistogram", "", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddSEPHistogram{"cfgAddSEPHistogram", "", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - o2::framework::Configurable fConfigQA{"cfgQA", true, "If true, fill output histograms"}; - o2::framework::Configurable fConfigAmbiguousMuonHistograms{"cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; + o2::framework::Configurable fConfigMixingDepth{ + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + o2::framework::Configurable fConfigMixingVariables{ + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; + o2::framework::Configurable fConfigMixingVariablesJson{ + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + o2::framework::Configurable fConfigRunMixingAcrossTFs{ + "cfgRunMixingAcrossTFs", false, + "If true, run event mixing using the MixingHandler which accumulates " + "events across multiple TFs"}; + // o2::framework::Configurable + // fConfigAddEventMixingHistogram{"cfgAddEventMixingHistogram", "", "Comma + // separated list of histograms"}; + o2::framework::Configurable fConfigAddSEPHistogram{ + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + o2::framework::Configurable fConfigQA{ + "cfgQA", true, "If true, fill output histograms"}; + o2::framework::Configurable fConfigAmbiguousMuonHistograms{ + "cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; // option for TR pair fill - o2::framework::Configurable fConfigTRPairs{"cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; - o2::framework::Configurable fConfigNRotations{"cfgNRotations", 3, "Number of rotations for event plane preserving track rotation method, only 1 or 3 are supported"}; + o2::framework::Configurable fConfigTRPairs{ + "cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; + o2::framework::Configurable fConfigNRotations{ + "cfgNRotations", 3, + "Number of rotations for event plane preserving track rotation method, " + "only 1 or 3 are supported"}; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable grpMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - o2::framework::Configurable lutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; - o2::framework::Configurable GrpLhcIfPath{"grplhcif", "GLO/Config/GRPLHCIF", "Path on the CCDB for the GRPLHCIF object"}; - o2::framework::Configurable efficiencyPath{"effHistPath", "Users/z/zhxiong/efficiency", "Path on the CCDB for the efficiency histograms"}; - o2::framework::Configurable flowPath{"flowPath", "Users/y/yiping/FlowResolution", "Path to the flow resolution object"}; - o2::framework::Configurable phiPath{"phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", "Path to load phi distribution for track rotation"}; + o2::framework::Configurable url{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable grpMagPath{ + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + o2::framework::Configurable lutPath{ + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + o2::framework::Configurable GrpLhcIfPath{ + "grplhcif", "GLO/Config/GRPLHCIF", + "Path on the CCDB for the GRPLHCIF object"}; + o2::framework::Configurable efficiencyPath{ + "effHistPath", "Users/z/zhxiong/efficiency", + "Path on the CCDB for the efficiency histograms"}; + o2::framework::Configurable flowPath{ + "flowPath", "Users/y/yiping/FlowResolution", + "Path to the flow resolution object"}; + o2::framework::Configurable phiPath{ + "phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", + "Path to load phi distribution for track rotation"}; } fConfigCCDB; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable flatTables{"cfgFlatTables", false, "Produce a single flat tables with all relevant information of the pairs and single tracks"}; - o2::framework::Configurable polarTables{"cfgPolarTables", false, "Produce tables with dilepton polarization information"}; - o2::framework::Configurable useKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - o2::framework::Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - o2::framework::Configurable noCorr{"cfgNoCorrFwdProp", false, "Do not correct for MCS effects in track propagation"}; - o2::framework::Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; - o2::framework::Configurable centerMassEnergy{"energy", 13600, "Center of mass energy in GeV"}; - o2::framework::Configurable propTrack{"cfgPropTrack", true, "Propgate tracks to associated collision to recalculate DCA and momentum vector"}; - o2::framework::Configurable useRemoteCollisionInfo{"cfgUseRemoteCollisionInfo", false, "Use remote collision information from CCDB"}; - o2::framework::Configurable useEfficiencyWeighting{"cfgUseEfficiencyWeighting", false, "Apply efficiency weighting to the pairs from CCDB"}; - o2::framework::Configurable efficiencyType{"cfgEfficiencyType", 0, "Type of efficiency to apply from CCDB: 0 no efficiency, 1 pt-cent-costhetastar"}; - o2::framework::Configurable useFlowReso{"cfgUseFlowReso", false, "Use remote flow information from CCDB"}; - o2::framework::Configurable usePhiDistribution{"cfgUsePhiDistribution", false, "Use phi distribution to correct track rotation"}; + o2::framework::Configurable flatTables{ + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; + o2::framework::Configurable polarTables{ + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; + o2::framework::Configurable useKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; + o2::framework::Configurable useAbsDCA{ + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; + o2::framework::Configurable noCorr{ + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; + o2::framework::Configurable collisionSystem{ + "syst", "pp", "Collision system, pp or PbPb"}; + o2::framework::Configurable centerMassEnergy{ + "energy", 13600, "Center of mass energy in GeV"}; + o2::framework::Configurable propTrack{ + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and " + "momentum vector"}; + o2::framework::Configurable useRemoteCollisionInfo{ + "cfgUseRemoteCollisionInfo", false, + "Use remote collision information from CCDB"}; + o2::framework::Configurable useEfficiencyWeighting{ + "cfgUseEfficiencyWeighting", false, + "Apply efficiency weighting to the pairs from CCDB"}; + o2::framework::Configurable efficiencyType{ + "cfgEfficiencyType", 0, + "Type of efficiency to apply from CCDB: 0 no efficiency, 1 " + "pt-cent-costhetastar"}; + o2::framework::Configurable useFlowReso{ + "cfgUseFlowReso", false, "Use remote flow information from CCDB"}; + o2::framework::Configurable usePhiDistribution{ + "cfgUsePhiDistribution", false, + "Use phi distribution to correct track rotation"}; } fConfigOptions; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable applyBDT{"applyBDT", false, "Flag to apply ML selections"}; - o2::framework::Configurable fConfigBdtCutsJSON{"fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; - - o2::framework::Configurable> modelPathsCCDB{"modelPathsCCDB", std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, "Paths of models on CCDB"}; - o2::framework::Configurable timestampCCDB{"timestampCCDB", -1, "timestamp of the ONNX file for ML model used to query in CCDB"}; - o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; + o2::framework::Configurable applyBDT{"applyBDT", false, + "Flag to apply ML selections"}; + o2::framework::Configurable fConfigBdtCutsJSON{ + "fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; + + o2::framework::Configurable> modelPathsCCDB{ + "modelPathsCCDB", + std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, + "Paths of models on CCDB"}; + o2::framework::Configurable timestampCCDB{ + "timestampCCDB", -1, + "timestamp of the ONNX file for ML model used to query in CCDB"}; + o2::framework::Configurable loadModelsFromCCDB{ + "loadModelsFromCCDB", false, + "Flag to enable or disable the loading of models from CCDB"}; } fConfigML; struct : o2::framework::ConfigurableGroup { - o2::framework::Configurable fConfigMiniTree{"useMiniTree.cfgMiniTree", false, "Produce a single flat table with minimal information for analysis"}; - o2::framework::Configurable fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; - o2::framework::Configurable fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; + o2::framework::Configurable fConfigMiniTree{ + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; + o2::framework::Configurable fConfigMiniTreeMinMass{ + "useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; + o2::framework::Configurable fConfigMiniTreeMaxMass{ + "useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; } useMiniTree; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; - o2::framework::expressions::Filter filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > static_cast(0); + o2::framework::expressions::Filter + filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; MixingHandler fMixingHandler; o2::analysis::DQMlResponse fDQMlResponse; std::vector fOutputMlPsi2ee; // TODO: check this is needed or not - // keep histogram class names in maps, so we don't have to buld their names in the pair loops + // keep histogram class names in maps, so we don't have to buld their names in + // the pair loops std::map> fTrackHistNames; std::map> fMuonHistNames; std::map> fTrackMuonHistNames; @@ -1481,9 +2148,15 @@ struct AnalysisSameEventPairing { std::vector fMuonCuts; std::map, uint32_t> fAmbiguousPairs; - uint32_t fTrackFilterMask = 0; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream - uint32_t fMuonFilterMask = 0; // mask for the muon cuts required in this task to be applied on the muon cuts produced upstream - uint32_t fQvectorFilterMask = 0; // mask for the track cuts applied in TPC Q-vector calculation, used to remove auto-correlation in flow analysis + uint32_t fTrackFilterMask = + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream + uint32_t fMuonFilterMask = + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream + uint32_t fQvectorFilterMask = + 0; // mask for the track cuts applied in TPC Q-vector calculation, used to + // remove auto-correlation in flow analysis int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -1498,28 +2171,62 @@ struct AnalysisSameEventPairing { o2::framework::NoBinningPolicy hashBin; - o2::framework::Preslice> trackAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; - o2::framework::Preslice> muonAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; - - void init(o2::framework::InitContext& context) - { - fEnableBarrelHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processBarrelOnlySkimmed") || context.mOptions.get("processBarrelOnlyWithCollSkimmed") || context.mOptions.get("processBarrelOnlySkimmedNoCov") || context.mOptions.get("processBarrelOnlySkimmedNoCovWithMultExtra") || context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmedNoCov") || context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); - fEnableBarrelMixingHistos = context.mOptions.get("processMixingAllSkimmed") || context.mOptions.get("processMixingBarrelSkimmed") || context.mOptions.get("processMixingBarrelSkimmedFlow") || context.mOptions.get("processMixingBarrelWithQvectorCentrSkimmedNoCov"); + o2::framework::Preslice< + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice< + o2::soa::Join> + muonAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; + + void init(o2::framework::InitContext &context) { + fEnableBarrelHistos = + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed") || + context.mOptions.get("processBarrelOnlySkimmedNoCov") || + context.mOptions.get( + "processBarrelOnlySkimmedNoCovWithMultExtra") || + context.mOptions.get( + "processBarrelOnlyWithQvectorCentrSkimmedNoCov") || + context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); + fEnableBarrelMixingHistos = + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingBarrelSkimmed") || + context.mOptions.get("processMixingBarrelSkimmedFlow") || + context.mOptions.get( + "processMixingBarrelWithQvectorCentrSkimmedNoCov"); fEnableBarrelMixingHistos |= fConfigRunMixingAcrossTFs; - fEnableMuonHistos = context.mOptions.get("processAllSkimmed") || context.mOptions.get("processMuonOnlySkimmed") || context.mOptions.get("processMuonOnlySkimmedMultExtra") || context.mOptions.get("processMuonOnlySkimmedFlow") || context.mOptions.get("processMuonOnlyVertexingSkimmed"); - fEnableMuonMixingHistos = context.mOptions.get("processMixingAllSkimmed") || context.mOptions.get("processMixingMuonSkimmed") || context.mOptions.get("processMixingMuonSkimmedFlow"); - fEnableBarrelMuonHistos = context.mOptions.get("processElectronMuonSkimmed"); - fEnableBarrelMuonMixingHistos = context.mOptions.get("processMixingElectronMuonSkimmed"); + fEnableMuonHistos = + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlySkimmedMultExtra") || + context.mOptions.get("processMuonOnlySkimmedFlow") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); + fEnableMuonMixingHistos = + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingMuonSkimmed") || + context.mOptions.get("processMixingMuonSkimmedFlow"); + fEnableBarrelMuonHistos = + context.mOptions.get("processElectronMuonSkimmed"); + fEnableBarrelMuonMixingHistos = + context.mOptions.get("processMixingElectronMuonSkimmed"); if (context.mOptions.get("processDummy")) { - if (fEnableBarrelHistos || fEnableBarrelMixingHistos || fEnableMuonHistos || fEnableMuonMixingHistos || fEnableBarrelMuonHistos || fEnableBarrelMuonMixingHistos) { - LOG(fatal) << "No other processing tasks should be enabled if the processDummy is enabled!!"; + if (fEnableBarrelHistos || fEnableBarrelMixingHistos || + fEnableMuonHistos || fEnableMuonMixingHistos || + fEnableBarrelMuonHistos || fEnableBarrelMuonMixingHistos) { + LOG(fatal) << "No other processing tasks should be enabled if the " + "processDummy is enabled!!"; } return; } VarManager::SetDefaultVarNames(); - // Keep track of all the histogram class names to avoid composing strings in the pairing loop + // Keep track of all the histogram class names to avoid composing strings in + // the pairing loop TString histNames = ""; std::vector names; fTrackHistNames.clear(); @@ -1535,24 +2242,28 @@ struct AnalysisSameEventPairing { fNPairCuts = 0; fNPairPerEvent = 0; - // NOTE: Pair cuts are only applied on the histogram output. The produced pair tables do not have these cuts applied + // NOTE: Pair cuts are only applied on the histogram output. The produced + // pair tables do not have these cuts applied TString cutNamesStr = fConfigCuts.pair.value; if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fPairCuts.push_back(*o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fPairCuts.push_back( + *o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } - // get the list of cuts for tracks/muons, check that they were played by the barrel/muon selection tasks - // and make a mask for active cuts (barrel and muon selection tasks may run more cuts, needed for other analyses) + // get the list of cuts for tracks/muons, check that they were played by the + // barrel/muon selection tasks + // and make a mask for active cuts (barrel and muon selection tasks may + // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray* objArrayMuonCuts = nullptr; + TObjArray *objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -1567,10 +2278,12 @@ struct AnalysisSameEventPairing { std::vector namesInputFeatures; std::vector onnxFileNames; - auto config = o2::aod::dqmlcuts::GetBdtScoreCutsAndConfigFromJSON(fConfigML.fConfigBdtCutsJSON.value.c_str()); + auto config = o2::aod::dqmlcuts::GetBdtScoreCutsAndConfigFromJSON( + fConfigML.fConfigBdtCutsJSON.value.c_str()); - if (std::holds_alternative(config)) { - auto& cfg = std::get(config); + if (std::holds_alternative( + config)) { + auto &cfg = std::get(config); binsMl = cfg.binsMl; nClassesMl = 1; cutsMl = cfg.cutsMl; @@ -1582,7 +2295,8 @@ struct AnalysisSameEventPairing { fDQMlResponse.setCentType(cfg.centType); LOG(info) << "Using BDT cuts for binary classification"; } else { - auto& cfg = std::get(config); + auto &cfg = + std::get(config); binsMl = cfg.binsMl; nClassesMl = 3; cutsMl = cfg.cutsMl; @@ -1598,7 +2312,9 @@ struct AnalysisSameEventPairing { fDQMlResponse.configure(binsMl, cutsMl, cutDirMl, nClassesMl); if (fConfigML.loadModelsFromCCDB) { fCCDBApi.init(fConfigCCDB.url); - fDQMlResponse.setModelPathsCCDB(onnxFileNames, fCCDBApi, fConfigML.modelPathsCCDB, fConfigML.timestampCCDB); + fDQMlResponse.setModelPathsCCDB(onnxFileNames, fCCDBApi, + fConfigML.modelPathsCCDB, + fConfigML.timestampCCDB); } else { fDQMlResponse.setModelPathsLocal(onnxFileNames); } @@ -1608,14 +2324,18 @@ struct AnalysisSameEventPairing { // get the barrel track selection cuts std::string tempCuts; - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -1632,40 +2352,61 @@ struct AnalysisSameEventPairing { fTrackFilterMask |= (static_cast(1) << icut); if (fEnableBarrelHistos) { - names = { - // change define histname - Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); - names.push_back(Form("PairsBarrelSEPM_ambiguousextra_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEPP_ambiguousextra_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelSEMM_ambiguousextra_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names = {// change define histname + Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); + names.push_back(Form("PairsBarrelSEPM_ambiguousextra_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEPP_ambiguousextra_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelSEMM_ambiguousextra_%s", + objArray->At(icut)->GetName())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); if (fConfigTRPairs) { - names.push_back(Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelTRPM_ambiguousextra_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[6].Data(), names[7].Data(), names[8].Data()); + names.push_back( + Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); + names.push_back(Form("PairsBarrelTRPM_ambiguousextra_%s", + objArray->At(icut)->GetName())); + names.push_back( + Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); + histNames += Form("%s;%s;%s;", names[6].Data(), names[7].Data(), + names[8].Data()); } if (fEnableBarrelMixingHistos) { - names.push_back(Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), names[(fConfigTRPairs ? 10 : 7)].Data(), names[(fConfigTRPairs ? 11 : 8)].Data()); + names.push_back( + Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); + names.push_back( + Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); + names.push_back( + Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); + histNames += + Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), + names[(fConfigTRPairs ? 10 : 7)].Data(), + names[(fConfigTRPairs ? 11 : 8)].Data()); } fTrackHistNames[icut] = names; if (!cutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); + std::unique_ptr objArrayPair( + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); - fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = names; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); + fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = + names; } // end loop (pair cuts) } // end if (pair cuts) } // end if enableBarrelHistos @@ -1674,14 +2415,17 @@ struct AnalysisSameEventPairing { } // get the muon track selection cuts - o2::common::core::getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts - o2::common::core::getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const& t : addMuonCuts) { + std::vector addMuonCuts = + o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const &t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -1697,57 +2441,98 @@ struct AnalysisSameEventPairing { if (fEnableMuonHistos) { // no pair cuts - names = { - Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); + names = {Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); if (fEnableMuonMixingHistos) { - names.push_back(Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names.push_back( + Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); + names.push_back( + Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); + names.push_back( + Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); } if (fConfigAmbiguousMuonHistograms) { - names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEMM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPM_unambiguous_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEPP_unambiguous_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonSEMM_unambiguous_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); - histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); - histNames += Form("%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); + names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPP_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEMM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPP_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPM_unambiguous_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEPP_unambiguous_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonSEMM_unambiguous_%s", + objArray->At(icut)->GetName())); + histNames += Form( + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), + names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), + names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); + histNames += Form( + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), + names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), + names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); + histNames += Form( + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), + names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), + names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); if (fEnableMuonMixingHistos) { - names.push_back(Form("PairsMuonMEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPP_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEMM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPP_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPM_unambiguous_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEPP_unambiguous_%s", objArray->At(icut)->GetName())); - names.push_back(Form("PairsMuonMEMM_unambiguous_%s", objArray->At(icut)->GetName())); - histNames += Form("%s;%s;%s;", names[15].Data(), names[16].Data(), names[17].Data()); - histNames += Form("%s;%s;%s;", names[18].Data(), names[19].Data(), names[20].Data()); - histNames += Form("%s;%s;%s;", names[21].Data(), names[22].Data(), names[23].Data()); + names.push_back(Form("PairsMuonMEPM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEPP_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEMM_ambiguousInBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEPM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEPP_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEMM_ambiguousOutOfBunch_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEPM_unambiguous_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEPP_unambiguous_%s", + objArray->At(icut)->GetName())); + names.push_back(Form("PairsMuonMEMM_unambiguous_%s", + objArray->At(icut)->GetName())); + histNames += Form("%s;%s;%s;", names[15].Data(), + names[16].Data(), names[17].Data()); + histNames += Form("%s;%s;%s;", names[18].Data(), + names[19].Data(), names[20].Data()); + histNames += Form("%s;%s;%s;", names[21].Data(), + names[22].Data(), names[23].Data()); } } fMuonHistNames[icut] = names; if (!cutNamesStr.IsNull()) { // if pair cuts - std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); + std::unique_ptr objArrayPair( + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); - fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = names; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); + fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = + names; } // end loop (pair cuts) } // end if (pair cuts) } @@ -1757,21 +2542,27 @@ struct AnalysisSameEventPairing { if (fConfigRunMixingAcrossTFs) { if (fNCutsBarrel > MixingHandler::NMaxCuts) { - LOGF(fatal, "Across-TF mixing supports at most %d barrel track-cut bits, got %d", MixingHandler::NMaxCuts, fNCutsBarrel); + LOGF(fatal, + "Across-TF mixing supports at most %d barrel track-cut bits, got " + "%d", + MixingHandler::NMaxCuts, fNCutsBarrel); } TString mixVarsString = fConfigMixingVariables.value; TString mixVarsJsonString = fConfigMixingVariablesJson.value; std::unique_ptr objArray(mixVarsString.Tokenize(",")); if (objArray->GetEntries() > 0 || mixVarsJsonString != "") { - // fMixingHandler = new MixingHandler("mixingHandler", "mixing handler"); + // fMixingHandler = new MixingHandler("mixingHandler", "mixing + // handler"); if (objArray->GetEntries() > 0) { for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) { - o2::aod::dqmixing::SetUpMixing(&fMixingHandler, objArray->At(iVar)->GetName()); + o2::aod::dqmixing::SetUpMixing(&fMixingHandler, + objArray->At(iVar)->GetName()); } } } if (mixVarsJsonString != "") { - o2::aod::dqmixing::SetUpMixingFromJSON(&fMixingHandler, mixVarsJsonString.Data()); + o2::aod::dqmixing::SetUpMixingFromJSON(&fMixingHandler, + mixVarsJsonString.Data()); } fMixingHandler.SetPoolDepth(fConfigMixingDepth); fMixingHandler.Init(); @@ -1787,7 +2578,8 @@ struct AnalysisSameEventPairing { if (fConfigOptions.noCorr) { VarManager::SetupFwdDCAFitterNoCorr(); } else { - fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigCCDB.lutPath)); + fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } @@ -1804,18 +2596,25 @@ struct AnalysisSameEventPairing { continue; } - names = { - Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), muonCutName.Data()), - Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), muonCutName.Data()), - Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), muonCutName.Data())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); + names = {Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); int index = iTrack * fNCutsMuon + iMuon; if (fEnableBarrelMuonMixingHistos) { - names.push_back(Form("PairsEleMuMEPM_%s_%s", trackCutName.Data(), muonCutName.Data())); - names.push_back(Form("PairsEleMuMEPP_%s_%s", trackCutName.Data(), muonCutName.Data())); - names.push_back(Form("PairsEleMuMEMM_%s_%s", trackCutName.Data(), muonCutName.Data())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names.push_back(Form("PairsEleMuMEPM_%s_%s", trackCutName.Data(), + muonCutName.Data())); + names.push_back(Form("PairsEleMuMEPP_%s_%s", trackCutName.Data(), + muonCutName.Data())); + names.push_back(Form("PairsEleMuMEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); } fTrackMuonHistNames[index] = names; @@ -1823,18 +2622,32 @@ struct AnalysisSameEventPairing { std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); int nPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < nPairCuts; ++iPairCut) { - names = { - Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName()), - Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())}; - histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); + names = {Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), + muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())}; + histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), + names[2].Data()); if (fEnableBarrelMuonMixingHistos) { - names.push_back(Form("PairsEleMuMEPM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - names.push_back(Form("PairsEleMuMEPP_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - names.push_back(Form("PairsEleMuMEMM_%s_%s_%s", trackCutName.Data(), muonCutName.Data(), objArrayPair->At(iPairCut)->GetName())); - histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); + names.push_back(Form("PairsEleMuMEPM_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + names.push_back(Form("PairsEleMuMEPP_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + names.push_back(Form("PairsEleMuMEMM_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), + objArrayPair->At(iPairCut)->GetName())); + histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), + names[5].Data()); } - index = iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + index = iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + + iPairCut; fTrackMuonHistNames[index] = names; } } @@ -1843,68 +2656,103 @@ struct AnalysisSameEventPairing { } if (fConfigQA) { - fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + fHistMan = + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); - VarManager::SetCollisionSystem((TString)fConfigOptions.collisionSystem, fConfigOptions.centerMassEnergy); // set collision system and center of mass energy - DefineHistograms(fHistMan, histNames.Data(), fConfigAddSEPHistogram.value.data()); // define all histograms + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); + VarManager::SetCollisionSystem( + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center + // of mass energy + DefineHistograms( + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms if (fEnableBarrelHistos) { - DefineHistograms(fHistMan, "PairingSEQA", "sameevent-pairing"); // histograms for QA of the pairing + DefineHistograms( + fHistMan, "PairingSEQA", + "sameevent-pairing"); // histograms for QA of the pairing } if (fEnableBarrelMixingHistos) { - DefineHistograms(fHistMan, "PairingMEQA", "mixedevent-pairing"); // histograms for QA of the pairing - } - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + DefineHistograms( + fHistMan, "PairingMEQA", + "mixedevent-pairing"); // histograms for QA of the pairing + } + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } } - void initParamsFromCCDB(uint64_t timestamp, int runNumber, bool withTwoProngFitter = true) - { + void initParamsFromCCDB(uint64_t timestamp, int runNumber, + bool withTwoProngFitter = true) { - auto grpmag = fCCDB->getForTimeStamp(fConfigCCDB.grpMagPath, timestamp); + auto grpmag = fCCDB->getForTimeStamp( + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (withTwoProngFitter) { if (fConfigOptions.useKFVertexing.value) { VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // TODO: get these parameters from Configurables - VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, + 0.9f, + fConfigOptions.useAbsDCA.value); } } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); // needed because take in varmanager Bz from fgFitterTwoProngBarrel for PhiV calculations + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } std::map metadataRCT, header; - header = fCCDBApi.retrieveHeaders(Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); + header = fCCDBApi.retrieveHeaders( + Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); if (fConfigOptions.useRemoteCollisionInfo) { - auto grpo = fCCDB->getForTimeStamp(fConfigCCDB.GrpLhcIfPath, timestamp); + auto grpo = fCCDB->getForTimeStamp( + fConfigCCDB.GrpLhcIfPath, timestamp); VarManager::SetCollisionSystem(grpo); } if (fConfigOptions.useEfficiencyWeighting) { - auto effList = fCCDB->getForTimeStamp(fConfigCCDB.efficiencyPath.value, timestamp); - VarManager::SetEfficiencyObject(fConfigOptions.efficiencyType.value, effList->FindObject("efficiency")); + auto effList = fCCDB->getForTimeStamp( + fConfigCCDB.efficiencyPath.value, timestamp); + VarManager::SetEfficiencyObject(fConfigOptions.efficiencyType.value, + effList->FindObject("efficiency")); } if (fConfigOptions.useFlowReso) { TString PathFlow = fConfigCCDB.flowPath.value; TString ccdbPathFlowSP = Form("%s/ScalarProduct", PathFlow.Data()); TString ccdbPathFlowEP = Form("%s/EventPlane", PathFlow.Data()); - ResoFlowSP = fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); - ResoFlowEP = fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); + ResoFlowSP = + fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); + ResoFlowEP = + fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { - LOGF(fatal, "Flow resolution histograms not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, + "Flow resolution histograms not available in CCDB at " + "timestamp=%llu", + timestamp); } } @@ -1912,26 +2760,39 @@ struct AnalysisSameEventPairing { TString PathPhi = fConfigCCDB.phiPath.value; TString ccdbPathPhiPosi = Form("%s/hPtPhiPositive", PathPhi.Data()); TString ccdbPathPhiNega = Form("%s/hPtPhiNegative", PathPhi.Data()); - auto phiPosi = fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); - auto phiNega = fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); + auto phiPosi = + fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); + auto phiNega = + fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); if (phiPosi == nullptr || phiNega == nullptr) { - LOGF(fatal, "Phi distribution histograms not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, + "Phi distribution histograms not available in CCDB at " + "timestamp=%llu", + timestamp); } - VarManager::SetPhiMap(phiPosi, phiNega, fConfigOptions.usePhiDistribution.value); + VarManager::SetPhiMap(phiPosi, phiNega, + fConfigOptions.usePhiDistribution.value); } } - // Template function to run same event pairing (barrel-barrel, muon-muon, barrel-muon) - template - void runSameEventPairing(TEvents const& events, o2::framework::Preslice& preslice, TTrackAssocs const& assocs, TTracks const& /*tracks*/) - { - if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber() + // Template function to run same event pairing (barrel-barrel, muon-muon, + // barrel-muon) + template + void runSameEventPairing(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const &assocs, + TTracks const & /*tracks*/) { + if (events.size() > 0) { // Additional protection to avoid crashing of + // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { if (fConfigRunMixingAcrossTFs) { // do not mix events from different runs fMixingHandler.ClearPools(); } - initParamsFromCCDB(events.begin().timestamp(), events.begin().runNumber(), TTwoProngFitter); + initParamsFromCCDB(events.begin().timestamp(), + events.begin().runNumber(), TTwoProngFitter); fCurrentRun = events.begin().runNumber(); } } @@ -1959,7 +2820,8 @@ struct AnalysisSameEventPairing { }*/ auto twoTrackFilter = static_cast(0); - auto dileptonMcDecision = static_cast(0); // placeholder, copy of the dqEfficiency.cxx one + auto dileptonMcDecision = static_cast( + 0); // placeholder, copy of the dqEfficiency.cxx one int sign1 = 0; int sign2 = 0; // Reserve capacity for the output tables to avoid repeated reallocations @@ -1967,11 +2829,11 @@ struct AnalysisSameEventPairing { // only — pages are not faulted in until written. // estimate reserved size int64_t reserveSize = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const& t : groupedAssocs) { + for (auto const &t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -2007,14 +2869,18 @@ struct AnalysisSameEventPairing { } fAmbiguousPairs.clear(); - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool eventHasQvectorCentr = + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + constexpr bool trackHasCov = + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); // constexpr bool fillFlowReso = eventHasQvector || eventHasQvectorCentr; bool isSelectedBDT = false; fNPairPerEvent = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -2024,8 +2890,10 @@ struct AnalysisSameEventPairing { uint8_t evSel = event.isEventSelected_raw(); // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - // VarManager::FillEvent(event, dqtablereader_helpers::varValues()); - VarManager::FillEvent(event, dqtablereader_helpers::varValues()); + // VarManager::FillEvent(event, + // dqtablereader_helpers::varValues()); + VarManager::FillEvent(event, + dqtablereader_helpers::varValues()); auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); if (groupedAssocs.size() == 0) { @@ -2034,21 +2902,28 @@ struct AnalysisSameEventPairing { if (fConfigOptions.useFlowReso) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { - LOGF(fatal, "Flow resolution histograms are not available, cannot fill flow variables!"); + LOGF(fatal, "Flow resolution histograms are not available, cannot " + "fill flow variables!"); } VarManager::FillEventFlowResoFactor(ResoFlowSP, ResoFlowEP); } int mixingCategory = -1; if (fConfigRunMixingAcrossTFs) { - mixingCategory = fMixingHandler.FindEventCategory(dqtablereader_helpers::varValues()); + mixingCategory = fMixingHandler.FindEventCategory( + dqtablereader_helpers::varValues()); } bool isFirst = true; - for (auto const& [a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { + for (auto const &[a1, a2] : + o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { - twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + twoTrackFilter = + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } @@ -2056,7 +2931,8 @@ struct AnalysisSameEventPairing { auto t2 = a2.template reducedtrack_as(); sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter // TODO: Make sure that we do not work with more than 28 track bits if (t1.barrelAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); @@ -2073,7 +2949,8 @@ struct AnalysisSameEventPairing { fNPairPerEvent++; - // check if t1 or t2 is used in TPC Q vector calculation, so as to remove auto correlations in the flow analysis + // check if t1 or t2 is used in TPC Q vector calculation, so as to + // remove auto correlations in the flow analysis VarManager::fgValues[VarManager::kSel1] = -9999.; VarManager::fgValues[VarManager::kSel2] = -9999.; if (t1.reducedeventId() == event.globalIndex()) { @@ -2087,12 +2964,15 @@ struct AnalysisSameEventPairing { } } VarManager::FillPair(t1, t2); - // compute quantities which depend on the associated collision, such as DCA + // compute quantities which depend on the associated collision, such + // as DCA if (fConfigOptions.propTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, + t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2105,60 +2985,105 @@ struct AnalysisSameEventPairing { VarManager::FillEfficiency(); } - dielectronList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], + dielectronList(event.globalIndex(), + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, 0); - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { dielectronInfoList(event.collisionId(), t1.trackId(), t2.trackId()); - dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); + dileptonInfoList(event.collisionId(), event.posX(), event.posY(), + event.posZ()); } if (fConfigOptions.polarTables.value) { - dileptonPolarList(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), twoTrackFilter, - VarManager::fgValues[VarManager::kCosThetaHE], VarManager::fgValues[VarManager::kPhiHE], VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], VarManager::fgValues[VarManager::kPhiCS], VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], VarManager::fgValues[VarManager::kPhiPP], VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], VarManager::fgValues[VarManager::kCosThetaStarFT0A], VarManager::fgValues[VarManager::kCosThetaStarFT0C], VarManager::fgValues[VarManager::kCosThetaStarRandom]); - dileptonEventInfoList(VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxZ], VarManager::fgValues[VarManager::kVtxNcontrib], VarManager::fgValues[VarManager::kRandomPsi2], VarManager::fgValues[VarManager::kPsi2A], VarManager::fgValues[VarManager::kPsi2B], VarManager::fgValues[VarManager::kPsi2C]); + dileptonPolarList( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), + twoTrackFilter, VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); + dileptonEventInfoList( + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxZ], + VarManager::fgValues[VarManager::kVtxNcontrib], + VarManager::fgValues[VarManager::kRandomPsi2], + VarManager::fgValues[VarManager::kPsi2A], + VarManager::fgValues[VarManager::kPsi2B], + VarManager::fgValues[VarManager::kPsi2C]); } if constexpr (trackHasCov && TTwoProngFitter) { - dielectronsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); + dielectronsExtraList( + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0) { + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedTrackBarrelPID) > 0) { isSelectedBDT = false; fOutputMlPsi2ee.clear(); if (fConfigML.applyBDT) { - std::vector dqInputFeatures = fDQMlResponse.getInputFeatures(t1, t2, dqtablereader_helpers::varValues()); + std::vector dqInputFeatures = + fDQMlResponse.getInputFeatures( + t1, t2, dqtablereader_helpers::varValues()); if (dqInputFeatures.empty()) { - LOG(fatal) << "Input features for ML selection are empty! Please check your configuration."; + LOG(fatal) << "Input features for ML selection are empty! " + "Please check your configuration."; return; } int modelIndex = -1; - const auto& binsCent = fDQMlResponse.getBinsCent(); - const auto& binsPt = fDQMlResponse.getBinsPt(); - const std::string& centType = fDQMlResponse.getCentType(); + const auto &binsCent = fDQMlResponse.getBinsCent(); + const auto &binsPt = fDQMlResponse.getBinsPt(); + const std::string ¢Type = fDQMlResponse.getCentType(); if ("kCentFT0C" == centType) { - modelIndex = o2::aod::dqmlcuts::getMlBinIndex(VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + modelIndex = o2::aod::dqmlcuts::getMlBinIndex( + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0A" == centType) { - modelIndex = o2::aod::dqmlcuts::getMlBinIndex(VarManager::fgValues[VarManager::kCentFT0A], VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + modelIndex = o2::aod::dqmlcuts::getMlBinIndex( + VarManager::fgValues[VarManager::kCentFT0A], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0M" == centType) { - modelIndex = o2::aod::dqmlcuts::getMlBinIndex(VarManager::fgValues[VarManager::kCentFT0M], VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + modelIndex = o2::aod::dqmlcuts::getMlBinIndex( + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else { - LOG(fatal) << "Unknown centrality estimation type: " << centType; + LOG(fatal) << "Unknown centrality estimation type: " + << centType; return; } if (modelIndex < 0) { - LOG(debug) << "Ml index is negative! This means that the centrality/pt is not in the range of the model bins."; + LOG(debug) + << "Ml index is negative! This means that the " + "centrality/pt is not in the range of the model bins."; continue; } - LOG(debug) << "Model index: " << modelIndex << ", pT: " << VarManager::fgValues[VarManager::kPt] << ", centrality (kCentFT0C): " << VarManager::fgValues[VarManager::kCentFT0C]; - isSelectedBDT = fDQMlResponse.isSelectedMl(dqInputFeatures, modelIndex, fOutputMlPsi2ee); + LOG(debug) << "Model index: " << modelIndex + << ", pT: " << VarManager::fgValues[VarManager::kPt] + << ", centrality (kCentFT0C): " + << VarManager::fgValues[VarManager::kCentFT0C]; + isSelectedBDT = fDQMlResponse.isSelectedMl( + dqInputFeatures, modelIndex, fOutputMlPsi2ee); VarManager::FillBdtScore(fOutputMlPsi2ee); } @@ -2167,62 +3092,146 @@ struct AnalysisSameEventPairing { } if (fConfigOptions.flatTables.value) { - dielectronAllList(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, dileptonMcDecision, - t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), - t2.pt(), t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], VarManager::fgValues[VarManager::kKFTrack1DCAxyz], VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], VarManager::fgValues[VarManager::kKFTrack0DCAxy], VarManager::fgValues[VarManager::kKFTrack1DCAxy], VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], VarManager::fgValues[VarManager::kVertexingLxyz], VarManager::fgValues[VarManager::kVertexingLxyzOverErr], VarManager::fgValues[VarManager::kVertexingLxy], VarManager::fgValues[VarManager::kVertexingLxyOverErr], VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], VarManager::fgValues[VarManager::kKFCosPA], VarManager::fgValues[VarManager::kKFJpsiDCAxyz], VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); - dielectronMlList(VarManager::fgValues[VarManager::kCentFT0C], - (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) ? VarManager::fgValues[VarManager::kBdtBackground] : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) ? VarManager::fgValues[VarManager::kBdtPrompt] : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) ? VarManager::fgValues[VarManager::kBdtNonprompt] : -999.f); + dielectronAllList( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, dileptonMcDecision, t1.pt(), t1.eta(), + t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), + t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), + t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), + t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), + t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), + t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), + t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), + t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), + t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); + dielectronMlList( + VarManager::fgValues[VarManager::kCentFT0C], + (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) + ? VarManager::fgValues[VarManager::kBdtBackground] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) + ? VarManager::fgValues[VarManager::kBdtPrompt] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) + ? VarManager::fgValues[VarManager::kBdtNonprompt] + : -999.f); } - constexpr bool eventHasVtxCovForTable = ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); - if constexpr (trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { - const bool ambiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - const bool ambiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); - // 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 + constexpr bool eventHasVtxCovForTable = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > + 0); + if constexpr (trackHasCov && TTwoProngFitter && + eventHasVtxCovForTable) { + const bool ambiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + const bool ambiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); + // 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) { - PromptNonPromptSepTable(twoTrackFilter, dileptonMcDecision, - 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::kDCAxyOverSig1], VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], t1.itsChi2NCl(), - t2.pt(), t2.eta(), VarManager::fgValues[VarManager::kDCAxy2], VarManager::fgValues[VarManager::kDCAz2], VarManager::fgValues[VarManager::kDCAxyOverSig2], VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], t2.itsChi2NCl(), - ambiInBunch, ambiOutOfBunch, true, - VarManager::fgValues[VarManager::kMultFT0C], VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kVtxNcontribReal]); + PromptNonPromptSepTable( + twoTrackFilter, dileptonMcDecision, + 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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + VarManager::fgValues[VarManager::kITSclusterMap2], + t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxNcontribReal]); } } } } if constexpr (TPairType == VarManager::kDecayToMuMu) { - twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & + fMuonFilterMask; + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } auto t1 = a1.template reducedmuon_as(); auto t2 = a2.template reducedmuon_as(); - if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && t1.matchMCHTrackId() >= 0) { + if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && + t1.matchMCHTrackId() >= 0) { continue; } - if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && t1.matchMFTTrackId() >= 0) { + if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && + t1.matchMFTTrackId() >= 0) { continue; } sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter if (t1.muonAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); } @@ -2237,12 +3246,15 @@ struct AnalysisSameEventPairing { } VarManager::FillPair(t1, t2); - // compute quantities which depend on the associated collision, such as DCA + // compute quantities which depend on the associated collision, such + // as DCA if (fConfigOptions.propTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, + t2); } if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); @@ -2251,64 +3263,110 @@ struct AnalysisSameEventPairing { VarManager::FillPairVn(t1, t2); } - dimuonList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], + dimuonList(event.globalIndex(), + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, 0); - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { - dileptonInfoList(event.collisionId(), event.posX(), event.posY(), event.posZ()); + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + dileptonInfoList(event.collisionId(), event.posX(), event.posY(), + event.posZ()); } - dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingLz], VarManager::fgValues[VarManager::kVertexingLxy]); + dimuonsExtraList(t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingLz], + VarManager::fgValues[VarManager::kVertexingLxy]); if (fConfigOptions.flatTables.value) { - dimuonAllList(event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, - -999., -999., -999., - VarManager::fgValues[VarManager::kMass], - false, - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - 0., 0., - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), - t1.chi2(), t2.chi2(), - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), - true, true, - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); + dimuonAllList( + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), 0., 0., + t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), + t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), t1.chi2(), + t2.chi2(), -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } - if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { if constexpr (eventHasQvector || eventHasQvectorCentr) { - dileptonFlowList(event.collisionId(), VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), isFirst, - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kR2SP_AC], VarManager::fgValues[VarManager::kR2SP_BC], - VarManager::fgValues[VarManager::kU3Q3], VarManager::fgValues[VarManager::kR3SP], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2EP_AC], VarManager::fgValues[VarManager::kR2EP_BC], - VarManager::fgValues[VarManager::kCos3DeltaPhi], VarManager::fgValues[VarManager::kR3EP], - VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kCORR2REF], VarManager::fgValues[VarManager::kCORR4REF], VarManager::fgValues[VarManager::kM11REF], VarManager::fgValues[VarManager::kM1111REF], - VarManager::fgValues[VarManager::kMultDimuons], VarManager::fgValues[VarManager::kMultA]); + dileptonFlowList( + event.collisionId(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + isFirst, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kR2SP_AC], + VarManager::fgValues[VarManager::kR2SP_BC], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR3SP], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2EP_AC], + VarManager::fgValues[VarManager::kR2EP_BC], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kR3EP], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kCORR2REF], + VarManager::fgValues[VarManager::kCORR4REF], + VarManager::fgValues[VarManager::kM11REF], + VarManager::fgValues[VarManager::kM1111REF], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kMultA]); } } if (t1.sign() != t2.sign()) { isFirst = false; } } - // TODO: the model for the electron-muon combination has to be thought through + // TODO: the model for the electron-muon combination has to be thought + // through /*if constexpr (TPairType == VarManager::kElectronMuon) { - twoTrackFilter = a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & fTwoTrackFilterMask; + twoTrackFilter = a1.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & + fTwoTrackFilterMask; }*/ // Fill histograms @@ -2325,16 +3383,26 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { - isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + isAmbiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + isAmbiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); - isLeg1Ambi = (twoTrackFilter & (static_cast(1) << 28) || (twoTrackFilter & (static_cast(1) << 30))); - isLeg2Ambi = (twoTrackFilter & (static_cast(1) << 29) || (twoTrackFilter & (static_cast(1) << 31))); + isLeg1Ambi = (twoTrackFilter & (static_cast(1) << 28) || + (twoTrackFilter & (static_cast(1) << 30))); + isLeg2Ambi = (twoTrackFilter & (static_cast(1) << 29) || + (twoTrackFilter & (static_cast(1) << 31))); if constexpr (TPairType == VarManager::kDecayToEE) { if (isLeg1Ambi && isLeg2Ambi) { - std::pair iPair(a1.reducedtrackId(), a2.reducedtrackId()); + std::pair iPair(a1.reducedtrackId(), + a2.reducedtrackId()); if (fAmbiguousPairs.contains(iPair)) { - if (fAmbiguousPairs[iPair] & (static_cast(1) << icut)) { // if this pair is already stored with this cut + if (fAmbiguousPairs[iPair] & + (static_cast(1) + << icut)) { // if this pair is already stored with this + // cut isAmbiExtra = true; } else { fAmbiguousPairs[iPair] |= static_cast(1) << icut; @@ -2347,7 +3415,8 @@ struct AnalysisSameEventPairing { if (sign1 * sign2 < 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { if (fConfigQA) { - fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][0].Data(), + dqtablereader_helpers::varValues()); } if (useMiniTree.fConfigMiniTree) { auto t1 = a1.template reducedmuon_as(); @@ -2355,97 +3424,144 @@ struct AnalysisSameEventPairing { // By default (kPt1, kEta1, kPhi1) are for the positive charge float dileptonMass = VarManager::fgValues[VarManager::kMass]; - if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { - // In the miniTree the positive daughter is positioned as first + if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && + dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { + // In the miniTree the positive daughter is positioned as + // first if (t1.sign() > 0) { - dileptonMiniTree(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kCos2DeltaPhi], - t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi()); + dileptonMiniTree( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), + t2.phi()); } else { - dileptonMiniTree(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kCos2DeltaPhi], - t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), t1.phi()); + dileptonMiniTree( + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), + t1.phi()); } } } if (fConfigQA && fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][3 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset + 3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][3 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][3 + histIdxOffset + 6].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][3 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { - fHistMan->FillHistClass(histNames[icut][0].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][0].Data(), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { - fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][3].Data(), + dqtablereader_helpers::varValues()); } } } } else if (fConfigQA) { if (sign1 > 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][1].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][1].Data(), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][4 + histIdxOffset].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][4 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][4 + histIdxOffset + 3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][4 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][4 + histIdxOffset + 6].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][4 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(histNames[icut][1].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][1].Data(), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { - fHistMan->FillHistClass(histNames[icut][4].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][4].Data(), + dqtablereader_helpers::varValues()); } } } else { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][2].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][2].Data(), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][5 + histIdxOffset].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][5 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][5 + histIdxOffset + 3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][5 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][5 + histIdxOffset + 6].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][5 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(histNames[icut][2].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][2].Data(), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { - fHistMan->FillHistClass(histNames[icut][5].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][5].Data(), + dqtablereader_helpers::varValues()); } } } } if (fConfigQA) { - for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); iPairCut++) { + for (unsigned int iPairCut = 0; iPairCut < fPairCuts.size(); + iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); - if (!(cut.IsSelected(dqtablereader_helpers::varValues()))) { // apply pair cuts + if (!(cut.IsSelected( + dqtablereader_helpers::varValues()))) { // apply pair + // cuts continue; } if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][0].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * ncuts + iPairCut][0].Data(), + dqtablereader_helpers::varValues()); } else { if (sign1 > 0) { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][1].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * ncuts + iPairCut][1].Data(), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(histNames[ncuts + icut * ncuts + iPairCut][2].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[ncuts + icut * ncuts + iPairCut][2].Data(), + dqtablereader_helpers::varValues()); } } } // end loop (pair cuts) @@ -2457,9 +3573,13 @@ struct AnalysisSameEventPairing { // rotation 20 times if (fConfigTRPairs) { if constexpr (TPairType == VarManager::kDecayToEE) { - twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + twoTrackFilter = + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + if (!twoTrackFilter) { // the tracks must have at least one filter + // bit in common to continue continue; } @@ -2482,19 +3602,32 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { - isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + isAmbiInBunch = + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + isAmbiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); - isLeg1Ambi = (twoTrackFilter & (static_cast(1) << 28) || (twoTrackFilter & (static_cast(1) << 30))); - isLeg2Ambi = (twoTrackFilter & (static_cast(1) << 29) || (twoTrackFilter & (static_cast(1) << 31))); + isLeg1Ambi = + (twoTrackFilter & (static_cast(1) << 28) || + (twoTrackFilter & (static_cast(1) << 30))); + isLeg2Ambi = + (twoTrackFilter & (static_cast(1) << 29) || + (twoTrackFilter & (static_cast(1) << 31))); if constexpr (TPairType == VarManager::kDecayToEE) { if (isLeg1Ambi && isLeg2Ambi) { - std::pair iPair(a1.reducedtrackId(), a2.reducedtrackId()); + std::pair iPair(a1.reducedtrackId(), + a2.reducedtrackId()); if (fAmbiguousPairs.contains(iPair)) { - if (fAmbiguousPairs[iPair] & (static_cast(1) << icut)) { // if this pair is already stored with this cut + if (fAmbiguousPairs[iPair] & + (static_cast(1) + << icut)) { // if this pair is already stored with + // this cut isAmbiExtra = true; } else { - fAmbiguousPairs[iPair] |= static_cast(1) << icut; + fAmbiguousPairs[iPair] |= static_cast(1) + << icut; } } else { fAmbiguousPairs[iPair] = static_cast(1) << icut; @@ -2503,29 +3636,46 @@ struct AnalysisSameEventPairing { } if (sign1 * sign2 < 0) { if (fConfigNRotations.value == 1) { - VarManager::FillPairRotation(t1, t2, fConfigNRotations.value); + VarManager::FillPairRotation( + t1, t2, fConfigNRotations.value); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } else if (fConfigNRotations.value == 3) { - for (int irot = 1; irot <= fConfigNRotations.value; irot++) { - VarManager::FillPairRotation(t1, t2, irot); + for (int irot = 1; irot <= fConfigNRotations.value; + irot++) { + VarManager::FillPairRotation( + t1, t2, irot); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelTRPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { - fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } else { - LOGF(fatal, "Unsupported number of rotations: %d, only 1 and 3 are supported", fConfigNRotations.value); + LOGF(fatal, + "Unsupported number of rotations: %d, only 1 and 3 " + "are supported", + fConfigNRotations.value); } } } @@ -2536,7 +3686,8 @@ struct AnalysisSameEventPairing { } // end loop over pairs of track associations VarManager::fgValues[VarManager::kNPairsPerEvent] = fNPairPerEvent; if (fEnableBarrelHistos && fConfigQA) { - fHistMan->FillHistClass("PairingSEQA", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("PairingSEQA", + dqtablereader_helpers::varValues()); } if (fConfigRunMixingAcrossTFs) { @@ -2547,14 +3698,17 @@ struct AnalysisSameEventPairing { // 1) create a MixingEvent and fill it with the relevant tracks MixingHandler::MixingEvent mixingEvent; uint32_t trackFilterForMixing = 0; - for (auto const& assoc : groupedAssocs) { + for (auto const &assoc : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { - trackFilterForMixing = assoc.isBarrelSelected_raw() & assoc.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + trackFilterForMixing = assoc.isBarrelSelected_raw() & + assoc.isBarrelSelectedPrefilter_raw() & + fTrackFilterMask; if (!trackFilterForMixing) { continue; } auto t1 = assoc.template reducedtrack_as(); - MixingHandler::MixingTrack mixingTrack(t1.pt(), t1.eta(), t1.phi(), trackFilterForMixing); + MixingHandler::MixingTrack mixingTrack(t1.pt(), t1.eta(), t1.phi(), + trackFilterForMixing); if (t1.sign() > 0) { mixingEvent.AddTrack1(mixingTrack); } else { @@ -2565,14 +3719,16 @@ struct AnalysisSameEventPairing { if (mixingEvent.tracks1.empty() && mixingEvent.tracks2.empty()) { continue; } - // 2) run the mixing with the events in the pool corresponding to this event - auto& pool = fMixingHandler.GetPool(mixingCategory); - for (auto const& poolEvent : pool.GetEvents()) { - for (auto const& t1 : mixingEvent.tracks1) { + // 2) run the mixing with the events in the pool corresponding to this + // event + auto &pool = fMixingHandler.GetPool(mixingCategory); + for (auto const &poolEvent : pool.GetEvents()) { + for (auto const &t1 : mixingEvent.tracks1) { // run +- pairing - for (auto const& t2 : poolEvent.tracks2) { + for (auto const &t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair - uint32_t mixedTwoTrackFilter = t1.filteringFlags & t2.filteringFlags; + uint32_t mixedTwoTrackFilter = + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -2580,29 +3736,40 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } if (fConfigTRPairs) { // mixing event track should be rotated, so second parameter - if (fConfigNRotations.value != 1 && fConfigNRotations.value != 3) { - LOGF(fatal, "Unsupported number of rotations: %d, only 1 and 3 are supported", fConfigNRotations.value); + if (fConfigNRotations.value != 1 && + fConfigNRotations.value != 3) { + LOGF(fatal, + "Unsupported number of rotations: %d, only 1 and 3 are " + "supported", + fConfigNRotations.value); } for (int irot = 1; irot <= fConfigNRotations.value; ++irot) { VarManager::FillPairRotation_ME(t2, t1, irot); for (int icut = 0; icut < ncuts; icut++) { - if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelTR_MEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (mixedTwoTrackFilter & + (static_cast(1) << icut)) { + fHistMan->FillHistClass( + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run ++ pairing - for (auto const& t2 : poolEvent.tracks1) { + for (auto const &t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair - uint32_t mixedTwoTrackFilter = t1.filteringFlags & t2.filteringFlags; + uint32_t mixedTwoTrackFilter = + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -2610,17 +3777,20 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } - for (auto const& t1 : mixingEvent.tracks2) { + for (auto const &t1 : mixingEvent.tracks2) { // run -+ pairing - for (auto const& t2 : poolEvent.tracks1) { + for (auto const &t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair - uint32_t mixedTwoTrackFilter = t1.filteringFlags & t2.filteringFlags; + uint32_t mixedTwoTrackFilter = + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -2628,28 +3798,39 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } if (fConfigTRPairs) { - if (fConfigNRotations.value != 1 && fConfigNRotations.value != 3) { - LOGF(fatal, "Unsupported number of rotations: %d, only 1 and 3 are supported", fConfigNRotations.value); + if (fConfigNRotations.value != 1 && + fConfigNRotations.value != 3) { + LOGF(fatal, + "Unsupported number of rotations: %d, only 1 and 3 are " + "supported", + fConfigNRotations.value); } for (int irot = 1; irot <= fConfigNRotations.value; ++irot) { VarManager::FillPairRotation_ME(t2, t1, irot); for (int icut = 0; icut < ncuts; icut++) { - if (mixedTwoTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("PairsBarrelTR_MEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (mixedTwoTrackFilter & + (static_cast(1) << icut)) { + fHistMan->FillHistClass( + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run -- pairing - for (auto const& t2 : poolEvent.tracks2) { + for (auto const &t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair - uint32_t mixedTwoTrackFilter = t1.filteringFlags & t2.filteringFlags; + uint32_t mixedTwoTrackFilter = + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -2657,7 +3838,9 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { - fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -2665,61 +3848,77 @@ struct AnalysisSameEventPairing { } } // 3) add the current event to the pool - pool.UpdatePool(mixingEvent, fMixingHandler.GetPoolDepth(), mixingEvent.filteringMask); + pool.UpdatePool(mixingEvent, fMixingHandler.GetPoolDepth(), + mixingEvent.filteringMask); // pool.Print(); } } // end loop over events } - template - void runMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, TTracks1 const& /*tracks1*/, TTracks2 const& /*tracks2*/) - { + template + void runMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { std::map> histNames = fTrackHistNames; int pairSign = 0; int ncuts = 0; auto twoTrackFilter = static_cast(0); - for (auto const& a1 : assocs1) { - for (auto const& a2 : assocs2) { + for (auto const &a1 : assocs1) { + for (auto const &a2 : assocs2) { if constexpr (TPairType == VarManager::kDecayToEE) { - twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + twoTrackFilter = + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } auto t1 = a1.template reducedtrack_as(); auto t2 = a2.template reducedtrack_as(); fNPairPerEvent++; VarManager::FillPairME(t1, t2); - if constexpr ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0) { + if constexpr ((TEventFillMap & + VarManager::ObjTypes::ReducedEventQvector) > 0) { VarManager::FillPairVn(t1, t2); } - if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0) { + if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > + 0) { VarManager::FillPairVn(t1, t2); } pairSign = t1.sign() + t2.sign(); ncuts = fNCutsBarrel; } if constexpr (TPairType == VarManager::kDecayToMuMu) { - twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask; - if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue + twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & + fMuonFilterMask; + if (!twoTrackFilter) { // the tracks must have at least one filter bit + // in common to continue continue; } auto t1 = a1.template reducedmuon_as(); auto t2 = a2.template reducedmuon_as(); - if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && t1.matchMCHTrackId() >= 0) { + if (t1.matchMCHTrackId() == t2.matchMCHTrackId() && + t1.matchMCHTrackId() >= 0) { continue; } - if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && t1.matchMCHTrackId() >= 0) { + if (t1.matchMFTTrackId() == t2.matchMFTTrackId() && + t1.matchMCHTrackId() >= 0) { continue; } VarManager::FillPairME(t1, t2); - if constexpr ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0) { + if constexpr ((TEventFillMap & + VarManager::ObjTypes::ReducedEventQvector) > 0) { VarManager::FillPairVn(t1, t2); } - if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0) { + if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > + 0) { VarManager::FillPairVn(t1, t2); } pairSign = t1.sign() + t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter if (t1.muonAmbiguityInBunch() > 1) { twoTrackFilter |= (static_cast(1) << 28); } @@ -2736,37 +3935,49 @@ struct AnalysisSameEventPairing { histNames = fMuonHistNames; if (fConfigOptions.flatTables.value) { - dimuonAllList(-999., -999., -999., -999., - 0, 0, - -999., -999., -999., - VarManager::fgValues[VarManager::kMass], - false, - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - t1.pt(), t1.eta(), t1.phi(), t1.sign(), - t2.pt(), t2.eta(), t2.phi(), t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - 0., 0., - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), - t1.chi2(), t2.chi2(), - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)), (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)), - true, true, - VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], VarManager::fgValues[VarManager::kR2SP_AB], VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], VarManager::fgValues[VarManager::kVertexingSV]); + dimuonAllList( + -999., -999., -999., -999., 0, 0, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], t1.pt(), + t1.eta(), t1.phi(), t1.sign(), t2.pt(), t2.eta(), t2.phi(), + t2.sign(), t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), + t2.fwdDcaY(), 0., 0., t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } /*if constexpr (TPairType == VarManager::kElectronMuon) { - twoTrackFilter = a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & fTrackFilterMask; + twoTrackFilter = a1.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & + fTrackFilterMask; }*/ bool isAmbiInBunch = false; @@ -2776,64 +3987,95 @@ struct AnalysisSameEventPairing { if (!(twoTrackFilter & (static_cast(1) << icut))) { continue; // cut not passed } - isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); - isAmbiOutOfBunch = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); - isUnambiguous = !((twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)) || (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31))); + isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); + isAmbiOutOfBunch = + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); + isUnambiguous = + !((twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)) || + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31))); if (fConfigQA) { if (pairSign == 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][3].Data(), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][15].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][15].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][18].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][18].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][21].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][21].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if (pairSign > 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][4].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][4].Data(), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][16].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][16].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][19].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][19].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][22].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][22].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if constexpr (TPairType == VarManager::kDecayToMuMu) { - fHistMan->FillHistClass(histNames[icut][5].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(histNames[icut][5].Data(), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { - fHistMan->FillHistClass(histNames[icut][17].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][17].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { - fHistMan->FillHistClass(histNames[icut][20].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][20].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { - fHistMan->FillHistClass(histNames[icut][23].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + histNames[icut][23].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { - fHistMan->FillHistClass(Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -2844,21 +4086,27 @@ struct AnalysisSameEventPairing { } // barrel-barrel and muon-muon event mixing - template - void runSameSideMixing(TEvents& events, TAssocs const& assocs, TTracks const& tracks, o2::framework::Preslice& preSlice) - { + template + void runSameSideMixing(TEvents &events, TAssocs const &assocs, + TTracks const &tracks, + o2::framework::Preslice &preSlice) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { - LOG(info) << "Flow resolution objects not set, flow will not be filled for mixed events"; + LOG(info) << "Flow resolution objects not set, flow will not be filled " + "for mixed events"; if (events.size() > 0) { - initParamsFromCCDB(events.begin().timestamp(), events.begin().runNumber(), false); + initParamsFromCCDB(events.begin().timestamp(), + events.begin().runNumber(), false); } } events.bindExternalIndices(&assocs); int mixingDepth = fConfigMixingDepth.value; fAmbiguousPairs.clear(); - for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { + for (auto const &[event1, event2] : + selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event1, + dqtablereader_helpers::varValues()); auto assocs1 = assocs.sliceBy(preSlice, event1.globalIndex()); assocs1.bindExternalIndices(&events); @@ -2867,29 +4115,41 @@ struct AnalysisSameEventPairing { assocs2.bindExternalIndices(&events); fNPairPerEvent = 0; - VarManager::FillTwoMixEvents(event1, event2, assocs1, assocs2); + VarManager::FillTwoMixEvents(event1, event2, assocs1, + assocs2); if (fConfigOptions.useFlowReso) { VarManager::FillTwoMixEventsFlowResoFactor(ResoFlowSP, ResoFlowEP); } - runMixedPairing(assocs1, assocs2, tracks, tracks); + runMixedPairing(assocs1, assocs2, tracks, + tracks); VarManager::fgValues[VarManager::kNPairsPerEvent] = fNPairPerEvent; if (fEnableBarrelMixingHistos && fConfigQA) { - fHistMan->FillHistClass("PairingMEQA", dqtablereader_helpers::varValues()); + fHistMan->FillHistClass("PairingMEQA", + dqtablereader_helpers::varValues()); } } // end event loop } - template - void runEmuSameEventPairing(TEvents const& events, o2::framework::Preslice& preslice1, TTrackAssocs const& assocs1, TTracks const& /*tracks1*/, o2::framework::Preslice& preslice2, TMuonAssocs const& assocs2, TMuons const& /*tracks2*/) - { + template + void runEmuSameEventPairing(TEvents const &events, + o2::framework::Preslice &preslice1, + TTrackAssocs const &assocs1, + TTracks const & /*tracks1*/, + o2::framework::Preslice &preslice2, + TMuonAssocs const &assocs2, + TMuons const & /*tracks2*/) { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { - initParamsFromCCDB(events.begin().timestamp(), events.begin().runNumber(), TTwoProngFitter); + initParamsFromCCDB(events.begin().timestamp(), + events.begin().runNumber(), TTwoProngFitter); fCurrentRun = events.begin().runNumber(); } } - const auto& histNames = fTrackMuonHistNames; + const auto &histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; electronmuonList.reserve(assocs1.size()); @@ -2898,10 +4158,12 @@ struct AnalysisSameEventPairing { int sign1 = 0; int sign2 = 0; - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool eventHasQvectorCentr = + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -2910,7 +4172,8 @@ struct AnalysisSameEventPairing { } VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event, + dqtablereader_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event.globalIndex()); if (groupedAssocs1.size() == 0) { @@ -2922,8 +4185,11 @@ struct AnalysisSameEventPairing { } // Custom combination policy - for (auto const& [a1, a2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(groupedAssocs1, groupedAssocs2))) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { + for (auto const &[a1, a2] : + o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy( + groupedAssocs1, groupedAssocs2))) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + fTrackFilterMask)) { continue; } if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { @@ -2938,7 +4204,9 @@ struct AnalysisSameEventPairing { twoTrackFilter = 0; int minCuts = std::min(fNCutsBarrel, fNCutsMuon); for (int i = 0; i < minCuts; ++i) { - if ((a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & (1u << i)) && (a2.isMuonSelected_raw() & (1u << i))) { + if ((a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + (1u << i)) && + (a2.isMuonSelected_raw() & (1u << i))) { twoTrackFilter |= (1u << i); } } @@ -2957,21 +4225,27 @@ struct AnalysisSameEventPairing { VarManager::FillPair(t1, t2); if (fConfigOptions.propTrack) { - VarManager::FillPairCollision(event, t1, t2); + VarManager::FillPairCollision(event, t1, t2); } if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); } if constexpr (eventHasQvectorCentr) { - VarManager::FillPairVn(t1, t2); + VarManager::FillPairVn(t1, + t2); } - electronmuonList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], + electronmuonList(event.globalIndex(), + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), twoTrackFilter, 0); for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & (1u << iTrack))) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + (1u << iTrack))) { continue; } @@ -2980,26 +4254,32 @@ struct AnalysisSameEventPairing { continue; } - for (unsigned int iPairCut = 0; iPairCut < (fPairCuts.empty() ? 1 : fPairCuts.size()); iPairCut++) { + for (unsigned int iPairCut = 0; + iPairCut < (fPairCuts.empty() ? 1 : fPairCuts.size()); + iPairCut++) { if (!fPairCuts.empty()) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); if (!cut.IsSelected(dqtablereader_helpers::varValues())) { continue; } } - int index = iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + int index = iTrack * (fNCutsMuon * nPairCuts) + + iMuon * nPairCuts + iPairCut; auto itHist = histNames.find(index); if (itHist == histNames.end()) { continue; } if (fConfigQA) { if (sign1 * sign2 < 0) { // Opposite Sign - fHistMan->FillHistClass(itHist->second[0].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[0].Data(), + dqtablereader_helpers::varValues()); } else { // Like Sign if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[1].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[1].Data(), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(itHist->second[2].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[2].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3011,21 +4291,26 @@ struct AnalysisSameEventPairing { } // end event loop } - template - void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, TTracks1 const& /*tracks1*/, TTracks2 const& /*tracks2*/) - { - const auto& histNames = fTrackMuonHistNames; + template + void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { + const auto &histNames = fTrackMuonHistNames; int sign1 = 0; int sign2 = 0; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; - constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); - constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - - for (auto const& a1 : assocs1) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { + constexpr bool eventHasQvector = + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + constexpr bool eventHasQvectorCentr = + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + + for (auto const &a1 : assocs1) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + fTrackFilterMask)) { continue; } - for (auto const& a2 : assocs2) { + for (auto const &a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -3035,16 +4320,19 @@ struct AnalysisSameEventPairing { sign1 = t1.sign(); sign2 = t2.sign(); - VarManager::FillPairME(t1, t2); + VarManager::FillPairME(t1, + t2); if constexpr (eventHasQvector) { VarManager::FillPairVn(t1, t2); } if constexpr (eventHasQvectorCentr) { - VarManager::FillPairVn(t1, t2); + VarManager::FillPairVn(t1, + t2); } for (int iTrack = 0; iTrack < fNCutsBarrel; ++iTrack) { - if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & (1u << iTrack))) { + if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & + (1u << iTrack))) { continue; } for (int iMuon = 0; iMuon < fNCutsMuon; ++iMuon) { @@ -3058,19 +4346,23 @@ struct AnalysisSameEventPairing { continue; } } - int index = iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + iPairCut; + int index = iTrack * (fNCutsMuon * nPairCuts) + + iMuon * nPairCuts + iPairCut; auto itHist = histNames.find(index); if (itHist == histNames.end() || itHist->second.size() < 6) { continue; } if (fConfigQA) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(itHist->second[3].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[3].Data(), + dqtablereader_helpers::varValues()); } else { if (sign1 > 0) { - fHistMan->FillHistClass(itHist->second[4].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[4].Data(), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(itHist->second[5].Data(), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(itHist->second[5].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3081,16 +4373,21 @@ struct AnalysisSameEventPairing { } } - template - void runEmuSameSideMixing(TEvents& events, o2::framework::Preslice& preslice1, TTrackAssocs const& assocs1, TTracks const& tracks1, - o2::framework::Preslice& preslice2, TMuonAssocs const& assocs2, TMuons const& tracks2) - { + template + void runEmuSameSideMixing(TEvents &events, + o2::framework::Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const &tracks1, + o2::framework::Preslice &preslice2, + TMuonAssocs const &assocs2, TMuons const &tracks2) { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { + for (auto const &[event1, event2] : + selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event1, + dqtablereader_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event1.globalIndex()); groupedAssocs1.bindExternalIndices(&events); @@ -3104,219 +4401,402 @@ struct AnalysisSameEventPairing { continue; } - runEmuMixedPairing(groupedAssocs1, groupedAssocs2, tracks1, tracks2); + runEmuMixedPairing(groupedAssocs1, groupedAssocs2, tracks1, + tracks2); } // end event loop } - void processAllSkimmed(MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); - // runSameEventPairing(event, tracks, muons); + void processAllSkimmed( + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameEventPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks); + runSameEventPairing(events, muonAssocsPerCollision, + muonAssocs, muons); + // runSameEventPairing(event, tracks, muons); } - void processBarrelOnlySkimmed(MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlySkimmed( + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runSameEventPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks); } - void processBarrelOnlySkimmedFlow(MyEventsVtxCovSelectedQvector const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlySkimmedFlow( + MyEventsVtxCovSelectedQvector const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processBarrelOnlySkimmedNoCov(MyEventsSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlySkimmedNoCov( + MyEventsSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { + runSameEventPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks); } - void processBarrelOnlySkimmedNoCovWithMultExtra(MyEventsMultExtraSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlySkimmedNoCovWithMultExtra( + MyEventsMultExtraSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processBarrelOnlyWithCollSkimmed(MyEventsVtxCovSelectedInfo const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlyWithCollSkimmed( + MyEventsVtxCovSelectedInfo const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processBarrelOnlyWithQvectorCentrSkimmedNoCov(MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlyWithQvectorCentrSkimmedNoCov( + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processBarrelOnlyWithQvectorCentrSkimmed(MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processBarrelOnlyWithQvectorCentrSkimmed( + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + void processMuonOnlySkimmed( + MyEventsVtxCovSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameEventPairing(events, muonAssocsPerCollision, + muonAssocs, muons); } - void processMuonOnlySkimmedMultExtra(MyEventsVtxCovSelectedMultExtra const& events, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + void processMuonOnlySkimmedMultExtra( + MyEventsVtxCovSelectedMultExtra const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameEventPairing( + events, muonAssocsPerCollision, muonAssocs, muons); } - void processMuonOnlySkimmedFlow(MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + void processMuonOnlySkimmedFlow( + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameEventPairing(events, muonAssocsPerCollision, + muonAssocs, muons); } - void processMuonOnlyVertexingSkimmed(MyEventsVtxCovSelected const& events, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); + void processMuonOnlyVertexingSkimmed( + MyEventsVtxCovSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameEventPairing(events, muonAssocsPerCollision, + muonAssocs, muons); } - void processElectronMuonSkimmed(MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runEmuSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, muonAssocsPerCollision, muonAssocs, muons); + void processElectronMuonSkimmed( + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runEmuSameEventPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processMixingAllSkimmed(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, MyBarrelTracksWithCov const& tracks, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); - runSameSideMixing(events, muonAssocs, muons, muonAssocsPerCollision); + void processMixingAllSkimmed( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameSideMixing(events, trackAssocs, tracks, + trackAssocsPerCollision); + runSameSideMixing(events, muonAssocs, muons, + muonAssocsPerCollision); } - void processMixingBarrelSkimmed(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, o2::aod::ReducedTracks const& tracks) - { - runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); + void processMixingBarrelSkimmed( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + o2::aod::ReducedTracks const &tracks) { + runSameSideMixing(events, trackAssocs, tracks, + trackAssocsPerCollision); } - void processMixingBarrelSkimmedFlow(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, o2::aod::ReducedTracks const& tracks) - { - runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); + void processMixingBarrelSkimmedFlow( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + o2::aod::ReducedTracks const &tracks) { + runSameSideMixing( + events, trackAssocs, tracks, trackAssocsPerCollision); } - void processMixingBarrelWithQvectorCentrSkimmedNoCov(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, MyBarrelTracksWithAmbiguities const& tracks) - { - runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); + void processMixingBarrelWithQvectorCentrSkimmedNoCov( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + MyBarrelTracksWithAmbiguities const &tracks) { + runSameSideMixing( + events, trackAssocs, tracks, trackAssocsPerCollision); } - void processMixingMuonSkimmed(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameSideMixing(events, muonAssocs, muons, muonAssocsPerCollision); + void processMixingMuonSkimmed( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameSideMixing(events, muonAssocs, muons, + muonAssocsPerCollision); } - void processMixingMuonSkimmedFlow(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runSameSideMixing(events, muonAssocs, muons, muonAssocsPerCollision); + void processMixingMuonSkimmedFlow( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runSameSideMixing( + events, muonAssocs, muons, muonAssocsPerCollision); } - void processMixingElectronMuonSkimmed(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& barrelAssocs, o2::aod::ReducedTracks const& barrelTracks, - o2::soa::Join const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons) - { - runEmuSameSideMixing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, muonAssocsPerCollision, muonAssocs, muons); + void processMixingElectronMuonSkimmed( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &barrelAssocs, + o2::aod::ReducedTracks const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { + runEmuSameSideMixing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisSameEventPairing, processAllSkimmed, "Run all types of pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, "Run barrel only pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, "Run barrel only pairing, with skimmed tracks and with collision information", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedNoCov, "Run barrel only pairing (no covariances), with skimmed tracks and with collision information", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedNoCovWithMultExtra, "Run barrel only pairing (no covariances), with skimmed tracks, with collision information, with MultsExtra", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmedNoCov, "Run barrel only pairing (no covariances), with skimmed tracks, with Qvector from central framework", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, "Run barrel only pairing (no covariances), with skimmed tracks, with collision information, with Qvector from central framework", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedFlow, "Run barrel only pairing, with skimmed tracks and with flow", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedMultExtra, "Run muon only pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedFlow, "Run muon only pairing, with skimmed tracks and flow", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, "Run muon only pairing with two-prong vertexing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingAllSkimmed, "Run all types of mixed pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmed, "Run barrel type mixing pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, "Run barrel type mixing pairing, with flow, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelWithQvectorCentrSkimmedNoCov, "Run barrel type mixing pairing, with skimmed tracks and with Qvector from central framework", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingMuonSkimmed, "Run muon type mixing pairing, with skimmed muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingMuonSkimmedFlow, "Run muon type mixing pairing, with skimmed muons and flow", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, "Run electron-muon mixing pairing, with skimmed tracks/muons", false); - PROCESS_SWITCH(AnalysisSameEventPairing, processDummy, "Dummy function, enabled only if none of the others are enabled", true); + PROCESS_SWITCH(AnalysisSameEventPairing, processAllSkimmed, + "Run all types of pairing, with skimmed tracks/muons", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, + "Run barrel only pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, + "Run barrel only pairing, with skimmed tracks and with " + "collision information", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedNoCov, + "Run barrel only pairing (no covariances), with skimmed " + "tracks and with collision information", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, + processBarrelOnlySkimmedNoCovWithMultExtra, + "Run barrel only pairing (no covariances), with skimmed " + "tracks, with collision information, with MultsExtra", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, + processBarrelOnlyWithQvectorCentrSkimmedNoCov, + "Run barrel only pairing (no covariances), with skimmed " + "tracks, with Qvector from central framework", + false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, + "Run barrel only pairing (no covariances), with skimmed tracks, with " + "collision information, with Qvector from central framework", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedFlow, + "Run barrel only pairing, with skimmed tracks and with flow", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, + "Run muon only pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedMultExtra, + "Run muon only pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedFlow, + "Run muon only pairing, with skimmed tracks and flow", false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, + "Run electron-muon pairing, with skimmed tracks/muons", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingAllSkimmed, + "Run all types of mixed pairing, with skimmed tracks/muons", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmed, + "Run barrel type mixing pairing, with skimmed tracks", false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, + "Run barrel type mixing pairing, with flow, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisSameEventPairing, + processMixingBarrelWithQvectorCentrSkimmedNoCov, + "Run barrel type mixing pairing, with skimmed tracks and with " + "Qvector from central framework", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingMuonSkimmed, + "Run muon type mixing pairing, with skimmed muons", false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingMuonSkimmedFlow, + "Run muon type mixing pairing, with skimmed muons and flow", + false); + PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, + "Run electron-muon mixing pairing, with skimmed tracks/muons", + false); + PROCESS_SWITCH( + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; -// Run pairing for resonance with legs fulfilling separate cuts (asymmetric decay channel) +// Run pairing for resonance with legs fulfilling separate cuts (asymmetric +// decay channel) struct AnalysisAsymmetricPairing { o2::framework::Produces ditrackList; o2::framework::Produces ditrackExtraList; - o2::base::MatLayerCylSet* fLUT = nullptr; - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + o2::base::MatLayerCylSet *fLUT = nullptr; + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. // Output objects o2::framework::OutputObj fOutputList{"output"}; // Configurables - o2::framework::Configurable fConfigLegCuts{"cfgLegCuts", "", ":[:],[:[:],...]"}; - o2::framework::Configurable fConfigLegAFilterMask{"cfgLegAFilterMask", 0, "o2::framework::expressions::Filter mask corresponding to cuts in track-selection"}; - o2::framework::Configurable fConfigLegBFilterMask{"cfgLegBFilterMask", 0, "o2::framework::expressions::Filter mask corresponding to cuts in track-selection"}; - o2::framework::Configurable fConfigLegCFilterMask{"cfgLegCFilterMask", 0, "o2::framework::expressions::Filter mask corresponding to cuts in track-selection"}; - o2::framework::Configurable fConfigCommonTrackCuts{"cfgCommonTrackCuts", "", "Comma separated list of cuts to be applied to all legs"}; - o2::framework::Configurable fConfigPairCuts{"cfgPairCuts", "", "Comma separated list of pair cuts"}; - o2::framework::Configurable fConfigPairCutsJSON{"cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; - o2::framework::Configurable fConfigRemoveCollSplittingCandidates{"cfgRemoveCollSplittingCandidates", false, "If true, remove collision splitting candidates as determined by the event selection task upstream"}; - o2::framework::Configurable fConfigSkipAmbiguousIdCombinations{"cfgSkipAmbiguousIdCombinations", true, "Choose whether to skip pairs/triples which pass a stricter combination of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; - - o2::framework::Configurable fConfigHistogramSubgroups{"cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", "Comma separated list of asymmetric-pairing histogram subgroups"}; - o2::framework::Configurable fConfigSameSignHistograms{"cfgSameSignHistograms", false, "Include same sign pair histograms for 2-prong decays"}; - o2::framework::Configurable fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", false, "Include separate histograms for pairs/triplets with ambiguous tracks"}; - o2::framework::Configurable fConfigReflectedHistograms{"cfgReflectedHistograms", false, "Include separate histograms for pairs which are reflections of previously counted pairs"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - - o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable fConfigGRPMagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - - o2::framework::Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - o2::framework::Configurable fConfigUseAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"}; - o2::framework::Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; - o2::framework::Configurable fConfigFetchInteractionRate{"cfgFetchInteractionRate", false, "Fetch event-wise interaction rate from the CCDB"}; - o2::framework::Configurable fConfigIRSource{"cfgIRSource", "ZNC hadronic", "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; + o2::framework::Configurable fConfigLegCuts{ + "cfgLegCuts", "", + ":[:],[:[:],...]"}; + o2::framework::Configurable fConfigLegAFilterMask{ + "cfgLegAFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; + o2::framework::Configurable fConfigLegBFilterMask{ + "cfgLegBFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; + o2::framework::Configurable fConfigLegCFilterMask{ + "cfgLegCFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; + o2::framework::Configurable fConfigCommonTrackCuts{ + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; + o2::framework::Configurable fConfigPairCuts{ + "cfgPairCuts", "", "Comma separated list of pair cuts"}; + o2::framework::Configurable fConfigPairCutsJSON{ + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + o2::framework::Configurable fConfigRemoveCollSplittingCandidates{ + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; + o2::framework::Configurable fConfigSkipAmbiguousIdCombinations{ + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + + o2::framework::Configurable fConfigHistogramSubgroups{ + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; + o2::framework::Configurable fConfigSameSignHistograms{ + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; + o2::framework::Configurable fConfigAmbiguousHistograms{ + "cfgAmbiguousHistograms", false, + "Include separate histograms for pairs/triplets with ambiguous tracks"}; + o2::framework::Configurable fConfigReflectedHistograms{ + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + + o2::framework::Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable fConfigGRPMagPath{ + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + + o2::framework::Configurable fConfigUseKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; + o2::framework::Configurable fConfigUseAbsDCA{ + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; + o2::framework::Configurable fConfigLutPath{ + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + o2::framework::Configurable fConfigFetchInteractionRate{ + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; + o2::framework::Configurable fConfigIRSource{ + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; o2::framework::Service fCCDB{}; o2::ctpRateFetcher rateFetcher; - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; - // o2::framework::expressions::Filter masks to find legs in BarrelTrackCuts table + // o2::framework::expressions::Filter masks to find legs in BarrelTrackCuts + // table uint32_t fLegAFilterMask = 0; uint32_t fLegBFilterMask = 0; uint32_t fLegCFilterMask = 0; @@ -3332,23 +4812,35 @@ struct AnalysisAsymmetricPairing { int fNLegCuts = 0; int fNPairCuts = 0; int fNCommonTrackCuts = 0; - // vectors for cut names and signal names, for easy access when calling FillHistogramList() + // vectors for cut names and signal names, for easy access when calling + // FillHistogramList() std::vector fLegCutNames; std::vector fPairCutNames; std::vector fCommonCutNames; - o2::framework::Preslice> trackAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice< + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs - o2::framework::Partition> legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegAFilterMask) > static_cast(0); - o2::framework::Partition> legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegBFilterMask) > static_cast(0); - o2::framework::Partition> legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & fConfigLegCFilterMask) > static_cast(0); + o2::framework::Partition< + o2::soa::Join> + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); + o2::framework::Partition< + o2::soa::Join> + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); + o2::framework::Partition< + o2::soa::Join> + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -3356,7 +4848,8 @@ struct AnalysisAsymmetricPairing { VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); // Get the leg cut filter maps fLegAFilterMask = fConfigLegAFilterMask.value; @@ -3367,15 +4860,17 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - fPairCuts.push_back(o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + fPairCuts.push_back( + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -3386,14 +4881,18 @@ struct AnalysisAsymmetricPairing { } // Get the barrel track selection cuts std::string tempCuts; - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -3407,23 +4906,44 @@ struct AnalysisAsymmetricPairing { for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { commonCutIdx = objArray->IndexOf(objArrayCommon->At(icut)); if (commonCutIdx >= 0) { - fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); - fCommonTrackCutFilterMasks[icut] = static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); + fCommonTrackCutMask |= static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); + fCommonTrackCutFilterMasks[icut] = + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { - LOGF(fatal, "Common track cut %s was not calculated upstream. Check the config!", objArrayCommon->At(icut)->GetName()); + LOGF(fatal, + "Common track cut %s was not calculated upstream. Check the " + "config!", + objArrayCommon->At(icut)->GetName()); } } } // Check that the leg cut masks make sense - if (static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegAFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1, objArray->GetEntries()); - } - if (static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegBFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1, objArray->GetEntries()); - } - if (static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1 > objArray->GetEntries()) { - LOGF(fatal, "fConfigLegCFilterMask has highest bit at position %d, but track-selection only has %d cuts!", static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1, objArray->GetEntries()); + if (static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegAFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegAFilterMask))) + 1, + objArray->GetEntries()); + } + if (static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegBFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegBFilterMask))) + 1, + objArray->GetEntries()); + } + if (static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1 > + objArray->GetEntries()) { + LOGF(fatal, + "fConfigLegCFilterMask has highest bit at position %d, but " + "track-selection only has %d cuts!", + static_cast(std::floor(TMath::Log2(fLegCFilterMask))) + 1, + objArray->GetEntries()); } // Get the cuts defining the legs @@ -3449,33 +4969,43 @@ struct AnalysisAsymmetricPairing { } else if (legs->GetEntries() == 2) { isThreeProng.push_back(false); } else { - LOGF(fatal, "Leg cuts %s has the wrong format and could not be parsed!", legsStr.Data()); + LOGF(fatal, "Leg cuts %s has the wrong format and could not be parsed!", + legsStr.Data()); continue; } // Find leg cuts in the track selection cuts legAIdx = objArray->IndexOf(legs->At(0)); if (legAIdx >= 0) { fConstructedLegAFilterMask |= (static_cast(1) << legAIdx); - fConstructedLegAFilterMasksMap[icut] |= static_cast(1) << legAIdx; + fConstructedLegAFilterMasksMap[icut] |= static_cast(1) + << legAIdx; } else { - LOGF(fatal, "Leg A cut %s was not calculated upstream. Check the config!", legs->At(0)->GetName()); + LOGF(fatal, + "Leg A cut %s was not calculated upstream. Check the config!", + legs->At(0)->GetName()); continue; } legBIdx = objArray->IndexOf(legs->At(1)); if (legBIdx >= 0) { fConstructedLegBFilterMask |= (static_cast(1) << legBIdx); - fConstructedLegBFilterMasksMap[icut] |= static_cast(1) << legBIdx; + fConstructedLegBFilterMasksMap[icut] |= static_cast(1) + << legBIdx; } else { - LOGF(fatal, "Leg B cut %s was not calculated upstream. Check the config!", legs->At(1)->GetName()); + LOGF(fatal, + "Leg B cut %s was not calculated upstream. Check the config!", + legs->At(1)->GetName()); continue; } if (isThreeProng[icut]) { legCIdx = objArray->IndexOf(legs->At(2)); if (legCIdx >= 0) { fConstructedLegCFilterMask |= (static_cast(1) << legCIdx); - fConstructedLegCFilterMasksMap[icut] |= static_cast(1) << legCIdx; + fConstructedLegCFilterMasksMap[icut] |= static_cast(1) + << legCIdx; } else { - LOGF(fatal, "Leg C cut %s was not calculated upstream. Check the config!", legs->At(2)->GetName()); + LOGF(fatal, + "Leg C cut %s was not calculated upstream. Check the config!", + legs->At(2)->GetName()); continue; } } @@ -3483,23 +5013,38 @@ struct AnalysisAsymmetricPairing { fLegCutNames.push_back(legsStr); if (isThreeProng[icut]) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s", legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); if (fConfigAmbiguousHistograms.value) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s", legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) @@ -3512,36 +5057,63 @@ struct AnalysisAsymmetricPairing { fNPairHistPrefixes = pairHistPrefixes.size(); for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigAmbiguousHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_ambiguous_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_ambiguous_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } } if (fConfigReflectedHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_reflected_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_reflected_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } } if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair(cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); - for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts + for (int iPairCut = 0; iPairCut < fNPairCuts; + ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms( + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { - DefineHistograms(fHistMan, Form("%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data(), objArrayCommon->At(iCommonCut)->GetName(), objArrayPair->At(iPairCut)->GetName()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("%s_%s_%s_%s", + pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } } // end loop (common cuts) } // end loop (pair cuts) @@ -3551,18 +5123,29 @@ struct AnalysisAsymmetricPairing { // Make sure the leg cuts are covered by the configured filter masks if (fLegAFilterMask != fConstructedLegAFilterMask) { - LOGF(fatal, "cfgLegAFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegAFilterMask, fConstructedLegAFilterMask); + LOGF(fatal, + "cfgLegAFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegAFilterMask, fConstructedLegAFilterMask); } if (fLegBFilterMask != fConstructedLegBFilterMask) { - LOGF(fatal, "cfgLegBFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegBFilterMask, fConstructedLegBFilterMask); + LOGF(fatal, + "cfgLegBFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegBFilterMask, fConstructedLegBFilterMask); } if (fLegCFilterMask != fConstructedLegCFilterMask) { - LOGF(fatal, "cfgLegCFilterMask (%d) is not equal to the mask constructed by the cuts specified in cfgLegCuts (%d)!", fLegCFilterMask, fConstructedLegCFilterMask); + LOGF(fatal, + "cfgLegCFilterMask (%d) is not equal to the mask constructed by the " + "cuts specified in cfgLegCuts (%d)!", + fLegCFilterMask, fConstructedLegCFilterMask); } // Make sure only pairs or only triplets of leg cuts were given - int tripletCheckSum = std::count(isThreeProng.begin(), isThreeProng.end(), true); + int tripletCheckSum = + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check your config!"); + LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -3571,45 +5154,62 @@ struct AnalysisAsymmetricPairing { fCCDB->setCaching(true); fCCDB->setLocalObjectValidityChecking(); - fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile(fCCDB->get(fConfigLutPath)); + fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON - VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + VarManager::SetUseVars( + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPMagPath, timestamp); + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (isTriplets) { if (fConfigUseKFVertexing.value) { VarManager::SetupThreeProngKFParticle(magField); } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); + VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, + 1.0e-3f, 0.9f, + fConfigUseAbsDCA.value); } } else { if (fConfigUseKFVertexing.value) { VarManager::SetupTwoProngKFParticle(magField); } else { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, fConfigUseAbsDCA.value); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } - // Template function to run same event pairing with asymmetric pairs (e.g. kaon-pion) - template - void runAsymmetricPairing(TEvents const& events, o2::framework::Preslice& preslice, TTrackAssocs const& /*assocs*/, TTracks const& /*tracks*/) - { + // Template function to run same event pairing with asymmetric pairs (e.g. + // kaon-pion) + template + void runAsymmetricPairing(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const & /*assocs*/, + TTracks const & /*tracks*/) { fPairCount.clear(); - if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber() + if (events.size() > 0) { // Additional protection to avoid crashing of + // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), false); fCurrentRun = events.begin().runNumber(); @@ -3621,59 +5221,78 @@ struct AnalysisAsymmetricPairing { // Reserve capacity for the output tables int64_t reserveSize = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } - if (fConfigRemoveCollSplittingCandidates.value && event.isEventSelected_bit(2)) { + if (fConfigRemoveCollSplittingCandidates.value && + event.isEventSelected_bit(2)) { continue; } - auto groupedLegAAssocs = legACandidateAssocs.sliceBy(preslice, event.globalIndex()); - auto groupedLegBAssocs = legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegAAssocs = + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegBAssocs = + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); reserveSize += static_cast(groupedLegAAssocs.size()) * static_cast(groupedLegBAssocs.size()); } ditrackList.reserve(reserveSize); ditrackExtraList.reserve(reserveSize); - constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + constexpr bool trackHasCov = + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } - if (fConfigRemoveCollSplittingCandidates.value && event.isEventSelected_bit(2)) { + if (fConfigRemoveCollSplittingCandidates.value && + event.isEventSelected_bit(2)) { continue; } // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event, + dqtablereader_helpers::varValues()); // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { - VarManager::fgValues[VarManager::kInteractionRate] = rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, fConfigIRSource.value, true) / 1000.; // kHz + VarManager::fgValues[VarManager::kInteractionRate] = + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } - auto groupedLegAAssocs = legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegAAssocs = + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } - auto groupedLegBAssocs = legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegBAssocs = + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : combinations(o2::soa::CombinationsFullIndexPolicy(groupedLegAAssocs, groupedLegBAssocs))) { + for (auto const &[a1, a2] : + combinations(o2::soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs))) { auto twoTrackFilter = static_cast(0); auto twoTrackCommonFilter = static_cast(0); auto pairFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { // Find leg pair definitions both candidates participate in - if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut])) { + if ((a1.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) && + (a2.isBarrelSelected_raw() & + fConstructedLegBFilterMasksMap[icut])) { twoTrackFilter |= (static_cast(1) << icut); // If the supposed pion passes a kaon cut, this is a K+K-. Skip it. - if (TPairType == VarManager::kDecayToKPi && fConfigSkipAmbiguousIdCombinations.value) { - if (a2.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) { + if (TPairType == VarManager::kDecayToKPi && + fConfigSkipAmbiguousIdCombinations.value) { + if (a2.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) { twoTrackFilter &= ~(static_cast(1) << icut); } } @@ -3684,7 +5303,8 @@ struct AnalysisAsymmetricPairing { } // Find common track cuts both candidates pass - twoTrackCommonFilter |= a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & fCommonTrackCutMask; + twoTrackCommonFilter |= a1.isBarrelSelected_raw() & + a2.isBarrelSelected_raw() & fCommonTrackCutMask; auto t1 = a1.template reducedtrack_as(); auto t2 = a2.template reducedtrack_as(); @@ -3695,9 +5315,11 @@ struct AnalysisAsymmetricPairing { } bool isReflected = false; - std::pair trackIds(t1.globalIndex(), t2.globalIndex()); + std::pair trackIds(t1.globalIndex(), + t2.globalIndex()); if (fPairCount.contains(trackIds)) { - // Double counting is possible due to track-collision ambiguity. Skip pairs which were counted before + // Double counting is possible due to track-collision ambiguity. Skip + // pairs which were counted before fPairCount[trackIds] += 1; continue; } @@ -3708,90 +5330,153 @@ struct AnalysisAsymmetricPairing { sign1 = t1.sign(); sign2 = t2.sign(); - // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter - if (t1.barrelAmbiguityInBunch() > 1 || t1.barrelAmbiguityOutOfBunch() > 1) { + // store the ambiguity number of the two dilepton legs in the last 4 + // digits of the two-track filter + if (t1.barrelAmbiguityInBunch() > 1 || + t1.barrelAmbiguityOutOfBunch() > 1) { twoTrackFilter |= (static_cast(1) << 30); } - if (t2.barrelAmbiguityInBunch() > 1 || t2.barrelAmbiguityOutOfBunch() > 1) { + if (t2.barrelAmbiguityInBunch() > 1 || + t2.barrelAmbiguityOutOfBunch() > 1) { twoTrackFilter |= (static_cast(1) << 31); } VarManager::FillPair(t1, t2); if constexpr (TTwoProngFitter) { - VarManager::FillPairVertexing(event, t1, t2); + VarManager::FillPairVertexing(event, t1, t2); } // Fill histograms bool isAmbi = false; for (int icut = 0; icut < fNLegCuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { - isAmbi = (twoTrackFilter & (static_cast(1) << 30)) || (twoTrackFilter & (static_cast(1) << 31)); + isAmbi = (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); // reconstructed, unmatched + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigAmbiguousHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_reflected_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_reflected_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_reflected_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_reflected_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } if (isReflected && fConfigReflectedHistograms) { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_reflected_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_reflected_%s", + fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } } } - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (twoTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (twoTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } } } } // end loop (common cuts) int iPairCut = 0; - for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { - if (!((*cut)->IsSelected(dqtablereader_helpers::varValues()))) { // apply pair cuts + for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); + cut++, iPairCut++) { + if (!((*cut)->IsSelected( + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); // Histograms with pair cuts if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } } // Histograms with pair cuts and common track cuts - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - if (twoTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + if (twoTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { - fHistMan->FillHistClass(Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } else { - fHistMan->FillHistClass(Form("PairsBarrelSEMM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3799,91 +5484,132 @@ struct AnalysisAsymmetricPairing { } // end loop (pair cuts) } } // end loop (cuts) - ditrackList(event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], - t1.sign() + t2.sign(), twoTrackFilter, pairFilter, twoTrackCommonFilter); + ditrackList( + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { - ditrackExtraList(t1.globalIndex(), t2.globalIndex(), VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]); + ditrackExtraList( + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop } // Template function to run same event triplets (e.g. D+->K-pi+pi+) - template - void runThreeProng(TEvents const& events, o2::framework::Preslice& preslice, TTrackAssocs const& /*assocs*/, TTracks const& tracks, VarManager::PairCandidateType tripletType) - { - if (events.size() > 0) { // Additional protection to avoid crashing of events.begin().runNumber() + template + void runThreeProng(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const & /*assocs*/, TTracks const &tracks, + VarManager::PairCandidateType tripletType) { + if (events.size() > 0) { // Additional protection to avoid crashing of + // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), true); fCurrentRun = events.begin().runNumber(); } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } - if (fConfigRemoveCollSplittingCandidates.value && event.isEventSelected_bit(2)) { + if (fConfigRemoveCollSplittingCandidates.value && + event.isEventSelected_bit(2)) { continue; } // Reset the fValues array VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event, + dqtablereader_helpers::varValues()); - auto groupedLegAAssocs = legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegAAssocs = + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } - auto groupedLegBAssocs = legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegBAssocs = + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - auto groupedLegCAssocs = legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + auto groupedLegCAssocs = + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const& [a1, a2, a3] : combinations(o2::soa::CombinationsFullIndexPolicy(groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { - readTriplet(a1, a2, a3, tracks, event, tripletType); + for (auto const &[a1, a2, a3] : + combinations(o2::soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + readTriplet( + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const& a1 : groupedLegAAssocs) { - for (auto const& [a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { - readTriplet(a1, a2, a3, tracks, event, tripletType); + for (auto const &a1 : groupedLegAAssocs) { + for (auto const &[a2, a3] : + combinations(groupedLegBAssocs, groupedLegCAssocs)) { + readTriplet( + a1, a2, a3, tracks, event, tripletType); } } } else { - LOG(fatal) << "Given tripletType not recognized. Don't know how to make combinations!"; + LOG(fatal) << "Given tripletType not recognized. Don't know how to " + "make combinations!"; } } // end event loop } // Helper function to process triplet - template - void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, TTrackAssoc const& a3, TTracks const& /*tracks*/, TEvent const& event, VarManager::PairCandidateType tripletType) - { + template + void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, + TTrackAssoc const &a3, TTracks const & /*tracks*/, + TEvent const &event, + VarManager::PairCandidateType tripletType) { auto threeTrackFilter = static_cast(0); auto threeTrackCommonFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { // Find out which leg cut combinations the triplet passes - if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut]) && (a3.isBarrelSelected_raw() & fConstructedLegCFilterMasksMap[icut])) { + if ((a1.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) && + (a2.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut]) && + (a3.isBarrelSelected_raw() & fConstructedLegCFilterMasksMap[icut])) { threeTrackFilter |= (static_cast(1) << icut); - if (tripletType == VarManager::kTripleCandidateToPKPi && fConfigSkipAmbiguousIdCombinations.value) { - // Check if the supposed pion passes as a proton or kaon, if so, skip this triplet. It is pKp or pKK. - if ((a3.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) || (a3.isBarrelSelected_raw() & fConstructedLegBFilterMasksMap[icut])) { + if (tripletType == VarManager::kTripleCandidateToPKPi && + fConfigSkipAmbiguousIdCombinations.value) { + // Check if the supposed pion passes as a proton or kaon, if so, skip + // this triplet. It is pKp or pKK. + if ((a3.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) || + (a3.isBarrelSelected_raw() & + fConstructedLegBFilterMasksMap[icut])) { return; } - // Check if the supposed kaon passes as a proton, if so, skip this triplet. It is ppPi. - if (a2.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) { + // Check if the supposed kaon passes as a proton, if so, skip this + // triplet. It is ppPi. + if (a2.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) { return; } } - if (tripletType == VarManager::kTripleCandidateToKPiPi && fConfigSkipAmbiguousIdCombinations.value) { - // Check if one of the supposed pions pass as a kaon, if so, skip this triplet. It is KKPi. - if ((a2.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut]) || (a3.isBarrelSelected_raw() & fConstructedLegAFilterMasksMap[icut])) { + if (tripletType == VarManager::kTripleCandidateToKPiPi && + fConfigSkipAmbiguousIdCombinations.value) { + // Check if one of the supposed pions pass as a kaon, if so, skip this + // triplet. It is KKPi. + if ((a2.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut]) || + (a3.isBarrelSelected_raw() & + fConstructedLegAFilterMasksMap[icut])) { return; } } @@ -3894,7 +5620,9 @@ struct AnalysisAsymmetricPairing { } // Find common track cuts all candidates pass - threeTrackCommonFilter |= a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a3.isBarrelSelected_raw() & fCommonTrackCutMask; + threeTrackCommonFilter |= a1.isBarrelSelected_raw() & + a2.isBarrelSelected_raw() & + a3.isBarrelSelected_raw() & fCommonTrackCutMask; auto t1 = a1.template reducedtrack_as(); auto t2 = a2.template reducedtrack_as(); @@ -3906,17 +5634,20 @@ struct AnalysisAsymmetricPairing { } // Check charge if (tripletType == VarManager::kTripleCandidateToKPiPi) { - if (!((t1.sign() == -1 && t2.sign() == 1 && t3.sign() == 1) || (t1.sign() == 1 && t2.sign() == -1 && t3.sign() == -1))) { + if (!((t1.sign() == -1 && t2.sign() == 1 && t3.sign() == 1) || + (t1.sign() == 1 && t2.sign() == -1 && t3.sign() == -1))) { return; } } if (tripletType == VarManager::kTripleCandidateToPKPi) { - if (!((t1.sign() == 1 && t2.sign() == -1 && t3.sign() == 1) || (t1.sign() == -1 && t2.sign() == 1 && t3.sign() == -1))) { + if (!((t1.sign() == 1 && t2.sign() == -1 && t3.sign() == 1) || + (t1.sign() == -1 && t2.sign() == 1 && t3.sign() == -1))) { return; } } - // store the ambiguity of the three legs in the last 3 digits of the two-track filter + // store the ambiguity of the three legs in the last 3 digits of the + // two-track filter if (t1.barrelAmbiguityInBunch() > 1 || t1.barrelAmbiguityOutOfBunch() > 1) { threeTrackFilter |= (static_cast(1) << 29); } @@ -3927,34 +5658,57 @@ struct AnalysisAsymmetricPairing { threeTrackFilter |= (static_cast(1) << 31); } - VarManager::FillTriple(t1, t2, t3, dqtablereader_helpers::varValues(), tripletType); + VarManager::FillTriple(t1, t2, t3, dqtablereader_helpers::varValues(), + tripletType); if constexpr (TThreeProngFitter) { - VarManager::FillTripletVertexing(event, t1, t2, t3, tripletType); + VarManager::FillTripletVertexing( + event, t1, t2, t3, tripletType); } // Fill histograms for (int icut = 0; icut < fNLegCuts; icut++) { if (threeTrackFilter & (static_cast(1) << icut)) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); - if (fConfigAmbiguousHistograms.value && ((threeTrackFilter & (static_cast(1) << 29)) || (threeTrackFilter & (static_cast(1) << 30)) || (threeTrackFilter & (static_cast(1) << 31)))) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); + if (fConfigAmbiguousHistograms.value && + ((threeTrackFilter & (static_cast(1) << 29)) || + (threeTrackFilter & (static_cast(1) << 30)) || + (threeTrackFilter & (static_cast(1) << 31)))) { + fHistMan->FillHistClass( + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } } // end loop (common cuts) int iPairCut = 0; - for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { - if (!((*cut)->IsSelected(dqtablereader_helpers::varValues()))) { // apply pair cuts + for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); + cut++, iPairCut++) { + if (!((*cut)->IsSelected( + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); // Histograms with pair cuts and common track cuts - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { - fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + if (threeTrackCommonFilter & + fCommonTrackCutFilterMasks[iCommonCut]) { + fHistMan->FillHistClass(Form("TripletsBarrelSE_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } } } // end loop (pair cuts) @@ -3962,132 +5716,226 @@ struct AnalysisAsymmetricPairing { } // end loop (cuts) } - void processKaonPionSkimmed(MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processKaonPionSkimmed( + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runAsymmetricPairing( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } - void processKaonPionSkimmedMultExtra(MyEventsVtxCovZdcFitSelectedMultExtra const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + void processKaonPionSkimmedMultExtra( + MyEventsVtxCovZdcFitSelectedMultExtra const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runAsymmetricPairing(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks); } - void processKaonPionPionSkimmed(MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, VarManager::kTripleCandidateToKPiPi); + void processKaonPionPionSkimmed( + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runThreeProng( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToKPiPi); } - void processKaonPionPionSkimmedMultExtra(MyEventsVtxCovZdcFitSelectedMultExtra const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, VarManager::kTripleCandidateToKPiPi); + void processKaonPionPionSkimmedMultExtra( + MyEventsVtxCovZdcFitSelectedMultExtra const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runThreeProng(events, trackAssocsPerCollision, + barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToKPiPi); } - void processProtonKaonPionSkimmed(MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { - runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, VarManager::kTripleCandidateToPKPi); + void processProtonKaonPionSkimmed( + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + runThreeProng( + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToPKPi); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmed, "Run kaon pion pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, "Run kaon pion pion triplets, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmedMultExtra, "Run kaon pion pairing, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmedMultExtra, "Run kaon pion pion triplets, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processProtonKaonPionSkimmed, "Run proton kaon pion triplets, with skimmed tracks", false); - PROCESS_SWITCH(AnalysisAsymmetricPairing, processDummy, "Dummy function, enabled only if none of the others are enabled", true); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmed, + "Run kaon pion pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, + "Run kaon pion pion triplets, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionSkimmedMultExtra, + "Run kaon pion pairing, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmedMultExtra, + "Run kaon pion pion triplets, with skimmed tracks", false); + PROCESS_SWITCH(AnalysisAsymmetricPairing, processProtonKaonPionSkimmed, + "Run proton kaon pion triplets, with skimmed tracks", false); + PROCESS_SWITCH( + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; -// Combines dileptons with barrel or muon tracks for either resonance or correlation analyses -// Dileptons produced with all the selection cuts specified in the same-event pairing task are combined with the -// tracks passing the fConfigTrackCut cut. The dileptons cuts from the same-event pairing task are auto-detected +// Combines dileptons with barrel or muon tracks for either resonance or +// correlation analyses Dileptons produced with all the selection cuts specified +// in the same-event pairing task are combined with the +// tracks passing the fConfigTrackCut cut. The dileptons cuts from the +// same-event pairing task are auto-detected struct AnalysisDileptonTrack { o2::framework::Produces BmesonsTable; o2::framework::Produces DileptonTrackTable; o2::framework::OutputObj fOutputList{"output"}; - o2::framework::Configurable fConfigTrackCuts{"cfgTrackCuts", "kaonPID", "Comma separated list of cuts for the track to be correlated with the dileptons"}; - o2::framework::Configurable fConfigDileptonLowMass{"cfgDileptonLowMass", 2.8, "Low mass cut for the dileptons used in analysis"}; - o2::framework::Configurable fConfigDileptonHighMass{"cfgDileptonHighMass", 3.2, "High mass cut for the dileptons used in analysis"}; - o2::framework::Configurable fConfigDileptonLowpTCut{"cfgDileptonLowpTCut", 0.0, "Low pT cut for dileptons used in the triplet vertexing"}; - o2::framework::Configurable fConfigDileptonHighpTCut{"cfgDileptonHighpTCut", 1E5, "High pT cut for dileptons used in the triplet vertexing"}; - o2::framework::Configurable fConfigDileptonRapCutAbs{"cfgDileptonRapCutAbs", 1.0, "Rap cut for dileptons used in the triplet vertexing"}; - o2::framework::Configurable fConfigDileptonLxyCut{"cfgDileptonLxyCut", 0.0, "Lxy cut for dileptons used in the triplet vertexing"}; - o2::framework::Configurable fConfigDileptonTauxyCut{"cfgDileptonTauxyCut", -10000, "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; - o2::framework::Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - - o2::framework::Configurable fConfigHistogramSubgroups{"cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", "Comma separated list of dilepton-track histogram subgroups"}; - o2::framework::Configurable fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"}; - o2::framework::Configurable fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"}; - - o2::framework::Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - - o2::framework::Configurable fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; - o2::framework::Configurable fConfigNoLaterThan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; - o2::framework::Configurable fConfigGeoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; - o2::framework::Configurable fConfigUseRapcut{"cfgUseMCRapcut", false, "Use Rap cut for dileptons used in the triplet vertexing"}; - o2::framework::Configurable fConfigEnergycorrelator{"cfgEnergycorrelator", false, "Add some hist for energy correlator study"}; - o2::framework::Configurable fConfigApplyMassEC{"cfgApplyMassEC", false, "Apply fit mass for sideband for the energy correlator study"}; - o2::framework::Configurable> fConfigFitmassEC{"cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, "parameter from the fit fuction and fit range"}; - o2::framework::Configurable> fConfigTransRange{"cfgTransRange", std::vector{0.333333, 0.666667}, "Transverse region for the energy correlstor analysis"}; - - o2::framework::Configurable fConfigApplyEfficiency{"cfgApplyEfficiency", false, "If true, apply efficiency correction for the energy correlator study"}; - o2::framework::Configurable fConfigApplyEfficiencyME{"cfgApplyEfficiencyME", false, "If true, apply efficiency correction for the energy correlator study"}; - o2::framework::Configurable fConfigAccCCDBPath{"AccCCDBPath", "Users/y/yalin/pptest/test2", "Path of the efficiency corrections"}; - - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. + o2::framework::Configurable fConfigTrackCuts{ + "cfgTrackCuts", "kaonPID", + "Comma separated list of cuts for the track to be correlated with the " + "dileptons"}; + o2::framework::Configurable fConfigDileptonLowMass{ + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; + o2::framework::Configurable fConfigDileptonHighMass{ + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; + o2::framework::Configurable fConfigDileptonLowpTCut{ + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; + o2::framework::Configurable fConfigDileptonHighpTCut{ + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; + o2::framework::Configurable fConfigDileptonRapCutAbs{ + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; + o2::framework::Configurable fConfigDileptonLxyCut{ + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; + o2::framework::Configurable fConfigDileptonTauxyCut{ + "cfgDileptonTauxyCut", -10000, + "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; + o2::framework::Configurable fConfigUseKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; + + o2::framework::Configurable fConfigHistogramSubgroups{ + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; + o2::framework::Configurable fConfigAddJSONHistograms{ + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + o2::framework::Configurable fConfigMixingDepth{ + "cfgMixingDepth", 5, "Event mixing pool depth"}; + + o2::framework::Configurable fConfigGRPmagPath{ + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + + o2::framework::Configurable fConfigCcdbUrl{ + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + o2::framework::Configurable fConfigNoLaterThan{ + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; + o2::framework::Configurable fConfigGeoPath{ + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + o2::framework::Configurable fConfigUseRapcut{ + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing"}; + o2::framework::Configurable fConfigEnergycorrelator{ + "cfgEnergycorrelator", false, + "Add some hist for energy correlator study"}; + o2::framework::Configurable fConfigApplyMassEC{ + "cfgApplyMassEC", false, + "Apply fit mass for sideband for the energy correlator study"}; + o2::framework::Configurable> fConfigFitmassEC{ + "cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, + "parameter from the fit fuction and fit range"}; + o2::framework::Configurable> fConfigTransRange{ + "cfgTransRange", std::vector{0.333333, 0.666667}, + "Transverse region for the energy correlstor analysis"}; + + o2::framework::Configurable fConfigApplyEfficiency{ + "cfgApplyEfficiency", false, + "If true, apply efficiency correction for the energy correlator study"}; + o2::framework::Configurable fConfigApplyEfficiencyME{ + "cfgApplyEfficiencyME", false, + "If true, apply efficiency correction for the energy correlator study"}; + o2::framework::Configurable fConfigAccCCDBPath{ + "AccCCDBPath", "Users/y/yalin/pptest/test2", + "Path of the efficiency corrections"}; + + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. int fNCuts = 0; // number of dilepton leg cuts int fNLegCuts = 0; int fNPairCuts = 0; // number of pair cuts int fNCommonTrackCuts = 0; std::map fCommonTrackCutMap; - uint32_t fTrackCutBitMap = 0; // track cut bit mask to be used in the selection of tracks associated with dileptons - // vector for single-lepton and track cut names for easy access when calling FillHistogramList() + uint32_t fTrackCutBitMap = 0; // track cut bit mask to be used in the + // selection of tracks associated with dileptons + // vector for single-lepton and track cut names for easy access when calling + // FillHistogramList() std::vector fTrackCutNames; std::vector fLegCutNames; - // vector for pair cut names, used mainly for pairs built via the asymmetric pairing task + // vector for pair cut names, used mainly for pairs built via the asymmetric + // pairing task std::vector fPairCutNames; std::vector fCommonPairCutNames; o2::framework::Service fCCDB{}; - // TODO: The filter expressions seem to always use the default value of configurables, not the values from the actual configuration file - o2::framework::expressions::Filter eventFilter = o2::aod::dqanalysisflags::isEventSelected > static_cast(0); - o2::framework::expressions::Filter dileptonFilter = o2::aod::reducedpair::pt > fConfigDileptonLowpTCut&& o2::aod::reducedpair::pt fConfigDileptonLowMass&& o2::aod::reducedpair::mass fConfigDileptonLxyCut&& o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; - o2::framework::expressions::Filter filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > static_cast(0); - o2::framework::expressions::Filter filterMuon = o2::aod::dqanalysisflags::isMuonSelected > static_cast(0); - - constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map + // TODO: The filter expressions seem to always use the default value of + // configurables, not the values from the actual configuration file + o2::framework::expressions::Filter + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); + o2::framework::expressions::Filter dileptonFilter = + o2::aod::reducedpair::pt > + fConfigDileptonLowpTCut &&o2::aod::reducedpair::pt< + fConfigDileptonHighpTCut && + o2::aod::reducedpair::mass> fConfigDileptonLowMass + &&o2::aod::reducedpair::mass< + fConfigDileptonHighMass && o2::aod::reducedpair::sign == 0 && + o2::aod::reducedpair::lxy> fConfigDileptonLxyCut + &&o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; + o2::framework::expressions::Filter + filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > + static_cast(0); + o2::framework::expressions::Filter + filterMuon = o2::aod::dqanalysisflags::isMuonSelected > + static_cast(0); + + constexpr static uint32_t fgDileptonFillMap = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton = nullptr; - float* fValuesHadron = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesDilepton = nullptr; + float *fValuesHadron = nullptr; + HistogramManager *fHistMan = nullptr; o2::framework::NoBinningPolicy fHashBin; - TF1* fMassBkg = nullptr; + TF1 *fMassBkg = nullptr; - TH2F* hAcceptance_rec = nullptr; - TH2F* hAcceptance_gen = nullptr; - TH2F* hEfficiency_dilepton = nullptr; - TH2F* hEfficiency_hadron = nullptr; - TH1F* hMasswindow = nullptr; + TH2F *hAcceptance_rec = nullptr; + TH2F *hAcceptance_gen = nullptr; + TH2F *hEfficiency_dilepton = nullptr; + TH2F *hEfficiency_hadron = nullptr; + TH1F *hMasswindow = nullptr; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelME = context.mOptions.get("processBarrelMixedEvent"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); @@ -4097,7 +5945,8 @@ struct AnalysisDileptonTrack { // If the dummy process is enabled, skip the entire init if (context.mOptions.get("processDummy")) { if (isBarrel || isBarrelME || isBarrelAsymmetric || isMuon || isMuonME) { - LOG(fatal) << "If processDummy is enabled, no other process functions should be enabled! Or switch off the processDummy!"; + LOG(fatal) << "If processDummy is enabled, no other process functions " + "should be enabled! Or switch off the processDummy!"; } return; } @@ -4109,126 +5958,182 @@ struct AnalysisDileptonTrack { VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); - // For each track/muon selection used to produce dileptons, create a separate histogram directory using the - // name of the track/muon cut. + // For each track/muon selection used to produce dileptons, create a + // separate histogram directory using the name of the track/muon cut. if (isBarrel || isMuon || isBarrelAsymmetric) { - // Get the list of single track and muon cuts computed in the dedicated tasks upstream - // We need this to know the order in which they were computed, and also to make sure that in this task we do not ask - // for cuts which were not computed (in which case this will trigger a fatal) + // Get the list of single track and muon cuts computed in the dedicated + // tasks upstream We need this to know the order in which they were + // computed, and also to make sure that in this task we do not ask + // for cuts which were not computed (in which case this will trigger a + // fatal) std::string cfgTrackSelection_TrackCuts; if (isBarrel || isBarrelAsymmetric) { - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgTrackCuts", cfgTrackSelection_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgTrackCuts", + cfgTrackSelection_TrackCuts, false); } else { - o2::common::core::getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCuts", cfgTrackSelection_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-muon-selection", "cfgMuonCuts", + cfgTrackSelection_TrackCuts, false); } - TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { - cfgTrackSelection_objArrayTrackCuts = TString(cfgTrackSelection_TrackCuts).Tokenize(","); + cfgTrackSelection_objArrayTrackCuts = + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { - o2::common::core::getTaskOptionValue(context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", cfgTrackSelection_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + cfgTrackSelection_TrackCuts, false); } else { - o2::common::core::getTaskOptionValue(context, "analysis-muon-selection", "cfgMuonCutsJSON", cfgTrackSelection_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-muon-selection", "cfgMuonCutsJSON", + cfgTrackSelection_TrackCuts, false); } if (!cfgTrackSelection_TrackCuts.empty()) { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = o2::aod::dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON( + cfgTrackSelection_TrackCuts.data()); + for (auto const &t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } } if (cfgTrackSelection_objArrayTrackCuts->GetEntries() == 0) { - LOG(fatal) << " No track cuts found in the barrel or muon upstream tasks"; + LOG(fatal) + << " No track cuts found in the barrel or muon upstream tasks"; } // store all the computed track cut names in a vector - for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { - fTrackCutNames.push_back(cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + for (int icut = 0; + icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { + fTrackCutNames.push_back( + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } - // get the list of associated track cuts to be combined with the dileptons and + // get the list of associated track cuts to be combined with the dileptons + // and // check that these were computed upstream and create a bit mask - TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { - cfgDileptonTrack_objArrayTrackCuts = TString(fConfigTrackCuts.value).Tokenize(","); + cfgDileptonTrack_objArrayTrackCuts = + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } - for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { - if (!cfgTrackSelection_objArrayTrackCuts->FindObject(cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { - LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the single barrel / muon selection tasks"; + for (int icut = 0; + icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { + if (!cfgTrackSelection_objArrayTrackCuts->FindObject( + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + LOG(fatal) << "Specified track cut (" + << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() + << ") not found in the list of computed cuts by the " + "single barrel / muon selection tasks"; } } - for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { - if (cfgDileptonTrack_objArrayTrackCuts->FindObject(cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + for (int icut = 0; + icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { + if (cfgDileptonTrack_objArrayTrackCuts->FindObject( + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } fNCuts = fTrackCutNames.size(); // get the cuts employed for same-event pairing - // NOTE: The track/muon cuts in analysis-same-event-pairing are used to select electrons/muons to build dielectrons/dimuons - // NOTE: The cfgPairCuts in analysis-same-event-pairing are used to apply an additional selection on top of the already produced dileptons - // but this is only used for histograms, not for the produced dilepton tables + // NOTE: The track/muon cuts in analysis-same-event-pairing are used to + // select electrons/muons to build dielectrons/dimuons NOTE: The + // cfgPairCuts in analysis-same-event-pairing are used to apply an + // additional selection on top of the already produced dileptons + // but this is only used for histograms, not for the produced + // dilepton tables std::string cfgPairing_TrackCuts; std::string cfgPairing_PairCuts; std::string cfgPairing_PairCutsJSON; std::string cfgPairing_CommonTrackCuts; if (isBarrel) { - o2::common::core::getTaskOptionValue(context, "analysis-same-event-pairing", "cfgTrackCuts", cfgPairing_TrackCuts, false); - o2::common::core::getTaskOptionValue(context, "analysis-same-event-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-same-event-pairing", "cfgTrackCuts", + cfgPairing_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isMuon) { - o2::common::core::getTaskOptionValue(context, "analysis-same-event-pairing", "cfgMuonCuts", cfgPairing_TrackCuts, false); - o2::common::core::getTaskOptionValue(context, "analysis-same-event-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-same-event-pairing", "cfgMuonCuts", + cfgPairing_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isBarrelAsymmetric) { - o2::common::core::getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgLegCuts", cfgPairing_TrackCuts, false); - o2::common::core::getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgPairCuts", cfgPairing_PairCuts, false); - o2::common::core::getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", cfgPairing_CommonTrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-asymmetric-pairing", "cfgLegCuts", + cfgPairing_TrackCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-asymmetric-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); + o2::common::core::getTaskOptionValue( + context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", + cfgPairing_CommonTrackCuts, false); } if (cfgPairing_TrackCuts.empty()) { - LOG(fatal) << "There are no dilepton cuts specified in the upstream in the same-event-pairing or asymmetric-pairing"; + LOG(fatal) << "There are no dilepton cuts specified in the upstream in " + "the same-event-pairing or asymmetric-pairing"; } // If asymmetric pair is used, it may have common track cuts TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { - for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { - if (std::strcmp(cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), objArrayCommon->At(icut)->GetName()) == 0) { + for (int iicut = 0; + iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); + iicut++) { + if (std::strcmp( + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; - fCommonPairCutNames.push_back(objArrayCommon->At(icut)->GetName()); + fCommonPairCutNames.push_back( + objArrayCommon->At(icut)->GetName()); } } } } // end if (common cuts) // Get also the pair cuts specified via the JSON parameters if (isBarrelAsymmetric) { - o2::common::core::getTaskOptionValue(context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", cfgPairing_PairCutsJSON, false); + o2::common::core::getTaskOptionValue( + context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", + cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } - std::unique_ptr objArrayPairCuts(TString(cfgPairing_PairCuts).Tokenize(",")); + std::unique_ptr objArrayPairCuts( + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); } // array of single lepton cuts specified in the same-analysis-pairing task - std::unique_ptr cfgPairing_objArrayTrackCuts(TString(cfgPairing_TrackCuts).Tokenize(",")); - // If asymmetric pairs are used, the number of cuts should come from the asymmetric-pairing task + std::unique_ptr cfgPairing_objArrayTrackCuts( + TString(cfgPairing_TrackCuts).Tokenize(",")); + // If asymmetric pairs are used, the number of cuts should come from the + // asymmetric-pairing task if (isBarrelAsymmetric) { fNLegCuts = cfgPairing_objArrayTrackCuts->GetEntries(); } else { @@ -4239,65 +6144,120 @@ struct AnalysisDileptonTrack { TString pairLegCutName; - // here we check that this cut is one of those used for building the dileptons + // here we check that this cut is one of those used for building the + // dileptons if (!isBarrelAsymmetric) { - if (!cfgPairing_objArrayTrackCuts->FindObject(fTrackCutNames[icut].Data())) { + if (!cfgPairing_objArrayTrackCuts->FindObject( + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead - pairLegCutName = dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut))->GetString(); + pairLegCutName = + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); // define dilepton histograms - DefineHistograms(fHistMan, Form("DileptonsSelected_%s", pairLegCutName.Data()), "barrel,vertexing"); - // loop over track cuts and create dilepton - track histogram directories + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s", pairLegCutName.Data()), + "barrel,vertexing"); + // loop over track cuts and create dilepton - track histogram + // directories for (int iCutTrack = 0; iCutTrack < fNCuts; iCutTrack++) { - // here we check that this track cut is one of those required to associate with the dileptons - if ((fTrackCutBitMap & (static_cast(1) << iCutTrack)) == 0) { + // here we check that this track cut is one of those required to + // associate with the dileptons + if ((fTrackCutBitMap & (static_cast(1) << iCutTrack)) == + 0) { continue; } - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); if (!cfgPairing_strCommonTrackCuts.IsNull()) { - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); } } if (fNPairCuts != 0) { for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s", pairLegCutName.Data(), fPairCutNames[iPairCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s", pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s", + pairLegCutName.Data(), + fPairCutNames[iPairCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s", + pairLegCutName.Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); if (!cfgPairing_strCommonTrackCuts.IsNull()) { - std::unique_ptr objArrayCommon(cfgPairing_strCommonTrackCuts.Tokenize(",")); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { - DefineHistograms(fHistMan, Form("DileptonsSelected_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), "barrel,vertexing"); - DefineHistograms(fHistMan, Form("DileptonTrack_%s_%s_%s_%s", pairLegCutName.Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); + std::unique_ptr objArrayCommon( + cfgPairing_strCommonTrackCuts.Tokenize(",")); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + ++iCommonCut) { + DefineHistograms(fHistMan, + Form("DileptonsSelected_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + "barrel,vertexing"); + DefineHistograms(fHistMan, + Form("DileptonTrack_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data()), + fConfigHistogramSubgroups.value.data()); } } } } if (isBarrelME || isMuonME) { - DefineHistograms(fHistMan, Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), "dilepton-hadron-array-correlation"); // define ME histograms + DefineHistograms( + fHistMan, + Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + "dilepton-hadron-array-correlation"); // define ME histograms if (fConfigEnergycorrelator) { - DefineHistograms(fHistMan, Form("DileptonTrackECME_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), "energy-correlator"); // define ME histograms + DefineHistograms(fHistMan, + Form("DileptonTrackECME_%s_%s", + pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + "energy-correlator"); // define ME histograms } } } // end loop over track cuts to be combined with dileptons / di-tracks } // end loop over pair leg track cuts } - o2::aod::dqhistograms::AddHistogramsFromJSON(fHistMan, fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + o2::aod::dqhistograms::AddHistogramsFromJSON( + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); @@ -4313,46 +6273,55 @@ struct AnalysisDileptonTrack { // the background mass distribution in signal region std::vector fMassBkgpar = fConfigFitmassEC; - fMassBkg = new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); + fMassBkg = + new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); fMassBkg->SetParameters(fMassBkgpar[0]); fMassBkg->SetNpx(1000); } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + void initParamsFromCCDB(uint64_t timestamp) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (fConfigUseKFVertexing.value) { VarManager::SetupThreeProngKFParticle(magField); } else { - VarManager::SetupThreeProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables + VarManager::SetupThreeProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } - void initAccFromCCDB(uint64_t timestamp) - { - auto listAccs = fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); + void initAccFromCCDB(uint64_t timestamp) { + auto listAccs = + fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); if (!listAccs) { LOG(fatal) << "Problem getting TList object with efficiencies!"; } - hEfficiency_dilepton = dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); - hEfficiency_hadron = dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); - hAcceptance_rec = dynamic_cast(listAccs->FindObject("hAcceptance_rec")); - hAcceptance_gen = dynamic_cast(listAccs->FindObject("hAcceptance_gen")); - hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); - if (!hAcceptance_rec || !hAcceptance_gen || !hEfficiency_dilepton || !hEfficiency_hadron || !hMasswindow) { - LOG(fatal) << "Problem getting histograms from the TList object with efficiencies!"; + hEfficiency_dilepton = + dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); + hEfficiency_hadron = + dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); + hAcceptance_rec = + dynamic_cast(listAccs->FindObject("hAcceptance_rec")); + hAcceptance_gen = + dynamic_cast(listAccs->FindObject("hAcceptance_gen")); + hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); + if (!hAcceptance_rec || !hAcceptance_gen || !hEfficiency_dilepton || + !hEfficiency_hadron || !hMasswindow) { + LOG(fatal) << "Problem getting histograms from the TList object with " + "efficiencies!"; } } - float GetSafeInterpolationWeight(TH2* hEff, float x, float y) - { + float GetSafeInterpolationWeight(TH2 *hEff, float x, float y) { if (!hEff) { return 1.0; } @@ -4369,15 +6338,17 @@ struct AnalysisDileptonTrack { } // Template function to run pair - hadron combinations - template - void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, TTracks const& tracks, TDileptons const& dileptons) - { + template + void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, TDileptons const &dileptons) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -4401,21 +6372,40 @@ struct AnalysisDileptonTrack { } // regular dileptons - fHistMan->FillHistClass(Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), fValuesDilepton); + fHistMan->FillHistClass( + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s - if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons don't have the PairFilterMap column - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { + if constexpr (TCandidateType == + VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons + // don't have the + // PairFilterMap column + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data()), fValuesDilepton); + fHistMan->FillHistClass( + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[icut].Data()), fValuesDilepton); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[icut].Data()), fValuesDilepton); + fHistMan->FillHistClass(Form("DileptonsSelected_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -4424,11 +6414,12 @@ struct AnalysisDileptonTrack { } // end loop over single lepton selections // loop over hadrons - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { uint32_t trackSelection = 0; if constexpr (TCandidateType == VarManager::kBtoJpsiEEK) { - // check the cuts fulfilled by this candidate track; if none just continue + // check the cuts fulfilled by this candidate track; if none just + // continue trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); if (trackSelection == 0) { continue; @@ -4437,12 +6428,15 @@ struct AnalysisDileptonTrack { // get the track from this association auto track = assoc.template reducedtrack_as(); // check that this track is not included in the current dilepton - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } // compute needed quantities VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); // for the energy correlator analysis float Effweight_rec = 1.0f; @@ -4451,31 +6445,54 @@ struct AnalysisDileptonTrack { float dilepton_phi = dilepton.phi(); float hadron_eta = track.eta(); float hadron_phi = track.phi(); - float deltaphi = RecoDecay::constrainAngle(dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); - Effweight_rec = GetSafeInterpolationWeight(hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); - float Effdilepton = GetSafeInterpolationWeight(hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); - float Effhadron = GetSafeInterpolationWeight(hEfficiency_hadron, track.eta(), track.pt()); + float deltaphi = RecoDecay::constrainAngle( + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + Effweight_rec = GetSafeInterpolationWeight( + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + float Effdilepton = GetSafeInterpolationWeight( + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + float Effhadron = GetSafeInterpolationWeight( + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); - Effweight_rec = Effweight_rec * Effdilepton * Effhadron * Masswindow; + Effweight_rec = + Effweight_rec * Effdilepton * Effhadron * Masswindow; } std::vector fTransRange = fConfigTransRange; - VarManager::FillEnergyCorrelatorTriple(event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), 1. / Effweight_rec); + VarManager::FillEnergyCorrelatorTriple( + event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); // table to be written out for ML analysis - BmesonsTable(event.runNumber(), event.globalIndex(), event.timestamp(), fValuesHadron[VarManager::kPairMass], dilepton.mass(), fValuesHadron[VarManager::kDeltaMass], fValuesHadron[VarManager::kPairPt], fValuesHadron[VarManager::kPairEta], fValuesHadron[VarManager::kPairPhi], fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], fValuesHadron[VarManager::kVertexingLxyz], fValuesHadron[VarManager::kVertexingLz], - fValuesHadron[VarManager::kVertexingTauxy], fValuesHadron[VarManager::kVertexingTauz], fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], - track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), lepton2.eta(), - track.tpcNSigmaKa(), track.tpcNSigmaPi(), track.tpcNSigmaPr(), track.tofNSigmaKa(), - lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), - track.itsClusterMap(), lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), lepton2.tpcNClsFound(), - track.tpcChi2NCl(), lepton1.tpcChi2NCl(), lepton2.tpcChi2NCl(), - dilepton.filterMap_raw(), trackSelection); + BmesonsTable( + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], track.globalIndex(), + lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); @@ -4483,15 +6500,22 @@ struct AnalysisDileptonTrack { continue; } auto track = assoc.template reducedtrack_as(); - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } - // Check that the charge combination makes sense for D*+ -> D0 pi+ or D*- -> D0bar pi- - if (!((track.sign() == 1 && lepton1.sign() == -1 && lepton2.sign() == 1) || (track.sign() == -1 && lepton1.sign() == 1 && lepton2.sign() == -1))) { + // Check that the charge combination makes sense for D*+ -> D0 pi+ or + // D*- -> D0bar pi- + if (!((track.sign() == 1 && lepton1.sign() == -1 && + lepton2.sign() == 1) || + (track.sign() == -1 && lepton1.sign() == 1 && + lepton2.sign() == -1))) { continue; } VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); } if constexpr (TCandidateType == VarManager::kBcToThreeMuons) { trackSelection = (assoc.isMuonSelected_raw() & fTrackCutBitMap); @@ -4499,16 +6523,22 @@ struct AnalysisDileptonTrack { continue; } auto track = assoc.template reducedmuon_as(); - if (track.globalIndex() == dilepton.index0Id() || track.globalIndex() == dilepton.index1Id()) { + if (track.globalIndex() == dilepton.index0Id() || + track.globalIndex() == dilepton.index1Id()) { continue; } VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); - VarManager::FillDileptonTrackVertexing(event, lepton1, lepton2, track, fValuesHadron); + VarManager::FillDileptonTrackVertexing( + event, lepton1, lepton2, track, fValuesHadron); // Fill table for correlation analysis - DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], fValuesHadron[VarManager::kDeltaPhi], - dilepton.mass(), dilepton.pt(), dilepton.eta(), track.pt(), track.eta(), track.phi(), - lepton1.pt(), lepton1.eta(), lepton1.phi(), lepton2.pt(), lepton2.eta(), lepton2.phi()); + DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], + fValuesHadron[VarManager::kDeltaPhi], + dilepton.mass(), dilepton.pt(), dilepton.eta(), + track.pt(), track.eta(), track.phi(), lepton1.pt(), + lepton1.eta(), lepton1.phi(), lepton2.pt(), + lepton2.eta(), lepton2.phi()); } // Fill histograms for the triplets @@ -4519,26 +6549,52 @@ struct AnalysisDileptonTrack { continue; } - // loop over specified track cuts (the tracks to be combined with the dileptons) + // loop over specified track cuts (the tracks to be combined with the + // dileptons) for (int iTrackCut = 0; iTrackCut < fNCuts; iTrackCut++) { if (!(trackSelection & (static_cast(1) << iTrackCut))) { continue; } - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s", fLegCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); - - if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { // Dielectrons and Dimuons don't have the PairFilterMap column - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); + fHistMan->FillHistClass(Form("DileptonTrack_%s_%s", + fLegCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); + + if constexpr (TCandidateType == + VarManager::kDstarToD0KPiPi) { // Dielectrons and + // Dimuons don't have + // the PairFilterMap + // column + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); - for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { - if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { - fHistMan->FillHistClass(Form("DileptonTrack_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonPairCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fTrackCutNames[iTrackCut].Data()), fValuesHadron); + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); + for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; + iCommonCut++) { + if (dilepton.commonFilterMap_bit( + fCommonTrackCutMap[iCommonCut])) { + fHistMan->FillHistClass( + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } } @@ -4550,14 +6606,19 @@ struct AnalysisDileptonTrack { } } - o2::framework::Preslice trackAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; - o2::framework::Preslice dielectronsPerCollision = o2::aod::reducedpair::reducedeventId; - o2::framework::Preslice ditracksPerCollision = o2::aod::reducedpair::reducedeventId; - - void processBarrelSkimmed(o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, o2::soa::Filtered const& dileptons) - { + o2::framework::Preslice trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice dielectronsPerCollision = + o2::aod::reducedpair::reducedeventId; + o2::framework::Preslice ditracksPerCollision = + o2::aod::reducedpair::reducedeventId; + + void processBarrelSkimmed( + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -4569,17 +6630,23 @@ struct AnalysisDileptonTrack { } fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { - auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); - auto groupedDielectrons = dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons); + for (auto const &event : events) { + auto groupedBarrelAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDielectrons = + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + runDileptonHadron(event, groupedBarrelAssocs, + tracks, groupedDielectrons); } } - void processDstarToD0Pi(o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, o2::soa::Filtered const& ditracks) - { + void processDstarToD0Pi( + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &ditracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -4588,20 +6655,28 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { - auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); - auto groupedDitracks = ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDitracks); + for (auto const &event : events) { + auto groupedBarrelAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDitracks = + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + runDileptonHadron( + event, groupedBarrelAssocs, tracks, groupedDitracks); } } - o2::framework::Preslice muonAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; - o2::framework::Preslice dimuonsPerCollision = o2::aod::reducedpair::reducedeventId; - - void processMuonSkimmed(o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyMuonTracksWithCov const& tracks, o2::soa::Filtered const& dileptons) - { + o2::framework::Preslice muonAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice dimuonsPerCollision = + o2::aod::reducedpair::reducedeventId; + + void processMuonSkimmed( + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyMuonTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -4610,17 +6685,24 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { - auto groupedMuonAssocs = assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); - auto groupedDimuons = dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); - runDileptonHadron(event, groupedMuonAssocs, tracks, groupedDimuons); + for (auto const &event : events) { + auto groupedMuonAssocs = + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + auto groupedDimuons = + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + runDileptonHadron(event, groupedMuonAssocs, tracks, + groupedDimuons); } } - void processBarrelMixedEvent(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, o2::soa::Filtered const& dileptons) - { + void processBarrelMixedEvent( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } @@ -4636,24 +6718,29 @@ struct AnalysisDileptonTrack { events.bindExternalIndices(&assocs); // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations(fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { // fill event quantities VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event1, + dqtablereader_helpers::varValues()); // get the dilepton slice for event1 - auto evDileptons = dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); + auto evDileptons = + dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); // get the track associations slice for event2 - auto evAssocs = assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); + auto evAssocs = + assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); // loop over associations - for (auto const& assoc : evAssocs) { + for (auto const &assoc : evAssocs) { // check that this track fulfills at least one of the specified cuts - uint32_t trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); + uint32_t trackSelection = + (assoc.isBarrelSelected_raw() & fTrackCutBitMap); if (trackSelection == 0) { continue; } @@ -4662,7 +6749,7 @@ struct AnalysisDileptonTrack { auto track = assoc.template reducedtrack_as(); // loop over dileptons - for (auto const& dilepton : evDileptons) { + for (auto const &dilepton : evDileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -4677,7 +6764,8 @@ struct AnalysisDileptonTrack { } // compute dilepton - track quantities - VarManager::FillDileptonHadron(dilepton, track, dqtablereader_helpers::varValues()); + VarManager::FillDileptonHadron(dilepton, track, + dqtablereader_helpers::varValues()); // for the energy correlator analysis float Effweight_rec = 1.0f; @@ -4686,30 +6774,57 @@ struct AnalysisDileptonTrack { float dilepton_phi = dilepton.phi(); float hadron_eta = track.eta(); float hadron_phi = track.phi(); - float deltaphi = RecoDecay::constrainAngle(dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); - Effweight_rec = GetSafeInterpolationWeight(hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); - float Effdilepton = GetSafeInterpolationWeight(hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); - float Effhadron = GetSafeInterpolationWeight(hEfficiency_hadron, track.eta(), track.pt()); + float deltaphi = RecoDecay::constrainAngle( + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + Effweight_rec = GetSafeInterpolationWeight( + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + float Effdilepton = GetSafeInterpolationWeight( + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + float Effhadron = GetSafeInterpolationWeight( + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); if (fConfigApplyEfficiencyME) { - Effweight_rec = Effdilepton * Effhadron * Masswindow; // for the moment, apply the efficiency correction also for the mixed event pairs, but this can be changed in case we want to apply it only for the same event pairs + Effweight_rec = + Effdilepton * Effhadron * + Masswindow; // for the moment, apply the efficiency correction + // also for the mixed event pairs, but this can be + // changed in case we want to apply it only for + // the same event pairs } else { - Effweight_rec = Effweight_rec * Effdilepton * Effhadron * Masswindow; // apply acceptance and efficiency correction for the real pairs + Effweight_rec = Effweight_rec * Effdilepton * Effhadron * + Masswindow; // apply acceptance and efficiency + // correction for the real pairs } } std::vector fTransRange = fConfigTransRange; - VarManager::FillEnergyCorrelatorTriple(event1, lepton1, lepton2, track, dqtablereader_helpers::varValues(), fTransRange[0], fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), 1. / Effweight_rec); - - // loop over dilepton leg cuts and track cuts and fill histograms separately for each combination + VarManager::FillEnergyCorrelatorTriple( + event1, lepton1, lepton2, track, + dqtablereader_helpers::varValues(), fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); + + // loop over dilepton leg cuts and track cuts and fill histograms + // separately for each combination for (int icut = 0; icut < fNCuts; icut++) { if (!dilepton.filterMap_bit(icut)) { continue; } - for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); iTrackCut++) { - if ((trackSelection & (static_cast(1) << iTrackCut)) != 0) { - fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); + for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); + iTrackCut++) { + if ((trackSelection & (static_cast(1) << iTrackCut)) != + 0) { + fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", + fTrackCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + dqtablereader_helpers::varValues()); if (fConfigEnergycorrelator) { - fHistMan->FillHistClass(Form("DileptonTrackECME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); + fHistMan->FillHistClass( + Form("DileptonTrackECME_%s_%s", + fTrackCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -4719,27 +6834,34 @@ struct AnalysisDileptonTrack { } // end event loop } - void processMuonMixedEvent(o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const& assocs, - MyMuonTracksWithCov const&, o2::soa::Filtered const& dileptons) - { + void processMuonMixedEvent( + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const &assocs, + MyMuonTracksWithCov const &, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } events.bindExternalIndices(&dileptons); events.bindExternalIndices(&assocs); - for (auto const& [event1, event2] : selfCombinations(fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); - VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); + VarManager::FillEvent(event1, + dqtablereader_helpers::varValues()); - auto evDileptons = dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); + auto evDileptons = + dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); - auto evAssocs = assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); + auto evAssocs = + assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); - for (auto const& assoc : evAssocs) { + for (auto const &assoc : evAssocs) { uint32_t muonSelection = assoc.isMuonSelected_raw() & fTrackCutBitMap; if (muonSelection == 0) { @@ -4747,15 +6869,21 @@ struct AnalysisDileptonTrack { } auto track = assoc.template reducedmuon_as(); - for (auto const& dilepton : evDileptons) { - VarManager::FillDileptonHadron(dilepton, track, dqtablereader_helpers::varValues()); + for (auto const &dilepton : evDileptons) { + VarManager::FillDileptonHadron(dilepton, track, + dqtablereader_helpers::varValues()); for (int icut = 0; icut < fNCuts; icut++) { if (!dilepton.filterMap_bit(icut)) { continue; } - for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); iTrackCut++) { - if ((muonSelection & (static_cast(1) << iTrackCut)) != 0) { - fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", fTrackCutNames[icut].Data(), fTrackCutNames[iTrackCut].Data()), dqtablereader_helpers::varValues()); + for (uint32_t iTrackCut = 0; iTrackCut < fTrackCutNames.size(); + iTrackCut++) { + if ((muonSelection & (static_cast(1) << iTrackCut)) != + 0) { + fHistMan->FillHistClass(Form("DileptonTrackME_%s_%s", + fTrackCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -4764,38 +6892,66 @@ struct AnalysisDileptonTrack { } // end event loop } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelSkimmed, "Run barrel dilepton-track pairing, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processDstarToD0Pi, "Run barrel pairing of D0 daughters with pion candidate, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, "Run muon dilepton-track pairing, using skimmed data", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelMixedEvent, "Run barrel dilepton-hadron mixed event pairing", false); - PROCESS_SWITCH(AnalysisDileptonTrack, processMuonMixedEvent, "Run muon dilepton-hadron mixed event pairing", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelSkimmed, + "Run barrel dilepton-track pairing, using skimmed data", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processDstarToD0Pi, + "Run barrel pairing of D0 daughters with pion candidate, " + "using skimmed data", + false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, + "Run muon dilepton-track pairing, using skimmed data", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processBarrelMixedEvent, + "Run barrel dilepton-hadron mixed event pairing", false); + PROCESS_SWITCH(AnalysisDileptonTrack, processMuonMixedEvent, + "Run muon dilepton-hadron mixed event pairing", false); PROCESS_SWITCH(AnalysisDileptonTrack, processDummy, "Dummy function", true); }; struct AnalysisDileptonTrackTrack { o2::framework::OutputObj fOutputList{"output"}; - o2::framework::Configurable fConfigTrackCut1{"cfgTrackCut1", "pionPIDCut1", "track1 cut"}; // used for select the tracks from SelectedTracks - o2::framework::Configurable fConfigTrackCut2{"cfgTrackCut2", "pionPIDCut2", "track2 cut"}; // used for select the tracks from SelectedTracks - o2::framework::Configurable fConfigDileptonCut{"cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; - o2::framework::Configurable fConfigQuadrupletCuts{"cfgQuadrupletCuts", "pairX3872Cut1", "Comma separated list of Dilepton-Track-Track cut"}; - o2::framework::Configurable fConfigAddDileptonHistogram{"cfgAddDileptonHistogram", "barrel", "Comma separated list of histograms"}; - o2::framework::Configurable fConfigAddQuadrupletHistogram{"cfgAddQuadrupletHistogram", "xtojpsipipi", "Comma separated list of histograms"}; - - o2::framework::Configurable fConfigSetupFourProngFitter{"cfgSetupFourProngFitter", false, "Use DCA for secondary vertex reconstruction (DCAFitter is used by default)"}; - o2::framework::Configurable fConfigUseKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"}; - o2::framework::Configurable fConfigGRPmagPath{"cfgGrpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; - - o2::framework::Produces DileptonTrackTrackTable; - - int fCurrentRun = -1; // needed to detect if the run changed and trigger update of calibrations etc. - // uint32_t fTrackCutBitMap; // track cut bit mask to be used in the selection of tracks associated with dileptons - // cut name setting + o2::framework::Configurable fConfigTrackCut1{ + "cfgTrackCut1", "pionPIDCut1", + "track1 cut"}; // used for select the tracks from SelectedTracks + o2::framework::Configurable fConfigTrackCut2{ + "cfgTrackCut2", "pionPIDCut2", + "track2 cut"}; // used for select the tracks from SelectedTracks + o2::framework::Configurable fConfigDileptonCut{ + "cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; + o2::framework::Configurable fConfigQuadrupletCuts{ + "cfgQuadrupletCuts", "pairX3872Cut1", + "Comma separated list of Dilepton-Track-Track cut"}; + o2::framework::Configurable fConfigAddDileptonHistogram{ + "cfgAddDileptonHistogram", "barrel", + "Comma separated list of histograms"}; + o2::framework::Configurable fConfigAddQuadrupletHistogram{ + "cfgAddQuadrupletHistogram", "xtojpsipipi", + "Comma separated list of histograms"}; + + o2::framework::Configurable fConfigSetupFourProngFitter{ + "cfgSetupFourProngFitter", false, + "Use DCA for secondary vertex reconstruction (DCAFitter is used by " + "default)"}; + o2::framework::Configurable fConfigUseKFVertexing{ + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; + o2::framework::Configurable fConfigGRPmagPath{ + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; + + o2::framework::Produces + DileptonTrackTrackTable; + + int fCurrentRun = -1; // needed to detect if the run changed and trigger + // update of calibrations etc. + // uint32_t fTrackCutBitMap; // track cut bit mask to be used in the selection + // of tracks associated with dileptons cut name setting TString fTrackCutName1; TString fTrackCutName2; bool fIsSameTrackCut = false; @@ -4805,18 +6961,24 @@ struct AnalysisDileptonTrackTrack { o2::framework::Service fCCDB{}; - o2::framework::expressions::Filter eventFilter = o2::aod::dqanalysisflags::isEventSelected > static_cast(0); - o2::framework::expressions::Filter dileptonFilter = o2::aod::reducedpair::sign == 0; - o2::framework::expressions::Filter filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > static_cast(0); + o2::framework::expressions::Filter + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); + o2::framework::expressions::Filter dileptonFilter = + o2::aod::reducedpair::sign == 0; + o2::framework::expressions::Filter + filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > + static_cast(0); - constexpr static uint32_t fgDileptonFillMap = VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::Pair; // fill map + constexpr static uint32_t fgDileptonFillMap = + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use some values array to avoid mixing up the quantities - float* fValuesQuadruplet = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesQuadruplet = nullptr; + HistogramManager *fHistMan = nullptr; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { // bool isBarrel = context.mOptions.get("processJpsiPiPi"); if (context.mOptions.get("processDummy")) { @@ -4829,7 +6991,8 @@ struct AnalysisDileptonTrackTrack { VarManager::SetDefaultVarNames(); fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); - fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); + fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), + dqtablereader_helpers::varUnits()); // define cuts fTrackCutName1 = fConfigTrackCut1.value; @@ -4838,27 +7001,47 @@ struct AnalysisDileptonTrackTrack { fIsSameTrackCut = true; } TString configDileptonCutNamesStr = fConfigDileptonCut.value; - fDileptonCut = *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); + fDileptonCut = + *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); TString configQuadruletCutNamesStr = fConfigQuadrupletCuts.value; - std::unique_ptr objArray(configQuadruletCutNamesStr.Tokenize(",")); + std::unique_ptr objArray( + configQuadruletCutNamesStr.Tokenize(",")); for (Int_t icut = 0; icut < objArray->GetEntries(); ++icut) { TString cutName = objArray->At(icut)->GetName(); fQuadrupletCutNames.push_back(cutName); - fQuadrupletCuts.push_back(*o2::aod::dqcuts::GetCompositeCut(cutName.Data())); + fQuadrupletCuts.push_back( + *o2::aod::dqcuts::GetCompositeCut(cutName.Data())); } if (!context.mOptions.get("processDummy")) { - DefineHistograms(fHistMan, Form("Pairs_%s", configDileptonCutNamesStr.Data()), fConfigAddDileptonHistogram.value.data()); + DefineHistograms(fHistMan, + Form("Pairs_%s", configDileptonCutNamesStr.Data()), + fConfigAddDileptonHistogram.value.data()); if (!configQuadruletCutNamesStr.IsNull()) { for (std::size_t icut = 0; icut < fQuadrupletCutNames.size(); ++icut) { if (fIsSameTrackCut) { - DefineHistograms(fHistMan, Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } else { - DefineHistograms(fHistMan, Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); - DefineHistograms(fHistMan, Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } - DefineHistograms(fHistMan, Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); - DefineHistograms(fHistMan, Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } } } @@ -4868,34 +7051,42 @@ struct AnalysisDileptonTrackTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { - auto grpmag = fCCDB->getForTimeStamp(fConfigGRPmagPath.value, timestamp); + void initParamsFromCCDB(uint64_t timestamp) { + auto grpmag = fCCDB->getForTimeStamp( + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); } else { - LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", timestamp); + LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", + timestamp); } if (fConfigUseKFVertexing.value) { VarManager::SetupTwoProngKFParticle(magField); VarManager::SetupFourProngKFParticle(magField); } else if (fConfigSetupFourProngFitter.value) { - VarManager::SetupTwoProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables - VarManager::SetupFourProngDCAFitter(magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, false); // TODO: get these parameters from Configurables + VarManager::SetupTwoProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables + VarManager::SetupFourProngDCAFitter( + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } // Template function to run pair - hadron combinations - template - void runDileptonTrackTrack(TEvent const& event, TTrackAssocs const& assocs, TTracks const& tracks, TDileptons const& dileptons) - { + template + void runDileptonTrackTrack(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, + TDileptons const &dileptons) { VarManager::ResetValues(0, VarManager::kNVars, fValuesQuadruplet); VarManager::FillEvent(event, fValuesQuadruplet); // int indexOffset = -999; // std::vector trackGlobalIndexes; - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index int indexLepton1 = dilepton.index0Id(); @@ -4907,24 +7098,31 @@ struct AnalysisDileptonTrackTrack { continue; } VarManager::FillTrack(dilepton, fValuesQuadruplet); - // LOGP(info, "is dilepton selected: {}", fDileptonCut.IsSelected(fValuesQuadruplet)); + // LOGP(info, "is dilepton selected: {}", + // fDileptonCut.IsSelected(fValuesQuadruplet)); // apply the dilepton cut if (!fDileptonCut.IsSelected(fValuesQuadruplet)) { continue; } - fHistMan->FillHistClass(Form("Pairs_%s", fDileptonCut.GetName()), fValuesQuadruplet); + fHistMan->FillHistClass(Form("Pairs_%s", fDileptonCut.GetName()), + fValuesQuadruplet); // loop over hadrons pairs - for (auto const& [a1, a2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[a1, a2] : o2::soa::combinations(assocs, assocs)) { uint32_t trackSelection = 0; if (fIsSameTrackCut) { - trackSelection = ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); + trackSelection = + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || + (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); } else { - trackSelection = ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); + trackSelection = + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && + (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); } - // LOGP(info, "trackSelection: {}, a1: {}, a2: {}", trackSelection, a1.isBarrelSelected_raw(), a2.isBarrelSelected_raw()); + // LOGP(info, "trackSelection: {}, a1: {}, a2: {}", trackSelection, + // a1.isBarrelSelected_raw(), a2.isBarrelSelected_raw()); if (trackSelection == 0) { continue; } @@ -4933,38 +7131,55 @@ struct AnalysisDileptonTrackTrack { auto track1 = a1.template reducedtrack_as(); auto track2 = a2.template reducedtrack_as(); // avoid self combinations - if (track1.globalIndex() == indexLepton1 || track1.globalIndex() == indexLepton2 || track2.globalIndex() == indexLepton1 || track2.globalIndex() == indexLepton2) { + if (track1.globalIndex() == indexLepton1 || + track1.globalIndex() == indexLepton2 || + track2.globalIndex() == indexLepton1 || + track2.globalIndex() == indexLepton2) { continue; } // fill variables - VarManager::FillDileptonTrackTrack(dilepton, track1, track2, fValuesQuadruplet); + VarManager::FillDileptonTrackTrack( + dilepton, track1, track2, fValuesQuadruplet); if (fConfigSetupFourProngFitter || fConfigUseKFVertexing) { // LOGP(info, "Using KF or DCA fitter for secondary vertexing"); - VarManager::FillDileptonTrackTrackVertexing(event, lepton1, lepton2, track1, track2, fValuesQuadruplet); + VarManager::FillDileptonTrackTrackVertexing< + TCandidateType, TEventFillMap, TTrackFillMap>( + event, lepton1, lepton2, track1, track2, fValuesQuadruplet); } int iCut = 0; uint32_t CutDecision = 0; - for (auto cutname = fQuadrupletCutNames.begin(); cutname != fQuadrupletCutNames.end(); cutname++, iCut++) { + for (auto cutname = fQuadrupletCutNames.begin(); + cutname != fQuadrupletCutNames.end(); cutname++, iCut++) { // apply dilepton-track-track cut if (fQuadrupletCuts[iCut].IsSelected(fValuesQuadruplet)) { CutDecision |= (1 << iCut); if (fIsSameTrackCut) { if (track1.sign() * track2.sign() < 0) { - fHistMan->FillHistClass(Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), fValuesQuadruplet); + fHistMan->FillHistClass( + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } else { if ((track1.sign() < 0) && (track2.sign() > 0)) { - fHistMan->FillHistClass(Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), fValuesQuadruplet); + fHistMan->FillHistClass( + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() > 0) && (track2.sign() < 0)) { - fHistMan->FillHistClass(Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), fValuesQuadruplet); + fHistMan->FillHistClass( + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } if ((track1.sign() > 0) && (track2.sign() > 0)) { - fHistMan->FillHistClass(Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), fValuesQuadruplet); + fHistMan->FillHistClass( + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() < 0) && (track2.sign() < 0)) { - fHistMan->FillHistClass(Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), fValuesQuadruplet); + fHistMan->FillHistClass( + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } } // loop over dilepton-track-track cuts @@ -4973,27 +7188,62 @@ struct AnalysisDileptonTrackTrack { if (!CutDecision) { continue; } - DileptonTrackTrackTable(fValuesQuadruplet[VarManager::kQuadMass], fValuesQuadruplet[VarManager::kQuadPt], fValuesQuadruplet[VarManager::kQuadEta], fValuesQuadruplet[VarManager::kQuadPhi], fValuesQuadruplet[VarManager::kRap], - fValuesQuadruplet[VarManager::kQ], fValuesQuadruplet[VarManager::kDeltaR1], fValuesQuadruplet[VarManager::kDeltaR2], fValuesQuadruplet[VarManager::kDeltaR], - dilepton.mass(), dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), - lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), lepton1.tpcNClsFound(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), lepton2.tpcNClsFound(), - fValuesQuadruplet[VarManager::kDitrackMass], fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), track1.eta(), track2.eta(), track1.phi(), track2.phi(), track1.sign(), track2.sign(), track1.tpcNSigmaPi(), track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), track2.tpcNClsFound(), - fValuesQuadruplet[VarManager::kKFMass], fValuesQuadruplet[VarManager::kVertexingProcCode], fValuesQuadruplet[VarManager::kVertexingChi2PCA], fValuesQuadruplet[VarManager::kCosPointingAngle], fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], - fValuesQuadruplet[VarManager::kVertexingLz], fValuesQuadruplet[VarManager::kVertexingLxy], fValuesQuadruplet[VarManager::kVertexingLxyz], fValuesQuadruplet[VarManager::kVertexingTauz], fValuesQuadruplet[VarManager::kVertexingTauxy], fValuesQuadruplet[VarManager::kVertexingLzErr], fValuesQuadruplet[VarManager::kVertexingLxyzErr], - fValuesQuadruplet[VarManager::kVertexingTauzErr], fValuesQuadruplet[VarManager::kVertexingLzProjected], fValuesQuadruplet[VarManager::kVertexingLxyProjected], fValuesQuadruplet[VarManager::kVertexingLxyzProjected], fValuesQuadruplet[VarManager::kVertexingTauzProjected], fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); + DileptonTrackTrackTable( + fValuesQuadruplet[VarManager::kQuadMass], + fValuesQuadruplet[VarManager::kQuadPt], + fValuesQuadruplet[VarManager::kQuadEta], + fValuesQuadruplet[VarManager::kQuadPhi], + fValuesQuadruplet[VarManager::kRap], + fValuesQuadruplet[VarManager::kQ], + fValuesQuadruplet[VarManager::kDeltaR1], + fValuesQuadruplet[VarManager::kDeltaR2], + fValuesQuadruplet[VarManager::kDeltaR], dilepton.mass(), + dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), + lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton1.tpcNClsFound(), lepton2.tpcNSigmaEl(), + lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), + lepton2.tpcNClsFound(), fValuesQuadruplet[VarManager::kDitrackMass], + fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), + track1.eta(), track2.eta(), track1.phi(), track2.phi(), + track1.sign(), track2.sign(), track1.tpcNSigmaPi(), + track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), + track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), + track2.tpcNClsFound(), fValuesQuadruplet[VarManager::kKFMass], + fValuesQuadruplet[VarManager::kVertexingProcCode], + fValuesQuadruplet[VarManager::kVertexingChi2PCA], + fValuesQuadruplet[VarManager::kCosPointingAngle], + fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], + fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], + fValuesQuadruplet[VarManager::kVertexingLz], + fValuesQuadruplet[VarManager::kVertexingLxy], + fValuesQuadruplet[VarManager::kVertexingLxyz], + fValuesQuadruplet[VarManager::kVertexingTauz], + fValuesQuadruplet[VarManager::kVertexingTauxy], + fValuesQuadruplet[VarManager::kVertexingLzErr], + fValuesQuadruplet[VarManager::kVertexingLxyzErr], + fValuesQuadruplet[VarManager::kVertexingTauzErr], + fValuesQuadruplet[VarManager::kVertexingLzProjected], + fValuesQuadruplet[VarManager::kVertexingLxyProjected], + fValuesQuadruplet[VarManager::kVertexingLxyzProjected], + fValuesQuadruplet[VarManager::kVertexingTauzProjected], + fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); } } } - o2::framework::Preslice trackAssocsPerCollision = o2::aod::reducedtrack_association::reducedeventId; - o2::framework::Preslice dielectronsPerCollision = o2::aod::reducedpair::reducedeventId; - o2::framework::Preslice ditracksPerCollision = o2::aod::reducedpair::reducedeventId; - - void processJpsiPiPi(o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, o2::soa::Filtered const& dileptons) - { + o2::framework::Preslice trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; + o2::framework::Preslice dielectronsPerCollision = + o2::aod::reducedpair::reducedeventId; + o2::framework::Preslice ditracksPerCollision = + o2::aod::reducedpair::reducedeventId; + + void processJpsiPiPi( + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } @@ -5001,28 +7251,34 @@ struct AnalysisDileptonTrackTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { - auto groupedBarrelAssocs = assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); - auto groupedDielectrons = dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); - runDileptonTrackTrack(event, groupedBarrelAssocs, tracks, groupedDielectrons); + for (auto const &event : events) { + auto groupedBarrelAssocs = + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + auto groupedDielectrons = + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + runDileptonTrackTrack(event, groupedBarrelAssocs, + tracks, groupedDielectrons); } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } - PROCESS_SWITCH(AnalysisDileptonTrackTrack, processJpsiPiPi, "Run barrel pairing of J/psi with pion candidate", false); - PROCESS_SWITCH(AnalysisDileptonTrackTrack, processDummy, "Dummy function", true); + PROCESS_SWITCH(AnalysisDileptonTrackTrack, processJpsiPiPi, + "Run barrel pairing of J/psi with pion candidate", false); + PROCESS_SWITCH(AnalysisDileptonTrackTrack, processDummy, "Dummy function", + true); }; -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, const char* histGroups) -{ +void DefineHistograms(HistogramManager *histMan, const TString &histClasses, + const char *histGroups) { // // Define here the histograms for all the classes required in analysis. - // The histogram classes are provided in the histClasses string, separated by semicolon ";" - // The histogram classes and their components histograms are defined below depending on the name of the histogram class + // The histogram classes are provided in the histClasses string, separated by + // semicolon ";" The histogram classes and their components histograms are + // defined below depending on the name of the histogram class // std::unique_ptr objArray(histClasses.Tokenize(";")); for (Int_t iclass = 0; iclass < objArray->GetEntries(); ++iclass) { @@ -5030,78 +7286,106 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, con histMan->AddHistClass(classStr.Data()); TString histName = histGroups; - // NOTE: The level of detail for histogramming can be controlled via configurables + // NOTE: The level of detail for histogramming can be controlled via + // configurables if (classStr.Contains("Event")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "event", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "event", histName); } - if (classStr.Contains("SameBunchCorrelations") || classStr.Contains("OutOfBunchCorrelations")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); + if (classStr.Contains("SameBunchCorrelations") || + classStr.Contains("OutOfBunchCorrelations")) { + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); } if (classStr.Contains("Track") && !classStr.Contains("Pairs")) { if (classStr.Contains("Barrel")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", histName); if (classStr.Contains("PIDCalibElectron")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_electron"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_electron"); } if (classStr.Contains("PIDCalibPion")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_pion"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_pion"); } if (classStr.Contains("PIDCalibProton")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "postcalib_proton"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_proton"); } if (classStr.Contains("Ambiguity")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } if (classStr.Contains("Muon")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", histName); } } if (classStr.Contains("Pairs")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("Pairing")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "event", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "event", histName); } if (classStr.Contains("Triplets")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("DileptonsSelected")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); } if (classStr.Contains("DileptonTrack") && !classStr.Contains("ME")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); } if (classStr.Contains("DileptonTrackME")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-track", "dilepton-hadron-array-correlation"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "dilepton-hadron-array-correlation"); } if (classStr.Contains("DileptonTrackECME")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-track", "energy-correlator"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "energy-correlator"); } if (classStr.Contains("HadronsSelected")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "track", histName); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "track", histName); } if (classStr.Contains("DileptonHadronInvMass")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); + o2::aod::dqhistograms::DefineHistograms( + histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); } if (classStr.Contains("DileptonHadronCorrelation")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-correlation"); + o2::aod::dqhistograms::DefineHistograms(histMan, + objArray->At(iclass)->GetName(), + "dilepton-hadron-correlation"); } if (classStr.Contains("Quadruplet")) { - o2::aod::dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "dilepton-dihadron", histName); + o2::aod::dqhistograms::DefineHistograms(histMan, + objArray->At(iclass)->GetName(), + "dilepton-dihadron", histName); } } // end loop over histogram classes } From de37198384f9573a55625fdf6ed25d85f8b7cddd Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 30 Oct 2026 13:54:12 +0000 Subject: [PATCH 5/6] Please consider the following formatting changes --- PWGDQ/Core/VarManager.cxx | 490 +-- PWGDQ/Core/VarManager.h | 4627 ++++++++++++------------ PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 3677 ++++++++++--------- PWGDQ/Tasks/tableReader_withAssoc.h | 3962 ++++++++++---------- 4 files changed, 6505 insertions(+), 6251 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index f58704f9d9a..9244750660a 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -73,33 +73,34 @@ int VarManager::fgITSROFBorderMarginHigh = 0; uint64_t VarManager::fgSOR = 0; uint64_t VarManager::fgEOR = 0; ROOT::Math::PxPyPzEVector - VarManager::fgBeamA(0, 0, 6799.99, - 6800); // GeV, beam from A-side 4-momentum vector + VarManager::fgBeamA(0, 0, 6799.99, + 6800); // GeV, beam from A-side 4-momentum vector ROOT::Math::PxPyPzEVector - VarManager::fgBeamC(0, 0, -6799.99, - 6800); // GeV, beam from C-side 4-momentum vector + VarManager::fgBeamC(0, 0, -6799.99, + 6800); // GeV, beam from C-side 4-momentum vector o2::vertexing::DCAFitterN<2> VarManager::fgFitterTwoProngBarrel; o2::vertexing::DCAFitterN<3> VarManager::fgFitterThreeProngBarrel; o2::vertexing::DCAFitterN<4> VarManager::fgFitterFourProngBarrel; o2::vertexing::FwdDCAFitterN<2> VarManager::fgFitterTwoProngFwd; o2::vertexing::FwdDCAFitterN<3> VarManager::fgFitterThreeProngFwd; o2::globaltracking::MatchGlobalFwd VarManager::mMatching; -std::map VarManager::fgCalibs; +std::map VarManager::fgCalibs; std::array VarManager::fgRunTPCPostCalibration = {false, false, false, false}; int VarManager::fgCalibrationType = - 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for - // pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb + 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for + // pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb bool VarManager::fgUseInterpolatedCalibration = - true; // use interpolated calibration histograms (default: true) + true; // use interpolated calibration histograms (default: true) int VarManager::fgEfficiencyType = - 0; // type of efficiency to be applied, default is no efficiency -TObject *VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency -TObject *VarManager::fgPosiPhiMap = nullptr; -TObject *VarManager::fgNegaPhiMap = nullptr; + 0; // type of efficiency to be applied, default is no efficiency +TObject* VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency +TObject* VarManager::fgPosiPhiMap = nullptr; +TObject* VarManager::fgNegaPhiMap = nullptr; bool VarManager::fgUsePhiCorrection = false; //__________________________________________________________________ -VarManager::VarManager() : TObject() { +VarManager::VarManager() : TObject() +{ // // constructor // @@ -110,7 +111,8 @@ VarManager::VarManager() : TObject() { VarManager::~VarManager() = default; //__________________________________________________________________ -void VarManager::SetVariableDependencies() { +void VarManager::SetVariableDependencies() +{ // // Set as used variables on which other variables calculation depends // @@ -145,7 +147,8 @@ void VarManager::SetVariableDependencies() { } //__________________________________________________________________ -void VarManager::ResetValues(int startValue, int endValue, float *values) { +void VarManager::ResetValues(int startValue, int endValue, float* values) +{ // // reset all variables to an "innocent" value // NOTE: here we use -9999.0 as a neutral value, but depending on situation, @@ -159,7 +162,8 @@ void VarManager::ResetValues(int startValue, int endValue, float *values) { } //__________________________________________________________________ -void VarManager::SetCollisionSystem(const TString &system, float energy) { +void VarManager::SetCollisionSystem(const TString& system, float energy) +{ // // Set the collision system and the center of mass energy // @@ -212,42 +216,43 @@ void VarManager::SetCollisionSystem(const TString &system, float energy) { // set the beam 4-momentum vectors float beamAEnergy = - energy / 2.0f * - std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / - NumberOfProtonsC / NumberOfProtonsA); // GeV + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / + NumberOfProtonsC / NumberOfProtonsA); // GeV float beamCEnergy = - energy / 2.0f * - std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / - NumberOfProtonsA / NumberOfProtonsC); // GeV + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / + NumberOfProtonsA / NumberOfProtonsC); // GeV float beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - NumberOfNucleonsA * NumberOfNucleonsA * - MassProton * MassProton); + MassProton * MassProton); float beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - NumberOfNucleonsC * NumberOfNucleonsC * - MassProton * MassProton); + MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } //__________________________________________________________________ -void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif) { +void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif) +{ // // Set the collision system and the center of mass energy from the GRP // information double beamAEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( - o2::constants::lhc::BeamDirection::BeamA); + o2::constants::lhc::BeamDirection::BeamA); double beamCEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( - o2::constants::lhc::BeamDirection::BeamC); + o2::constants::lhc::BeamDirection::BeamC); double beamANucleons = - grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); double beamCNucleons = - grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); double beamAMomentum = - std::sqrt(beamAEnergy * beamAEnergy - - beamANucleons * beamANucleons * MassProton * MassProton); + std::sqrt(beamAEnergy * beamAEnergy - + beamANucleons * beamANucleons * MassProton * MassProton); double beamCMomentum = - std::sqrt(beamCEnergy * beamCEnergy - - beamCNucleons * beamCNucleons * MassProton * MassProton); + std::sqrt(beamCEnergy * beamCEnergy - + beamCNucleons * beamCNucleons * MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } @@ -263,7 +268,8 @@ void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif) { // } //__________________________________________________________________ -void VarManager::FillTrackDerived(float *values) { +void VarManager::FillTrackDerived(float* values) +{ // // Fill track-wise derived quantities (these are all quantities which can be // computed just based on the values already filled in the FillTrack() @@ -275,12 +281,14 @@ void VarManager::FillTrackDerived(float *values) { } //__________________________________________________________________ -float VarManager::calculateCosPA(const KFParticle &kfp, const KFParticle &PV) { +float VarManager::calculateCosPA(const KFParticle& kfp, const KFParticle& PV) +{ return cpaFromKF(kfp, PV); } //__________________________________________________________________ -double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { +double VarManager::ComputePIDcalibration(int species, double nSigmaValue) +{ // species: 0 - electron, 1 - pion, 2 - kaon, 3 - proton // Depending on the PID calibration type, we use different types of // calibration histograms @@ -290,29 +298,29 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { CalibObjects calibMean = kTPCElectronMean; CalibObjects calibSigma = kTPCElectronSigma; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - TH3F *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - TH3F *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + TH3F* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + TH3F* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); if (!calibMeanHist || !calibSigmaHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -322,18 +330,18 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { int binTPCncls = calibMeanHist->GetXaxis()->FindBin(fgValues[kTPCncls]); binTPCncls = (binTPCncls == 0 ? 1 : binTPCncls); binTPCncls = (binTPCncls > calibMeanHist->GetXaxis()->GetNbins() - ? calibMeanHist->GetXaxis()->GetNbins() - : binTPCncls); + ? calibMeanHist->GetXaxis()->GetNbins() + : binTPCncls); int binPin = calibMeanHist->GetYaxis()->FindBin(fgValues[kPin]); binPin = (binPin == 0 ? 1 : binPin); binPin = (binPin > calibMeanHist->GetYaxis()->GetNbins() - ? calibMeanHist->GetYaxis()->GetNbins() - : binPin); + ? calibMeanHist->GetYaxis()->GetNbins() + : binPin); int binEta = calibMeanHist->GetZaxis()->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); binEta = (binEta > calibMeanHist->GetZaxis()->GetNbins() - ? calibMeanHist->GetZaxis()->GetNbins() - : binEta); + ? calibMeanHist->GetZaxis()->GetNbins() + : binEta); double mean = calibMeanHist->GetBinContent(binTPCncls, binPin, binEta); double sigma = calibSigmaHist->GetBinContent(binTPCncls, binPin, binEta); @@ -344,34 +352,34 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { CalibObjects calibSigma = kTPCElectronSigma; CalibObjects calibStatus = kTPCElectronStatus; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - calibStatus = kTPCElectronStatus; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - calibStatus = kTPCPionStatus; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - calibStatus = kTPCKaonStatus; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - calibStatus = kTPCProtonStatus; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + calibStatus = kTPCElectronStatus; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + calibStatus = kTPCPionStatus; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + calibStatus = kTPCKaonStatus; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + calibStatus = kTPCProtonStatus; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - THnF *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - THnF *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); - THnF *calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); + THnF* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + THnF* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + THnF* calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); if (!calibMeanHist || !calibSigmaHist || !calibStatusHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -381,55 +389,55 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { int binEta = calibMeanHist->GetAxis(0)->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); binEta = (binEta > calibMeanHist->GetAxis(0)->GetNbins() - ? calibMeanHist->GetAxis(0)->GetNbins() - : binEta); + ? calibMeanHist->GetAxis(0)->GetNbins() + : binEta); int binNpv = calibMeanHist->GetAxis(1)->FindBin(fgValues[kVtxNcontribReal]); binNpv = (binNpv == 0 ? 1 : binNpv); binNpv = (binNpv > calibMeanHist->GetAxis(1)->GetNbins() - ? calibMeanHist->GetAxis(1)->GetNbins() - : binNpv); + ? calibMeanHist->GetAxis(1)->GetNbins() + : binNpv); int binNlong = - calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); + calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); binNlong = (binNlong == 0 ? 1 : binNlong); binNlong = (binNlong > calibMeanHist->GetAxis(2)->GetNbins() - ? calibMeanHist->GetAxis(2)->GetNbins() - : binNlong); + ? calibMeanHist->GetAxis(2)->GetNbins() + : binNlong); int binTlong = - calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); + calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); binTlong = (binTlong == 0 ? 1 : binTlong); binTlong = (binTlong > calibMeanHist->GetAxis(3)->GetNbins() - ? calibMeanHist->GetAxis(3)->GetNbins() - : binTlong); + ? calibMeanHist->GetAxis(3)->GetNbins() + : binTlong); std::array bin{binEta, binNpv, binNlong, binTlong}; int status = static_cast(calibStatusHist->GetBinContent(bin.data())); double mean = calibMeanHist->GetBinContent(bin.data()); double sigma = calibSigmaHist->GetBinContent(bin.data()); switch (status) { - case 0: - // good calibration, return the calibrated nSigma value - return (nSigmaValue - mean) / sigma; - break; - case 1: - case 4: - // calibration not valid or interpolation failed, return the original - // nSigma value - return nSigmaValue; - break; - case 2: // calibration constant has poor stat uncertainty, consider the user - // option for what to do - case 3: - // calibration constants have been interpolated - if (fgUseInterpolatedCalibration) { + case 0: + // good calibration, return the calibrated nSigma value return (nSigmaValue - mean) / sigma; - } else { - // return the original nSigma value + break; + case 1: + case 4: + // calibration not valid or interpolation failed, return the original + // nSigma value return nSigmaValue; - } - break; - default: - return nSigmaValue; // unknown status, return the original nSigma value - break; + break; + case 2: // calibration constant has poor stat uncertainty, consider the user + // option for what to do + case 3: + // calibration constants have been interpolated + if (fgUseInterpolatedCalibration) { + return (nSigmaValue - mean) / sigma; + } else { + // return the original nSigma value + return nSigmaValue; + } + break; + default: + return nSigmaValue; // unknown status, return the original nSigma value + break; } } else { // unknown calibration type, return the original nSigma value @@ -439,7 +447,8 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { } //__________________________________________________________________ -void VarManager::SetEfficiencyObject(int efficiencyType, TObject *obj) { +void VarManager::SetEfficiencyObject(int efficiencyType, TObject* obj) +{ // check the type of the efficiency object and set it accordingly if (efficiencyType >= kNEfficiencyTypes || efficiencyType < 0) { LOG(warning) << "SetEfficiencyObject: unknown efficiency type " @@ -453,7 +462,8 @@ void VarManager::SetEfficiencyObject(int efficiencyType, TObject *obj) { fgEfficiencyHist = obj; } -void VarManager::FillEfficiency(float *values) { +void VarManager::FillEfficiency(float* values) +{ // depending on the efficiency type, we use different types of efficiency // histograms and different variables to get the efficiency value if (!values) { @@ -462,75 +472,75 @@ void VarManager::FillEfficiency(float *values) { if (fgEfficiencyType == kNone) { values[kPairEfficiency] = - 1.0; // if no efficiency is to be applied, set the efficiency value to 1 + 1.0; // if no efficiency is to be applied, set the efficiency value to 1 values[kPairWeight] = 1.0; // set the weight to 1 } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarFT0c) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() - ? efficiencyHist->GetXaxis()->GetNbins() - : binPt); + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() - ? efficiencyHist->GetYaxis()->GetNbins() - : binCent); + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); int binCosThetaStarFT0c = - efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); binCosThetaStarFT0c = (binCosThetaStarFT0c == 0 ? 1 : binCosThetaStarFT0c); binCosThetaStarFT0c = - (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() - ? efficiencyHist->GetZaxis()->GetNbins() - : binCosThetaStarFT0c); + (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarFT0c); // get the efficiency value from the histogram values[kPairEfficiency] = - efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); values[kPairWeight] = - 1.0 / (values[kPairEfficiency] > 0 - ? values[kPairEfficiency] - : 1.0); // set the weight as the inverse of the efficiency, - // but avoid division by zero + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarRandom) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() - ? efficiencyHist->GetXaxis()->GetNbins() - : binPt); + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() - ? efficiencyHist->GetYaxis()->GetNbins() - : binCent); + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); int binCosThetaStarRandom = - efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); binCosThetaStarRandom = - (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); + (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); binCosThetaStarRandom = - (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() - ? efficiencyHist->GetZaxis()->GetNbins() - : binCosThetaStarRandom); + (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarRandom); // get the efficiency value from the histogram values[kPairEfficiency] = - efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); values[kPairWeight] = - 1.0 / (values[kPairEfficiency] > 0 - ? values[kPairEfficiency] - : 1.0); // set the weight as the inverse of the efficiency, - // but avoid division by zero + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else { LOG(warning) << "FillEfficiency: unknown efficiency type " << fgEfficiencyType << ", using default efficiency = 1"; @@ -539,13 +549,15 @@ void VarManager::FillEfficiency(float *values) { } } -void VarManager::SetPhiMap(TObject *hposi, TObject *hnega, bool option) { +void VarManager::SetPhiMap(TObject* hposi, TObject* hnega, bool option) +{ fgPosiPhiMap = hposi; fgNegaPhiMap = hnega; fgUsePhiCorrection = option; } -double VarManager::SampleRotationPhi(double pt, double eta, int charge) { +double VarManager::SampleRotationPhi(double pt, double eta, int charge) +{ // each type only alarm once static bool warnedEmptyPhi = false; @@ -553,11 +565,11 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) { return gRandom->Uniform(0., o2::constants::math::TwoPI); } else { - TH3D *hMap = nullptr; + TH3D* hMap = nullptr; if (charge > 0) { - hMap = dynamic_cast(fgPosiPhiMap); + hMap = dynamic_cast(fgPosiPhiMap); } else { - hMap = dynamic_cast(fgNegaPhiMap); + hMap = dynamic_cast(fgNegaPhiMap); } if (!hMap) { @@ -570,9 +582,9 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) { ptBin = std::clamp(ptBin, 1, hMap->GetNbinsX()); etaBin = std::clamp(etaBin, 1, hMap->GetNbinsZ()); - TH1D *hPhi = hMap->ProjectionY( - Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", charge, ptBin, etaBin), - ptBin, ptBin, etaBin, etaBin); + TH1D* hPhi = hMap->ProjectionY( + Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", charge, ptBin, etaBin), + ptBin, ptBin, etaBin, etaBin); if (!hPhi || hPhi->Integral(1, hPhi->GetNbinsX()) <= 0.) { if (!warnedEmptyPhi) { @@ -599,7 +611,8 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) { //__________________________________________________________________ std::tuple -VarManager::BimodalityCoefficientUnbinned(const std::vector &data) { + VarManager::BimodalityCoefficientUnbinned(const std::vector& data) +{ // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis size_t n = data.size(); @@ -609,7 +622,7 @@ VarManager::BimodalityCoefficientUnbinned(const std::vector &data) { float mean = std::accumulate(data.begin(), data.end(), 0.0) / n; float m2 = 0.0, m3 = 0.0, m4 = 0.0; - for (const float &x : data) { + for (const float& x : data) { const float diff = x - mean; const float diff2 = diff * diff; m2 += diff2; @@ -634,9 +647,10 @@ VarManager::BimodalityCoefficientUnbinned(const std::vector &data) { } std::tuple -VarManager::BimodalityCoefficientAndNPeaks(const std::vector &data, - float binWidth, int trim, float min, - float max) { + VarManager::BimodalityCoefficientAndNPeaks(const std::vector& data, + float binWidth, int trim, float min, + float max) +{ // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis @@ -653,7 +667,7 @@ VarManager::BimodalityCoefficientAndNPeaks(const std::vector &data, int nBins = static_cast((max - min) / binWidth); std::vector counts(nBins, 0.0); - for (const float &x : data) { + for (const float& x : data) { if (x < min || x >= max) { continue; // skip out-of-range values } @@ -796,7 +810,8 @@ VarManager::BimodalityCoefficientAndNPeaks(const std::vector &data, } //__________________________________________________________________ -void VarManager::SetDefaultVarNames() { +void VarManager::SetDefaultVarNames() +{ // // Set default variable names // @@ -888,7 +903,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kMultDimuons] = "Multiplicity Dimuons Unlike Sign"; fgVariableUnits[kMultDimuons] = ""; fgVariableNames[kMultDimuonsME] = - "Multiplicity Dimuons Unlike Sign Mixed Events"; + "Multiplicity Dimuons Unlike Sign Mixed Events"; fgVariableUnits[kMultDimuonsME] = ""; fgVariableNames[kCentFT0C] = "Centrality FT0C"; fgVariableUnits[kCentFT0C] = "%"; @@ -903,11 +918,11 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kMCEventPlaneAngle] = "MC event plane angle"; fgVariableNames[kMCEventCentrFT0C] = "MC Centrality FT0C"; fgVariableNames[kMultMCNParticlesEta05] = - "MC Multiplicity Central Barrel for |eta| < 0.5"; + "MC Multiplicity Central Barrel for |eta| < 0.5"; fgVariableNames[kMultMCNParticlesEta08] = - "MC Multiplicity Central Barrel for |eta| < 0.8"; + "MC Multiplicity Central Barrel for |eta| < 0.8"; fgVariableNames[kMultMCNParticlesEta10] = - "MC Multiplicity Central Barrel for |eta| < 1.0"; + "MC Multiplicity Central Barrel for |eta| < 1.0"; fgVariableUnits[kMCEventGeneratorId] = ""; fgVariableUnits[kMCEventSubGeneratorId] = ""; fgVariableUnits[kMCVtxX] = "cm"; @@ -976,12 +991,12 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kMultNTracksPVetaHalf] = "# Mult Tracks PV |#eta| < 0.5"; fgVariableUnits[kMultNTracksPVetaHalf] = ""; fgVariableNames[kTrackOccupancyInTimeRange] = - "track occupancy in TPC drift time (PV tracks)"; + "track occupancy in TPC drift time (PV tracks)"; fgVariableUnits[kTrackOccupancyInTimeRange] = ""; fgVariableNames[kFT0COccupancyInTimeRange] = "FT0C occupancy"; fgVariableUnits[kFT0COccupancyInTimeRange] = ""; fgVariableNames[kNoCollInTimeRangeStandard] = - "track occupancy in TPC drift standart time"; + "track occupancy in TPC drift standart time"; fgVariableUnits[kNoCollInTimeRangeStandard] = ""; fgVariableNames[kMultAllTracksITSTPC] = "# ITS-TPC tracks"; fgVariableUnits[kMultAllTracksITSTPC] = ""; @@ -1004,82 +1019,82 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kNTPCcontribLongC] = "# TPC-C pileup, long time range"; fgVariableUnits[kNTPCcontribLongC] = ""; fgVariableNames[kNTPCmeanTimeLongA] = - "# TPC-A pileup mean time, long time range"; + "# TPC-A pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongA] = "#mu s"; fgVariableNames[kNTPCmeanTimeLongC] = - "# TPC-C pileup mean time, long time range"; + "# TPC-C pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongC] = "#mu s"; fgVariableNames[kNTPCmedianTimeLongA] = - "# TPC-A pileup median time, long time range"; + "# TPC-A pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongA] = "#mu s"; fgVariableNames[kNTPCmedianTimeLongC] = - "# TPC-C pileup median time, long time range"; + "# TPC-C pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongC] = "#mu s"; fgVariableNames[kNTPCcontribShortA] = "# TPC-A pileup, short time range"; fgVariableUnits[kNTPCcontribShortA] = ""; fgVariableNames[kNTPCcontribShortC] = "# TPC-C pileup, short time range"; fgVariableUnits[kNTPCcontribShortC] = ""; fgVariableNames[kNTPCmeanTimeShortA] = - "# TPC-A pileup mean time, short time range"; + "# TPC-A pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortA] = "#mu s"; fgVariableNames[kNTPCmeanTimeShortC] = - "# TPC-C pileup mean time, short time range"; + "# TPC-C pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortC] = "#mu s"; fgVariableNames[kNTPCmedianTimeShortA] = - "# TPC-A pileup median time, short time range"; + "# TPC-A pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortA] = "#mu s"; fgVariableNames[kNTPCmedianTimeShortC] = - "# TPC-C pileup median time, short time range"; + "# TPC-C pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortC] = "#mu s"; fgVariableNames[kDCAzBimodalityCoefficient] = - "Unbinned Bimodality Coeff of DCAz distribution"; + "Unbinned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficient] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinned] = - "Binned Bimodality Coeff of DCAz distribution"; + "Binned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficientBinned] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed1] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed1] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed2] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed2] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed3] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed3] = ""; fgVariableNames[kDCAzMean] = "Mean of DCAz distribution"; fgVariableUnits[kDCAzMean] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed1] = - "Mean of DCAz distribution (trimmed 1)"; + "Mean of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzMeanBinnedTrimmed1] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed2] = - "Mean of DCAz distribution (trimmed 2)"; + "Mean of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzMeanBinnedTrimmed2] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed3] = - "Mean of DCAz distribution (trimmed 3)"; + "Mean of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzMeanBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzRMS] = "RMS of DCAz distribution"; fgVariableUnits[kDCAzRMS] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed1] = - "RMS of DCAz distribution (trimmed 1)"; + "RMS of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzRMSBinnedTrimmed1] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed2] = - "RMS of DCAz distribution (trimmed 2)"; + "RMS of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzRMSBinnedTrimmed2] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed3] = - "RMS of DCAz distribution (trimmed 3)"; + "RMS of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzRMSBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzSkewness] = "Skewness of DCAz distribution"; fgVariableUnits[kDCAzSkewness] = ""; fgVariableNames[kDCAzKurtosis] = "Kurtosis of DCAz distribution"; fgVariableUnits[kDCAzKurtosis] = ""; fgVariableNames[kDCAzFracAbove100um] = - "Fraction of tracks with |DCAz| > 100 um"; + "Fraction of tracks with |DCAz| > 100 um"; fgVariableUnits[kDCAzFracAbove100um] = ""; fgVariableNames[kDCAzFracAbove200um] = - "Fraction of tracks with |DCAz| > 200 um"; + "Fraction of tracks with |DCAz| > 200 um"; fgVariableUnits[kDCAzFracAbove200um] = ""; fgVariableNames[kDCAzFracAbove500um] = - "Fraction of tracks with |DCAz| > 500 um"; + "Fraction of tracks with |DCAz| > 500 um"; fgVariableUnits[kDCAzFracAbove500um] = ""; fgVariableNames[kDCAzFracAbove1mm] = "Fraction of tracks with |DCAz| > 1 mm"; fgVariableUnits[kDCAzFracAbove1mm] = ""; @@ -1088,18 +1103,18 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kDCAzFracAbove5mm] = "Fraction of tracks with |DCAz| > 5 mm"; fgVariableUnits[kDCAzFracAbove5mm] = ""; fgVariableNames[kDCAzFracAbove10mm] = - "Fraction of tracks with |DCAz| > 10 mm"; + "Fraction of tracks with |DCAz| > 10 mm"; fgVariableUnits[kDCAzFracAbove10mm] = ""; fgVariableNames[kDCAzNPeaks] = "Number of peaks in DCAz distribution"; fgVariableUnits[kDCAzNPeaks] = ""; fgVariableNames[kDCAzNPeaksTrimmed1] = - "Number of peaks in binned DCAz distribution (trimmed 1)"; + "Number of peaks in binned DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzNPeaksTrimmed1] = ""; fgVariableNames[kDCAzNPeaksTrimmed2] = - "Number of peaks in binned DCAz distribution (trimmed 2)"; + "Number of peaks in binned DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzNPeaksTrimmed2] = ""; fgVariableNames[kDCAzNPeaksTrimmed3] = - "Number of peaks in binned DCAz distribution (trimmed 3)"; + "Number of peaks in binned DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzNPeaksTrimmed3] = ""; fgVariableNames[kInteractionRate] = "Interaction rate"; fgVariableUnits[kInteractionRate] = "kHz"; @@ -1128,7 +1143,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kMass] = "mass"; fgVariableUnits[kMass] = "GeV/c2"; fgVariableNames[kDeltaPtotTracks] = - "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; + "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; fgVariableUnits[kDeltaPtotTracks] = "GeV/c"; fgVariableNames[kCharge] = "charge"; fgVariableUnits[kCharge] = ""; @@ -1149,12 +1164,12 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kTrackTimeRes] = "Resolution of the track time"; fgVariableUnits[kTrackTimeRes] = "ns"; fgVariableNames[kTrackTimeResRelative] = - "Relative resolution of the track time"; + "Relative resolution of the track time"; fgVariableUnits[kTrackTimeResRelative] = ""; fgVariableNames[kTrackAssocDeltaTime] = "Track-collision association #Deltat"; fgVariableUnits[kTrackAssocDeltaTime] = "ns"; fgVariableNames[kTrackAssocTimeThreshold] = - "Track-collision association time threshold"; + "Track-collision association time threshold"; fgVariableUnits[kTrackAssocTimeThreshold] = "ns"; fgVariableNames[kTrackAssocDeltaTimeNorm] = "|#Deltat| / threshold"; fgVariableUnits[kTrackAssocDeltaTimeNorm] = ""; @@ -1216,7 +1231,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kEMCalIsExotic] = "EMCal cluster is exotic"; fgVariableUnits[kEMCalIsExotic] = ""; fgVariableNames[kEMCalDistanceToBadChannel] = - "EMCal cluster distance to bad channel"; + "EMCal cluster distance to bad channel"; fgVariableUnits[kEMCalDistanceToBadChannel] = ""; fgVariableNames[kEMCalNLM] = "EMCal cluster no. local maxima"; fgVariableUnits[kEMCalNLM] = ""; @@ -1287,19 +1302,19 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kIsAmbiguous] = "is ambiguous track"; fgVariableUnits[kIsAmbiguous] = ""; fgVariableNames[kIsLegFromGamma] = - "is leg from #gamma #rightarror e^{+}e^{-}"; + "is leg from #gamma #rightarror e^{+}e^{-}"; fgVariableUnits[kIsLegFromGamma] = ""; fgVariableNames[kIsLegFromK0S] = - "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; + "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; fgVariableUnits[kIsLegFromK0S] = ""; fgVariableNames[kIsLegFromLambda] = - "is leg from #Lambda #rightarror p#pi^{-}"; + "is leg from #Lambda #rightarror p#pi^{-}"; fgVariableUnits[kIsLegFromLambda] = ""; fgVariableNames[kIsLegFromAntiLambda] = - "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; + "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; fgVariableUnits[kIsLegFromAntiLambda] = ""; fgVariableNames[kIsLegFromOmega] = - "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; + "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; fgVariableUnits[kIsLegFromOmega] = ""; fgVariableNames[kMuonNClusters] = "muon n-clusters"; fgVariableUnits[kMuonNClusters] = ""; @@ -1452,7 +1467,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kVertexingTauxyProjected] = "Pair pseudo-proper Tauxy"; fgVariableUnits[kVertexingTauxyProjected] = "ns"; fgVariableNames[kVertexingTauxyProjectedPoleJPsiMass] = - "Pair pseudo-proper Tauxy (with pole JPsi mass)"; + "Pair pseudo-proper Tauxy (with pole JPsi mass)"; fgVariableUnits[kVertexingTauxyProjectedPoleJPsiMass] = "ns"; fgVariableNames[kVertexingTauxyzProjected] = "Pair pseudo-proper Tauxyz"; fgVariableUnits[kVertexingTauxyzProjected] = "ns"; @@ -1519,10 +1534,10 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kQ1ZNCY] = "Q_{1,y}^{ZNC} "; fgVariableUnits[kQ1ZNCY] = ""; fgVariableNames[KIntercalibZNA] = - "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; + "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; fgVariableUnits[KIntercalibZNA] = ""; fgVariableNames[KIntercalibZNC] = - "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; + "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; fgVariableUnits[KIntercalibZNC] = ""; fgVariableNames[kQ1ZNACXX] = "Q_{1,x}^{ZNC} #dot Q_{1,x}^{ZNA} "; fgVariableUnits[kQ1ZNACXX] = ""; @@ -1941,7 +1956,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kQuadPhi] = "#varphi"; fgVariableUnits[kQuadPhi] = "rad."; fgVariableNames[kCosthetaDileptonDitrack] = - "cos#it{#theta}_{dilepton-ditrack}"; + "cos#it{#theta}_{dilepton-ditrack}"; fgVariableUnits[kCosthetaDileptonDitrack] = ""; fgVariableNames[kDitrackMass] = "mass di-track"; fgVariableUnits[kDitrackMass] = "GeV/c2"; @@ -2048,7 +2063,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kMultGlobalTracks] = "Mult global tracks ALICE3"; fgVariableUnits[kMultGlobalTracks] = ""; fgVariableNames[kMultGlobalTracksPV] = - "Mult global tracks that are PV ALICE3"; + "Mult global tracks that are PV ALICE3"; fgVariableUnits[kMultGlobalTracksPV] = ""; fgVariableNames[kMultMCNParticlesAll] = "Multiplicity MC all"; fgVariableUnits[kMultMCNParticlesAll] = ""; @@ -2127,7 +2142,7 @@ void VarManager::SetDefaultVarNames() { fgVariableNames[kTOFEventTime] = "Event time reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTime] = "ns"; fgVariableNames[kTOFEventTimeErr] = - "Event time error reconstructed with ALICE3 TOF"; + "Event time error reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTimeErr] = "ns"; fgVariableNames[koTOFBeta] = "oTOF #beta"; fgVariableUnits[koTOFBeta] = ""; @@ -2275,13 +2290,13 @@ void VarManager::SetDefaultVarNames() { fgVarNamesMap["kNTPCmedianTimeShortC"] = kNTPCmedianTimeShortC; fgVarNamesMap["kDCAzBimodalityCoefficient"] = kDCAzBimodalityCoefficient; fgVarNamesMap["kDCAzBimodalityCoefficientBinned"] = - kDCAzBimodalityCoefficientBinned; + kDCAzBimodalityCoefficientBinned; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed1"] = - kDCAzBimodalityCoefficientBinnedTrimmed1; + kDCAzBimodalityCoefficientBinnedTrimmed1; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed2"] = - kDCAzBimodalityCoefficientBinnedTrimmed2; + kDCAzBimodalityCoefficientBinnedTrimmed2; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed3"] = - kDCAzBimodalityCoefficientBinnedTrimmed3; + kDCAzBimodalityCoefficientBinnedTrimmed3; fgVarNamesMap["kDCAzMean"] = kDCAzMean; fgVarNamesMap["kDCAzMeanBinnedTrimmed1"] = kDCAzMeanBinnedTrimmed1; fgVarNamesMap["kDCAzMeanBinnedTrimmed2"] = kDCAzMeanBinnedTrimmed2; @@ -2605,7 +2620,7 @@ void VarManager::SetDefaultVarNames() { fgVarNamesMap["kIsLegFromAntiLambda"] = kIsLegFromAntiLambda; fgVarNamesMap["kIsLegFromOmega"] = kIsLegFromOmega; fgVarNamesMap["kIsProtonFromLambdaAndAntiLambda"] = - kIsProtonFromLambdaAndAntiLambda; + kIsProtonFromLambdaAndAntiLambda; fgVarNamesMap["kIsDalitzLeg"] = kIsDalitzLeg; fgVarNamesMap["kBarrelNAssocsInBunch"] = kBarrelNAssocsInBunch; fgVarNamesMap["kBarrelNAssocsOutOfBunch"] = kBarrelNAssocsOutOfBunch; @@ -2674,13 +2689,13 @@ void VarManager::SetDefaultVarNames() { fgVarNamesMap["kMCWeight_rec"] = kMCWeight_rec; fgVarNamesMap["kMCdeltaeta_rec"] = kMCdeltaeta_rec; fgVarNamesMap["kMCCosChi_randomPhi_trans_rec"] = - kMCCosChi_randomPhi_trans_rec; + kMCCosChi_randomPhi_trans_rec; fgVarNamesMap["kMCWeight_randomPhi_trans_rec"] = - kMCWeight_randomPhi_trans_rec; + kMCWeight_randomPhi_trans_rec; fgVarNamesMap["kMCCosChi_randomPhi_trans_gen"] = - kMCCosChi_randomPhi_trans_gen; + kMCCosChi_randomPhi_trans_gen; fgVarNamesMap["kMCWeight_randomPhi_trans_gen"] = - kMCWeight_randomPhi_trans_gen; + kMCWeight_randomPhi_trans_gen; fgVarNamesMap["kMCParticleWeight"] = kMCParticleWeight; fgVarNamesMap["kMCCosTheta"] = kMCCosTheta; fgVarNamesMap["kMCdeltaphi"] = kMCdeltaphi; @@ -2731,7 +2746,7 @@ void VarManager::SetDefaultVarNames() { fgVarNamesMap["kVertexingTauzProjected"] = kVertexingTauzProjected; fgVarNamesMap["kVertexingTauxyProjected"] = kVertexingTauxyProjected; fgVarNamesMap["kVertexingTauxyProjectedPoleJPsiMass"] = - kVertexingTauxyProjectedPoleJPsiMass; + kVertexingTauxyProjectedPoleJPsiMass; fgVarNamesMap["kVertexingTauxyProjectedNs"] = kVertexingTauxyProjectedNs; fgVarNamesMap["kVertexingTauxyzProjected"] = kVertexingTauxyzProjected; fgVarNamesMap["kMCVertexingTauzProjected"] = kVertexingTauzProjected; @@ -3075,11 +3090,12 @@ void VarManager::SetDefaultVarNames() { //__________________________________________________________________ bool VarManager::computeBarrelAssocTimeCompat( - float trackTime, float trackTimeRes, bool timeResIsRange, - bool isPVContributor, int64_t origBC, float origCollTime, - int origNumContrib, int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float *values) { + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float* values) +{ // // Mirrors the time-based association of // Common/Core/CollisionAssociation.h::runAssocWithTime for central barrel @@ -3104,10 +3120,10 @@ bool VarManager::computeBarrelAssocTimeCompat( // NOTE: the associator uses the raw trackTime here also for PV // contributors const int64_t bcOffsetMax = static_cast( - bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); + bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); const int64_t trackBCCache = - static_cast(static_cast(origBC) + - static_cast(trackTime) / BunchSpacingNS); + static_cast(static_cast(origBC) + + static_cast(trackTime) / BunchSpacingNS); if (std::abs(trackBCCache - collBC) > bcOffsetMax) { return false; } @@ -3122,7 +3138,7 @@ bool VarManager::computeBarrelAssocTimeCompat( float tTrack = trackTime; float tTrackRes = trackTimeRes; if (pvMode) { - tTrack = origCollTime; // time of the ORIGINAL collision + tTrack = origCollTime; // time of the ORIGINAL collision tTrackRes = static_cast(BunchSpacingNS); // 1 BC } @@ -3130,7 +3146,7 @@ bool VarManager::computeBarrelAssocTimeCompat( const int64_t bcOffset = origBC - collBC; const float collTimeRes2 = collTimeRes * collTimeRes; const float deltaTime = - tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); + tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); float threshold = 0.f; if (pvMode) { threshold = tTrackRes; // margin NOT applied @@ -3138,12 +3154,12 @@ bool VarManager::computeBarrelAssocTimeCompat( threshold = tTrackRes + nSigma * std::sqrt(collTimeRes2) + timeMargin; } else { threshold = - nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; + nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; } values[kTrackAssocDeltaTime] = deltaTime; values[kTrackAssocTimeThreshold] = threshold; values[kTrackAssocDeltaTimeNorm] = - (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; + (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; return std::abs(deltaTime) < threshold; } diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index f10a712f92e..7b9284fc178 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -83,13 +83,14 @@ #include using SMatrix55 = - ROOT::Math::SMatrix>; + ROOT::Math::SMatrix>; using SMatrix5 = ROOT::Math::SVector; using Vec3D = ROOT::Math::SVector; //_________________________________________________________________________ -class VarManager : public TObject { -public: +class VarManager : public TObject +{ + public: // map the information contained in the objects passed to the Fill functions enum ObjTypes { // NOTE: Elements containing "Reduced" in their name refer strictly to @@ -124,8 +125,8 @@ class VarManager : public TObject { TrackCov = BIT(1), TrackExtra = BIT(2), TrackPID = BIT( - 3), // used for basic PID properties (needed such that we can subscribe - // to a minimal set of PID tables): e,pi,K,p for TPC and TOF + 3), // used for basic PID properties (needed such that we can subscribe + // to a minimal set of PID tables): e,pi,K,p for TPC and TOF TrackPIDExtra = BIT(4), // extra PID information TrackDCA = BIT(5), TrackSelection = BIT(6), @@ -146,11 +147,11 @@ class VarManager : public TObject { TrackTPCPID = BIT(21), TrackMFT = BIT(22), ReducedTrackCollInfo = - BIT(23), // TODO: remove it once new reduced data tables are produced - // for dielectron with ReducedTracksBarrelInfo + BIT(23), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo ReducedMuonCollInfo = - BIT(24), // TODO: remove it once new reduced data tables are produced - // for dielectron with ReducedTracksBarrelInfo + BIT(24), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo MuonRealign = BIT(25), MuonCovRealign = BIT(26), MFTCov = BIT(27), @@ -203,9 +204,9 @@ class VarManager : public TObject { enum EMCalClusterFilteringBits { kEMCalClusterIsMatched = - 0, // cluster has at least one matched track (from EMCALMatchedTracks) + 0, // cluster has at least one matched track (from EMCALMatchedTracks) kEMCalClusterUserCutsBits = - 1 // first bit for the user EMCal cluster selections + 1 // first bit for the user EMCal cluster selections }; // NOLINTNEXTLINE(readability-enum-initial-value) @@ -235,24 +236,24 @@ class VarManager : public TObject { // be used to perform random selections at the collision // level) kIsPhysicsSelection, - kIsTVXTriggered, // Is trigger TVX - kIsNoTFBorder, // No time frame border - kIsNoITSROFBorder, // No ITS read out frame border (from event selection) + kIsTVXTriggered, // Is trigger TVX + kIsNoTFBorder, // No time frame border + kIsNoITSROFBorder, // No ITS read out frame border (from event selection) kIsNoITSROFBorderRecomputed, // No ITS read out frame border, computed here kIsNoSameBunch, // No collisions with same T0 BC - kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} - // and z_{PV FT0A-C} - kIsVertexITSTPC, // At least one ITS-TPC track - kIsVertexTOFmatched, // At least one TOF-matched track - kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame - // border (from event selection) - kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below - // maximum allowed value - kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are - // below maximum allowed values - kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are - // below maximum allowed values - kIsTriggerZNAZNC, // trigger ZNA && ZNC + kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} + // and z_{PV FT0A-C} + kIsVertexITSTPC, // At least one ITS-TPC track + kIsVertexTOFmatched, // At least one TOF-matched track + kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame + // border (from event selection) + kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below + // maximum allowed value + kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are + // below maximum allowed values + kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are + // below maximum allowed values + kIsTriggerZNAZNC, // trigger ZNA && ZNC kIsINT7, kIsEMC7, kIsINT7inMUON, @@ -383,10 +384,10 @@ class VarManager : public TObject { kQ1Y0B, kQ1X0C, kQ1Y0C, - kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power - // 0), sub-event A - kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power - // 0), sub-event A + kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power + // 0), sub-event A + kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power + // 0), sub-event A kQ2X0APOS, // q-vector (e.g. from TPC) with x component (harmonic 2 and // power 1), Pos. TPC kQ2Y0APOS, // q-vector (e.g. from TPC) with y component (harmonic 2 and @@ -536,15 +537,15 @@ class VarManager : public TObject { kV2ME_EP, kWV2ME_SP, kWV2ME_EP, - kTwoR2SP1, // Scalar product resolution of event1 for ME technique - kTwoR2SP2, // Scalar product resolution of event2 for ME technique - kTwoR2EP1, // Event plane resolution of event2 for ME technique - kTwoR2EP2, // Event plane resolution of event2 for ME technique - kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique - kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique - kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique - kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME - // technique + kTwoR2SP1, // Scalar product resolution of event1 for ME technique + kTwoR2SP2, // Scalar product resolution of event2 for ME technique + kTwoR2EP1, // Event plane resolution of event2 for ME technique + kTwoR2EP2, // Event plane resolution of event2 for ME technique + kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique + kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique + kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique + kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME + // technique kCos2DeltaPhiME_FT0C, // Cos(2*Delta phi) of VM to FT0C event plane for ME // technique kCos2DeltaPhiME_FT0A, // Cos(2*Delta phi) of VM to FT0A event plane for ME @@ -552,8 +553,8 @@ class VarManager : public TObject { kA2EPME_TPC, // A2 of VM to TPC event plane for ME technique kA2EPME_FT0C, // A2 of VM to FT0C event plane for ME technique kA2EPME_FT0A, // A2 of VM to FT0A event plane for ME technique - kNPairsPerEvent, // number of pairs per event in same-event or mixed-event - // pairing + kNPairsPerEvent, // number of pairs per event in same-event or mixed-event + // pairing kInteractionRate, // Variables for event mixing with cumulant @@ -619,8 +620,8 @@ class VarManager : public TObject { kTrackTime, kTrackTimeRes, kTrackTimeResRelative, - kTrackAssocDeltaTime, // track time - time of the associated collision (BC - // offset included), ns + kTrackAssocDeltaTime, // track time - time of the associated collision (BC + // offset included), ns kTrackAssocTimeThreshold, // time-compatibility threshold of the // track-to-collision associator (margin // included), ns @@ -689,10 +690,10 @@ class VarManager : public TObject { kTOFnSigmaKa, kTOFnSigmaPr, kTrackTimeResIsRange, // Gaussian or range (see Framework/DataTypes) - kPVContributor, // This track has contributed to the collision vertex fit - // (see Framework/DataTypes) - kOrphanTrack, // Track has no association with any collision vertex (see - // Framework/DataTypes) + kPVContributor, // This track has contributed to the collision vertex fit + // (see Framework/DataTypes) + kOrphanTrack, // Track has no association with any collision vertex (see + // Framework/DataTypes) kIsAmbiguous, kIsLegFromGamma, kIsLegFromK0S, @@ -702,7 +703,7 @@ class VarManager : public TObject { kIsProtonFromLambdaAndAntiLambda, kIsDalitzLeg, // Up to 8 dalitz selections kBarrelNAssocsInBunch = - kIsDalitzLeg + 8, // number of in bunch collision associations + kIsDalitzLeg + 8, // number of in bunch collision associations kBarrelNAssocsOutOfBunch, // number of out of bunch collision associations kEMCalEnergy, // EMCal cluster energy kEMCalCoreEnergy, // EMCal cluster core energy @@ -718,11 +719,11 @@ class VarManager : public TObject { // bad channel kEMCalNLM, // number of local maxima of the EMCal cluster kEMCalDefinition, // EMCal cluster definition - kEMCalEoverP, // EMCal cluster energy over matched track momentum - kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the - // track - kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the - // track + kEMCalEoverP, // EMCal cluster energy over matched track momentum + kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the + // track + kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the + // track kNBarrelTrackVariables, // Muon track variables @@ -1272,7 +1273,10 @@ class VarManager : public TObject { kDplusToPiKPi }; - enum EventFilters { kDoubleGap = 0, kSingleGapA, kSingleGapC, kITSUPCMode }; + enum EventFilters { kDoubleGap = 0, + kSingleGapA, + kSingleGapC, + kITSUPCMode }; enum MuonExtrapolation { // Index used to set different options for Muon propagation @@ -1285,17 +1289,19 @@ class VarManager : public TObject { static TString fgVariableNames[kNVars]; // variable names static TString fgVariableUnits[kNVars]; // variable units static std::map - fgVarNamesMap; // key: variables short name, value: order in the Variables - // enum + fgVarNamesMap; // key: variables short name, value: order in the Variables + // enum static void SetDefaultVarNames(); - static void SetUseVariable(int var) { + static void SetUseVariable(int var) + { if (var >= 0 && var < kNVars) { fgUsedVars[var] = kTRUE; } SetVariableDependencies(); } - static void SetUseVars(const bool *usedVars) { + static void SetUseVars(const bool* usedVars) + { for (int i = 0; i < kNVars; ++i) { if (usedVars[i]) { fgUsedVars[i] = true; // overwrite only the variables that are being @@ -1305,12 +1311,14 @@ class VarManager : public TObject { } SetVariableDependencies(); } - static void SetUseVars(const std::vector &usedVars) { - for (auto const &var : usedVars) { + static void SetUseVars(const std::vector& usedVars) + { + for (auto const& var : usedVars) { fgUsedVars[var] = true; } } - static bool GetUsedVar(int var) { + static bool GetUsedVar(int var) + { if (var >= 0 && var < kNVars) { return fgUsedVars[var]; } @@ -1318,13 +1326,14 @@ class VarManager : public TObject { } // Flag to set PV recalculation via KF - static void SetPVrecalculationKF(const bool pvRecalKF) { + static void SetPVrecalculationKF(const bool pvRecalKF) + { fgPVrecalKF = pvRecalKF; } // Setup the collision system - static void SetCollisionSystem(const TString &system, float energy); - static void SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif); + static void SetCollisionSystem(const TString& system, float energy); + static void SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif); static void SetMagneticField(float magField) { fgMagField = magField; } @@ -1334,13 +1343,15 @@ class VarManager : public TObject { static float GetMatchingPlane() { return fgzMatching; } // Set z shift for forward tracks - static void SetZShift(float z) { + static void SetZShift(float z) + { fgzShiftFwd = z; fgUseTopBottomShift = false; } // Set x, y and z shifts for forward tracks - static void Set3DShift(float x, float y, float z) { + static void Set3DShift(float x, float y, float z) + { fgxShiftFwd = x; fgyShiftFwd = y; fgzShiftFwd = z; @@ -1351,7 +1362,8 @@ class VarManager : public TObject { // tracks Top shifts are stored in fgx/y/zShiftFwd; bottom shifts in // fgx/y/zShiftFwdBottom static void SetTopBottom3DShift(float xTop, float yTop, float zTop, - float xBottom, float yBottom, float zBottom) { + float xBottom, float yBottom, float zBottom) + { fgxShiftFwd = xTop; fgyShiftFwd = yTop; fgzShiftFwd = zTop; @@ -1361,8 +1373,9 @@ class VarManager : public TObject { fgUseTopBottomShift = true; } - static void GetFwdShiftForY(float y, float &xShift, float &yShift, - float &zShift) { + static void GetFwdShiftForY(float y, float& xShift, float& yShift, + float& zShift) + { if (fgUseTopBottomShift && y < 0.f) { xShift = fgxShiftFwdBottom; yShift = fgyShiftFwdBottom; @@ -1375,7 +1388,8 @@ class VarManager : public TObject { } // Setup the 2 prong KFParticle - static void SetupTwoProngKFParticle(float magField) { + static void SetupTwoProngKFParticle(float magField) + { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1386,7 +1400,8 @@ class VarManager : public TObject { static void SetupTwoProngDCAFitter(float magField, bool propagateToPCA, float maxR, float maxDZIni, float minParamChange, - float minRelChi2Change, bool useAbsDCA) { + float minRelChi2Change, bool useAbsDCA) + { fgFitterTwoProngBarrel.setBz(magField); fgFitterTwoProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterTwoProngBarrel.setMaxR(maxR); @@ -1401,7 +1416,8 @@ class VarManager : public TObject { static void SetupTwoProngFwdDCAFitter(float magField, bool propagateToPCA, float maxR, float minParamChange, float minRelChi2Change, - bool useAbsDCA) { + bool useAbsDCA) + { fgFitterTwoProngFwd.setBz(magField); fgFitterTwoProngFwd.setPropagateToPCA(propagateToPCA); fgFitterTwoProngFwd.setMaxR(maxR); @@ -1411,18 +1427,21 @@ class VarManager : public TObject { fgUsedKF = false; } // Use MatLayerCylSet to correct MCS in fwdtrack propagation - static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet *m) { + static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet* m) + { fgFitterTwoProngFwd.setTGeoMat(false); fgFitterTwoProngFwd.setMatLUT(m); } // Use GeometryManager to correct MCS in fwdtrack propagation static void SetupTGeoFwdDCAFitter() { fgFitterTwoProngFwd.setTGeoMat(true); } // No material budget in fwdtrack propagation - static void SetupFwdDCAFitterNoCorr() { + static void SetupFwdDCAFitterNoCorr() + { fgFitterTwoProngFwd.setTGeoMat(false); } // Setup the 3 prong KFParticle - static void SetupThreeProngKFParticle(float magField) { + static void SetupThreeProngKFParticle(float magField) + { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1431,7 +1450,8 @@ class VarManager : public TObject { static void SetupThreeProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, - float minRelChi2Change, bool useAbsDCA) { + float minRelChi2Change, bool useAbsDCA) + { fgFitterThreeProngBarrel.setBz(magField); fgFitterThreeProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterThreeProngBarrel.setMaxR(maxR); @@ -1442,7 +1462,8 @@ class VarManager : public TObject { } // Setup the 4 prong KFParticle - static void SetupFourProngKFParticle(float magField) { + static void SetupFourProngKFParticle(float magField) + { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1451,7 +1472,8 @@ class VarManager : public TObject { static void SetupFourProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, - float minRelChi2Change, bool useAbsDCA) { + float minRelChi2Change, bool useAbsDCA) + { fgFitterFourProngBarrel.setBz(magField); fgFitterFourProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterFourProngBarrel.setMaxR(maxR); @@ -1461,75 +1483,77 @@ class VarManager : public TObject { fgUsedKF = false; } - static auto getEventPlane(int harm, float qnxa, float qnya) { + static auto getEventPlane(int harm, float qnxa, float qnya) + { // Compute event plane angle from qn vector components for the sub-event A return (1.0 / harm) * TMath::ATan2(qnya, qnxa); }; static float getDeltaPsiInRange(float psi1, float psi2, - unsigned int harmonic) { + unsigned int harmonic) + { return RecoDecay::constrainAngle( - psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); + psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); } template static o2::dataformats::VertexBase - RecalculatePrimaryVertex(T const &track0, T const &track1, - const T1 &collision); + RecalculatePrimaryVertex(T const& track0, T const& track1, + const T1& collision); static std::tuple - BimodalityCoefficientUnbinned(const std::vector &data); + BimodalityCoefficientUnbinned(const std::vector& data); static std::tuple - BimodalityCoefficientAndNPeaks(const std::vector &data, float binWidth, - int trim = 0, float min = -15.0, - float max = 15.0); + BimodalityCoefficientAndNPeaks(const std::vector& data, float binWidth, + int trim = 0, float min = -15.0, + float max = 15.0); template - static o2::track::TrackParCovFwd FwdToTrackPar(const T &track, const C &cov); + static o2::track::TrackParCovFwd FwdToTrackPar(const T& track, const C& cov); template static o2::dataformats::GlobalFwdTrack - PropagateMuon(const T &muon, const C &collision, int endPoint = kToVertex); + PropagateMuon(const T& muon, const C& collision, int endPoint = kToVertex); template - static o2::track::TrackParCovFwd PropagateFwd(const T &track, const C &cov, + static o2::track::TrackParCovFwd PropagateFwd(const T& track, const C& cov, float z); 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 FillBC(T const &bc, float *values = nullptr); + static void FillBC(T const& bc, float* values = nullptr); template - static void FillEvent(T const &event, float *values = nullptr); + static void FillEvent(T const& event, float* values = nullptr); template - static void FillEventTracks(T const &tracks, float *values = nullptr); + static void FillEventTracks(T const& tracks, float* values = nullptr); template - static void FillTimeFrame(T const &tfTable, float *values = nullptr); + static void FillTimeFrame(T const& tfTable, float* values = nullptr); template - static void FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, - float *values = nullptr); + static void FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, + float* values = nullptr); template - static void FillTwoEvents(T const &ev1, T const &ev2, - float *values = nullptr); + static void FillTwoEvents(T const& ev1, T const& ev2, + float* values = nullptr); template - static void FillTwoMixEvents(T1 const &ev1, T1 const &ev2, T2 const &tracks1, - T2 const &tracks2, float *values = nullptr); + static void FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& tracks1, + T2 const& tracks2, float* values = nullptr); template - static void FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, - float *values = nullptr); + static void FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, + float* values = nullptr); template - static void FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, - T const &h_v22ev2, T const &h_v24ev2, - T1 const &t1, T2 const &t2, - float *values = nullptr); + static void FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, + T const& h_v22ev2, T const& h_v24ev2, + T1 const& t1, T2 const& t2, + float* values = nullptr); template - static void FillTrack(T const &track, float *values = nullptr); + static void FillTrack(T const& track, float* values = nullptr); template - static void FillPhoton(T const &track, float *values = nullptr); + static void FillPhoton(T const& track, float* values = nullptr); template - static void FillTrackEMCal(T const &cluster, float trackP = -1.0f, + static void FillTrackEMCal(T const& cluster, float trackP = -1.0f, float deltaEta = -999.0f, float deltaPhi = -999.0f, - float *values = nullptr); + float* values = nullptr); template - static void FillTrackCollision(T const &track, C const &collision, - float *values = nullptr); + static void FillTrackCollision(T const& track, C const& collision, + float* values = nullptr); // Re-evaluation of the time compatibility of a (barrel track, collision) // association, mirroring // Common/Core/CollisionAssociation.h::runAssocWithTime. Fills @@ -1540,196 +1564,197 @@ class VarManager : public TObject { // used at skimming time (timeMargin and nSigma may be smaller in order to // tighten the association at analysis level). static bool computeBarrelAssocTimeCompat( - float trackTime, float trackTimeRes, bool timeResIsRange, - bool isPVContributor, int64_t origBC, float origCollTime, - int origNumContrib, int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float *values = nullptr); + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float* values = nullptr); // Same as above for DQ skimmed tables: track = // ReducedTracks+ReducedTracksBarrel, collision/origCollision = // ReducedEvents+ReducedEventsExtended template static bool isBarrelAssocTimeCompatible( - T const &track, C const &collision, C const &origCollision, float nSigma, - float timeMargin, int bcWindowForOneSigma, int usePVAssociation, - int maxPvContribLowMult, float *values = nullptr); + T const& track, C const& collision, C const& origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float* values = nullptr); template - static void FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, - C const &collision, float *values = nullptr); + static void FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, + C const& collision, float* values = nullptr); template static void - FillTrackCollisionMC(T1 const &track, const std::array &collPos, - float massHyp = -1., float *values = nullptr); + FillTrackCollisionMC(T1 const& track, const std::array& collPos, + float massHyp = -1., float* values = nullptr); template - static void FillTrackCollisionMatCorr(T const &track, C const &collision, - M const &materialCorr, - P const &propagator, - float *values = nullptr); + static void FillTrackCollisionMatCorr(T const& track, C const& collision, + M const& materialCorr, + P const& propagator, + float* values = nullptr); template - static void FillTrackMC(const U &mcStack, T const &track, - float *values = nullptr); + static void FillTrackMC(const U& mcStack, T const& track, + float* values = nullptr); template static void - FillEnergyCorrelatorsMC(T const &track, T1 const &t1, float *values = nullptr, - float Translow = 1. / 3, float Transhigh = 2. / 3, - float Accweight = 1.0f); + FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values = nullptr, + float Translow = 1. / 3, float Transhigh = 2. / 3, + float Accweight = 1.0f); template - static void FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, - const C &collision, - float *values = nullptr); + static void FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, + const C& collision, + float* values = nullptr); template - static void FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, - const C &collision, float *values = nullptr); + static void FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, + const C& collision, float* values = nullptr); template - static void FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, - const C &collision, C2 const &mftcov, - float *values = nullptr); + static void FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, + const C& collision, C2 const& mftcov, + float* values = nullptr); template - static void FillPair(T1 const &t1, T2 const &t2, float *values = nullptr); + static void FillPair(T1 const& t1, T2 const& t2, float* values = nullptr); template - static void FillPairRotation(T1 const &t1, T2 const &t2, int rotation, - float *values = nullptr); + static void FillPairRotation(T1 const& t1, T2 const& t2, int rotation, + float* values = nullptr); template - static void FillPairRotation_ME(T const &t1, T const &t2, int rotation, - float *values = nullptr); + static void FillPairRotation_ME(T const& t1, T const& t2, int rotation, + float* values = nullptr); template - static void FillPairCollision(C const &collision, T1 const &t1, T2 const &t2, - float *values = nullptr); + static void FillPairCollision(C const& collision, T1 const& t1, T2 const& t2, + float* values = nullptr); template - static void FillPairCollisionMatCorr(C const &collision, T1 const &t1, - T2 const &t2, M const &materialCorr, - P const &propagator, - float *values = nullptr); + static void FillPairCollisionMatCorr(C const& collision, T1 const& t1, + T2 const& t2, M const& materialCorr, + P const& propagator, + float* values = nullptr); template static void - FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, float *values = nullptr, - PairCandidateType pairType = kTripleCandidateToEEPhoton); + FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, + PairCandidateType pairType = kTripleCandidateToEEPhoton); template - static void FillPairME(T1 const &t1, T2 const &t2, float *values = nullptr); + static void FillPairME(T1 const& t1, T2 const& t2, float* values = nullptr); template - static void FillPairMEAcrossTFs(T const &t1, T const &t2, - float *values = nullptr); + static void FillPairMEAcrossTFs(T const& t1, T const& t2, + float* values = nullptr); template - static void FillPairMC(T1 const &t1, T2 const &t2, float *values = nullptr); + static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr); template - static void FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, - float *values = nullptr); + static void FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, + float* values = nullptr); template - static void FillQuadMC(T1 const &dilepton, T2 const &track1, T2 const &track2, - float *values = nullptr); + static void FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, + float* values = nullptr); template - static void FillPairVertexing(C const &collision, T const &t1, T const &t2, - float *values = nullptr); + static void FillPairVertexing(C const& collision, T const& t1, T const& t2, + float* values = nullptr); template static void FillPairVertexingRecomputePV( - C const & /*collision*/, T const &t1, T const &t2, - const o2::dataformats::VertexBase &pvRefitted, float *values = nullptr); + C const& /*collision*/, T const& t1, T const& t2, + const o2::dataformats::VertexBase& pvRefitted, float* values = nullptr); template - static void FillTripletVertexing(C const &collision, T const &t1, T const &t2, - T const &t3, PairCandidateType tripletType, - float *values = nullptr); + static void FillTripletVertexing(C const& collision, T const& t1, T const& t2, + T const& t3, PairCandidateType tripletType, + float* values = nullptr); template - static void FillDileptonTrackVertexing(C const &collision, T1 const &lepton1, - T1 const &lepton2, T1 const &track, - float *values); + static void FillDileptonTrackVertexing(C const& collision, T1 const& lepton1, + T1 const& lepton2, T1 const& track, + float* values); template - static void FillDileptonHadron(T1 const &dilepton, T2 const &hadron, - float *values = nullptr, + static void FillDileptonHadron(T1 const& dilepton, T2 const& hadron, + float* values = nullptr, float hadronMass = 0.0f); template static void FillEnergyCorrelatorTriple( - C const &collision, T1 const &lepton1, T2 const &lepton2, - T3 const &hadron, float *values = nullptr, float Translow = 1. / 3, - float Transhigh = 2. / 3, bool applyFitMass = false, - float sidebandMass = 0.0f, float weight = 1.0f); + C const& collision, T1 const& lepton1, T2 const& lepton2, + T3 const& hadron, float* values = nullptr, float Translow = 1. / 3, + float Transhigh = 2. / 3, bool applyFitMass = false, + float sidebandMass = 0.0f, float weight = 1.0f); template static void FillEnergyCorrelatorsUnfoldingTriple( - T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, - T5 const &t1, float *values = nullptr, bool applyFitMass = false, - float Effweight_rec = 1.f, float Accweight_gen = 1.f, - float Translow = 1. / 3, float Transhigh = 2. / 3); + T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, + T5 const& t1, float* values = nullptr, bool applyFitMass = false, + float Effweight_rec = 1.f, float Accweight_gen = 1.f, + float Translow = 1. / 3, float Transhigh = 2. / 3); template - static void FillDileptonPhoton(T1 const &dilepton, T2 const &photon, - float *values = nullptr); + static void FillDileptonPhoton(T1 const& dilepton, T2 const& photon, + float* values = nullptr); template - static void FillHadron(T const &hadron, float *values = nullptr, + static void FillHadron(T const& hadron, float* values = nullptr, float hadronMass = 0.0f); template - static void FillSingleDileptonCharmHadron(Cand const &candidate, H hfHelper, - T &bdtScoreCharmHad, - float *values = nullptr); + static void FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper, + T& bdtScoreCharmHad, + float* values = nullptr); template - static void FillDileptonCharmHadron(DQ const &dilepton, HF const &charmHadron, - H hfHelper, T &bdtScoreCharmHad, - float *values = nullptr); + static void FillDileptonCharmHadron(DQ const& dilepton, HF const& charmHadron, + H hfHelper, T& bdtScoreCharmHad, + float* values = nullptr); template static void FillQVectorFromGFW( - C const &collision, A const &compA11, A const &compB11, A const &compC11, - A const &compA21, A const &compB21, A const &compC21, A const &compA31, - A const &compB31, A const &compC31, A const &compA41, A const &compB41, - A const &compC41, A const &compA23, A const &compA42, float S10A = 1.0, - float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, - float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, - float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, - float *values = nullptr); + C const& collision, A const& compA11, A const& compB11, A const& compC11, + A const& compA21, A const& compB21, A const& compC21, A const& compA31, + A const& compB31, A const& compC31, A const& compA41, A const& compB41, + A const& compC41, A const& compA23, A const& compA42, float S10A = 1.0, + float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, + float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, + float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, + float* values = nullptr); template - static void FillQVectorFromCentralFW(C const &collision, - float *values = nullptr); + static void FillQVectorFromCentralFW(C const& collision, + float* values = nullptr); template - static void FillNewQVectorFromCentralFW(C const &collision, - float *values = nullptr); + static void FillNewQVectorFromCentralFW(C const& collision, + float* values = nullptr); template - static void FillSpectatorPlane(C const &collision, float *values = nullptr); + static void FillSpectatorPlane(C const& collision, float* values = nullptr); template - static void FillPairVn(T1 const &t1, T2 const &t2, float *values = nullptr); + static void FillPairVn(T1 const& t1, T2 const& t2, float* values = nullptr); template - static void FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, - T3 const &hadron2, - float *values = nullptr); + static void FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, + T3 const& hadron2, + float* values = nullptr); template static void - FillDileptonTrackTrackVertexing(C const &collision, T1 const &lepton1, - T1 const &lepton2, T1 const &track1, - T1 const &track2, float *values); + FillDileptonTrackTrackVertexing(C const& collision, T1 const& lepton1, + T1 const& lepton2, T1 const& track1, + T1 const& track2, float* values); template - static void FillZDC(const T &zdc, float *values = nullptr); + static void FillZDC(const T& zdc, float* values = nullptr); template - static void FillBdtScore(const T &bdtScore, float *values = nullptr); + static void FillBdtScore(const T& bdtScore, float* values = nullptr); template - static void FillFIT(const T1 &bc, const T2 &bcs, const T3 &ft0s, - const T4 &fv0as, const T5 &fdds, float *values = nullptr); + static void FillFIT(const T1& bc, const T2& bcs, const T3& ft0s, + const T4& fv0as, const T5& fdds, float* values = nullptr); template - static void FillPairAlice3(T1 const &t1, T2 const &t2, - float *values = nullptr); + static void FillPairAlice3(T1 const& t1, T2 const& t2, + float* values = nullptr); template - static void FillEventAlice3(T const &event, float *values = nullptr); + static void FillEventAlice3(T const& event, float* values = nullptr); template - static void FillTrackAlice3(T const &track, float *values = nullptr); + static void FillTrackAlice3(T const& track, float* values = nullptr); template - static void FillResolutions(M const &mcTrack, T const &track, - float *values = nullptr); + static void FillResolutions(M const& mcTrack, T const& track, + float* values = nullptr); template - static void FillPairVertexingAlice3(C const &collision, T const &t1, - T const &t2, bool propToSV = false, - float *values = nullptr); + static void FillPairVertexingAlice3(C const& collision, T const& t1, + T const& t2, bool propToSV = false, + float* values = nullptr); template static void FillTripletVertexingALICE3( - C const &collision, T const &t1, T const &t2, T const &t3, - VarManager::PairCandidateType tripletType, float *values = nullptr); + C const& collision, T const& t1, T const& t2, T const& t3, + VarManager::PairCandidateType tripletType, float* values = nullptr); - static void SetCalibrationObject(CalibObjects calib, TObject *obj) { + static void SetCalibrationObject(CalibObjects calib, TObject* obj) + { fgCalibs[calib] = obj; // Check whether all the needed objects for TPC postcalibration are // available @@ -1753,7 +1778,8 @@ class VarManager : public TObject { } } - static void SetCalibrationType(int type, bool useInterpolation = true) { + static void SetCalibrationType(int type, bool useInterpolation = true) + { if (type < 0 || type > 2) { LOG(fatal) << "Invalid calibration type. Must be 0, 1, or 2."; } @@ -1762,29 +1788,33 @@ class VarManager : public TObject { } static double ComputePIDcalibration(int species, double nSigmaValue); - static void SetEfficiencyObject(int type, TObject *obj); - static void FillEfficiency(float *values = nullptr); - static void SetPhiMap(TObject *h1, TObject *h2, bool option); + static void SetEfficiencyObject(int type, TObject* obj); + static void FillEfficiency(float* values = nullptr); + static void SetPhiMap(TObject* h1, TObject* h2, bool option); static double SampleRotationPhi(double pT, double eta, int charge); - static TObject *GetCalibrationObject(CalibObjects calib) { + static TObject* GetCalibrationObject(CalibObjects calib) + { auto obj = fgCalibs.find(calib); if (obj == fgCalibs.end()) { return nullptr; } return obj->second; } - static void SetTPCInterSectorBoundary(float boundarySize) { + static void SetTPCInterSectorBoundary(float boundarySize) + { fgTPCInterSectorBoundary = boundarySize; } static void SetITSROFBorderselection(int bias, int length, int marginLow, - int marginHigh) { + int marginHigh) + { fgITSROFbias = bias; fgITSROFlength = length; fgITSROFBorderMarginLow = marginLow; fgITSROFBorderMarginHigh = marginHigh; } - static void SetSORandEOR(uint64_t sor, uint64_t eor) { + static void SetSORandEOR(uint64_t sor, uint64_t eor) + { fgSOR = sor; fgEOR = eor; } @@ -1793,11 +1823,11 @@ class VarManager : public TObject { ~VarManager() override; static float - fgValues[kNVars]; // array holding all variables computed during analysis + fgValues[kNVars]; // array holding all variables computed during analysis static void ResetValues(int startValue = 0, int endValue = kNVars, - float *values = nullptr); + float* values = nullptr); -private: + private: static bool fgUsedVars[kNVars]; // holds flags for when the corresponding // variable is needed (e.g., in the histogram // manager, in cuts, mixing handler, etc.) @@ -1819,32 +1849,33 @@ class VarManager : public TObject { static float fgMassofCollidingParticle; // mass of the colliding particle static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the // TPC outer radius, in cm - static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) - static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) - static int fgITSROFBorderMarginLow; // ITS ROF border low margin - static int fgITSROFBorderMarginHigh; // ITS ROF border high margin - static uint64_t fgSOR; // Timestamp for start of run - static uint64_t fgEOR; // Timestamp for end of run + static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) + static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) + static int fgITSROFBorderMarginLow; // ITS ROF border low margin + static int fgITSROFBorderMarginHigh; // ITS ROF border high margin + static uint64_t fgSOR; // Timestamp for start of run + static uint64_t fgEOR; // Timestamp for end of run static ROOT::Math::PxPyPzEVector - fgBeamA; // beam from A-side 4-momentum vector + fgBeamA; // beam from A-side 4-momentum vector static ROOT::Math::PxPyPzEVector - fgBeamC; // beam from C-side 4-momentum vector + fgBeamC; // beam from C-side 4-momentum vector // static void FillEventDerived(float* values = nullptr); - static void FillTrackDerived(float *values = nullptr); + static void FillTrackDerived(float* values = nullptr); template - static auto getRotatedCovMatrixXX(const T &matrix, U phi, V theta); - template static KFPTrack createKFPTrackFromTrack(const T &track); + static auto getRotatedCovMatrixXX(const T& matrix, U phi, V theta); template - static KFPTrack createKFPFwdTrackFromFwdTrack(const T &muon); + static KFPTrack createKFPTrackFromTrack(const T& track); template - static KFPVertex createKFPVertexFromCollision(const T &collision); - static float calculateCosPA(const KFParticle &kfp, const KFParticle &PV); + static KFPTrack createKFPFwdTrackFromFwdTrack(const T& muon); + template + static KFPVertex createKFPVertexFromCollision(const T& collision); + static float calculateCosPA(const KFParticle& kfp, const KFParticle& PV); template - static float calculatePhiV(const T1 &t1, const T2 &t2); + static float calculatePhiV(const T1& t1, const T2& t2); template - static float LorentzTransformJpsihadroncosChi(const TString &Option, - const T1 &v1, const T2 &v2); + static float LorentzTransformJpsihadroncosChi(const TString& Option, + const T1& v1, const T2& v2); static o2::vertexing::DCAFitterN<2> fgFitterTwoProngBarrel; static o2::vertexing::DCAFitterN<3> fgFitterThreeProngBarrel; @@ -1853,38 +1884,39 @@ class VarManager : public TObject { static o2::vertexing::FwdDCAFitterN<3> fgFitterThreeProngFwd; static o2::globaltracking::MatchGlobalFwd mMatching; - static std::map - fgCalibs; // map of calibration histograms + static std::map + fgCalibs; // map of calibration histograms static std::array - fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton + fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton static int - fgCalibrationType; // 0 - no calibration, 1 - calibration vs - // (TPCncls,pIN,eta) typically for pp, 2 - calibration - // vs (eta,nPV,nLong,tLong) typically for PbPb + fgCalibrationType; // 0 - no calibration, 1 - calibration vs + // (TPCncls,pIN,eta) typically for pp, 2 - calibration + // vs (eta,nPV,nLong,tLong) typically for PbPb static bool fgUseInterpolatedCalibration; // use interpolated calibration // histograms (default: true) static int fgEfficiencyType; // type of efficiency correction to apply - static TObject *fgEfficiencyHist; // histogram for efficiency correction + static TObject* fgEfficiencyHist; // histogram for efficiency correction - static TObject *fgPosiPhiMap; // phi map to correct track rotation - static TObject *fgNegaPhiMap; + static TObject* fgPosiPhiMap; // phi map to correct track rotation + static TObject* fgNegaPhiMap; static bool fgUsePhiCorrection; - VarManager &operator=(const VarManager &c); - VarManager(const VarManager &c); + VarManager& operator=(const VarManager& c); + VarManager(const VarManager& c); }; template -o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T &track, - const C &cov) { +o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T& track, + const C& cov) +{ double chi2 = track.chi2(); SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()); - std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), - cov.cPhiX(), cov.cPhiY(), cov.cPhiPhi(), - cov.cTglX(), cov.cTglY(), cov.cTglPhi(), - cov.cTglTgl(), cov.c1PtX(), cov.c1PtY(), + std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), + cov.cPhiX(), cov.cPhiY(), cov.cPhiPhi(), + cov.cTglX(), cov.cTglY(), cov.cTglPhi(), + cov.cTglTgl(), cov.c1PtX(), cov.c1PtY(), cov.c1PtPhi(), cov.c1PtTgl(), cov.c1Pt21Pt2()}; SMatrix55 tcovs(v1.begin(), v1.end()); o2::track::TrackParCovFwd trackparCov{track.z(), tpars, tcovs, chi2}; @@ -1892,7 +1924,8 @@ o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T &track, } template -auto VarManager::getRotatedCovMatrixXX(const T &matrix, U phi, V theta) { +auto VarManager::getRotatedCovMatrixXX(const T& matrix, U phi, V theta) +{ // auto cp = std::cos(phi); auto sp = std::sin(phi); @@ -1907,16 +1940,17 @@ auto VarManager::getRotatedCovMatrixXX(const T &matrix, U phi, V theta) { } template -KFPTrack VarManager::createKFPTrackFromTrack(const T &track) { +KFPTrack VarManager::createKFPTrackFromTrack(const T& track) +{ std::array trackpars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; std::array trackcovs = { - track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), - track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), - track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), - track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; o2::track::TrackParametrizationWithError trackparCov{ - track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; + track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; std::array trkpos_par{}; std::array trkmom_par{}; std::array trk_cov{}; @@ -1937,13 +1971,14 @@ KFPTrack VarManager::createKFPTrackFromTrack(const T &track) { } template -KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T &muon) { +KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T& muon) +{ o2::track::TrackParCovFwd trackparCov = FwdToTrackPar(muon, muon); std::array trk_cov{}; trackparCov.getCovXYZPxPyPzGlo(trk_cov); - std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), - trackparCov.getZ(), trackparCov.getPx(), + std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), + trackparCov.getZ(), trackparCov.getPx(), trackparCov.getPy(), trackparCov.getPz()}; std::array trkcov_KF = trk_cov; KFPTrack kfpTrack; @@ -1956,7 +1991,8 @@ KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T &muon) { } template -KFPVertex VarManager::createKFPVertexFromCollision(const T &collision) { +KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) +{ KFPVertex kfpVertex; kfpVertex.SetXYZ(collision.posX(), collision.posY(), collision.posZ()); kfpVertex.SetCovarianceMatrix(collision.covXX(), collision.covXY(), @@ -1970,8 +2006,9 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T &collision) { template o2::dataformats::VertexBase -VarManager::RecalculatePrimaryVertex(T const &track0, T const &track1, - const T1 &collision) { + VarManager::RecalculatePrimaryVertex(T const& track0, T const& track1, + const T1& collision) +{ KFParticle trk0KF; KFPTrack kfpTrack0 = createKFPTrackFromTrack(track0); trk0KF = KFParticle(kfpTrack0, -11 * track0.sign()); @@ -1991,7 +2028,7 @@ VarManager::RecalculatePrimaryVertex(T const &track0, T const &track1, kVtx.Covariance(4) = collision.covYZ(); kVtx.Covariance(5) = collision.covZZ(); kVtx.Chi2() = - collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo + collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo kVtx.NDF() = 2 * collision.multNTracksPV() - 3; // KFVertex kfpVertex(kVtx); // kfpVertex.Initialize(); @@ -2012,24 +2049,25 @@ VarManager::RecalculatePrimaryVertex(T const &track0, T const &track1, } template -o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T &muon, - const C &collision, - const int endPoint) { +o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, + const C& collision, + const int endPoint) +{ float xShift = 0.f; float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(muon.y(), xShift, yShift, zShift); o2::track::TrackParCovFwd fwdtrack = - o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, - zShift, muon); + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, + zShift, muon); o2::dataformats::GlobalFwdTrack propmuon; if (static_cast(muon.trackType()) > 2) { auto mchTrack = mMatching.FwdtoMCH(fwdtrack); if (endPoint == kToVertex) { o2::mch::TrackExtrap::extrapToVertex( - mchTrack, collision.posX(), collision.posY(), collision.posZ(), - collision.covXX(), collision.covYY()); + mchTrack, collision.posX(), collision.posY(), collision.posZ(), + collision.covXX(), collision.covYY()); } if (endPoint == kToDCA) { o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrack, @@ -2047,26 +2085,28 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T &muon, } else if (static_cast(muon.trackType()) < 2) { std::array dcaInfOrig{999.f, 999.f, 999.f}; fwdtrack.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dcaInfOrig); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dcaInfOrig); propmuon = fwdtrack; } return propmuon; } template -o2::track::TrackParCovFwd VarManager::PropagateFwd(const T &track, const C &cov, - float z) { +o2::track::TrackParCovFwd VarManager::PropagateFwd(const T& track, const C& cov, + float z) +{ o2::track::TrackParCovFwd fwdtrack = FwdToTrackPar(track, cov); fwdtrack.propagateToZhelix(z, fgMagField); return fwdtrack; } template -void VarManager::FillPropagateMuon(const T &muon, const C &collision, - float *values) { +void VarManager::FillPropagateMuon(const T& muon, const C& collision, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedMuonCov) > 0) { @@ -2089,7 +2129,7 @@ void VarManager::FillPropagateMuon(const T &muon, const C &collision, values[kTgl] = propmuon.getTgl(); values[kPhi] = propmuon.getPhi(); - const SMatrix55 &cov = propmuon.getCovariances(); + const SMatrix55& cov = propmuon.getCovariances(); values[kMuonCXX] = cov(0, 0); values[kMuonCXY] = cov(1, 0); values[kMuonCYY] = cov(1, 1); @@ -2109,10 +2149,11 @@ void VarManager::FillPropagateMuon(const T &muon, const C &collision, } template -void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, - const C &collision, float *values) { +void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, + const C& collision, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { float xShift = 0.f; @@ -2120,20 +2161,20 @@ void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); o2::dataformats::GlobalFwdTrack propmuon = - PropagateMuon(muontrack, collision, kToVertex); + PropagateMuon(muontrack, collision, kToVertex); double px = - propmuon.getP() * - std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * - std::cos(mfttrack.phi()); + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::cos(mfttrack.phi()); double py = - propmuon.getP() * - std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * - std::sin(mfttrack.phi()); + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::sin(mfttrack.phi()); double pz = propmuon.getP() * std::cos(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())); double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2)); auto mftprop = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - mfttrack, xShift, yShift, zShift); + mfttrack, xShift, yShift, zShift); mftprop.setInvQPt(static_cast(muontrack.sign()) / pt); values[kX] = mftprop.getX(); values[kY] = mftprop.getY(); @@ -2147,8 +2188,8 @@ void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, // Helix DCA of the refitted global track w.r.t. the associated collision std::array dca{999., 999., 999.}; mftprop.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } @@ -2156,11 +2197,12 @@ void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, template -void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, - const C &collision, C2 const &mftcov, - float *values) { +void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, + const C& collision, C2 const& mftcov, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((MuonfillMap & MuonCov) > 0) { if constexpr ((MFTfillMap & MFTCov) > 0) { @@ -2169,12 +2211,12 @@ void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); o2::dataformats::GlobalFwdTrack propmuon = - PropagateMuon(muontrack, collision, kToVertex); + PropagateMuon(muontrack, collision, kToVertex); auto mft = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - mfttrack, xShift, yShift, zShift, mftcov); + mfttrack, xShift, yShift, zShift, mftcov); o2::dataformats::GlobalFwdTrack globalRefit = - o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); values[kX] = globalRefit.getX(); values[kY] = globalRefit.getY(); values[kZ] = globalRefit.getZ(); @@ -2188,8 +2230,8 @@ void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, // collision std::array dca{999., 999., 999.}; globalRefit.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } @@ -2197,9 +2239,10 @@ void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, } template -void VarManager::FillTimeFrame(T const &tf, float *values) { +void VarManager::FillTimeFrame(T const& tf, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (T::template contains()) { values[kTFNBCs] = tf.size(); @@ -2221,9 +2264,11 @@ void VarManager::FillTimeFrame(T const &tf, float *values) { } } -template void VarManager::FillBC(T const &bc, float *values) { +template +void VarManager::FillBC(T const& bc, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kRunNo] = bc.runNumber(); values[kBC] = bc.globalBC(); @@ -2233,9 +2278,10 @@ template void VarManager::FillBC(T const &bc, float *values) { } template -void VarManager::FillEvent(T const &event, float *values) { +void VarManager::FillEvent(T const& event, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { @@ -2258,7 +2304,7 @@ void VarManager::FillEvent(T const &event, float *values) { if (fgUsedVars[kIsNoITSROFBorder]) { values[kIsNoITSROFBorder] = - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); } if (fgUsedVars[kTrackOccupancyInTimeRange]) { values[kTrackOccupancyInTimeRange] = event.trackOccupancyInTimeRange(); @@ -2268,54 +2314,54 @@ void VarManager::FillEvent(T const &event, float *values) { } if (fgUsedVars[kNoCollInTimeRangeStandard]) { values[kNoCollInTimeRangeStandard] = - event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); } if (fgUsedVars[kIsTVXTriggered]) { values[kIsTVXTriggered] = - event.selection_bit(o2::aod::evsel::kIsTriggerTVX); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX); } if (fgUsedVars[kIsNoTFBorder]) { values[kIsNoTFBorder] = - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); } if (fgUsedVars[kIsTriggerZNAZNC]) { values[kIsTriggerZNAZNC] = - static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && - event.selection_bit(o2::aod::evsel::kIsBBZNC)); + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsNoSameBunch]) { values[kIsNoSameBunch] = - event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { values[kIsGoodZvtxFT0vsPV] = - event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); } if (fgUsedVars[kIsVertexITSTPC]) { values[kIsVertexITSTPC] = - event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); } if (fgUsedVars[kIsVertexTOFmatched]) { values[kIsVertexTOFmatched] = - event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); } if (fgUsedVars[kIsSel8]) { values[kIsSel8] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { values[kIsGoodITSLayer3] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { values[kIsGoodITSLayer0123] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { values[kIsGoodITSLayersAll] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2325,23 +2371,23 @@ void VarManager::FillEvent(T const &event, float *values) { } if (fgUsedVars[kIsINT7inMUON]) { values[kIsINT7inMUON] = - static_cast(event.alias_bit(kINT7inMUON) > 0); + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { values[kIsMuonSingleLowPt7] = - static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { values[kIsMuonSingleHighPt7] = - static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { values[kIsMuonUnlikeLowPt7] = - static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { values[kIsMuonLikeLowPt7] = - static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2441,11 +2487,11 @@ void VarManager::FillEvent(T const &event, float *values) { fgUsedVars[kIsSingleGapA] || fgUsedVars[kIsSingleGapC] || fgUsedVars[kIsNoGap]) { values[kIsDoubleGap] = - static_cast(event.tag_bit(56 + kDoubleGap) > 0); + static_cast(event.tag_bit(56 + kDoubleGap) > 0); values[kIsSingleGapA] = - static_cast(event.tag_bit(56 + kSingleGapA) > 0); + static_cast(event.tag_bit(56 + kSingleGapA) > 0); values[kIsSingleGapC] = - static_cast(event.tag_bit(56 + kSingleGapC) > 0); + static_cast(event.tag_bit(56 + kSingleGapC) > 0); values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && @@ -2453,7 +2499,7 @@ void VarManager::FillEvent(T const &event, float *values) { } if (fgUsedVars[kIsITSUPCMode]) { values[kIsITSUPCMode] = - static_cast(event.tag_bit(56 + kITSUPCMode) > 0); + static_cast(event.tag_bit(56 + kITSUPCMode) > 0); } values[kCollisionTime] = event.collisionTime(); values[kCollisionTimeRes] = event.collisionTimeRes(); @@ -2464,72 +2510,72 @@ void VarManager::FillEvent(T const &event, float *values) { values[kBCOrbit] = event.globalBC() % o2::constants::lhc::LHCMaxBunches; values[kTimestamp] = event.timestamp(); values[kTimeFromSOR] = - (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); + (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); values[kCentVZERO] = event.centRun2V0M(); values[kCentFT0C] = event.centFT0C(); if (fgUsedVars[kIsNoITSROFBorderRecomputed]) { uint16_t bcInITSROF = - (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; + (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; values[kIsNoITSROFBorderRecomputed] = - bcInITSROF > fgITSROFBorderMarginLow && - bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh - ? 1.0 - : 0.0; + bcInITSROF > fgITSROFBorderMarginLow && + bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh + ? 1.0 + : 0.0; } if (fgUsedVars[kIsNoITSROFBorder]) { values[kIsNoITSROFBorder] = static_cast( - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); } if (fgUsedVars[kIsTVXTriggered]) { values[kIsTVXTriggered] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); } if (fgUsedVars[kIsNoTFBorder]) { values[kIsNoTFBorder] = static_cast( - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); } if (fgUsedVars[kNoCollInTimeRangeStandard]) { values[kNoCollInTimeRangeStandard] = static_cast( - event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); } if (fgUsedVars[kIsNoSameBunch]) { values[kIsNoSameBunch] = static_cast( - event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); } if (fgUsedVars[kIsTriggerZNAZNC]) { values[kIsTriggerZNAZNC] = - static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && - event.selection_bit(o2::aod::evsel::kIsBBZNC)); + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { values[kIsGoodZvtxFT0vsPV] = static_cast( - event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); } if (fgUsedVars[kIsVertexITSTPC]) { values[kIsVertexITSTPC] = static_cast( - event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); } if (fgUsedVars[kIsVertexTOFmatched]) { values[kIsVertexTOFmatched] = static_cast( - event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); } if (fgUsedVars[kIsSel8]) { values[kIsSel8] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { values[kIsGoodITSLayer3] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { values[kIsGoodITSLayer0123] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { values[kIsGoodITSLayersAll] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2539,23 +2585,23 @@ void VarManager::FillEvent(T const &event, float *values) { } if (fgUsedVars[kIsINT7inMUON]) { values[kIsINT7inMUON] = - static_cast(event.alias_bit(kINT7inMUON) > 0); + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { values[kIsMuonSingleLowPt7] = - static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { values[kIsMuonSingleHighPt7] = - static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { values[kIsMuonUnlikeLowPt7] = - static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { values[kIsMuonLikeLowPt7] = - static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2635,48 +2681,48 @@ void VarManager::FillEvent(T const &event, float *values) { values[kCORR2REFetagap] = event.corr2refetagap(); values[kM11REFetagap] = event.m11refetagap(); values[kCORR2REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : event.corr2ref(); + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : event.corr2ref(); values[kCORR4REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : event.corr4ref(); + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : event.corr4ref(); values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REF]) || - std::isinf(values[kM11M1111REF]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF]) - ? 0 - : event.corr2ref() * event.corr4ref(); + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : event.corr2ref() * event.corr4ref(); values[kM11REF] = - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) - ? event.m11ref() - : 0; + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) + ? event.m11ref() + : 0; values[kM1111REF] = - !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) - ? event.m1111ref() - : 0; + !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) + ? event.m1111ref() + : 0; values[kM11M1111REF] = !(std::isnan(values[kM11M1111REF]) || std::isinf(values[kM11M1111REF]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF])) - ? event.m11ref() * event.m1111ref() - : 0; + ? event.m11ref() * event.m1111ref() + : 0; } } @@ -2736,9 +2782,9 @@ void VarManager::FillEvent(T const &event, float *values) { EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2749,100 +2795,100 @@ void VarManager::FillEvent(T const &event, float *values) { values[kPsi2C] = Psi2C; float R2SP_AB = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); float R2SP_AC = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); float R2SP_BC = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); float R2SP_AB_Im = - (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); float R2SP_AC_Im = - (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); float R2SP_BC_Im = - (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); values[kR2SP_AB] = - std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; values[kR2SP_FT0CTPCPOS] = - std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; values[kR2SP_FT0CTPCNEG] = - std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; values[kR2SP_AC] = - std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; values[kR2SP_FT0ATPCPOS] = - std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; values[kR2SP_FT0ATPCNEG] = - std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; values[kR2SP_BC] = - std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; values[kR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; values[kWR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; values[kR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; values[kWR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; values[kR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; values[kWR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); values[kR2EP_AB] = - std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; values[kR2EP_AC] = - std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; values[kR2EP_BC] = - std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; values[kR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; values[kWR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; values[kR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; values[kWR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; values[kR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; values[kWR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionQvectCentr) > 0) { @@ -2883,9 +2929,9 @@ void VarManager::FillEvent(T const &event, float *values) { EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2896,100 +2942,100 @@ void VarManager::FillEvent(T const &event, float *values) { values[kPsi2C] = Psi2C; float R2SP_AB = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); float R2SP_AC = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); float R2SP_BC = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); float R2SP_AB_Im = - (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); float R2SP_AC_Im = - (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); float R2SP_BC_Im = - (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); values[kR2SP_AB] = - std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; values[kR2SP_FT0CTPCPOS] = - std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; values[kR2SP_FT0CTPCNEG] = - std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; values[kR2SP_AC] = - std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; values[kR2SP_FT0ATPCPOS] = - std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; values[kR2SP_FT0ATPCNEG] = - std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; values[kR2SP_BC] = - std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; values[kR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; values[kWR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; values[kR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; values[kWR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; values[kR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; values[kWR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); values[kR2EP_AB] = - std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; values[kR2EP_AC] = - std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; values[kR2EP_BC] = - std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; values[kR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; values[kWR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; values[kR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; values[kWR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; values[kR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; values[kWR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionMC) > 0) { @@ -3030,17 +3076,17 @@ void VarManager::FillEvent(T const &event, float *values) { if constexpr ((fillMap & EventFilter) > 0 || (fillMap & RapidityGapFilter) > 0) { values[kIsDoubleGap] = static_cast( - (event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); + (event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); values[kIsSingleGapA] = static_cast( - (event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); + (event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); values[kIsSingleGapC] = static_cast( - (event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); + (event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && values[kIsSingleGap] == 0.f); values[kIsITSUPCMode] = static_cast( - (event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); + (event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); } if constexpr ((fillMap & ReducedZdc) > 0) { @@ -3084,13 +3130,13 @@ void VarManager::FillEvent(T const &event, float *values) { if constexpr (requires { event.dcazBimodalityCoefficient(); }) { values[kDCAzBimodalityCoefficient] = event.dcazBimodalityCoefficient(); values[kDCAzBimodalityCoefficientBinned] = - event.dcazBimodalityCoefficientBinned(); + event.dcazBimodalityCoefficientBinned(); values[kDCAzBimodalityCoefficientBinnedTrimmed1] = - event.dcazBimodalityCoefficientBinnedTrimmed1(); + event.dcazBimodalityCoefficientBinnedTrimmed1(); values[kDCAzBimodalityCoefficientBinnedTrimmed2] = - event.dcazBimodalityCoefficientBinnedTrimmed2(); + event.dcazBimodalityCoefficientBinnedTrimmed2(); values[kDCAzBimodalityCoefficientBinnedTrimmed3] = - event.dcazBimodalityCoefficientBinnedTrimmed3(); + event.dcazBimodalityCoefficientBinnedTrimmed3(); values[kDCAzMean] = event.dcazMean(); values[kDCAzMeanBinnedTrimmed1] = event.dcazMeanBinnedTrimmed1(); values[kDCAzMeanBinnedTrimmed2] = event.dcazMeanBinnedTrimmed2(); @@ -3118,14 +3164,15 @@ void VarManager::FillEvent(T const &event, float *values) { } template -void VarManager::FillEventTracks(T const &tracks, float *values) { +void VarManager::FillEventTracks(T const& tracks, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // compute event properties based on DCAz of the tracks std::vector dcazValues; - for (const auto &track : tracks) { + for (const auto& track : tracks) { if (!track.hasITS()) { continue; // skip tracks without ITS information } @@ -3144,7 +3191,7 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { // compute the unbinned bimodality coefficient and related statistics auto [bimodalityCoefficient, mean, stddev, skewness, kurtosis, nPeaks] = - BimodalityCoefficientAndNPeaks(dcazValues, -1.0); + BimodalityCoefficientAndNPeaks(dcazValues, -1.0); if (stddev > -1.0) { values[kDCAzBimodalityCoefficient] = bimodalityCoefficient; values[kDCAzMean] = mean; @@ -3177,10 +3224,10 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { // of 50um and different trimming versions more then 3 counts per bin auto [bimodalityCoefficientBinTrimmed1, meanBinTrimmed1, stddevBinTrimmed1, skewnessBinTrimmed1, kurtosisBinTrimmed1, nPeaksBinTrimmed1] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); if (stddevBinTrimmed1 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed1] = - bimodalityCoefficientBinTrimmed1; + bimodalityCoefficientBinTrimmed1; values[kDCAzMeanBinnedTrimmed1] = meanBinTrimmed1; values[kDCAzRMSBinnedTrimmed1] = stddevBinTrimmed1; } else { @@ -3196,10 +3243,10 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { // << endl; more than 3% of the entries per peak auto [bimodalityCoefficientBinTrimmed2, meanBinTrimmed2, stddevBinTrimmed2, skewnessBinTrimmed2, kurtosisBinTrimmed2, nPeaksBinTrimmed2] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); if (stddevBinTrimmed2 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed2] = - bimodalityCoefficientBinTrimmed2; + bimodalityCoefficientBinTrimmed2; values[kDCAzMeanBinnedTrimmed2] = meanBinTrimmed2; values[kDCAzRMSBinnedTrimmed2] = stddevBinTrimmed2; } else { @@ -3215,10 +3262,10 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { // << endl; more than 5% of the entries per peak auto [bimodalityCoefficientBinTrimmed3, meanBinTrimmed3, stddevBinTrimmed3, skewnessBinTrimmed3, kurtosisBinTrimmed3, nPeaksBinTrimmed3] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); if (stddevBinTrimmed3 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed3] = - bimodalityCoefficientBinTrimmed3; + bimodalityCoefficientBinTrimmed3; values[kDCAzMeanBinnedTrimmed3] = meanBinTrimmed3; values[kDCAzRMSBinnedTrimmed3] = stddevBinTrimmed3; } else { @@ -3243,7 +3290,7 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { int counter2mm = 0; int counter5mm = 0; int counter10mm = 0; - for (auto const &d : dcazValues) { + for (auto const& d : dcazValues) { double absD = std::abs(d); if (absD > 0.01) { counter100um++; @@ -3278,10 +3325,11 @@ void VarManager::FillEventTracks(T const &tracks, float *values) { } template -void VarManager::FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, - float *values) { +void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kCentFT0C] >= 0.) { @@ -3294,10 +3342,11 @@ void VarManager::FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, } template -void VarManager::FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, - float *values) { +void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kTwoEvCentFT0C1] >= 0.) { @@ -3318,12 +3367,13 @@ void VarManager::FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, } template -void VarManager::FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, - T const &h_v22ev2, T const &h_v24ev2, - T1 const &t1, T2 const &t2, - float *values) { +void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, + T const& h_v22ev2, T const& h_v24ev2, + T1 const& t1, T2 const& t2, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } int idx_v22ev1 = 0; @@ -3366,17 +3416,18 @@ void VarManager::FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, } template -void VarManager::FillTwoEvents(T const &ev1, T const &ev2, float *values) { +void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // if constexpr (T::template contains()) { values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); values[kTwoEvPosR1] = - std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); values[kTwoEvPosR2] = - std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvDeltaZ] = ev1.posZ() - ev2.posZ(); values[kTwoEvDeltaX] = ev1.posX() - ev2.posX(); values[kTwoEvDeltaY] = ev1.posY() - ev2.posY(); @@ -3388,18 +3439,19 @@ void VarManager::FillTwoEvents(T const &ev1, T const &ev2, float *values) { } template -void VarManager::FillTwoMixEvents(T1 const &ev1, T1 const &ev2, - T2 const & /*tracks1*/, - T2 const & /*tracks2*/, float *values) { +void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, + T2 const& /*tracks1*/, + T2 const& /*tracks2*/, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); values[kTwoEvPosR1] = - std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); values[kTwoEvPosR2] = - std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvPVcontrib1] = ev1.numContrib(); values[kTwoEvPVcontrib2] = ev2.numContrib(); /* @@ -3459,9 +3511,10 @@ void VarManager::FillTwoMixEvents(T1 const &ev1, T1 const &ev2, } template -void VarManager::FillTrack(T const &track, float *values) { +void VarManager::FillTrack(T const& track, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & TrackMFT) > 0) { @@ -3510,27 +3563,27 @@ void VarManager::FillTrack(T const &track, float *values) { values[kCharge] = track.sign(); if (fgUsedVars[kPhiTPCOuter]) { values[kPhiTPCOuter] = RecoDecay::constrainAngle( - track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * - (o2::constants::math::PIHalf - - TMath::ACos(0.22 * fgMagField / track.pt()))); + track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * + (o2::constants::math::PIHalf - + TMath::ACos(0.22 * fgMagField / track.pt()))); } if (fgUsedVars[kTrackIsInsideTPCModule]) { float localSectorPhi = - values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / - o2::constants::math::TwoPI) * - (o2::constants::math::TwoPI / 18.0); + values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / + o2::constants::math::TwoPI) * + (o2::constants::math::TwoPI / 18.0); float edge = fgTPCInterSectorBoundary / 2.0 / 246.6; // minimal inter-sector boundary as angle float curvature = - 3.0 * 3.33 * track.pt() / fgMagField * - (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); + 3.0 * 3.33 * track.pt() / fgMagField * + (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); if (curvature / 2.466 > edge) { edge = curvature / 2.466; } double min = edge; double max = o2::constants::math::TwoPI / 18.0 - edge; values[kTrackIsInsideTPCModule] = - (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); + (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); } if constexpr ((fillMap & ReducedTrack) > 0 && !((fillMap & Pair) > 0)) { @@ -3539,22 +3592,22 @@ void VarManager::FillTrack(T const &track, float *values) { values[kIsAmbiguous] = track.isAmbiguous(); values[kIsLegFromGamma] = - track.filteringFlags_bit(VarManager::kIsConversionLeg); + track.filteringFlags_bit(VarManager::kIsConversionLeg); values[kIsLegFromK0S] = track.filteringFlags_bit(VarManager::kIsK0sLeg); values[kIsLegFromLambda] = - track.filteringFlags_bit(VarManager::kIsLambdaLeg); + track.filteringFlags_bit(VarManager::kIsLambdaLeg); values[kIsLegFromAntiLambda] = - track.filteringFlags_bit(VarManager::kIsALambdaLeg); + track.filteringFlags_bit(VarManager::kIsALambdaLeg); values[kIsLegFromOmega] = - track.filteringFlags_bit(VarManager::kIsOmegaLeg); + track.filteringFlags_bit(VarManager::kIsOmegaLeg); values[kIsProtonFromLambdaAndAntiLambda] = static_cast( - (values[kIsLegFromLambda] * track.sign() > 0) || - (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); for (int i = 0; i < 8; i++) { values[kIsDalitzLeg + i] = - track.filteringFlags_bit(VarManager::kDalitzBits + i); + track.filteringFlags_bit(VarManager::kDalitzBits + i); } } @@ -3567,121 +3620,121 @@ void VarManager::FillTrack(T const &track, float *values) { std::complex Q23(values[kQ23XA], values[kQ23YA]); std::complex P2(TMath::Cos(2 * v.Phi()), TMath::Sin(2 * v.Phi())); values[kM11REFoverMpsingle] = - values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultSingleMuons] + : 0; values[kM1111REFoverMpsingle] = - values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultSingleMuons] + : 0; values[kCORR2REFbysinglemu] = - std::isnan(values[kM11REFoverMpsingle]) || - std::isinf(values[kM11REFoverMpsingle]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMpsingle]) || - std::isinf(values[kM1111REFoverMpsingle]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbysinglemu] = - std::isnan(values[kM1111REFoverMpsingle]) || - std::isinf(values[kM1111REFoverMpsingle]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMpsingle]) || - std::isinf(values[kM11REFoverMpsingle]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POI]; values[kM01POIsingle] = values[kMultSingleMuons] * values[kS11A]; values[kM0111POIsingle] = - values[kMultSingleMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultSingleMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POIsingle]; values[kCORR4POIsingle] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POIsingle]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIsingle]; values[kM01POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kM01POIsingle]; + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kM01POIsingle]; values[kM0111POIsingle] = std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kM0111POIsingle]; + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kM0111POIsingle]; values[kCORR2POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kCORR2POIsingle]; + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR2POIsingle]; values[kCORR4POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kCORR4POIsingle]; + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR4POIsingle]; values[kM01POIoverMpsingle] = - values[kMultSingleMuons] > 0 && - !(std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) || - std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle])) - ? values[kM01POIsingle] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM01POIsingle] / values[kMultSingleMuons] + : 0; values[kM0111POIoverMpsingle] = - values[kMultSingleMuons] > 0 && - !(std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) || - std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle])) - ? values[kM0111POIsingle] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM0111POIsingle] / values[kMultSingleMuons] + : 0; } } @@ -3692,46 +3745,46 @@ void VarManager::FillTrack(T const &track, float *values) { values[kSignedPin] = track.tpcInnerParam() * track.sign(); if (fgUsedVars[kIsITSrefit]) { values[kIsITSrefit] = - static_cast((track.flags() & o2::aod::track::ITSrefit) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::ITSrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kTrackTimeResIsRange]) { values[kTrackTimeResIsRange] = static_cast( - (track.flags() & o2::aod::track::TrackTimeResIsRange) > - 0); // NOTE: This is NOT for Run-2 + (track.flags() & o2::aod::track::TrackTimeResIsRange) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsTPCrefit]) { values[kIsTPCrefit] = - static_cast((track.flags() & o2::aod::track::TPCrefit) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::TPCrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kPVContributor]) { values[kPVContributor] = - static_cast((track.flags() & o2::aod::track::PVContributor) > - 0); // NOTE: This is NOT for Run-2 + static_cast((track.flags() & o2::aod::track::PVContributor) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsGoldenChi2]) { values[kIsGoldenChi2] = - static_cast((track.flags() & o2::aod::track::GoldenChi2) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::GoldenChi2) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kOrphanTrack]) { values[kOrphanTrack] = - static_cast((track.flags() & o2::aod::track::OrphanTrack) > - 0); // NOTE: This is NOT for Run-2 + static_cast((track.flags() & o2::aod::track::OrphanTrack) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsSPDfirst]) { values[kIsSPDfirst] = - static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsSPDboth]) { values[kIsSPDboth] = - static_cast((track.itsClusterMap() & uint8_t(3)) > 0); + static_cast((track.itsClusterMap() & uint8_t(3)) > 0); } if (fgUsedVars[kIsSPDany]) { values[kIsSPDany] = - static_cast((track.itsClusterMap() & uint8_t(1)) || - (track.itsClusterMap() & uint8_t(2))); + static_cast((track.itsClusterMap() & uint8_t(1)) || + (track.itsClusterMap() & uint8_t(2))); } if (fgUsedVars[kITSClusterMap]) { values[kITSClusterMap] = track.itsClusterMap(); @@ -3739,19 +3792,19 @@ void VarManager::FillTrack(T const &track, float *values) { if (fgUsedVars[kIsITSibFirst]) { values[kIsITSibFirst] = - static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsITSibAny]) { values[kIsITSibAny] = - static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || - (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || - (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } if (fgUsedVars[kIsITSibAll]) { values[kIsITSibAll] = - static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && - (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && - (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } values[kTrackTime] = track.trackTime(); @@ -3862,25 +3915,25 @@ void VarManager::FillTrack(T const &track, float *values) { if constexpr ((fillMap & DalitzBits) > 0) { for (int i = 0; i < 8; i++) { values[kIsDalitzLeg + i] = - static_cast(track.dalitzBits() & (uint8_t(1) << i)); + static_cast(track.dalitzBits() & (uint8_t(1) << i)); } } // Quantities based on the V0 selections if constexpr ((fillMap & TrackV0Bits) > 0) { values[kIsLegFromGamma] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); values[kIsLegFromK0S] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); values[kIsLegFromLambda] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); values[kIsLegFromAntiLambda] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); values[kIsLegFromOmega] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); values[kIsProtonFromLambdaAndAntiLambda] = static_cast( - (values[kIsLegFromLambda] * track.sign() > 0) || - (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); } // Quantities based on the barrel PID tables @@ -3902,7 +3955,7 @@ void VarManager::FillTrack(T const &track, float *values) { if (fgUsedVars[kTPCnSigmaEl_Corr] && fgRunTPCPostCalibration[0]) { if (!isTPCCalibrated) { values[kTPCnSigmaEl_Corr] = - ComputePIDcalibration(0, values[kTPCnSigmaEl]); + ComputePIDcalibration(0, values[kTPCnSigmaEl]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3915,7 +3968,7 @@ void VarManager::FillTrack(T const &track, float *values) { if (fgUsedVars[kTPCnSigmaPi_Corr] && fgRunTPCPostCalibration[1]) { if (!isTPCCalibrated) { values[kTPCnSigmaPi_Corr] = - ComputePIDcalibration(1, values[kTPCnSigmaPi]); + ComputePIDcalibration(1, values[kTPCnSigmaPi]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3927,7 +3980,7 @@ void VarManager::FillTrack(T const &track, float *values) { // compute TPC postcalibrated kaon nsigma if required if (!isTPCCalibrated) { values[kTPCnSigmaKa_Corr] = - ComputePIDcalibration(2, values[kTPCnSigmaKa]); + ComputePIDcalibration(2, values[kTPCnSigmaKa]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3939,7 +3992,7 @@ void VarManager::FillTrack(T const &track, float *values) { if (fgUsedVars[kTPCnSigmaPr_Corr] && fgRunTPCPostCalibration[3]) { if (!isTPCCalibrated) { values[kTPCnSigmaPr_Corr] = - ComputePIDcalibration(3, values[kTPCnSigmaPr]); + ComputePIDcalibration(3, values[kTPCnSigmaPr]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -4029,7 +4082,7 @@ void VarManager::FillTrack(T const &track, float *values) { float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); auto muonTrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - track, xShift, yShift, zShift, track); + track, xShift, yShift, zShift, track); auto muonCov = muonTrack.getCovariances(); values[kX] = muonTrack.getX(); values[kY] = muonTrack.getY(); @@ -4065,19 +4118,20 @@ void VarManager::FillTrack(T const &track, float *values) { } template -void VarManager::FillTrackCollision(T const &track, C const &collision, - float *values) { +void VarManager::FillTrackCollision(T const& track, C const& collision, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); std::array dca{1e10f, 1e10f}; trackPar.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca); values[kTrackDCAxy] = dca[0]; values[kTrackDCAz] = dca[1]; @@ -4104,18 +4158,18 @@ void VarManager::FillTrackCollision(T const &track, C const &collision, float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); o2::track::TrackParCovFwd fwdtrack = - o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - track, xShift, yShift, zShift, track); + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + track, xShift, yShift, zShift, track); std::array dca{999., 999., 999.}; fwdtrack.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); dcaX = static_cast(dca[0]); dcaY = static_cast(dca[1]); } else { // MCH standalone: DCA and pDCA from MCH extrapolation o2::dataformats::GlobalFwdTrack propmuonAtDCA = - PropagateMuon(track, collision, kToDCA); + PropagateMuon(track, collision, kToDCA); dcaX = propmuonAtDCA.getX() - collision.posX(); dcaY = propmuonAtDCA.getY() - collision.posY(); float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY); @@ -4129,25 +4183,27 @@ void VarManager::FillTrackCollision(T const &track, C const &collision, template bool VarManager::isBarrelAssocTimeCompatible( - T const &track, C const &collision, C const &origCollision, float nSigma, - float timeMargin, int bcWindowForOneSigma, int usePVAssociation, - int maxPvContribLowMult, float *values) { + T const& track, C const& collision, C const& origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float* values) +{ return computeBarrelAssocTimeCompat( - track.trackTime(), track.trackTimeRes(), - (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, - track.isPVContributor(), static_cast(origCollision.globalBC()), - origCollision.collisionTime(), origCollision.numContrib(), - static_cast(collision.globalBC()), collision.collisionTime(), - collision.collisionTimeRes(), nSigma, timeMargin, bcWindowForOneSigma, - usePVAssociation, maxPvContribLowMult, values); + track.trackTime(), track.trackTimeRes(), + (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, + track.isPVContributor(), static_cast(origCollision.globalBC()), + origCollision.collisionTime(), origCollision.numContrib(), + static_cast(collision.globalBC()), collision.collisionTime(), + collision.collisionTimeRes(), nSigma, timeMargin, bcWindowForOneSigma, + usePVAssociation, maxPvContribLowMult, values); } template -void VarManager::FillTrackCollisionMatCorr(T const &track, C const &collision, - M const &materialCorr, - P const &propagator, float *values) { +void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, + M const& materialCorr, + P const& propagator, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { @@ -4157,8 +4213,8 @@ void VarManager::FillTrackCollisionMatCorr(T const &track, C const &collision, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, - materialCorr, &dca); + {collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, + materialCorr, &dca); getPxPyPz(trackPar, pVec); values[kTrackDCAxy] = dca[0]; @@ -4177,9 +4233,10 @@ void VarManager::FillTrackCollisionMatCorr(T const &track, C const &collision, } template -void VarManager::FillPhoton(T const &track, float *values) { +void VarManager::FillPhoton(T const& track, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Quantities based on the basic table (contains just kine information and @@ -4209,8 +4266,9 @@ void VarManager::FillPhoton(T const &track, float *values) { } template -void VarManager::FillTrackEMCal(T const &cluster, float trackP, float deltaEta, - float deltaPhi, float *values) { +void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, + float deltaPhi, float* values) +{ // Fill the EMCal cluster quantities; the cluster can be either an // aod::EMCALCluster (skimming) // or an aod::ReducedEMCal (analysis on skimmed data), the column schemas @@ -4220,7 +4278,7 @@ void VarManager::FillTrackEMCal(T const &cluster, float trackP, float deltaEta, // the default (negative) value leaves E/p at the -999 sentinel, as for // tracks without a matched cluster. if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kEMCalEnergy] = cluster.energy(); @@ -4242,9 +4300,10 @@ void VarManager::FillTrackEMCal(T const &cluster, float trackP, float deltaEta, } template -void VarManager::FillTrackMC(const U &mcStack, T const &track, float *values) { +void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Quantities based on the mc particle table @@ -4275,11 +4334,12 @@ void VarManager::FillTrackMC(const U &mcStack, T const &track, float *values) { template -void VarManager::FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, - C const &collision, float *values) { +void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, + C const& collision, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassBPlus; @@ -4305,61 +4365,62 @@ void VarManager::FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, // displaced vertex is compued with decay product (track) and momentum of // mother particle (MotherTrack) values[kMCVertexingLxy] = - (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + - (collPos[1] - track.vy()) * (collPos[1] - track.vy()); + (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + + (collPos[1] - track.vy()) * (collPos[1] - track.vy()); values[kMCVertexingLz] = - (collPos[2] - track.vz()) * (collPos[2] - track.vz()); + (collPos[2] - track.vz()) * (collPos[2] - track.vz()); values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz]; values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]); values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]); values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]); values[kMCVertexingTauz] = - (collPos[2] - track.vz()) * m / - (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); + (collPos[2] - track.vz()) * m / + (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingTauxy] = - values[kMCVertexingLxy] * m / - (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); + values[kMCVertexingLxy] * m / + (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); values[kMCCosPointingAngle] = - ((collPos[0] - track.vx()) * MotherTrack.px() + - (collPos[1] - track.vy()) * MotherTrack.py() + - (collPos[2] - track.vz()) * MotherTrack.pz()) / - (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); + ((collPos[0] - track.vx()) * MotherTrack.px() + + (collPos[1] - track.vy()) * MotherTrack.py() + + (collPos[2] - track.vz()) * MotherTrack.pz()) / + (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); values[kMCLxyExpected] = - (MotherTrack.pt() / m) * - (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + (MotherTrack.pt() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); values[kMCLxyzExpected] = - (MotherTrack.p() / m) * - (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + (MotherTrack.p() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); values[kMCVertexingLzProjected] = - ((track.vz() - collPos[2]) * MotherTrack.pz()) / - TMath::Abs(MotherTrack.pz()); + ((track.vz() - collPos[2]) * MotherTrack.pz()) / + TMath::Abs(MotherTrack.pz()); values[kMCVertexingLxyProjected] = - (((track.vx() - collPos[0]) * MotherTrack.px()) + - ((track.vy() - collPos[1]) * MotherTrack.py())) / - TMath::Abs(MotherTrack.pt()); + (((track.vx() - collPos[0]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py())) / + TMath::Abs(MotherTrack.pt()); values[kMCVertexingLxyzProjected] = - (((track.vx() - collPos[1]) * MotherTrack.px()) + - ((track.vy() - collPos[1]) * MotherTrack.py()) + - ((track.vz() - collPos[2]) * MotherTrack.pz())) / - MotherTrack.p(); + (((track.vx() - collPos[1]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py()) + + ((track.vz() - collPos[2]) * MotherTrack.pz())) / + MotherTrack.p(); values[kMCVertexingTauxyProjected] = - values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); + values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); values[kMCVertexingTauzProjected] = - values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); + values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); values[kMCVertexingTauxyzProjected] = - values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); + values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); } template -void VarManager::FillTrackCollisionMC(T1 const &track, - const std::array &collPos, - float massHyp, float *values) { +void VarManager::FillTrackCollisionMC(T1 const& track, + const std::array& collPos, + float massHyp, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassJPsi; @@ -4369,44 +4430,45 @@ void VarManager::FillTrackCollisionMC(T1 const &track, // displaced vertex is computed with decay product (track) and vertex collPos values[kMCVertexingLxy] = - (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + - (collPos[1] - track.vy()) * (collPos[1] - track.vy()); + (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + + (collPos[1] - track.vy()) * (collPos[1] - track.vy()); values[kMCVertexingLz] = - (collPos[2] - track.vz()) * (collPos[2] - track.vz()); + (collPos[2] - track.vz()) * (collPos[2] - track.vz()); values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz]; values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]); values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]); values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]); values[kMCVertexingTauz] = - (collPos[2] - track.vz()) * m / - (TMath::Abs(track.pz()) * o2::constants::physics::LightSpeedCm2NS); + (collPos[2] - track.vz()) * m / + (TMath::Abs(track.pz()) * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingTauxy] = - values[kMCVertexingLxy] * m / - (track.pt() * o2::constants::physics::LightSpeedCm2NS); + values[kMCVertexingLxy] * m / + (track.pt() * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingLzProjected] = - ((track.vz() - collPos[2]) * track.pz()) / TMath::Abs(track.pz()); + ((track.vz() - collPos[2]) * track.pz()) / TMath::Abs(track.pz()); values[kMCVertexingLxyProjected] = - (((track.vx() - collPos[0]) * track.px()) + - ((track.vy() - collPos[1]) * track.py())) / - TMath::Abs(track.pt()); + (((track.vx() - collPos[0]) * track.px()) + + ((track.vy() - collPos[1]) * track.py())) / + TMath::Abs(track.pt()); values[kMCVertexingLxyzProjected] = - (((track.vx() - collPos[0]) * track.px()) + - ((track.vy() - collPos[1]) * track.py()) + - ((track.vz() - collPos[2]) * track.pz())) / - track.p(); + (((track.vx() - collPos[0]) * track.px()) + + ((track.vy() - collPos[1]) * track.py()) + + ((track.vz() - collPos[2]) * track.pz())) / + track.p(); values[kMCVertexingTauxyProjected] = - values[kMCVertexingLxyProjected] * m / (track.pt()); + values[kMCVertexingLxyProjected] * m / (track.pt()); values[kMCVertexingTauzProjected] = - values[kMCVertexingLzProjected] * m / TMath::Abs(track.pz()); + values[kMCVertexingLzProjected] * m / TMath::Abs(track.pz()); values[kMCVertexingTauxyzProjected] = - values[kMCVertexingLxyzProjected] * m / (track.p()); + values[kMCVertexingLxyzProjected] * m / (track.p()); } template -void VarManager::FillEnergyCorrelatorsMC(T const &track, T1 const &t1, - float *values, float Translow, - float Transhigh, float Accweight) { +void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, + float* values, float Translow, + float Transhigh, float Accweight) +{ // energy correlators float MassHadron = o2::constants::physics::MassPionCharged; if constexpr (pairType == kJpsiHadronMass) { @@ -4424,16 +4486,16 @@ void VarManager::FillEnergyCorrelatorsMC(T const &track, T1 const &t1, values[kMCAccweight] = Accweight; values[kMCCosChi] = CosChi; values[kMCWeight_before] = - t1.pt() / o2::constants::physics::MassJPsi * Accweight; + t1.pt() / o2::constants::physics::MassJPsi * Accweight; values[kMCEWeight_before] = - t1.e() / o2::constants::physics::MassJPsi * Accweight; + t1.e() / o2::constants::physics::MassJPsi * Accweight; values[kMCCosTheta] = CosTheta; values[kMCdeltaphi] = deltaphi; values[kMCdeltaeta] = deltaeta; values[kMCHadronPt] = t1.pt(); values[kMCHadronEta] = t1.eta(); values[kMCHadronPhi] = - RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); + RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); values[kMCHadronPdgCode] = t1.pdgCode(); values[kMCWeight] = E_boost / o2::constants::physics::MassJPsi * Accweight; @@ -4466,44 +4528,45 @@ void VarManager::FillEnergyCorrelatorsMC(T const &track, T1 const &t1, ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans(v2.pt(), v2.eta(), randomPhi_trans, MassHadron); values[kMCCosChi_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); values[kMCWeight_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_trans) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * Accweight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( - v2.pt(), v2.eta(), randomPhi_toward, MassHadron); + v2.pt(), v2.eta(), randomPhi_toward, MassHadron); values[kMCCosChi_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); values[kMCWeight_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_toward) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * Accweight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_away(v2.pt(), v2.eta(), randomPhi_away, MassHadron); values[kMCCosChi_randomPhi_away] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); values[kMCWeight_randomPhi_away] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_away) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * Accweight; values[kMCdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); values[kMCdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); values[kMCdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } template -void VarManager::FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, - const C &collision, float *values) { +void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, + const C& collision, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } o2::dataformats::GlobalFwdTrack propmuon1 = PropagateMuon(muon1, collision); o2::dataformats::GlobalFwdTrack propmuon2 = PropagateMuon(muon2, collision); @@ -4522,16 +4585,17 @@ void VarManager::FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; } template -void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { +void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4571,9 +4635,9 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -4585,7 +4649,7 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -4594,14 +4658,14 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { if (fgUsedVars[kPsiPair]) { values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) - ? (v1.Phi() - v2.Phi()) - : (v2.Phi() - v1.Phi()); + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); double xipair = TMath::ACos( - (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / - v2.P()); + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); values[kPsiPair] = (t1.sign() * fgMagField > 0.) - ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) - : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -4624,9 +4688,9 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -4647,18 +4711,18 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -4675,18 +4739,18 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -4696,7 +4760,7 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -4704,18 +4768,18 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -4727,9 +4791,9 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -4746,21 +4810,21 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; // if the truth event plane angle is available, calculate the cos(theta*) // with respect to the true event plane angle for comparison if (fgUsedVars[kMCCosThetaStar] && fgUsedVars[kMCEventPlaneAngle]) { // truth event plane angle ROOT::Math::XYZVector zaxisTrue = - ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), - TMath::Sin(values[kMCEventPlaneAngle]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } } @@ -4803,16 +4867,16 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { // Quantities based on the barrel tables values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -4820,19 +4884,19 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { values[kQuadDCAsigXYZ] = -999; } else { double chi2t1 = - (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - - 2. * dca1XY * dca1Z * t1.cZY()) / - det1; + (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; double chi2t2 = - (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - - 2. * dca2XY * dca2Z * t2.cZY()) / - det2; + (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = std::sqrt( - (dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + (dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -4847,7 +4911,7 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } if constexpr ((pairType == kElectronMuon) && @@ -4864,10 +4928,11 @@ void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { // change_start: rotation pair template -void VarManager::FillPairRotation(T1 const &t1, T2 const &t2, int rotation, - float *values) { +void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4923,9 +4988,9 @@ void VarManager::FillPairRotation(T1 const &t1, T2 const &t2, int rotation, values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -4937,10 +5002,11 @@ void VarManager::FillPairRotation(T1 const &t1, T2 const &t2, int rotation, } template -void VarManager::FillPairCollision(const C &collision, T1 const &t1, - T2 const &t2, float *values) { +void VarManager::FillPairCollision(const C& collision, T1 const& t1, + T2 const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((pairType == kDecayToEE) && @@ -4954,14 +5020,14 @@ void VarManager::FillPairCollision(const C &collision, T1 const &t1, auto trackPart1 = getTrackPar(t1); std::array dca1{1e10f, 1e10f}; trackPart1.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca1); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca1); auto trackPart2 = getTrackPar(t2); std::array dca2{1e10f, 1e10f}; trackPart2.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca2); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca2); // Recalculated quantities double dca1XY = dca1[0]; @@ -4974,16 +5040,16 @@ void VarManager::FillPairCollision(const C &collision, T1 const &t1, double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -5001,7 +5067,7 @@ void VarManager::FillPairCollision(const C &collision, T1 const &t1, double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -5009,11 +5075,12 @@ void VarManager::FillPairCollision(const C &collision, T1 const &t1, template -void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, - T2 const &t2, M const &materialCorr, - P const &propagator, float *values) { +void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, + T2 const& t2, M const& materialCorr, + P const& propagator, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((pairType == kDecayToEE) && @@ -5030,8 +5097,8 @@ void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPart1, - 2.f, materialCorr, &dca1); + {collision.posX(), collision.posY(), collision.posZ()}, trackPart1, + 2.f, materialCorr, &dca1); getPxPyPz(trackPart1, pVect1); auto trackPart2 = getTrackPar(t2); @@ -5040,8 +5107,8 @@ void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPart2, - 2.f, materialCorr, &dca2); + {collision.posX(), collision.posY(), collision.posZ()}, trackPart2, + 2.f, materialCorr, &dca2); getPxPyPz(trackPart2, pVect2); // Recalculated quantities @@ -5055,16 +5122,16 @@ void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -5082,18 +5149,19 @@ void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } } template -void VarManager::FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, - float *values, PairCandidateType pairType) { +void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, + float* values, PairCandidateType pairType) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (pairType == kTripleCandidateToEEPhoton) { float m1 = o2::constants::physics::MassElectron; @@ -5161,12 +5229,13 @@ void VarManager::FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, } template -void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { +void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) +{ // // Lightweight fill function called from the innermost event mixing loop // if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5206,7 +5275,7 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -5216,9 +5285,9 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -5239,18 +5308,18 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -5267,18 +5336,18 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -5288,7 +5357,7 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -5296,18 +5365,18 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -5319,9 +5388,9 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -5340,13 +5409,13 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { float Psi2C1 = getEventPlane(2, values[kQ2X0C1], values[kQ2Y0C1]); float Psi2C2 = getEventPlane(2, values[kQ2X0C2], values[kQ2Y0C2]); values[kCos2DeltaPhi] = TMath::Cos( - 2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP + 2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP values[kCos2DeltaPhiEv1] = TMath::Cos(2 * (v1.Phi() - Psi2A1)); values[kCos2DeltaPhiEv2] = TMath::Cos(2 * (v2.Phi() - Psi2A2)); values[kU2Q2] = - values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + - values[kQ2Y0A1] * - TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP + values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0A1] * + TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP values[kU2Q2Ev1] = values[kQ2X0A1] * TMath::Cos(2 * v1.Phi()) + values[kQ2Y0A1] * TMath::Sin(2 * v1.Phi()); values[kU2Q2Ev2] = values[kQ2X0A2] * TMath::Cos(2 * v2.Phi()) + @@ -5365,10 +5434,10 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { float V2ME_EP = values[kV2EP1] * values[kCos2DeltaPhiMu1] + values[kV2EP2] * values[kCos2DeltaPhiMu2]; values[kV2ME_SP] = - std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; + std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; values[kWV2ME_SP] = std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : 1.0; values[kV2ME_EP] = - std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; + std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; values[kWV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : 1.0; // Cumulant part @@ -5378,20 +5447,20 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { values[kV24p] * values[kCos2DeltaPhiMu2]; values[kV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : V22ME; + ? 0. + : V22ME; values[kWV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : 1.0; + ? 0. + : 1.0; values[kV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : V24ME; + ? 0. + : V24ME; values[kWV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : 1.0; + ? 0. + : 1.0; // coherent Jpsi A2 bool useCoherentJpsiA2 = fgUsedVars[kA2EPME_TPC] || @@ -5400,7 +5469,7 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = - boostv12(t1.sign() > 0 ? v1 : v2); + boostv12(t1.sign() > 0 ? v1 : v2); float Psi2A = t1.sign() > 0 ? Psi2A1 : Psi2A2; float Psi2B = t1.sign() > 0 ? Psi2B1 : Psi2B2; float Psi2C = t1.sign() > 0 ? Psi2C1 : Psi2C2; @@ -5408,31 +5477,31 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhiME_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] - : values[kDeltaPhiME_TPC]; + ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; values[kDeltaPhiME_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhiME_FT0A] = - values[kDeltaPhiME_FT0A] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] - : values[kDeltaPhiME_FT0A]; + values[kDeltaPhiME_FT0A] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; values[kDeltaPhiME_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhiME_FT0C] = - values[kDeltaPhiME_FT0C] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] - : values[kDeltaPhiME_FT0C]; + values[kDeltaPhiME_FT0C] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; // fold delta phMEi to [0, pi/2] values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_TPC] - : values[kDeltaPhiME_TPC]; + ? TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; values[kDeltaPhiME_FT0A] = values[kDeltaPhiME_FT0A] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_FT0A] - : values[kDeltaPhiME_FT0A]; + ? TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; values[kDeltaPhiME_FT0C] = values[kDeltaPhiME_FT0C] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_FT0C] - : values[kDeltaPhiME_FT0C]; + ? TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; values[kCos2DeltaPhiME_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhiME_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhiME_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -5441,11 +5510,11 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { float A2_FT0A = values[kCos2DeltaPhiME_FT0A] / R2EP; float A2_FT0C = values[kCos2DeltaPhiME_FT0C] / R2EP; values[kA2EPME_TPC] = - std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; + std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; values[kA2EPME_FT0A] = - std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; + std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; values[kA2EPME_FT0C] = - std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; + std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; } if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) { @@ -5457,98 +5526,98 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { TMath::Sin(2 * v12.Phi())); values[kM01POIME] = values[kMultDimuonsME] * values[kS11A]; values[kM0111POIME] = - values[kMultDimuonsME] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultDimuonsME] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIME] = (P2 * conj(Q21)).real() / values[kM01POIME]; values[kCORR4POIME] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POIME]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIME]; values[kM01POIoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME])) - ? values[kM01POIME] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME])) + ? values[kM01POIME] / values[kMultDimuonsME] + : 0; values[kM0111POIoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME])) - ? values[kM0111POIME] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME])) + ? values[kM0111POIME] / values[kMultDimuonsME] + : 0; values[kM11REFoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuonsME] + : 0; values[kM1111REFoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuonsME] + : 0; values[kCORR2REFbydimuonsME] = - std::isnan(values[kM11REFoverMpME]) || - std::isinf(values[kM11REFoverMpME]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMpME]) || - std::isinf(values[kM1111REFoverMpME]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbydimuonsME] = - std::isnan(values[kM1111REFoverMpME]) || - std::isinf(values[kM1111REFoverMpME]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMpME]) || - std::isinf(values[kM11REFoverMpME]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POIME] = std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) - ? 0 - : values[kCORR2POIME]; + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) + ? 0 + : values[kCORR2POIME]; values[kCORR4POIME] = - std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) - ? 0 - : values[kCORR4POIME]; + std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) + ? 0 + : values[kCORR4POIME]; } } if constexpr (pairType == kDecayToMuMu) { @@ -5560,7 +5629,7 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } if (fgUsedVars[kPairPhiv]) { @@ -5569,8 +5638,9 @@ void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { } template -void VarManager::FillPairRotation_ME(T const &t1, T const &t2, int rotation, - float *values) { +void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, + float* values) +{ if (!values) { values = fgValues; } @@ -5602,9 +5672,9 @@ void VarManager::FillPairRotation_ME(T const &t1, T const &t2, int rotation, values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt; @@ -5616,9 +5686,10 @@ void VarManager::FillPairRotation_ME(T const &t1, T const &t2, int rotation, } template -void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { +void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5638,29 +5709,29 @@ void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { if (fgUsedVars[kCosThetaStarRandom]) { // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; } if (fgUsedVars[kCosThetaStarFT0C]) { // event plane angle from FT0C ROOT::Math::XYZVector zaxisFT0C = - ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), - TMath::Sin(values[kPsi2C]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), + TMath::Sin(values[kPsi2C]), 0) + .Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); values[kCos2ThetaStarFT0C] = - values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } } bool useCoherentJpsiA2 = - fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(v1); @@ -5670,29 +5741,29 @@ void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + ? TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + ? TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + ? TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -5701,18 +5772,19 @@ void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; values[kA2EP_TPC] = - std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; values[kA2EP_FT0A] = - std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; values[kA2EP_FT0C] = - std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } } template -void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { +void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5754,11 +5826,11 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { // polarization parameters bool useHE = - fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame + fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame bool useCS = - fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame + fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -5779,18 +5851,18 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kMCPhiHE]) { values[kMCPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeHE]) { if (fgUsedVars[kMCCosThetaHE] && fgUsedVars[kMCPhiHE]) { if (values[kMCCosThetaHE] > 0) { values[kMCPhiTildeHE] = RecoDecay::constrainAngle( - values[kMCPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildeHE] = RecoDecay::constrainAngle( - values[kMCPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeHE] = -999; // not computable @@ -5807,18 +5879,18 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kMCPhiCS]) { values[kMCPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeCS]) { if (fgUsedVars[kMCCosThetaCS] && fgUsedVars[kMCPhiCS]) { if (values[kMCCosThetaCS] > 0) { values[kMCPhiTildeCS] = RecoDecay::constrainAngle( - values[kMCPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildeCS] = RecoDecay::constrainAngle( - values[kMCPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeCS] = -999; // not computable @@ -5828,7 +5900,7 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{v12.Vect().Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kMCCosThetaPP]) { @@ -5836,18 +5908,18 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kMCPhiPP]) { values[kMCPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildePP]) { if (fgUsedVars[kMCCosThetaPP] && fgUsedVars[kMCPhiPP]) { if (values[kMCCosThetaPP] > 0) { values[kMCPhiTildePP] = RecoDecay::constrainAngle( - values[kMCPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildePP] = RecoDecay::constrainAngle( - values[kMCPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildePP] = -999; // not computable @@ -5859,9 +5931,9 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kMCCosThetaRM]) { values[kMCCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -5878,18 +5950,18 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; // truth event plane angle ROOT::Math::XYZVector zaxisTrue = - ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), - TMath::Sin(values[kMCEventPlaneAngle]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } @@ -5897,40 +5969,41 @@ void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { fgUsedVars[kCos2DeltaPhi_MC] || fgUsedVars[kCos2DeltaPhiPP_MC]) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = - boostv12(t1.pdgCode() > 0 ? v1 : v2); + boostv12(t1.pdgCode() > 0 ? v1 : v2); // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_Random] = phi - values[kRandomPsi2]; values[kDeltaPhi_Random] = - values[kDeltaPhi_Random] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] - : values[kDeltaPhi_Random]; + values[kDeltaPhi_Random] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; values[kDeltaPhi_MC] = phi - values[kMCEventPlaneAngle]; values[kDeltaPhi_MC] = - values[kDeltaPhi_MC] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] - : values[kDeltaPhi_MC]; + values[kDeltaPhi_MC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; // fold delta phi into [-pi/2, pi/2] values[kDeltaPhi_Random] = - values[kDeltaPhi_Random] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_Random] - : values[kDeltaPhi_Random]; + values[kDeltaPhi_Random] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; values[kDeltaPhi_MC] = values[kDeltaPhi_MC] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_MC] - : values[kDeltaPhi_MC]; + ? o2::constants::math::PI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; values[kCos2DeltaPhi_Random] = TMath::Cos(2. * (phi - values[kRandomPsi2])); values[kCos2DeltaPhi_MC] = - TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); + TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); } } template -void VarManager::FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, - float *values) { +void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (candidateType == kTripleCandidateToEEPhoton) { @@ -6013,18 +6086,19 @@ void VarManager::FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, template -void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, - float *values) { +void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, + float* values) +{ // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -6053,16 +6127,16 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else if constexpr ((pairType == kDecayToMuMu) && muonHasCov) { @@ -6117,7 +6191,7 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, // \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); covMatrixPCA = fgFitterTwoProngBarrel.calcPCACovMatrixFlat(); values[kVertexingChi2PCA] = - fgFitterTwoProngBarrel.getChi2AtPCACandidate(); + fgFitterTwoProngBarrel.getChi2AtPCACandidate(); v1 = {fgFitterTwoProngBarrel.getTrack(0).getPt(), fgFitterTwoProngBarrel.getTrack(0).getEta(), fgFitterTwoProngBarrel.getTrack(0).getPhi(), m1}; @@ -6149,14 +6223,14 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, double theta = std::atan2(dz, std::sqrt(dx * dx + dy * dy)); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingLxy] = dx * dx + dy * dy; values[kVertexingLz] = dz * dz; @@ -6166,60 +6240,60 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingTauz] = - -dz * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + -dz * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 values[kVertexingLzProjected] = - (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); + (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); values[kVertexingLxyProjected] = (dx * v12.Px()) + (dy * v12.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); values[kVertexingLxyzProjected] = - (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); + (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + - (v12.Pz() * v12.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (v12.Pt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + - (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } } else if constexpr (((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) || @@ -6263,57 +6337,57 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr] || fgUsedVars[kCosPointingAngle]) { values[kVertexingLxy] = - std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); values[kVertexingLz] = std::sqrt(dzPair2PV * dzPair2PV); values[kVertexingLxyz] = - std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + - dzPair2PV * dzPair2PV); + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + + dzPair2PV * dzPair2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * - dxPair2PV * dxPair2PV + - (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * - dyPair2PV * dyPair2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * - dxPair2PV * dyPair2PV); + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * - dzPair2PV * dzPair2PV; + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * - dxPair2PV * dxPair2PV + - (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * - dyPair2PV * dyPair2PV + - (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * - dzPair2PV * dzPair2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * - dxPair2PV * dyPair2PV + - (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * - dxPair2PV * dzPair2PV + - (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * - dyPair2PV * dzPair2PV); + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV + + (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * + dxPair2PV * dzPair2PV + + (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * + dyPair2PV * dzPair2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime( - KFPV, KFGeoTwoProng.GetMass()) / + KFPV, KFGeoTwoProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzPair2PV * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * @@ -6321,48 +6395,48 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, values[kVertexingPz] = TMath::Abs(KFGeoTwoProng.GetPz()); values[kVertexingSV] = KFGeoTwoProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / - (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / + (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + - std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + - std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + + std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + + std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); } // As defined in Run 2 (projected onto momentum) if (fgUsedVars[kVertexingLxyProjected] || fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { values[kVertexingLzProjected] = - (dzPair2PV * KFGeoTwoProng.GetPz()) / - TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); + (dzPair2PV * KFGeoTwoProng.GetPz()) / + TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); values[kVertexingLxyProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + - (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); values[kVertexingLxyzProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()) + (dzPair2PV * KFGeoTwoProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + - (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + - (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + + (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoTwoProng.GetMass() / (KFGeoTwoProng.GetPt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (KFGeoTwoProng.GetPt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (KFGeoTwoProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoTwoProng.GetMass() / TMath::Abs(KFGeoTwoProng.GetPz()); @@ -6371,16 +6445,16 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, if (fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr]) { values[kVertexingLxyOverErr] = - values[kVertexingLxy] / values[kVertexingLxyErr]; + values[kVertexingLxy] / values[kVertexingLxyErr]; values[kVertexingLzOverErr] = - values[kVertexingLz] / values[kVertexingLzErr]; + values[kVertexingLz] / values[kVertexingLzErr]; values[kVertexingLxyzOverErr] = - values[kVertexingLxyz] / values[kVertexingLxyzErr]; + values[kVertexingLxyz] / values[kVertexingLxyzErr]; } if (fgUsedVars[kKFChi2OverNDFGeo]) { values[kKFChi2OverNDFGeo] = - KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); + KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); } if (fgUsedVars[kKFCosPA]) { values[kKFCosPA] = calculateCosPA(KFGeoTwoProng, KFPV); @@ -6400,20 +6474,20 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, } if (fgUsedVars[kKFDCAxyBetweenProngs]) { values[kKFDCAxyBetweenProngs] = - trk0KF.GetDistanceFromParticleXY(trk1KF); + trk0KF.GetDistanceFromParticleXY(trk1KF); } if (fgUsedVars[kKFTracksDCAxyzMax]) { values[kKFTracksDCAxyzMax] = - values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] - ? values[kKFTrack0DCAxyz] - : values[kKFTrack1DCAxyz]; + values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] + ? values[kKFTrack0DCAxyz] + : values[kKFTrack1DCAxyz]; } if (fgUsedVars[kKFTracksDCAxyMax]) { values[kKFTracksDCAxyMax] = TMath::Abs(values[kKFTrack0DCAxy]) > - TMath::Abs(values[kKFTrack1DCAxy]) - ? values[kKFTrack0DCAxy] - : values[kKFTrack1DCAxy]; + TMath::Abs(values[kKFTrack1DCAxy]) + ? values[kKFTrack0DCAxy] + : values[kKFTrack1DCAxy]; } if (fgUsedVars[kKFTrack0DeviationFromPV] || fgUsedVars[kKFTrack1DeviationFromPV]) { @@ -6423,9 +6497,9 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, if (fgUsedVars[kKFTrack0DeviationxyFromPV] || fgUsedVars[kKFTrack1DeviationxyFromPV]) { values[kKFTrack0DeviationxyFromPV] = - trk0KF.GetDeviationFromVertexXY(KFPV); + trk0KF.GetDeviationFromVertexXY(KFPV); values[kKFTrack1DeviationxyFromPV] = - trk1KF.GetDeviationFromVertexXY(KFPV); + trk1KF.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFJpsiDCAxyz]) { values[kKFJpsiDCAxyz] = KFGeoTwoProng.GetDistanceFromVertex(KFPV); @@ -6436,15 +6510,15 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, if (fgUsedVars[kKFPairDeviationFromPV] || fgUsedVars[kKFPairDeviationxyFromPV]) { values[kKFPairDeviationFromPV] = - KFGeoTwoProng.GetDeviationFromVertex(KFPV); + KFGeoTwoProng.GetDeviationFromVertex(KFPV); values[kKFPairDeviationxyFromPV] = - KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); + KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFChi2OverNDFGeoTop] || fgUsedVars[kKFMassGeoTop]) { KFParticle KFGeoTopTwoProngBarrel = KFGeoTwoProng; KFGeoTopTwoProngBarrel.SetProductionVertex(KFPV); values[kKFChi2OverNDFGeoTop] = - KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); + KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); float mass = 0., massErr = 0.; if (!KFGeoTopTwoProngBarrel.GetMass(mass, massErr)) { values[kKFMassGeoTop] = mass; @@ -6480,20 +6554,21 @@ void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, template void VarManager::FillPairVertexingRecomputePV( - C const & /*collision*/, T const &t1, T const &t2, - const o2::dataformats::VertexBase &pvRefitted, float *values) { + C const& /*collision*/, T const& t1, T const& t2, + const o2::dataformats::VertexBase& pvRefitted, float* values) +{ // recompute decay lenght variables using updated primary vertex // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -6547,29 +6622,30 @@ void VarManager::FillPairVertexingRecomputePV( } values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + - (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); + (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + + (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } } } template -void VarManager::FillTripletVertexing(C const &collision, T const &t1, - T const &t2, T const &t3, +void VarManager::FillTripletVertexing(C const& collision, T const& t1, + T const& t2, T const& t3, VarManager::PairCandidateType tripletType, - float *values) { + float* values) +{ // TODO: Vertexing error variables constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -6594,26 +6670,26 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; std::array t3covs = { - t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -6650,7 +6726,7 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); std::array covMatrixPCA = - fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); @@ -6668,16 +6744,16 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -6686,61 +6762,61 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } else { KFParticle trk0KF; @@ -6791,59 +6867,59 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, double dzTriplet2PV = KFGeoThreeProng.GetZ() - KFPV.GetZ(); values[kVertexingLxy] = - std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); values[kVertexingLz] = std::sqrt(dzTriplet2PV * dzTriplet2PV); values[kVertexingLxyz] = - std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + - dzTriplet2PV * dzTriplet2PV); + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + + dzTriplet2PV * dzTriplet2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet2PV * dxTriplet2PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet2PV * dyTriplet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet2PV * dyTriplet2PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet2PV * dzTriplet2PV; + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet2PV * dxTriplet2PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet2PV * dyTriplet2PV + - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet2PV * dzTriplet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet2PV * dyTriplet2PV + - (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * - dxTriplet2PV * dzTriplet2PV + - (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * - dyTriplet2PV * dzTriplet2PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet2PV * dzTriplet2PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet2PV * dzTriplet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( - KFPV, KFGeoThreeProng.GetMass()) / + KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzTriplet2PV * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * @@ -6851,43 +6927,43 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, values[kVertexingPz] = TMath::Abs(KFGeoThreeProng.GetPz()); values[kVertexingSV] = KFGeoThreeProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / - (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + - std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + - std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + + std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + + std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); values[kVertexingLzProjected] = - (dzTriplet2PV * KFGeoThreeProng.GetPz()) / - TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + (dzTriplet2PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); values[kVertexingLxyProjected] = - (dxTriplet2PV * KFGeoThreeProng.GetPx()) + - (dyTriplet2PV * KFGeoThreeProng.GetPy()); + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); values[kVertexingLxyzProjected] = - (dxTriplet2PV * KFGeoThreeProng.GetPx()) + - (dyTriplet2PV * KFGeoThreeProng.GetPy()) + - (dzTriplet2PV * KFGeoThreeProng.GetPz()); + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()) + + (dzTriplet2PV * KFGeoThreeProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + - (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass() / (KFGeoThreeProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoThreeProng.GetMass() / TMath::Abs(KFGeoThreeProng.GetPz()); @@ -6897,19 +6973,20 @@ void VarManager::FillTripletVertexing(C const &collision, T const &t1, template -void VarManager::FillDileptonTrackVertexing(C const &collision, - T1 const &lepton1, - T1 const &lepton2, T1 const &track, - float *values) { +void VarManager::FillDileptonTrackVertexing(C const& collision, + T1 const& lepton1, + T1 const& lepton2, T1 const& track, + float* values) +{ constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mtrack = o2::constants::physics::MassMuon; @@ -6945,35 +7022,35 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; std::array lepton1covs = { - lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), - lepton1.cSnpY(), lepton1.cSnpZ(), lepton1.cSnpSnp(), - lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), - lepton1.cTglTgl(), lepton1.c1PtY(), lepton1.c1PtZ(), - lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; + lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), + lepton1.cSnpY(), lepton1.cSnpZ(), lepton1.cSnpSnp(), + lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), + lepton1.cTglTgl(), lepton1.c1PtY(), lepton1.c1PtZ(), + lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, lepton1covs}; std::array lepton2pars = {lepton2.y(), lepton2.z(), lepton2.snp(), lepton2.tgl(), lepton2.signed1Pt()}; std::array lepton2covs = { - lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), - lepton2.cSnpY(), lepton2.cSnpZ(), lepton2.cSnpSnp(), - lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), - lepton2.cTglTgl(), lepton2.c1PtY(), lepton2.c1PtZ(), - lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; + lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), + lepton2.cSnpY(), lepton2.cSnpZ(), lepton2.cSnpSnp(), + lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), + lepton2.cTglTgl(), lepton2.c1PtY(), lepton2.c1PtZ(), + lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, lepton2covs}; std::array lepton3pars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; std::array lepton3covs = { - track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), - track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), - track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), - track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; o2::track::TrackParCov pars3{track.x(), track.alpha(), lepton3pars, lepton3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); procCodeJpsi = VarManager::fgFitterTwoProngBarrel.process(pars1, pars2); } else { return; @@ -7057,68 +7134,68 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || fgUsedVars[kVertexingLxyz]) { values[VarManager::kVertexingLxy] = - (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); values[VarManager::kVertexingLz] = - (collision.posZ() - secondaryVertex[2]) * - (collision.posZ() - secondaryVertex[2]); + (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[VarManager::kVertexingLxyz] = values[VarManager::kVertexingLxy] + values[VarManager::kVertexingLz]; values[VarManager::kVertexingLxy] = - std::sqrt(values[VarManager::kVertexingLxy]); + std::sqrt(values[VarManager::kVertexingLxy]); values[VarManager::kVertexingLz] = - std::sqrt(values[VarManager::kVertexingLz]); + std::sqrt(values[VarManager::kVertexingLz]); values[VarManager::kVertexingLxyz] = - std::sqrt(values[VarManager::kVertexingLxyz]); + std::sqrt(values[VarManager::kVertexingLxyz]); } if (fgUsedVars[kVertexingLxyzErr] || fgUsedVars[kVertexingLxyErr] || fgUsedVars[kVertexingLzErr]) { values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); } values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v123.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); if (fgUsedVars[kCosPointingAngle] && fgUsedVars[kVertexingLxyz]) { values[VarManager::kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); } // run 2 definitions: Lxy projected onto the momentum vector of the // candidate @@ -7126,27 +7203,27 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingTauxyProjected]) { values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / v123.Pt(); + values[kVertexingLxyProjected] * v123.M() / v123.Pt(); } } } else { @@ -7176,7 +7253,7 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, // Quantities between 3rd prong and candidate if (fgUsedVars[kKFDCAxyzBetweenProngs]) { values[kKFDCAxyzBetweenProngs] = - KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); + KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); } KFGeoThreeProng.SetConstructMethod(2); @@ -7208,69 +7285,69 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, dyTriplet3PV * dyTriplet3PV + dzTriplet3PV * dzTriplet3PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet3PV * dxTriplet3PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet3PV * dyTriplet3PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet3PV * dyTriplet3PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet3PV * dzTriplet3PV; + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet3PV * dxTriplet3PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet3PV * dyTriplet3PV + - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet3PV * dzTriplet3PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet3PV * dyTriplet3PV + - (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * - dxTriplet3PV * dzTriplet3PV + - (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * - dyTriplet3PV * dzTriplet3PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet3PV * dzTriplet3PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet3PV * dzTriplet3PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / - values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / + values[kVertexingLxyz]; if (fgUsedVars[kVertexingTauxy]) { values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( - KFPV, KFGeoThreeProng.GetMass()) / + KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kVertexingTauxyErr]) { values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / - (KFGeoThreeProng.GetPt() * - o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * + o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kCosPointingAngle]) { values[VarManager::kCosPointingAngle] = - (dxTriplet3PV * KFGeoThreeProng.GetPx() + - dyTriplet3PV * KFGeoThreeProng.GetPy() + - dzTriplet3PV * KFGeoThreeProng.GetPz()) / - (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); + (dxTriplet3PV * KFGeoThreeProng.GetPx() + + dyTriplet3PV * KFGeoThreeProng.GetPy() + + dzTriplet3PV * KFGeoThreeProng.GetPz()) / + (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); } } // end calculate vertex variables @@ -7279,33 +7356,33 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { values[kVertexingLzProjected] = - (dzTriplet3PV * KFGeoThreeProng.GetPz()) / - TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + (dzTriplet3PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); values[kVertexingLxyProjected] = - (dxTriplet3PV * KFGeoThreeProng.GetPx()) + - (dyTriplet3PV * KFGeoThreeProng.GetPy()); + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); values[kVertexingLxyzProjected] = - (dxTriplet3PV * KFGeoThreeProng.GetPx()) + - (dyTriplet3PV * KFGeoThreeProng.GetPy()) + - (dzTriplet3PV * KFGeoThreeProng.GetPz()); + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()) + + (dzTriplet3PV * KFGeoThreeProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + - (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); values[kVertexingTauxyProjected] = - (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / - (KFGeoThreeProng.GetPt()); + (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / + (KFGeoThreeProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = - (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / - TMath::Abs(KFGeoThreeProng.GetPz()); + (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / + TMath::Abs(KFGeoThreeProng.GetPz()); } // end Run 2 quantities } // end eventHasVtxCov } // end (candidateType == kBtoJpsiEEK) && trackHasCov @@ -7314,15 +7391,16 @@ void VarManager::FillDileptonTrackVertexing(C const &collision, template void VarManager::FillQVectorFromGFW( - C const & /*collision*/, A const &compA11, A const &compB11, - A const &compC11, A const &compA21, A const &compB21, A const &compC21, - A const &compA31, A const &compB31, A const &compC31, A const &compA41, - A const &compB41, A const &compC41, A const &compA23, A const &compA42, - float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, - float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, - float S41A, float *values) { + C const& /*collision*/, A const& compA11, A const& compB11, + A const& compC11, A const& compA21, A const& compB21, A const& compC21, + A const& compA31, A const& compB31, A const& compC31, A const& compA41, + A const& compB41, A const& compC41, A const& compA23, A const& compA42, + float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, + float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, + float S41A, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Fill Qn vectors from generic flow framework for different eta gap A, B, C @@ -7353,13 +7431,13 @@ void VarManager::FillQVectorFromGFW( values[kQ4X0C] = compC41.real() / S11C; values[kQ4Y0C] = compC41.imag() / S11C; values[kQ42XA] = - compA42.real(); // Only being used by cumulants, no need for normalization + compA42.real(); // Only being used by cumulants, no need for normalization values[kQ42YA] = - compA42.imag(); // Only being used by cumulants, no need for normalization + compA42.imag(); // Only being used by cumulants, no need for normalization values[kQ23XA] = - compA23.real(); // Only being used by cumulants, no need for normalization + compA23.real(); // Only being used by cumulants, no need for normalization values[kQ23YA] = - compA23.imag(); // Only being used by cumulants, no need for normalization + compA23.imag(); // Only being used by cumulants, no need for normalization values[kS11A] = S11A; values[kS12A] = S12A; values[kS13A] = S13A; @@ -7387,7 +7465,7 @@ void VarManager::FillQVectorFromGFW( // Fill necessary quantities for cumulant calculations with weighted Q-vectors values[kM11REF] = S21A - S12A; values[kM1111REF] = - S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; + S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; values[kCORR2REF] = (norm(compA21) - S12A) / values[kM11REF]; values[kCORR4REF] = (std::pow(norm(compA21), 2) + norm(compA42) - 2. * (compA42 * conj(compA21) * conj(compA21)).real() + @@ -7395,25 +7473,25 @@ void VarManager::FillQVectorFromGFW( 4. * S12A * norm(compA21) - 6. * S14A + 2. * S22A) / values[kM1111REF]; values[kCORR2REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR2REF]; values[kM11REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kM11REF]; + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kM11REF]; values[kCORR4REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR4REF]; values[kM1111REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kM1111REF]; + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kM1111REF]; values[kCORR2CORR4REF] = values[kCORR2REF] * values[kCORR4REF]; values[kM11M1111REF] = values[kM11REF] * values[kM1111REF]; @@ -7425,17 +7503,17 @@ void VarManager::FillQVectorFromGFW( values[kM11REFetagap] = S11B * S11C; values[kCORR2REFetagap] = ((QB * conj(QC)).real()) / values[kM11REFetagap]; values[kCORR2REFetagap] = std::isnan(values[kM11REFetagap]) || - std::isinf(values[kM11REFetagap]) || - std::isnan(values[kCORR2REFetagap]) || - std::isinf(values[kCORR2REFetagap]) - ? 0 - : values[kCORR2REFetagap]; - values[kM11REFetagap] = std::isnan(values[kM11REFetagap]) || - std::isinf(values[kM11REFetagap]) || - std::isnan(values[kCORR2REFetagap]) || - std::isinf(values[kCORR2REFetagap]) + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) ? 0 - : values[kM11REFetagap]; + : values[kCORR2REFetagap]; + values[kM11REFetagap] = std::isnan(values[kM11REFetagap]) || + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) + ? 0 + : values[kM11REFetagap]; // TODO: provide different computations for R // Compute the R factor using the 2 sub-events technique for second and third @@ -7450,13 +7528,13 @@ void VarManager::FillQVectorFromGFW( values[kPsi2C] = Psi2C; values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR3SP] = - (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); values[kR2EP_AB] = TMath::Cos(2 * (Psi2A - Psi2B)); values[kR2EP_AC] = TMath::Cos(2 * (Psi2A - Psi2C)); @@ -7465,9 +7543,10 @@ void VarManager::FillQVectorFromGFW( } template -void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { +void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float xQVecFT0a = collision.qvecFT0ARe(); // already normalised @@ -7497,11 +7576,11 @@ void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { values[kMultAPOS] = collision.nTrkTPCpos(); values[kMultANEG] = collision.nTrkTPCneg(); values[kMultB] = - collision - .sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity + collision + .sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity values[kMultC] = - collision - .sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity + collision + .sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity // Q-vectors components correlation (A, B, C) values[kQ2YYAB] = values[kQ2Y0A] * values[kQ2Y0B]; @@ -7520,9 +7599,9 @@ void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -7533,11 +7612,11 @@ void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { values[kPsi2C] = Psi2C; values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR2SP_FT0CTPCPOS] = (xQVecFT0c * xQVecBPos + yQVecFT0c * yQVecBPos); values[kR2SP_FT0CTPCNEG] = (xQVecFT0c * xQVecBNeg + yQVecFT0c * yQVecBNeg); values[kR2SP_FT0ATPCPOS] = (xQVecFT0a * xQVecBPos + yQVecFT0a * yQVecBPos); @@ -7559,27 +7638,28 @@ void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { values[kR2EP_AC] = TMath::Cos(2 * getDeltaPsiInRange(epTPCFull, epFT0c, 2)); values[kR2EP_BC] = TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epFT0c, 2)); values[kR2EP_FT0CTPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); values[kR2EP_FT0CTPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); values[kR2EP_FT0ATPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); values[kR2EP_FT0ATPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); values[kR2EP_FT0MTPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); values[kR2EP_FT0MTPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); values[kR2EP_FV0ATPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); values[kR2EP_FV0ATPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); } template -void VarManager::FillSpectatorPlane(C const &collision, float *values) { +void VarManager::FillSpectatorPlane(C const& collision, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } auto zncEnergy = collision.energySectorZNC(); @@ -7594,13 +7674,13 @@ void VarManager::FillSpectatorPlane(C const &collision, float *values) { } } float znaCommon = - collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); + collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); float zncCommon = - collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); + collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); float zpaCommon = - collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); + collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); float zpcCommon = - collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); + collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); // Store ZNA and ZNC energies for calibrations values[kEnergyCommonZNA] = znaCommon; @@ -7682,7 +7762,7 @@ void VarManager::FillSpectatorPlane(C const &collision, float *values) { values[kQ1ZNACXY] = values[kQ1ZNAX] * values[kQ1ZNCY]; } else { values[kQ1ZNACXX] = values[kQ1ZNACYY] = values[kQ1ZNACYX] = - values[kQ1ZNACXY] = 999.; + values[kQ1ZNACXY] = 999.; } if (znaCommon != 0 && sumZNA != 0 && zncCommon != 0 && sumZNC != 0) { @@ -7692,10 +7772,11 @@ void VarManager::FillSpectatorPlane(C const &collision, float *values) { } template -void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { +void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -7734,13 +7815,13 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { values[kU3Q3] = values[kQ3X0A] * TMath::Cos(3 * v12.Phi()) + values[kQ3Y0A] * TMath::Sin(3 * v12.Phi()); values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR3SP] = - (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); float Psi2A = getEventPlane(2, values[kQ2X0A], values[kQ2Y0A]); float Psi2APOS = getEventPlane(2, values[kQ2X0APOS], values[kQ2Y0APOS]); @@ -7767,7 +7848,7 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { values[kWV2SP] = std::isnan(V2SP) || std::isinf(V2SP) ? 0. : 1.0; values[kV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : V2EP; values[kV2EP_FT0C] = - std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; + std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; values[kWV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : 1.0; if (std::isnan(VarManager::fgValues[VarManager::kU2Q2])) { @@ -7804,24 +7885,24 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { ROOT::Math::XYZVectorF v_CM = (t1.sign() > 0 ? v1_CM : v2_CM); ROOT::Math::XYZVector zaxisTPC = - ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); values[kCosThetaStarTPC] = v_CM.Dot(zaxisTPC); ROOT::Math::XYZVector zaxisFT0A = - ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); values[kCosThetaStarFT0A] = v_CM.Dot(zaxisFT0A); ROOT::Math::XYZVector zaxisFT0C = - ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); values[kCos2ThetaStarFT0C] = - values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } // Coherent Jpsi A2 bool useCoherentJpsiA2 = - fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { // remove daughter from TPC Q-vector // TODO: remove based on track cut in qVectorTable @@ -7867,36 +7948,36 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { // reaction plane float phi = v_daughter.Phi() > o2::constants::math::PI - ? o2::constants::math::TwoPI - v_daughter.Phi() - : v_daughter.Phi(); + ? o2::constants::math::TwoPI - v_daughter.Phi() + : v_daughter.Phi(); values[kDeltaPhi_TPC] = phi > Psi2ATPC ? phi - Psi2ATPC : Psi2ATPC - phi; values[kDeltaPhi_TPC] = - values[kDeltaPhi_TPC] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhi_FT0A] = - values[kDeltaPhi_FT0A] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhi_FT0C] = - values[kDeltaPhi_FT0C] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] values[kDeltaPhi_TPC] = - values[kDeltaPhi_TPC] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = - values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = - values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2ATPC)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -7905,11 +7986,11 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; values[kA2EP_TPC] = - std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; values[kA2EP_FT0A] = - std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; values[kA2EP_FT0C] = - std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } // kV4, kC4POI, kC4REF etc. @@ -7926,356 +8007,356 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { 2. * values[kS13A]); values[kCORR2POI] = (P2 * conj(Q21)).real() / values[kM01POI]; values[kCORR4POI] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POI]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POI]; values[kM01POIoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? values[kM01POI] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? values[kM01POI] / values[kMultDimuons] + : 0; values[kM0111POIoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI])) - ? values[kM0111POI] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? values[kM0111POI] / values[kMultDimuons] + : 0; values[kM11REFoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuons] + : 0; values[kM1111REFoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuons] + : 0; values[kCORR2REFbydimuons] = std::isnan(values[kM11REFoverMp]) || - std::isinf(values[kM11REFoverMp]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMp]) || - std::isinf(values[kM1111REFoverMp]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMp]) || + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbydimuons] = std::isnan(values[kM1111REFoverMp]) || - std::isinf(values[kM1111REFoverMp]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMp]) || - std::isinf(values[kM11REFoverMp]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMp]) || + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POI] = - std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || - std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2POI]; + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI]; values[kCORR4POI] = - std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) - ? 0 - : values[kCORR4POI]; + std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR4POI]; values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REFoverMp]) || - std::isinf(values[kM11M1111REFoverMp]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF]) - ? 0 - : values[kCORR2CORR4REF]; + std::isinf(values[kM11M1111REFoverMp]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : values[kCORR2CORR4REF]; values[kCORR2POICORR4POI] = - std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2POI] * values[kCORR4POI]; + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI] * values[kCORR4POI]; values[kCORR2REFCORR4POI] = - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2REF] * values[kCORR4POI]; + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2REF] * values[kCORR4POI]; values[kCORR2REFCORR2POI] = - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) - ? 0 - : values[kCORR2REF] * values[kCORR2POI]; + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR2REF] * values[kCORR2POI]; values[kM11M1111REFoverMp] = - values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || - std::isinf(values[kM11M1111REF]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF])) - ? values[kM11M1111REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF])) + ? values[kM11M1111REF] / values[kMultDimuons] + : 0; values[kM01M0111overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] + : 0; values[kM11M0111overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] + : 0; values[kM11M01overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI])) - ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] + : 0; std::complex P2plus(TMath::Cos(2 * v1.Phi()), TMath::Sin(2 * v1.Phi())); std::complex P2minus(TMath::Cos(2 * v2.Phi()), TMath::Sin(2 * v2.Phi())); values[kM11REFoverMpplus] = - values[kMultAntiMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultAntiMuons] + : 0; values[kM1111REFoverMpplus] = - values[kMultAntiMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM1111REF] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultAntiMuons] + : 0; values[kM11REFoverMpminus] = - values[kMultMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultMuons] + : 0; values[kM1111REFoverMpminus] = - values[kMultMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM1111REF] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultMuons] + : 0; values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POI]; values[kCORR2POIminus] = (P2minus * conj(Q21)).real() / values[kM01POI]; values[kM01POIplus] = values[kMultAntiMuons] * values[kS11A]; values[kM0111POIplus] = - values[kMultAntiMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultAntiMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POIplus]; values[kCORR4POIplus] = - (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - - 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)) - .real() / - values[kM0111POIplus]; + (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)) + .real() / + values[kM0111POIplus]; values[kM01POIminus] = values[kMultMuons] * values[kS11A]; values[kM0111POIminus] = - values[kMultMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIminus] = - (P2minus * conj(Q21)).real() / values[kM01POIminus]; + (P2minus * conj(Q21)).real() / values[kM01POIminus]; values[kCORR4POIminus] = - (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - - 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)) - .real() / - values[kM0111POIminus]; + (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)) + .real() / + values[kM0111POIminus]; values[kM01POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kM01POIplus]; + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kM01POIplus]; values[kM0111POIplus] = std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kM0111POIplus]; + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kM0111POIplus]; values[kCORR2POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kCORR2POIplus]; + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR2POIplus]; values[kCORR4POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kCORR4POIplus]; + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR4POIplus]; values[kM01POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kM01POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kM01POIminus]; values[kM0111POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kM0111POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kM0111POIminus]; values[kCORR2POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kCORR2POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR2POIminus]; values[kCORR4POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kCORR4POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR4POIminus]; values[kM01POIoverMpminus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) || - std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus])) - ? values[kM01POIminus] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM01POIminus] / values[kMultMuons] + : 0; values[kM0111POIoverMpminus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) || - std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus])) - ? values[kM0111POIminus] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM0111POIminus] / values[kMultMuons] + : 0; values[kM01POIoverMpplus] = - values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) || - std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus])) - ? values[kM01POIplus] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM01POIplus] / values[kMultAntiMuons] + : 0; values[kM0111POIoverMpplus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) || - std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus])) - ? values[kM0111POIplus] / values[kMultAntiMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM0111POIplus] / values[kMultAntiMuons] + : 0; } ROOT::Math::PtEtaPhiMVector v1_vp(v1.Pt(), v1.Eta(), v1.Phi() - Psi2B, @@ -8286,30 +8367,32 @@ void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { auto p12_vp = ROOT::Math::XYZVectorF(v12_vp.Px(), v12_vp.Py(), v12_vp.Pz()); auto p12_vp_projXZ = ROOT::Math::XYZVectorF(p12_vp.X(), 0, p12_vp.Z()); auto vDimu = (t1.sign() > 0 - ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()) - .Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), - v2_vp.Pz())) - : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()) - .Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), - v1_vp.Pz()))); + ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), + v2_vp.Pz())) + : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), + v1_vp.Pz()))); auto vRef = p12_vp.Cross(p12_vp_projXZ); values[kCosPhiVP] = vDimu.Dot(vRef) / (vRef.R() * vDimu.R()); values[kPhiVP] = std::acos(vDimu.Dot(vRef) / (vRef.R() * vDimu.R())); } -template void VarManager::FillZDC(T const &zdc, float *values) { +template +void VarManager::FillZDC(T const& zdc, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kEnergyCommonZNA] = - (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; + (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; values[kEnergyCommonZNC] = - (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; + (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; values[kEnergyCommonZPA] = - (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; + (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; values[kEnergyCommonZPC] = - (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; + (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; values[kTimeZNA] = zdc.timeZNA(); values[kTimeZNC] = zdc.timeZNC(); values[kTimeZPA] = zdc.timeZPA(); @@ -8317,10 +8400,11 @@ template void VarManager::FillZDC(T const &zdc, float *values) { } template -void VarManager::FillDileptonHadron(T1 const &dilepton, T2 const &hadron, - float *values, float hadronMass) { +void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, + float* values, float hadronMass) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || @@ -8343,7 +8427,7 @@ void VarManager::FillDileptonHadron(T1 const &dilepton, T2 const &hadron, ROOT::Math::PtEtaPhiMVector v12_Qvect = v1 - v2; double Pinv = v12.M(); double Q1 = - (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; + (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; values[kDileptonHadronKstar] = std::sqrt(Q1 * Q1 - v12_Qvect.M2()) / 2.0; } @@ -8365,14 +8449,15 @@ void VarManager::FillDileptonHadron(T1 const &dilepton, T2 const &hadron, template -void VarManager::FillEnergyCorrelatorTriple(C const &collision, - T1 const &lepton1, - T2 const &lepton2, T3 const &hadron, - float *values, float Translow, +void VarManager::FillEnergyCorrelatorTriple(C const& collision, + T1 const& lepton1, + T2 const& lepton2, T3 const& hadron, + float* values, float Translow, float Transhigh, bool applyFitMass, - float sidebandMass, float weight) { + float sidebandMass, float weight) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kVertexingTauxyProjectedPoleJPsiMass] || fgUsedVars[kVertexingLxyProjected]) { @@ -8419,7 +8504,7 @@ void VarManager::FillEnergyCorrelatorTriple(C const &collision, values[kPtDau] = v2.pt(); values[kEtaDau] = v2.eta(); values[kPhiDau] = - RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); + RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); float deltaphi = RecoDecay::constrainAngle(v1.phi() - v2.phi(), -o2::constants::math::PI); @@ -8450,40 +8535,40 @@ void VarManager::FillEnergyCorrelatorTriple(C const &collision, 3. * o2::constants::math::PIHalf); values[kPtDau_randomPhi_trans] = v2.pt(); ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans( - v2.pt(), v2.eta(), randomPhi_trans, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_trans, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); values[kWeight_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_trans) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * weight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( - v2.pt(), v2.eta(), randomPhi_toward, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_toward, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); values[kWeight_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_toward) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * weight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_away( - v2.pt(), v2.eta(), randomPhi_away, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_away, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_away] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); values[kWeight_randomPhi_away] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_away) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * weight; values[kdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); values[kdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } } @@ -8491,9 +8576,10 @@ void VarManager::FillEnergyCorrelatorTriple(C const &collision, template void VarManager::FillEnergyCorrelatorsUnfoldingTriple( - T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, - T5 const &t1, float *values, bool applyFitMass, float Effweight_rec, - float Accweight_gen, float Translow, float Transhigh) { + T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, + T5 const& t1, float* values, bool applyFitMass, float Effweight_rec, + float Accweight_gen, float Translow, float Transhigh) +{ if (fgUsedVars[kMCCosChi_gen] || fgUsedVars[kMCWeight_gen] || fgUsedVars[kMCdeltaeta_gen] || fgUsedVars[kMCCosChi_rec] || fgUsedVars[kMCWeight_rec] || fgUsedVars[kMCdeltaeta_rec]) { @@ -8521,12 +8607,12 @@ void VarManager::FillEnergyCorrelatorsUnfoldingTriple( o2::constants::physics::MassJPsi); ROOT::Math::PtEtaPhiMVector v2_gen(t1.pt(), t1.eta(), t1.phi(), MassHadron); float E_boost_gen = - LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); float CosChi_gen = - LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); + LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); values[kMCCosChi_gen] = CosChi_gen; values[kMCWeight_gen] = - E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; + E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; values[kMCdeltaeta_gen] = track.eta() - t1.eta(); ROOT::Math::PtEtaPhiMVector v1_rec(dilepton.pt(), dilepton.eta(), @@ -8534,49 +8620,50 @@ void VarManager::FillEnergyCorrelatorsUnfoldingTriple( ROOT::Math::PtEtaPhiMVector v2_rec(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged); values[kMCCosChi_rec] = - LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); + LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); float E_boost_rec = - LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); values[kMCWeight_rec] = E_boost_rec / v1_rec.M() * Effweight_rec; values[kMCdeltaeta_rec] = dilepton.eta() - hadron.eta(); values[kMCCosChi_randomPhi_trans_rec] = -999.9f; values[kMCCosChi_randomPhi_trans_gen] = -999.9f; float deltaphi_rec = RecoDecay::constrainAngle( - dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); + dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); if ((deltaphi_rec > -Transhigh * o2::constants::math::PI && deltaphi_rec < -Translow * o2::constants::math::PI) || (deltaphi_rec > Translow * o2::constants::math::PI && deltaphi_rec < Transhigh * o2::constants::math::PI)) { float randomPhi_trans_rec = gRandom->Uniform( - -o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); + -o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_rec( - v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, - o2::constants::physics::MassPionCharged); + v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, + o2::constants::physics::MassPionCharged); values[kMCCosChi_randomPhi_trans_rec] = LorentzTransformJpsihadroncosChi( - "coschi", v1_rec, v2_randomPhi_trans_rec); + "coschi", v1_rec, v2_randomPhi_trans_rec); values[kMCWeight_randomPhi_trans_rec] = - LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, - v2_randomPhi_trans_rec) / - v1_rec.M() * Effweight_rec; + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, + v2_randomPhi_trans_rec) / + v1_rec.M() * Effweight_rec; ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_gen( - v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); + v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); values[kMCCosChi_randomPhi_trans_gen] = LorentzTransformJpsihadroncosChi( - "coschi", v1_gen, v2_randomPhi_trans_gen); + "coschi", v1_gen, v2_randomPhi_trans_gen); values[kMCWeight_randomPhi_trans_gen] = - LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, - v2_randomPhi_trans_gen) / - v1_gen.M() * Accweight_gen; + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, + v2_randomPhi_trans_gen) / + v1_gen.M() * Accweight_gen; } } } template -void VarManager::FillDileptonPhoton(T1 const &dilepton, T2 const &photon, - float *values) { +void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi]) { @@ -8603,9 +8690,10 @@ void VarManager::FillDileptonPhoton(T1 const &dilepton, T2 const &photon, } template -void VarManager::FillHadron(T const &hadron, float *values, float hadronMass) { +void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } ROOT::Math::PtEtaPhiMVector vhadron(hadron.pt(), hadron.eta(), hadron.phi(), @@ -8618,11 +8706,12 @@ void VarManager::FillHadron(T const &hadron, float *values, float hadronMass) { } template -void VarManager::FillSingleDileptonCharmHadron(Cand const &candidate, - H hfHelper, T &bdtScoreCharmHad, - float *values) { +void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, + H hfHelper, T& bdtScoreCharmHad, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (partType == kJPsi) { @@ -8656,9 +8745,10 @@ void VarManager::FillSingleDileptonCharmHadron(Cand const &candidate, template -void VarManager::FillDileptonCharmHadron(DQ const &dilepton, - HF const &charmHadron, H hfHelper, - T &bdtScoreCharmHad, float *values) { +void VarManager::FillDileptonCharmHadron(DQ const& dilepton, + HF const& charmHadron, H hfHelper, + T& bdtScoreCharmHad, float* values) +{ FillSingleDileptonCharmHadron(dilepton, hfHelper, bdtScoreCharmHad, values); FillSingleDileptonCharmHadron(charmHadron, hfHelper, @@ -8666,10 +8756,11 @@ void VarManager::FillDileptonCharmHadron(DQ const &dilepton, } template -void VarManager::FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, - T3 const &hadron2, float *values) { +void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, + T3 const& hadron2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -8717,8 +8808,8 @@ void VarManager::FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); values[kCosthetaDileptonDitrack] = - (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / - (v1.P() * v123.P()); + (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / + (v1.P() * v123.P()); values[kQ] = v123.M() - defaultDileptonMass - v23.M(); values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); @@ -8732,19 +8823,20 @@ void VarManager::FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, template void VarManager::FillDileptonTrackTrackVertexing( - C const &collision, T1 const &lepton1, T1 const &lepton2, T1 const &track1, - T1 const &track2, float *values) { + C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track1, + T1 const& track2, float* values) +{ constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!eventHasVtxCov || !trackHasCov) { return; } if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mlepton1 = o2::constants::physics::MassElectron; @@ -8830,7 +8922,7 @@ void VarManager::FillDileptonTrackTrackVertexing( // procCodeDileptonTrackTrack = // VarManager::fgFitterThreeProngBarrel.process(parsDilepton, pars3, pars4); procCodeDileptonTrackTrack = - VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); + VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); values[kVertexingProcCode] = procCodeDilepton; values[kVertexingQuadProcCode] = procCodeDileptonTrackTrack; @@ -8872,17 +8964,17 @@ void VarManager::FillDileptonTrackTrackVertexing( double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingChi2PCA] = fgFitterFourProngBarrel.getChi2AtPCACandidate(); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -8891,61 +8983,61 @@ void VarManager::FillDileptonTrackTrackVertexing( values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * mMother / - (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * mMother / - (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * mMother / - (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * mMother / - (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px() + - (secondaryVertex[1] - collision.posY()) * v1234.Py() + - (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v1234.Px() + + (secondaryVertex[1] - collision.posY()) * v1234.Py() + + (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); // // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); + (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + - ((secondaryVertex[1] - collision.posY()) * v1234.Py()); + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + - ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + - (v1234.Pz() * v1234.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + + (v1234.Pz() * v1234.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); + values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * mMother / (v1234.Pt()); + values[kVertexingLxyProjected] * mMother / (v1234.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * mMother / (v1234.P()); + values[kVertexingLxyzProjected] * mMother / (v1234.P()); } else { KFParticle lepton1KF; // lepton1 KFParticle lepton2KF; // lepton2 @@ -9029,60 +9121,60 @@ void VarManager::FillDileptonTrackTrackVertexing( double dzQuadlet2PV = KFGeoFourProng.GetZ() - KFPV.GetZ(); values[kVertexingLxy] = - std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); values[kVertexingLz] = std::sqrt(dzQuadlet2PV * dzQuadlet2PV); values[kVertexingLxyz] = - std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + - dzQuadlet2PV * dzQuadlet2PV); + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + + dzQuadlet2PV * dzQuadlet2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * - dxQuadlet2PV * dxQuadlet2PV + - (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * - dyQuadlet2PV * dyQuadlet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * - dxQuadlet2PV * dyQuadlet2PV); + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * - dzQuadlet2PV * dzQuadlet2PV; + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * - dxQuadlet2PV * dxQuadlet2PV + - (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * - dyQuadlet2PV * dyQuadlet2PV + - (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * - dzQuadlet2PV * dzQuadlet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * - dxQuadlet2PV * dyQuadlet2PV + - (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * - dxQuadlet2PV * dzQuadlet2PV + - (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * - dyQuadlet2PV * dzQuadlet2PV); + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * + dxQuadlet2PV * dzQuadlet2PV + + (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * + dyQuadlet2PV * dzQuadlet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoFourProng.GetPseudoProperDecayTime( - KFPV, KFGeoFourProng.GetMass()) / + KFPV, KFGeoFourProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzQuadlet2PV * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * @@ -9091,57 +9183,58 @@ void VarManager::FillDileptonTrackTrackVertexing( values[kVertexingSV] = KFGeoFourProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / - (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / + (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingChi2PCA] = KFGeoFourProng.GetChi2(); values[kCosPointingAngle] = - (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + - std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + - std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + + std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + + std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); // // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (dzQuadlet2PV * KFGeoFourProng.GetPz()) / - TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); + (dzQuadlet2PV * KFGeoFourProng.GetPz()) / + TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); values[kVertexingLxyProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + - (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); values[kVertexingLxyzProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()) + (dzQuadlet2PV * KFGeoFourProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + - (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + - (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + + (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoFourProng.GetMass() / (KFGeoFourProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoFourProng.GetMass() / TMath::Abs(KFGeoFourProng.GetPz()); values[kKFChi2OverNDFGeo] = - KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); + KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); } } //__________________________________________________________________ template -void VarManager::FillQuadMC(T1 const &dilepton, T2 const &track1, - T2 const &track2, float *values) { +void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, + T2 const& track2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -9170,14 +9263,15 @@ void VarManager::FillQuadMC(T1 const &dilepton, T2 const &track1, values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); values[kDeltaR] = - std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); + std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); } //__________________________________________________________________ template -float VarManager::calculatePhiV(T1 const &t1, T2 const &t2) { +float VarManager::calculatePhiV(T1 const& t1, T2 const& t2) +{ // cos(phiv) = w*a /|w||a| // with w = u x v // and a = u x z / |u x z| , unit vector perpendicular to v12 and @@ -9287,16 +9381,17 @@ float VarManager::calculatePhiV(T1 const &t1, T2 const &t2) { // (wx,wy,wz) and (ax,ay,0). The angle between them should be small if the // pair is conversion. This function then returns values close to pi! pairPhiV = TMath::ACos( - wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; + wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; return pairPhiV; } /// Fill BDT score values. /// Supports binary (1 output) and multiclass (3 outputs) models. template -void VarManager::FillBdtScore(T1 const &bdtScore, float *values) { +void VarManager::FillBdtScore(T1 const& bdtScore, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (bdtScore.size() == 1) { @@ -9311,8 +9406,9 @@ void VarManager::FillBdtScore(T1 const &bdtScore, float *values) { } //__________________________________________________________________ template -float VarManager::LorentzTransformJpsihadroncosChi(const TString &Option, - T1 const &v1, T2 const &v2) { +float VarManager::LorentzTransformJpsihadroncosChi(const TString& Option, + T1 const& v1, T2 const& v2) +{ float value = -999.0f; auto beta_v1 = v1.BoostToCM(); ROOT::Math::Boost boostv1{beta_v1}; @@ -9334,10 +9430,11 @@ float VarManager::LorentzTransformJpsihadroncosChi(const TString &Option, } template -void VarManager::FillFIT(T1 const &bc, T2 const &bcs, T3 const &ft0s, - T4 const &fv0as, T5 const &fdds, float *values) { +void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, + T4 const& fv0as, T5 const& fdds, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Initialize FIT info structure @@ -9394,9 +9491,10 @@ void VarManager::FillFIT(T1 const &bc, T2 const &bcs, T3 const &ft0s, } template -void VarManager::FillEventAlice3(T const &event, float *values) { +void VarManager::FillEventAlice3(T const& event, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { values[kTimestamp] = event.timestamp(); @@ -9481,9 +9579,10 @@ void VarManager::FillEventAlice3(T const &event, float *values) { } template -void VarManager::FillTrackAlice3(T const &track, float *values) { +void VarManager::FillTrackAlice3(T const& track, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & Track) > 0 || (fillMap & ReducedTrack) > 0) { @@ -9510,7 +9609,7 @@ void VarManager::FillTrackAlice3(T const &track, float *values) { if (fgUsedVars[kPVContributor]) { values[kPVContributor] = static_cast( - (track.flags() & o2::aod::track::PVContributor) > 0); + (track.flags() & o2::aod::track::PVContributor) > 0); } if (fgUsedVars[kITSClusterMap]) { @@ -9642,9 +9741,10 @@ void VarManager::FillTrackAlice3(T const &track, float *values) { } template -void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { +void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -9676,9 +9776,9 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -9690,7 +9790,7 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -9699,14 +9799,14 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { if (fgUsedVars[kPsiPair]) { values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) - ? (v1.Phi() - v2.Phi()) - : (v2.Phi() - v1.Phi()); + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); double xipair = TMath::ACos( - (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / - v2.P()); + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); values[kPsiPair] = (t1.sign() * fgMagField > 0.) - ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) - : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -9729,9 +9829,9 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -9752,18 +9852,18 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -9780,18 +9880,18 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -9801,7 +9901,7 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -9809,18 +9909,18 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -9832,9 +9932,9 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -9859,16 +9959,16 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -9886,7 +9986,7 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -9896,10 +9996,11 @@ void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { } template -void VarManager::FillResolutions(M const &mcTrack, T const &track, - float *values) { +void VarManager::FillResolutions(M const& mcTrack, T const& track, + float* values) +{ if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kDeltaPt] = track.pt() - mcTrack.pt(); @@ -9910,17 +10011,18 @@ void VarManager::FillResolutions(M const &mcTrack, T const &track, template -void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, - T const &t2, bool propToSV, - float *values) { +void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, + T const& t2, bool propToSV, + float* values) +{ // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -9945,16 +10047,16 @@ void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else { @@ -10017,26 +10119,26 @@ void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -10045,69 +10147,69 @@ void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v12.Px() + - (secondaryVertex[1] - collision.posY()) * v12.Py() + - (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v12.Px() + + (secondaryVertex[1] - collision.posY()) * v12.Py() + + (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 values[kVertexingLzProjected] = - ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / - TMath::Sqrt(v12.Pz() * v12.Pz()); + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + TMath::Sqrt(v12.Pz() * v12.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v12.Px()) + - ((secondaryVertex[1] - collision.posY()) * v12.Py()); + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v12.Px()) + - ((secondaryVertex[1] - collision.posY()) * v12.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + - (v12.Pz() * v12.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); if (fgPVrecalKF) { values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + - (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); } values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (v12.Pt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } } if (propToSV) { @@ -10129,15 +10231,16 @@ void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, template void VarManager::FillTripletVertexingALICE3( - C const &collision, T const &t1, T const &t2, T const &t3, - VarManager::PairCandidateType tripletType, float *values) { + C const& collision, T const& t1, T const& t2, T const& t3, + VarManager::PairCandidateType tripletType, float* values) +{ // TODO: Vertexing error variables constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -10165,26 +10268,26 @@ void VarManager::FillTripletVertexingALICE3( std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; std::array t3covs = { - t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -10221,7 +10324,7 @@ void VarManager::FillTripletVertexingALICE3( secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); std::array covMatrixPCA = - fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); @@ -10239,16 +10342,16 @@ void VarManager::FillTripletVertexingALICE3( double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -10257,61 +10360,61 @@ void VarManager::FillTripletVertexingALICE3( values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); // run 2 definitions: Decay length projected onto the momentum vector of the // candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index b1c3d2b25d8..daab108389d 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -75,8 +75,10 @@ using namespace o2::aod; using namespace o2::common::core; // Some definitions -namespace o2::aod { -namespace dqanalysisflags { +namespace o2::aod +{ +namespace dqanalysisflags +{ DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing //need to understand DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, @@ -88,15 +90,15 @@ DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsMuonSelected, isMuonSelected, - 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, int8_t); //! Muon track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, - 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) + IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, + 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) // Bcandidate columns for ML analysis of B->Jpsi+K DECLARE_SOA_COLUMN(RunNumber, runNumber, uint64_t); DECLARE_SOA_COLUMN(EventIdx, eventIdx, uint64_t); @@ -196,8 +198,8 @@ 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) + 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, @@ -207,7 +209,7 @@ DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the //! reconstructed mass DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, - float); //! kVertexingLxyProjected + float); //! kVertexingLxyProjected DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, @@ -231,62 +233,62 @@ DECLARE_SOA_COLUMN(OniaVtxZ, oniaVtxZ, float); } // namespace dqanalysisflags DECLARE_SOA_TABLE( - EventCuts, "AOD", "DQANAEVCUTS", - dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents + EventCuts, "AOD", "DQANAEVCUTS", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents DECLARE_SOA_TABLE( - BarrelTrackCuts, "AOD", "DQANATRKCUTS", - dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc + BarrelTrackCuts, "AOD", "DQANATRKCUTS", + dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc DECLARE_SOA_TABLE( - BarrelAmbiguities, "AOD", "DQBARRELAMB", - dqanalysisflags::BarrelAmbiguityInBunch, - dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to - //! ReducedBarrelTracks + BarrelAmbiguities, "AOD", "DQBARRELAMB", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks DECLARE_SOA_TABLE( - MuonTrackCuts, "AOD", "DQANAMUONCUTS", - dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc + MuonTrackCuts, "AOD", "DQANAMUONCUTS", + dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc DECLARE_SOA_TABLE( - MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, - dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to - //! ReducedMuonTracks + MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks DECLARE_SOA_TABLE( - Prefilter, "AOD", "DQPREFILTER", - dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to - //! ReducedTracksAssoc + Prefilter, "AOD", "DQPREFILTER", + dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to + //! ReducedTracksAssoc DECLARE_SOA_TABLE( - BmesonCandidates, "AOD", "DQBMESONS", dqanalysisflags::RunNumber, - dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, - dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, - dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, - dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, - dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, - dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, - dqanalysisflags::LzBcandidateErr, dqanalysisflags::TauxyBcandidate, - dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, - dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, - dqanalysisflags::Chi2Bcandidate, dqanalysisflags::MCLxyBcandidate, - dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, - dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, - dqanalysisflags::MCCosPBcandidate, dqanalysisflags::GlobalIndexassoc, - dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, - dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, - dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::PINleg1, - dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, - dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, - dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, - dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, - dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, - dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, - dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, - dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, - dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); + BmesonCandidates, "AOD", "DQBMESONS", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, + dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, + dqanalysisflags::LzBcandidateErr, dqanalysisflags::TauxyBcandidate, + dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, + dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, + dqanalysisflags::Chi2Bcandidate, dqanalysisflags::MCLxyBcandidate, + dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, + dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, + dqanalysisflags::MCCosPBcandidate, dqanalysisflags::GlobalIndexassoc, + dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, + dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, + dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, dqanalysisflags::MassDileptonCandidate, @@ -297,26 +299,26 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, - dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, - dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, - dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, - dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, - dqanalysisflags::MultiplicityNContrib); + 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, 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, @@ -330,84 +332,84 @@ DECLARE_SOA_TABLE(OniaMCTruth, "AOD", "MCTRUTHONIA", dqanalysisflags::OniaPt, using MyEvents = soa::Join; using MyEventsSelected = - soa::Join; + soa::Join; using MyEventsVtxCov = - soa::Join; + soa::Join; using MyEventsVtxCovSelected = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedInfo = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedMultExtra = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedQvector = - soa::Join; + soa::Join; using MyEventsQvector = - soa::Join; + soa::Join; using MyEventsVtxCovHashSelected = - soa::Join; + soa::Join; using MyBarrelTracks = - soa::Join; + soa::Join; using MyBarrelTracksWithAmbiguities = - soa::Join; + soa::Join; using MyBarrelTracksWithCov = - soa::Join; + soa::Join; using MyBarrelTracksWithCovWithAmbiguities = - soa::Join; + soa::Join; using MyBarrelTracksWithCovWithAmbiguitiesWithColl = - soa::Join; + soa::Join; using MyDielectronCandidates = - soa::Join; + soa::Join; using MyDitrackCandidates = soa::Join; using MyDimuonCandidates = soa::Join; using MyMuonTracks = soa::Join; using MyMuonTracksWithCov = - soa::Join; + soa::Join; using MyMuonTracksWithCovWithAmbiguities = - soa::Join; + soa::Join; // using MyMuonTracksSelectedWithColl = soa::Join; // bit maps used for the Fill functions of the VarManager constexpr static uint32_t gkEventFillMap = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; constexpr static uint32_t gkEventFillMapWithCov = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; constexpr static uint32_t gkEventFillMapWithCovMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | + VarManager::ObjTypes::ReducedEventMultExtra; // constexpr static uint32_t gkEventFillMapWithQvector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | @@ -417,48 +419,51 @@ constexpr static uint32_t gkEventFillMapWithCovMultExtra = // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkTrackFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCov = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCovWithColl = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID | - VarManager::ObjTypes::ReducedTrackCollInfo; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; // constexpr static uint32_t gkTrackFillMapWithColl = // VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel // | VarManager::ObjTypes::ReducedTrackBarrelPID | // VarManager::ObjTypes::ReducedTrackCollInfo; constexpr static uint32_t gkMuonFillMap = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; constexpr static uint32_t gkMuonFillMapWithCov = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | - VarManager::ObjTypes::ReducedMuonCov; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; // constexpr static uint32_t gkMuonFillMapWithColl = // VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | // VarManager::ObjTypes::ReducedMuonCollInfo; -namespace dqefficiency_helpers { -inline float *varValues() { return static_cast(VarManager::fgValues); } -inline TString *varNames() { - return static_cast(VarManager::fgVariableNames); +namespace dqefficiency_helpers +{ +inline float* varValues() { return static_cast(VarManager::fgValues); } +inline TString* varNames() +{ + return static_cast(VarManager::fgVariableNames); } -inline TString *varUnits() { - return static_cast(VarManager::fgVariableUnits); +inline TString* varUnits() +{ + return static_cast(VarManager::fgVariableUnits); } } // namespace dqefficiency_helpers // Global function used to define needed histogram classes void DefineHistograms( - HistogramManager *histMan, const TString &histClasses, - const char *histGroups); // defines histograms for all tasks + HistogramManager* histMan, const TString& histClasses, + const char* histGroups); // defines histograms for all tasks // template // void PrintBitMap(TMap map, int nbits) @@ -476,48 +481,48 @@ struct AnalysisEventSelection { Produces JetEvents; OutputObj fOutputList{"output"}; Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"}; Configurable fConfigEventCutsJSON{ - "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddEventHistogram{ - "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddEventMCHistogram{ - "cfgAddEventMCHistogram", "generator", - "Comma separated list of histograms"}; + "cfgAddEventMCHistogram", "generator", + "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", - "Add event histograms defined via JSON formatting (see " - "HistogramsLibrary)"}; + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; Configurable fConfigSplitCollisionsDeltaZ{ - "splitCollisionsDeltaZ", 1.0, - "maximum delta-z (cm) between two collisions to consider them as split " - "candidates"}; + "splitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; Configurable fConfigSplitCollisionsDeltaBC{ - "splitCollisionsDeltaBC", 100, - "maximum delta-BC between two collisions to consider them as split " - "candidates; do not apply if value is negative"}; + "splitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; Configurable fConfigCheckSplitCollisions{ - "checkSplitCollisions", false, - "If true, run the split collision check and fill histograms"}; + "checkSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; - HistogramManager *fHistMan = nullptr; - MixingHandler *fMixHandler = nullptr; + HistogramManager* fHistMan = nullptr; + MixingHandler* fMixHandler = nullptr; - AnalysisCompositeCut *fEventCut = nullptr; + AnalysisCompositeCut* fEventCut = nullptr; Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; @@ -525,12 +530,13 @@ struct AnalysisEventSelection { std::map fSelMap; // key: reduced event global index, value: // event selection decision std::map> - fBCCollMap; // key: global BC, value: vector of reduced event global - // indices + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices std::map fMetadataRCT, fHeader; int fCurrentRun = -1; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -539,7 +545,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut *cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut* cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -547,16 +553,16 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = - dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const &cutIt : jsonCuts) { + std::vector jsonCuts = + dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const& cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); @@ -572,8 +578,8 @@ struct AnalysisEventSelection { DefineHistograms(fHistMan, "EventsMC", fConfigAddEventMCHistogram.value.data()); dqhistograms::AddHistogramsFromJSON( - fHistMan, fConfigAddJSONHistograms.value - .c_str()); // aditional histograms via JSON + fHistMan, fConfigAddJSONHistograms.value + .c_str()); // aditional histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -597,11 +603,12 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const &events, TEventsMC const &mcEvents) { + void runEventSelection(TEvents const& events, TEventsMC const& mcEvents) + { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { fHeader = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - fMetadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + fMetadataRCT, -1); uint64_t sor = std::atol(fHeader["SOR"].c_str()); uint64_t eor = std::atol(fHeader["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -610,22 +617,22 @@ struct AnalysisEventSelection { fSelMap.clear(); fBCCollMap.clear(); - for (auto const &event : events) { + for (auto const& event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } bool decision = false; // if QA is requested fill histograms before event selections if (fConfigQA) { fHistMan->FillHistClass( - "Event_BeforeCuts", - dqefficiency_helpers::varValues()); // automatically fill all the - // histograms in the class Event + "Event_BeforeCuts", + dqefficiency_helpers::varValues()); // automatically fill all the + // histograms in the class Event } if (fEventCut->IsSelected(dqefficiency_helpers::varValues())) { if (fConfigQA) { @@ -639,17 +646,17 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto &evIndices = fBCCollMap[event.globalBC()]; + auto& evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } if (fMixHandler != nullptr) { int hh = - fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); + fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); hash(hh); } } - for (auto const &event : mcEvents) { + for (auto const& event : mcEvents) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); @@ -660,10 +667,11 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const &events) { + void publishSelections(TEvents const& events) + { std::map - collisionSplittingMap; // key: event global index, value: whether pileup - // event is a possible splitting + collisionSplittingMap; // key: event global index, value: whether pileup + // event is a possible splitting // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); @@ -671,7 +679,7 @@ struct AnalysisEventSelection { // of bunch 2-event correlations for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { uint64_t bc1 = bc1It->first; - auto const &bc1Events = bc1It->second; + auto const& bc1Events = bc1It->second; // same bunch event correlations, if more than 1 collisions in this bunch if (bc1Events.size() > 1) { @@ -705,13 +713,13 @@ struct AnalysisEventSelection { fConfigSplitCollisionsDeltaBC) { break; } - auto const &bc2Events = bc2It->second; + auto const& bc2Events = bc2It->second; // loop over events in the first BC - for (const auto &ev1It : bc1Events) { + for (const auto& ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (const auto &ev2It : bc2Events) { + for (const auto& ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); // compute 2-event quantities and mark the candidate split // collisions @@ -733,7 +741,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const &event : events) { + for (auto const& event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -751,23 +759,25 @@ struct AnalysisEventSelection { } } - void processSkimmed(MyEvents const &events, - aod::ReducedMCEvents const &mcEvents) { + void processSkimmed(MyEvents const& events, + aod::ReducedMCEvents const& mcEvents) + { runEventSelection(events, mcEvents); publishSelections(events); } void - processFillEvents(MyEvents const &events) // Used to forward the event table - // from tablemaker, typical use for - // now is jet analysis. + processFillEvents(MyEvents const& events) // Used to forward the event table + // from tablemaker, typical use for + // now is jet analysis. { - for (auto const &event : events) { + for (auto const& event : events) { JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -789,19 +799,19 @@ struct AnalysisTrackSelection { OutputObj fOutputList{"output"}; Configurable fConfigCuts{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; Configurable fConfigCutsJSON{ - "cfgBarrelTrackCutsJSON", "", - "Additional list of barrel track cuts in JSON format"}; + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; // Re-application of the track-to-collision time compatibility on the skimmed // associations. // timeMargin and nSigma must be <= the values used by @@ -809,53 +819,53 @@ struct AnalysisTrackSelection { // usePVAssociation and maxPvContributors must be identical to those values. struct : ConfigurableGroup { Configurable cfgAssocTimeCut{ - "cfgAssocTimeCut", false, - "If true, reject associations failing the time compatibility computed " - "with the parameters below"}; + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; Configurable cfgAssocTimeMargin{ - "cfgAssocTimeMargin", 0.f, - "time margin (ns); must be <= skimming timeMargin"}; + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; Configurable cfgAssocNSigma{ - "cfgAssocNSigma", 4.f, - "nSigmaForTimeCompat; must be <= skimming value"}; + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; Configurable cfgAssocBcWindowForOneSigma{ - "cfgAssocBcWindowForOneSigma", 60, - "bcWindowForOneSigma; must be equal to the skimming value"}; + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; Configurable cfgAssocUsePVAssociation{ - "cfgAssocUsePVAssociation", 1, - "usePVAssociation; must be equal to the skimming value"}; + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ - "cfgAssocMaxPvContributorsForLowMultReassoc", 10, - "maxPvContributorsForLowMultReassoc; must be equal to the skimming " - "value"}; + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigCcdbPathTPC{ - "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", - "base path to the ccdb object"}; + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Configurable fConfigComputeTPCpostCalib{ - "cfgTPCpostCalib", false, - "If true, compute TPC post-calibrated n-sigmas"}; + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable fConfigMCSignals{ - "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Service fCCDB{}; - HistogramManager *fHistMan = nullptr; - std::vector fTrackCuts; - std::vector fMCSignals; // list of signals to be checked + HistogramManager* fHistMan = nullptr; + std::vector fTrackCuts; + std::vector fMCSignals; // list of signals to be checked std::vector fHistNamesReco; std::vector fHistNamesMCMatched; @@ -863,15 +873,16 @@ struct AnalysisTrackSelection { // CCDB parameters) std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -883,28 +894,28 @@ struct AnalysisTrackSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fTrackCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // add extra cuts from JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal *sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal* sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -915,9 +926,9 @@ struct AnalysisTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -927,7 +938,7 @@ struct AnalysisTrackSelection { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); @@ -936,13 +947,13 @@ struct AnalysisTrackSelection { // Add histogram classes for each track cut and for each requested MC // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsBarrel_BeforeCuts;"; - for (auto const &cut : fTrackCuts) { + for (auto const& cut : fTrackCuts) { TString nameStr = Form("AssocsBarrel_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const &sig : fMCSignals) { + for (auto const& sig : fMCSignals) { TString nameStr2 = - Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); nameStr2 = Form("AssocsIncorrectBarrel_%s_%s", cut->GetName(), @@ -956,16 +967,16 @@ struct AnalysisTrackSelection { fConfigAddTrackHistogram.value.data()); if (fConfigPublishAmbiguity) { DefineHistograms( - fHistMan, - "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", - "ambiguity"); + fHistMan, + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", + "ambiguity"); } dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -979,10 +990,11 @@ struct AnalysisTrackSelection { template - void runTrackSelection(ReducedTracksAssoc const &assocs, - TEvents const &events, TTracks const &tracks, - TEventsMC const & /*eventsMC*/, - TTracksMC const &tracksMC) { + void runTrackSelection(ReducedTracksAssoc const& assocs, + TEvents const& events, TTracks const& tracks, + TEventsMC const& /*eventsMC*/, + TTracksMC const& tracksMC) + { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -990,27 +1002,27 @@ struct AnalysisTrackSelection { if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { auto calibList = fCCDB->getForTimeStamp( - fConfigCcdbPathTPC.value, events.begin().timestamp()); + fConfigCcdbPathTPC.value, events.begin().timestamp()); VarManager::SetCalibrationObject( - VarManager::kTPCElectronMean, - calibList->FindObject("mean_map_electron")); + VarManager::kTPCElectronMean, + calibList->FindObject("mean_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCElectronSigma, - calibList->FindObject("sigma_map_electron")); + VarManager::kTPCElectronSigma, + calibList->FindObject("sigma_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); + VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); + VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonMean, - calibList->FindObject("mean_map_proton")); + VarManager::kTPCProtonMean, + calibList->FindObject("mean_map_proton")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonSigma, - calibList->FindObject("sigma_map_proton")); + VarManager::kTPCProtonSigma, + calibList->FindObject("sigma_map_proton")); } auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -1025,7 +1037,7 @@ struct AnalysisTrackSelection { trackAmbiguities.reserve(tracks.size()); // Loop over associations - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { trackSel(0); @@ -1038,7 +1050,7 @@ struct AnalysisTrackSelection { VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); @@ -1049,11 +1061,11 @@ struct AnalysisTrackSelection { if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); if (!VarManager::isBarrelAssocTimeCompatible( - track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, - fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, - fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } @@ -1110,16 +1122,16 @@ struct AnalysisTrackSelection { if (filterMap & (static_cast(1) << icut)) { if (isCorrectAssoc) { fHistMan->FillHistClass( - fHistNamesMCMatched[icut * 2 * fMCSignals.size() + - 2 * isig] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - fHistNamesMCMatched[icut * 2 * fMCSignals.size() + - 2 * isig + 1] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1157,7 +1169,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsInBunch[track.globalIndex()]; + auto& evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1166,7 +1178,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1179,7 +1191,7 @@ struct AnalysisTrackSelection { // So one could QA these tracks separately if (fConfigPublishAmbiguity) { if (fConfigQA) { - for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1187,12 +1199,12 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqefficiency_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1200,14 +1212,14 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const &track : tracks) { + for (auto const& track : tracks) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1223,23 +1235,26 @@ struct AnalysisTrackSelection { } } // end runTrackSelection() - void processSkimmed(ReducedTracksAssoc const &assocs, - MyEventsSelected const &events, - MyBarrelTracks const &tracks, - ReducedMCEvents const &eventsMC, - ReducedMCTracks const &tracksMC) { + void processSkimmed(ReducedTracksAssoc const& assocs, + MyEventsSelected const& events, + MyBarrelTracks const& tracks, + ReducedMCEvents const& eventsMC, + ReducedMCTracks const& tracksMC) + { runTrackSelection(assocs, events, tracks, eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedTracksAssoc const &assocs, - MyEventsVtxCovSelected const &events, - MyBarrelTracksWithCov const &tracks, - ReducedMCEvents const &eventsMC, - ReducedMCTracks const &tracksMC) { + void processSkimmedWithCov(ReducedTracksAssoc const& assocs, + MyEventsVtxCovSelected const& events, + MyBarrelTracksWithCov const& tracks, + ReducedMCEvents const& eventsMC, + ReducedMCTracks const& tracksMC) + { runTrackSelection( - assocs, events, tracks, eventsMC, tracksMC); + assocs, events, tracks, eventsMC, tracksMC); } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -1265,51 +1280,52 @@ struct AnalysisMuonSelection { Configurable fConfigCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; Configurable fConfigCutsJSON{ - "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddMuonHistogram{ - "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; Configurable fConfigMCSignals{ - "cfgMuonMCSignals", "", "Comma separated list of MC signals"}; + "cfgMuonMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Service fCCDB{}; - HistogramManager *fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager* fHistMan = nullptr; + std::vector fMuonCuts; std::vector fHistNamesReco; std::vector fHistNamesMCMatched; - std::vector fMCSignals; // list of signals to be checked + std::vector fMCSignals; // list of signals to be checked int fCurrentRun = 0; // current run (needed to detect run changes for loading // CCDB parameters) std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1321,28 +1337,28 @@ struct AnalysisMuonSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fMuonCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Add cuts configured via JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const &t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const& t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal *sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal* sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -1353,9 +1369,9 @@ struct AnalysisMuonSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -1365,7 +1381,7 @@ struct AnalysisMuonSelection { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); @@ -1374,17 +1390,17 @@ struct AnalysisMuonSelection { // Add histogram classes for each track cut and for each requested MC // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsMuon_BeforeCuts;"; - for (auto const &cut : fMuonCuts) { + for (auto const& cut : fMuonCuts) { TString nameStr = Form("AssocsMuon_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const &sig : fMCSignals) { + for (auto const& sig : fMCSignals) { TString nameStr2 = - Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); nameStr2 = - Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); } @@ -1394,14 +1410,14 @@ struct AnalysisMuonSelection { } DefineHistograms( - fHistMan, histClasses.Data(), - fConfigAddMuonHistogram.value.data()); // define all histograms + fHistMan, histClasses.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1413,10 +1429,11 @@ struct AnalysisMuonSelection { template - void runMuonSelection(ReducedMuonsAssoc const &assocs, TEvents const &events, - TMuons const &muons, - ReducedMCEvents const & /*eventsMC*/, - ReducedMCTracks const &muonsMC) { + void runMuonSelection(ReducedMuonsAssoc const& assocs, TEvents const& events, + TMuons const& muons, + ReducedMCEvents const& /*eventsMC*/, + ReducedMCTracks const& muonsMC) + { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1426,12 +1443,12 @@ struct AnalysisMuonSelection { muonSel.reserve(assocs.size()); - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.has_reducedMCevent() || !event.isEventSelected_bit( - 0)) { // condition on reducedMCevent to avoid rec. events with no - // generated event + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event muonSel(0); continue; } @@ -1440,7 +1457,7 @@ struct AnalysisMuonSelection { // combine track and event properties VarManager::FillEvent(event); VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); auto track = assoc.template reducedmuon_as(); VarManager::FillTrack(track); @@ -1507,13 +1524,13 @@ struct AnalysisMuonSelection { if (filterMap & (static_cast(1) << j)) { if (isCorrectAssoc) { fHistMan->FillHistClass( - fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1527,7 +1544,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsInBunch[track.globalIndex()]; + auto& evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1536,7 +1553,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1548,7 +1565,7 @@ struct AnalysisMuonSelection { // pileup and collisions from different bunches // So one could QA these tracks separately if (fConfigPublishAmbiguity) { - for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1556,14 +1573,14 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); if (fConfigQA) { fHistMan->FillHistClass("Muon_AmbiguityInBunch", dqefficiency_helpers::varValues()); } } // end loop over in-bunch ambiguous tracks - for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1571,7 +1588,7 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); if (fConfigQA) { fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); @@ -1579,7 +1596,7 @@ struct AnalysisMuonSelection { } // end loop over out-of-bunch ambiguous tracks // publish the ambiguity table - for (auto const &track : muons) { + for (auto const& track : muons) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1595,23 +1612,26 @@ struct AnalysisMuonSelection { } } - void processSkimmed(ReducedMuonsAssoc const &assocs, - MyEventsSelected const &events, MyMuonTracks const &muons, - ReducedMCEvents const &eventsMC, - ReducedMCTracks const &tracksMC) { + void processSkimmed(ReducedMuonsAssoc const& assocs, + MyEventsSelected const& events, MyMuonTracks const& muons, + ReducedMCEvents const& eventsMC, + ReducedMCTracks const& tracksMC) + { runMuonSelection(assocs, events, muons, eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedMuonsAssoc const &assocs, - MyEventsVtxCovSelected const &events, - MyMuonTracksWithCov const &muons, - ReducedMCEvents const &eventsMC, - ReducedMCTracks const &tracksMC) { + void processSkimmedWithCov(ReducedMuonsAssoc const& assocs, + MyEventsVtxCovSelected const& events, + MyMuonTracksWithCov const& muons, + ReducedMCEvents const& eventsMC, + ReducedMCTracks const& tracksMC) + { runMuonSelection( - assocs, events, muons, eventsMC, tracksMC); + assocs, events, muons, eventsMC, tracksMC); } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -1641,21 +1661,22 @@ struct AnalysisPrefilterSelection { Configurable fConfigPrefilterPairCut{"cfgPrefilterPairCut", "", "Prefilter pair cut"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // Track related options Configurable fPropTrack{"cfgPropTrack", false, "Propgate tracks to associated collision to " "recalculate DCA and momentum vector"}; std::map fPrefilterMap; - AnalysisCompositeCut *fPairCut = nullptr; + AnalysisCompositeCut* fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; Preslice trackAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1664,7 +1685,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray *objArrayTrackCuts = nullptr; + TObjArray* objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1699,9 +1720,9 @@ struct AnalysisPrefilterSelection { false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } @@ -1709,7 +1730,7 @@ struct AnalysisPrefilterSelection { std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { LOG(fatal) << " Prefilter track cut not among the cuts calculated by " @@ -1737,26 +1758,27 @@ struct AnalysisPrefilterSelection { } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill VarManager::SetupTwoProngDCAFitter( - 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - true); // TODO: get these parameters from Configurables + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true); } template void runPrefilter( - TEvent const &event, - soa::Join const &assocs, - TTracks const & /*tracks*/) { + TEvent const& event, + soa::Join const& assocs, + TTracks const& /*tracks*/) + { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); @@ -1770,9 +1792,9 @@ struct AnalysisPrefilterSelection { // here we check the cuts fulfilled by both tracks, for both the tight and // loose selections uint32_t track1Candidate = - (assoc1.isBarrelSelected_raw() & fPrefilterMask); + (assoc1.isBarrelSelected_raw() & fPrefilterMask); uint32_t track2Candidate = - (assoc2.isBarrelSelected_raw() & fPrefilterMask); + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); @@ -1786,7 +1808,7 @@ struct AnalysisPrefilterSelection { track2); if (fPropTrack) { VarManager::FillPairCollision( - event, track1, track2); + event, track1, track2); } // if the pair fullfils the criteria, add an entry into the prefilter map // for the two tracks @@ -1804,15 +1826,16 @@ struct AnalysisPrefilterSelection { } void processBarrelSkimmed( - MyEvents const &events, - soa::Join const &assocs, - MyBarrelTracks const &tracks) { + MyEvents const& events, + soa::Join const& assocs, + MyBarrelTracks const& tracks) + { fPrefilterMap.clear(); - for (auto const &event : events) { + for (auto const& event : events) { auto groupedAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(event, groupedAssocs, tracks); } @@ -1826,7 +1849,7 @@ struct AnalysisPrefilterSelection { prefilter(mymap); } } else { - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { // TODO: just use the index from the assoc (no need to cast the whole // track) auto track = assoc.template reducedtrack_as(); @@ -1844,7 +1867,8 @@ struct AnalysisPrefilterSelection { } } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -1863,28 +1887,28 @@ struct AnalysisPostPrefilterTrackSelection { OutputObj fOutputList{"output"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", - "Comma separated list of track cuts (among those of " - "analysis-track-selection) for which to fill histograms"}; + "cfgTrackCuts", "", + "Comma separated list of track cuts (among those of " + "analysis-track-selection) for which to fill histograms"}; Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigMCSignals{ - "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Service fCCDB{}; - HistogramManager *fHistMan = nullptr; - std::vector fMCSignals; - std::vector fCutBits; // bit positions of the requested cuts in the - // track-selection task cut list + HistogramManager* fHistMan = nullptr; + std::vector fMCSignals; + std::vector fCutBits; // bit positions of the requested cuts in the + // track-selection task cut list std::vector fHistNamesSurvived; // [icut] std::vector fHistNamesVetoed; // [icut] std::vector fHistNamesMCSurvived; // [icut * nSignals + isig] @@ -1893,7 +1917,8 @@ struct AnalysisPostPrefilterTrackSelection { int fCurrentRun = 0; // current run (needed to detect run changes for loading // CCDB parameters) - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1904,7 +1929,7 @@ struct AnalysisPostPrefilterTrackSelection { std::unique_ptr objArrayCuts(trackCutsStr.Tokenize(",")); if (objArrayCuts == nullptr || objArrayCuts->GetEntries() == 0) { LOG(fatal) - << " No track cuts specified! Check the cfgTrackCuts configurable"; + << " No track cuts specified! Check the cfgTrackCuts configurable"; } // get the full list of cuts computed by the track-selection task and // resolve the requested cuts to bit positions @@ -1917,24 +1942,24 @@ struct AnalysisPostPrefilterTrackSelection { "cfgBarrelTrackCutsJSON", trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } std::unique_ptr objArrayAllCuts(allTrackCutsStr.Tokenize(",")); if (objArrayAllCuts == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } std::vector cutNames; for (int icut = 0; icut < objArrayCuts->GetEntries(); ++icut) { TString cutName = objArrayCuts->At(icut)->GetName(); if (objArrayAllCuts->FindObject(cutName.Data()) == nullptr) { LOG(fatal) - << " Track cut " << cutName - << " not among the cuts calculated by the track-selection task! "; + << " Track cut " << cutName + << " not among the cuts calculated by the track-selection task! "; } for (int jcut = 0; jcut < objArrayAllCuts->GetEntries(); ++jcut) { if (cutName.CompareTo(objArrayAllCuts->At(jcut)->GetName()) == 0) { @@ -1948,8 +1973,8 @@ struct AnalysisPostPrefilterTrackSelection { TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal *sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal* sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -1960,9 +1985,9 @@ struct AnalysisPostPrefilterTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -1979,14 +2004,14 @@ struct AnalysisPostPrefilterTrackSelection { // prefilter-surviving and prefilter-vetoed tracks, // and for each requested MC signal (reconstructed tracks with MC truth) TString histClasses = ""; - for (auto const &cutName : cutNames) { + for (auto const& cutName : cutNames) { TString nameStr = Form("TrackBarrelPostPrefilter_%s", cutName.Data()); fHistNamesSurvived.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); nameStr = Form("TrackBarrelPrefilterVetoed_%s", cutName.Data()); fHistNamesVetoed.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const &sig : fMCSignals) { + for (auto const& sig : fMCSignals) { TString nameStr2 = Form("TrackBarrelPostPrefilter_%s_%s", cutName.Data(), sig->GetName()); fHistNamesMCSurvived.push_back(nameStr2); @@ -2001,11 +2026,11 @@ struct AnalysisPostPrefilterTrackSelection { DefineHistograms(fHistMan, histClasses.Data(), fConfigAddTrackHistogram.value.data()); dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); fCCDB->setURL(fConfigCcdbUrl.value); @@ -2016,15 +2041,16 @@ struct AnalysisPostPrefilterTrackSelection { template void runPostPrefilterTrackSelection( - soa::Join const &assocs, - TEvents const &events, TTracks const & /*tracks*/, - TTracksMC const &tracksMC) { + soa::Join const& assocs, + TEvents const& events, TTracks const& /*tracks*/, + TTracksMC const& tracksMC) + { // load the magnetic field (needed to recompute the DCA with respect to the // associated collision) if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -2035,7 +2061,7 @@ struct AnalysisPostPrefilterTrackSelection { } // Loop over associations - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { continue; @@ -2063,7 +2089,7 @@ struct AnalysisPostPrefilterTrackSelection { VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); @@ -2081,20 +2107,20 @@ struct AnalysisPostPrefilterTrackSelection { } bool isVetoed = (vetoMap & (static_cast(1) << icut)) > 0; fHistMan->FillHistClass( - (isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]) - .Data(), - dqefficiency_helpers::varValues()); + (isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]) + .Data(), + dqefficiency_helpers::varValues()); if (track.has_reducedMCTrack()) { int isig = 0; for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) { if ((*sig)->CheckSignal(true, track.reducedMCTrack())) { fHistMan->FillHistClass( - (isVetoed - ? fHistNamesMCVetoed - : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig] - .Data(), - dqefficiency_helpers::varValues()); + (isVetoed + ? fHistNamesMCVetoed + : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig] + .Data(), + dqefficiency_helpers::varValues()); } } } @@ -2103,24 +2129,27 @@ struct AnalysisPostPrefilterTrackSelection { } void processSkimmed(soa::Join const &assocs, - MyEventsSelected const &events, - MyBarrelTracks const &tracks, - ReducedMCEvents const & /*eventsMC*/, - ReducedMCTracks const &tracksMC) { + aod::Prefilter> const& assocs, + MyEventsSelected const& events, + MyBarrelTracks const& tracks, + ReducedMCEvents const& /*eventsMC*/, + ReducedMCTracks const& tracksMC) + { runPostPrefilterTrackSelection( - assocs, events, tracks, tracksMC); + assocs, events, tracks, tracksMC); } void processSkimmedWithCov( - soa::Join const &assocs, - MyEventsVtxCovSelected const &events, MyBarrelTracksWithCov const &tracks, - ReducedMCEvents const & /*eventsMC*/, ReducedMCTracks const &tracksMC) { + soa::Join const& assocs, + MyEventsVtxCovSelected const& events, MyBarrelTracksWithCov const& tracks, + ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& tracksMC) + { runPostPrefilterTrackSelection(assocs, events, tracks, tracksMC); } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -2158,7 +2187,7 @@ struct AnalysisSameEventPairing { Produces MCTruthTableEffi; Produces dileptonPolarList; - o2::base::MatLayerCylSet *fLUT = nullptr; + o2::base::MatLayerCylSet* fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -2166,26 +2195,26 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable track{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; Configurable muon{"cfgMuonCuts", "", "Comma separated list of muon cuts"}; Configurable pair{ - "cfgPairCuts", "", - "Comma separated list of pair cuts, !!! Use only if you know what you " - "are doing, otherwise leave empty"}; + "cfgPairCuts", "", + "Comma separated list of pair cuts, !!! Use only if you know what you " + "are doing, otherwise leave empty"}; Configurable MCgenAcc{ - "cfgMCGenAccCuts", "", - "Comma separated list of MC generated particles acceptance cuts, !!! " - "Use only if you know what you are doing, otherwise leave empty"}; + "cfgMCGenAccCuts", "", + "Comma separated list of MC generated particles acceptance cuts, !!! " + "Use only if you know what you are doing, otherwise leave empty"}; // TODO: Add pair cuts via JSON } fConfigCuts; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddSEPHistogram{ - "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; struct : ConfigurableGroup { Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", @@ -2198,22 +2227,22 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable flatTables{ - "cfgFlatTables", false, - "Produce a single flat tables with all relevant information of the " - "pairs and single tracks"}; + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; Configurable polarTables{ - "cfgPolarTables", false, - "Produce tables with dilepton polarization information"}; + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; Configurable useKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is " - "used by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of " "chi^2 minimization in secondary vertexing"}; Configurable noCorr{ - "cfgNoCorrFwdProp", false, - "Do not correct for MCS effects in track propagation"}; + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; Configurable centerMassEnergy{"energy", 13600, @@ -2222,36 +2251,36 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable genSignals{ - "cfgBarrelMCGenSignals", "", - "Comma separated list of MC signals (generated)"}; + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; Configurable genSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Additional list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Additional list of MC signals (generated) via JSON"}; Configurable recSignals{ - "cfgBarrelMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable recSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Comma separated list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Comma separated list of MC signals (reconstructed) via JSON"}; Configurable emuRecSignals{ - "cfgEmuMCRecSignals", "", - "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; + "cfgEmuMCRecSignals", "", + "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; Configurable emuRecSignalsJSON{ - "cfgEmuMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) for e-mu pairs via " - "JSON"}; + "cfgEmuMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) for e-mu pairs via " + "JSON"}; Configurable finalStateSignals{ - "cfgBarrelMCFinalStateSignals", "eFromJpsi", - "Comma separated list of MC signals (final state particles)"}; + "cfgBarrelMCFinalStateSignals", "eFromJpsi", + "Comma separated list of MC signals (final state particles)"}; Configurable skimSignalOnly{ - "cfgSkimSignalOnly", false, - "Configurable to select only matched candidates"}; + "cfgSkimSignalOnly", false, + "Configurable to select only matched candidates"}; } fConfigMC; struct : ConfigurableGroup { Configurable fConfigMiniTree{ - "useMiniTree.cfgMiniTree", false, - "Produce a single flat table with minimal information for analysis"}; + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; Configurable fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; Configurable fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", @@ -2273,7 +2302,7 @@ struct AnalysisSameEventPairing { Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); - HistogramManager *fHistMan = nullptr; + HistogramManager* fHistMan = nullptr; // keep histogram class names in maps, so we don't have to buld their names in // the pair loops @@ -2283,21 +2312,21 @@ struct AnalysisSameEventPairing { std::map> fMuonHistNamesMCmatched; std::map> fTrackMuonHistNames; std::map> fTrackMuonHistNamesMCmatched; - std::vector fRecMCSignals; - std::vector fEmuRecMCSignals; - std::vector fGenMCSignals; - std::vector fFinalStateMCSignals; + std::vector fRecMCSignals; + std::vector fEmuRecMCSignals; + std::vector fGenMCSignals; + std::vector fFinalStateMCSignals; std::vector fPairCuts; - std::vector fMCGenAccCuts; + std::vector fMCGenAccCuts; bool fUseMCGenAccCut = false; uint32_t fTrackFilterMask = - 0; // mask for the track cuts required in this task to be applied on the - // barrel cuts produced upstream + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream uint32_t fMuonFilterMask = - 0; // mask for the muon cuts required in this task to be applied on the - // muon cuts produced upstream + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -2309,16 +2338,17 @@ struct AnalysisSameEventPairing { bool fEnableBarrelMuonMixingHistos = false; Preslice< - soa::Join> - trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + soa::Join> + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; Preslice> - muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; Configurable fConfigMixingDepth{ - "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; NoBinningPolicy hashBin; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -2328,17 +2358,17 @@ struct AnalysisSameEventPairing { VarManager::SetDefaultVarNames(); fEnableBarrelHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processBarrelOnlySkimmed") || - context.mOptions.get("processBarrelOnlyWithCollSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed"); fEnableMuonHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processMuonOnlySkimmed") || - context.mOptions.get("processMuonOnlyVertexingSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableBarrelMuonHistos = - context.mOptions.get("processElectronMuonSkimmed"); + context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = - context.mOptions.get("processMixingElectronMuonSkimmed"); + context.mOptions.get("processMixingElectronMuonSkimmed"); // Keep track of all the histogram class names to avoid composing strings in // the pairing loop @@ -2348,7 +2378,7 @@ struct AnalysisSameEventPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - *dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + *dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } @@ -2357,12 +2387,12 @@ struct AnalysisSameEventPairing { // and make a mask for active cuts (barrel and muon selection tasks may // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray *objArrayTrackCuts = nullptr; + TObjArray* objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray *objArrayMuonCuts = nullptr; + TObjArray* objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -2371,8 +2401,8 @@ struct AnalysisSameEventPairing { TString sigNamesStr = fConfigMC.recSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -2384,9 +2414,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMC.recSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2) { // NOTE: only 2 prong signals continue; } @@ -2399,8 +2429,8 @@ struct AnalysisSameEventPairing { TString emuSigNamesStr = fConfigMC.emuRecSignals.value; std::unique_ptr objEmuRecSigArray(emuSigNamesStr.Tokenize(",")); for (int isig = 0; isig < objEmuRecSigArray->GetEntries(); ++isig) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objEmuRecSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objEmuRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -2410,9 +2440,9 @@ struct AnalysisSameEventPairing { } TString addEmuMCSignalsStr = fConfigMC.emuRecSignalsJSON.value; if (addEmuMCSignalsStr != "") { - std::vector addEmuMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); - for (auto const &mcIt : addEmuMCSignals) { + std::vector addEmuMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); + for (auto const& mcIt : addEmuMCSignals) { if (mcIt->GetNProngs() != 2) { continue; } @@ -2431,9 +2461,9 @@ struct AnalysisSameEventPairing { "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2455,9 +2485,9 @@ struct AnalysisSameEventPairing { if (fEnableBarrelHistos) { // assign the pair hist directories for the current cut std::vector names = { - Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s", @@ -2473,7 +2503,7 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsBarrelSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); } - for (auto const &n : names) { + for (auto const& n : names) { histNames += Form("%s;", n.Data()); } fTrackHistNames[icut] = names; @@ -2486,23 +2516,23 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); // NOTE: In the numbering scheme for the map key, we use the // number of barrel cuts in the barrel-track selection task fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) @@ -2528,26 +2558,26 @@ struct AnalysisSameEventPairing { objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const &n : names) { + for (auto const& n : names) { histNames += Form("%s;", n.Data()); } fBarrelHistNamesMCmatched.try_emplace( - icut * fRecMCSignals.size() + isig, names); + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } // end if enableBarrelHistos @@ -2565,9 +2595,9 @@ struct AnalysisSameEventPairing { "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = - dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const &t : addMuonCuts) { + std::vector addMuonCuts = + dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const& t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2587,9 +2617,9 @@ struct AnalysisSameEventPairing { if (fEnableMuonHistos) { // assign pair hist directories for each required muon cut std::vector names = { - Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", @@ -2605,7 +2635,7 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); } - for (auto const &n : names) { + for (auto const& n : names) { histNames += Form("%s;", n.Data()); } fMuonHistNames[icut] = names; @@ -2615,21 +2645,21 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) @@ -2639,12 +2669,12 @@ struct AnalysisSameEventPairing { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), }; if (fConfigQA) { names.push_back(Form("PairsMuonSEPMCorrectAssoc_%s_%s", @@ -2657,26 +2687,26 @@ struct AnalysisSameEventPairing { objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const &n : names) { + for (auto const& n : names) { histNames += Form("%s;", n.Data()); } fMuonHistNamesMCmatched.try_emplace( - icut * fRecMCSignals.size() + isig, names); + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } @@ -2698,9 +2728,9 @@ struct AnalysisSameEventPairing { tempBarrelCutsStr, false); TString barrelCutsJSONStr = tempBarrelCutsStr; if (barrelCutsJSONStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); - for (auto const &t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); + for (auto const& t : addCuts) { barrelCutsAll += Form(",%s", t->GetName()); } } @@ -2715,9 +2745,9 @@ struct AnalysisSameEventPairing { false); TString muonCutsJSONStr = tempMuonCutsStr; if (muonCutsJSONStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); - for (auto const &t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); + for (auto const& t : addCuts) { muonCutsAll += Form(",%s", t->GetName()); } } @@ -2725,10 +2755,10 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; std::unique_ptr objArrayPair( - pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); int nPairCuts = (objArrayPair && objArrayPair->GetEntries() > 0) - ? objArrayPair->GetEntries() - : 1; + ? objArrayPair->GetEntries() + : 1; for (int iTrack = 0; iTrack < objArrayBarrel->GetEntries(); ++iTrack) { TString trackCutName = objArrayBarrel->At(iTrack)->GetName(); @@ -2746,12 +2776,12 @@ struct AnalysisSameEventPairing { // base (no pair-cut) entry std::vector names = { - Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), - muonCutName.Data()), - Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), - muonCutName.Data()), - Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), - muonCutName.Data())}; + Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); if (fEnableBarrelMuonMixingHistos) { @@ -2826,22 +2856,22 @@ struct AnalysisSameEventPairing { trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); } - for (auto const &n : names) { + for (auto const& n : names) { histNames += Form("%s;", n.Data()); } int index = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + @@ -2858,8 +2888,8 @@ struct AnalysisSameEventPairing { if (!mcgenCutsStr.IsNull()) { std::unique_ptr objArray(mcgenCutsStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - AnalysisCut *cut = - dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); + AnalysisCut* cut = + dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); if (cut != nullptr) { fMCGenAccCuts.push_back(cut); } @@ -2873,8 +2903,8 @@ struct AnalysisSameEventPairing { TString sigGenNamesStr = fConfigMC.genSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { fGenMCSignals.push_back(sig); } @@ -2883,9 +2913,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsGenStr = fConfigMC.genSignalsJSON.value; if (addMCSignalsGenStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() > 2) { // NOTE: only 2 prong signals continue; } @@ -2896,22 +2926,22 @@ struct AnalysisSameEventPairing { // define final state MC signals TString sigFinalStateNamesStr = fConfigMC.finalStateSignals.value; std::unique_ptr objFinalStateSigArray( - sigFinalStateNamesStr.Tokenize(",")); + sigFinalStateNamesStr.Tokenize(",")); for (int isig = 0; isig < objFinalStateSigArray->GetEntries(); isig++) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objFinalStateSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objFinalStateSigArray->At(isig)->GetName()); if (sig) { fFinalStateMCSignals.push_back(sig); } } if (isMCGen) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() == 1) { histNames += - Form("MCTruthGen_%s;", - sig->GetName()); // TODO: Add these names to a std::vector to - // avoid using Form in the process function + Form("MCTruthGen_%s;", + sig->GetName()); // TODO: Add these names to a std::vector to + // avoid using Form in the process function histNames += Form("MCTruthGenSel_%s;", sig->GetName()); } else if (sig->GetNProngs() == 2) { histNames += Form("MCTruthGenPair_%s;", sig->GetName()); @@ -2922,7 +2952,7 @@ struct AnalysisSameEventPairing { // for these pair level signals, also add histograms for each MCgenAcc // cut if specified if (fUseMCGenAccCut) { - for (auto const &cut : fMCGenAccCuts) { + for (auto const& cut : fMCGenAccCuts) { histNames += Form("MCTruthGenPairSel_%s_%s;", sig->GetName(), cut->GetName()); histNames += Form("MCTruthGenPseudoPolPairSel_%s_%s;", @@ -2943,7 +2973,7 @@ struct AnalysisSameEventPairing { VarManager::SetupFwdDCAFitterNoCorr(); } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigCCDB.lutPath)); + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } @@ -2953,25 +2983,26 @@ struct AnalysisSameEventPairing { dqefficiency_helpers::varUnits()); VarManager::SetCollisionSystem( - (TString)fConfigOptions.collisionSystem, - fConfigOptions.centerMassEnergy); // set collision system and center of - // mass energy + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center of + // mass energy DefineHistograms( - fHistMan, histNames.Data(), - fConfigAddSEPHistogram.value.data()); // define all histograms + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) { + void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigCCDB.grpMagPath, timestamp); + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -2984,19 +3015,19 @@ struct AnalysisSameEventPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // needed because take in varmanager Bz from - // fgFitterTwoProngBarrel for PhiV calculations + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } } @@ -3006,10 +3037,11 @@ struct AnalysisSameEventPairing { uint32_t TTrackFillMap, typename TEvents, typename TTrackAssocs, typename TTracks> void - runSameEventPairing(TEvents const &events, Preslice &preslice, - TTrackAssocs const &assocs, TTracks const & /*tracks*/, - ReducedMCEvents const & /*mcEvents*/, - ReducedMCTracks const &mcTracks) { + runSameEventPairing(TEvents const& events, Preslice& preslice, + TTrackAssocs const& assocs, TTracks const& /*tracks*/, + ReducedMCEvents const& /*mcEvents*/, + ReducedMCTracks const& mcTracks) + { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; @@ -3040,11 +3072,11 @@ struct AnalysisSameEventPairing { // estimate reserved size int64_t reserveSize = 0; int64_t reserveSizeGen = mcTracks.size(); - for (auto const &event : events) { + for (auto const& event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const &t : groupedAssocs) { + for (auto const& t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -3078,15 +3110,15 @@ struct AnalysisSameEventPairing { } constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const &event : events) { + for (auto const& event : events) { if (!event.has_reducedMCevent() || !event.isEventSelected_bit( - 0)) { // condition on reducedMCevent to avoid rec. events with no - // generated event + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event continue; } uint8_t evSel = event.isEventSelected_raw(); @@ -3095,21 +3127,21 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); if (groupedAssocs.size() == 0) { continue; } - for (auto const &[a1, a2] : + for (auto const& [a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue @@ -3183,95 +3215,95 @@ struct AnalysisSameEventPairing { } if constexpr (trackHasCov && TTwoProngFitter) { dielectronsExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dielectronAllList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - t1.sign() + t2.sign(), twoTrackFilter, mcDecision, - t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), - t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), - t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), - t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), - t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), - t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), t2.eta(), - t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), - t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), - t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), - t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), - t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), - t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], - VarManager::fgValues[VarManager::kKFTrack1DCAxyz], - VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DCAxy], - VarManager::fgValues[VarManager::kKFTrack1DCAxy], - VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues - [VarManager::kKFTrack0DeviationFromPV], - VarManager::fgValues - [VarManager::kKFTrack1DeviationFromPV], - VarManager::fgValues - [VarManager::kKFTrack0DeviationxyFromPV], - VarManager::fgValues - [VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], - VarManager::fgValues[VarManager::kVertexingLxyz], - VarManager::fgValues[VarManager::kVertexingLxyzOverErr], - VarManager::fgValues[VarManager::kVertexingLxy], - VarManager::fgValues[VarManager::kVertexingLxyOverErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kKFCosPA], - VarManager::fgValues[VarManager::kKFJpsiDCAxyz], - VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], - VarManager::fgValues - [VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues - [VarManager::kVertexingTauxyProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + t1.sign() + t2.sign(), twoTrackFilter, mcDecision, + t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), + t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), + t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), + t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), + t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), + t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), t2.eta(), + t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), + t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), + t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), + t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), + t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues + [VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues + [VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues + [VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } if (fConfigOptions.polarTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dileptonPolarList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - t1.sign() + t2.sign(), twoTrackFilter, - VarManager::fgValues[VarManager::kCosThetaHE], - VarManager::fgValues[VarManager::kPhiHE], - VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], - VarManager::fgValues[VarManager::kPhiCS], - VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], - VarManager::fgValues[VarManager::kPhiPP], - VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], - VarManager::fgValues[VarManager::kCosThetaStarFT0A], - VarManager::fgValues[VarManager::kCosThetaStarFT0C], - VarManager::fgValues[VarManager::kCosThetaStarRandom]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + t1.sign() + t2.sign(), twoTrackFilter, + VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); } } } } constexpr bool eventHasVtxCovForTable = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0 && trackHasCov && TTwoProngFitter && @@ -3281,52 +3313,52 @@ struct AnalysisSameEventPairing { // 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(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); const bool ambiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(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::kDCAxyOverSig1], - VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], - t1.itsChi2NCl(), t2.pt(), t2.eta(), - VarManager::fgValues[VarManager::kDCAxy2], - VarManager::fgValues[VarManager::kDCAz2], - VarManager::fgValues[VarManager::kDCAxyOverSig2], - VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], - t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, - isCorrectAssoc_leg1 && isCorrectAssoc_leg2, - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + 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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + VarManager::fgValues[VarManager::kITSclusterMap2], + t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, + isCorrectAssoc_leg1 && isCorrectAssoc_leg2, + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxNcontribReal]); } } } @@ -3417,47 +3449,47 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dimuonAllList( - event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, event.reducedMCevent().mcPosX(), - event.reducedMCevent().mcPosY(), - event.reducedMCevent().mcPosZ(), - VarManager::fgValues[VarManager::kMass], mcDecision, - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], - VarManager::fgValues[VarManager::kEta1], - VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], - VarManager::fgValues[VarManager::kEta2], - VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - t1.mcMask(), t2.mcMask(), t1.chi2MatchMCHMID(), - t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), - t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), - 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(), - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - isCorrectAssoc_leg1, isCorrectAssoc_leg2, -999.0, -999.0, - -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, event.reducedMCevent().mcPosX(), + event.reducedMCevent().mcPosY(), + event.reducedMCevent().mcPosZ(), + VarManager::fgValues[VarManager::kMass], mcDecision, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), + t1.mcMask(), t2.mcMask(), t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), + t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), + 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(), + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + isCorrectAssoc_leg1, isCorrectAssoc_leg2, -999.0, -999.0, + -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, + -999.0, VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } // Fill histograms @@ -3466,22 +3498,22 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass( - histNames[icut][0].Data(), - dqefficiency_helpers::varValues()); // reconstructed, - // unmatched + 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(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), - dqefficiency_helpers::varValues()); // matched signal + histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), + dqefficiency_helpers::varValues()); // matched signal if (useMiniTree.fConfigMiniTree) { if constexpr (TPairType == VarManager::kDecayToMuMu) { twoTrackFilter = a1.isMuonSelected_raw() & @@ -3496,41 +3528,41 @@ struct AnalysisSameEventPairing { auto t2 = a2.template reducedmuon_as(); float dileptonMass = - VarManager::fgValues[VarManager::kMass]; + VarManager::fgValues[VarManager::kMass]; if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { // In the miniTree the positive daughter is positioned // as first if (t1.sign() > 0) { dileptonMiniTreeRec( - mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - VarManager::fgValues[VarManager::kCentFT0C], - t1.reducedMCTrack().pt(), - t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), - t2.reducedMCTrack().pt(), - t2.reducedMCTrack().eta(), - t2.reducedMCTrack().phi(), t1.pt(), t1.eta(), - t1.phi(), t2.pt(), t2.eta(), t2.phi()); + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), t1.pt(), t1.eta(), + t1.phi(), t2.pt(), t2.eta(), t2.phi()); } else { dileptonMiniTreeRec( - mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - VarManager::fgValues[VarManager::kCentFT0C], - t2.reducedMCTrack().pt(), - t2.reducedMCTrack().eta(), - t2.reducedMCTrack().phi(), - t1.reducedMCTrack().pt(), - t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), t2.pt(), t2.eta(), - t2.phi(), t1.pt(), t1.eta(), t1.phi()); + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t2.pt(), t2.eta(), + t2.phi(), t1.pt(), t1.eta(), t1.phi()); } } } @@ -3540,47 +3572,47 @@ struct AnalysisSameEventPairing { isCorrectAssoc_leg2) { // correct track-collision // association fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][3] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][3] + .Data(), + dqefficiency_helpers::varValues()); } else { // incorrect track-collision association fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][4] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][4] + .Data(), + dqefficiency_helpers::varValues()); } if (isAmbiInBunch) { // ambiguous in bunch fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][5] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][5] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][6] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][6] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][7] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][7] + .Data(), + dqefficiency_helpers::varValues()); } } if (isAmbiOutOfBunch) { // ambiguous out of bunch fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][8] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][8] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][9] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][9] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][10] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][10] + .Data(), + dqefficiency_helpers::varValues()); } } } @@ -3604,9 +3636,9 @@ struct AnalysisSameEventPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][1] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][1] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { @@ -3626,9 +3658,9 @@ struct AnalysisSameEventPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][2] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][2] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { @@ -3647,25 +3679,25 @@ struct AnalysisSameEventPairing { iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); if (!(cut.IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][0] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][0] + .Data(), + dqefficiency_helpers::varValues()); } else { if (sign1 > 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][1] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][1] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][2] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][2] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop (pair cuts) @@ -3676,19 +3708,20 @@ struct AnalysisSameEventPairing { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; template - void runMCGen(TEvents const &events, ReducedMCEvents const &mcEvents, - ReducedMCTracks const &mcTracks) { + void runMCGen(TEvents const& events, ReducedMCEvents const& mcEvents, + ReducedMCTracks const& mcTracks) + { uint32_t mcDecision = 0; int isig = 0; // Loop over all MC single particles to fill generator level histograms, // disregarding of whether they belong to selected reconstructed events or // not - for (auto const &mctrack : mcTracks) { - for (auto const &sig : fGenMCSignals) { + for (auto const& mctrack : mcTracks) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { VarManager::FillTrackMC(mcTracks, mctrack); fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), @@ -3705,7 +3738,7 @@ struct AnalysisSameEventPairing { // Now loop over reconstructed events to select only MC particles belonging // to the same MC collision as the reconstructed event - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -3716,14 +3749,14 @@ struct AnalysisSameEventPairing { FinalStateMcParticleIndices.clear(); auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const &track : groupedMCTracks) { + for (auto const& track : groupedMCTracks) { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { if (track.reducedMCeventId() != event.reducedMCeventId()) { // check that the mc track belongs @@ -3736,20 +3769,20 @@ struct AnalysisSameEventPairing { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -3757,7 +3790,7 @@ struct AnalysisSameEventPairing { } isig++; } - for (auto const &sig : fFinalStateMCSignals) { + for (auto const& sig : fFinalStateMCSignals) { if (sig->CheckSignal(true, track_raw)) { FinalStateMcParticleIndices.push_back(track.globalIndex()); break; // if one of the final state signals is matched, no need to @@ -3771,9 +3804,9 @@ struct AnalysisSameEventPairing { if (fHasTwoProngGenMCsignals) { // loop over combinations of the selected mc particles to fill generator // level pair histograms - for (auto const &t1 : FinalStateMcParticleIndices) { + for (auto const& t1 : FinalStateMcParticleIndices) { auto t1_raw = mcTracks.rawIteratorAt(t1); - for (auto const &t2 : FinalStateMcParticleIndices) { + for (auto const& t2 : FinalStateMcParticleIndices) { if (t2 <= t1) { continue; // avoid double counting and self-pairing } @@ -3785,7 +3818,7 @@ struct AnalysisSameEventPairing { mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -3799,38 +3832,38 @@ struct AnalysisSameEventPairing { // length related variables if (t1_raw.has_mothers() && t2_raw.has_mothers()) { auto motherMCParticle_t1 = - t1_raw.template mothers_first_as(); + t1_raw.template mothers_first_as(); auto motherMCParticle_t2 = - t2_raw.template mothers_first_as(); + t2_raw.template mothers_first_as(); if (motherMCParticle_t1 == motherMCParticle_t2) { auto mcEvent = mcEvents.rawIteratorAt( - motherMCParticle_t1.reducedMCeventId()); + motherMCParticle_t1.reducedMCeventId()); std::array collVtxPos = { - mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; + mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; VarManager::FillTrackCollisionMC( - motherMCParticle_t1, collVtxPos, - pdgDB->Mass(motherMCParticle_t1.pdgCode())); + motherMCParticle_t1, collVtxPos, + pdgDB->Mass(motherMCParticle_t1.pdgCode())); } } // cout << " Filled VarManager for the pair." << endl; fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); fHistMan->FillHistClass( - Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // Fill also acceptance cut histograms if requested if (fUseMCGenAccCut) { - for (auto const &cut : fMCGenAccCuts) { + for (auto const& cut : fMCGenAccCuts) { if (cut->IsSelected(dqefficiency_helpers::varValues())) { fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s_%s", sig->GetName(), - cut->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s_%s", sig->GetName(), + cut->GetName()), + dqefficiency_helpers::varValues()); fHistMan->FillHistClass( - Form("MCTruthGenPseudoPolPairSel_%s_%s", - sig->GetName(), cut->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPseudoPolPairSel_%s_%s", + sig->GetName(), cut->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -3861,11 +3894,12 @@ struct AnalysisSameEventPairing { uint32_t TMuonFillMap, typename TEvents, typename TTrackAssocs, typename TTracks, typename TMuonAssocs, typename TMuons> void runEmuSameEventPairing( - TEvents const &events, Preslice &preslice1, - TTrackAssocs const &assocs1, TTracks const & /*tracks1*/, - Preslice &preslice2, TMuonAssocs const &assocs2, - TMuons const & /*tracks2*/, ReducedMCEvents const & /*mcEvents*/, - ReducedMCTracks const & /*mcTracks*/) { + TEvents const& events, Preslice& preslice1, + TTrackAssocs const& assocs1, TTracks const& /*tracks1*/, + Preslice& preslice2, TMuonAssocs const& assocs2, + TMuons const& /*tracks2*/, ReducedMCEvents const& /*mcEvents*/, + ReducedMCTracks const& /*mcTracks*/) + { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), true); @@ -3873,8 +3907,8 @@ struct AnalysisSameEventPairing { } } - const auto &histNames = fTrackMuonHistNames; - const auto &histNamesMC = fTrackMuonHistNamesMCmatched; + const auto& histNames = fTrackMuonHistNames; + const auto& histNamesMC = fTrackMuonHistNamesMCmatched; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; uint32_t twoTrackFilter = 0; @@ -3885,11 +3919,11 @@ struct AnalysisSameEventPairing { int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const &event : events) { + for (auto const& event : events) { if (!event.has_reducedMCevent() || !event.isEventSelected_bit(0)) { continue; } @@ -3898,7 +3932,7 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event.globalIndex()); if (groupedAssocs1.size() == 0) { @@ -3909,9 +3943,9 @@ struct AnalysisSameEventPairing { continue; } - for (auto const &[a1, a2] : + for (auto const& [a1, a2] : o2::soa::combinations(soa::CombinationsFullIndexPolicy( - groupedAssocs1, groupedAssocs2))) { + groupedAssocs1, groupedAssocs2))) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; @@ -3965,9 +3999,9 @@ struct AnalysisSameEventPairing { } } isCorrectAssoc_leg1 = - (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); isCorrectAssoc_leg2 = - (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); } VarManager::FillPair(t1, t2); @@ -3983,11 +4017,11 @@ struct AnalysisSameEventPairing { } bool isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); bool isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); bool isCorrectPair = isCorrectAssoc_leg1 && isCorrectAssoc_leg2; // fill reco histograms per (track cut, muon cut[, pair cut]) and the @@ -4064,7 +4098,7 @@ struct AnalysisSameEventPairing { if (itHistMC == histNamesMC.end()) { continue; } - const auto &mcNames = itHistMC->second; + const auto& mcNames = itHistMC->second; if (sign1 * sign2 < 0) { fHistMan->FillHistClass(mcNames[0].Data(), dqefficiency_helpers::varValues()); @@ -4120,25 +4154,26 @@ struct AnalysisSameEventPairing { template - void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, - TTracks1 const & /*tracks1*/, - TTracks2 const & /*tracks2*/) { - const auto &histNames = fTrackMuonHistNames; + void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, + TTracks1 const& /*tracks1*/, + TTracks2 const& /*tracks2*/) + { + const auto& histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; int sign1 = 0; int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const &a1 : assocs1) { + for (auto const& a1 : assocs1) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; } - for (auto const &a2 : assocs2) { + for (auto const& a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -4217,14 +4252,15 @@ struct AnalysisSameEventPairing { template - void runEmuSameSideMixing(TEvents &events, Preslice &preslice1, - TTrackAssocs const &assocs1, TTracks const &tracks1, - Preslice &preslice2, - TMuonAssocs const &assocs2, TMuons const &tracks2) { + void runEmuSameSideMixing(TEvents& events, Preslice& preslice1, + TTrackAssocs const& assocs1, TTracks const& tracks1, + Preslice& preslice2, + TMuonAssocs const& assocs2, TMuons const& tracks2) + { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const &[event1, event2] : + for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4241,33 +4277,35 @@ struct AnalysisSameEventPairing { continue; } runEmuMixedPairing( - groupedAssocs1, groupedAssocs2, tracks1, tracks2); + groupedAssocs1, groupedAssocs2, tracks1, tracks2); } } void processAllSkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - soa::Join const &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } void processBarrelOnlySkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -4276,26 +4314,28 @@ struct AnalysisSameEventPairing { } void processBarrelOnlyWithCollSkimmed( - MyEventsVtxCovSelectedInfo const &events, - soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelectedInfo const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); runMCGen(events, mcEvents, mcTracks); } void processMuonOnlySkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); // Feature replaced by processMCGen /* if (fConfigMC.runMCGenPair) { runMCGen(mcEvents, mcTracks); @@ -4303,26 +4343,28 @@ struct AnalysisSameEventPairing { } void processMuonOnlyVertexingSkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } PresliceUnsorted perReducedMcGenEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; - void processMCGen(soa::Filtered const &events, - ReducedMCEvents const &mcEvents, - ReducedMCTracks const &mcTracks) { + void processMCGen(soa::Filtered const& events, + ReducedMCEvents const& mcEvents, + ReducedMCTracks const& mcTracks) + { // Fill Generated histograms taking into account all generated tracks uint32_t mcDecision = 0; int isig = 0; - for (auto const &mctrack : mcTracks) { + for (auto const& mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so // depending on the requested signal, the stack could be incomplete. NOTE: @@ -4330,7 +4372,7 @@ struct AnalysisSameEventPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -4339,7 +4381,7 @@ struct AnalysisSameEventPairing { } // Fill Generated histograms taking into account selected collisions - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4349,12 +4391,12 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); // auto groupedMCTracks = mcTracks.sliceBy(perReducedMcGenEvent, // event.reducedMCeventId()); // groupedMCTracks.bindInternalIndicesTo(&mcTracks); // for (auto const& track : groupedMCTracks) { - for (auto const &track : mcTracks) { + for (auto const& track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4363,26 +4405,26 @@ struct AnalysisSameEventPairing { // auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -4393,17 +4435,17 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); } @@ -4412,7 +4454,7 @@ struct AnalysisSameEventPairing { } } // Fill Generated PAIR histograms taking into account selected collisions - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4421,7 +4463,7 @@ struct AnalysisSameEventPairing { } if (fHasTwoProngGenMCsignals) { - for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { if (t1.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4433,7 +4475,7 @@ struct AnalysisSameEventPairing { if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -4441,10 +4483,10 @@ struct AnalysisSameEventPairing { if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), @@ -4460,13 +4502,14 @@ struct AnalysisSameEventPairing { } void - processMCGenWithGrouping(soa::Filtered const &events, - ReducedMCEvents const &mcEvents, - ReducedMCTracks const &mcTracks) { + processMCGenWithGrouping(soa::Filtered const& events, + ReducedMCEvents const& mcEvents, + ReducedMCTracks const& mcTracks) + { uint32_t mcDecision = 0; int isig = 0; - for (auto const &mctrack : mcTracks) { + for (auto const& mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so // depending on the requested signal, the stack could be incomplete. NOTE: @@ -4474,7 +4517,7 @@ struct AnalysisSameEventPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -4482,7 +4525,7 @@ struct AnalysisSameEventPairing { } } // Fill Generated histograms taking into account selected collisions - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4490,7 +4533,7 @@ struct AnalysisSameEventPairing { continue; } - for (auto const &track : mcTracks) { + for (auto const& track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4498,26 +4541,26 @@ struct AnalysisSameEventPairing { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -4528,17 +4571,17 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); } @@ -4546,7 +4589,7 @@ struct AnalysisSameEventPairing { } } } - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4556,16 +4599,16 @@ struct AnalysisSameEventPairing { // CURRENTLY ONLY FOR 1-GENERATION 2-PRONG SIGNALS if (fHasTwoProngGenMCsignals) { auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const &[t1, t2] : + for (auto const& [t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) { auto t1_raw = groupedMCTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -4573,10 +4616,10 @@ struct AnalysisSameEventPairing { if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), @@ -4592,32 +4635,35 @@ struct AnalysisSameEventPairing { } void processElectronMuonSkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - soa::Join const &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runEmuSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } void processMixingElectronMuonSkimmed( - soa::Filtered &events, - soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - soa::Join const &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + soa::Filtered& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runEmuSameSideMixing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -4632,24 +4678,24 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, - "Run muon only pairing with two-prong vertexing, with skimmed tracks", - false); + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, "Run electron-muon mixing pairing, with skimmed tracks/muons", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisSameEventPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMCGenWithGrouping, "Loop over MC particle stack (grouped MCTracks) and fill " "generator level histograms", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Run pairing for resonance with legs fulfilling separate cuts (asymmetric @@ -4659,7 +4705,7 @@ struct AnalysisAsymmetricPairing { Produces ditrackList; Produces ditrackExtraList; - o2::base::MatLayerCylSet *fLUT = nullptr; + o2::base::MatLayerCylSet* fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -4668,85 +4714,85 @@ struct AnalysisAsymmetricPairing { // Configurables Configurable fConfigLegCuts{ - "cfgLegCuts", "", - ":[:],[:[:],...]"}; + "cfgLegCuts", "", + ":[:],[:[:],...]"}; Configurable fConfigLegAFilterMask{ - "cfgLegAFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegAFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigLegBFilterMask{ - "cfgLegBFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegBFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigLegCFilterMask{ - "cfgLegCFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegCFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigCommonTrackCuts{ - "cfgCommonTrackCuts", "", - "Comma separated list of cuts to be applied to all legs"}; + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; Configurable fConfigPairCuts{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; Configurable fConfigPairCutsJSON{ - "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; Configurable fConfigSkipAmbiguousIdCombinations{ - "cfgSkipAmbiguousIdCombinations", true, - "Choose whether to skip pairs/triples which pass a stricter combination " - "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; Configurable fConfigHistogramSubgroups{ - "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", - "Comma separated list of asymmetric-pairing histogram subgroups"}; + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; Configurable fConfigSameSignHistograms{ - "cfgSameSignHistograms", false, - "Include same sign pair histograms for 2-prong decays"}; + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; // Configurable fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", // false, "Include separate histograms for pairs/triplets with ambiguous // tracks"}; Configurable fConfigReflectedHistograms{ - "cfgReflectedHistograms", false, - "Include separate histograms for pairs which are reflections of " - "previously counted pairs"}; + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigGRPMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; Configurable fConfigUseAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; Configurable fConfigMCGenSignals{ - "cfgBarrelMCGenSignals", "", - "Comma separated list of MC signals (generated)"}; + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; Configurable fConfigMCRecSignals{ - "cfgBarrelMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable fConfigMCRecSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; Configurable fConfigMCGenSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Comma separated list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; Service fCCDB{}; - HistogramManager *fHistMan = nullptr; + HistogramManager* fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; // Filter masks to find legs in BarrelTrackCuts table uint32_t fLegAFilterMask = 0; @@ -4775,23 +4821,24 @@ struct AnalysisAsymmetricPairing { static_cast(0); Preslice> - trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs Partition> - legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegAFilterMask) > static_cast(0); + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); Partition> - legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegBFilterMask) > static_cast(0); + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); Partition> - legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegCFilterMask) > static_cast(0); + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { bool isMCGen = context.mOptions.get("processMCGen") || context.mOptions.get("processMCGenWithEventSelection"); if (context.mOptions.get("processDummy")) { @@ -4815,16 +4862,16 @@ struct AnalysisAsymmetricPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = - dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const &t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const& t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -4838,8 +4885,8 @@ struct AnalysisAsymmetricPairing { TString sigNamesStr = fConfigMCRecSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { fRecMCSignals.push_back(sig); } @@ -4847,9 +4894,9 @@ struct AnalysisAsymmetricPairing { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2 && mcIt->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " @@ -4876,9 +4923,9 @@ struct AnalysisAsymmetricPairing { "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -4895,8 +4942,8 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); fCommonTrackCutFilterMasks[icut] = - static_cast(1) - << objArray->IndexOf(objArrayCommon->At(icut)); + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { LOGF(fatal, @@ -5004,8 +5051,8 @@ struct AnalysisAsymmetricPairing { fConfigHistogramSubgroups.value.data()); if (fConfigQA) { DefineHistograms( - fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); @@ -5019,7 +5066,7 @@ struct AnalysisAsymmetricPairing { TString pairCutNamesStr = fConfigPairCuts.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts @@ -5044,9 +5091,9 @@ struct AnalysisAsymmetricPairing { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5059,23 +5106,23 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), - objArrayPair->At(iPairCut)->GetName(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayPair->At(iPairCut)->GetName(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), - objArrayCommon->At(iCommonCut)->GetName(), - objArrayPair->At(iPairCut)->GetName(), - sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) @@ -5091,9 +5138,9 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigQA) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5132,10 +5179,10 @@ struct AnalysisAsymmetricPairing { ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5189,7 +5236,7 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5206,13 +5253,13 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), - objArrayCommon->At(iCommonCut)->GetName(), - objArrayPair->At(iPairCut)->GetName(), - sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } // end loop (common cuts) } // end loop (pair cuts) @@ -5228,21 +5275,21 @@ struct AnalysisAsymmetricPairing { TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); DefineHistograms( - fHistMan, Form("MCTruthGen_%s;", sig->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGen_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function DefineHistograms( - fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } @@ -5250,21 +5297,21 @@ struct AnalysisAsymmetricPairing { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); DefineHistograms( - fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function DefineHistograms( - fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } @@ -5290,10 +5337,11 @@ struct AnalysisAsymmetricPairing { } // Make sure only pairs or only triplets of leg cuts were given int tripletCheckSum = - std::count(isThreeProng.begin(), isThreeProng.end(), true); + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " - "your config!"); + LOGF(fatal, + "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -5303,21 +5351,22 @@ struct AnalysisAsymmetricPairing { fCCDB->setLocalObjectValidityChecking(); fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigLutPath)); + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPMagPath, timestamp); + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -5338,9 +5387,9 @@ struct AnalysisAsymmetricPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigUseAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } @@ -5350,12 +5399,13 @@ struct AnalysisAsymmetricPairing { template - void runAsymmetricPairing(TEvents const &events, - Preslice &preslice, - TTrackAssocs const & /*assocs*/, - TTracks const & /*tracks*/, - ReducedMCEvents const & /*mcEvents*/, - ReducedMCTracks const & /*mcTracks*/) { + void runAsymmetricPairing(TEvents const& events, + Preslice& preslice, + TTrackAssocs const& /*assocs*/, + TTracks const& /*tracks*/, + ReducedMCEvents const& /*mcEvents*/, + ReducedMCTracks const& /*mcTracks*/) + { fPairCount.clear(); if (events.size() > 0) { // Additional protection to avoid crashing of @@ -5373,10 +5423,10 @@ struct AnalysisAsymmetricPairing { ditrackExtraList.reserve(1); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5386,18 +5436,18 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const &[a1, a2] : combinations(soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs))) { + for (auto const& [a1, a2] : combinations(soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs))) { uint32_t twoTrackFilter = 0; uint32_t twoTrackCommonFilter = 0; @@ -5492,9 +5542,9 @@ struct AnalysisAsymmetricPairing { (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); // reconstructed, - // unmatched + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5508,8 +5558,8 @@ struct AnalysisAsymmetricPairing { } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { // ++ pairs fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5522,8 +5572,8 @@ struct AnalysisAsymmetricPairing { } } else { // -- pairs fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5546,35 +5596,35 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_reflected_%s_%s", - fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_reflected_%s_%s", - fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_reflected_%s_%s", - fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5586,20 +5636,20 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } } for (unsigned int isig = 0; isig < fRecMCSignals.size(); @@ -5607,26 +5657,26 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5637,7 +5687,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); @@ -5665,26 +5715,26 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5696,26 +5746,26 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } } for (unsigned int isig = 0; isig < fRecMCSignals.size(); @@ -5723,29 +5773,29 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5756,17 +5806,17 @@ struct AnalysisAsymmetricPairing { } } // end loop (cuts) ditrackList( - event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, pairFilter, twoTrackCommonFilter); + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { ditrackExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop @@ -5776,11 +5826,12 @@ struct AnalysisAsymmetricPairing { template - void runThreeProng(TEvents const &events, Preslice &preslice, - TTrackAssocs const & /*assocs*/, TTracks const &tracks, - ReducedMCEvents const & /*mcEvents*/, - ReducedMCTracks const & /*mcTracks*/, - VarManager::PairCandidateType tripletType) { + void runThreeProng(TEvents const& events, Preslice& preslice, + TTrackAssocs const& /*assocs*/, TTracks const& tracks, + ReducedMCEvents const& /*mcEvents*/, + ReducedMCTracks const& /*mcTracks*/, + VarManager::PairCandidateType tripletType) + { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -5789,7 +5840,7 @@ struct AnalysisAsymmetricPairing { } } - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5799,35 +5850,35 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } auto groupedLegCAssocs = - legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const &[a1, a2, a3] : + for (auto const& [a1, a2, a3] : combinations(soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const &a1 : groupedLegAAssocs) { - for (auto const &[a2, a3] : + for (auto const& a1 : groupedLegAAssocs) { + for (auto const& [a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } } else { @@ -5841,10 +5892,11 @@ struct AnalysisAsymmetricPairing { template - void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, - TTrackAssoc const &a3, TTracks const & /*tracks*/, - TEvent const &event, - VarManager::PairCandidateType tripletType) { + void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, + TTrackAssoc const& a3, TTracks const& /*tracks*/, + TEvent const& event, + VarManager::PairCandidateType tripletType) + { uint32_t mcDecision = 0; uint32_t threeTrackFilter = 0; @@ -5941,7 +5993,7 @@ struct AnalysisAsymmetricPairing { tripletType); if constexpr (TThreeProngFitter) { VarManager::FillTripletVertexing( - event, t1, t2, t3, tripletType); + event, t1, t2, t3, tripletType); } // Fill histograms @@ -5952,21 +6004,21 @@ struct AnalysisAsymmetricPairing { (threeTrackFilter & (static_cast(1) << 31)); if (threeTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) if (fConfigQA && isAmbi) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { @@ -5978,10 +6030,10 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } @@ -5990,7 +6042,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts @@ -6002,10 +6054,10 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) // Histograms with pair cuts and common track cuts @@ -6022,12 +6074,12 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } @@ -6038,11 +6090,11 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -6050,35 +6102,36 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmedMultExtra( - MyEventsVtxCovSelectedMultExtra const &events, - soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelectedMultExtra const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runAsymmetricPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); } void processKaonPionPionSkimmed( - MyEventsVtxCovSelected const &events, - soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + MyEventsVtxCovSelected const& events, + soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks, VarManager::kTripleCandidateToKPiPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks, VarManager::kTripleCandidateToKPiPi); } - void processMCGen(ReducedMCTracks const &mcTracks) { + void processMCGen(ReducedMCTracks const& mcTracks) + { // loop over mc stack and fill histograms for pure MC truth signals // group all the MC tracks which belong to the MC event corresponding to the // current reconstructed event auto groupedMCTracks = // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, // event.reducedMCevent().globalIndex()); - for (auto const &mctrack : mcTracks) { + for (auto const& mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so @@ -6087,7 +6140,7 @@ struct AnalysisAsymmetricPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -6097,12 +6150,13 @@ struct AnalysisAsymmetricPairing { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; void processMCGenWithEventSelection( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { - for (auto const &event : events) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -6111,14 +6165,14 @@ struct AnalysisAsymmetricPairing { } auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const &track : groupedMCTracks) { + for (auto const& track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -6128,7 +6182,8 @@ struct AnalysisAsymmetricPairing { } // end loop over reconstructed events } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -6139,14 +6194,14 @@ struct AnalysisAsymmetricPairing { PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, "Run kaon pion pion triplets, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisAsymmetricPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processMCGenWithEventSelection, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisAsymmetricPairing, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Combines dileptons with barrel or muon tracks for either resonance or @@ -6160,92 +6215,92 @@ struct AnalysisDileptonTrack { OutputObj fOutputList{"output"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "kaonPID", - "Comma separated list of track cuts to be correlated with the dileptons"}; + "cfgTrackCuts", "kaonPID", + "Comma separated list of track cuts to be correlated with the dileptons"}; Configurable fConfigDileptonLowMass{ - "cfgDileptonLowMass", 2.8, - "Low mass cut for the dileptons used in analysis"}; + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; Configurable fConfigDileptonHighMass{ - "cfgDileptonHighMass", 3.2, - "High mass cut for the dileptons used in analysis"}; + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; Configurable fConfigDileptonpTCut{ - "cfgDileptonpTCut", 0.0, - "pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonpTCut", 0.0, + "pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonLxyCut{ - "cfgDileptonLxyCut", 0.0, - "Lxy cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; Configurable fConfigDileptonLowpTCut{ - "cfgDileptonLowpTCut", 0.0, - "Low pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonHighpTCut{ - "cfgDileptonHighpTCut", 1E5, - "High pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonRapCutAbs{ - "cfgDileptonRapCutAbs", 1.0, - "Rap cut for dileptons used in the triplet vertexing"}; + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; Configurable fConfigHistogramSubgroups{ - "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", - "Comma separated list of dilepton-track histogram subgroups"}; + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Configurable fConfigGeoPath{ - "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable fConfigMCRecSignals{ - "cfgMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable fConfigMCGenSignals{ - "cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; + "cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; Configurable fConfigMCRecSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; Configurable fConfigMCGenSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Comma separated list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; Configurable fConfigMCGenSignalDileptonLegPos{ - "cfgMCGenSignalDileptonLegPos", 0, - "generator level positive dilepton leg signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalDileptonLegPos", 0, + "generator level positive dilepton leg signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenSignalDileptonLegNeg{ - "cfgMCGenSignalDileptonLegNeg", 0, - "generator level negative dilepton leg signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalDileptonLegNeg", 0, + "generator level negative dilepton leg signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenSignalHadron{ - "cfgMCGenSignalHadron", 0, - "generator level associated hadron signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalHadron", 0, + "generator level associated hadron signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenDileptonLegPtMin{ - "cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; + "cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; Configurable fConfigMCGenHadronPtMin{"cfgMCGenHadronPtMin", 1.0f, "minimum pt for the hadron"}; Configurable fConfigMCGenDileptonLegEtaAbs{ - "cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; + "cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; Configurable fConfigMCGenHadronEtaAbs{"cfgMCGenHadronEtaAbs", 0.9f, "eta abs range for the hadron"}; Configurable fConfigUseMCRapcut{ - "cfgUseMCRapcut", false, - "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; Configurable fConfigUseCorrectlyAssociatedMC{ - "cfgUseCorrectlyAssociatedMC", true, - "Use only correctly associated track to construct triplet"}; + "cfgUseCorrectlyAssociatedMC", true, + "Use only correctly associated track to construct triplet"}; Configurable fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"}; @@ -6274,34 +6329,33 @@ struct AnalysisDileptonTrack { Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); Filter dileptonFilter = - aod::reducedpair::pt > - fConfigDileptonLowpTCut - &&aod::reducedpair::pt fConfigDileptonLowMass - &&aod::reducedpair::mass - fConfigDileptonLxyCut; + aod::reducedpair::pt > + fConfigDileptonLowpTCut&& aod::reducedpair::pt fConfigDileptonLowMass&& aod::reducedpair::mass + fConfigDileptonLxyCut; Filter filterBarrel = aod::dqanalysisflags::isBarrelSelected > static_cast(0); Filter filterMuon = aod::dqanalysisflags::isMuonSelected > static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float *fValuesDilepton = nullptr; - float *fValuesHadron = nullptr; - HistogramManager *fHistMan = nullptr; + float* fValuesDilepton = nullptr; + float* fValuesHadron = nullptr; + HistogramManager* fHistMan = nullptr; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; NoBinningPolicy fHashBin; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); bool isMuon = context.mOptions.get("processMuonSkimmed"); @@ -6309,11 +6363,11 @@ struct AnalysisDileptonTrack { context.mOptions.get("processMCGenWithEventSelection"); bool isDummy = context.mOptions.get("processDummy"); bool isMCGen_energycorrelators = - context.mOptions.get("processMCGenEnergyCorrelators") || - context.mOptions.get("processMCGenEnergyCorrelatorsPion"); + context.mOptions.get("processMCGenEnergyCorrelators") || + context.mOptions.get("processMCGenEnergyCorrelatorsPion"); bool isMCGen_energycorrelatorsME = - context.mOptions.get("processMCGenEnergyCorrelatorsME") || - context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); + context.mOptions.get("processMCGenEnergyCorrelatorsME") || + context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); if (isDummy) { if (isBarrel || isMuon || isBarrelAsymmetric || isMCGen) { @@ -6349,8 +6403,8 @@ struct AnalysisDileptonTrack { std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); if (!sigNamesStr.IsNull()) { for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" @@ -6369,9 +6423,9 @@ struct AnalysisDileptonTrack { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " @@ -6387,8 +6441,8 @@ struct AnalysisDileptonTrack { TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); @@ -6399,9 +6453,9 @@ struct AnalysisDileptonTrack { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const &mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const& mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); } @@ -6426,10 +6480,10 @@ struct AnalysisDileptonTrack { "cfgMuonCuts", cfgTrackSelection_TrackCuts, false); } - TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { cfgTrackSelection_objArrayTrackCuts = - TString(cfgTrackSelection_TrackCuts).Tokenize(","); + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { @@ -6445,9 +6499,9 @@ struct AnalysisDileptonTrack { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); + for (auto const& t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } @@ -6459,14 +6513,14 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { fTrackCutNames.push_back( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } // get the list of associated track cuts to be combined with the dileptons, // check that these were computed upstream, and create a bit mask - TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { cfgDileptonTrack_objArrayTrackCuts = - TString(fConfigTrackCuts.value).Tokenize(","); + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } @@ -6475,7 +6529,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { if (!cfgTrackSelection_objArrayTrackCuts->FindObject( - cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the single " @@ -6487,7 +6541,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { if (cfgDileptonTrack_objArrayTrackCuts->FindObject( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } @@ -6539,15 +6593,15 @@ struct AnalysisDileptonTrack { TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { if (std::strcmp( - cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), - objArrayCommon->At(icut)->GetName()) == 0) { + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; fCommonPairCutNames.push_back(objArrayCommon->At(icut)->GetName()); } @@ -6562,16 +6616,16 @@ struct AnalysisDileptonTrack { cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = - dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const &t : addPairCuts) { + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const& t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } std::unique_ptr objArrayPairCuts( - TString(cfgPairing_PairCuts).Tokenize(",")); + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); @@ -6579,7 +6633,7 @@ struct AnalysisDileptonTrack { // array of single lepton cuts specified in the same-analysis-pairing task std::unique_ptr cfgPairing_objArrayTrackCuts( - TString(cfgPairing_TrackCuts).Tokenize(",")); + TString(cfgPairing_TrackCuts).Tokenize(",")); // If asymmetric pairs are used, the number of cuts should come from the // asymmetric-pairing task if (isBarrelAsymmetric) { @@ -6598,15 +6652,15 @@ struct AnalysisDileptonTrack { // dileptons if (!isBarrelAsymmetric) { if (!cfgPairing_objArrayTrackCuts->FindObject( - fTrackCutNames[icut].Data())) { + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead pairLegCutName = - dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) - ->GetString(); + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); @@ -6629,17 +6683,17 @@ struct AnalysisDileptonTrack { Form("DileptonTrack_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6653,7 +6707,7 @@ struct AnalysisDileptonTrack { fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { DefineHistograms(fHistMan, Form("DileptonTrackMCMatched_%s_%s_%s_%s", pairLegCutName.Data(), @@ -6679,18 +6733,18 @@ struct AnalysisDileptonTrack { fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6706,15 +6760,15 @@ struct AnalysisDileptonTrack { fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrack_%s_%s_%s_%s_%s", - pairLegCutName.Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrack_%s_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } } @@ -6725,28 +6779,28 @@ struct AnalysisDileptonTrack { } // end if (isBarrel || isBarrelAsymmetric || isMuon) if (isMCGen) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { DefineHistograms(fHistMan, Form("MCTruthGen_%s", sig->GetName()), ""); DefineHistograms(fHistMan, Form("MCTruthGenSel_%s", sig->GetName()), ""); } - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { DefineHistograms(fHistMan, Form("MCTruthGenSelBR_%s", sig->GetName()), ""); DefineHistograms( - fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); + fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelators) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { DefineHistograms( - fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); + fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelatorsME) { - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { DefineHistograms(fHistMan, Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), ""); @@ -6762,9 +6816,10 @@ struct AnalysisDileptonTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) { + void initParamsFromCCDB(uint64_t timestamp) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -6776,8 +6831,8 @@ struct AnalysisDileptonTrack { VarManager::SetupThreeProngKFParticle(magField); } else { VarManager::SetupThreeProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } @@ -6785,18 +6840,19 @@ struct AnalysisDileptonTrack { template - void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, - TTracks const &tracks, TDileptons const &dileptons, - ReducedMCEvents const & /*mcEvents*/, - ReducedMCTracks const &mcTracks) { + void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, + TTracks const& tracks, TDileptons const& dileptons, + ReducedMCEvents const& /*mcEvents*/, + ReducedMCTracks const& mcTracks) + { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent( - event.reducedMCevent(), fValuesHadron); + event.reducedMCevent(), fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); VarManager::FillEvent( - event.reducedMCevent(), fValuesDilepton); + event.reducedMCevent(), fValuesDilepton); auto mcDecision = static_cast(0); size_t iSigMc = 0; @@ -6804,7 +6860,7 @@ struct AnalysisDileptonTrack { bool isCorrectAssoc_lepton2 = false; bool isCorrectAssoc_assoc = false; - for (auto const &dilepton : dileptons) { + for (auto const& dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6826,9 +6882,9 @@ struct AnalysisDileptonTrack { // Correct association if (fConfigUseCorrectlyAssociatedMC) { isCorrectAssoc_lepton1 = - (lepton1MC.reducedMCevent() == event.reducedMCevent()); + (lepton1MC.reducedMCevent() == event.reducedMCevent()); isCorrectAssoc_lepton2 = - (lepton2MC.reducedMCevent() == event.reducedMCevent()); + (lepton2MC.reducedMCevent() == event.reducedMCevent()); } VarManager::FillTrack(dilepton, fValuesDilepton); @@ -6842,8 +6898,8 @@ struct AnalysisDileptonTrack { // regular dileptons fHistMan->FillHistClass( - Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s if constexpr (TCandidateType == @@ -6854,9 +6910,9 @@ struct AnalysisDileptonTrack { iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { @@ -6868,13 +6924,13 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -6883,7 +6939,7 @@ struct AnalysisDileptonTrack { } // loop over track associations - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); @@ -6907,7 +6963,7 @@ struct AnalysisDileptonTrack { if (fConfigUseCorrectlyAssociatedMC) { // check if correctly // associated isCorrectAssoc_assoc = - (trackMC.reducedMCevent() == event.reducedMCevent()); + (trackMC.reducedMCevent() == event.reducedMCevent()); } bool isCorrect_triplet = isCorrectAssoc_lepton1 && isCorrectAssoc_lepton2 && @@ -6922,7 +6978,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); mcDecision = 0; iSigMc = 0; @@ -6939,11 +6995,11 @@ struct AnalysisDileptonTrack { while (true) { if (currentMCParticle.has_mothers()) { currentMCParticle = - currentMCParticle - .template mothers_first_as(); + currentMCParticle + .template mothers_first_as(); if (std::abs(currentMCParticle.pdgCode()) > 500 && std::abs(currentMCParticle.pdgCode()) < - 549) { // nb! hardcoded pdgcodes + 549) { // nb! hardcoded pdgcodes VarManager::FillTrackMC(mcTracks, currentMCParticle, fValuesHadron); break; @@ -6957,51 +7013,51 @@ struct AnalysisDileptonTrack { // PV) VarManager::FillTrackCollisionMC( - trackMC, currentMCParticle, event.reducedMCevent(), - fValuesHadron); + trackMC, currentMCParticle, event.reducedMCevent(), + fValuesHadron); } // table to be written out for ML analysis BmesonsTable( - event.runNumber(), event.globalIndex(), event.timestamp(), - fValuesHadron[VarManager::kPairMass], dilepton.mass(), - fValuesHadron[VarManager::kDeltaMass], - fValuesHadron[VarManager::kPairPt], - fValuesHadron[VarManager::kPairEta], - fValuesHadron[VarManager::kPairPhi], - fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], - fValuesHadron[VarManager::kVertexingLxyErr], - fValuesHadron[VarManager::kVertexingLxyz], - fValuesHadron[VarManager::kVertexingLxyzErr], - fValuesHadron[VarManager::kVertexingLz], - fValuesHadron[VarManager::kVertexingLzErr], - fValuesHadron[VarManager::kVertexingTauxy], - fValuesHadron[VarManager::kVertexingTauxyErr], - fValuesHadron[VarManager::kVertexingTauz], - fValuesHadron[VarManager::kVertexingTauzErr], - fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], - fValuesHadron[VarManager::kMCVertexingLxy], - fValuesHadron[VarManager::kMCVertexingLxyz], - fValuesHadron[VarManager::kMCVertexingLz], - fValuesHadron[VarManager::kMCVertexingTauxy], - fValuesHadron[VarManager::kMCVertexingTauz], - fValuesHadron[VarManager::kMCCosPointingAngle], - track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), - lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), - lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), - track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), - lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), - lepton2.tpcNSigmaPr(), track.itsClusterMap(), - lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), - lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), - lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection, - mcDecision); + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyErr], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLxyzErr], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingLzErr], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauxyErr], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kVertexingTauzErr], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], + fValuesHadron[VarManager::kMCVertexingLxy], + fValuesHadron[VarManager::kMCVertexingLxyz], + fValuesHadron[VarManager::kMCVertexingLz], + fValuesHadron[VarManager::kMCVertexingTauxy], + fValuesHadron[VarManager::kMCVertexingTauz], + fValuesHadron[VarManager::kMCCosPointingAngle], + track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection, + mcDecision); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { @@ -7026,7 +7082,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); auto trackMC = track.reducedMCTrack(); mcDecision = 0; @@ -7054,7 +7110,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); if (!track.has_reducedMCTrack()) { continue; @@ -7115,21 +7171,21 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } @@ -7137,43 +7193,43 @@ struct AnalysisDileptonTrack { for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } @@ -7188,19 +7244,20 @@ struct AnalysisDileptonTrack { } Preslice trackAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; Preslice dielectronsPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; Preslice ditracksPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; void processBarrelSkimmed( - soa::Filtered const &events, - soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - soa::Filtered const &dileptons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + soa::Filtered const& dileptons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7209,14 +7266,14 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons, @@ -7225,12 +7282,13 @@ struct AnalysisDileptonTrack { } void processDstarToD0Pi( - soa::Filtered const &events, - soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - soa::Filtered const &ditracks, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + soa::Filtered const& ditracks, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7239,11 +7297,11 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDitracks = - ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDitracks, @@ -7252,17 +7310,17 @@ struct AnalysisDileptonTrack { } Preslice muonAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; Preslice dimuonsPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; void processMuonSkimmed( - soa::Filtered const &events, - soa::Filtered> const - &assocs, - MyMuonTracksWithCov const &tracks, - soa::Filtered const &dileptons, - ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + soa::Filtered> const& assocs, + MyMuonTracksWithCov const& tracks, + soa::Filtered const& dileptons, + ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7271,27 +7329,28 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } auto groupedMuonAssocs = - assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); auto groupedDimuons = - dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); runDileptonHadron( - event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); + event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); } } - void processMCGen(ReducedMCTracks const &mcTracks) { + void processMCGen(ReducedMCTracks const& mcTracks) + { // loop over mc stack and fill histograms for pure MC truth signals // group all the MC tracks which belong to the MC event corresponding to the // current reconstructed event auto groupedMCTracks = // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, // event.reducedMCevent().globalIndex()); - for (auto const &mctrack : mcTracks) { + for (auto const& mctrack : mcTracks) { // if ((std::abs(mctrack.pdgCode()) > 400 && std::abs(mctrack.pdgCode()) < // 599) || @@ -7331,7 +7390,7 @@ struct AnalysisDileptonTrack { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -7341,12 +7400,13 @@ struct AnalysisDileptonTrack { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; void processMCGenWithEventSelection( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { - for (auto const &event : events) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7355,14 +7415,14 @@ struct AnalysisDileptonTrack { } auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const &track : groupedMCTracks) { + for (auto const& track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const &sig : fGenMCSignals) { + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -7373,20 +7433,20 @@ struct AnalysisDileptonTrack { // make a list of all MC tracks in the MC collision corresponding to the // current reconstructed event std::vector mcTrackIndices; - for (auto const &t : groupedMCTracks) { + for (auto const& t : groupedMCTracks) { mcTrackIndices.push_back(t.globalIndex()); } // make a three nested for loop over all MC tracks in the vector - for (const auto &t1 : mcTrackIndices) { + for (const auto& t1 : mcTrackIndices) { auto track1 = mcTracks.rawIteratorAt(t1); - for (const auto &t2 : mcTrackIndices) { + for (const auto& t2 : mcTrackIndices) { if (t1 == t2) { continue; } // if (t2 < t1) continue; auto track2 = mcTracks.rawIteratorAt(t2); - for (const auto &t3 : mcTrackIndices) { + for (const auto& t3 : mcTrackIndices) { if (t3 == t1) { continue; } @@ -7395,27 +7455,27 @@ struct AnalysisDileptonTrack { } auto track3 = mcTracks.rawIteratorAt(t3); - for (auto const &sig : fRecMCSignals) { + for (auto const& sig : fRecMCSignals) { if (sig->CheckSignal(true, track1, track2, track3)) { VarManager::FillTripleMC( - track1, track2, track3, - dqefficiency_helpers::varValues()); // nb! hardcoded for - // jpsiK + track1, track2, track3, + dqefficiency_helpers::varValues()); // nb! hardcoded for + // jpsiK fHistMan->FillHistClass( - Form("MCTruthGenSelBR_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenSelBR_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // apply kinematic cuts if (track1.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track1.eta()) > - fConfigMCGenDileptonLegEtaAbs.value) { + fConfigMCGenDileptonLegEtaAbs.value) { continue; } if (track2.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track2.eta()) > - fConfigMCGenDileptonLegEtaAbs.value) { + fConfigMCGenDileptonLegEtaAbs.value) { continue; } if (track3.pt() < fConfigMCGenHadronPtMin.value || @@ -7423,8 +7483,8 @@ struct AnalysisDileptonTrack { continue; } fHistMan->FillHistClass( - Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -7434,11 +7494,12 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelators(TEvent const &event, TMCTracks const &mcTracks) { + void runEnergyCorrelators(TEvent const& event, TMCTracks const& mcTracks) + { auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const &t1 : groupedMCTracks) { + for (auto const& t1 : groupedMCTracks) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal if ((t1_raw.pt() < fConfigDileptonLowpTCut || @@ -7449,7 +7510,7 @@ struct AnalysisDileptonTrack { continue; } // for the energy correlators - for (auto const &t2 : groupedMCTracks) { + for (auto const& t2 : groupedMCTracks) { auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || @@ -7464,25 +7525,26 @@ struct AnalysisDileptonTrack { continue; } VarManager::FillEnergyCorrelatorsMC( - t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const &sig : fGenMCSignals) { + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { fHistMan->FillHistClass( - Form("MCTruthEenergyCorrelators_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthEenergyCorrelators_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } void processMCGenEnergyCorrelators( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7494,13 +7556,14 @@ struct AnalysisDileptonTrack { } void processMCGenEnergyCorrelatorsPion( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7512,16 +7575,17 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelatorsMixedEvent(TEvent const &event1, - TEvent const &event2, - TMCTracks const &mcTracks) { + void runEnergyCorrelatorsMixedEvent(TEvent const& event1, + TEvent const& event2, + TMCTracks const& mcTracks) + { auto groupedMCTracks1 = - mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); auto groupedMCTracks2 = - mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); groupedMCTracks1.bindInternalIndicesTo(&mcTracks); groupedMCTracks2.bindInternalIndicesTo(&mcTracks); - for (auto const &t1 : groupedMCTracks1) { + for (auto const& t1 : groupedMCTracks1) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal if ((t1_raw.pt() < fConfigDileptonLowpTCut || @@ -7532,7 +7596,7 @@ struct AnalysisDileptonTrack { continue; } // for the energy correlators - for (auto const &t2 : groupedMCTracks2) { + for (auto const& t2 : groupedMCTracks2) { auto t2_raw = groupedMCTracks2.rawIteratorAt(t2.globalIndex()); if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || @@ -7547,12 +7611,12 @@ struct AnalysisDileptonTrack { continue; } VarManager::FillEnergyCorrelatorsMC( - t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const &sig : fGenMCSignals) { + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const& sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { fHistMan->FillHistClass( - Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -7560,15 +7624,16 @@ struct AnalysisDileptonTrack { } void processMCGenEnergyCorrelatorsME( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const &[event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const& [event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } @@ -7576,20 +7641,21 @@ struct AnalysisDileptonTrack { continue; } runEnergyCorrelatorsMixedEvent( - event1, event2, mcTracks); + event1, event2, mcTracks); } } void processMCGenEnergyCorrelatorsPionME( - soa::Filtered const &events, - ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + soa::Filtered const& events, + ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) + { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const &[event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const& [event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } @@ -7601,7 +7667,8 @@ struct AnalysisDileptonTrack { } } - void processDummy(MyEvents const &) { + void processDummy(MyEvents const&) + { // do nothing } @@ -7615,11 +7682,11 @@ struct AnalysisDileptonTrack { PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, "Run muon dilepton-track pairing, using skimmed data", false); PROCESS_SWITCH( - AnalysisDileptonTrack, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisDileptonTrack, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisDileptonTrack, processMCGenWithEventSelection, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisDileptonTrack, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelators, "Loop over MC particle stack and fill generator level " "histograms(energy correlators)", @@ -7639,20 +7706,22 @@ struct AnalysisDileptonTrack { PROCESS_SWITCH(AnalysisDileptonTrack, processDummy, "Dummy function", true); }; -WorkflowSpec defineDataProcessing(ConfigContext const &cfgc) { +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +{ return WorkflowSpec{ - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc)}; + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc)}; } -void DefineHistograms(HistogramManager *histMan, const TString &histClasses, - const char *histGroups) { +void DefineHistograms(HistogramManager* histMan, const TString& histClasses, + const char* histGroups) +{ // // Define here the histograms for all the classes required in analysis. // The histogram classes are provided in the histClasses string, separated by @@ -7700,7 +7769,7 @@ void DefineHistograms(HistogramManager *histMan, const TString &histClasses, } if (classStr.Contains("Ambiguity")) { dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } } diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index f2d8f7cb4bf..973964f3a01 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -82,8 +82,10 @@ #include // Some definitions -namespace o2::aod { -namespace dqanalysisflags { +namespace o2::aod +{ +namespace dqanalysisflags +{ DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, 8); //! Event decision @@ -94,8 +96,8 @@ DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsMuonSelected, isMuonSelected, - 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, @@ -191,13 +193,13 @@ DECLARE_SOA_COLUMN(MultiplicityNContrib, multiplicityNContribJPsi2ee, float); // Additional columns for prompt-non-prompt JPsi separation (BDT training) DECLARE_SOA_COLUMN(PairSign, pairSign, int8_t); //! t1.sign() + t2.sign() DECLARE_SOA_COLUMN( - PairFilter, pairFilter, - uint32_t); //! twoTrackFilter (cut bits + ambiguity bits 28-31) + 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( - Corrassoc, corrassoc, - bool); //! correct collision association (MC only, true in data) + Corrassoc, corrassoc, + bool); //! correct collision association (MC only, true in data) DECLARE_SOA_COLUMN(TauxyeeErr, tauxyeeErr, float); //! kVertexingTauxyErr: in ns (not cm) and with the //! reconstructed mass @@ -205,7 +207,7 @@ DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the //! reconstructed mass DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, - float); //! kVertexingLxyProjected + float); //! kVertexingLxyProjected DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, @@ -223,59 +225,59 @@ DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); } // namespace dqanalysisflags DECLARE_SOA_TABLE( - EventCuts, "AOD", "DQANAEVCUTSA", - dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents + EventCuts, "AOD", "DQANAEVCUTSA", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents DECLARE_SOA_TABLE( - BarrelTrackCuts, "AOD", "DQANATRKCUTSA", - dqanalysisflags::IsBarrelSelected); //! joinable to - //! o2::aod::ReducedTracksAssoc + BarrelTrackCuts, "AOD", "DQANATRKCUTSA", + dqanalysisflags::IsBarrelSelected); //! joinable to + //! o2::aod::ReducedTracksAssoc DECLARE_SOA_TABLE( - BarrelAmbiguities, "AOD", "DQBARRELAMBA", - dqanalysisflags::BarrelAmbiguityInBunch, - dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to - //! ReducedBarrelTracks + BarrelAmbiguities, "AOD", "DQBARRELAMBA", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks DECLARE_SOA_TABLE( - MuonTrackCuts, "AOD", "DQANAMUONCUTSA", - dqanalysisflags::IsMuonSelected); //! joinable to - //! o2::aod::ReducedMuonsAssoc + MuonTrackCuts, "AOD", "DQANAMUONCUTSA", + dqanalysisflags::IsMuonSelected); //! joinable to + //! o2::aod::ReducedMuonsAssoc DECLARE_SOA_TABLE( - MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, - dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to - //! ReducedMuonTracks + MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks DECLARE_SOA_TABLE( - Prefilter, "AOD", "DQPREFILTERA", - dqanalysisflags:: - IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc + Prefilter, "AOD", "DQPREFILTERA", + dqanalysisflags:: + IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc DECLARE_SOA_TABLE( - BmesonCandidates, "AOD", "DQBMESONSA", dqanalysisflags::RunNumber, - dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, - dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, - dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, - dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, - dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, - dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, - dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, - dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, - dqanalysisflags::GlobalIndexleg2, dqanalysisflags::PINassoc, - dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, - dqanalysisflags::Etapair, dqanalysisflags::PINleg1, - dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, - dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, - dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, - dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, - dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, - dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, - dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, - dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, - dqanalysisflags::IsBarrelSelected); + BmesonCandidates, "AOD", "DQBMESONSA", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, + dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, + dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, + dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, + dqanalysisflags::GlobalIndexleg2, dqanalysisflags::PINassoc, + dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, + dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, dqanalysisflags::MassDileptonCandidate, @@ -286,238 +288,238 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2); 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, - dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, - dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, - dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, - dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, - dqanalysisflags::MultiplicityNContrib); + 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, + dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, + dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, + dqanalysisflags::MultiplicityNContrib); } // namespace o2::aod // Declarations of various short names using MyEvents = - o2::soa::Join; + o2::soa::Join; using MyEventsBasic = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraNoQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraQVector = - o2::soa::Join; + o2::soa::Join; using MyEventsZdc = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraZdc = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraZdcFit = - o2::soa::Join; + o2::soa::Join; using MyEventsSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCov = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedInfo = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedQvectorWithHash = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovZdcFitSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovZdcFitSelectedMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelectedQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentr = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentrMerge = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentrSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelectedQvectorCentr = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracks = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCov = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithAmbiguitiesWithColl = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithEMCal = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithEMCal = - o2::soa::Join; + o2::soa::Join; using MyDielectronCandidates = - o2::soa::Join; + o2::soa::Join; using MyDitrackCandidates = - o2::soa::Join; + o2::soa::Join; using MyDimuonCandidates = - o2::soa::Join; + o2::soa::Join; using MyMuonTracks = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksWithCov = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksWithCovWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksSelectedWithColl = - o2::soa::Join; + o2::soa::Join; // bit maps used for the Fill functions of the VarManager constexpr static uint32_t gkEventFillMap = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; constexpr static uint32_t gkEventFillMapWithZdc = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; constexpr static uint32_t gkEventFillMapWithCov = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; // constexpr static uint32_t gkEventFillMapWithCovFlow = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkEventFillMapWithCovZdcFit = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | - VarManager::ReducedFit; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit; constexpr static uint32_t gkEventFillMapWithMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra; // New fillmap constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | - VarManager::ObjTypes::CollisionQvect; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | + VarManager::ObjTypes::CollisionQvect; // constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | // VarManager::ObjTypes::ReducedEventMultExtra | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkEventFillMapWithMultExtraZdc = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; constexpr static uint32_t gkEventFillMapWithMultExtraZdcFit = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | - VarManager::ReducedFit; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | + VarManager::ReducedFit; constexpr static uint32_t gkEventFillMapWithCovZdcFitMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | - VarManager::ReducedFit | VarManager::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit | VarManager::ReducedEventMultExtra; constexpr static uint32_t gkEventFillMapWithQvectorCentr = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::CollisionQvect | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::CollisionQvect | + VarManager::ObjTypes::ReducedEventMultExtra; // constexpr static uint32_t gkEventFillMapWithQvector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | @@ -527,30 +529,30 @@ constexpr static uint32_t gkEventFillMapWithQvectorCentr = // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkTrackFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCov = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCovWithColl = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID | - VarManager::ObjTypes::ReducedTrackCollInfo; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; constexpr static uint32_t gkTrackFillMapWithEMCal = - gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; + gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; constexpr static uint32_t gkTrackFillMapWithCovWithEMCal = - gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; + gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; // constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | // VarManager::ObjTypes::ReducedMuonExtra; constexpr static uint32_t gkMuonFillMapWithCov = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | - VarManager::ObjTypes::ReducedMuonCov; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; // constexpr static uint32_t gkMuonFillMapWithColl = // VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | // VarManager::ObjTypes::ReducedMuonCollInfo; @@ -559,22 +561,27 @@ constexpr static int pairTypeEE = VarManager::kDecayToEE; constexpr static int pairTypeMuMu = VarManager::kDecayToMuMu; // constexpr static int pairTypeEMu = VarManager::kElectronMuon; -namespace dqtablereader_helpers { -inline float *varValues() { return static_cast(VarManager::fgValues); } -inline TString *varNames() { - return static_cast(VarManager::fgVariableNames); +namespace dqtablereader_helpers +{ +inline float* varValues() { return static_cast(VarManager::fgValues); } +inline TString* varNames() +{ + return static_cast(VarManager::fgVariableNames); } -inline TString *varUnits() { - return static_cast(VarManager::fgVariableUnits); +inline TString* varUnits() +{ + return static_cast(VarManager::fgVariableUnits); } } // namespace dqtablereader_helpers // Global function used to define needed histogram classes void DefineHistograms( - HistogramManager *histMan, const TString &histClasses, - const char *histGroups); // defines histograms for all tasks + HistogramManager* histMan, const TString& histClasses, + const char* histGroups); // defines histograms for all tasks -template void PrintBitMap(TMap map, int nbits) { +template +void PrintBitMap(TMap map, int nbits) +{ std::string bits; bits.reserve(nbits); for (int i = 0; i < nbits; i++) { @@ -595,66 +602,66 @@ struct AnalysisEventSelection { // TODO: Provide the mixing variables and binning directly via configurables // (e.g. vectors of float) o2::framework::Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; o2::framework::Configurable fConfigMixingVariablesJson{ - "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; o2::framework::Configurable fConfigEventCuts{ - "cfgEventCuts", "eventStandard", "Event selection"}; + "cfgEventCuts", "eventStandard", "Event selection"}; o2::framework::Configurable fConfigEventCutsJSON{ - "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; o2::framework::Configurable fConfigAddEventHistogram{ - "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", - "Add event histograms defined via JSON formatting (see " - "HistogramsLibrary)"}; + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; o2::framework::Configurable fConfigQA{ - "cfgQA", true, "If true, QA histograms will be created and filled"}; + "cfgQA", true, "If true, QA histograms will be created and filled"}; o2::framework::Configurable fConfigITSROFrameStartBorderMargin{ - "cfgITSROFrameStartBorderMargin", -1, - "Number of bcs at the start of ITS RO Frame border. Take from CCDB if " - "-1"}; + "cfgITSROFrameStartBorderMargin", -1, + "Number of bcs at the start of ITS RO Frame border. Take from CCDB if " + "-1"}; o2::framework::Configurable fConfigITSROFrameEndBorderMargin{ - "cfgITSROFrameEndBorderMargin", -1, - "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; + "cfgITSROFrameEndBorderMargin", -1, + "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; o2::framework::Configurable fConfigSplitCollisionsDeltaZ{ - "cfgSplitCollisionsDeltaZ", 1.0, - "maximum delta-z (cm) between two collisions to consider them as split " - "candidates"}; + "cfgSplitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; o2::framework::Configurable fConfigSplitCollisionsDeltaBC{ - "cfgSplitCollisionsDeltaBC", 100, - "maximum delta-BC between two collisions to consider them as split " - "candidates; do not apply if value is negative"}; + "cfgSplitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; o2::framework::Configurable fConfigCheckSplitCollisions{ - "cfgCheckSplitCollisions", false, - "If true, run the split collision check and fill histograms"}; + "cfgCheckSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; o2::framework::Configurable fConfigRunZorro{ - "cfgRunZorro", false, - "Enable event selection with zorro [WARNING: under debug, do not " - "enable!]"}; + "cfgRunZorro", false, + "Enable event selection with zorro [WARNING: under debug, do not " + "enable!]"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigFetchInteractionRate{ - "cfgFetchInteractionRate", false, - "Fetch event-wise interaction rate from the CCDB"}; + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; o2::framework::Configurable fConfigIRSource{ - "cfgIRSource", "ZNC hadronic", - "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " - "ZNC hadronic)"}; + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; - HistogramManager *fHistMan = nullptr; - MixingHandler *fMixHandler = nullptr; - AnalysisCompositeCut *fEventCut = nullptr; + HistogramManager* fHistMan = nullptr; + MixingHandler* fMixHandler = nullptr; + AnalysisCompositeCut* fEventCut = nullptr; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; @@ -663,22 +670,23 @@ struct AnalysisEventSelection { std::map fSelMap; // key: reduced event global index, value: // event selection decision std::map> - fBCCollMap; // key: global BC, value: vector of reduced event global - // indices + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices int fCurrentRun = -1; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { bool isAnyProcessEnabled = - context.mOptions.get("processSkimmed") || - context.mOptions.get("processSkimmedBasic") || - context.mOptions.get("processSkimmedWithZdc") || - context.mOptions.get("processSkimmedWithMultExtra") || - context.mOptions.get("processSkimmedWithMultExtraNoQvector") || - context.mOptions.get("processSkimmedWithMultExtraZdc") || - context.mOptions.get("processSkimmedWithMultExtraZdcFit") || - context.mOptions.get("processSkimmedWithQvectorCentr") || - context.mOptions.get("processSkimmedWithQvectorCentrMerge"); + context.mOptions.get("processSkimmed") || + context.mOptions.get("processSkimmedBasic") || + context.mOptions.get("processSkimmedWithZdc") || + context.mOptions.get("processSkimmedWithMultExtra") || + context.mOptions.get("processSkimmedWithMultExtraNoQvector") || + context.mOptions.get("processSkimmedWithMultExtraZdc") || + context.mOptions.get("processSkimmedWithMultExtraZdcFit") || + context.mOptions.get("processSkimmedWithQvectorCentr") || + context.mOptions.get("processSkimmedWithQvectorCentrMerge"); bool isDummyEnabled = context.mOptions.get("processDummy"); if (isDummyEnabled) { @@ -697,7 +705,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut *cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut* cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -705,16 +713,16 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = - o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const &cutIt : jsonCuts) { + std::vector jsonCuts = + o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const& cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); @@ -729,7 +737,7 @@ struct AnalysisEventSelection { } // Additional histograms via JSON o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, fConfigAddJSONHistograms.value.c_str()); + fHistMan, fConfigAddJSONHistograms.value.c_str()); VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -761,46 +769,47 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const &events) { + void runEventSelection(TEvents const& events) + { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); auto alppar = fCCDB->getForTimeStamp>( - "ITS/Config/AlpideParam", events.begin().timestamp()); + "ITS/Config/AlpideParam", events.begin().timestamp()); auto par = fCCDB->getForTimeStamp( - "EventSelection/EventSelectionParams", events.begin().timestamp()); + "EventSelection/EventSelectionParams", events.begin().timestamp()); int itsROFrameStartBorderMargin = - fConfigITSROFrameStartBorderMargin < 0 - ? par->fITSROFrameStartBorderMargin - : fConfigITSROFrameStartBorderMargin; + fConfigITSROFrameStartBorderMargin < 0 + ? par->fITSROFrameStartBorderMargin + : fConfigITSROFrameStartBorderMargin; int itsROFrameEndBorderMargin = fConfigITSROFrameEndBorderMargin < 0 - ? par->fITSROFrameEndBorderMargin - : fConfigITSROFrameEndBorderMargin; + ? par->fITSROFrameEndBorderMargin + : fConfigITSROFrameEndBorderMargin; VarManager::SetITSROFBorderselection( - alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, - itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); + alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, + itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); fCurrentRun = events.begin().runNumber(); } fSelMap.clear(); fBCCollMap.clear(); - for (auto const &event : events) { + for (auto const& event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { VarManager::fgValues[VarManager::kInteractionRate] = - rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, - fConfigIRSource.value, true) / - 1000.; // kHz + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } bool decision = false; @@ -839,14 +848,14 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto &evIndices = fBCCollMap[event.globalBC()]; + auto& evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } // create the mixing hash and publish it into the hash table if (fMixHandler != nullptr) { int hh = - fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); + fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); // events outside the mixing limits (-1) get a distinct negative hash so // that they are not mixed with each other if (hh < 0) { @@ -858,7 +867,8 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const &events) { + void publishSelections(TEvents const& events) + { // Create a map for collisions which are candidate of being split // key: event global index, value: whether pileup event is a possible // splitting @@ -872,7 +882,7 @@ struct AnalysisEventSelection { for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { uint64_t bc1 = bc1It->first; - auto const &bc1Events = bc1It->second; + auto const& bc1Events = bc1It->second; // same bunch event correlations, if more than 1 collisions in this // bunch @@ -908,13 +918,13 @@ struct AnalysisEventSelection { fConfigSplitCollisionsDeltaBC) { break; } - auto const &bc2Events = bc2It->second; + auto const& bc2Events = bc2It->second; // loop over events in the first BC - for (auto const &ev1It : bc1Events) { + for (auto const& ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (auto const &ev2It : bc2Events) { + for (auto const& ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); // compute 2-event quantities and mark the candidate split // collisions @@ -937,7 +947,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const &event : events) { + for (auto const& event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -955,57 +965,66 @@ struct AnalysisEventSelection { } } - void processSkimmed(MyEvents const &events) { + void processSkimmed(MyEvents const& events) + { runEventSelection(events); publishSelections(events); } - void processSkimmedBasic(MyEventsBasic const &events) { + void processSkimmedBasic(MyEventsBasic const& events) + { runEventSelection(events); publishSelections(events); } - void processSkimmedWithZdc(MyEventsZdc const &events) { + void processSkimmedWithZdc(MyEventsZdc const& events) + { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtra(MyEventsMultExtra const &events) { + void processSkimmedWithMultExtra(MyEventsMultExtra const& events) + { runEventSelection(events); publishSelections(events); } void processSkimmedWithMultExtraNoQvector( - MyEventsMultExtraNoQvector const &events) { + MyEventsMultExtraNoQvector const& events) + { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const &events) { + void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const& events) + { runEventSelection(events); publishSelections(events); } void - processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const &events) { + processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const& events) + { runEventSelection(events); publishSelections(events); } - void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const &events) { + void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const& events) + { runEventSelection(events); publishSelections(events); } void - processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const &events) { + processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const& events) + { runEventSelection(events); publishSelections(events); } void processFillEvents( - MyEventsBasic const - &events) // Used to forward the event table from tablemaker, typical - // use for now is jet analysis. + MyEventsBasic const& events) // Used to forward the event table from tablemaker, typical + // use for now is jet analysis. { - for (auto const &event : events) { + for (auto const& event : events) { JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -1024,13 +1043,13 @@ struct AnalysisEventSelection { "and without Q-vector", false); PROCESS_SWITCH( - AnalysisEventSelection, processSkimmedWithMultExtraZdc, - "Run event selection on DQ skimmed events, with mult extra and ZDC", - false); + AnalysisEventSelection, processSkimmedWithMultExtraZdc, + "Run event selection on DQ skimmed events, with mult extra and ZDC", + false); PROCESS_SWITCH( - AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, - "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", - false); + AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, + "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", + false); PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentr, "Run event selection on DQ skimmed events, with Q-vector", false); @@ -1054,20 +1073,20 @@ struct AnalysisTrackSelection { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigCuts{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; o2::framework::Configurable fConfigCutsJSON{ - "cfgBarrelTrackCutsJSON", "", - "Additional list of barrel track cuts in JSON format"}; + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; o2::framework::Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; o2::framework::Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; // Re-application of the track-to-collision time compatibility on the skimmed // associations. // timeMargin and nSigma must be <= the values used by @@ -1075,77 +1094,78 @@ struct AnalysisTrackSelection { // usePVAssociation and maxPvContributors must be identical to those values. struct : o2::framework::ConfigurableGroup { o2::framework::Configurable cfgAssocTimeCut{ - "cfgAssocTimeCut", false, - "If true, reject associations failing the time compatibility computed " - "with the parameters below"}; + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; o2::framework::Configurable cfgAssocTimeMargin{ - "cfgAssocTimeMargin", 0.f, - "time margin (ns); must be <= skimming timeMargin"}; + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; o2::framework::Configurable cfgAssocNSigma{ - "cfgAssocNSigma", 4.f, - "nSigmaForTimeCompat; must be <= skimming value"}; + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; o2::framework::Configurable cfgAssocBcWindowForOneSigma{ - "cfgAssocBcWindowForOneSigma", 60, - "bcWindowForOneSigma; must be equal to the skimming value"}; + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; o2::framework::Configurable cfgAssocUsePVAssociation{ - "cfgAssocUsePVAssociation", 1, - "usePVAssociation; must be equal to the skimming value"}; + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; o2::framework::Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ - "cfgAssocMaxPvContributorsForLowMultReassoc", 10, - "maxPvContributorsForLowMultReassoc; must be equal to the skimming " - "value"}; + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigCcdbPathTPC{ - "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", - "base path to the ccdb object"}; + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigComputeTPCpostCalib{ - "cfgTPCpostCalib", false, - "If true, compute TPC post-calibrated n-sigmas"}; + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; o2::framework::Configurable fConfigTPCpostCalibType{ - "cfgTPCpostCalibType", 1, - "1: (TPCncls,pIN,eta) calibration typically for pp, 2: " - "(eta,nPV,nLong,tLong) calibration typically for PbPb"}; + "cfgTPCpostCalibType", 1, + "1: (TPCncls,pIN,eta) calibration typically for pp, 2: " + "(eta,nPV,nLong,tLong) calibration typically for PbPb"}; o2::framework::Configurable fConfigTPCuseInterpolatedCalib{ - "cfgTPCpostCalibUseInterpolation", true, - "If true, use interpolated calibration values (default: true)"}; + "cfgTPCpostCalibUseInterpolation", true, + "If true, use interpolated calibration values (default: true)"}; o2::framework::Configurable grpmagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; // Track related options o2::framework::Configurable fPropTrack{ - "cfgPropTrack", true, - "Propgate tracks to associated collision to recalculate DCA and momentum " - "vector"}; + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and momentum " + "vector"}; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; - HistogramManager *fHistMan = nullptr; - std::vector fTrackCuts; + HistogramManager* fHistMan = nullptr; + std::vector fTrackCuts; int fCurrentRun = 0; // current run kept to detect run changes and trigger // loading params from CCDB std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1157,49 +1177,49 @@ struct AnalysisTrackSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fTrackCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra cuts via JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackBarrel_BeforeCuts;"; - for (auto const &cut : fTrackCuts) { + for (auto const& cut : fTrackCuts) { histDirNames += Form("TrackBarrel_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { histDirNames += - "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; } DefineHistograms( - fHistMan, histDirNames.Data(), - fConfigAddTrackHistogram.value.data()); // define all histograms + fHistMan, histDirNames.Data(), + fConfigAddTrackHistogram.value.data()); // define all histograms o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1212,48 +1232,49 @@ struct AnalysisTrackSelection { template - void runTrackSelection(o2::aod::ReducedTracksAssoc const &assocs, - TEvents const &events, TTracks const &tracks) { + void runTrackSelection(o2::aod::ReducedTracksAssoc const& assocs, + TEvents const& events, TTracks const& tracks) + { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { auto calibList = fCCDB->getForTimeStamp( - fConfigCcdbPathTPC.value, events.begin().timestamp()); + fConfigCcdbPathTPC.value, events.begin().timestamp()); VarManager::SetCalibrationObject( - VarManager::kTPCElectronMean, - calibList->FindObject("mean_map_electron")); + VarManager::kTPCElectronMean, + calibList->FindObject("mean_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCElectronSigma, - calibList->FindObject("sigma_map_electron")); + VarManager::kTPCElectronSigma, + calibList->FindObject("sigma_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); + VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); + VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonMean, - calibList->FindObject("mean_map_proton")); + VarManager::kTPCProtonMean, + calibList->FindObject("mean_map_proton")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonSigma, - calibList->FindObject("sigma_map_proton")); + VarManager::kTPCProtonSigma, + calibList->FindObject("sigma_map_proton")); if (fConfigTPCpostCalibType == 2) { VarManager::SetCalibrationObject( - VarManager::kTPCElectronStatus, - calibList->FindObject("status_map_electron")); + VarManager::kTPCElectronStatus, + calibList->FindObject("status_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionStatus, - calibList->FindObject("status_map_pion")); + VarManager::kTPCPionStatus, + calibList->FindObject("status_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonStatus, - calibList->FindObject("status_map_proton")); + VarManager::kTPCProtonStatus, + calibList->FindObject("status_map_proton")); } VarManager::SetCalibrationType(fConfigTPCpostCalibType, fConfigTPCuseInterpolatedCalib); } auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -1263,8 +1284,8 @@ struct AnalysisTrackSelection { std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -1277,7 +1298,7 @@ struct AnalysisTrackSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { // if the event from this association is not selected, reject also the // association @@ -1299,11 +1320,11 @@ struct AnalysisTrackSelection { if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); if (!VarManager::isBarrelAssocTimeCompatible( - track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, - fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, - fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } @@ -1323,7 +1344,7 @@ struct AnalysisTrackSelection { VarManager::ObjTypes::TrackEMCal)) { if (track.has_matchedEMCalCluster()) { auto cluster = - track.template matchedEMCalCluster_as(); + track.template matchedEMCalCluster_as(); VarManager::FillTrackEMCal(cluster, track.p(), track.emcalMatchDeltaEta(), track.emcalMatchDeltaPhi()); @@ -1358,7 +1379,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsInBunch[track.globalIndex()]; + auto& evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1367,7 +1388,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1377,7 +1398,7 @@ struct AnalysisTrackSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1387,12 +1408,12 @@ struct AnalysisTrackSelection { // Exceptionally, set the VarManager ambiguity number here, to be used // in histograms VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1401,14 +1422,14 @@ struct AnalysisTrackSelection { VarManager::FillTrack(track); // Exceptionally, set the VarManager ambiguity number here VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const &track : tracks) { + for (auto const& track : tracks) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1425,39 +1446,45 @@ struct AnalysisTrackSelection { } // end runTrackSelection() - void processSkimmed(o2::aod::ReducedTracksAssoc const &assocs, - MyEventsSelected const &events, - MyBarrelTracks const &tracks) { + void processSkimmed(o2::aod::ReducedTracksAssoc const& assocs, + MyEventsSelected const& events, + MyBarrelTracks const& tracks) + { runTrackSelection(assocs, events, tracks); } - void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const &assocs, - MyEventsMultExtraSelected const &events, - MyBarrelTracks const &tracks) { + void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const& assocs, + MyEventsMultExtraSelected const& events, + MyBarrelTracks const& tracks) + { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const &assocs, - MyEventsVtxCovSelected const &events, - MyBarrelTracksWithCov const &tracks) { + void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const& assocs, + MyEventsVtxCovSelected const& events, + MyBarrelTracksWithCov const& tracks) + { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, - MyEventsSelected const &events, - MyBarrelTracksWithEMCal const &tracks, - o2::aod::ReducedEMCals const & /*emcals*/) { + void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, + MyEventsSelected const& events, + MyBarrelTracksWithEMCal const& tracks, + o2::aod::ReducedEMCals const& /*emcals*/) + { runTrackSelection(assocs, events, tracks); } void - processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, - MyEventsVtxCovSelected const &events, - MyBarrelTracksWithCovWithEMCal const &tracks, - o2::aod::ReducedEMCals const & /*emcals*/) { + processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, + MyEventsVtxCovSelected const& events, + MyBarrelTracksWithCovWithEMCal const& tracks, + o2::aod::ReducedEMCals const& /*emcals*/) + { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -1493,46 +1520,47 @@ struct AnalysisMuonSelection { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigCuts{ - "cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; + "cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; o2::framework::Configurable fConfigCutsJSON{ - "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; o2::framework::Configurable fConfigAddMuonHistogram{ - "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Service fCCDB{}; - HistogramManager *fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager* fHistMan = nullptr; + std::vector fMuonCuts; int fCurrentRun = 0; // current run kept to detect run changes and trigger // loading params from CCDB std::map> - fNAssocsInBunch; // key: muon global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: muon global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: muon global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: muon global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1544,49 +1572,49 @@ struct AnalysisMuonSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fMuonCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // extra cuts from JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = - o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const &t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const& t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackMuon_BeforeCuts;"; - for (auto const &cut : fMuonCuts) { + for (auto const& cut : fMuonCuts) { histDirNames += Form("TrackMuon_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { histDirNames += - "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; + "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; } DefineHistograms( - fHistMan, histDirNames.Data(), - fConfigAddMuonHistogram.value.data()); // define all histograms + fHistMan, histDirNames.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1598,8 +1626,9 @@ struct AnalysisMuonSelection { template - void runMuonSelection(o2::aod::ReducedMuonsAssoc const &assocs, - TEvents const &events, TMuons const &muons) { + void runMuonSelection(o2::aod::ReducedMuonsAssoc const& assocs, + TEvents const& events, TMuons const& muons) + { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1612,7 +1641,7 @@ struct AnalysisMuonSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { muonSel(0); @@ -1651,7 +1680,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsInBunch[track.globalIndex()]; + auto& evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1660,7 +1689,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1670,7 +1699,7 @@ struct AnalysisMuonSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1678,12 +1707,12 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1691,14 +1720,14 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const &track : muons) { + for (auto const& track : muons) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1714,13 +1743,15 @@ struct AnalysisMuonSelection { } } - void processSkimmed(o2::aod::ReducedMuonsAssoc const &assocs, - MyEventsVtxCovSelected const &events, - MyMuonTracksWithCov const &muons) { + void processSkimmed(o2::aod::ReducedMuonsAssoc const& assocs, + MyEventsVtxCovSelected const& events, + MyMuonTracksWithCov const& muons) + { runMuonSelection( - assocs, events, muons); + assocs, events, muons); } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -1738,27 +1769,28 @@ struct AnalysisMuonSelection { // analysis. struct AnalysisPrefilterSelection { o2::framework::Produces - prefilter; // joinable with o2::aod::ReducedTracksAssoc + prefilter; // joinable with o2::aod::ReducedTracksAssoc // Configurables o2::framework::Configurable fConfigPrefilterTrackCut{ - "cfgPrefilterTrackCut", "", "Prefilter track cut"}; + "cfgPrefilterTrackCut", "", "Prefilter track cut"}; o2::framework::Configurable fConfigPrefilterPairCut{ - "cfgPrefilterPairCut", "", "Prefilter pair cut"}; + "cfgPrefilterPairCut", "", "Prefilter pair cut"}; o2::framework::Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // TODO: Add prefilter pair cut via JSON std::map fPrefilterMap; - AnalysisCompositeCut *fPairCut = nullptr; + AnalysisCompositeCut* fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -1767,7 +1799,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray *objArrayTrackCuts = nullptr; + TObjArray* objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1793,18 +1825,18 @@ struct AnalysisPrefilterSelection { // to mark just the ones we want to apply a prefilter on std::string trackCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", trackCuts, - false); + context, "analysis-track-selection", "cfgTrackCuts", trackCuts, + false); TString allTrackCutsStr = trackCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", - trackCuts, false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } @@ -1812,7 +1844,7 @@ struct AnalysisPrefilterSelection { std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { LOG(fatal) << " Prefilter track cut not among the cuts calculated by " @@ -1840,24 +1872,25 @@ struct AnalysisPrefilterSelection { } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill VarManager::SetupTwoProngDCAFitter( - 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - true); // TODO: get these parameters from Configurables + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables // VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, // true); } template void runPrefilter(o2::soa::Join const &assocs, - TTracks const & /*tracks*/) { + o2::aod::BarrelTrackCuts> const& assocs, + TTracks const& /*tracks*/) + { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); @@ -1871,9 +1904,9 @@ struct AnalysisPrefilterSelection { // here we check the cuts fulfilled by both tracks, for both the tight and // loose selections uint32_t track1Candidate = - (assoc1.isBarrelSelected_raw() & fPrefilterMask); + (assoc1.isBarrelSelected_raw() & fPrefilterMask); uint32_t track2Candidate = - (assoc2.isBarrelSelected_raw() & fPrefilterMask); + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); @@ -1902,15 +1935,15 @@ struct AnalysisPrefilterSelection { } void processBarrelSkimmed( - MyEventsBasic const &events, - o2::soa::Join const - &assocs, - MyBarrelTracks const &tracks) { + MyEventsBasic const& events, + o2::soa::Join const& assocs, + MyBarrelTracks const& tracks) + { fPrefilterMap.clear(); - for (auto const &event : events) { + for (auto const& event : events) { auto groupedAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(groupedAssocs, tracks); } @@ -1924,7 +1957,7 @@ struct AnalysisPrefilterSelection { prefilter(mymap); } } else { - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { // TODO: just use the index from the assoc (no need to cast the whole // track) auto track = assoc.template reducedtrack_as(); @@ -1942,7 +1975,8 @@ struct AnalysisPrefilterSelection { } } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -1975,9 +2009,9 @@ struct AnalysisSameEventPairing { o2::framework::Produces dileptonEventInfoList; o2::framework::Produces dileptonMiniTree; - o2::base::MatLayerCylSet *fLUT = nullptr; - TH1D *ResoFlowSP = nullptr; - TH1D *ResoFlowEP = nullptr; + o2::base::MatLayerCylSet* fLUT = nullptr; + TH1D* ResoFlowSP = nullptr; + TH1D* ResoFlowEP = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -1985,154 +2019,154 @@ struct AnalysisSameEventPairing { struct : o2::framework::ConfigurableGroup { o2::framework::Configurable track{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; o2::framework::Configurable muon{ - "cfgMuonCuts", "", "Comma separated list of muon cuts"}; + "cfgMuonCuts", "", "Comma separated list of muon cuts"}; o2::framework::Configurable pair{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; o2::framework::Configurable qVector{ - "cfgQvectorTrackCut", "", - "Track cut of Q-vector, enable this if you want to remove the " - "auto-correlation in TPC"}; + "cfgQvectorTrackCut", "", + "Track cut of Q-vector, enable this if you want to remove the " + "auto-correlation in TPC"}; o2::framework::Configurable event{ - "cfgRemoveCollSplittingCandidates", false, - "If true, remove collision splitting candidates as determined by the " - "event selection task upstream"}; + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; // TODO: Add pair cuts via JSON } fConfigCuts; o2::framework::Configurable fConfigMixingDepth{ - "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; o2::framework::Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; o2::framework::Configurable fConfigMixingVariablesJson{ - "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; o2::framework::Configurable fConfigRunMixingAcrossTFs{ - "cfgRunMixingAcrossTFs", false, - "If true, run event mixing using the MixingHandler which accumulates " - "events across multiple TFs"}; + "cfgRunMixingAcrossTFs", false, + "If true, run event mixing using the MixingHandler which accumulates " + "events across multiple TFs"}; // o2::framework::Configurable // fConfigAddEventMixingHistogram{"cfgAddEventMixingHistogram", "", "Comma // separated list of histograms"}; o2::framework::Configurable fConfigAddSEPHistogram{ - "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigQA{ - "cfgQA", true, "If true, fill output histograms"}; + "cfgQA", true, "If true, fill output histograms"}; o2::framework::Configurable fConfigAmbiguousMuonHistograms{ - "cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; + "cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; // option for TR pair fill o2::framework::Configurable fConfigTRPairs{ - "cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; + "cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; o2::framework::Configurable fConfigNRotations{ - "cfgNRotations", 3, - "Number of rotations for event plane preserving track rotation method, " - "only 1 or 3 are supported"}; + "cfgNRotations", 3, + "Number of rotations for event plane preserving track rotation method, " + "only 1 or 3 are supported"}; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable url{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable grpMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable lutPath{ - "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; o2::framework::Configurable GrpLhcIfPath{ - "grplhcif", "GLO/Config/GRPLHCIF", - "Path on the CCDB for the GRPLHCIF object"}; + "grplhcif", "GLO/Config/GRPLHCIF", + "Path on the CCDB for the GRPLHCIF object"}; o2::framework::Configurable efficiencyPath{ - "effHistPath", "Users/z/zhxiong/efficiency", - "Path on the CCDB for the efficiency histograms"}; + "effHistPath", "Users/z/zhxiong/efficiency", + "Path on the CCDB for the efficiency histograms"}; o2::framework::Configurable flowPath{ - "flowPath", "Users/y/yiping/FlowResolution", - "Path to the flow resolution object"}; + "flowPath", "Users/y/yiping/FlowResolution", + "Path to the flow resolution object"}; o2::framework::Configurable phiPath{ - "phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", - "Path to load phi distribution for track rotation"}; + "phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", + "Path to load phi distribution for track rotation"}; } fConfigCCDB; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable flatTables{ - "cfgFlatTables", false, - "Produce a single flat tables with all relevant information of the " - "pairs and single tracks"}; + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; o2::framework::Configurable polarTables{ - "cfgPolarTables", false, - "Produce tables with dilepton polarization information"}; + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; o2::framework::Configurable useKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is " - "used by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; o2::framework::Configurable useAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; o2::framework::Configurable noCorr{ - "cfgNoCorrFwdProp", false, - "Do not correct for MCS effects in track propagation"}; + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; o2::framework::Configurable collisionSystem{ - "syst", "pp", "Collision system, pp or PbPb"}; + "syst", "pp", "Collision system, pp or PbPb"}; o2::framework::Configurable centerMassEnergy{ - "energy", 13600, "Center of mass energy in GeV"}; + "energy", 13600, "Center of mass energy in GeV"}; o2::framework::Configurable propTrack{ - "cfgPropTrack", true, - "Propgate tracks to associated collision to recalculate DCA and " - "momentum vector"}; + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and " + "momentum vector"}; o2::framework::Configurable useRemoteCollisionInfo{ - "cfgUseRemoteCollisionInfo", false, - "Use remote collision information from CCDB"}; + "cfgUseRemoteCollisionInfo", false, + "Use remote collision information from CCDB"}; o2::framework::Configurable useEfficiencyWeighting{ - "cfgUseEfficiencyWeighting", false, - "Apply efficiency weighting to the pairs from CCDB"}; + "cfgUseEfficiencyWeighting", false, + "Apply efficiency weighting to the pairs from CCDB"}; o2::framework::Configurable efficiencyType{ - "cfgEfficiencyType", 0, - "Type of efficiency to apply from CCDB: 0 no efficiency, 1 " - "pt-cent-costhetastar"}; + "cfgEfficiencyType", 0, + "Type of efficiency to apply from CCDB: 0 no efficiency, 1 " + "pt-cent-costhetastar"}; o2::framework::Configurable useFlowReso{ - "cfgUseFlowReso", false, "Use remote flow information from CCDB"}; + "cfgUseFlowReso", false, "Use remote flow information from CCDB"}; o2::framework::Configurable usePhiDistribution{ - "cfgUsePhiDistribution", false, - "Use phi distribution to correct track rotation"}; + "cfgUsePhiDistribution", false, + "Use phi distribution to correct track rotation"}; } fConfigOptions; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable applyBDT{"applyBDT", false, "Flag to apply ML selections"}; o2::framework::Configurable fConfigBdtCutsJSON{ - "fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; + "fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; o2::framework::Configurable> modelPathsCCDB{ - "modelPathsCCDB", - std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, - "Paths of models on CCDB"}; + "modelPathsCCDB", + std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, + "Paths of models on CCDB"}; o2::framework::Configurable timestampCCDB{ - "timestampCCDB", -1, - "timestamp of the ONNX file for ML model used to query in CCDB"}; + "timestampCCDB", -1, + "timestamp of the ONNX file for ML model used to query in CCDB"}; o2::framework::Configurable loadModelsFromCCDB{ - "loadModelsFromCCDB", false, - "Flag to enable or disable the loading of models from CCDB"}; + "loadModelsFromCCDB", false, + "Flag to enable or disable the loading of models from CCDB"}; } fConfigML; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable fConfigMiniTree{ - "useMiniTree.cfgMiniTree", false, - "Produce a single flat table with minimal information for analysis"}; + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; o2::framework::Configurable fConfigMiniTreeMinMass{ - "useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; + "useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; o2::framework::Configurable fConfigMiniTreeMaxMass{ - "useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; + "useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; } useMiniTree; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; o2::framework::expressions::Filter - filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); - HistogramManager *fHistMan = nullptr; + HistogramManager* fHistMan = nullptr; MixingHandler fMixingHandler; o2::analysis::DQMlResponse fDQMlResponse; @@ -2149,14 +2183,14 @@ struct AnalysisSameEventPairing { std::map, uint32_t> fAmbiguousPairs; uint32_t fTrackFilterMask = - 0; // mask for the track cuts required in this task to be applied on the - // barrel cuts produced upstream + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream uint32_t fMuonFilterMask = - 0; // mask for the muon cuts required in this task to be applied on the - // muon cuts produced upstream + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream uint32_t fQvectorFilterMask = - 0; // mask for the track cuts applied in TPC Q-vector calculation, used to - // remove auto-correlation in flow analysis + 0; // mask for the track cuts applied in TPC Q-vector calculation, used to + // remove auto-correlation in flow analysis int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -2172,47 +2206,48 @@ struct AnalysisSameEventPairing { o2::framework::NoBinningPolicy hashBin; o2::framework::Preslice< - o2::soa::Join> - trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice< - o2::soa::Join> - muonAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + muonAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { fEnableBarrelHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processBarrelOnlySkimmed") || - context.mOptions.get("processBarrelOnlyWithCollSkimmed") || - context.mOptions.get("processBarrelOnlySkimmedNoCov") || - context.mOptions.get( - "processBarrelOnlySkimmedNoCovWithMultExtra") || - context.mOptions.get( - "processBarrelOnlyWithQvectorCentrSkimmedNoCov") || - context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed") || + context.mOptions.get("processBarrelOnlySkimmedNoCov") || + context.mOptions.get( + "processBarrelOnlySkimmedNoCovWithMultExtra") || + context.mOptions.get( + "processBarrelOnlyWithQvectorCentrSkimmedNoCov") || + context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); fEnableBarrelMixingHistos = - context.mOptions.get("processMixingAllSkimmed") || - context.mOptions.get("processMixingBarrelSkimmed") || - context.mOptions.get("processMixingBarrelSkimmedFlow") || - context.mOptions.get( - "processMixingBarrelWithQvectorCentrSkimmedNoCov"); + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingBarrelSkimmed") || + context.mOptions.get("processMixingBarrelSkimmedFlow") || + context.mOptions.get( + "processMixingBarrelWithQvectorCentrSkimmedNoCov"); fEnableBarrelMixingHistos |= fConfigRunMixingAcrossTFs; fEnableMuonHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processMuonOnlySkimmed") || - context.mOptions.get("processMuonOnlySkimmedMultExtra") || - context.mOptions.get("processMuonOnlySkimmedFlow") || - context.mOptions.get("processMuonOnlyVertexingSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlySkimmedMultExtra") || + context.mOptions.get("processMuonOnlySkimmedFlow") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableMuonMixingHistos = - context.mOptions.get("processMixingAllSkimmed") || - context.mOptions.get("processMixingMuonSkimmed") || - context.mOptions.get("processMixingMuonSkimmedFlow"); + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingMuonSkimmed") || + context.mOptions.get("processMixingMuonSkimmedFlow"); fEnableBarrelMuonHistos = - context.mOptions.get("processElectronMuonSkimmed"); + context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = - context.mOptions.get("processMixingElectronMuonSkimmed"); + context.mOptions.get("processMixingElectronMuonSkimmed"); if (context.mOptions.get("processDummy")) { if (fEnableBarrelHistos || fEnableBarrelMixingHistos || @@ -2249,7 +2284,7 @@ struct AnalysisSameEventPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - *o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + *o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } @@ -2258,12 +2293,12 @@ struct AnalysisSameEventPairing { // and make a mask for active cuts (barrel and muon selection tasks may // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray *objArrayTrackCuts = nullptr; + TObjArray* objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray *objArrayMuonCuts = nullptr; + TObjArray* objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -2279,11 +2314,11 @@ struct AnalysisSameEventPairing { std::vector onnxFileNames; auto config = o2::aod::dqmlcuts::GetBdtScoreCutsAndConfigFromJSON( - fConfigML.fConfigBdtCutsJSON.value.c_str()); + fConfigML.fConfigBdtCutsJSON.value.c_str()); if (std::holds_alternative( - config)) { - auto &cfg = std::get(config); + config)) { + auto& cfg = std::get(config); binsMl = cfg.binsMl; nClassesMl = 1; cutsMl = cfg.cutsMl; @@ -2295,8 +2330,8 @@ struct AnalysisSameEventPairing { fDQMlResponse.setCentType(cfg.centType); LOG(info) << "Using BDT cuts for binary classification"; } else { - auto &cfg = - std::get(config); + auto& cfg = + std::get(config); binsMl = cfg.binsMl; nClassesMl = 3; cutsMl = cfg.cutsMl; @@ -2325,17 +2360,17 @@ struct AnalysisSameEventPairing { // get the barrel track selection cuts std::string tempCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, - false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2368,45 +2403,45 @@ struct AnalysisSameEventPairing { names[5].Data()); if (fConfigTRPairs) { names.push_back( - Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); names.push_back(Form("PairsBarrelTRPM_ambiguousextra_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); histNames += Form("%s;%s;%s;", names[6].Data(), names[7].Data(), names[8].Data()); } if (fEnableBarrelMixingHistos) { names.push_back( - Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); histNames += - Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), - names[(fConfigTRPairs ? 10 : 7)].Data(), - names[(fConfigTRPairs ? 11 : 8)].Data()); + Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), + names[(fConfigTRPairs ? 10 : 7)].Data(), + names[(fConfigTRPairs ? 11 : 8)].Data()); } fTrackHistNames[icut] = names; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) } // end if enableBarrelHistos @@ -2416,16 +2451,16 @@ struct AnalysisSameEventPairing { // get the muon track selection cuts o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); + context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); + context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = - o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const &t : addMuonCuts) { + std::vector addMuonCuts = + o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const& t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2448,11 +2483,11 @@ struct AnalysisSameEventPairing { names[2].Data()); if (fEnableMuonMixingHistos) { names.push_back( - Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); } @@ -2476,17 +2511,17 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsMuonSEMM_unambiguous_%s", objArray->At(icut)->GetName())); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), - names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), - names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), + names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), + names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), - names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), - names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), + names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), + names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), - names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), - names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), + names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), + names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); if (fEnableMuonMixingHistos) { names.push_back(Form("PairsMuonMEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); @@ -2518,21 +2553,21 @@ struct AnalysisSameEventPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) } @@ -2579,7 +2614,7 @@ struct AnalysisSameEventPairing { VarManager::SetupFwdDCAFitterNoCorr(); } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigCCDB.lutPath)); + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } @@ -2657,42 +2692,43 @@ struct AnalysisSameEventPairing { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); VarManager::SetCollisionSystem( - (TString)fConfigOptions.collisionSystem, - fConfigOptions.centerMassEnergy); // set collision system and center - // of mass energy + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center + // of mass energy DefineHistograms( - fHistMan, histNames.Data(), - fConfigAddSEPHistogram.value.data()); // define all histograms + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms if (fEnableBarrelHistos) { DefineHistograms( - fHistMan, "PairingSEQA", - "sameevent-pairing"); // histograms for QA of the pairing + fHistMan, "PairingSEQA", + "sameevent-pairing"); // histograms for QA of the pairing } if (fEnableBarrelMixingHistos) { DefineHistograms( - fHistMan, "PairingMEQA", - "mixedevent-pairing"); // histograms for QA of the pairing + fHistMan, "PairingMEQA", + "mixedevent-pairing"); // histograms for QA of the pairing } o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } } void initParamsFromCCDB(uint64_t timestamp, int runNumber, - bool withTwoProngFitter = true) { + bool withTwoProngFitter = true) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigCCDB.grpMagPath, timestamp); + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -2705,37 +2741,37 @@ struct AnalysisSameEventPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // needed because take in varmanager Bz from - // fgFitterTwoProngBarrel for PhiV calculations + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); if (fConfigOptions.useRemoteCollisionInfo) { auto grpo = fCCDB->getForTimeStamp( - fConfigCCDB.GrpLhcIfPath, timestamp); + fConfigCCDB.GrpLhcIfPath, timestamp); VarManager::SetCollisionSystem(grpo); } if (fConfigOptions.useEfficiencyWeighting) { auto effList = fCCDB->getForTimeStamp( - fConfigCCDB.efficiencyPath.value, timestamp); + fConfigCCDB.efficiencyPath.value, timestamp); VarManager::SetEfficiencyObject(fConfigOptions.efficiencyType.value, effList->FindObject("efficiency")); } @@ -2745,9 +2781,9 @@ struct AnalysisSameEventPairing { TString ccdbPathFlowSP = Form("%s/ScalarProduct", PathFlow.Data()); TString ccdbPathFlowEP = Form("%s/EventPlane", PathFlow.Data()); ResoFlowSP = - fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); ResoFlowEP = - fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { LOGF(fatal, "Flow resolution histograms not available in CCDB at " @@ -2761,9 +2797,9 @@ struct AnalysisSameEventPairing { TString ccdbPathPhiPosi = Form("%s/hPtPhiPositive", PathPhi.Data()); TString ccdbPathPhiNega = Form("%s/hPtPhiNegative", PathPhi.Data()); auto phiPosi = - fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); auto phiNega = - fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); if (phiPosi == nullptr || phiNega == nullptr) { LOGF(fatal, "Phi distribution histograms not available in CCDB at " @@ -2780,10 +2816,11 @@ struct AnalysisSameEventPairing { template - void runSameEventPairing(TEvents const &events, - o2::framework::Preslice &preslice, - TTrackAssocs const &assocs, - TTracks const & /*tracks*/) { + void runSameEventPairing(TEvents const& events, + o2::framework::Preslice& preslice, + TTrackAssocs const& assocs, + TTracks const& /*tracks*/) + { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -2821,7 +2858,7 @@ struct AnalysisSameEventPairing { auto twoTrackFilter = static_cast(0); auto dileptonMcDecision = static_cast( - 0); // placeholder, copy of the dqEfficiency.cxx one + 0); // placeholder, copy of the dqEfficiency.cxx one int sign1 = 0; int sign2 = 0; // Reserve capacity for the output tables to avoid repeated reallocations @@ -2829,11 +2866,11 @@ struct AnalysisSameEventPairing { // only — pages are not faulted in until written. // estimate reserved size int64_t reserveSize = 0; - for (auto const &event : events) { + for (auto const& event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const &t : groupedAssocs) { + for (auto const& t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -2870,17 +2907,17 @@ struct AnalysisSameEventPairing { fAmbiguousPairs.clear(); constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); // constexpr bool fillFlowReso = eventHasQvector || eventHasQvectorCentr; bool isSelectedBDT = false; fNPairPerEvent = 0; - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -2902,25 +2939,26 @@ struct AnalysisSameEventPairing { if (fConfigOptions.useFlowReso) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { - LOGF(fatal, "Flow resolution histograms are not available, cannot " - "fill flow variables!"); + LOGF(fatal, + "Flow resolution histograms are not available, cannot " + "fill flow variables!"); } VarManager::FillEventFlowResoFactor(ResoFlowSP, ResoFlowEP); } int mixingCategory = -1; if (fConfigRunMixingAcrossTFs) { mixingCategory = fMixingHandler.FindEventCategory( - dqtablereader_helpers::varValues()); + dqtablereader_helpers::varValues()); } bool isFirst = true; - for (auto const &[a1, a2] : + for (auto const& [a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue @@ -3000,38 +3038,38 @@ struct AnalysisSameEventPairing { } if (fConfigOptions.polarTables.value) { dileptonPolarList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), - twoTrackFilter, VarManager::fgValues[VarManager::kCosThetaHE], - VarManager::fgValues[VarManager::kPhiHE], - VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], - VarManager::fgValues[VarManager::kPhiCS], - VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], - VarManager::fgValues[VarManager::kPhiPP], - VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], - VarManager::fgValues[VarManager::kCosThetaStarFT0A], - VarManager::fgValues[VarManager::kCosThetaStarFT0C], - VarManager::fgValues[VarManager::kCosThetaStarRandom]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), + twoTrackFilter, VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); dileptonEventInfoList( - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxZ], - VarManager::fgValues[VarManager::kVtxNcontrib], - VarManager::fgValues[VarManager::kRandomPsi2], - VarManager::fgValues[VarManager::kPsi2A], - VarManager::fgValues[VarManager::kPsi2B], - VarManager::fgValues[VarManager::kPsi2C]); + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxZ], + VarManager::fgValues[VarManager::kVtxNcontrib], + VarManager::fgValues[VarManager::kRandomPsi2], + VarManager::fgValues[VarManager::kPsi2A], + VarManager::fgValues[VarManager::kPsi2B], + VarManager::fgValues[VarManager::kPsi2C]); } if constexpr (trackHasCov && TTwoProngFitter) { dielectronsExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0) { @@ -3039,8 +3077,8 @@ struct AnalysisSameEventPairing { fOutputMlPsi2ee.clear(); if (fConfigML.applyBDT) { std::vector dqInputFeatures = - fDQMlResponse.getInputFeatures( - t1, t2, dqtablereader_helpers::varValues()); + fDQMlResponse.getInputFeatures( + t1, t2, dqtablereader_helpers::varValues()); if (dqInputFeatures.empty()) { LOG(fatal) << "Input features for ML selection are empty! " @@ -3049,22 +3087,22 @@ struct AnalysisSameEventPairing { } int modelIndex = -1; - const auto &binsCent = fDQMlResponse.getBinsCent(); - const auto &binsPt = fDQMlResponse.getBinsPt(); - const std::string ¢Type = fDQMlResponse.getCentType(); + const auto& binsCent = fDQMlResponse.getBinsCent(); + const auto& binsPt = fDQMlResponse.getBinsPt(); + const std::string& centType = fDQMlResponse.getCentType(); if ("kCentFT0C" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0A" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0A], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0A], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0M" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else { LOG(fatal) << "Unknown centrality estimation type: " << centType; @@ -3073,8 +3111,8 @@ struct AnalysisSameEventPairing { if (modelIndex < 0) { LOG(debug) - << "Ml index is negative! This means that the " - "centrality/pt is not in the range of the model bins."; + << "Ml index is negative! This means that the " + "centrality/pt is not in the range of the model bins."; continue; } @@ -3083,7 +3121,7 @@ struct AnalysisSameEventPairing { << ", centrality (kCentFT0C): " << VarManager::fgValues[VarManager::kCentFT0C]; isSelectedBDT = fDQMlResponse.isSelectedMl( - dqInputFeatures, modelIndex, fOutputMlPsi2ee); + dqInputFeatures, modelIndex, fOutputMlPsi2ee); VarManager::FillBdtScore(fOutputMlPsi2ee); } @@ -3093,118 +3131,118 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value) { dielectronAllList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, dileptonMcDecision, t1.pt(), t1.eta(), - t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), - t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), - t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), - t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), - t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), - t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), - t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), - t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), - t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), - t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], - VarManager::fgValues[VarManager::kKFTrack1DCAxyz], - VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DCAxy], - VarManager::fgValues[VarManager::kKFTrack1DCAxy], - VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], - VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], - VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], - VarManager::fgValues[VarManager::kVertexingLxyz], - VarManager::fgValues[VarManager::kVertexingLxyzOverErr], - VarManager::fgValues[VarManager::kVertexingLxy], - VarManager::fgValues[VarManager::kVertexingLxyOverErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kKFCosPA], - VarManager::fgValues[VarManager::kKFJpsiDCAxyz], - VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], - VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingTauxyProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, dileptonMcDecision, t1.pt(), t1.eta(), + t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), + t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), + t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), + t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), + t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), + t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), + t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), + t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), + t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); dielectronMlList( - VarManager::fgValues[VarManager::kCentFT0C], - (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) - ? VarManager::fgValues[VarManager::kBdtBackground] - : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) - ? VarManager::fgValues[VarManager::kBdtPrompt] - : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) - ? VarManager::fgValues[VarManager::kBdtNonprompt] - : -999.f); + VarManager::fgValues[VarManager::kCentFT0C], + (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) + ? VarManager::fgValues[VarManager::kBdtBackground] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) + ? VarManager::fgValues[VarManager::kBdtPrompt] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) + ? VarManager::fgValues[VarManager::kBdtNonprompt] + : -999.f); } constexpr bool eventHasVtxCovForTable = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > - 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > + 0); if constexpr (trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { const bool ambiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); const bool ambiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); // 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) { PromptNonPromptSepTable( - twoTrackFilter, dileptonMcDecision, - 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::kDCAxyOverSig1], - VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], - t1.itsChi2NCl(), t2.pt(), t2.eta(), - VarManager::fgValues[VarManager::kDCAxy2], - VarManager::fgValues[VarManager::kDCAz2], - VarManager::fgValues[VarManager::kDCAxyOverSig2], - VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], - t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + twoTrackFilter, dileptonMcDecision, + 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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + VarManager::fgValues[VarManager::kITSclusterMap2], + t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxNcontribReal]); } } } @@ -3281,80 +3319,80 @@ struct AnalysisSameEventPairing { VarManager::fgValues[VarManager::kVertexingLxy]); if (fConfigOptions.flatTables.value) { dimuonAllList( - event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, -999., -999., -999., - VarManager::fgValues[VarManager::kMass], false, + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), 0., 0., + t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), + t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), t1.chi2(), + t2.chi2(), -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); + } + + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + if constexpr (eventHasQvector || eventHasQvectorCentr) { + dileptonFlowList( + event.collisionId(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kCentFT0C], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], - VarManager::fgValues[VarManager::kEta1], - VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], - VarManager::fgValues[VarManager::kEta2], - VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), 0., 0., - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), t1.chi2(), - t2.chi2(), -999., -999., -999., -999., -999., -999., -999., - -999., -999., -999., -999., -999., -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - true, true, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], + isFirst, VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kR2SP_AC], + VarManager::fgValues[VarManager::kR2SP_BC], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR3SP], VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2EP_AC], + VarManager::fgValues[VarManager::kR2EP_BC], VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kR3EP], VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kCORR2REF], + VarManager::fgValues[VarManager::kCORR4REF], + VarManager::fgValues[VarManager::kM11REF], + VarManager::fgValues[VarManager::kM1111REF], VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); - } - - if constexpr ((TTrackFillMap & - VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { - if constexpr (eventHasQvector || eventHasQvectorCentr) { - dileptonFlowList( - event.collisionId(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - isFirst, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kR2SP_AC], - VarManager::fgValues[VarManager::kR2SP_BC], - VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR3SP], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - VarManager::fgValues[VarManager::kR2EP_AB], - VarManager::fgValues[VarManager::kR2EP_AC], - VarManager::fgValues[VarManager::kR2EP_BC], - VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kR3EP], - VarManager::fgValues[VarManager::kCORR2POI], - VarManager::fgValues[VarManager::kCORR4POI], - VarManager::fgValues[VarManager::kM01POI], - VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kCORR2REF], - VarManager::fgValues[VarManager::kCORR4REF], - VarManager::fgValues[VarManager::kM11REF], - VarManager::fgValues[VarManager::kM1111REF], - VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kMultA]); + VarManager::fgValues[VarManager::kMultA]); } } if (t1.sign() != t2.sign()) { @@ -3384,11 +3422,11 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); isLeg1Ambi = (twoTrackFilter & (static_cast(1) << 28) || (twoTrackFilter & (static_cast(1) << 30))); @@ -3430,40 +3468,40 @@ struct AnalysisSameEventPairing { // first if (t1.sign() > 0) { dileptonMiniTree( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), - t2.phi()); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), + t2.phi()); } else { dileptonMiniTree( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), - t1.phi()); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), + t1.phi()); } } } if (fConfigQA && fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3485,18 +3523,18 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3515,18 +3553,18 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3545,23 +3583,23 @@ struct AnalysisSameEventPairing { iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); if (!(cut.IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair - // cuts + dqtablereader_helpers::varValues()))) { // apply pair + // cuts continue; } if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][0].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][0].Data(), + dqtablereader_helpers::varValues()); } else { if (sign1 > 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][1].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][1].Data(), + dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][2].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][2].Data(), + dqtablereader_helpers::varValues()); } } } // end loop (pair cuts) @@ -3574,9 +3612,9 @@ struct AnalysisSameEventPairing { if (fConfigTRPairs) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter // bit in common to continue @@ -3603,18 +3641,18 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); isLeg1Ambi = - (twoTrackFilter & (static_cast(1) << 28) || - (twoTrackFilter & (static_cast(1) << 30))); + (twoTrackFilter & (static_cast(1) << 28) || + (twoTrackFilter & (static_cast(1) << 30))); isLeg2Ambi = - (twoTrackFilter & (static_cast(1) << 29) || - (twoTrackFilter & (static_cast(1) << 31))); + (twoTrackFilter & (static_cast(1) << 29) || + (twoTrackFilter & (static_cast(1) << 31))); if constexpr (TPairType == VarManager::kDecayToEE) { if (isLeg1Ambi && isLeg2Ambi) { std::pair iPair(a1.reducedtrackId(), @@ -3637,17 +3675,17 @@ struct AnalysisSameEventPairing { if (sign1 * sign2 < 0) { if (fConfigNRotations.value == 1) { VarManager::FillPairRotation( - t1, t2, fConfigNRotations.value); + t1, t2, fConfigNRotations.value); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_ambiguousextra_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3655,18 +3693,18 @@ struct AnalysisSameEventPairing { for (int irot = 1; irot <= fConfigNRotations.value; irot++) { VarManager::FillPairRotation( - t1, t2, irot); + t1, t2, irot); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_ambiguousextra_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3698,7 +3736,7 @@ struct AnalysisSameEventPairing { // 1) create a MixingEvent and fill it with the relevant tracks MixingHandler::MixingEvent mixingEvent; uint32_t trackFilterForMixing = 0; - for (auto const &assoc : groupedAssocs) { + for (auto const& assoc : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { trackFilterForMixing = assoc.isBarrelSelected_raw() & assoc.isBarrelSelectedPrefilter_raw() & @@ -3721,14 +3759,14 @@ struct AnalysisSameEventPairing { } // 2) run the mixing with the events in the pool corresponding to this // event - auto &pool = fMixingHandler.GetPool(mixingCategory); - for (auto const &poolEvent : pool.GetEvents()) { - for (auto const &t1 : mixingEvent.tracks1) { + auto& pool = fMixingHandler.GetPool(mixingCategory); + for (auto const& poolEvent : pool.GetEvents()) { + for (auto const& t1 : mixingEvent.tracks1) { // run +- pairing - for (auto const &t2 : poolEvent.tracks2) { + for (auto const& t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3737,8 +3775,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3757,19 +3795,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("PairsBarrelTR_MEPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run ++ pairing - for (auto const &t2 : poolEvent.tracks1) { + for (auto const& t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3778,19 +3816,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } - for (auto const &t1 : mixingEvent.tracks2) { + for (auto const& t1 : mixingEvent.tracks2) { // run -+ pairing - for (auto const &t2 : poolEvent.tracks1) { + for (auto const& t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3799,8 +3837,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3818,19 +3856,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("PairsBarrelTR_MEPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run -- pairing - for (auto const &t2 : poolEvent.tracks2) { + for (auto const& t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3839,8 +3877,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3857,20 +3895,21 @@ struct AnalysisSameEventPairing { template - void runMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, - TTracks1 const & /*tracks1*/, - TTracks2 const & /*tracks2*/) { + void runMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, + TTracks1 const& /*tracks1*/, + TTracks2 const& /*tracks2*/) + { std::map> histNames = fTrackHistNames; int pairSign = 0; int ncuts = 0; auto twoTrackFilter = static_cast(0); - for (auto const &a1 : assocs1) { - for (auto const &a2 : assocs2) { + for (auto const& a1 : assocs1) { + for (auto const& a2 : assocs2) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue continue; @@ -3936,42 +3975,42 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value) { dimuonAllList( - -999., -999., -999., -999., 0, 0, -999., -999., -999., - VarManager::fgValues[VarManager::kMass], false, - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], t1.pt(), - t1.eta(), t1.phi(), t1.sign(), t2.pt(), t2.eta(), t2.phi(), - t2.sign(), t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), - t2.fwdDcaY(), 0., 0., t1.chi2MatchMCHMID(), - t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), - t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), -999., -999., -999., - -999., -999., -999., -999., -999., -999., -999., -999., -999., - -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - true, true, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], - VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], - VarManager::fgValues[VarManager::kCORR4POI], - VarManager::fgValues[VarManager::kM01POI], - VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); + -999., -999., -999., -999., 0, 0, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], t1.pt(), + t1.eta(), t1.phi(), t1.sign(), t2.pt(), t2.eta(), t2.phi(), + t2.sign(), t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), + t2.fwdDcaY(), 0., 0., t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } /*if constexpr (TPairType == VarManager::kElectronMuon) { @@ -3990,13 +4029,13 @@ struct AnalysisSameEventPairing { isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = - !((twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)) || - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31))); + !((twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)) || + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31))); if (fConfigQA) { if (pairSign == 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { @@ -4019,8 +4058,8 @@ struct AnalysisSameEventPairing { } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if (pairSign > 0) { @@ -4030,25 +4069,25 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][16].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][16].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][19].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][19].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][22].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][22].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if constexpr (TPairType == VarManager::kDecayToMuMu) { @@ -4057,25 +4096,25 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][17].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][17].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][20].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][20].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][23].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][23].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -4088,9 +4127,10 @@ struct AnalysisSameEventPairing { // barrel-barrel and muon-muon event mixing template - void runSameSideMixing(TEvents &events, TAssocs const &assocs, - TTracks const &tracks, - o2::framework::Preslice &preSlice) { + void runSameSideMixing(TEvents& events, TAssocs const& assocs, + TTracks const& tracks, + o2::framework::Preslice& preSlice) + { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { LOG(info) << "Flow resolution objects not set, flow will not be filled " "for mixed events"; @@ -4102,7 +4142,7 @@ struct AnalysisSameEventPairing { events.bindExternalIndices(&assocs); int mixingDepth = fConfigMixingDepth.value; fAmbiguousPairs.clear(); - for (auto const &[event1, event2] : + for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4134,13 +4174,14 @@ struct AnalysisSameEventPairing { uint32_t TTrackFillMap, uint32_t TMuonFillMap, typename TEvents, typename TTrackAssocs, typename TTracks, typename TMuonAssocs, typename TMuons> - void runEmuSameEventPairing(TEvents const &events, - o2::framework::Preslice &preslice1, - TTrackAssocs const &assocs1, - TTracks const & /*tracks1*/, - o2::framework::Preslice &preslice2, - TMuonAssocs const &assocs2, - TMuons const & /*tracks2*/) { + void runEmuSameEventPairing(TEvents const& events, + o2::framework::Preslice& preslice1, + TTrackAssocs const& assocs1, + TTracks const& /*tracks1*/, + o2::framework::Preslice& preslice2, + TMuonAssocs const& assocs2, + TMuons const& /*tracks2*/) + { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), @@ -4149,7 +4190,7 @@ struct AnalysisSameEventPairing { } } - const auto &histNames = fTrackMuonHistNames; + const auto& histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; electronmuonList.reserve(assocs1.size()); @@ -4159,11 +4200,11 @@ struct AnalysisSameEventPairing { int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4185,9 +4226,9 @@ struct AnalysisSameEventPairing { } // Custom combination policy - for (auto const &[a1, a2] : + for (auto const& [a1, a2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy( - groupedAssocs1, groupedAssocs2))) { + groupedAssocs1, groupedAssocs2))) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; @@ -4293,24 +4334,25 @@ struct AnalysisSameEventPairing { template - void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, - TTracks1 const & /*tracks1*/, - TTracks2 const & /*tracks2*/) { - const auto &histNames = fTrackMuonHistNames; + void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, + TTracks1 const& /*tracks1*/, + TTracks2 const& /*tracks2*/) + { + const auto& histNames = fTrackMuonHistNames; int sign1 = 0; int sign2 = 0; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const &a1 : assocs1) { + for (auto const& a1 : assocs1) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; } - for (auto const &a2 : assocs2) { + for (auto const& a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -4375,15 +4417,16 @@ struct AnalysisSameEventPairing { template - void runEmuSameSideMixing(TEvents &events, - o2::framework::Preslice &preslice1, - TTrackAssocs const &assocs1, TTracks const &tracks1, - o2::framework::Preslice &preslice2, - TMuonAssocs const &assocs2, TMuons const &tracks2) { + void runEmuSameSideMixing(TEvents& events, + o2::framework::Preslice& preslice1, + TTrackAssocs const& assocs1, TTracks const& tracks1, + o2::framework::Preslice& preslice2, + TMuonAssocs const& assocs2, TMuons const& tracks2) + { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const &[event1, event2] : + for (auto const& [event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4407,13 +4450,13 @@ struct AnalysisSameEventPairing { } void processAllSkimmed( - MyEventsVtxCovSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsVtxCovSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); @@ -4425,100 +4468,107 @@ struct AnalysisSameEventPairing { } void processBarrelOnlySkimmed( - MyEventsVtxCovSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedFlow( - MyEventsVtxCovSelectedQvector const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithAmbiguities const &barrelTracks) { + MyEventsVtxCovSelectedQvector const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithAmbiguities const& barrelTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedNoCov( - MyEventsSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithAmbiguities const &barrelTracks) { + MyEventsSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithAmbiguities const& barrelTracks) + { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedNoCovWithMultExtra( - MyEventsMultExtraSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithAmbiguities const &barrelTracks) { + MyEventsMultExtraSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithAmbiguities const& barrelTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithCollSkimmed( - MyEventsVtxCovSelectedInfo const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks) { + MyEventsVtxCovSelectedInfo const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithQvectorCentrSkimmedNoCov( - MyEventsQvectorCentrSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithAmbiguities const &barrelTracks) { + MyEventsQvectorCentrSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithAmbiguities const& barrelTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithQvectorCentrSkimmed( - MyEventsQvectorCentrSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsQvectorCentrSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processMuonOnlySkimmed( - MyEventsVtxCovSelected const &events, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsVtxCovSelected const& events, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedMultExtra( - MyEventsVtxCovSelectedMultExtra const &events, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsVtxCovSelectedMultExtra const& events, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons); + events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedFlow( - MyEventsQvectorCentrSelected const &events, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsQvectorCentrSelected const& events, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameEventPairing(events, muonAssocsPerCollision, @@ -4526,39 +4576,38 @@ struct AnalysisSameEventPairing { } void processMuonOnlyVertexingSkimmed( - MyEventsVtxCovSelected const &events, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsVtxCovSelected const& events, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processElectronMuonSkimmed( - MyEventsVtxCovSelected const &events, - o2::soa::Join const &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + MyEventsVtxCovSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runEmuSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } void processMixingAllSkimmed( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const &trackAssocs, - MyBarrelTracksWithCov const &tracks, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& trackAssocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); runSameSideMixing(events, muonAssocs, muons, @@ -4566,70 +4615,68 @@ struct AnalysisSameEventPairing { } void processMixingBarrelSkimmed( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const &trackAssocs, - o2::aod::ReducedTracks const &tracks) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& trackAssocs, + o2::aod::ReducedTracks const& tracks) + { runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingBarrelSkimmedFlow( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const &trackAssocs, - o2::aod::ReducedTracks const &tracks) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& trackAssocs, + o2::aod::ReducedTracks const& tracks) + { runSameSideMixing( - events, trackAssocs, tracks, trackAssocsPerCollision); + events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingBarrelWithQvectorCentrSkimmedNoCov( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const &trackAssocs, - MyBarrelTracksWithAmbiguities const &tracks) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& trackAssocs, + MyBarrelTracksWithAmbiguities const& tracks) + { runSameSideMixing( - events, trackAssocs, tracks, trackAssocsPerCollision); + events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingMuonSkimmed( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameSideMixing(events, muonAssocs, muons, muonAssocsPerCollision); } void processMixingMuonSkimmedFlow( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runSameSideMixing( - events, muonAssocs, muons, muonAssocsPerCollision); + events, muonAssocs, muons, muonAssocsPerCollision); } void processMixingElectronMuonSkimmed( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const &barrelAssocs, - o2::aod::ReducedTracks const &barrelTracks, - o2::soa::Join const - &muonAssocs, - MyMuonTracksWithCovWithAmbiguities const &muons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const& barrelAssocs, + o2::aod::ReducedTracks const& barrelTracks, + o2::soa::Join const& muonAssocs, + MyMuonTracksWithCovWithAmbiguities const& muons) + { runEmuSameSideMixing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -4656,10 +4703,10 @@ struct AnalysisSameEventPairing { "tracks, with Qvector from central framework", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, - "Run barrel only pairing (no covariances), with skimmed tracks, with " - "collision information, with Qvector from central framework", - false); + AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, + "Run barrel only pairing (no covariances), with skimmed tracks, with " + "collision information, with Qvector from central framework", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedFlow, "Run barrel only pairing, with skimmed tracks and with flow", false); @@ -4670,9 +4717,9 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedFlow, "Run muon only pairing, with skimmed tracks and flow", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, - "Run muon only pairing with two-prong vertexing, with skimmed tracks", - false); + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingAllSkimmed, @@ -4681,8 +4728,8 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmed, "Run barrel type mixing pairing, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, - "Run barrel type mixing pairing, with flow, with skimmed tracks", false); + AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, + "Run barrel type mixing pairing, with flow, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelWithQvectorCentrSkimmedNoCov, "Run barrel type mixing pairing, with skimmed tracks and with " @@ -4697,8 +4744,8 @@ struct AnalysisSameEventPairing { "Run electron-muon mixing pairing, with skimmed tracks/muons", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Run pairing for resonance with legs fulfilling separate cuts (asymmetric @@ -4708,7 +4755,7 @@ struct AnalysisAsymmetricPairing { o2::framework::Produces ditrackList; o2::framework::Produces ditrackExtraList; - o2::base::MatLayerCylSet *fLUT = nullptr; + o2::base::MatLayerCylSet* fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -4717,82 +4764,82 @@ struct AnalysisAsymmetricPairing { // Configurables o2::framework::Configurable fConfigLegCuts{ - "cfgLegCuts", "", - ":[:],[:[:],...]"}; + "cfgLegCuts", "", + ":[:],[:[:],...]"}; o2::framework::Configurable fConfigLegAFilterMask{ - "cfgLegAFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegAFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigLegBFilterMask{ - "cfgLegBFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegBFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigLegCFilterMask{ - "cfgLegCFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegCFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigCommonTrackCuts{ - "cfgCommonTrackCuts", "", - "Comma separated list of cuts to be applied to all legs"}; + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; o2::framework::Configurable fConfigPairCuts{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; o2::framework::Configurable fConfigPairCutsJSON{ - "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; o2::framework::Configurable fConfigRemoveCollSplittingCandidates{ - "cfgRemoveCollSplittingCandidates", false, - "If true, remove collision splitting candidates as determined by the " - "event selection task upstream"}; + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; o2::framework::Configurable fConfigSkipAmbiguousIdCombinations{ - "cfgSkipAmbiguousIdCombinations", true, - "Choose whether to skip pairs/triples which pass a stricter combination " - "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; o2::framework::Configurable fConfigHistogramSubgroups{ - "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", - "Comma separated list of asymmetric-pairing histogram subgroups"}; + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; o2::framework::Configurable fConfigSameSignHistograms{ - "cfgSameSignHistograms", false, - "Include same sign pair histograms for 2-prong decays"}; + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; o2::framework::Configurable fConfigAmbiguousHistograms{ - "cfgAmbiguousHistograms", false, - "Include separate histograms for pairs/triplets with ambiguous tracks"}; + "cfgAmbiguousHistograms", false, + "Include separate histograms for pairs/triplets with ambiguous tracks"}; o2::framework::Configurable fConfigReflectedHistograms{ - "cfgReflectedHistograms", false, - "Include separate histograms for pairs which are reflections of " - "previously counted pairs"}; + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigGRPMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigUseAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; o2::framework::Configurable fConfigLutPath{ - "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; o2::framework::Configurable fConfigFetchInteractionRate{ - "cfgFetchInteractionRate", false, - "Fetch event-wise interaction rate from the CCDB"}; + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; o2::framework::Configurable fConfigIRSource{ - "cfgIRSource", "ZNC hadronic", - "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " - "ZNC hadronic)"}; + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; o2::framework::Service fCCDB{}; o2::ctpRateFetcher rateFetcher; - HistogramManager *fHistMan = nullptr; + HistogramManager* fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; // o2::framework::expressions::Filter masks to find legs in BarrelTrackCuts @@ -4819,28 +4866,29 @@ struct AnalysisAsymmetricPairing { std::vector fCommonCutNames; o2::framework::Preslice< - o2::soa::Join> - trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs o2::framework::Partition< - o2::soa::Join> - legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegAFilterMask) > static_cast(0); + o2::soa::Join> + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); o2::framework::Partition< - o2::soa::Join> - legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegBFilterMask) > static_cast(0); + o2::soa::Join> + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); o2::framework::Partition< - o2::soa::Join> - legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegCFilterMask) > static_cast(0); + o2::soa::Join> + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { if (context.mOptions.get("processDummy")) { return; } @@ -4861,16 +4909,16 @@ struct AnalysisAsymmetricPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = - o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const &t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const& t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -4882,17 +4930,17 @@ struct AnalysisAsymmetricPairing { // Get the barrel track selection cuts std::string tempCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, - false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const& t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -4909,8 +4957,8 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); fCommonTrackCutFilterMasks[icut] = - static_cast(1) - << objArray->IndexOf(objArrayCommon->At(icut)); + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { LOGF(fatal, @@ -5017,8 +5065,8 @@ struct AnalysisAsymmetricPairing { fConfigHistogramSubgroups.value.data()); if (fConfigAmbiguousHistograms.value) { DefineHistograms( - fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); @@ -5058,9 +5106,9 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigAmbiguousHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5099,10 +5147,10 @@ struct AnalysisAsymmetricPairing { ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5142,10 +5190,11 @@ struct AnalysisAsymmetricPairing { } // Make sure only pairs or only triplets of leg cuts were given int tripletCheckSum = - std::count(isThreeProng.begin(), isThreeProng.end(), true); + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " - "your config!"); + LOGF(fatal, + "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -5155,21 +5204,22 @@ struct AnalysisAsymmetricPairing { fCCDB->setLocalObjectValidityChecking(); fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigLutPath)); + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPMagPath, timestamp); + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -5190,9 +5240,9 @@ struct AnalysisAsymmetricPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigUseAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } @@ -5202,10 +5252,11 @@ struct AnalysisAsymmetricPairing { template - void runAsymmetricPairing(TEvents const &events, - o2::framework::Preslice &preslice, - TTrackAssocs const & /*assocs*/, - TTracks const & /*tracks*/) { + void runAsymmetricPairing(TEvents const& events, + o2::framework::Preslice& preslice, + TTrackAssocs const& /*assocs*/, + TTracks const& /*tracks*/) + { fPairCount.clear(); if (events.size() > 0) { // Additional protection to avoid crashing of @@ -5221,7 +5272,7 @@ struct AnalysisAsymmetricPairing { // Reserve capacity for the output tables int64_t reserveSize = 0; - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5230,9 +5281,9 @@ struct AnalysisAsymmetricPairing { continue; } auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); reserveSize += static_cast(groupedLegAAssocs.size()) * static_cast(groupedLegBAssocs.size()); } @@ -5240,10 +5291,10 @@ struct AnalysisAsymmetricPairing { ditrackExtraList.reserve(reserveSize); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5258,25 +5309,25 @@ struct AnalysisAsymmetricPairing { // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { VarManager::fgValues[VarManager::kInteractionRate] = - rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, - fConfigIRSource.value, true) / - 1000.; // kHz + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const &[a1, a2] : + for (auto const& [a1, a2] : combinations(o2::soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs))) { + groupedLegAAssocs, groupedLegBAssocs))) { auto twoTrackFilter = static_cast(0); auto twoTrackCommonFilter = static_cast(0); @@ -5355,9 +5406,9 @@ struct AnalysisAsymmetricPairing { (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); // reconstructed, - // unmatched + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5371,8 +5422,8 @@ struct AnalysisAsymmetricPairing { } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5385,8 +5436,8 @@ struct AnalysisAsymmetricPairing { } } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5405,20 +5456,20 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -5427,7 +5478,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair cuts + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); @@ -5457,26 +5508,26 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -5485,17 +5536,17 @@ struct AnalysisAsymmetricPairing { } } // end loop (cuts) ditrackList( - event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, pairFilter, twoTrackCommonFilter); + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { ditrackExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop @@ -5505,10 +5556,11 @@ struct AnalysisAsymmetricPairing { template - void runThreeProng(TEvents const &events, - o2::framework::Preslice &preslice, - TTrackAssocs const & /*assocs*/, TTracks const &tracks, - VarManager::PairCandidateType tripletType) { + void runThreeProng(TEvents const& events, + o2::framework::Preslice& preslice, + TTrackAssocs const& /*assocs*/, TTracks const& tracks, + VarManager::PairCandidateType tripletType) + { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -5517,7 +5569,7 @@ struct AnalysisAsymmetricPairing { } } - for (auto const &event : events) { + for (auto const& event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5531,35 +5583,35 @@ struct AnalysisAsymmetricPairing { dqtablereader_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } auto groupedLegCAssocs = - legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const &[a1, a2, a3] : + for (auto const& [a1, a2, a3] : combinations(o2::soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const &a1 : groupedLegAAssocs) { - for (auto const &[a2, a3] : + for (auto const& a1 : groupedLegAAssocs) { + for (auto const& [a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } } else { @@ -5573,10 +5625,11 @@ struct AnalysisAsymmetricPairing { template - void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, - TTrackAssoc const &a3, TTracks const & /*tracks*/, - TEvent const &event, - VarManager::PairCandidateType tripletType) { + void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, + TTrackAssoc const& a3, TTracks const& /*tracks*/, + TEvent const& event, + VarManager::PairCandidateType tripletType) + { auto threeTrackFilter = static_cast(0); auto threeTrackCommonFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { @@ -5662,22 +5715,22 @@ struct AnalysisAsymmetricPairing { tripletType); if constexpr (TThreeProngFitter) { VarManager::FillTripletVertexing( - event, t1, t2, t3, tripletType); + event, t1, t2, t3, tripletType); } // Fill histograms for (int icut = 0; icut < fNLegCuts; icut++) { if (threeTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousHistograms.value && ((threeTrackFilter & (static_cast(1) << 29)) || (threeTrackFilter & (static_cast(1) << 30)) || (threeTrackFilter & (static_cast(1) << 31)))) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { @@ -5691,7 +5744,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair cuts + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts @@ -5717,20 +5770,20 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmed( - MyEventsVtxCovZdcFitSelected const &events, - o2::soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovZdcFitSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runAsymmetricPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processKaonPionSkimmedMultExtra( - MyEventsVtxCovZdcFitSelectedMultExtra const &events, - o2::soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovZdcFitSelectedMultExtra const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runAsymmetricPairing(events, trackAssocsPerCollision, @@ -5738,20 +5791,20 @@ struct AnalysisAsymmetricPairing { } void processKaonPionPionSkimmed( - MyEventsVtxCovZdcFitSelected const &events, - o2::soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovZdcFitSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - VarManager::kTripleCandidateToKPiPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToKPiPi); } void processKaonPionPionSkimmedMultExtra( - MyEventsVtxCovZdcFitSelectedMultExtra const &events, - o2::soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovZdcFitSelectedMultExtra const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -5759,16 +5812,17 @@ struct AnalysisAsymmetricPairing { } void processProtonKaonPionSkimmed( - MyEventsVtxCovZdcFitSelected const &events, - o2::soa::Join const - &barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { + MyEventsVtxCovZdcFitSelected const& events, + o2::soa::Join const& barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) + { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - VarManager::kTripleCandidateToPKPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToPKPi); } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -5783,8 +5837,8 @@ struct AnalysisAsymmetricPairing { PROCESS_SWITCH(AnalysisAsymmetricPairing, processProtonKaonPionSkimmed, "Run proton kaon pion triplets, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Combines dileptons with barrel or muon tracks for either resonance or @@ -5798,82 +5852,82 @@ struct AnalysisDileptonTrack { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigTrackCuts{ - "cfgTrackCuts", "kaonPID", - "Comma separated list of cuts for the track to be correlated with the " - "dileptons"}; + "cfgTrackCuts", "kaonPID", + "Comma separated list of cuts for the track to be correlated with the " + "dileptons"}; o2::framework::Configurable fConfigDileptonLowMass{ - "cfgDileptonLowMass", 2.8, - "Low mass cut for the dileptons used in analysis"}; + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; o2::framework::Configurable fConfigDileptonHighMass{ - "cfgDileptonHighMass", 3.2, - "High mass cut for the dileptons used in analysis"}; + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; o2::framework::Configurable fConfigDileptonLowpTCut{ - "cfgDileptonLowpTCut", 0.0, - "Low pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonHighpTCut{ - "cfgDileptonHighpTCut", 1E5, - "High pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonRapCutAbs{ - "cfgDileptonRapCutAbs", 1.0, - "Rap cut for dileptons used in the triplet vertexing"}; + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonLxyCut{ - "cfgDileptonLxyCut", 0.0, - "Lxy cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonTauxyCut{ - "cfgDileptonTauxyCut", -10000, - "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; + "cfgDileptonTauxyCut", -10000, + "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigHistogramSubgroups{ - "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", - "Comma separated list of dilepton-track histogram subgroups"}; + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigMixingDepth{ - "cfgMixingDepth", 5, "Event mixing pool depth"}; + "cfgMixingDepth", 5, "Event mixing pool depth"}; o2::framework::Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigGeoPath{ - "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; o2::framework::Configurable fConfigUseRapcut{ - "cfgUseMCRapcut", false, - "Use Rap cut for dileptons used in the triplet vertexing"}; + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigEnergycorrelator{ - "cfgEnergycorrelator", false, - "Add some hist for energy correlator study"}; + "cfgEnergycorrelator", false, + "Add some hist for energy correlator study"}; o2::framework::Configurable fConfigApplyMassEC{ - "cfgApplyMassEC", false, - "Apply fit mass for sideband for the energy correlator study"}; + "cfgApplyMassEC", false, + "Apply fit mass for sideband for the energy correlator study"}; o2::framework::Configurable> fConfigFitmassEC{ - "cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, - "parameter from the fit fuction and fit range"}; + "cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, + "parameter from the fit fuction and fit range"}; o2::framework::Configurable> fConfigTransRange{ - "cfgTransRange", std::vector{0.333333, 0.666667}, - "Transverse region for the energy correlstor analysis"}; + "cfgTransRange", std::vector{0.333333, 0.666667}, + "Transverse region for the energy correlstor analysis"}; o2::framework::Configurable fConfigApplyEfficiency{ - "cfgApplyEfficiency", false, - "If true, apply efficiency correction for the energy correlator study"}; + "cfgApplyEfficiency", false, + "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigApplyEfficiencyME{ - "cfgApplyEfficiencyME", false, - "If true, apply efficiency correction for the energy correlator study"}; + "cfgApplyEfficiencyME", false, + "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigAccCCDBPath{ - "AccCCDBPath", "Users/y/yalin/pptest/test2", - "Path of the efficiency corrections"}; + "AccCCDBPath", "Users/y/yalin/pptest/test2", + "Path of the efficiency corrections"}; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -5898,44 +5952,42 @@ struct AnalysisDileptonTrack { // TODO: The filter expressions seem to always use the default value of // configurables, not the values from the actual configuration file o2::framework::expressions::Filter - eventFilter = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); o2::framework::expressions::Filter dileptonFilter = - o2::aod::reducedpair::pt > - fConfigDileptonLowpTCut &&o2::aod::reducedpair::pt< - fConfigDileptonHighpTCut && - o2::aod::reducedpair::mass> fConfigDileptonLowMass - &&o2::aod::reducedpair::mass< - fConfigDileptonHighMass && o2::aod::reducedpair::sign == 0 && - o2::aod::reducedpair::lxy> fConfigDileptonLxyCut - &&o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; - o2::framework::expressions::Filter - filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > - static_cast(0); + o2::aod::reducedpair::pt > + fConfigDileptonLowpTCut&& o2::aod::reducedpair::pt< + fConfigDileptonHighpTCut && + o2::aod::reducedpair::mass> fConfigDileptonLowMass&& o2::aod::reducedpair::mass fConfigDileptonLxyCut&& o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; o2::framework::expressions::Filter - filterMuon = o2::aod::dqanalysisflags::isMuonSelected > + filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > static_cast(0); + o2::framework::expressions::Filter + filterMuon = o2::aod::dqanalysisflags::isMuonSelected > + static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float *fValuesDilepton = nullptr; - float *fValuesHadron = nullptr; - HistogramManager *fHistMan = nullptr; + float* fValuesDilepton = nullptr; + float* fValuesHadron = nullptr; + HistogramManager* fHistMan = nullptr; o2::framework::NoBinningPolicy fHashBin; - TF1 *fMassBkg = nullptr; + TF1* fMassBkg = nullptr; - TH2F *hAcceptance_rec = nullptr; - TH2F *hAcceptance_gen = nullptr; - TH2F *hEfficiency_dilepton = nullptr; - TH2F *hEfficiency_hadron = nullptr; - TH1F *hMasswindow = nullptr; + TH2F* hAcceptance_rec = nullptr; + TH2F* hAcceptance_gen = nullptr; + TH2F* hEfficiency_dilepton = nullptr; + TH2F* hEfficiency_hadron = nullptr; + TH1F* hMasswindow = nullptr; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelME = context.mOptions.get("processBarrelMixedEvent"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); @@ -5972,65 +6024,65 @@ struct AnalysisDileptonTrack { std::string cfgTrackSelection_TrackCuts; if (isBarrel || isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", - cfgTrackSelection_TrackCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", + cfgTrackSelection_TrackCuts, false); } else { o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCuts", - cfgTrackSelection_TrackCuts, false); + context, "analysis-muon-selection", "cfgMuonCuts", + cfgTrackSelection_TrackCuts, false); } - TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { cfgTrackSelection_objArrayTrackCuts = - TString(cfgTrackSelection_TrackCuts).Tokenize(","); + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", - cfgTrackSelection_TrackCuts, false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + cfgTrackSelection_TrackCuts, false); } else { o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCutsJSON", - cfgTrackSelection_TrackCuts, false); + context, "analysis-muon-selection", "cfgMuonCutsJSON", + cfgTrackSelection_TrackCuts, false); } if (!cfgTrackSelection_TrackCuts.empty()) { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON( - cfgTrackSelection_TrackCuts.data()); - for (auto const &t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON( + cfgTrackSelection_TrackCuts.data()); + for (auto const& t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } } if (cfgTrackSelection_objArrayTrackCuts->GetEntries() == 0) { LOG(fatal) - << " No track cuts found in the barrel or muon upstream tasks"; + << " No track cuts found in the barrel or muon upstream tasks"; } // store all the computed track cut names in a vector for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { fTrackCutNames.push_back( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } // get the list of associated track cuts to be combined with the dileptons // and // check that these were computed upstream and create a bit mask - TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { cfgDileptonTrack_objArrayTrackCuts = - TString(fConfigTrackCuts.value).Tokenize(","); + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { if (!cfgTrackSelection_objArrayTrackCuts->FindObject( - cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the " @@ -6040,7 +6092,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { if (cfgDileptonTrack_objArrayTrackCuts->FindObject( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } @@ -6059,28 +6111,28 @@ struct AnalysisDileptonTrack { std::string cfgPairing_CommonTrackCuts; if (isBarrel) { o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgTrackCuts", - cfgPairing_TrackCuts, false); + context, "analysis-same-event-pairing", "cfgTrackCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isMuon) { o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgMuonCuts", - cfgPairing_TrackCuts, false); + context, "analysis-same-event-pairing", "cfgMuonCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgLegCuts", - cfgPairing_TrackCuts, false); + context, "analysis-asymmetric-pairing", "cfgLegCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-asymmetric-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", - cfgPairing_CommonTrackCuts, false); + context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", + cfgPairing_CommonTrackCuts, false); } if (cfgPairing_TrackCuts.empty()) { LOG(fatal) << "There are no dilepton cuts specified in the upstream in " @@ -6091,18 +6143,18 @@ struct AnalysisDileptonTrack { TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { if (std::strcmp( - cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), - objArrayCommon->At(icut)->GetName()) == 0) { + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; fCommonPairCutNames.push_back( - objArrayCommon->At(icut)->GetName()); + objArrayCommon->At(icut)->GetName()); } } } @@ -6110,20 +6162,20 @@ struct AnalysisDileptonTrack { // Get also the pair cuts specified via the JSON parameters if (isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", - cfgPairing_PairCutsJSON, false); + context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", + cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = - o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const &t : addPairCuts) { + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const& t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } std::unique_ptr objArrayPairCuts( - TString(cfgPairing_PairCuts).Tokenize(",")); + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); @@ -6131,7 +6183,7 @@ struct AnalysisDileptonTrack { // array of single lepton cuts specified in the same-analysis-pairing task std::unique_ptr cfgPairing_objArrayTrackCuts( - TString(cfgPairing_TrackCuts).Tokenize(",")); + TString(cfgPairing_TrackCuts).Tokenize(",")); // If asymmetric pairs are used, the number of cuts should come from the // asymmetric-pairing task if (isBarrelAsymmetric) { @@ -6148,15 +6200,15 @@ struct AnalysisDileptonTrack { // dileptons if (!isBarrelAsymmetric) { if (!cfgPairing_objArrayTrackCuts->FindObject( - fTrackCutNames[icut].Data())) { + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead pairLegCutName = - dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) - ->GetString(); + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); @@ -6182,7 +6234,7 @@ struct AnalysisDileptonTrack { if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6216,7 +6268,7 @@ struct AnalysisDileptonTrack { if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6239,10 +6291,10 @@ struct AnalysisDileptonTrack { if (isBarrelME || isMuonME) { DefineHistograms( - fHistMan, - Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), - fTrackCutNames[iCutTrack].Data()), - "dilepton-hadron-array-correlation"); // define ME histograms + fHistMan, + Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + "dilepton-hadron-array-correlation"); // define ME histograms if (fConfigEnergycorrelator) { DefineHistograms(fHistMan, Form("DileptonTrackECME_%s_%s", @@ -6256,8 +6308,8 @@ struct AnalysisDileptonTrack { } o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); @@ -6274,15 +6326,16 @@ struct AnalysisDileptonTrack { // the background mass distribution in signal region std::vector fMassBkgpar = fConfigFitmassEC; fMassBkg = - new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); + new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); fMassBkg->SetParameters(fMassBkgpar[0]); fMassBkg->SetNpx(1000); } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) { + void initParamsFromCCDB(uint64_t timestamp) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -6294,26 +6347,27 @@ struct AnalysisDileptonTrack { VarManager::SetupThreeProngKFParticle(magField); } else { VarManager::SetupThreeProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } - void initAccFromCCDB(uint64_t timestamp) { + void initAccFromCCDB(uint64_t timestamp) + { auto listAccs = - fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); + fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); if (!listAccs) { LOG(fatal) << "Problem getting TList object with efficiencies!"; } hEfficiency_dilepton = - dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); + dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); hEfficiency_hadron = - dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); + dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); hAcceptance_rec = - dynamic_cast(listAccs->FindObject("hAcceptance_rec")); + dynamic_cast(listAccs->FindObject("hAcceptance_rec")); hAcceptance_gen = - dynamic_cast(listAccs->FindObject("hAcceptance_gen")); - hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); + dynamic_cast(listAccs->FindObject("hAcceptance_gen")); + hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); if (!hAcceptance_rec || !hAcceptance_gen || !hEfficiency_dilepton || !hEfficiency_hadron || !hMasswindow) { LOG(fatal) << "Problem getting histograms from the TList object with " @@ -6321,7 +6375,8 @@ struct AnalysisDileptonTrack { } } - float GetSafeInterpolationWeight(TH2 *hEff, float x, float y) { + float GetSafeInterpolationWeight(TH2* hEff, float x, float y) + { if (!hEff) { return 1.0; } @@ -6341,14 +6396,15 @@ struct AnalysisDileptonTrack { template - void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, - TTracks const &tracks, TDileptons const &dileptons) { + void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, + TTracks const& tracks, TDileptons const& dileptons) + { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); - for (auto const &dilepton : dileptons) { + for (auto const& dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6373,8 +6429,8 @@ struct AnalysisDileptonTrack { // regular dileptons fHistMan->FillHistClass( - Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s if constexpr (TCandidateType == @@ -6385,9 +6441,9 @@ struct AnalysisDileptonTrack { iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { @@ -6399,13 +6455,13 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -6414,7 +6470,7 @@ struct AnalysisDileptonTrack { } // end loop over single lepton selections // loop over hadrons - for (auto const &assoc : assocs) { + for (auto const& assoc : assocs) { uint32_t trackSelection = 0; if constexpr (TCandidateType == VarManager::kBtoJpsiEEK) { @@ -6436,7 +6492,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); // for the energy correlator analysis float Effweight_rec = 1.0f; @@ -6446,53 +6502,53 @@ struct AnalysisDileptonTrack { float hadron_eta = track.eta(); float hadron_phi = track.phi(); float deltaphi = RecoDecay::constrainAngle( - dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); Effweight_rec = GetSafeInterpolationWeight( - hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); float Effdilepton = GetSafeInterpolationWeight( - hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); float Effhadron = GetSafeInterpolationWeight( - hEfficiency_hadron, track.eta(), track.pt()); + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); Effweight_rec = - Effweight_rec * Effdilepton * Effhadron * Masswindow; + Effweight_rec * Effdilepton * Effhadron * Masswindow; } std::vector fTransRange = fConfigTransRange; VarManager::FillEnergyCorrelatorTriple( - event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], - fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), - 1. / Effweight_rec); + event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); // table to be written out for ML analysis BmesonsTable( - event.runNumber(), event.globalIndex(), event.timestamp(), - fValuesHadron[VarManager::kPairMass], dilepton.mass(), - fValuesHadron[VarManager::kDeltaMass], - fValuesHadron[VarManager::kPairPt], - fValuesHadron[VarManager::kPairEta], - fValuesHadron[VarManager::kPairPhi], - fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], - fValuesHadron[VarManager::kVertexingLxyz], - fValuesHadron[VarManager::kVertexingLz], - fValuesHadron[VarManager::kVertexingTauxy], - fValuesHadron[VarManager::kVertexingTauz], - fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], track.globalIndex(), - lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), - lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), - lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), - track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), - lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), - lepton2.tpcNSigmaPr(), track.itsClusterMap(), - lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), - lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), - lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection); + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], track.globalIndex(), + lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); @@ -6515,7 +6571,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); } if constexpr (TCandidateType == VarManager::kBcToThreeMuons) { trackSelection = (assoc.isMuonSelected_raw() & fTrackCutBitMap); @@ -6531,7 +6587,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); // Fill table for correlation analysis DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], fValuesHadron[VarManager::kDeltaPhi], @@ -6569,32 +6625,32 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } } @@ -6607,18 +6663,19 @@ struct AnalysisDileptonTrack { } o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dielectronsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; o2::framework::Preslice ditracksPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processBarrelSkimmed( - o2::soa::Filtered const &events, - o2::soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - o2::soa::Filtered const &dileptons) { + o2::soa::Filtered const& events, + o2::soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Filtered const& dileptons) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6630,11 +6687,11 @@ struct AnalysisDileptonTrack { } fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons); @@ -6642,11 +6699,12 @@ struct AnalysisDileptonTrack { } void processDstarToD0Pi( - o2::soa::Filtered const &events, - o2::soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - o2::soa::Filtered const &ditracks) { + o2::soa::Filtered const& events, + o2::soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Filtered const& ditracks) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6655,28 +6713,29 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDitracks = - ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); runDileptonHadron( - event, groupedBarrelAssocs, tracks, groupedDitracks); + event, groupedBarrelAssocs, tracks, groupedDitracks); } } o2::framework::Preslice muonAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dimuonsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processMuonSkimmed( - o2::soa::Filtered const &events, - o2::soa::Filtered> const &assocs, - MyMuonTracksWithCov const &tracks, - o2::soa::Filtered const &dileptons) { + o2::soa::Filtered const& events, + o2::soa::Filtered> const& assocs, + MyMuonTracksWithCov const& tracks, + o2::soa::Filtered const& dileptons) + { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6685,11 +6744,11 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { auto groupedMuonAssocs = - assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); auto groupedDimuons = - dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedMuonAssocs, tracks, groupedDimuons); @@ -6697,12 +6756,12 @@ struct AnalysisDileptonTrack { } void processBarrelMixedEvent( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - o2::soa::Filtered const &dileptons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Filtered const& dileptons) + { if (events.size() == 0) { return; } @@ -6718,8 +6777,8 @@ struct AnalysisDileptonTrack { events.bindExternalIndices(&assocs); // loop over two event comibnations - for (auto const &[event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const& [event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { // fill event quantities VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -6727,20 +6786,20 @@ struct AnalysisDileptonTrack { // get the dilepton slice for event1 auto evDileptons = - dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); // get the track associations slice for event2 auto evAssocs = - assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); // loop over associations - for (auto const &assoc : evAssocs) { + for (auto const& assoc : evAssocs) { // check that this track fulfills at least one of the specified cuts uint32_t trackSelection = - (assoc.isBarrelSelected_raw() & fTrackCutBitMap); + (assoc.isBarrelSelected_raw() & fTrackCutBitMap); if (trackSelection == 0) { continue; } @@ -6749,7 +6808,7 @@ struct AnalysisDileptonTrack { auto track = assoc.template reducedtrack_as(); // loop over dileptons - for (auto const &dilepton : evDileptons) { + for (auto const& dilepton : evDileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6775,21 +6834,21 @@ struct AnalysisDileptonTrack { float hadron_eta = track.eta(); float hadron_phi = track.phi(); float deltaphi = RecoDecay::constrainAngle( - dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); Effweight_rec = GetSafeInterpolationWeight( - hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); float Effdilepton = GetSafeInterpolationWeight( - hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); float Effhadron = GetSafeInterpolationWeight( - hEfficiency_hadron, track.eta(), track.pt()); + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); if (fConfigApplyEfficiencyME) { Effweight_rec = - Effdilepton * Effhadron * - Masswindow; // for the moment, apply the efficiency correction - // also for the mixed event pairs, but this can be - // changed in case we want to apply it only for - // the same event pairs + Effdilepton * Effhadron * + Masswindow; // for the moment, apply the efficiency correction + // also for the mixed event pairs, but this can be + // changed in case we want to apply it only for + // the same event pairs } else { Effweight_rec = Effweight_rec * Effdilepton * Effhadron * Masswindow; // apply acceptance and efficiency @@ -6800,10 +6859,10 @@ struct AnalysisDileptonTrack { VarManager::FillEnergyCorrelatorTriple( - event1, lepton1, lepton2, track, - dqtablereader_helpers::varValues(), fTransRange[0], - fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), - 1. / Effweight_rec); + event1, lepton1, lepton2, track, + dqtablereader_helpers::varValues(), fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); // loop over dilepton leg cuts and track cuts and fill histograms // separately for each combination @@ -6821,10 +6880,10 @@ struct AnalysisDileptonTrack { dqtablereader_helpers::varValues()); if (fConfigEnergycorrelator) { fHistMan->FillHistClass( - Form("DileptonTrackECME_%s_%s", - fTrackCutNames[icut].Data(), - fTrackCutNames[iTrackCut].Data()), - dqtablereader_helpers::varValues()); + Form("DileptonTrackECME_%s_%s", + fTrackCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -6835,33 +6894,33 @@ struct AnalysisDileptonTrack { } void processMuonMixedEvent( - o2::soa::Filtered - &events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const &assocs, - MyMuonTracksWithCov const &, - o2::soa::Filtered const &dileptons) { + o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const& assocs, + MyMuonTracksWithCov const&, + o2::soa::Filtered const& dileptons) + { if (events.size() == 0) { return; } events.bindExternalIndices(&dileptons); events.bindExternalIndices(&assocs); - for (auto const &[event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const& [event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); auto evDileptons = - dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); auto evAssocs = - assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); - for (auto const &assoc : evAssocs) { + for (auto const& assoc : evAssocs) { uint32_t muonSelection = assoc.isMuonSelected_raw() & fTrackCutBitMap; if (muonSelection == 0) { @@ -6869,7 +6928,7 @@ struct AnalysisDileptonTrack { } auto track = assoc.template reducedmuon_as(); - for (auto const &dilepton : evDileptons) { + for (auto const& dilepton : evDileptons) { VarManager::FillDileptonHadron(dilepton, track, dqtablereader_helpers::varValues()); for (int icut = 0; icut < fNCuts; icut++) { @@ -6892,7 +6951,8 @@ struct AnalysisDileptonTrack { } // end event loop } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -6916,37 +6976,37 @@ struct AnalysisDileptonTrackTrack { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigTrackCut1{ - "cfgTrackCut1", "pionPIDCut1", - "track1 cut"}; // used for select the tracks from SelectedTracks + "cfgTrackCut1", "pionPIDCut1", + "track1 cut"}; // used for select the tracks from SelectedTracks o2::framework::Configurable fConfigTrackCut2{ - "cfgTrackCut2", "pionPIDCut2", - "track2 cut"}; // used for select the tracks from SelectedTracks + "cfgTrackCut2", "pionPIDCut2", + "track2 cut"}; // used for select the tracks from SelectedTracks o2::framework::Configurable fConfigDileptonCut{ - "cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; + "cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; o2::framework::Configurable fConfigQuadrupletCuts{ - "cfgQuadrupletCuts", "pairX3872Cut1", - "Comma separated list of Dilepton-Track-Track cut"}; + "cfgQuadrupletCuts", "pairX3872Cut1", + "Comma separated list of Dilepton-Track-Track cut"}; o2::framework::Configurable fConfigAddDileptonHistogram{ - "cfgAddDileptonHistogram", "barrel", - "Comma separated list of histograms"}; + "cfgAddDileptonHistogram", "barrel", + "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddQuadrupletHistogram{ - "cfgAddQuadrupletHistogram", "xtojpsipipi", - "Comma separated list of histograms"}; + "cfgAddQuadrupletHistogram", "xtojpsipipi", + "Comma separated list of histograms"}; o2::framework::Configurable fConfigSetupFourProngFitter{ - "cfgSetupFourProngFitter", false, - "Use DCA for secondary vertex reconstruction (DCAFitter is used by " - "default)"}; + "cfgSetupFourProngFitter", false, + "Use DCA for secondary vertex reconstruction (DCAFitter is used by " + "default)"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Produces - DileptonTrackTrackTable; + DileptonTrackTrackTable; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -6962,23 +7022,24 @@ struct AnalysisDileptonTrackTrack { o2::framework::Service fCCDB{}; o2::framework::expressions::Filter - eventFilter = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); o2::framework::expressions::Filter dileptonFilter = - o2::aod::reducedpair::sign == 0; + o2::aod::reducedpair::sign == 0; o2::framework::expressions::Filter - filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > - static_cast(0); + filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > + static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use some values array to avoid mixing up the quantities - float *fValuesQuadruplet = nullptr; - HistogramManager *fHistMan = nullptr; + float* fValuesQuadruplet = nullptr; + HistogramManager* fHistMan = nullptr; - void init(o2::framework::InitContext &context) { + void init(o2::framework::InitContext& context) + { // bool isBarrel = context.mOptions.get("processJpsiPiPi"); if (context.mOptions.get("processDummy")) { @@ -7002,15 +7063,15 @@ struct AnalysisDileptonTrackTrack { } TString configDileptonCutNamesStr = fConfigDileptonCut.value; fDileptonCut = - *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); + *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); TString configQuadruletCutNamesStr = fConfigQuadrupletCuts.value; std::unique_ptr objArray( - configQuadruletCutNamesStr.Tokenize(",")); + configQuadruletCutNamesStr.Tokenize(",")); for (Int_t icut = 0; icut < objArray->GetEntries(); ++icut) { TString cutName = objArray->At(icut)->GetName(); fQuadrupletCutNames.push_back(cutName); fQuadrupletCuts.push_back( - *o2::aod::dqcuts::GetCompositeCut(cutName.Data())); + *o2::aod::dqcuts::GetCompositeCut(cutName.Data())); } if (!context.mOptions.get("processDummy")) { @@ -7021,27 +7082,27 @@ struct AnalysisDileptonTrackTrack { for (std::size_t icut = 0; icut < fQuadrupletCutNames.size(); ++icut) { if (fIsSameTrackCut) { DefineHistograms( - fHistMan, - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } else { DefineHistograms( - fHistMan, - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); - DefineHistograms( - fHistMan, - Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); - } - DefineHistograms( fHistMan, - Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); - DefineHistograms( + DefineHistograms( fHistMan, - Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), fConfigAddQuadrupletHistogram.value.data()); + } + DefineHistograms( + fHistMan, + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); + DefineHistograms( + fHistMan, + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } } } @@ -7051,9 +7112,10 @@ struct AnalysisDileptonTrackTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) { + void initParamsFromCCDB(uint64_t timestamp) + { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -7066,11 +7128,11 @@ struct AnalysisDileptonTrackTrack { VarManager::SetupFourProngKFParticle(magField); } else if (fConfigSetupFourProngFitter.value) { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables VarManager::SetupFourProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } @@ -7078,15 +7140,16 @@ struct AnalysisDileptonTrackTrack { template - void runDileptonTrackTrack(TEvent const &event, TTrackAssocs const &assocs, - TTracks const &tracks, - TDileptons const &dileptons) { + void runDileptonTrackTrack(TEvent const& event, TTrackAssocs const& assocs, + TTracks const& tracks, + TDileptons const& dileptons) + { VarManager::ResetValues(0, VarManager::kNVars, fValuesQuadruplet); VarManager::FillEvent(event, fValuesQuadruplet); // int indexOffset = -999; // std::vector trackGlobalIndexes; - for (auto const &dilepton : dileptons) { + for (auto const& dilepton : dileptons) { // get full track info of tracks based on the index int indexLepton1 = dilepton.index0Id(); @@ -7110,16 +7173,16 @@ struct AnalysisDileptonTrackTrack { fValuesQuadruplet); // loop over hadrons pairs - for (auto const &[a1, a2] : o2::soa::combinations(assocs, assocs)) { + for (auto const& [a1, a2] : o2::soa::combinations(assocs, assocs)) { uint32_t trackSelection = 0; if (fIsSameTrackCut) { trackSelection = - ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || - (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || + (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); } else { trackSelection = - ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && - (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && + (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); } // LOGP(info, "trackSelection: {}, a1: {}, a2: {}", trackSelection, // a1.isBarrelSelected_raw(), a2.isBarrelSelected_raw()); @@ -7140,12 +7203,12 @@ struct AnalysisDileptonTrackTrack { // fill variables VarManager::FillDileptonTrackTrack( - dilepton, track1, track2, fValuesQuadruplet); + dilepton, track1, track2, fValuesQuadruplet); if (fConfigSetupFourProngFitter || fConfigUseKFVertexing) { // LOGP(info, "Using KF or DCA fitter for secondary vertexing"); VarManager::FillDileptonTrackTrackVertexing< - TCandidateType, TEventFillMap, TTrackFillMap>( - event, lepton1, lepton2, track1, track2, fValuesQuadruplet); + TCandidateType, TEventFillMap, TTrackFillMap>( + event, lepton1, lepton2, track1, track2, fValuesQuadruplet); } int iCut = 0; @@ -7158,28 +7221,28 @@ struct AnalysisDileptonTrackTrack { if (fIsSameTrackCut) { if (track1.sign() * track2.sign() < 0) { fHistMan->FillHistClass( - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } else { if ((track1.sign() < 0) && (track2.sign() > 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() > 0) && (track2.sign() < 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } if ((track1.sign() > 0) && (track2.sign() > 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() < 0) && (track2.sign() < 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } } // loop over dilepton-track-track cuts @@ -7189,61 +7252,62 @@ struct AnalysisDileptonTrackTrack { continue; } DileptonTrackTrackTable( - fValuesQuadruplet[VarManager::kQuadMass], - fValuesQuadruplet[VarManager::kQuadPt], - fValuesQuadruplet[VarManager::kQuadEta], - fValuesQuadruplet[VarManager::kQuadPhi], - fValuesQuadruplet[VarManager::kRap], - fValuesQuadruplet[VarManager::kQ], - fValuesQuadruplet[VarManager::kDeltaR1], - fValuesQuadruplet[VarManager::kDeltaR2], - fValuesQuadruplet[VarManager::kDeltaR], dilepton.mass(), - dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), - lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton1.tpcNClsFound(), lepton2.tpcNSigmaEl(), - lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), - lepton2.tpcNClsFound(), fValuesQuadruplet[VarManager::kDitrackMass], - fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), - track1.eta(), track2.eta(), track1.phi(), track2.phi(), - track1.sign(), track2.sign(), track1.tpcNSigmaPi(), - track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), - track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), - track2.tpcNClsFound(), fValuesQuadruplet[VarManager::kKFMass], - fValuesQuadruplet[VarManager::kVertexingProcCode], - fValuesQuadruplet[VarManager::kVertexingChi2PCA], - fValuesQuadruplet[VarManager::kCosPointingAngle], - fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], - fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], - fValuesQuadruplet[VarManager::kVertexingLz], - fValuesQuadruplet[VarManager::kVertexingLxy], - fValuesQuadruplet[VarManager::kVertexingLxyz], - fValuesQuadruplet[VarManager::kVertexingTauz], - fValuesQuadruplet[VarManager::kVertexingTauxy], - fValuesQuadruplet[VarManager::kVertexingLzErr], - fValuesQuadruplet[VarManager::kVertexingLxyzErr], - fValuesQuadruplet[VarManager::kVertexingTauzErr], - fValuesQuadruplet[VarManager::kVertexingLzProjected], - fValuesQuadruplet[VarManager::kVertexingLxyProjected], - fValuesQuadruplet[VarManager::kVertexingLxyzProjected], - fValuesQuadruplet[VarManager::kVertexingTauzProjected], - fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); + fValuesQuadruplet[VarManager::kQuadMass], + fValuesQuadruplet[VarManager::kQuadPt], + fValuesQuadruplet[VarManager::kQuadEta], + fValuesQuadruplet[VarManager::kQuadPhi], + fValuesQuadruplet[VarManager::kRap], + fValuesQuadruplet[VarManager::kQ], + fValuesQuadruplet[VarManager::kDeltaR1], + fValuesQuadruplet[VarManager::kDeltaR2], + fValuesQuadruplet[VarManager::kDeltaR], dilepton.mass(), + dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), + lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton1.tpcNClsFound(), lepton2.tpcNSigmaEl(), + lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), + lepton2.tpcNClsFound(), fValuesQuadruplet[VarManager::kDitrackMass], + fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), + track1.eta(), track2.eta(), track1.phi(), track2.phi(), + track1.sign(), track2.sign(), track1.tpcNSigmaPi(), + track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), + track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), + track2.tpcNClsFound(), fValuesQuadruplet[VarManager::kKFMass], + fValuesQuadruplet[VarManager::kVertexingProcCode], + fValuesQuadruplet[VarManager::kVertexingChi2PCA], + fValuesQuadruplet[VarManager::kCosPointingAngle], + fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], + fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], + fValuesQuadruplet[VarManager::kVertexingLz], + fValuesQuadruplet[VarManager::kVertexingLxy], + fValuesQuadruplet[VarManager::kVertexingLxyz], + fValuesQuadruplet[VarManager::kVertexingTauz], + fValuesQuadruplet[VarManager::kVertexingTauxy], + fValuesQuadruplet[VarManager::kVertexingLzErr], + fValuesQuadruplet[VarManager::kVertexingLxyzErr], + fValuesQuadruplet[VarManager::kVertexingTauzErr], + fValuesQuadruplet[VarManager::kVertexingLzProjected], + fValuesQuadruplet[VarManager::kVertexingLxyProjected], + fValuesQuadruplet[VarManager::kVertexingLxyzProjected], + fValuesQuadruplet[VarManager::kVertexingTauzProjected], + fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); } } } o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dielectronsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; o2::framework::Preslice ditracksPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processJpsiPiPi( - o2::soa::Filtered const &events, - o2::soa::Filtered> const &assocs, - MyBarrelTracksWithCov const &tracks, - o2::soa::Filtered const &dileptons) { + o2::soa::Filtered const& events, + o2::soa::Filtered> const& assocs, + MyBarrelTracksWithCov const& tracks, + o2::soa::Filtered const& dileptons) + { if (events.size() == 0) { return; } @@ -7251,18 +7315,19 @@ struct AnalysisDileptonTrackTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const &event : events) { + for (auto const& event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonTrackTrack(event, groupedBarrelAssocs, tracks, groupedDielectrons); } } - void processDummy(MyEventsBasic const &) { + void processDummy(MyEventsBasic const&) + { // do nothing } @@ -7272,8 +7337,9 @@ struct AnalysisDileptonTrackTrack { true); }; -void DefineHistograms(HistogramManager *histMan, const TString &histClasses, - const char *histGroups) { +void DefineHistograms(HistogramManager* histMan, const TString& histClasses, + const char* histGroups) +{ // // Define here the histograms for all the classes required in analysis. // The histogram classes are provided in the histClasses string, separated by @@ -7290,90 +7356,90 @@ void DefineHistograms(HistogramManager *histMan, const TString &histClasses, // configurables if (classStr.Contains("Event")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "event", histName); + histMan, objArray->At(iclass)->GetName(), "event", histName); } if (classStr.Contains("SameBunchCorrelations") || classStr.Contains("OutOfBunchCorrelations")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); + histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); } if (classStr.Contains("Track") && !classStr.Contains("Pairs")) { if (classStr.Contains("Barrel")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); if (classStr.Contains("PIDCalibElectron")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_electron"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_electron"); } if (classStr.Contains("PIDCalibPion")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_pion"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_pion"); } if (classStr.Contains("PIDCalibProton")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_proton"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_proton"); } if (classStr.Contains("Ambiguity")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } if (classStr.Contains("Muon")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); } } if (classStr.Contains("Pairs")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", histName); + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("Pairing")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "event", histName); + histMan, objArray->At(iclass)->GetName(), "event", histName); } if (classStr.Contains("Triplets")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", histName); + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("DileptonsSelected")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); + histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); } if (classStr.Contains("DileptonTrack") && !classStr.Contains("ME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); } if (classStr.Contains("DileptonTrackME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", - "dilepton-hadron-array-correlation"); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "dilepton-hadron-array-correlation"); } if (classStr.Contains("DileptonTrackECME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", - "energy-correlator"); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "energy-correlator"); } if (classStr.Contains("HadronsSelected")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); } if (classStr.Contains("DileptonHadronInvMass")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); + histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); } if (classStr.Contains("DileptonHadronCorrelation")) { From a8cdeb31622e76169def506e919ac6febed5336d Mon Sep 17 00:00:00 2001 From: Jonathan Witte Date: Fri, 30 Oct 2026 15:30:52 +0100 Subject: [PATCH 6/6] Undo all formating changes --- PWGDQ/Core/VarManager.cxx | 490 ++- PWGDQ/Core/VarManager.h | 4627 ++++++++++++------------ PWGDQ/Tasks/dqEfficiency_withAssoc.cxx | 3677 +++++++++---------- PWGDQ/Tasks/tableReader_withAssoc.h | 3962 ++++++++++---------- 4 files changed, 6251 insertions(+), 6505 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index 9244750660a..f58704f9d9a 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -73,34 +73,33 @@ int VarManager::fgITSROFBorderMarginHigh = 0; uint64_t VarManager::fgSOR = 0; uint64_t VarManager::fgEOR = 0; ROOT::Math::PxPyPzEVector - VarManager::fgBeamA(0, 0, 6799.99, - 6800); // GeV, beam from A-side 4-momentum vector + VarManager::fgBeamA(0, 0, 6799.99, + 6800); // GeV, beam from A-side 4-momentum vector ROOT::Math::PxPyPzEVector - VarManager::fgBeamC(0, 0, -6799.99, - 6800); // GeV, beam from C-side 4-momentum vector + VarManager::fgBeamC(0, 0, -6799.99, + 6800); // GeV, beam from C-side 4-momentum vector o2::vertexing::DCAFitterN<2> VarManager::fgFitterTwoProngBarrel; o2::vertexing::DCAFitterN<3> VarManager::fgFitterThreeProngBarrel; o2::vertexing::DCAFitterN<4> VarManager::fgFitterFourProngBarrel; o2::vertexing::FwdDCAFitterN<2> VarManager::fgFitterTwoProngFwd; o2::vertexing::FwdDCAFitterN<3> VarManager::fgFitterThreeProngFwd; o2::globaltracking::MatchGlobalFwd VarManager::mMatching; -std::map VarManager::fgCalibs; +std::map VarManager::fgCalibs; std::array VarManager::fgRunTPCPostCalibration = {false, false, false, false}; int VarManager::fgCalibrationType = - 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for - // pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb + 0; // 0 - no calibration, 1 - calibration vs (TPCncls,pIN,eta) typically for + // pp, 2 - calibration vs (eta,nPV,nLong,tLong) typically for PbPb bool VarManager::fgUseInterpolatedCalibration = - true; // use interpolated calibration histograms (default: true) + true; // use interpolated calibration histograms (default: true) int VarManager::fgEfficiencyType = - 0; // type of efficiency to be applied, default is no efficiency -TObject* VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency -TObject* VarManager::fgPosiPhiMap = nullptr; -TObject* VarManager::fgNegaPhiMap = nullptr; + 0; // type of efficiency to be applied, default is no efficiency +TObject *VarManager::fgEfficiencyHist = nullptr; // histogram for efficiency +TObject *VarManager::fgPosiPhiMap = nullptr; +TObject *VarManager::fgNegaPhiMap = nullptr; bool VarManager::fgUsePhiCorrection = false; //__________________________________________________________________ -VarManager::VarManager() : TObject() -{ +VarManager::VarManager() : TObject() { // // constructor // @@ -111,8 +110,7 @@ VarManager::VarManager() : TObject() VarManager::~VarManager() = default; //__________________________________________________________________ -void VarManager::SetVariableDependencies() -{ +void VarManager::SetVariableDependencies() { // // Set as used variables on which other variables calculation depends // @@ -147,8 +145,7 @@ void VarManager::SetVariableDependencies() } //__________________________________________________________________ -void VarManager::ResetValues(int startValue, int endValue, float* values) -{ +void VarManager::ResetValues(int startValue, int endValue, float *values) { // // reset all variables to an "innocent" value // NOTE: here we use -9999.0 as a neutral value, but depending on situation, @@ -162,8 +159,7 @@ void VarManager::ResetValues(int startValue, int endValue, float* values) } //__________________________________________________________________ -void VarManager::SetCollisionSystem(const TString& system, float energy) -{ +void VarManager::SetCollisionSystem(const TString &system, float energy) { // // Set the collision system and the center of mass energy // @@ -216,43 +212,42 @@ void VarManager::SetCollisionSystem(const TString& system, float energy) // set the beam 4-momentum vectors float beamAEnergy = - energy / 2.0f * - std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / - NumberOfProtonsC / NumberOfProtonsA); // GeV + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsA) * NumberOfProtonsC / + NumberOfProtonsC / NumberOfProtonsA); // GeV float beamCEnergy = - energy / 2.0f * - std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / - NumberOfProtonsA / NumberOfProtonsC); // GeV + energy / 2.0f * + std::sqrt(static_cast(NumberOfProtonsC) * NumberOfProtonsA / + NumberOfProtonsA / NumberOfProtonsC); // GeV float beamAMomentum = std::sqrt(beamAEnergy * beamAEnergy - NumberOfNucleonsA * NumberOfNucleonsA * - MassProton * MassProton); + MassProton * MassProton); float beamCMomentum = std::sqrt(beamCEnergy * beamCEnergy - NumberOfNucleonsC * NumberOfNucleonsC * - MassProton * MassProton); + MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } //__________________________________________________________________ -void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif) -{ +void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif) { // // Set the collision system and the center of mass energy from the GRP // information double beamAEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( - o2::constants::lhc::BeamDirection::BeamA); + o2::constants::lhc::BeamDirection::BeamA); double beamCEnergy = grplhcif->getBeamEnergyPerNucleonInGeV( - o2::constants::lhc::BeamDirection::BeamC); + o2::constants::lhc::BeamDirection::BeamC); double beamANucleons = - grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamA); double beamCNucleons = - grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); + grplhcif->getBeamA(o2::constants::lhc::BeamDirection::BeamC); double beamAMomentum = - std::sqrt(beamAEnergy * beamAEnergy - - beamANucleons * beamANucleons * MassProton * MassProton); + std::sqrt(beamAEnergy * beamAEnergy - + beamANucleons * beamANucleons * MassProton * MassProton); double beamCMomentum = - std::sqrt(beamCEnergy * beamCEnergy - - beamCNucleons * beamCNucleons * MassProton * MassProton); + std::sqrt(beamCEnergy * beamCEnergy - + beamCNucleons * beamCNucleons * MassProton * MassProton); fgBeamA.SetPxPyPzE(0, 0, beamAMomentum, beamAEnergy); fgBeamC.SetPxPyPzE(0, 0, -beamCMomentum, beamCEnergy); } @@ -268,8 +263,7 @@ void VarManager::SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif) // } //__________________________________________________________________ -void VarManager::FillTrackDerived(float* values) -{ +void VarManager::FillTrackDerived(float *values) { // // Fill track-wise derived quantities (these are all quantities which can be // computed just based on the values already filled in the FillTrack() @@ -281,14 +275,12 @@ void VarManager::FillTrackDerived(float* values) } //__________________________________________________________________ -float VarManager::calculateCosPA(const KFParticle& kfp, const KFParticle& PV) -{ +float VarManager::calculateCosPA(const KFParticle &kfp, const KFParticle &PV) { return cpaFromKF(kfp, PV); } //__________________________________________________________________ -double VarManager::ComputePIDcalibration(int species, double nSigmaValue) -{ +double VarManager::ComputePIDcalibration(int species, double nSigmaValue) { // species: 0 - electron, 1 - pion, 2 - kaon, 3 - proton // Depending on the PID calibration type, we use different types of // calibration histograms @@ -298,29 +290,29 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) CalibObjects calibMean = kTPCElectronMean; CalibObjects calibSigma = kTPCElectronSigma; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - TH3F* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - TH3F* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + TH3F *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + TH3F *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); if (!calibMeanHist || !calibSigmaHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -330,18 +322,18 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) int binTPCncls = calibMeanHist->GetXaxis()->FindBin(fgValues[kTPCncls]); binTPCncls = (binTPCncls == 0 ? 1 : binTPCncls); binTPCncls = (binTPCncls > calibMeanHist->GetXaxis()->GetNbins() - ? calibMeanHist->GetXaxis()->GetNbins() - : binTPCncls); + ? calibMeanHist->GetXaxis()->GetNbins() + : binTPCncls); int binPin = calibMeanHist->GetYaxis()->FindBin(fgValues[kPin]); binPin = (binPin == 0 ? 1 : binPin); binPin = (binPin > calibMeanHist->GetYaxis()->GetNbins() - ? calibMeanHist->GetYaxis()->GetNbins() - : binPin); + ? calibMeanHist->GetYaxis()->GetNbins() + : binPin); int binEta = calibMeanHist->GetZaxis()->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); binEta = (binEta > calibMeanHist->GetZaxis()->GetNbins() - ? calibMeanHist->GetZaxis()->GetNbins() - : binEta); + ? calibMeanHist->GetZaxis()->GetNbins() + : binEta); double mean = calibMeanHist->GetBinContent(binTPCncls, binPin, binEta); double sigma = calibSigmaHist->GetBinContent(binTPCncls, binPin, binEta); @@ -352,34 +344,34 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) CalibObjects calibSigma = kTPCElectronSigma; CalibObjects calibStatus = kTPCElectronStatus; switch (species) { - case 0: - calibMean = kTPCElectronMean; - calibSigma = kTPCElectronSigma; - calibStatus = kTPCElectronStatus; - break; - case 1: - calibMean = kTPCPionMean; - calibSigma = kTPCPionSigma; - calibStatus = kTPCPionStatus; - break; - case 2: - calibMean = kTPCKaonMean; - calibSigma = kTPCKaonSigma; - calibStatus = kTPCKaonStatus; - break; - case 3: - calibMean = kTPCProtonMean; - calibSigma = kTPCProtonSigma; - calibStatus = kTPCProtonStatus; - break; - default: - LOG(fatal) << "Invalid species for PID calibration: " << species; - return -999.0; // Return zero if species is invalid + case 0: + calibMean = kTPCElectronMean; + calibSigma = kTPCElectronSigma; + calibStatus = kTPCElectronStatus; + break; + case 1: + calibMean = kTPCPionMean; + calibSigma = kTPCPionSigma; + calibStatus = kTPCPionStatus; + break; + case 2: + calibMean = kTPCKaonMean; + calibSigma = kTPCKaonSigma; + calibStatus = kTPCKaonStatus; + break; + case 3: + calibMean = kTPCProtonMean; + calibSigma = kTPCProtonSigma; + calibStatus = kTPCProtonStatus; + break; + default: + LOG(fatal) << "Invalid species for PID calibration: " << species; + return -999.0; // Return zero if species is invalid } - THnF* calibMeanHist = dynamic_cast(fgCalibs[calibMean]); - THnF* calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); - THnF* calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); + THnF *calibMeanHist = dynamic_cast(fgCalibs[calibMean]); + THnF *calibSigmaHist = dynamic_cast(fgCalibs[calibSigma]); + THnF *calibStatusHist = dynamic_cast(fgCalibs[calibStatus]); if (!calibMeanHist || !calibSigmaHist || !calibStatusHist) { LOG(fatal) << "Calibration histograms not found for species: " << species; return -999.0; // Return zero if histograms are not found @@ -389,55 +381,55 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) int binEta = calibMeanHist->GetAxis(0)->FindBin(fgValues[kEta]); binEta = (binEta == 0 ? 1 : binEta); binEta = (binEta > calibMeanHist->GetAxis(0)->GetNbins() - ? calibMeanHist->GetAxis(0)->GetNbins() - : binEta); + ? calibMeanHist->GetAxis(0)->GetNbins() + : binEta); int binNpv = calibMeanHist->GetAxis(1)->FindBin(fgValues[kVtxNcontribReal]); binNpv = (binNpv == 0 ? 1 : binNpv); binNpv = (binNpv > calibMeanHist->GetAxis(1)->GetNbins() - ? calibMeanHist->GetAxis(1)->GetNbins() - : binNpv); + ? calibMeanHist->GetAxis(1)->GetNbins() + : binNpv); int binNlong = - calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); + calibMeanHist->GetAxis(2)->FindBin(fgValues[kNTPCcontribLongA]); binNlong = (binNlong == 0 ? 1 : binNlong); binNlong = (binNlong > calibMeanHist->GetAxis(2)->GetNbins() - ? calibMeanHist->GetAxis(2)->GetNbins() - : binNlong); + ? calibMeanHist->GetAxis(2)->GetNbins() + : binNlong); int binTlong = - calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); + calibMeanHist->GetAxis(3)->FindBin(fgValues[kNTPCmedianTimeLongA]); binTlong = (binTlong == 0 ? 1 : binTlong); binTlong = (binTlong > calibMeanHist->GetAxis(3)->GetNbins() - ? calibMeanHist->GetAxis(3)->GetNbins() - : binTlong); + ? calibMeanHist->GetAxis(3)->GetNbins() + : binTlong); std::array bin{binEta, binNpv, binNlong, binTlong}; int status = static_cast(calibStatusHist->GetBinContent(bin.data())); double mean = calibMeanHist->GetBinContent(bin.data()); double sigma = calibSigmaHist->GetBinContent(bin.data()); switch (status) { - case 0: - // good calibration, return the calibrated nSigma value + case 0: + // good calibration, return the calibrated nSigma value + return (nSigmaValue - mean) / sigma; + break; + case 1: + case 4: + // calibration not valid or interpolation failed, return the original + // nSigma value + return nSigmaValue; + break; + case 2: // calibration constant has poor stat uncertainty, consider the user + // option for what to do + case 3: + // calibration constants have been interpolated + if (fgUseInterpolatedCalibration) { return (nSigmaValue - mean) / sigma; - break; - case 1: - case 4: - // calibration not valid or interpolation failed, return the original - // nSigma value + } else { + // return the original nSigma value return nSigmaValue; - break; - case 2: // calibration constant has poor stat uncertainty, consider the user - // option for what to do - case 3: - // calibration constants have been interpolated - if (fgUseInterpolatedCalibration) { - return (nSigmaValue - mean) / sigma; - } else { - // return the original nSigma value - return nSigmaValue; - } - break; - default: - return nSigmaValue; // unknown status, return the original nSigma value - break; + } + break; + default: + return nSigmaValue; // unknown status, return the original nSigma value + break; } } else { // unknown calibration type, return the original nSigma value @@ -447,8 +439,7 @@ double VarManager::ComputePIDcalibration(int species, double nSigmaValue) } //__________________________________________________________________ -void VarManager::SetEfficiencyObject(int efficiencyType, TObject* obj) -{ +void VarManager::SetEfficiencyObject(int efficiencyType, TObject *obj) { // check the type of the efficiency object and set it accordingly if (efficiencyType >= kNEfficiencyTypes || efficiencyType < 0) { LOG(warning) << "SetEfficiencyObject: unknown efficiency type " @@ -462,8 +453,7 @@ void VarManager::SetEfficiencyObject(int efficiencyType, TObject* obj) fgEfficiencyHist = obj; } -void VarManager::FillEfficiency(float* values) -{ +void VarManager::FillEfficiency(float *values) { // depending on the efficiency type, we use different types of efficiency // histograms and different variables to get the efficiency value if (!values) { @@ -472,75 +462,75 @@ void VarManager::FillEfficiency(float* values) if (fgEfficiencyType == kNone) { values[kPairEfficiency] = - 1.0; // if no efficiency is to be applied, set the efficiency value to 1 + 1.0; // if no efficiency is to be applied, set the efficiency value to 1 values[kPairWeight] = 1.0; // set the weight to 1 } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarFT0c) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() - ? efficiencyHist->GetXaxis()->GetNbins() - : binPt); + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() - ? efficiencyHist->GetYaxis()->GetNbins() - : binCent); + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); int binCosThetaStarFT0c = - efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarFT0C]); binCosThetaStarFT0c = (binCosThetaStarFT0c == 0 ? 1 : binCosThetaStarFT0c); binCosThetaStarFT0c = - (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() - ? efficiencyHist->GetZaxis()->GetNbins() - : binCosThetaStarFT0c); + (binCosThetaStarFT0c > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarFT0c); // get the efficiency value from the histogram values[kPairEfficiency] = - efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarFT0c); values[kPairWeight] = - 1.0 / (values[kPairEfficiency] > 0 - ? values[kPairEfficiency] - : 1.0); // set the weight as the inverse of the efficiency, - // but avoid division by zero + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else if (fgEfficiencyType == kPairPtCentFT0cCosThetaStarRandom) { if (!fgEfficiencyHist) { LOG(fatal) << "efficiency histogram not set"; return; } - TH3F* efficiencyHist = dynamic_cast(fgEfficiencyHist); + TH3F *efficiencyHist = dynamic_cast(fgEfficiencyHist); // Get the bin indices for the efficiency histogram int binPt = efficiencyHist->GetXaxis()->FindBin(values[kPt]); binPt = (binPt == 0 ? 1 : binPt); binPt = (binPt > efficiencyHist->GetXaxis()->GetNbins() - ? efficiencyHist->GetXaxis()->GetNbins() - : binPt); + ? efficiencyHist->GetXaxis()->GetNbins() + : binPt); int binCent = efficiencyHist->GetYaxis()->FindBin(values[kCentFT0C]); binCent = (binCent == 0 ? 1 : binCent); binCent = (binCent > efficiencyHist->GetYaxis()->GetNbins() - ? efficiencyHist->GetYaxis()->GetNbins() - : binCent); + ? efficiencyHist->GetYaxis()->GetNbins() + : binCent); int binCosThetaStarRandom = - efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); + efficiencyHist->GetZaxis()->FindBin(values[kCosThetaStarRandom]); binCosThetaStarRandom = - (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); + (binCosThetaStarRandom == 0 ? 1 : binCosThetaStarRandom); binCosThetaStarRandom = - (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() - ? efficiencyHist->GetZaxis()->GetNbins() - : binCosThetaStarRandom); + (binCosThetaStarRandom > efficiencyHist->GetZaxis()->GetNbins() + ? efficiencyHist->GetZaxis()->GetNbins() + : binCosThetaStarRandom); // get the efficiency value from the histogram values[kPairEfficiency] = - efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); + efficiencyHist->GetBinContent(binPt, binCent, binCosThetaStarRandom); values[kPairWeight] = - 1.0 / (values[kPairEfficiency] > 0 - ? values[kPairEfficiency] - : 1.0); // set the weight as the inverse of the efficiency, - // but avoid division by zero + 1.0 / (values[kPairEfficiency] > 0 + ? values[kPairEfficiency] + : 1.0); // set the weight as the inverse of the efficiency, + // but avoid division by zero } else { LOG(warning) << "FillEfficiency: unknown efficiency type " << fgEfficiencyType << ", using default efficiency = 1"; @@ -549,15 +539,13 @@ void VarManager::FillEfficiency(float* values) } } -void VarManager::SetPhiMap(TObject* hposi, TObject* hnega, bool option) -{ +void VarManager::SetPhiMap(TObject *hposi, TObject *hnega, bool option) { fgPosiPhiMap = hposi; fgNegaPhiMap = hnega; fgUsePhiCorrection = option; } -double VarManager::SampleRotationPhi(double pt, double eta, int charge) -{ +double VarManager::SampleRotationPhi(double pt, double eta, int charge) { // each type only alarm once static bool warnedEmptyPhi = false; @@ -565,11 +553,11 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) return gRandom->Uniform(0., o2::constants::math::TwoPI); } else { - TH3D* hMap = nullptr; + TH3D *hMap = nullptr; if (charge > 0) { - hMap = dynamic_cast(fgPosiPhiMap); + hMap = dynamic_cast(fgPosiPhiMap); } else { - hMap = dynamic_cast(fgNegaPhiMap); + hMap = dynamic_cast(fgNegaPhiMap); } if (!hMap) { @@ -582,9 +570,9 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) ptBin = std::clamp(ptBin, 1, hMap->GetNbinsX()); etaBin = std::clamp(etaBin, 1, hMap->GetNbinsZ()); - TH1D* hPhi = hMap->ProjectionY( - Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", charge, ptBin, etaBin), - ptBin, ptBin, etaBin, etaBin); + TH1D *hPhi = hMap->ProjectionY( + Form("hTRPhi_tmp_charge%d_ptbin%d_etabin%d", charge, ptBin, etaBin), + ptBin, ptBin, etaBin, etaBin); if (!hPhi || hPhi->Integral(1, hPhi->GetNbinsX()) <= 0.) { if (!warnedEmptyPhi) { @@ -611,8 +599,7 @@ double VarManager::SampleRotationPhi(double pt, double eta, int charge) //__________________________________________________________________ std::tuple - VarManager::BimodalityCoefficientUnbinned(const std::vector& data) -{ +VarManager::BimodalityCoefficientUnbinned(const std::vector &data) { // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis size_t n = data.size(); @@ -622,7 +609,7 @@ std::tuple float mean = std::accumulate(data.begin(), data.end(), 0.0) / n; float m2 = 0.0, m3 = 0.0, m4 = 0.0; - for (const float& x : data) { + for (const float &x : data) { const float diff = x - mean; const float diff2 = diff * diff; m2 += diff2; @@ -647,10 +634,9 @@ std::tuple } std::tuple - VarManager::BimodalityCoefficientAndNPeaks(const std::vector& data, - float binWidth, int trim, float min, - float max) -{ +VarManager::BimodalityCoefficientAndNPeaks(const std::vector &data, + float binWidth, int trim, float min, + float max) { // Bimodality coefficient = (skewness^2 + 1) / kurtosis // return a tuple including the coefficient, mean, RMS, skewness, and kurtosis @@ -667,7 +653,7 @@ std::tuple int nBins = static_cast((max - min) / binWidth); std::vector counts(nBins, 0.0); - for (const float& x : data) { + for (const float &x : data) { if (x < min || x >= max) { continue; // skip out-of-range values } @@ -810,8 +796,7 @@ std::tuple } //__________________________________________________________________ -void VarManager::SetDefaultVarNames() -{ +void VarManager::SetDefaultVarNames() { // // Set default variable names // @@ -903,7 +888,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMultDimuons] = "Multiplicity Dimuons Unlike Sign"; fgVariableUnits[kMultDimuons] = ""; fgVariableNames[kMultDimuonsME] = - "Multiplicity Dimuons Unlike Sign Mixed Events"; + "Multiplicity Dimuons Unlike Sign Mixed Events"; fgVariableUnits[kMultDimuonsME] = ""; fgVariableNames[kCentFT0C] = "Centrality FT0C"; fgVariableUnits[kCentFT0C] = "%"; @@ -918,11 +903,11 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMCEventPlaneAngle] = "MC event plane angle"; fgVariableNames[kMCEventCentrFT0C] = "MC Centrality FT0C"; fgVariableNames[kMultMCNParticlesEta05] = - "MC Multiplicity Central Barrel for |eta| < 0.5"; + "MC Multiplicity Central Barrel for |eta| < 0.5"; fgVariableNames[kMultMCNParticlesEta08] = - "MC Multiplicity Central Barrel for |eta| < 0.8"; + "MC Multiplicity Central Barrel for |eta| < 0.8"; fgVariableNames[kMultMCNParticlesEta10] = - "MC Multiplicity Central Barrel for |eta| < 1.0"; + "MC Multiplicity Central Barrel for |eta| < 1.0"; fgVariableUnits[kMCEventGeneratorId] = ""; fgVariableUnits[kMCEventSubGeneratorId] = ""; fgVariableUnits[kMCVtxX] = "cm"; @@ -991,12 +976,12 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMultNTracksPVetaHalf] = "# Mult Tracks PV |#eta| < 0.5"; fgVariableUnits[kMultNTracksPVetaHalf] = ""; fgVariableNames[kTrackOccupancyInTimeRange] = - "track occupancy in TPC drift time (PV tracks)"; + "track occupancy in TPC drift time (PV tracks)"; fgVariableUnits[kTrackOccupancyInTimeRange] = ""; fgVariableNames[kFT0COccupancyInTimeRange] = "FT0C occupancy"; fgVariableUnits[kFT0COccupancyInTimeRange] = ""; fgVariableNames[kNoCollInTimeRangeStandard] = - "track occupancy in TPC drift standart time"; + "track occupancy in TPC drift standart time"; fgVariableUnits[kNoCollInTimeRangeStandard] = ""; fgVariableNames[kMultAllTracksITSTPC] = "# ITS-TPC tracks"; fgVariableUnits[kMultAllTracksITSTPC] = ""; @@ -1019,82 +1004,82 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kNTPCcontribLongC] = "# TPC-C pileup, long time range"; fgVariableUnits[kNTPCcontribLongC] = ""; fgVariableNames[kNTPCmeanTimeLongA] = - "# TPC-A pileup mean time, long time range"; + "# TPC-A pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongA] = "#mu s"; fgVariableNames[kNTPCmeanTimeLongC] = - "# TPC-C pileup mean time, long time range"; + "# TPC-C pileup mean time, long time range"; fgVariableUnits[kNTPCmeanTimeLongC] = "#mu s"; fgVariableNames[kNTPCmedianTimeLongA] = - "# TPC-A pileup median time, long time range"; + "# TPC-A pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongA] = "#mu s"; fgVariableNames[kNTPCmedianTimeLongC] = - "# TPC-C pileup median time, long time range"; + "# TPC-C pileup median time, long time range"; fgVariableUnits[kNTPCmedianTimeLongC] = "#mu s"; fgVariableNames[kNTPCcontribShortA] = "# TPC-A pileup, short time range"; fgVariableUnits[kNTPCcontribShortA] = ""; fgVariableNames[kNTPCcontribShortC] = "# TPC-C pileup, short time range"; fgVariableUnits[kNTPCcontribShortC] = ""; fgVariableNames[kNTPCmeanTimeShortA] = - "# TPC-A pileup mean time, short time range"; + "# TPC-A pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortA] = "#mu s"; fgVariableNames[kNTPCmeanTimeShortC] = - "# TPC-C pileup mean time, short time range"; + "# TPC-C pileup mean time, short time range"; fgVariableUnits[kNTPCmeanTimeShortC] = "#mu s"; fgVariableNames[kNTPCmedianTimeShortA] = - "# TPC-A pileup median time, short time range"; + "# TPC-A pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortA] = "#mu s"; fgVariableNames[kNTPCmedianTimeShortC] = - "# TPC-C pileup median time, short time range"; + "# TPC-C pileup median time, short time range"; fgVariableUnits[kNTPCmedianTimeShortC] = "#mu s"; fgVariableNames[kDCAzBimodalityCoefficient] = - "Unbinned Bimodality Coeff of DCAz distribution"; + "Unbinned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficient] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinned] = - "Binned Bimodality Coeff of DCAz distribution"; + "Binned Bimodality Coeff of DCAz distribution"; fgVariableUnits[kDCAzBimodalityCoefficientBinned] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed1] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed1] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed2] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed2] = ""; fgVariableNames[kDCAzBimodalityCoefficientBinnedTrimmed3] = - "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; + "Binned Bimodality Coeff of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzBimodalityCoefficientBinnedTrimmed3] = ""; fgVariableNames[kDCAzMean] = "Mean of DCAz distribution"; fgVariableUnits[kDCAzMean] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed1] = - "Mean of DCAz distribution (trimmed 1)"; + "Mean of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzMeanBinnedTrimmed1] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed2] = - "Mean of DCAz distribution (trimmed 2)"; + "Mean of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzMeanBinnedTrimmed2] = "cm"; fgVariableNames[kDCAzMeanBinnedTrimmed3] = - "Mean of DCAz distribution (trimmed 3)"; + "Mean of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzMeanBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzRMS] = "RMS of DCAz distribution"; fgVariableUnits[kDCAzRMS] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed1] = - "RMS of DCAz distribution (trimmed 1)"; + "RMS of DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzRMSBinnedTrimmed1] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed2] = - "RMS of DCAz distribution (trimmed 2)"; + "RMS of DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzRMSBinnedTrimmed2] = "cm"; fgVariableNames[kDCAzRMSBinnedTrimmed3] = - "RMS of DCAz distribution (trimmed 3)"; + "RMS of DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzRMSBinnedTrimmed3] = "cm"; fgVariableNames[kDCAzSkewness] = "Skewness of DCAz distribution"; fgVariableUnits[kDCAzSkewness] = ""; fgVariableNames[kDCAzKurtosis] = "Kurtosis of DCAz distribution"; fgVariableUnits[kDCAzKurtosis] = ""; fgVariableNames[kDCAzFracAbove100um] = - "Fraction of tracks with |DCAz| > 100 um"; + "Fraction of tracks with |DCAz| > 100 um"; fgVariableUnits[kDCAzFracAbove100um] = ""; fgVariableNames[kDCAzFracAbove200um] = - "Fraction of tracks with |DCAz| > 200 um"; + "Fraction of tracks with |DCAz| > 200 um"; fgVariableUnits[kDCAzFracAbove200um] = ""; fgVariableNames[kDCAzFracAbove500um] = - "Fraction of tracks with |DCAz| > 500 um"; + "Fraction of tracks with |DCAz| > 500 um"; fgVariableUnits[kDCAzFracAbove500um] = ""; fgVariableNames[kDCAzFracAbove1mm] = "Fraction of tracks with |DCAz| > 1 mm"; fgVariableUnits[kDCAzFracAbove1mm] = ""; @@ -1103,18 +1088,18 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kDCAzFracAbove5mm] = "Fraction of tracks with |DCAz| > 5 mm"; fgVariableUnits[kDCAzFracAbove5mm] = ""; fgVariableNames[kDCAzFracAbove10mm] = - "Fraction of tracks with |DCAz| > 10 mm"; + "Fraction of tracks with |DCAz| > 10 mm"; fgVariableUnits[kDCAzFracAbove10mm] = ""; fgVariableNames[kDCAzNPeaks] = "Number of peaks in DCAz distribution"; fgVariableUnits[kDCAzNPeaks] = ""; fgVariableNames[kDCAzNPeaksTrimmed1] = - "Number of peaks in binned DCAz distribution (trimmed 1)"; + "Number of peaks in binned DCAz distribution (trimmed 1)"; fgVariableUnits[kDCAzNPeaksTrimmed1] = ""; fgVariableNames[kDCAzNPeaksTrimmed2] = - "Number of peaks in binned DCAz distribution (trimmed 2)"; + "Number of peaks in binned DCAz distribution (trimmed 2)"; fgVariableUnits[kDCAzNPeaksTrimmed2] = ""; fgVariableNames[kDCAzNPeaksTrimmed3] = - "Number of peaks in binned DCAz distribution (trimmed 3)"; + "Number of peaks in binned DCAz distribution (trimmed 3)"; fgVariableUnits[kDCAzNPeaksTrimmed3] = ""; fgVariableNames[kInteractionRate] = "Interaction rate"; fgVariableUnits[kInteractionRate] = "kHz"; @@ -1143,7 +1128,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMass] = "mass"; fgVariableUnits[kMass] = "GeV/c2"; fgVariableNames[kDeltaPtotTracks] = - "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; + "#it{p}_{Tot}^{#mu+} - #it{p}_{Tot}^{#mu-}"; fgVariableUnits[kDeltaPtotTracks] = "GeV/c"; fgVariableNames[kCharge] = "charge"; fgVariableUnits[kCharge] = ""; @@ -1164,12 +1149,12 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kTrackTimeRes] = "Resolution of the track time"; fgVariableUnits[kTrackTimeRes] = "ns"; fgVariableNames[kTrackTimeResRelative] = - "Relative resolution of the track time"; + "Relative resolution of the track time"; fgVariableUnits[kTrackTimeResRelative] = ""; fgVariableNames[kTrackAssocDeltaTime] = "Track-collision association #Deltat"; fgVariableUnits[kTrackAssocDeltaTime] = "ns"; fgVariableNames[kTrackAssocTimeThreshold] = - "Track-collision association time threshold"; + "Track-collision association time threshold"; fgVariableUnits[kTrackAssocTimeThreshold] = "ns"; fgVariableNames[kTrackAssocDeltaTimeNorm] = "|#Deltat| / threshold"; fgVariableUnits[kTrackAssocDeltaTimeNorm] = ""; @@ -1231,7 +1216,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kEMCalIsExotic] = "EMCal cluster is exotic"; fgVariableUnits[kEMCalIsExotic] = ""; fgVariableNames[kEMCalDistanceToBadChannel] = - "EMCal cluster distance to bad channel"; + "EMCal cluster distance to bad channel"; fgVariableUnits[kEMCalDistanceToBadChannel] = ""; fgVariableNames[kEMCalNLM] = "EMCal cluster no. local maxima"; fgVariableUnits[kEMCalNLM] = ""; @@ -1302,19 +1287,19 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kIsAmbiguous] = "is ambiguous track"; fgVariableUnits[kIsAmbiguous] = ""; fgVariableNames[kIsLegFromGamma] = - "is leg from #gamma #rightarror e^{+}e^{-}"; + "is leg from #gamma #rightarror e^{+}e^{-}"; fgVariableUnits[kIsLegFromGamma] = ""; fgVariableNames[kIsLegFromK0S] = - "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; + "is leg from K_{S}^{0} #rightarror #pi^{+}#pi^{-}"; fgVariableUnits[kIsLegFromK0S] = ""; fgVariableNames[kIsLegFromLambda] = - "is leg from #Lambda #rightarror p#pi^{-}"; + "is leg from #Lambda #rightarror p#pi^{-}"; fgVariableUnits[kIsLegFromLambda] = ""; fgVariableNames[kIsLegFromAntiLambda] = - "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; + "is leg from #bar{#Lambda} #rightarrow #bar{p}#pi^{+}"; fgVariableUnits[kIsLegFromAntiLambda] = ""; fgVariableNames[kIsLegFromOmega] = - "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; + "is leg from #Omega^{#mp} #rightarrow #LambdaKi^{#pm}"; fgVariableUnits[kIsLegFromOmega] = ""; fgVariableNames[kMuonNClusters] = "muon n-clusters"; fgVariableUnits[kMuonNClusters] = ""; @@ -1467,7 +1452,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kVertexingTauxyProjected] = "Pair pseudo-proper Tauxy"; fgVariableUnits[kVertexingTauxyProjected] = "ns"; fgVariableNames[kVertexingTauxyProjectedPoleJPsiMass] = - "Pair pseudo-proper Tauxy (with pole JPsi mass)"; + "Pair pseudo-proper Tauxy (with pole JPsi mass)"; fgVariableUnits[kVertexingTauxyProjectedPoleJPsiMass] = "ns"; fgVariableNames[kVertexingTauxyzProjected] = "Pair pseudo-proper Tauxyz"; fgVariableUnits[kVertexingTauxyzProjected] = "ns"; @@ -1534,10 +1519,10 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kQ1ZNCY] = "Q_{1,y}^{ZNC} "; fgVariableUnits[kQ1ZNCY] = ""; fgVariableNames[KIntercalibZNA] = - "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; + "ZNA^{common} - (ZNA1 + ZNA2 + ZNA3 + ZNA4)"; fgVariableUnits[KIntercalibZNA] = ""; fgVariableNames[KIntercalibZNC] = - "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; + "ZNC^{common} - (ZNC1 + ZNC2 + ZNC3 + ZNC4)"; fgVariableUnits[KIntercalibZNC] = ""; fgVariableNames[kQ1ZNACXX] = "Q_{1,x}^{ZNC} #dot Q_{1,x}^{ZNA} "; fgVariableUnits[kQ1ZNACXX] = ""; @@ -1956,7 +1941,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kQuadPhi] = "#varphi"; fgVariableUnits[kQuadPhi] = "rad."; fgVariableNames[kCosthetaDileptonDitrack] = - "cos#it{#theta}_{dilepton-ditrack}"; + "cos#it{#theta}_{dilepton-ditrack}"; fgVariableUnits[kCosthetaDileptonDitrack] = ""; fgVariableNames[kDitrackMass] = "mass di-track"; fgVariableUnits[kDitrackMass] = "GeV/c2"; @@ -2063,7 +2048,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kMultGlobalTracks] = "Mult global tracks ALICE3"; fgVariableUnits[kMultGlobalTracks] = ""; fgVariableNames[kMultGlobalTracksPV] = - "Mult global tracks that are PV ALICE3"; + "Mult global tracks that are PV ALICE3"; fgVariableUnits[kMultGlobalTracksPV] = ""; fgVariableNames[kMultMCNParticlesAll] = "Multiplicity MC all"; fgVariableUnits[kMultMCNParticlesAll] = ""; @@ -2142,7 +2127,7 @@ void VarManager::SetDefaultVarNames() fgVariableNames[kTOFEventTime] = "Event time reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTime] = "ns"; fgVariableNames[kTOFEventTimeErr] = - "Event time error reconstructed with ALICE3 TOF"; + "Event time error reconstructed with ALICE3 TOF"; fgVariableUnits[kTOFEventTimeErr] = "ns"; fgVariableNames[koTOFBeta] = "oTOF #beta"; fgVariableUnits[koTOFBeta] = ""; @@ -2290,13 +2275,13 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kNTPCmedianTimeShortC"] = kNTPCmedianTimeShortC; fgVarNamesMap["kDCAzBimodalityCoefficient"] = kDCAzBimodalityCoefficient; fgVarNamesMap["kDCAzBimodalityCoefficientBinned"] = - kDCAzBimodalityCoefficientBinned; + kDCAzBimodalityCoefficientBinned; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed1"] = - kDCAzBimodalityCoefficientBinnedTrimmed1; + kDCAzBimodalityCoefficientBinnedTrimmed1; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed2"] = - kDCAzBimodalityCoefficientBinnedTrimmed2; + kDCAzBimodalityCoefficientBinnedTrimmed2; fgVarNamesMap["kDCAzBimodalityCoefficientBinnedTrimmed3"] = - kDCAzBimodalityCoefficientBinnedTrimmed3; + kDCAzBimodalityCoefficientBinnedTrimmed3; fgVarNamesMap["kDCAzMean"] = kDCAzMean; fgVarNamesMap["kDCAzMeanBinnedTrimmed1"] = kDCAzMeanBinnedTrimmed1; fgVarNamesMap["kDCAzMeanBinnedTrimmed2"] = kDCAzMeanBinnedTrimmed2; @@ -2620,7 +2605,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kIsLegFromAntiLambda"] = kIsLegFromAntiLambda; fgVarNamesMap["kIsLegFromOmega"] = kIsLegFromOmega; fgVarNamesMap["kIsProtonFromLambdaAndAntiLambda"] = - kIsProtonFromLambdaAndAntiLambda; + kIsProtonFromLambdaAndAntiLambda; fgVarNamesMap["kIsDalitzLeg"] = kIsDalitzLeg; fgVarNamesMap["kBarrelNAssocsInBunch"] = kBarrelNAssocsInBunch; fgVarNamesMap["kBarrelNAssocsOutOfBunch"] = kBarrelNAssocsOutOfBunch; @@ -2689,13 +2674,13 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kMCWeight_rec"] = kMCWeight_rec; fgVarNamesMap["kMCdeltaeta_rec"] = kMCdeltaeta_rec; fgVarNamesMap["kMCCosChi_randomPhi_trans_rec"] = - kMCCosChi_randomPhi_trans_rec; + kMCCosChi_randomPhi_trans_rec; fgVarNamesMap["kMCWeight_randomPhi_trans_rec"] = - kMCWeight_randomPhi_trans_rec; + kMCWeight_randomPhi_trans_rec; fgVarNamesMap["kMCCosChi_randomPhi_trans_gen"] = - kMCCosChi_randomPhi_trans_gen; + kMCCosChi_randomPhi_trans_gen; fgVarNamesMap["kMCWeight_randomPhi_trans_gen"] = - kMCWeight_randomPhi_trans_gen; + kMCWeight_randomPhi_trans_gen; fgVarNamesMap["kMCParticleWeight"] = kMCParticleWeight; fgVarNamesMap["kMCCosTheta"] = kMCCosTheta; fgVarNamesMap["kMCdeltaphi"] = kMCdeltaphi; @@ -2746,7 +2731,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kVertexingTauzProjected"] = kVertexingTauzProjected; fgVarNamesMap["kVertexingTauxyProjected"] = kVertexingTauxyProjected; fgVarNamesMap["kVertexingTauxyProjectedPoleJPsiMass"] = - kVertexingTauxyProjectedPoleJPsiMass; + kVertexingTauxyProjectedPoleJPsiMass; fgVarNamesMap["kVertexingTauxyProjectedNs"] = kVertexingTauxyProjectedNs; fgVarNamesMap["kVertexingTauxyzProjected"] = kVertexingTauxyzProjected; fgVarNamesMap["kMCVertexingTauzProjected"] = kVertexingTauzProjected; @@ -3090,12 +3075,11 @@ void VarManager::SetDefaultVarNames() //__________________________________________________________________ bool VarManager::computeBarrelAssocTimeCompat( - float trackTime, float trackTimeRes, bool timeResIsRange, - bool isPVContributor, int64_t origBC, float origCollTime, - int origNumContrib, int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values) -{ + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float *values) { // // Mirrors the time-based association of // Common/Core/CollisionAssociation.h::runAssocWithTime for central barrel @@ -3120,10 +3104,10 @@ bool VarManager::computeBarrelAssocTimeCompat( // NOTE: the associator uses the raw trackTime here also for PV // contributors const int64_t bcOffsetMax = static_cast( - bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); + bcWindowForOneSigma * nSigma + timeMargin / BunchSpacingNS); const int64_t trackBCCache = - static_cast(static_cast(origBC) + - static_cast(trackTime) / BunchSpacingNS); + static_cast(static_cast(origBC) + + static_cast(trackTime) / BunchSpacingNS); if (std::abs(trackBCCache - collBC) > bcOffsetMax) { return false; } @@ -3138,7 +3122,7 @@ bool VarManager::computeBarrelAssocTimeCompat( float tTrack = trackTime; float tTrackRes = trackTimeRes; if (pvMode) { - tTrack = origCollTime; // time of the ORIGINAL collision + tTrack = origCollTime; // time of the ORIGINAL collision tTrackRes = static_cast(BunchSpacingNS); // 1 BC } @@ -3146,7 +3130,7 @@ bool VarManager::computeBarrelAssocTimeCompat( const int64_t bcOffset = origBC - collBC; const float collTimeRes2 = collTimeRes * collTimeRes; const float deltaTime = - tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); + tTrack - collTime + bcOffset * static_cast(BunchSpacingNS); float threshold = 0.f; if (pvMode) { threshold = tTrackRes; // margin NOT applied @@ -3154,12 +3138,12 @@ bool VarManager::computeBarrelAssocTimeCompat( threshold = tTrackRes + nSigma * std::sqrt(collTimeRes2) + timeMargin; } else { threshold = - nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; + nSigma * std::sqrt(collTimeRes2 + tTrackRes * tTrackRes) + timeMargin; } values[kTrackAssocDeltaTime] = deltaTime; values[kTrackAssocTimeThreshold] = threshold; values[kTrackAssocDeltaTimeNorm] = - (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; + (threshold > 0.f) ? std::abs(deltaTime) / threshold : 9999.f; return std::abs(deltaTime) < threshold; } diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 7b9284fc178..f10a712f92e 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -83,14 +83,13 @@ #include using SMatrix55 = - ROOT::Math::SMatrix>; + ROOT::Math::SMatrix>; using SMatrix5 = ROOT::Math::SVector; using Vec3D = ROOT::Math::SVector; //_________________________________________________________________________ -class VarManager : public TObject -{ - public: +class VarManager : public TObject { +public: // map the information contained in the objects passed to the Fill functions enum ObjTypes { // NOTE: Elements containing "Reduced" in their name refer strictly to @@ -125,8 +124,8 @@ class VarManager : public TObject TrackCov = BIT(1), TrackExtra = BIT(2), TrackPID = BIT( - 3), // used for basic PID properties (needed such that we can subscribe - // to a minimal set of PID tables): e,pi,K,p for TPC and TOF + 3), // used for basic PID properties (needed such that we can subscribe + // to a minimal set of PID tables): e,pi,K,p for TPC and TOF TrackPIDExtra = BIT(4), // extra PID information TrackDCA = BIT(5), TrackSelection = BIT(6), @@ -147,11 +146,11 @@ class VarManager : public TObject TrackTPCPID = BIT(21), TrackMFT = BIT(22), ReducedTrackCollInfo = - BIT(23), // TODO: remove it once new reduced data tables are produced - // for dielectron with ReducedTracksBarrelInfo + BIT(23), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo ReducedMuonCollInfo = - BIT(24), // TODO: remove it once new reduced data tables are produced - // for dielectron with ReducedTracksBarrelInfo + BIT(24), // TODO: remove it once new reduced data tables are produced + // for dielectron with ReducedTracksBarrelInfo MuonRealign = BIT(25), MuonCovRealign = BIT(26), MFTCov = BIT(27), @@ -204,9 +203,9 @@ class VarManager : public TObject enum EMCalClusterFilteringBits { kEMCalClusterIsMatched = - 0, // cluster has at least one matched track (from EMCALMatchedTracks) + 0, // cluster has at least one matched track (from EMCALMatchedTracks) kEMCalClusterUserCutsBits = - 1 // first bit for the user EMCal cluster selections + 1 // first bit for the user EMCal cluster selections }; // NOLINTNEXTLINE(readability-enum-initial-value) @@ -236,24 +235,24 @@ class VarManager : public TObject // be used to perform random selections at the collision // level) kIsPhysicsSelection, - kIsTVXTriggered, // Is trigger TVX - kIsNoTFBorder, // No time frame border - kIsNoITSROFBorder, // No ITS read out frame border (from event selection) + kIsTVXTriggered, // Is trigger TVX + kIsNoTFBorder, // No time frame border + kIsNoITSROFBorder, // No ITS read out frame border (from event selection) kIsNoITSROFBorderRecomputed, // No ITS read out frame border, computed here kIsNoSameBunch, // No collisions with same T0 BC - kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} - // and z_{PV FT0A-C} - kIsVertexITSTPC, // At least one ITS-TPC track - kIsVertexTOFmatched, // At least one TOF-matched track - kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame - // border (from event selection) - kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below - // maximum allowed value - kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are - // below maximum allowed values - kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are - // below maximum allowed values - kIsTriggerZNAZNC, // trigger ZNA && ZNC + kIsGoodZvtxFT0vsPV, // No collisions w/ difference between z_ {PV, tracks} + // and z_{PV FT0A-C} + kIsVertexITSTPC, // At least one ITS-TPC track + kIsVertexTOFmatched, // At least one TOF-matched track + kIsSel8, // TVX in Run3 && No time frame border && No ITS read out frame + // border (from event selection) + kIsGoodITSLayer3, // number of inactive chips on ITS layer 3 is below + // maximum allowed value + kIsGoodITSLayer0123, // numbers of inactive chips on ITS layers 0-3 are + // below maximum allowed values + kIsGoodITSLayersAll, // numbers of inactive chips on all ITS layers are + // below maximum allowed values + kIsTriggerZNAZNC, // trigger ZNA && ZNC kIsINT7, kIsEMC7, kIsINT7inMUON, @@ -384,10 +383,10 @@ class VarManager : public TObject kQ1Y0B, kQ1X0C, kQ1Y0C, - kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power - // 0), sub-event A - kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power - // 0), sub-event A + kQ2X0A, // q-vector (e.g. from TPC) with x component (harmonic 2 and power + // 0), sub-event A + kQ2Y0A, // q-vector (e.g. from TPC) with y component (harmonic 2 and power + // 0), sub-event A kQ2X0APOS, // q-vector (e.g. from TPC) with x component (harmonic 2 and // power 1), Pos. TPC kQ2Y0APOS, // q-vector (e.g. from TPC) with y component (harmonic 2 and @@ -537,15 +536,15 @@ class VarManager : public TObject kV2ME_EP, kWV2ME_SP, kWV2ME_EP, - kTwoR2SP1, // Scalar product resolution of event1 for ME technique - kTwoR2SP2, // Scalar product resolution of event2 for ME technique - kTwoR2EP1, // Event plane resolution of event2 for ME technique - kTwoR2EP2, // Event plane resolution of event2 for ME technique - kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique - kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique - kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique - kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME - // technique + kTwoR2SP1, // Scalar product resolution of event1 for ME technique + kTwoR2SP2, // Scalar product resolution of event2 for ME technique + kTwoR2EP1, // Event plane resolution of event2 for ME technique + kTwoR2EP2, // Event plane resolution of event2 for ME technique + kDeltaPhiME_TPC, // Delta phi of VM to TPC event plane for ME technique + kDeltaPhiME_FT0C, // Delta phi of VM to FT0C event plane for ME technique + kDeltaPhiME_FT0A, // Delta phi of VM to FT0A event plane for ME technique + kCos2DeltaPhiME_TPC, // Cos(2*Delta phi) of VM to TPC event plane for ME + // technique kCos2DeltaPhiME_FT0C, // Cos(2*Delta phi) of VM to FT0C event plane for ME // technique kCos2DeltaPhiME_FT0A, // Cos(2*Delta phi) of VM to FT0A event plane for ME @@ -553,8 +552,8 @@ class VarManager : public TObject kA2EPME_TPC, // A2 of VM to TPC event plane for ME technique kA2EPME_FT0C, // A2 of VM to FT0C event plane for ME technique kA2EPME_FT0A, // A2 of VM to FT0A event plane for ME technique - kNPairsPerEvent, // number of pairs per event in same-event or mixed-event - // pairing + kNPairsPerEvent, // number of pairs per event in same-event or mixed-event + // pairing kInteractionRate, // Variables for event mixing with cumulant @@ -620,8 +619,8 @@ class VarManager : public TObject kTrackTime, kTrackTimeRes, kTrackTimeResRelative, - kTrackAssocDeltaTime, // track time - time of the associated collision (BC - // offset included), ns + kTrackAssocDeltaTime, // track time - time of the associated collision (BC + // offset included), ns kTrackAssocTimeThreshold, // time-compatibility threshold of the // track-to-collision associator (margin // included), ns @@ -690,10 +689,10 @@ class VarManager : public TObject kTOFnSigmaKa, kTOFnSigmaPr, kTrackTimeResIsRange, // Gaussian or range (see Framework/DataTypes) - kPVContributor, // This track has contributed to the collision vertex fit - // (see Framework/DataTypes) - kOrphanTrack, // Track has no association with any collision vertex (see - // Framework/DataTypes) + kPVContributor, // This track has contributed to the collision vertex fit + // (see Framework/DataTypes) + kOrphanTrack, // Track has no association with any collision vertex (see + // Framework/DataTypes) kIsAmbiguous, kIsLegFromGamma, kIsLegFromK0S, @@ -703,7 +702,7 @@ class VarManager : public TObject kIsProtonFromLambdaAndAntiLambda, kIsDalitzLeg, // Up to 8 dalitz selections kBarrelNAssocsInBunch = - kIsDalitzLeg + 8, // number of in bunch collision associations + kIsDalitzLeg + 8, // number of in bunch collision associations kBarrelNAssocsOutOfBunch, // number of out of bunch collision associations kEMCalEnergy, // EMCal cluster energy kEMCalCoreEnergy, // EMCal cluster core energy @@ -719,11 +718,11 @@ class VarManager : public TObject // bad channel kEMCalNLM, // number of local maxima of the EMCal cluster kEMCalDefinition, // EMCal cluster definition - kEMCalEoverP, // EMCal cluster energy over matched track momentum - kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the - // track - kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the - // track + kEMCalEoverP, // EMCal cluster energy over matched track momentum + kEMCalMatchDeltaEta, // eta residual of the matched EMCal cluster w.r.t. the + // track + kEMCalMatchDeltaPhi, // phi residual of the matched EMCal cluster w.r.t. the + // track kNBarrelTrackVariables, // Muon track variables @@ -1273,10 +1272,7 @@ class VarManager : public TObject kDplusToPiKPi }; - enum EventFilters { kDoubleGap = 0, - kSingleGapA, - kSingleGapC, - kITSUPCMode }; + enum EventFilters { kDoubleGap = 0, kSingleGapA, kSingleGapC, kITSUPCMode }; enum MuonExtrapolation { // Index used to set different options for Muon propagation @@ -1289,19 +1285,17 @@ class VarManager : public TObject static TString fgVariableNames[kNVars]; // variable names static TString fgVariableUnits[kNVars]; // variable units static std::map - fgVarNamesMap; // key: variables short name, value: order in the Variables - // enum + fgVarNamesMap; // key: variables short name, value: order in the Variables + // enum static void SetDefaultVarNames(); - static void SetUseVariable(int var) - { + static void SetUseVariable(int var) { if (var >= 0 && var < kNVars) { fgUsedVars[var] = kTRUE; } SetVariableDependencies(); } - static void SetUseVars(const bool* usedVars) - { + static void SetUseVars(const bool *usedVars) { for (int i = 0; i < kNVars; ++i) { if (usedVars[i]) { fgUsedVars[i] = true; // overwrite only the variables that are being @@ -1311,14 +1305,12 @@ class VarManager : public TObject } SetVariableDependencies(); } - static void SetUseVars(const std::vector& usedVars) - { - for (auto const& var : usedVars) { + static void SetUseVars(const std::vector &usedVars) { + for (auto const &var : usedVars) { fgUsedVars[var] = true; } } - static bool GetUsedVar(int var) - { + static bool GetUsedVar(int var) { if (var >= 0 && var < kNVars) { return fgUsedVars[var]; } @@ -1326,14 +1318,13 @@ class VarManager : public TObject } // Flag to set PV recalculation via KF - static void SetPVrecalculationKF(const bool pvRecalKF) - { + static void SetPVrecalculationKF(const bool pvRecalKF) { fgPVrecalKF = pvRecalKF; } // Setup the collision system - static void SetCollisionSystem(const TString& system, float energy); - static void SetCollisionSystem(o2::parameters::GRPLHCIFData* grplhcif); + static void SetCollisionSystem(const TString &system, float energy); + static void SetCollisionSystem(o2::parameters::GRPLHCIFData *grplhcif); static void SetMagneticField(float magField) { fgMagField = magField; } @@ -1343,15 +1334,13 @@ class VarManager : public TObject static float GetMatchingPlane() { return fgzMatching; } // Set z shift for forward tracks - static void SetZShift(float z) - { + static void SetZShift(float z) { fgzShiftFwd = z; fgUseTopBottomShift = false; } // Set x, y and z shifts for forward tracks - static void Set3DShift(float x, float y, float z) - { + static void Set3DShift(float x, float y, float z) { fgxShiftFwd = x; fgyShiftFwd = y; fgzShiftFwd = z; @@ -1362,8 +1351,7 @@ class VarManager : public TObject // tracks Top shifts are stored in fgx/y/zShiftFwd; bottom shifts in // fgx/y/zShiftFwdBottom static void SetTopBottom3DShift(float xTop, float yTop, float zTop, - float xBottom, float yBottom, float zBottom) - { + float xBottom, float yBottom, float zBottom) { fgxShiftFwd = xTop; fgyShiftFwd = yTop; fgzShiftFwd = zTop; @@ -1373,9 +1361,8 @@ class VarManager : public TObject fgUseTopBottomShift = true; } - static void GetFwdShiftForY(float y, float& xShift, float& yShift, - float& zShift) - { + static void GetFwdShiftForY(float y, float &xShift, float &yShift, + float &zShift) { if (fgUseTopBottomShift && y < 0.f) { xShift = fgxShiftFwdBottom; yShift = fgyShiftFwdBottom; @@ -1388,8 +1375,7 @@ class VarManager : public TObject } // Setup the 2 prong KFParticle - static void SetupTwoProngKFParticle(float magField) - { + static void SetupTwoProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1400,8 +1386,7 @@ class VarManager : public TObject static void SetupTwoProngDCAFitter(float magField, bool propagateToPCA, float maxR, float maxDZIni, float minParamChange, - float minRelChi2Change, bool useAbsDCA) - { + float minRelChi2Change, bool useAbsDCA) { fgFitterTwoProngBarrel.setBz(magField); fgFitterTwoProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterTwoProngBarrel.setMaxR(maxR); @@ -1416,8 +1401,7 @@ class VarManager : public TObject static void SetupTwoProngFwdDCAFitter(float magField, bool propagateToPCA, float maxR, float minParamChange, float minRelChi2Change, - bool useAbsDCA) - { + bool useAbsDCA) { fgFitterTwoProngFwd.setBz(magField); fgFitterTwoProngFwd.setPropagateToPCA(propagateToPCA); fgFitterTwoProngFwd.setMaxR(maxR); @@ -1427,21 +1411,18 @@ class VarManager : public TObject fgUsedKF = false; } // Use MatLayerCylSet to correct MCS in fwdtrack propagation - static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet* m) - { + static void SetupMatLUTFwdDCAFitter(o2::base::MatLayerCylSet *m) { fgFitterTwoProngFwd.setTGeoMat(false); fgFitterTwoProngFwd.setMatLUT(m); } // Use GeometryManager to correct MCS in fwdtrack propagation static void SetupTGeoFwdDCAFitter() { fgFitterTwoProngFwd.setTGeoMat(true); } // No material budget in fwdtrack propagation - static void SetupFwdDCAFitterNoCorr() - { + static void SetupFwdDCAFitterNoCorr() { fgFitterTwoProngFwd.setTGeoMat(false); } // Setup the 3 prong KFParticle - static void SetupThreeProngKFParticle(float magField) - { + static void SetupThreeProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1450,8 +1431,7 @@ class VarManager : public TObject static void SetupThreeProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, - float minRelChi2Change, bool useAbsDCA) - { + float minRelChi2Change, bool useAbsDCA) { fgFitterThreeProngBarrel.setBz(magField); fgFitterThreeProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterThreeProngBarrel.setMaxR(maxR); @@ -1462,8 +1442,7 @@ class VarManager : public TObject } // Setup the 4 prong KFParticle - static void SetupFourProngKFParticle(float magField) - { + static void SetupFourProngKFParticle(float magField) { KFParticle::SetField(magField); fgUsedKF = true; } @@ -1472,8 +1451,7 @@ class VarManager : public TObject static void SetupFourProngDCAFitter(float magField, bool propagateToPCA, float maxR, float /*maxDZIni*/, float minParamChange, - float minRelChi2Change, bool useAbsDCA) - { + float minRelChi2Change, bool useAbsDCA) { fgFitterFourProngBarrel.setBz(magField); fgFitterFourProngBarrel.setPropagateToPCA(propagateToPCA); fgFitterFourProngBarrel.setMaxR(maxR); @@ -1483,77 +1461,75 @@ class VarManager : public TObject fgUsedKF = false; } - static auto getEventPlane(int harm, float qnxa, float qnya) - { + static auto getEventPlane(int harm, float qnxa, float qnya) { // Compute event plane angle from qn vector components for the sub-event A return (1.0 / harm) * TMath::ATan2(qnya, qnxa); }; static float getDeltaPsiInRange(float psi1, float psi2, - unsigned int harmonic) - { + unsigned int harmonic) { return RecoDecay::constrainAngle( - psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); + psi1 - psi2, -o2::constants::math::PI / harmonic, harmonic); } template static o2::dataformats::VertexBase - RecalculatePrimaryVertex(T const& track0, T const& track1, - const T1& collision); + RecalculatePrimaryVertex(T const &track0, T const &track1, + const T1 &collision); static std::tuple - BimodalityCoefficientUnbinned(const std::vector& data); + BimodalityCoefficientUnbinned(const std::vector &data); static std::tuple - BimodalityCoefficientAndNPeaks(const std::vector& data, float binWidth, - int trim = 0, float min = -15.0, - float max = 15.0); + BimodalityCoefficientAndNPeaks(const std::vector &data, float binWidth, + int trim = 0, float min = -15.0, + float max = 15.0); template - static o2::track::TrackParCovFwd FwdToTrackPar(const T& track, const C& cov); + static o2::track::TrackParCovFwd FwdToTrackPar(const T &track, const C &cov); template static o2::dataformats::GlobalFwdTrack - PropagateMuon(const T& muon, const C& collision, int endPoint = kToVertex); + PropagateMuon(const T &muon, const C &collision, int endPoint = kToVertex); template - static o2::track::TrackParCovFwd PropagateFwd(const T& track, const C& cov, + static o2::track::TrackParCovFwd PropagateFwd(const T &track, const C &cov, float z); 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 FillBC(T const& bc, float* values = nullptr); + static void FillBC(T const &bc, float *values = nullptr); template - static void FillEvent(T const& event, float* values = nullptr); + static void FillEvent(T const &event, float *values = nullptr); template - static void FillEventTracks(T const& tracks, float* values = nullptr); + static void FillEventTracks(T const &tracks, float *values = nullptr); template - static void FillTimeFrame(T const& tfTable, float* values = nullptr); + static void FillTimeFrame(T const &tfTable, float *values = nullptr); template - static void FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, - float* values = nullptr); + static void FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values = nullptr); template - static void FillTwoEvents(T const& ev1, T const& ev2, - float* values = nullptr); + static void FillTwoEvents(T const &ev1, T const &ev2, + float *values = nullptr); template - static void FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& tracks1, - T2 const& tracks2, float* values = nullptr); + static void FillTwoMixEvents(T1 const &ev1, T1 const &ev2, T2 const &tracks1, + T2 const &tracks2, float *values = nullptr); template - static void FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, - float* values = nullptr); + static void FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values = nullptr); template - static void FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, - T const& h_v22ev2, T const& h_v24ev2, - T1 const& t1, T2 const& t2, - float* values = nullptr); + static void FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, + T const &h_v22ev2, T const &h_v24ev2, + T1 const &t1, T2 const &t2, + float *values = nullptr); template - static void FillTrack(T const& track, float* values = nullptr); + static void FillTrack(T const &track, float *values = nullptr); template - static void FillPhoton(T const& track, float* values = nullptr); + static void FillPhoton(T const &track, float *values = nullptr); template - static void FillTrackEMCal(T const& cluster, float trackP = -1.0f, + static void FillTrackEMCal(T const &cluster, float trackP = -1.0f, float deltaEta = -999.0f, float deltaPhi = -999.0f, - float* values = nullptr); + float *values = nullptr); template - static void FillTrackCollision(T const& track, C const& collision, - float* values = nullptr); + static void FillTrackCollision(T const &track, C const &collision, + float *values = nullptr); // Re-evaluation of the time compatibility of a (barrel track, collision) // association, mirroring // Common/Core/CollisionAssociation.h::runAssocWithTime. Fills @@ -1564,197 +1540,196 @@ class VarManager : public TObject // used at skimming time (timeMargin and nSigma may be smaller in order to // tighten the association at analysis level). static bool computeBarrelAssocTimeCompat( - float trackTime, float trackTimeRes, bool timeResIsRange, - bool isPVContributor, int64_t origBC, float origCollTime, - int origNumContrib, int64_t collBC, float collTime, float collTimeRes, - float nSigma, float timeMargin, int bcWindowForOneSigma, - int usePVAssociation, int maxPvContribLowMult, float* values = nullptr); + float trackTime, float trackTimeRes, bool timeResIsRange, + bool isPVContributor, int64_t origBC, float origCollTime, + int origNumContrib, int64_t collBC, float collTime, float collTimeRes, + float nSigma, float timeMargin, int bcWindowForOneSigma, + int usePVAssociation, int maxPvContribLowMult, float *values = nullptr); // Same as above for DQ skimmed tables: track = // ReducedTracks+ReducedTracksBarrel, collision/origCollision = // ReducedEvents+ReducedEventsExtended template static bool isBarrelAssocTimeCompatible( - T const& track, C const& collision, C const& origCollision, float nSigma, - float timeMargin, int bcWindowForOneSigma, int usePVAssociation, - int maxPvContribLowMult, float* values = nullptr); + T const &track, C const &collision, C const &origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float *values = nullptr); template - static void FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, - C const& collision, float* values = nullptr); + static void FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, + C const &collision, float *values = nullptr); template static void - FillTrackCollisionMC(T1 const& track, const std::array& collPos, - float massHyp = -1., float* values = nullptr); + FillTrackCollisionMC(T1 const &track, const std::array &collPos, + float massHyp = -1., float *values = nullptr); template - static void FillTrackCollisionMatCorr(T const& track, C const& collision, - M const& materialCorr, - P const& propagator, - float* values = nullptr); + static void FillTrackCollisionMatCorr(T const &track, C const &collision, + M const &materialCorr, + P const &propagator, + float *values = nullptr); template - static void FillTrackMC(const U& mcStack, T const& track, - float* values = nullptr); + static void FillTrackMC(const U &mcStack, T const &track, + float *values = nullptr); template static void - FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values = nullptr, - float Translow = 1. / 3, float Transhigh = 2. / 3, - float Accweight = 1.0f); + FillEnergyCorrelatorsMC(T const &track, T1 const &t1, float *values = nullptr, + float Translow = 1. / 3, float Transhigh = 2. / 3, + float Accweight = 1.0f); template - static void FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, - const C& collision, - float* values = nullptr); + static void FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, + const C &collision, + float *values = nullptr); template - static void FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, - const C& collision, float* values = nullptr); + static void FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, + const C &collision, float *values = nullptr); template - static void FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, - const C& collision, C2 const& mftcov, - float* values = nullptr); + static void FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, + const C &collision, C2 const &mftcov, + float *values = nullptr); template - static void FillPair(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPair(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillPairRotation(T1 const& t1, T2 const& t2, int rotation, - float* values = nullptr); + static void FillPairRotation(T1 const &t1, T2 const &t2, int rotation, + float *values = nullptr); template - static void FillPairRotation_ME(T const& t1, T const& t2, int rotation, - float* values = nullptr); + static void FillPairRotation_ME(T const &t1, T const &t2, int rotation, + float *values = nullptr); template - static void FillPairCollision(C const& collision, T1 const& t1, T2 const& t2, - float* values = nullptr); + static void FillPairCollision(C const &collision, T1 const &t1, T2 const &t2, + float *values = nullptr); template - static void FillPairCollisionMatCorr(C const& collision, T1 const& t1, - T2 const& t2, M const& materialCorr, - P const& propagator, - float* values = nullptr); + static void FillPairCollisionMatCorr(C const &collision, T1 const &t1, + T2 const &t2, M const &materialCorr, + P const &propagator, + float *values = nullptr); template static void - FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, - PairCandidateType pairType = kTripleCandidateToEEPhoton); + FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, float *values = nullptr, + PairCandidateType pairType = kTripleCandidateToEEPhoton); template - static void FillPairME(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairME(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillPairMEAcrossTFs(T const& t1, T const& t2, - float* values = nullptr); + static void FillPairMEAcrossTFs(T const &t1, T const &t2, + float *values = nullptr); template - static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairMC(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, - float* values = nullptr); + static void FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, + float *values = nullptr); template - static void FillQuadMC(T1 const& dilepton, T2 const& track1, T2 const& track2, - float* values = nullptr); + static void FillQuadMC(T1 const &dilepton, T2 const &track1, T2 const &track2, + float *values = nullptr); template - static void FillPairVertexing(C const& collision, T const& t1, T const& t2, - float* values = nullptr); + static void FillPairVertexing(C const &collision, T const &t1, T const &t2, + float *values = nullptr); template static void FillPairVertexingRecomputePV( - C const& /*collision*/, T const& t1, T const& t2, - const o2::dataformats::VertexBase& pvRefitted, float* values = nullptr); + C const & /*collision*/, T const &t1, T const &t2, + const o2::dataformats::VertexBase &pvRefitted, float *values = nullptr); template - static void FillTripletVertexing(C const& collision, T const& t1, T const& t2, - T const& t3, PairCandidateType tripletType, - float* values = nullptr); + static void FillTripletVertexing(C const &collision, T const &t1, T const &t2, + T const &t3, PairCandidateType tripletType, + float *values = nullptr); template - static void FillDileptonTrackVertexing(C const& collision, T1 const& lepton1, - T1 const& lepton2, T1 const& track, - float* values); + static void FillDileptonTrackVertexing(C const &collision, T1 const &lepton1, + T1 const &lepton2, T1 const &track, + float *values); template - static void FillDileptonHadron(T1 const& dilepton, T2 const& hadron, - float* values = nullptr, + static void FillDileptonHadron(T1 const &dilepton, T2 const &hadron, + float *values = nullptr, float hadronMass = 0.0f); template static void FillEnergyCorrelatorTriple( - C const& collision, T1 const& lepton1, T2 const& lepton2, - T3 const& hadron, float* values = nullptr, float Translow = 1. / 3, - float Transhigh = 2. / 3, bool applyFitMass = false, - float sidebandMass = 0.0f, float weight = 1.0f); + C const &collision, T1 const &lepton1, T2 const &lepton2, + T3 const &hadron, float *values = nullptr, float Translow = 1. / 3, + float Transhigh = 2. / 3, bool applyFitMass = false, + float sidebandMass = 0.0f, float weight = 1.0f); template static void FillEnergyCorrelatorsUnfoldingTriple( - T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, - T5 const& t1, float* values = nullptr, bool applyFitMass = false, - float Effweight_rec = 1.f, float Accweight_gen = 1.f, - float Translow = 1. / 3, float Transhigh = 2. / 3); + T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, + T5 const &t1, float *values = nullptr, bool applyFitMass = false, + float Effweight_rec = 1.f, float Accweight_gen = 1.f, + float Translow = 1. / 3, float Transhigh = 2. / 3); template - static void FillDileptonPhoton(T1 const& dilepton, T2 const& photon, - float* values = nullptr); + static void FillDileptonPhoton(T1 const &dilepton, T2 const &photon, + float *values = nullptr); template - static void FillHadron(T const& hadron, float* values = nullptr, + static void FillHadron(T const &hadron, float *values = nullptr, float hadronMass = 0.0f); template - static void FillSingleDileptonCharmHadron(Cand const& candidate, H hfHelper, - T& bdtScoreCharmHad, - float* values = nullptr); + static void FillSingleDileptonCharmHadron(Cand const &candidate, H hfHelper, + T &bdtScoreCharmHad, + float *values = nullptr); template - static void FillDileptonCharmHadron(DQ const& dilepton, HF const& charmHadron, - H hfHelper, T& bdtScoreCharmHad, - float* values = nullptr); + static void FillDileptonCharmHadron(DQ const &dilepton, HF const &charmHadron, + H hfHelper, T &bdtScoreCharmHad, + float *values = nullptr); template static void FillQVectorFromGFW( - C const& collision, A const& compA11, A const& compB11, A const& compC11, - A const& compA21, A const& compB21, A const& compC21, A const& compA31, - A const& compB31, A const& compC31, A const& compA41, A const& compB41, - A const& compC41, A const& compA23, A const& compA42, float S10A = 1.0, - float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, - float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, - float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, - float* values = nullptr); + C const &collision, A const &compA11, A const &compB11, A const &compC11, + A const &compA21, A const &compB21, A const &compC21, A const &compA31, + A const &compB31, A const &compC31, A const &compA41, A const &compB41, + A const &compC41, A const &compA23, A const &compA42, float S10A = 1.0, + float S10B = 1.0, float S10C = 1.0, float S11A = 1.0, float S11B = 1.0, + float S11C = 1.0, float S12A = 1.0, float S13A = 1.0, float S14A = 1.0, + float S21A = 1.0, float S22A = 1.0, float S31A = 1.0, float S41A = 1.0, + float *values = nullptr); template - static void FillQVectorFromCentralFW(C const& collision, - float* values = nullptr); + static void FillQVectorFromCentralFW(C const &collision, + float *values = nullptr); template - static void FillNewQVectorFromCentralFW(C const& collision, - float* values = nullptr); + static void FillNewQVectorFromCentralFW(C const &collision, + float *values = nullptr); template - static void FillSpectatorPlane(C const& collision, float* values = nullptr); + static void FillSpectatorPlane(C const &collision, float *values = nullptr); template - static void FillPairVn(T1 const& t1, T2 const& t2, float* values = nullptr); + static void FillPairVn(T1 const &t1, T2 const &t2, float *values = nullptr); template - static void FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, - T3 const& hadron2, - float* values = nullptr); + static void FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, + T3 const &hadron2, + float *values = nullptr); template static void - FillDileptonTrackTrackVertexing(C const& collision, T1 const& lepton1, - T1 const& lepton2, T1 const& track1, - T1 const& track2, float* values); + FillDileptonTrackTrackVertexing(C const &collision, T1 const &lepton1, + T1 const &lepton2, T1 const &track1, + T1 const &track2, float *values); template - static void FillZDC(const T& zdc, float* values = nullptr); + static void FillZDC(const T &zdc, float *values = nullptr); template - static void FillBdtScore(const T& bdtScore, float* values = nullptr); + static void FillBdtScore(const T &bdtScore, float *values = nullptr); template - static void FillFIT(const T1& bc, const T2& bcs, const T3& ft0s, - const T4& fv0as, const T5& fdds, float* values = nullptr); + static void FillFIT(const T1 &bc, const T2 &bcs, const T3 &ft0s, + const T4 &fv0as, const T5 &fdds, float *values = nullptr); template - static void FillPairAlice3(T1 const& t1, T2 const& t2, - float* values = nullptr); + static void FillPairAlice3(T1 const &t1, T2 const &t2, + float *values = nullptr); template - static void FillEventAlice3(T const& event, float* values = nullptr); + static void FillEventAlice3(T const &event, float *values = nullptr); template - static void FillTrackAlice3(T const& track, float* values = nullptr); + static void FillTrackAlice3(T const &track, float *values = nullptr); template - static void FillResolutions(M const& mcTrack, T const& track, - float* values = nullptr); + static void FillResolutions(M const &mcTrack, T const &track, + float *values = nullptr); template - static void FillPairVertexingAlice3(C const& collision, T const& t1, - T const& t2, bool propToSV = false, - float* values = nullptr); + static void FillPairVertexingAlice3(C const &collision, T const &t1, + T const &t2, bool propToSV = false, + float *values = nullptr); template static void FillTripletVertexingALICE3( - C const& collision, T const& t1, T const& t2, T const& t3, - VarManager::PairCandidateType tripletType, float* values = nullptr); + C const &collision, T const &t1, T const &t2, T const &t3, + VarManager::PairCandidateType tripletType, float *values = nullptr); - static void SetCalibrationObject(CalibObjects calib, TObject* obj) - { + static void SetCalibrationObject(CalibObjects calib, TObject *obj) { fgCalibs[calib] = obj; // Check whether all the needed objects for TPC postcalibration are // available @@ -1778,8 +1753,7 @@ class VarManager : public TObject } } - static void SetCalibrationType(int type, bool useInterpolation = true) - { + static void SetCalibrationType(int type, bool useInterpolation = true) { if (type < 0 || type > 2) { LOG(fatal) << "Invalid calibration type. Must be 0, 1, or 2."; } @@ -1788,33 +1762,29 @@ class VarManager : public TObject } static double ComputePIDcalibration(int species, double nSigmaValue); - static void SetEfficiencyObject(int type, TObject* obj); - static void FillEfficiency(float* values = nullptr); - static void SetPhiMap(TObject* h1, TObject* h2, bool option); + static void SetEfficiencyObject(int type, TObject *obj); + static void FillEfficiency(float *values = nullptr); + static void SetPhiMap(TObject *h1, TObject *h2, bool option); static double SampleRotationPhi(double pT, double eta, int charge); - static TObject* GetCalibrationObject(CalibObjects calib) - { + static TObject *GetCalibrationObject(CalibObjects calib) { auto obj = fgCalibs.find(calib); if (obj == fgCalibs.end()) { return nullptr; } return obj->second; } - static void SetTPCInterSectorBoundary(float boundarySize) - { + static void SetTPCInterSectorBoundary(float boundarySize) { fgTPCInterSectorBoundary = boundarySize; } static void SetITSROFBorderselection(int bias, int length, int marginLow, - int marginHigh) - { + int marginHigh) { fgITSROFbias = bias; fgITSROFlength = length; fgITSROFBorderMarginLow = marginLow; fgITSROFBorderMarginHigh = marginHigh; } - static void SetSORandEOR(uint64_t sor, uint64_t eor) - { + static void SetSORandEOR(uint64_t sor, uint64_t eor) { fgSOR = sor; fgEOR = eor; } @@ -1823,11 +1793,11 @@ class VarManager : public TObject ~VarManager() override; static float - fgValues[kNVars]; // array holding all variables computed during analysis + fgValues[kNVars]; // array holding all variables computed during analysis static void ResetValues(int startValue = 0, int endValue = kNVars, - float* values = nullptr); + float *values = nullptr); - private: +private: static bool fgUsedVars[kNVars]; // holds flags for when the corresponding // variable is needed (e.g., in the histogram // manager, in cuts, mixing handler, etc.) @@ -1849,33 +1819,32 @@ class VarManager : public TObject static float fgMassofCollidingParticle; // mass of the colliding particle static float fgTPCInterSectorBoundary; // TPC inter-sector border size at the // TPC outer radius, in cm - static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) - static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) - static int fgITSROFBorderMarginLow; // ITS ROF border low margin - static int fgITSROFBorderMarginHigh; // ITS ROF border high margin - static uint64_t fgSOR; // Timestamp for start of run - static uint64_t fgEOR; // Timestamp for end of run + static int fgITSROFbias; // ITS ROF bias (from ALPIDE parameters) + static int fgITSROFlength; // ITS ROF length (from ALPIDE parameters) + static int fgITSROFBorderMarginLow; // ITS ROF border low margin + static int fgITSROFBorderMarginHigh; // ITS ROF border high margin + static uint64_t fgSOR; // Timestamp for start of run + static uint64_t fgEOR; // Timestamp for end of run static ROOT::Math::PxPyPzEVector - fgBeamA; // beam from A-side 4-momentum vector + fgBeamA; // beam from A-side 4-momentum vector static ROOT::Math::PxPyPzEVector - fgBeamC; // beam from C-side 4-momentum vector + fgBeamC; // beam from C-side 4-momentum vector // static void FillEventDerived(float* values = nullptr); - static void FillTrackDerived(float* values = nullptr); + static void FillTrackDerived(float *values = nullptr); template - static auto getRotatedCovMatrixXX(const T& matrix, U phi, V theta); + static auto getRotatedCovMatrixXX(const T &matrix, U phi, V theta); + template static KFPTrack createKFPTrackFromTrack(const T &track); template - static KFPTrack createKFPTrackFromTrack(const T& track); + static KFPTrack createKFPFwdTrackFromFwdTrack(const T &muon); template - static KFPTrack createKFPFwdTrackFromFwdTrack(const T& muon); - template - static KFPVertex createKFPVertexFromCollision(const T& collision); - static float calculateCosPA(const KFParticle& kfp, const KFParticle& PV); + static KFPVertex createKFPVertexFromCollision(const T &collision); + static float calculateCosPA(const KFParticle &kfp, const KFParticle &PV); template - static float calculatePhiV(const T1& t1, const T2& t2); + static float calculatePhiV(const T1 &t1, const T2 &t2); template - static float LorentzTransformJpsihadroncosChi(const TString& Option, - const T1& v1, const T2& v2); + static float LorentzTransformJpsihadroncosChi(const TString &Option, + const T1 &v1, const T2 &v2); static o2::vertexing::DCAFitterN<2> fgFitterTwoProngBarrel; static o2::vertexing::DCAFitterN<3> fgFitterThreeProngBarrel; @@ -1884,39 +1853,38 @@ class VarManager : public TObject static o2::vertexing::FwdDCAFitterN<3> fgFitterThreeProngFwd; static o2::globaltracking::MatchGlobalFwd mMatching; - static std::map - fgCalibs; // map of calibration histograms + static std::map + fgCalibs; // map of calibration histograms static std::array - fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton + fgRunTPCPostCalibration; // 0-electron, 1-pion, 2-kaon, 3-proton static int - fgCalibrationType; // 0 - no calibration, 1 - calibration vs - // (TPCncls,pIN,eta) typically for pp, 2 - calibration - // vs (eta,nPV,nLong,tLong) typically for PbPb + fgCalibrationType; // 0 - no calibration, 1 - calibration vs + // (TPCncls,pIN,eta) typically for pp, 2 - calibration + // vs (eta,nPV,nLong,tLong) typically for PbPb static bool fgUseInterpolatedCalibration; // use interpolated calibration // histograms (default: true) static int fgEfficiencyType; // type of efficiency correction to apply - static TObject* fgEfficiencyHist; // histogram for efficiency correction + static TObject *fgEfficiencyHist; // histogram for efficiency correction - static TObject* fgPosiPhiMap; // phi map to correct track rotation - static TObject* fgNegaPhiMap; + static TObject *fgPosiPhiMap; // phi map to correct track rotation + static TObject *fgNegaPhiMap; static bool fgUsePhiCorrection; - VarManager& operator=(const VarManager& c); - VarManager(const VarManager& c); + VarManager &operator=(const VarManager &c); + VarManager(const VarManager &c); }; template -o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T& track, - const C& cov) -{ +o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T &track, + const C &cov) { double chi2 = track.chi2(); SMatrix5 tpars(track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()); - std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), - cov.cPhiX(), cov.cPhiY(), cov.cPhiPhi(), - cov.cTglX(), cov.cTglY(), cov.cTglPhi(), - cov.cTglTgl(), cov.c1PtX(), cov.c1PtY(), + std::vector v1{cov.cXX(), cov.cXY(), cov.cYY(), + cov.cPhiX(), cov.cPhiY(), cov.cPhiPhi(), + cov.cTglX(), cov.cTglY(), cov.cTglPhi(), + cov.cTglTgl(), cov.c1PtX(), cov.c1PtY(), cov.c1PtPhi(), cov.c1PtTgl(), cov.c1Pt21Pt2()}; SMatrix55 tcovs(v1.begin(), v1.end()); o2::track::TrackParCovFwd trackparCov{track.z(), tpars, tcovs, chi2}; @@ -1924,8 +1892,7 @@ o2::track::TrackParCovFwd VarManager::FwdToTrackPar(const T& track, } template -auto VarManager::getRotatedCovMatrixXX(const T& matrix, U phi, V theta) -{ +auto VarManager::getRotatedCovMatrixXX(const T &matrix, U phi, V theta) { // auto cp = std::cos(phi); auto sp = std::sin(phi); @@ -1940,17 +1907,16 @@ auto VarManager::getRotatedCovMatrixXX(const T& matrix, U phi, V theta) } template -KFPTrack VarManager::createKFPTrackFromTrack(const T& track) -{ +KFPTrack VarManager::createKFPTrackFromTrack(const T &track) { std::array trackpars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; std::array trackcovs = { - track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), - track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), - track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), - track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; o2::track::TrackParametrizationWithError trackparCov{ - track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; + track.x(), track.alpha(), std::move(trackpars), std::move(trackcovs)}; std::array trkpos_par{}; std::array trkmom_par{}; std::array trk_cov{}; @@ -1971,14 +1937,13 @@ KFPTrack VarManager::createKFPTrackFromTrack(const T& track) } template -KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T& muon) -{ +KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T &muon) { o2::track::TrackParCovFwd trackparCov = FwdToTrackPar(muon, muon); std::array trk_cov{}; trackparCov.getCovXYZPxPyPzGlo(trk_cov); - std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), - trackparCov.getZ(), trackparCov.getPx(), + std::array trkpar_KF = {trackparCov.getX(), trackparCov.getY(), + trackparCov.getZ(), trackparCov.getPx(), trackparCov.getPy(), trackparCov.getPz()}; std::array trkcov_KF = trk_cov; KFPTrack kfpTrack; @@ -1991,8 +1956,7 @@ KFPTrack VarManager::createKFPFwdTrackFromFwdTrack(const T& muon) } template -KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) -{ +KFPVertex VarManager::createKFPVertexFromCollision(const T &collision) { KFPVertex kfpVertex; kfpVertex.SetXYZ(collision.posX(), collision.posY(), collision.posZ()); kfpVertex.SetCovarianceMatrix(collision.covXX(), collision.covXY(), @@ -2006,9 +1970,8 @@ KFPVertex VarManager::createKFPVertexFromCollision(const T& collision) template o2::dataformats::VertexBase - VarManager::RecalculatePrimaryVertex(T const& track0, T const& track1, - const T1& collision) -{ +VarManager::RecalculatePrimaryVertex(T const &track0, T const &track1, + const T1 &collision) { KFParticle trk0KF; KFPTrack kfpTrack0 = createKFPTrackFromTrack(track0); trk0KF = KFParticle(kfpTrack0, -11 * track0.sign()); @@ -2028,7 +1991,7 @@ o2::dataformats::VertexBase kVtx.Covariance(4) = collision.covYZ(); kVtx.Covariance(5) = collision.covZZ(); kVtx.Chi2() = - collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo + collision.chi2(); // FIX THIS! to be added in AliReducedEventInfo kVtx.NDF() = 2 * collision.multNTracksPV() - 3; // KFVertex kfpVertex(kVtx); // kfpVertex.Initialize(); @@ -2049,25 +2012,24 @@ o2::dataformats::VertexBase } template -o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, - const C& collision, - const int endPoint) -{ +o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T &muon, + const C &collision, + const int endPoint) { float xShift = 0.f; float yShift = 0.f; float zShift = 0.f; GetFwdShiftForY(muon.y(), xShift, yShift, zShift); o2::track::TrackParCovFwd fwdtrack = - o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, - zShift, muon); + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift(muon, xShift, yShift, + zShift, muon); o2::dataformats::GlobalFwdTrack propmuon; if (static_cast(muon.trackType()) > 2) { auto mchTrack = mMatching.FwdtoMCH(fwdtrack); if (endPoint == kToVertex) { o2::mch::TrackExtrap::extrapToVertex( - mchTrack, collision.posX(), collision.posY(), collision.posZ(), - collision.covXX(), collision.covYY()); + mchTrack, collision.posX(), collision.posY(), collision.posZ(), + collision.covXX(), collision.covYY()); } if (endPoint == kToDCA) { o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrack, @@ -2085,28 +2047,26 @@ o2::dataformats::GlobalFwdTrack VarManager::PropagateMuon(const T& muon, } else if (static_cast(muon.trackType()) < 2) { std::array dcaInfOrig{999.f, 999.f, 999.f}; fwdtrack.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dcaInfOrig); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dcaInfOrig); propmuon = fwdtrack; } return propmuon; } template -o2::track::TrackParCovFwd VarManager::PropagateFwd(const T& track, const C& cov, - float z) -{ +o2::track::TrackParCovFwd VarManager::PropagateFwd(const T &track, const C &cov, + float z) { o2::track::TrackParCovFwd fwdtrack = FwdToTrackPar(track, cov); fwdtrack.propagateToZhelix(z, fgMagField); return fwdtrack; } template -void VarManager::FillPropagateMuon(const T& muon, const C& collision, - float* values) -{ +void VarManager::FillPropagateMuon(const T &muon, const C &collision, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedMuonCov) > 0) { @@ -2129,7 +2089,7 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, values[kTgl] = propmuon.getTgl(); values[kPhi] = propmuon.getPhi(); - const SMatrix55& cov = propmuon.getCovariances(); + const SMatrix55 &cov = propmuon.getCovariances(); values[kMuonCXX] = cov(0, 0); values[kMuonCXY] = cov(1, 0); values[kMuonCYY] = cov(1, 1); @@ -2149,11 +2109,10 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, } template -void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, - const C& collision, float* values) -{ +void VarManager::FillGlobalMuonRefit(T1 const &muontrack, T2 const &mfttrack, + const C &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { float xShift = 0.f; @@ -2161,20 +2120,20 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); o2::dataformats::GlobalFwdTrack propmuon = - PropagateMuon(muontrack, collision, kToVertex); + PropagateMuon(muontrack, collision, kToVertex); double px = - propmuon.getP() * - std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * - std::cos(mfttrack.phi()); + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::cos(mfttrack.phi()); double py = - propmuon.getP() * - std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * - std::sin(mfttrack.phi()); + propmuon.getP() * + std::sin(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())) * + std::sin(mfttrack.phi()); double pz = propmuon.getP() * std::cos(o2::constants::math::PIHalf - std::atan(mfttrack.tgl())); double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2)); auto mftprop = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - mfttrack, xShift, yShift, zShift); + mfttrack, xShift, yShift, zShift); mftprop.setInvQPt(static_cast(muontrack.sign()) / pt); values[kX] = mftprop.getX(); values[kY] = mftprop.getY(); @@ -2188,8 +2147,8 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, // Helix DCA of the refitted global track w.r.t. the associated collision std::array dca{999., 999., 999.}; mftprop.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } @@ -2197,12 +2156,11 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, template -void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, - const C& collision, C2 const& mftcov, - float* values) -{ +void VarManager::FillGlobalMuonRefitCov(T1 const &muontrack, T2 const &mfttrack, + const C &collision, C2 const &mftcov, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((MuonfillMap & MuonCov) > 0) { if constexpr ((MFTfillMap & MFTCov) > 0) { @@ -2211,12 +2169,12 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, float zShift = 0.f; GetFwdShiftForY(mfttrack.y(), xShift, yShift, zShift); o2::dataformats::GlobalFwdTrack propmuon = - PropagateMuon(muontrack, collision, kToVertex); + PropagateMuon(muontrack, collision, kToVertex); auto mft = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - mfttrack, xShift, yShift, zShift, mftcov); + mfttrack, xShift, yShift, zShift, mftcov); o2::dataformats::GlobalFwdTrack globalRefit = - o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); + o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); values[kX] = globalRefit.getX(); values[kY] = globalRefit.getY(); values[kZ] = globalRefit.getZ(); @@ -2230,8 +2188,8 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, // collision std::array dca{999., 999., 999.}; globalRefit.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); values[kMuonDCAx] = static_cast(dca[0]); values[kMuonDCAy] = static_cast(dca[1]); } @@ -2239,10 +2197,9 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, } template -void VarManager::FillTimeFrame(T const& tf, float* values) -{ +void VarManager::FillTimeFrame(T const &tf, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (T::template contains()) { values[kTFNBCs] = tf.size(); @@ -2264,11 +2221,9 @@ void VarManager::FillTimeFrame(T const& tf, float* values) } } -template -void VarManager::FillBC(T const& bc, float* values) -{ +template void VarManager::FillBC(T const &bc, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kRunNo] = bc.runNumber(); values[kBC] = bc.globalBC(); @@ -2278,10 +2233,9 @@ void VarManager::FillBC(T const& bc, float* values) } template -void VarManager::FillEvent(T const& event, float* values) -{ +void VarManager::FillEvent(T const &event, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { @@ -2304,7 +2258,7 @@ void VarManager::FillEvent(T const& event, float* values) if (fgUsedVars[kIsNoITSROFBorder]) { values[kIsNoITSROFBorder] = - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder); } if (fgUsedVars[kTrackOccupancyInTimeRange]) { values[kTrackOccupancyInTimeRange] = event.trackOccupancyInTimeRange(); @@ -2314,54 +2268,54 @@ void VarManager::FillEvent(T const& event, float* values) } if (fgUsedVars[kNoCollInTimeRangeStandard]) { values[kNoCollInTimeRangeStandard] = - event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard); } if (fgUsedVars[kIsTVXTriggered]) { values[kIsTVXTriggered] = - event.selection_bit(o2::aod::evsel::kIsTriggerTVX); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX); } if (fgUsedVars[kIsNoTFBorder]) { values[kIsNoTFBorder] = - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder); } if (fgUsedVars[kIsTriggerZNAZNC]) { values[kIsTriggerZNAZNC] = - static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && - event.selection_bit(o2::aod::evsel::kIsBBZNC)); + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsNoSameBunch]) { values[kIsNoSameBunch] = - event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { values[kIsGoodZvtxFT0vsPV] = - event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV); } if (fgUsedVars[kIsVertexITSTPC]) { values[kIsVertexITSTPC] = - event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC); } if (fgUsedVars[kIsVertexTOFmatched]) { values[kIsVertexTOFmatched] = - event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched); } if (fgUsedVars[kIsSel8]) { values[kIsSel8] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { values[kIsGoodITSLayer3] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { values[kIsGoodITSLayer0123] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { values[kIsGoodITSLayersAll] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2371,23 +2325,23 @@ void VarManager::FillEvent(T const& event, float* values) } if (fgUsedVars[kIsINT7inMUON]) { values[kIsINT7inMUON] = - static_cast(event.alias_bit(kINT7inMUON) > 0); + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { values[kIsMuonSingleLowPt7] = - static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { values[kIsMuonSingleHighPt7] = - static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { values[kIsMuonUnlikeLowPt7] = - static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { values[kIsMuonLikeLowPt7] = - static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2487,11 +2441,11 @@ void VarManager::FillEvent(T const& event, float* values) fgUsedVars[kIsSingleGapA] || fgUsedVars[kIsSingleGapC] || fgUsedVars[kIsNoGap]) { values[kIsDoubleGap] = - static_cast(event.tag_bit(56 + kDoubleGap) > 0); + static_cast(event.tag_bit(56 + kDoubleGap) > 0); values[kIsSingleGapA] = - static_cast(event.tag_bit(56 + kSingleGapA) > 0); + static_cast(event.tag_bit(56 + kSingleGapA) > 0); values[kIsSingleGapC] = - static_cast(event.tag_bit(56 + kSingleGapC) > 0); + static_cast(event.tag_bit(56 + kSingleGapC) > 0); values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && @@ -2499,7 +2453,7 @@ void VarManager::FillEvent(T const& event, float* values) } if (fgUsedVars[kIsITSUPCMode]) { values[kIsITSUPCMode] = - static_cast(event.tag_bit(56 + kITSUPCMode) > 0); + static_cast(event.tag_bit(56 + kITSUPCMode) > 0); } values[kCollisionTime] = event.collisionTime(); values[kCollisionTimeRes] = event.collisionTimeRes(); @@ -2510,72 +2464,72 @@ void VarManager::FillEvent(T const& event, float* values) values[kBCOrbit] = event.globalBC() % o2::constants::lhc::LHCMaxBunches; values[kTimestamp] = event.timestamp(); values[kTimeFromSOR] = - (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); + (fgSOR > 0 ? (event.timestamp() - fgSOR) / 60000. : -1.0); values[kCentVZERO] = event.centRun2V0M(); values[kCentFT0C] = event.centFT0C(); if (fgUsedVars[kIsNoITSROFBorderRecomputed]) { uint16_t bcInITSROF = - (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; + (event.globalBC() + 3564 - fgITSROFbias) % fgITSROFlength; values[kIsNoITSROFBorderRecomputed] = - bcInITSROF > fgITSROFBorderMarginLow && - bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh - ? 1.0 - : 0.0; + bcInITSROF > fgITSROFBorderMarginLow && + bcInITSROF < fgITSROFlength - fgITSROFBorderMarginHigh + ? 1.0 + : 0.0; } if (fgUsedVars[kIsNoITSROFBorder]) { values[kIsNoITSROFBorder] = static_cast( - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder) > 0); } if (fgUsedVars[kIsTVXTriggered]) { values[kIsTVXTriggered] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) > 0); } if (fgUsedVars[kIsNoTFBorder]) { values[kIsNoTFBorder] = static_cast( - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) > 0); } if (fgUsedVars[kNoCollInTimeRangeStandard]) { values[kNoCollInTimeRangeStandard] = static_cast( - event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); + event.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard) > 0); } if (fgUsedVars[kIsNoSameBunch]) { values[kIsNoSameBunch] = static_cast( - event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); + event.selection_bit(o2::aod::evsel::kNoSameBunchPileup) > 0); } if (fgUsedVars[kIsTriggerZNAZNC]) { values[kIsTriggerZNAZNC] = - static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && - event.selection_bit(o2::aod::evsel::kIsBBZNC)); + static_cast(event.selection_bit(o2::aod::evsel::kIsBBZNA) && + event.selection_bit(o2::aod::evsel::kIsBBZNC)); } if (fgUsedVars[kIsGoodZvtxFT0vsPV]) { values[kIsGoodZvtxFT0vsPV] = static_cast( - event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); + event.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV) > 0); } if (fgUsedVars[kIsVertexITSTPC]) { values[kIsVertexITSTPC] = static_cast( - event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); + event.selection_bit(o2::aod::evsel::kIsVertexITSTPC) > 0); } if (fgUsedVars[kIsVertexTOFmatched]) { values[kIsVertexTOFmatched] = static_cast( - event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); + event.selection_bit(o2::aod::evsel::kIsVertexTOFmatched) > 0); } if (fgUsedVars[kIsSel8]) { values[kIsSel8] = static_cast( - event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && - event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && - event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); + event.selection_bit(o2::aod::evsel::kIsTriggerTVX) && + event.selection_bit(o2::aod::evsel::kNoTimeFrameBorder) && + event.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)); } if (fgUsedVars[kIsGoodITSLayer3]) { values[kIsGoodITSLayer3] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer3); } if (fgUsedVars[kIsGoodITSLayer0123]) { values[kIsGoodITSLayer0123] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123); } if (fgUsedVars[kIsGoodITSLayersAll]) { values[kIsGoodITSLayersAll] = - event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); + event.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll); } if (fgUsedVars[kIsINT7]) { values[kIsINT7] = static_cast(event.alias_bit(kINT7) > 0); @@ -2585,23 +2539,23 @@ void VarManager::FillEvent(T const& event, float* values) } if (fgUsedVars[kIsINT7inMUON]) { values[kIsINT7inMUON] = - static_cast(event.alias_bit(kINT7inMUON) > 0); + static_cast(event.alias_bit(kINT7inMUON) > 0); } if (fgUsedVars[kIsMuonSingleLowPt7]) { values[kIsMuonSingleLowPt7] = - static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); + static_cast(event.alias_bit(kMuonSingleLowPt7) > 0); } if (fgUsedVars[kIsMuonSingleHighPt7]) { values[kIsMuonSingleHighPt7] = - static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); + static_cast(event.alias_bit(kMuonSingleHighPt7) > 0); } if (fgUsedVars[kIsMuonUnlikeLowPt7]) { values[kIsMuonUnlikeLowPt7] = - static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonUnlikeLowPt7) > 0); } if (fgUsedVars[kIsMuonLikeLowPt7]) { values[kIsMuonLikeLowPt7] = - static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); + static_cast(event.alias_bit(kMuonLikeLowPt7) > 0); } if (fgUsedVars[kIsCUP8]) { values[kIsCUP8] = static_cast(event.alias_bit(kCUP8) > 0); @@ -2681,48 +2635,48 @@ void VarManager::FillEvent(T const& event, float* values) values[kCORR2REFetagap] = event.corr2refetagap(); values[kM11REFetagap] = event.m11refetagap(); values[kCORR2REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : event.corr2ref(); + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : event.corr2ref(); values[kCORR4REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : event.corr4ref(); + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : event.corr4ref(); values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REF]) || - std::isinf(values[kM11M1111REF]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF]) - ? 0 - : event.corr2ref() * event.corr4ref(); + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : event.corr2ref() * event.corr4ref(); values[kM11REF] = - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) - ? event.m11ref() - : 0; + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF])) + ? event.m11ref() + : 0; values[kM1111REF] = - !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) - ? event.m1111ref() - : 0; + !(std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF])) + ? event.m1111ref() + : 0; values[kM11M1111REF] = !(std::isnan(values[kM11M1111REF]) || std::isinf(values[kM11M1111REF]) || std::isnan(values[kCORR2CORR4REF]) || std::isinf(values[kCORR2CORR4REF])) - ? event.m11ref() * event.m1111ref() - : 0; + ? event.m11ref() * event.m1111ref() + : 0; } } @@ -2782,9 +2736,9 @@ void VarManager::FillEvent(T const& event, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2795,100 +2749,100 @@ void VarManager::FillEvent(T const& event, float* values) values[kPsi2C] = Psi2C; float R2SP_AB = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); float R2SP_AC = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); float R2SP_BC = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); float R2SP_AB_Im = - (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); float R2SP_AC_Im = - (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); float R2SP_BC_Im = - (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); values[kR2SP_AB] = - std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; values[kR2SP_FT0CTPCPOS] = - std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; values[kR2SP_FT0CTPCNEG] = - std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; values[kR2SP_AC] = - std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; values[kR2SP_FT0ATPCPOS] = - std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; values[kR2SP_FT0ATPCNEG] = - std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; values[kR2SP_BC] = - std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; values[kR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; values[kWR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; values[kR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; values[kWR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; values[kR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; values[kWR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); values[kR2EP_AB] = - std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; values[kR2EP_AC] = - std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; values[kR2EP_BC] = - std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; values[kR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; values[kWR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; values[kR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; values[kWR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; values[kR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; values[kWR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionQvectCentr) > 0) { @@ -2929,9 +2883,9 @@ void VarManager::FillEvent(T const& event, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -2942,100 +2896,100 @@ void VarManager::FillEvent(T const& event, float* values) values[kPsi2C] = Psi2C; float R2SP_AB = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); float R2SP_APOSB = (values[kQ2X0APOS] * values[kQ2X0B] + values[kQ2Y0APOS] * values[kQ2Y0B]); float R2SP_ANEGB = (values[kQ2X0ANEG] * values[kQ2X0B] + values[kQ2Y0ANEG] * values[kQ2Y0B]); float R2SP_AC = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); float R2SP_APOSC = (values[kQ2X0APOS] * values[kQ2X0C] + values[kQ2Y0APOS] * values[kQ2Y0C]); float R2SP_ANEGC = (values[kQ2X0ANEG] * values[kQ2X0C] + values[kQ2Y0ANEG] * values[kQ2Y0C]); float R2SP_BC = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); float R2SP_AB_Im = - (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); + (values[kQ2Y0A] * values[kQ2X0B] - values[kQ2X0A] * values[kQ2Y0B]); float R2SP_AC_Im = - (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); + (values[kQ2Y0A] * values[kQ2X0C] - values[kQ2X0A] * values[kQ2Y0C]); float R2SP_BC_Im = - (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); + (values[kQ2Y0B] * values[kQ2X0C] - values[kQ2X0B] * values[kQ2Y0C]); values[kR2SP_AB] = - std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; + std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : R2SP_AB; values[kR2SP_FT0CTPCPOS] = - std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; + std::isnan(R2SP_APOSB) || std::isinf(R2SP_APOSB) ? 0. : R2SP_APOSB; values[kR2SP_FT0CTPCNEG] = - std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; + std::isnan(R2SP_ANEGB) || std::isinf(R2SP_ANEGB) ? 0. : R2SP_ANEGB; values[kWR2SP_AB] = std::isnan(R2SP_AB) || std::isinf(R2SP_AB) ? 0. : 1.0; values[kR2SP_AC] = - std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; + std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : R2SP_AC; values[kR2SP_FT0ATPCPOS] = - std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; + std::isnan(R2SP_APOSC) || std::isinf(R2SP_APOSC) ? 0. : R2SP_APOSC; values[kR2SP_FT0ATPCNEG] = - std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; + std::isnan(R2SP_ANEGC) || std::isinf(R2SP_ANEGC) ? 0. : R2SP_ANEGC; values[kWR2SP_AC] = std::isnan(R2SP_AC) || std::isinf(R2SP_AC) ? 0. : 1.0; values[kR2SP_BC] = - std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; + std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : R2SP_BC; values[kWR2SP_BC] = std::isnan(R2SP_BC) || std::isinf(R2SP_BC) ? 0. : 1.0; values[kR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : R2SP_AB_Im; values[kWR2SP_AB_Im] = - std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; + std::isnan(R2SP_AB_Im) || std::isinf(R2SP_AB_Im) ? 0. : 1.0; values[kR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : R2SP_AC_Im; values[kWR2SP_AC_Im] = - std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; + std::isnan(R2SP_AC_Im) || std::isinf(R2SP_AC_Im) ? 0. : 1.0; values[kR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : R2SP_BC_Im; values[kWR2SP_BC_Im] = - std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; + std::isnan(R2SP_BC_Im) || std::isinf(R2SP_BC_Im) ? 0. : 1.0; float R2EP_AB = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2B)); float R2EP_AC = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2A - Psi2C)); float R2EP_BC = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Cos(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Cos(2 * (Psi2B - Psi2C)); float R2EP_AB_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2B) || std::isinf(Psi2B) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2B)); + std::isnan(Psi2B) || std::isinf(Psi2B) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2B)); float R2EP_AC_Im = std::isnan(Psi2A) || std::isinf(Psi2A) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2A - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2A - Psi2C)); float R2EP_BC_Im = std::isnan(Psi2B) || std::isinf(Psi2B) || - std::isnan(Psi2C) || std::isinf(Psi2C) - ? 0. - : TMath::Sin(2 * (Psi2B - Psi2C)); + std::isnan(Psi2C) || std::isinf(Psi2C) + ? 0. + : TMath::Sin(2 * (Psi2B - Psi2C)); values[kR2EP_AB] = - std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; + std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : R2EP_AB; values[kWR2EP_AB] = std::isnan(R2EP_AB) || std::isinf(R2EP_AB) ? 0. : 1.0; values[kR2EP_AC] = - std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; + std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : R2EP_AC; values[kWR2EP_AC] = std::isnan(R2EP_AC) || std::isinf(R2EP_AC) ? 0. : 1.0; values[kR2EP_BC] = - std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; + std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : R2EP_BC; values[kWR2EP_BC] = std::isnan(R2EP_BC) || std::isinf(R2EP_BC) ? 0. : 1.0; values[kR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : R2EP_AB_Im; values[kWR2EP_AB_Im] = - std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; + std::isnan(R2EP_AB_Im) || std::isinf(R2EP_AB_Im) ? 0. : 1.0; values[kR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : R2EP_AC_Im; values[kWR2EP_AC_Im] = - std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; + std::isnan(R2EP_AC_Im) || std::isinf(R2EP_AC_Im) ? 0. : 1.0; values[kR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : R2EP_BC_Im; values[kWR2EP_BC_Im] = - std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; + std::isnan(R2EP_BC_Im) || std::isinf(R2EP_BC_Im) ? 0. : 1.0; } if constexpr ((fillMap & CollisionMC) > 0) { @@ -3076,17 +3030,17 @@ void VarManager::FillEvent(T const& event, float* values) if constexpr ((fillMap & EventFilter) > 0 || (fillMap & RapidityGapFilter) > 0) { values[kIsDoubleGap] = static_cast( - (event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); + (event.eventFilter() & (static_cast(1) << kDoubleGap)) > 0); values[kIsSingleGapA] = static_cast( - (event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); + (event.eventFilter() & (static_cast(1) << kSingleGapA)) > 0); values[kIsSingleGapC] = static_cast( - (event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); + (event.eventFilter() & (static_cast(1) << kSingleGapC)) > 0); values[kIsSingleGap] = static_cast(values[kIsSingleGapA] != 0.f || values[kIsSingleGapC] != 0.f); values[kIsNoGap] = static_cast(values[kIsDoubleGap] == 0.f && values[kIsSingleGap] == 0.f); values[kIsITSUPCMode] = static_cast( - (event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); + (event.eventFilter() & (static_cast(1) << kITSUPCMode)) > 0); } if constexpr ((fillMap & ReducedZdc) > 0) { @@ -3130,13 +3084,13 @@ void VarManager::FillEvent(T const& event, float* values) if constexpr (requires { event.dcazBimodalityCoefficient(); }) { values[kDCAzBimodalityCoefficient] = event.dcazBimodalityCoefficient(); values[kDCAzBimodalityCoefficientBinned] = - event.dcazBimodalityCoefficientBinned(); + event.dcazBimodalityCoefficientBinned(); values[kDCAzBimodalityCoefficientBinnedTrimmed1] = - event.dcazBimodalityCoefficientBinnedTrimmed1(); + event.dcazBimodalityCoefficientBinnedTrimmed1(); values[kDCAzBimodalityCoefficientBinnedTrimmed2] = - event.dcazBimodalityCoefficientBinnedTrimmed2(); + event.dcazBimodalityCoefficientBinnedTrimmed2(); values[kDCAzBimodalityCoefficientBinnedTrimmed3] = - event.dcazBimodalityCoefficientBinnedTrimmed3(); + event.dcazBimodalityCoefficientBinnedTrimmed3(); values[kDCAzMean] = event.dcazMean(); values[kDCAzMeanBinnedTrimmed1] = event.dcazMeanBinnedTrimmed1(); values[kDCAzMeanBinnedTrimmed2] = event.dcazMeanBinnedTrimmed2(); @@ -3164,15 +3118,14 @@ void VarManager::FillEvent(T const& event, float* values) } template -void VarManager::FillEventTracks(T const& tracks, float* values) -{ +void VarManager::FillEventTracks(T const &tracks, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // compute event properties based on DCAz of the tracks std::vector dcazValues; - for (const auto& track : tracks) { + for (const auto &track : tracks) { if (!track.hasITS()) { continue; // skip tracks without ITS information } @@ -3191,7 +3144,7 @@ void VarManager::FillEventTracks(T const& tracks, float* values) // compute the unbinned bimodality coefficient and related statistics auto [bimodalityCoefficient, mean, stddev, skewness, kurtosis, nPeaks] = - BimodalityCoefficientAndNPeaks(dcazValues, -1.0); + BimodalityCoefficientAndNPeaks(dcazValues, -1.0); if (stddev > -1.0) { values[kDCAzBimodalityCoefficient] = bimodalityCoefficient; values[kDCAzMean] = mean; @@ -3224,10 +3177,10 @@ void VarManager::FillEventTracks(T const& tracks, float* values) // of 50um and different trimming versions more then 3 counts per bin auto [bimodalityCoefficientBinTrimmed1, meanBinTrimmed1, stddevBinTrimmed1, skewnessBinTrimmed1, kurtosisBinTrimmed1, nPeaksBinTrimmed1] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, 4); if (stddevBinTrimmed1 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed1] = - bimodalityCoefficientBinTrimmed1; + bimodalityCoefficientBinTrimmed1; values[kDCAzMeanBinnedTrimmed1] = meanBinTrimmed1; values[kDCAzRMSBinnedTrimmed1] = stddevBinTrimmed1; } else { @@ -3243,10 +3196,10 @@ void VarManager::FillEventTracks(T const& tracks, float* values) // << endl; more than 3% of the entries per peak auto [bimodalityCoefficientBinTrimmed2, meanBinTrimmed2, stddevBinTrimmed2, skewnessBinTrimmed2, kurtosisBinTrimmed2, nPeaksBinTrimmed2] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -100); if (stddevBinTrimmed2 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed2] = - bimodalityCoefficientBinTrimmed2; + bimodalityCoefficientBinTrimmed2; values[kDCAzMeanBinnedTrimmed2] = meanBinTrimmed2; values[kDCAzRMSBinnedTrimmed2] = stddevBinTrimmed2; } else { @@ -3262,10 +3215,10 @@ void VarManager::FillEventTracks(T const& tracks, float* values) // << endl; more than 5% of the entries per peak auto [bimodalityCoefficientBinTrimmed3, meanBinTrimmed3, stddevBinTrimmed3, skewnessBinTrimmed3, kurtosisBinTrimmed3, nPeaksBinTrimmed3] = - BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); + BimodalityCoefficientAndNPeaks(dcazValues, 0.005, -20); if (stddevBinTrimmed3 > -1.0) { values[kDCAzBimodalityCoefficientBinnedTrimmed3] = - bimodalityCoefficientBinTrimmed3; + bimodalityCoefficientBinTrimmed3; values[kDCAzMeanBinnedTrimmed3] = meanBinTrimmed3; values[kDCAzRMSBinnedTrimmed3] = stddevBinTrimmed3; } else { @@ -3290,7 +3243,7 @@ void VarManager::FillEventTracks(T const& tracks, float* values) int counter2mm = 0; int counter5mm = 0; int counter10mm = 0; - for (auto const& d : dcazValues) { + for (auto const &d : dcazValues) { double absD = std::abs(d); if (absD > 0.01) { counter100um++; @@ -3325,11 +3278,10 @@ void VarManager::FillEventTracks(T const& tracks, float* values) } template -void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, - float* values) -{ +void VarManager::FillEventFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kCentFT0C] >= 0.) { @@ -3342,11 +3294,10 @@ void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, } template -void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, - float* values) -{ +void VarManager::FillTwoMixEventsFlowResoFactor(T const &hs_sp, T const &hs_ep, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (values[kTwoEvCentFT0C1] >= 0.) { @@ -3367,13 +3318,12 @@ void VarManager::FillTwoMixEventsFlowResoFactor(T const& hs_sp, T const& hs_ep, } template -void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, - T const& h_v22ev2, T const& h_v24ev2, - T1 const& t1, T2 const& t2, - float* values) -{ +void VarManager::FillTwoMixEventsCumulants(T const &h_v22ev1, T const &h_v24ev1, + T const &h_v22ev2, T const &h_v24ev2, + T1 const &t1, T2 const &t2, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } int idx_v22ev1 = 0; @@ -3416,18 +3366,17 @@ void VarManager::FillTwoMixEventsCumulants(T const& h_v22ev1, T const& h_v24ev1, } template -void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values) -{ +void VarManager::FillTwoEvents(T const &ev1, T const &ev2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // if constexpr (T::template contains()) { values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); values[kTwoEvPosR1] = - std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); values[kTwoEvPosR2] = - std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvDeltaZ] = ev1.posZ() - ev2.posZ(); values[kTwoEvDeltaX] = ev1.posX() - ev2.posX(); values[kTwoEvDeltaY] = ev1.posY() - ev2.posY(); @@ -3439,19 +3388,18 @@ void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values) } template -void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, - T2 const& /*tracks1*/, - T2 const& /*tracks2*/, float* values) -{ +void VarManager::FillTwoMixEvents(T1 const &ev1, T1 const &ev2, + T2 const & /*tracks1*/, + T2 const & /*tracks2*/, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kTwoEvPosZ1] = ev1.posZ(); values[kTwoEvPosZ2] = ev2.posZ(); values[kTwoEvPosR1] = - std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); + std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY()); values[kTwoEvPosR2] = - std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); + std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY()); values[kTwoEvPVcontrib1] = ev1.numContrib(); values[kTwoEvPVcontrib2] = ev2.numContrib(); /* @@ -3511,10 +3459,9 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, } template -void VarManager::FillTrack(T const& track, float* values) -{ +void VarManager::FillTrack(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & TrackMFT) > 0) { @@ -3563,27 +3510,27 @@ void VarManager::FillTrack(T const& track, float* values) values[kCharge] = track.sign(); if (fgUsedVars[kPhiTPCOuter]) { values[kPhiTPCOuter] = RecoDecay::constrainAngle( - track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * - (o2::constants::math::PIHalf - - TMath::ACos(0.22 * fgMagField / track.pt()))); + track.phi() - (track.sign() > 0 ? 1.0 : -1.0) * + (o2::constants::math::PIHalf - + TMath::ACos(0.22 * fgMagField / track.pt()))); } if (fgUsedVars[kTrackIsInsideTPCModule]) { float localSectorPhi = - values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / - o2::constants::math::TwoPI) * - (o2::constants::math::TwoPI / 18.0); + values[kPhiTPCOuter] - TMath::Floor(18.0 * values[kPhiTPCOuter] / + o2::constants::math::TwoPI) * + (o2::constants::math::TwoPI / 18.0); float edge = fgTPCInterSectorBoundary / 2.0 / 246.6; // minimal inter-sector boundary as angle float curvature = - 3.0 * 3.33 * track.pt() / fgMagField * - (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); + 3.0 * 3.33 * track.pt() / fgMagField * + (1.0 - TMath::Sin(TMath::ACos(0.22 * fgMagField / track.pt()))); if (curvature / 2.466 > edge) { edge = curvature / 2.466; } double min = edge; double max = o2::constants::math::TwoPI / 18.0 - edge; values[kTrackIsInsideTPCModule] = - (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); + (localSectorPhi > min && localSectorPhi < max ? 1.0 : 0.0); } if constexpr ((fillMap & ReducedTrack) > 0 && !((fillMap & Pair) > 0)) { @@ -3592,22 +3539,22 @@ void VarManager::FillTrack(T const& track, float* values) values[kIsAmbiguous] = track.isAmbiguous(); values[kIsLegFromGamma] = - track.filteringFlags_bit(VarManager::kIsConversionLeg); + track.filteringFlags_bit(VarManager::kIsConversionLeg); values[kIsLegFromK0S] = track.filteringFlags_bit(VarManager::kIsK0sLeg); values[kIsLegFromLambda] = - track.filteringFlags_bit(VarManager::kIsLambdaLeg); + track.filteringFlags_bit(VarManager::kIsLambdaLeg); values[kIsLegFromAntiLambda] = - track.filteringFlags_bit(VarManager::kIsALambdaLeg); + track.filteringFlags_bit(VarManager::kIsALambdaLeg); values[kIsLegFromOmega] = - track.filteringFlags_bit(VarManager::kIsOmegaLeg); + track.filteringFlags_bit(VarManager::kIsOmegaLeg); values[kIsProtonFromLambdaAndAntiLambda] = static_cast( - (values[kIsLegFromLambda] * track.sign() > 0) || - (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); for (int i = 0; i < 8; i++) { values[kIsDalitzLeg + i] = - track.filteringFlags_bit(VarManager::kDalitzBits + i); + track.filteringFlags_bit(VarManager::kDalitzBits + i); } } @@ -3620,121 +3567,121 @@ void VarManager::FillTrack(T const& track, float* values) std::complex Q23(values[kQ23XA], values[kQ23YA]); std::complex P2(TMath::Cos(2 * v.Phi()), TMath::Sin(2 * v.Phi())); values[kM11REFoverMpsingle] = - values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultSingleMuons] + : 0; values[kM1111REFoverMpsingle] = - values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultSingleMuons] + : 0; values[kCORR2REFbysinglemu] = - std::isnan(values[kM11REFoverMpsingle]) || - std::isinf(values[kM11REFoverMpsingle]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMpsingle]) || - std::isinf(values[kM1111REFoverMpsingle]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbysinglemu] = - std::isnan(values[kM1111REFoverMpsingle]) || - std::isinf(values[kM1111REFoverMpsingle]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMpsingle]) || - std::isinf(values[kM11REFoverMpsingle]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REFoverMpsingle]) || + std::isinf(values[kM1111REFoverMpsingle]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpsingle]) || + std::isinf(values[kM11REFoverMpsingle]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POI]; values[kM01POIsingle] = values[kMultSingleMuons] * values[kS11A]; values[kM0111POIsingle] = - values[kMultSingleMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultSingleMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIsingle] = (P2 * conj(Q21)).real() / values[kM01POIsingle]; values[kCORR4POIsingle] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POIsingle]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIsingle]; values[kM01POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kM01POIsingle]; - values[kM0111POIsingle] = std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) ? 0 - : values[kM0111POIsingle]; + : values[kM01POIsingle]; + values[kM0111POIsingle] = std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kM0111POIsingle]; values[kCORR2POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kCORR2POIsingle]; + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR2POIsingle]; values[kCORR4POIsingle] = std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) - ? 0 - : values[kCORR4POIsingle]; + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) + ? 0 + : values[kCORR4POIsingle]; values[kM01POIoverMpsingle] = - values[kMultSingleMuons] > 0 && - !(std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) || - std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle])) - ? values[kM01POIsingle] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM01POIsingle] / values[kMultSingleMuons] + : 0; values[kM0111POIoverMpsingle] = - values[kMultSingleMuons] > 0 && - !(std::isnan(values[kM0111POIsingle]) || - std::isinf(values[kM0111POIsingle]) || - std::isnan(values[kCORR4POIsingle]) || - std::isinf(values[kCORR4POIsingle]) || - std::isnan(values[kM01POIsingle]) || - std::isinf(values[kM01POIsingle]) || - std::isnan(values[kCORR2POIsingle]) || - std::isinf(values[kCORR2POIsingle])) - ? values[kM0111POIsingle] / values[kMultSingleMuons] - : 0; + values[kMultSingleMuons] > 0 && + !(std::isnan(values[kM0111POIsingle]) || + std::isinf(values[kM0111POIsingle]) || + std::isnan(values[kCORR4POIsingle]) || + std::isinf(values[kCORR4POIsingle]) || + std::isnan(values[kM01POIsingle]) || + std::isinf(values[kM01POIsingle]) || + std::isnan(values[kCORR2POIsingle]) || + std::isinf(values[kCORR2POIsingle])) + ? values[kM0111POIsingle] / values[kMultSingleMuons] + : 0; } } @@ -3745,46 +3692,46 @@ void VarManager::FillTrack(T const& track, float* values) values[kSignedPin] = track.tpcInnerParam() * track.sign(); if (fgUsedVars[kIsITSrefit]) { values[kIsITSrefit] = - static_cast((track.flags() & o2::aod::track::ITSrefit) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::ITSrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kTrackTimeResIsRange]) { values[kTrackTimeResIsRange] = static_cast( - (track.flags() & o2::aod::track::TrackTimeResIsRange) > - 0); // NOTE: This is NOT for Run-2 + (track.flags() & o2::aod::track::TrackTimeResIsRange) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsTPCrefit]) { values[kIsTPCrefit] = - static_cast((track.flags() & o2::aod::track::TPCrefit) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::TPCrefit) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kPVContributor]) { values[kPVContributor] = - static_cast((track.flags() & o2::aod::track::PVContributor) > - 0); // NOTE: This is NOT for Run-2 + static_cast((track.flags() & o2::aod::track::PVContributor) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsGoldenChi2]) { values[kIsGoldenChi2] = - static_cast((track.flags() & o2::aod::track::GoldenChi2) > - 0); // NOTE: This is just for Run-2 + static_cast((track.flags() & o2::aod::track::GoldenChi2) > + 0); // NOTE: This is just for Run-2 } if (fgUsedVars[kOrphanTrack]) { values[kOrphanTrack] = - static_cast((track.flags() & o2::aod::track::OrphanTrack) > - 0); // NOTE: This is NOT for Run-2 + static_cast((track.flags() & o2::aod::track::OrphanTrack) > + 0); // NOTE: This is NOT for Run-2 } if (fgUsedVars[kIsSPDfirst]) { values[kIsSPDfirst] = - static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsSPDboth]) { values[kIsSPDboth] = - static_cast((track.itsClusterMap() & uint8_t(3)) > 0); + static_cast((track.itsClusterMap() & uint8_t(3)) > 0); } if (fgUsedVars[kIsSPDany]) { values[kIsSPDany] = - static_cast((track.itsClusterMap() & uint8_t(1)) || - (track.itsClusterMap() & uint8_t(2))); + static_cast((track.itsClusterMap() & uint8_t(1)) || + (track.itsClusterMap() & uint8_t(2))); } if (fgUsedVars[kITSClusterMap]) { values[kITSClusterMap] = track.itsClusterMap(); @@ -3792,19 +3739,19 @@ void VarManager::FillTrack(T const& track, float* values) if (fgUsedVars[kIsITSibFirst]) { values[kIsITSibFirst] = - static_cast((track.itsClusterMap() & uint8_t(1)) > 0); + static_cast((track.itsClusterMap() & uint8_t(1)) > 0); } if (fgUsedVars[kIsITSibAny]) { values[kIsITSibAny] = - static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || - (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || - (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 || + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } if (fgUsedVars[kIsITSibAll]) { values[kIsITSibAll] = - static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && - (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && - (track.itsClusterMap() & (1 << uint8_t(2))) > 0); + static_cast((track.itsClusterMap() & (1 << uint8_t(0))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(1))) > 0 && + (track.itsClusterMap() & (1 << uint8_t(2))) > 0); } values[kTrackTime] = track.trackTime(); @@ -3915,25 +3862,25 @@ void VarManager::FillTrack(T const& track, float* values) if constexpr ((fillMap & DalitzBits) > 0) { for (int i = 0; i < 8; i++) { values[kIsDalitzLeg + i] = - static_cast(track.dalitzBits() & (uint8_t(1) << i)); + static_cast(track.dalitzBits() & (uint8_t(1) << i)); } } // Quantities based on the V0 selections if constexpr ((fillMap & TrackV0Bits) > 0) { values[kIsLegFromGamma] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsConversionLeg)); values[kIsLegFromK0S] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsK0sLeg)); values[kIsLegFromLambda] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsLambdaLeg)); values[kIsLegFromAntiLambda] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsALambdaLeg)); values[kIsLegFromOmega] = static_cast( - track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); + track.pidbit() & (uint8_t(1) << VarManager::kIsOmegaLeg)); values[kIsProtonFromLambdaAndAntiLambda] = static_cast( - (values[kIsLegFromLambda] * track.sign() > 0) || - (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); + (values[kIsLegFromLambda] * track.sign() > 0) || + (values[kIsLegFromAntiLambda] * (-track.sign()) > 0)); } // Quantities based on the barrel PID tables @@ -3955,7 +3902,7 @@ void VarManager::FillTrack(T const& track, float* values) if (fgUsedVars[kTPCnSigmaEl_Corr] && fgRunTPCPostCalibration[0]) { if (!isTPCCalibrated) { values[kTPCnSigmaEl_Corr] = - ComputePIDcalibration(0, values[kTPCnSigmaEl]); + ComputePIDcalibration(0, values[kTPCnSigmaEl]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3968,7 +3915,7 @@ void VarManager::FillTrack(T const& track, float* values) if (fgUsedVars[kTPCnSigmaPi_Corr] && fgRunTPCPostCalibration[1]) { if (!isTPCCalibrated) { values[kTPCnSigmaPi_Corr] = - ComputePIDcalibration(1, values[kTPCnSigmaPi]); + ComputePIDcalibration(1, values[kTPCnSigmaPi]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3980,7 +3927,7 @@ void VarManager::FillTrack(T const& track, float* values) // compute TPC postcalibrated kaon nsigma if required if (!isTPCCalibrated) { values[kTPCnSigmaKa_Corr] = - ComputePIDcalibration(2, values[kTPCnSigmaKa]); + ComputePIDcalibration(2, values[kTPCnSigmaKa]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -3992,7 +3939,7 @@ void VarManager::FillTrack(T const& track, float* values) if (fgUsedVars[kTPCnSigmaPr_Corr] && fgRunTPCPostCalibration[3]) { if (!isTPCCalibrated) { values[kTPCnSigmaPr_Corr] = - ComputePIDcalibration(3, values[kTPCnSigmaPr]); + ComputePIDcalibration(3, values[kTPCnSigmaPr]); } else { LOG(fatal) << "TPC PID postcalibration is configured but the tracks " "are already postcalibrated. This is not allowed. Please " @@ -4082,7 +4029,7 @@ void VarManager::FillTrack(T const& track, float* values) float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); auto muonTrack = o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - track, xShift, yShift, zShift, track); + track, xShift, yShift, zShift, track); auto muonCov = muonTrack.getCovariances(); values[kX] = muonTrack.getX(); values[kY] = muonTrack.getY(); @@ -4118,20 +4065,19 @@ void VarManager::FillTrack(T const& track, float* values) } template -void VarManager::FillTrackCollision(T const& track, C const& collision, - float* values) -{ +void VarManager::FillTrackCollision(T const &track, C const &collision, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { auto trackPar = getTrackPar(track); std::array dca{1e10f, 1e10f}; trackPar.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca); values[kTrackDCAxy] = dca[0]; values[kTrackDCAz] = dca[1]; @@ -4158,18 +4104,18 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float zShift = 0.f; GetFwdShiftForY(track.y(), xShift, yShift, zShift); o2::track::TrackParCovFwd fwdtrack = - o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( - track, xShift, yShift, zShift, track); + o2::aod::fwdtrackutils::getTrackParCovFwd3DShift( + track, xShift, yShift, zShift, track); std::array dca{999., 999., 999.}; fwdtrack.propagateToDCAhelix( - fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, - dca); + fgMagField, {collision.posX(), collision.posY(), collision.posZ()}, + dca); dcaX = static_cast(dca[0]); dcaY = static_cast(dca[1]); } else { // MCH standalone: DCA and pDCA from MCH extrapolation o2::dataformats::GlobalFwdTrack propmuonAtDCA = - PropagateMuon(track, collision, kToDCA); + PropagateMuon(track, collision, kToDCA); dcaX = propmuonAtDCA.getX() - collision.posX(); dcaY = propmuonAtDCA.getY() - collision.posY(); float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY); @@ -4183,27 +4129,25 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, template bool VarManager::isBarrelAssocTimeCompatible( - T const& track, C const& collision, C const& origCollision, float nSigma, - float timeMargin, int bcWindowForOneSigma, int usePVAssociation, - int maxPvContribLowMult, float* values) -{ + T const &track, C const &collision, C const &origCollision, float nSigma, + float timeMargin, int bcWindowForOneSigma, int usePVAssociation, + int maxPvContribLowMult, float *values) { return computeBarrelAssocTimeCompat( - track.trackTime(), track.trackTimeRes(), - (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, - track.isPVContributor(), static_cast(origCollision.globalBC()), - origCollision.collisionTime(), origCollision.numContrib(), - static_cast(collision.globalBC()), collision.collisionTime(), - collision.collisionTimeRes(), nSigma, timeMargin, bcWindowForOneSigma, - usePVAssociation, maxPvContribLowMult, values); + track.trackTime(), track.trackTimeRes(), + (track.flags() & o2::aod::track::TrackTimeResIsRange) > 0, + track.isPVContributor(), static_cast(origCollision.globalBC()), + origCollision.collisionTime(), origCollision.numContrib(), + static_cast(collision.globalBC()), collision.collisionTime(), + collision.collisionTimeRes(), nSigma, timeMargin, bcWindowForOneSigma, + usePVAssociation, maxPvContribLowMult, values); } template -void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, - M const& materialCorr, - P const& propagator, float* values) -{ +void VarManager::FillTrackCollisionMatCorr(T const &track, C const &collision, + M const &materialCorr, + P const &propagator, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & ReducedTrackBarrel) > 0 || (fillMap & TrackDCA) > 0) { @@ -4213,8 +4157,8 @@ void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, - materialCorr, &dca); + {collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2.f, + materialCorr, &dca); getPxPyPz(trackPar, pVec); values[kTrackDCAxy] = dca[0]; @@ -4233,10 +4177,9 @@ void VarManager::FillTrackCollisionMatCorr(T const& track, C const& collision, } template -void VarManager::FillPhoton(T const& track, float* values) -{ +void VarManager::FillPhoton(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Quantities based on the basic table (contains just kine information and @@ -4266,9 +4209,8 @@ void VarManager::FillPhoton(T const& track, float* values) } template -void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, - float deltaPhi, float* values) -{ +void VarManager::FillTrackEMCal(T const &cluster, float trackP, float deltaEta, + float deltaPhi, float *values) { // Fill the EMCal cluster quantities; the cluster can be either an // aod::EMCALCluster (skimming) // or an aod::ReducedEMCal (analysis on skimmed data), the column schemas @@ -4278,7 +4220,7 @@ void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, // the default (negative) value leaves E/p at the -999 sentinel, as for // tracks without a matched cluster. if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kEMCalEnergy] = cluster.energy(); @@ -4300,10 +4242,9 @@ void VarManager::FillTrackEMCal(T const& cluster, float trackP, float deltaEta, } template -void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) -{ +void VarManager::FillTrackMC(const U &mcStack, T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Quantities based on the mc particle table @@ -4334,12 +4275,11 @@ void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values) template -void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, - C const& collision, float* values) -{ +void VarManager::FillTrackCollisionMC(T1 const &track, T2 const &MotherTrack, + C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassBPlus; @@ -4365,62 +4305,61 @@ void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, // displaced vertex is compued with decay product (track) and momentum of // mother particle (MotherTrack) values[kMCVertexingLxy] = - (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + - (collPos[1] - track.vy()) * (collPos[1] - track.vy()); + (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + + (collPos[1] - track.vy()) * (collPos[1] - track.vy()); values[kMCVertexingLz] = - (collPos[2] - track.vz()) * (collPos[2] - track.vz()); + (collPos[2] - track.vz()) * (collPos[2] - track.vz()); values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz]; values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]); values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]); values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]); values[kMCVertexingTauz] = - (collPos[2] - track.vz()) * m / - (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); + (collPos[2] - track.vz()) * m / + (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingTauxy] = - values[kMCVertexingLxy] * m / - (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); + values[kMCVertexingLxy] * m / + (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS); values[kMCCosPointingAngle] = - ((collPos[0] - track.vx()) * MotherTrack.px() + - (collPos[1] - track.vy()) * MotherTrack.py() + - (collPos[2] - track.vz()) * MotherTrack.pz()) / - (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); + ((collPos[0] - track.vx()) * MotherTrack.px() + + (collPos[1] - track.vy()) * MotherTrack.py() + + (collPos[2] - track.vz()) * MotherTrack.pz()) / + (MotherTrack.p() * values[VarManager::kMCVertexingLxyz]); values[kMCLxyExpected] = - (MotherTrack.pt() / m) * - (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + (MotherTrack.pt() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); values[kMCLxyzExpected] = - (MotherTrack.p() / m) * - (pdgLifetime * o2::constants::physics::LightSpeedCm2S); + (MotherTrack.p() / m) * + (pdgLifetime * o2::constants::physics::LightSpeedCm2S); values[kMCVertexingLzProjected] = - ((track.vz() - collPos[2]) * MotherTrack.pz()) / - TMath::Abs(MotherTrack.pz()); + ((track.vz() - collPos[2]) * MotherTrack.pz()) / + TMath::Abs(MotherTrack.pz()); values[kMCVertexingLxyProjected] = - (((track.vx() - collPos[0]) * MotherTrack.px()) + - ((track.vy() - collPos[1]) * MotherTrack.py())) / - TMath::Abs(MotherTrack.pt()); + (((track.vx() - collPos[0]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py())) / + TMath::Abs(MotherTrack.pt()); values[kMCVertexingLxyzProjected] = - (((track.vx() - collPos[1]) * MotherTrack.px()) + - ((track.vy() - collPos[1]) * MotherTrack.py()) + - ((track.vz() - collPos[2]) * MotherTrack.pz())) / - MotherTrack.p(); + (((track.vx() - collPos[1]) * MotherTrack.px()) + + ((track.vy() - collPos[1]) * MotherTrack.py()) + + ((track.vz() - collPos[2]) * MotherTrack.pz())) / + MotherTrack.p(); values[kMCVertexingTauxyProjected] = - values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); + values[kMCVertexingLxyProjected] * m / (MotherTrack.pt()); values[kMCVertexingTauzProjected] = - values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); + values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz()); values[kMCVertexingTauxyzProjected] = - values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); + values[kMCVertexingLxyzProjected] * m / (MotherTrack.p()); } template -void VarManager::FillTrackCollisionMC(T1 const& track, - const std::array& collPos, - float massHyp, float* values) -{ +void VarManager::FillTrackCollisionMC(T1 const &track, + const std::array &collPos, + float massHyp, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m = o2::constants::physics::MassJPsi; @@ -4430,45 +4369,44 @@ void VarManager::FillTrackCollisionMC(T1 const& track, // displaced vertex is computed with decay product (track) and vertex collPos values[kMCVertexingLxy] = - (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + - (collPos[1] - track.vy()) * (collPos[1] - track.vy()); + (collPos[0] - track.vx()) * (collPos[0] - track.vx()) + + (collPos[1] - track.vy()) * (collPos[1] - track.vy()); values[kMCVertexingLz] = - (collPos[2] - track.vz()) * (collPos[2] - track.vz()); + (collPos[2] - track.vz()) * (collPos[2] - track.vz()); values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz]; values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]); values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]); values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]); values[kMCVertexingTauz] = - (collPos[2] - track.vz()) * m / - (TMath::Abs(track.pz()) * o2::constants::physics::LightSpeedCm2NS); + (collPos[2] - track.vz()) * m / + (TMath::Abs(track.pz()) * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingTauxy] = - values[kMCVertexingLxy] * m / - (track.pt() * o2::constants::physics::LightSpeedCm2NS); + values[kMCVertexingLxy] * m / + (track.pt() * o2::constants::physics::LightSpeedCm2NS); values[kMCVertexingLzProjected] = - ((track.vz() - collPos[2]) * track.pz()) / TMath::Abs(track.pz()); + ((track.vz() - collPos[2]) * track.pz()) / TMath::Abs(track.pz()); values[kMCVertexingLxyProjected] = - (((track.vx() - collPos[0]) * track.px()) + - ((track.vy() - collPos[1]) * track.py())) / - TMath::Abs(track.pt()); + (((track.vx() - collPos[0]) * track.px()) + + ((track.vy() - collPos[1]) * track.py())) / + TMath::Abs(track.pt()); values[kMCVertexingLxyzProjected] = - (((track.vx() - collPos[0]) * track.px()) + - ((track.vy() - collPos[1]) * track.py()) + - ((track.vz() - collPos[2]) * track.pz())) / - track.p(); + (((track.vx() - collPos[0]) * track.px()) + + ((track.vy() - collPos[1]) * track.py()) + + ((track.vz() - collPos[2]) * track.pz())) / + track.p(); values[kMCVertexingTauxyProjected] = - values[kMCVertexingLxyProjected] * m / (track.pt()); + values[kMCVertexingLxyProjected] * m / (track.pt()); values[kMCVertexingTauzProjected] = - values[kMCVertexingLzProjected] * m / TMath::Abs(track.pz()); + values[kMCVertexingLzProjected] * m / TMath::Abs(track.pz()); values[kMCVertexingTauxyzProjected] = - values[kMCVertexingLxyzProjected] * m / (track.p()); + values[kMCVertexingLxyzProjected] * m / (track.p()); } template -void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, - float* values, float Translow, - float Transhigh, float Accweight) -{ +void VarManager::FillEnergyCorrelatorsMC(T const &track, T1 const &t1, + float *values, float Translow, + float Transhigh, float Accweight) { // energy correlators float MassHadron = o2::constants::physics::MassPionCharged; if constexpr (pairType == kJpsiHadronMass) { @@ -4486,16 +4424,16 @@ void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, values[kMCAccweight] = Accweight; values[kMCCosChi] = CosChi; values[kMCWeight_before] = - t1.pt() / o2::constants::physics::MassJPsi * Accweight; + t1.pt() / o2::constants::physics::MassJPsi * Accweight; values[kMCEWeight_before] = - t1.e() / o2::constants::physics::MassJPsi * Accweight; + t1.e() / o2::constants::physics::MassJPsi * Accweight; values[kMCCosTheta] = CosTheta; values[kMCdeltaphi] = deltaphi; values[kMCdeltaeta] = deltaeta; values[kMCHadronPt] = t1.pt(); values[kMCHadronEta] = t1.eta(); values[kMCHadronPhi] = - RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); + RecoDecay::constrainAngle(t1.phi(), -o2::constants::math::PIHalf); values[kMCHadronPdgCode] = t1.pdgCode(); values[kMCWeight] = E_boost / o2::constants::physics::MassJPsi * Accweight; @@ -4528,45 +4466,44 @@ void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans(v2.pt(), v2.eta(), randomPhi_trans, MassHadron); values[kMCCosChi_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); values[kMCWeight_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_trans) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * Accweight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( - v2.pt(), v2.eta(), randomPhi_toward, MassHadron); + v2.pt(), v2.eta(), randomPhi_toward, MassHadron); values[kMCCosChi_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); values[kMCWeight_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_toward) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * Accweight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_away(v2.pt(), v2.eta(), randomPhi_away, MassHadron); values[kMCCosChi_randomPhi_away] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); values[kMCWeight_randomPhi_away] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_away) / - v1.M() * Accweight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * Accweight; values[kMCdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); values[kMCdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); values[kMCdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } template -void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, - const C& collision, float* values) -{ +void VarManager::FillPairPropagateMuon(T1 const &muon1, T2 const &muon2, + const C &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } o2::dataformats::GlobalFwdTrack propmuon1 = PropagateMuon(muon1, collision); o2::dataformats::GlobalFwdTrack propmuon2 = PropagateMuon(muon2, collision); @@ -4585,17 +4522,16 @@ void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; } template -void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPair(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4635,9 +4571,9 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -4649,7 +4585,7 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -4658,14 +4594,14 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) if (fgUsedVars[kPsiPair]) { values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) - ? (v1.Phi() - v2.Phi()) - : (v2.Phi() - v1.Phi()); + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); double xipair = TMath::ACos( - (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / - v2.P()); + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); values[kPsiPair] = (t1.sign() * fgMagField > 0.) - ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) - : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -4688,9 +4624,9 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -4711,18 +4647,18 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -4739,18 +4675,18 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -4760,7 +4696,7 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -4768,18 +4704,18 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -4791,9 +4727,9 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -4810,21 +4746,21 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; // if the truth event plane angle is available, calculate the cos(theta*) // with respect to the true event plane angle for comparison if (fgUsedVars[kMCCosThetaStar] && fgUsedVars[kMCEventPlaneAngle]) { // truth event plane angle ROOT::Math::XYZVector zaxisTrue = - ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), - TMath::Sin(values[kMCEventPlaneAngle]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } } @@ -4867,16 +4803,16 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) fgUsedVars[kQuadDCAsigXYZ] || fgUsedVars[kSignQuadDCAsigXY]) { // Quantities based on the barrel tables values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -4884,19 +4820,19 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) values[kQuadDCAsigXYZ] = -999; } else { double chi2t1 = - (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - - 2. * dca1XY * dca1Z * t1.cZY()) / - det1; + (dca1XY * dca1XY * t1.cZZ() + dca1Z * dca1Z * t1.cYY() - + 2. * dca1XY * dca1Z * t1.cZY()) / + det1; double chi2t2 = - (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - - 2. * dca2XY * dca2Z * t2.cZY()) / - det2; + (dca2XY * dca2XY * t2.cZZ() + dca2Z * dca2Z * t2.cYY() - + 2. * dca2XY * dca2Z * t2.cZY()) / + det2; double dca1sigXYZ = std::sqrt(std::abs(chi2t1) / 2.); double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = std::sqrt( - (dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + (dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -4911,7 +4847,7 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } if constexpr ((pairType == kElectronMuon) && @@ -4928,11 +4864,10 @@ void VarManager::FillPair(T1 const& t1, T2 const& t2, float* values) // change_start: rotation pair template -void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, - float* values) -{ +void VarManager::FillPairRotation(T1 const &t1, T2 const &t2, int rotation, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -4988,9 +4923,9 @@ void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -5002,11 +4937,10 @@ void VarManager::FillPairRotation(T1 const& t1, T2 const& t2, int rotation, } template -void VarManager::FillPairCollision(const C& collision, T1 const& t1, - T2 const& t2, float* values) -{ +void VarManager::FillPairCollision(const C &collision, T1 const &t1, + T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((pairType == kDecayToEE) && @@ -5020,14 +4954,14 @@ void VarManager::FillPairCollision(const C& collision, T1 const& t1, auto trackPart1 = getTrackPar(t1); std::array dca1{1e10f, 1e10f}; trackPart1.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca1); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca1); auto trackPart2 = getTrackPar(t2); std::array dca2{1e10f, 1e10f}; trackPart2.propagateParamToDCA( - {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, - &dca2); + {collision.posX(), collision.posY(), collision.posZ()}, fgMagField, + &dca2); // Recalculated quantities double dca1XY = dca1[0]; @@ -5040,16 +4974,16 @@ void VarManager::FillPairCollision(const C& collision, T1 const& t1, double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -5067,7 +5001,7 @@ void VarManager::FillPairCollision(const C& collision, T1 const& t1, double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -5075,12 +5009,11 @@ void VarManager::FillPairCollision(const C& collision, T1 const& t1, template -void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, - T2 const& t2, M const& materialCorr, - P const& propagator, float* values) -{ +void VarManager::FillPairCollisionMatCorr(C const &collision, T1 const &t1, + T2 const &t2, M const &materialCorr, + P const &propagator, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((pairType == kDecayToEE) && @@ -5097,8 +5030,8 @@ void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPart1, - 2.f, materialCorr, &dca1); + {collision.posX(), collision.posY(), collision.posZ()}, trackPart1, + 2.f, materialCorr, &dca1); getPxPyPz(trackPart1, pVect1); auto trackPart2 = getTrackPar(t2); @@ -5107,8 +5040,8 @@ void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, // trackPar.propagateParamToDCA({collision.posX(), collision.posY(), // collision.posZ()}, fgMagField, &dca); propagator->propagateToDCABxByBz( - {collision.posX(), collision.posY(), collision.posZ()}, trackPart2, - 2.f, materialCorr, &dca2); + {collision.posX(), collision.posY(), collision.posZ()}, trackPart2, + 2.f, materialCorr, &dca2); getPxPyPz(trackPart2, pVect2); // Recalculated quantities @@ -5122,16 +5055,16 @@ void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -5149,19 +5082,18 @@ void VarManager::FillPairCollisionMatCorr(C const& collision, T1 const& t1, double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } } template -void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, - float* values, PairCandidateType pairType) -{ +void VarManager::FillTriple(T1 const &t1, T2 const &t2, T3 const &t3, + float *values, PairCandidateType pairType) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (pairType == kTripleCandidateToEEPhoton) { float m1 = o2::constants::physics::MassElectron; @@ -5229,13 +5161,12 @@ void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, } template -void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairME(T1 const &t1, T2 const &t2, float *values) { // // Lightweight fill function called from the innermost event mixing loop // if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5275,7 +5206,7 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -5285,9 +5216,9 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -5308,18 +5239,18 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -5336,18 +5267,18 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -5357,7 +5288,7 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -5365,18 +5296,18 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -5388,9 +5319,9 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -5409,13 +5340,13 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) float Psi2C1 = getEventPlane(2, values[kQ2X0C1], values[kQ2Y0C1]); float Psi2C2 = getEventPlane(2, values[kQ2X0C2], values[kQ2Y0C2]); values[kCos2DeltaPhi] = TMath::Cos( - 2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP + 2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP values[kCos2DeltaPhiEv1] = TMath::Cos(2 * (v1.Phi() - Psi2A1)); values[kCos2DeltaPhiEv2] = TMath::Cos(2 * (v2.Phi() - Psi2A2)); values[kU2Q2] = - values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + - values[kQ2Y0A1] * - TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP + values[kQ2X0A1] * TMath::Cos(2 * v12.Phi()) + + values[kQ2Y0A1] * + TMath::Sin(2 * v12.Phi()); // WARNING: using the first event EP values[kU2Q2Ev1] = values[kQ2X0A1] * TMath::Cos(2 * v1.Phi()) + values[kQ2Y0A1] * TMath::Sin(2 * v1.Phi()); values[kU2Q2Ev2] = values[kQ2X0A2] * TMath::Cos(2 * v2.Phi()) + @@ -5434,10 +5365,10 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) float V2ME_EP = values[kV2EP1] * values[kCos2DeltaPhiMu1] + values[kV2EP2] * values[kCos2DeltaPhiMu2]; values[kV2ME_SP] = - std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; + std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : V2ME_SP; values[kWV2ME_SP] = std::isnan(V2ME_SP) || std::isinf(V2ME_SP) ? 0. : 1.0; values[kV2ME_EP] = - std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; + std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : V2ME_EP; values[kWV2ME_EP] = std::isnan(V2ME_EP) || std::isinf(V2ME_EP) ? 0. : 1.0; // Cumulant part @@ -5447,20 +5378,20 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) values[kV24p] * values[kCos2DeltaPhiMu2]; values[kV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : V22ME; + ? 0. + : V22ME; values[kWV22ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : 1.0; + ? 0. + : 1.0; values[kV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : V24ME; + ? 0. + : V24ME; values[kWV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) - ? 0. - : 1.0; + ? 0. + : 1.0; // coherent Jpsi A2 bool useCoherentJpsiA2 = fgUsedVars[kA2EPME_TPC] || @@ -5469,7 +5400,7 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = - boostv12(t1.sign() > 0 ? v1 : v2); + boostv12(t1.sign() > 0 ? v1 : v2); float Psi2A = t1.sign() > 0 ? Psi2A1 : Psi2A2; float Psi2B = t1.sign() > 0 ? Psi2B1 : Psi2B2; float Psi2C = t1.sign() > 0 ? Psi2C1 : Psi2C2; @@ -5477,31 +5408,31 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhiME_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] - : values[kDeltaPhiME_TPC]; + ? 2. * TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; values[kDeltaPhiME_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhiME_FT0A] = - values[kDeltaPhiME_FT0A] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] - : values[kDeltaPhiME_FT0A]; + values[kDeltaPhiME_FT0A] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; values[kDeltaPhiME_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhiME_FT0C] = - values[kDeltaPhiME_FT0C] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] - : values[kDeltaPhiME_FT0C]; + values[kDeltaPhiME_FT0C] > TMath::Pi() + ? 2. * TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; // fold delta phMEi to [0, pi/2] values[kDeltaPhiME_TPC] = values[kDeltaPhiME_TPC] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_TPC] - : values[kDeltaPhiME_TPC]; + ? TMath::Pi() - values[kDeltaPhiME_TPC] + : values[kDeltaPhiME_TPC]; values[kDeltaPhiME_FT0A] = values[kDeltaPhiME_FT0A] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_FT0A] - : values[kDeltaPhiME_FT0A]; + ? TMath::Pi() - values[kDeltaPhiME_FT0A] + : values[kDeltaPhiME_FT0A]; values[kDeltaPhiME_FT0C] = values[kDeltaPhiME_FT0C] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhiME_FT0C] - : values[kDeltaPhiME_FT0C]; + ? TMath::Pi() - values[kDeltaPhiME_FT0C] + : values[kDeltaPhiME_FT0C]; values[kCos2DeltaPhiME_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhiME_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhiME_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -5510,11 +5441,11 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) float A2_FT0A = values[kCos2DeltaPhiME_FT0A] / R2EP; float A2_FT0C = values[kCos2DeltaPhiME_FT0C] / R2EP; values[kA2EPME_TPC] = - std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; + std::isnan(A2_TPC) || std::isinf(A2_TPC) ? -999. : A2_TPC; values[kA2EPME_FT0A] = - std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; + std::isnan(A2_FT0A) || std::isinf(A2_FT0A) ? -999. : A2_FT0A; values[kA2EPME_FT0C] = - std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; + std::isnan(A2_FT0C) || std::isinf(A2_FT0C) ? -999. : A2_FT0C; } if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) { @@ -5526,98 +5457,98 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) TMath::Sin(2 * v12.Phi())); values[kM01POIME] = values[kMultDimuonsME] * values[kS11A]; values[kM0111POIME] = - values[kMultDimuonsME] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultDimuonsME] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIME] = (P2 * conj(Q21)).real() / values[kM01POIME]; values[kCORR4POIME] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POIME]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POIME]; values[kM01POIoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME])) - ? values[kM01POIME] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME])) + ? values[kM01POIME] / values[kMultDimuonsME] + : 0; values[kM0111POIoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME])) - ? values[kM0111POIME] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME])) + ? values[kM0111POIME] / values[kMultDimuonsME] + : 0; values[kM11REFoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuonsME] + : 0; values[kM1111REFoverMpME] = - values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultDimuonsME] - : 0; + values[kMultDimuonsME] > 0 && !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuonsME] + : 0; values[kCORR2REFbydimuonsME] = - std::isnan(values[kM11REFoverMpME]) || - std::isinf(values[kM11REFoverMpME]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMpME]) || - std::isinf(values[kM1111REFoverMpME]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbydimuonsME] = - std::isnan(values[kM1111REFoverMpME]) || - std::isinf(values[kM1111REFoverMpME]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMpME]) || - std::isinf(values[kM11REFoverMpME]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REFoverMpME]) || + std::isinf(values[kM1111REFoverMpME]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMpME]) || + std::isinf(values[kM11REFoverMpME]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POIME] = std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM01POIME]) || - std::isinf(values[kM01POIME]) || - std::isnan(values[kCORR4POIME]) || - std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) - ? 0 - : values[kCORR2POIME]; + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || + std::isinf(values[kM01POIME]) || + std::isnan(values[kCORR4POIME]) || + std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) + ? 0 + : values[kCORR2POIME]; values[kCORR4POIME] = - std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || - std::isnan(values[kM0111POIME]) || - std::isinf(values[kM0111POIME]) || - std::isnan(values[kCORR2POIME]) || - std::isinf(values[kCORR2POIME]) || - std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) - ? 0 - : values[kCORR4POIME]; + std::isnan(values[kCORR4POIME]) || std::isinf(values[kCORR4POIME]) || + std::isnan(values[kM0111POIME]) || + std::isinf(values[kM0111POIME]) || + std::isnan(values[kCORR2POIME]) || + std::isinf(values[kCORR2POIME]) || + std::isnan(values[kM01POIME]) || std::isinf(values[kM01POIME]) + ? 0 + : values[kCORR4POIME]; } } if constexpr (pairType == kDecayToMuMu) { @@ -5629,7 +5560,7 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) double dca2Y = t2.fwdDcaY(); double dca2XY = std::sqrt(dca2X * dca2X + dca2Y * dca2Y); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2.); } } if (fgUsedVars[kPairPhiv]) { @@ -5638,9 +5569,8 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values) } template -void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, - float* values) -{ +void VarManager::FillPairRotation_ME(T const &t1, T const &t2, int rotation, + float *values) { if (!values) { values = fgValues; } @@ -5672,9 +5602,9 @@ void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt; @@ -5686,10 +5616,9 @@ void VarManager::FillPairRotation_ME(T const& t1, T const& t2, int rotation, } template -void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) -{ +void VarManager::FillPairMEAcrossTFs(T const &t1, T const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5709,29 +5638,29 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) if (fgUsedVars[kCosThetaStarRandom]) { // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; } if (fgUsedVars[kCosThetaStarFT0C]) { // event plane angle from FT0C ROOT::Math::XYZVector zaxisFT0C = - ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), - TMath::Sin(values[kPsi2C]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kPsi2C]), + TMath::Sin(values[kPsi2C]), 0) + .Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); values[kCos2ThetaStarFT0C] = - values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } } bool useCoherentJpsiA2 = - fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(v1); @@ -5741,29 +5670,29 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi; values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + ? 2. * TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() - ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + ? 2. * TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] values[kDeltaPhi_TPC] = values[kDeltaPhi_TPC] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + ? TMath::Pi() - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = values[kDeltaPhi_FT0A] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + ? TMath::Pi() - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = values[kDeltaPhi_FT0C] > TMath::Pi() / 2. - ? TMath::Pi() - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + ? TMath::Pi() - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2A)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -5772,19 +5701,18 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values) float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; values[kA2EP_TPC] = - std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; values[kA2EP_FT0A] = - std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; values[kA2EP_FT0C] = - std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } } template -void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairMC(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -5826,11 +5754,11 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = - fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame + fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame bool useCS = - fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame + fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kMCCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kMCCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -5851,18 +5779,18 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kMCPhiHE]) { values[kMCPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeHE]) { if (fgUsedVars[kMCCosThetaHE] && fgUsedVars[kMCPhiHE]) { if (values[kMCCosThetaHE] > 0) { values[kMCPhiTildeHE] = RecoDecay::constrainAngle( - values[kMCPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildeHE] = RecoDecay::constrainAngle( - values[kMCPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeHE] = -999; // not computable @@ -5879,18 +5807,18 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kMCPhiCS]) { values[kMCPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildeCS]) { if (fgUsedVars[kMCCosThetaCS] && fgUsedVars[kMCPhiCS]) { if (values[kMCCosThetaCS] > 0) { values[kMCPhiTildeCS] = RecoDecay::constrainAngle( - values[kMCPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildeCS] = RecoDecay::constrainAngle( - values[kMCPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildeCS] = -999; // not computable @@ -5900,7 +5828,7 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{v12.Vect().Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kMCCosThetaPP]) { @@ -5908,18 +5836,18 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kMCPhiPP]) { values[kMCPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kMCPhiTildePP]) { if (fgUsedVars[kMCCosThetaPP] && fgUsedVars[kMCPhiPP]) { if (values[kMCCosThetaPP] > 0) { values[kMCPhiTildePP] = RecoDecay::constrainAngle( - values[kMCPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kMCPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kMCPhiTildePP] = RecoDecay::constrainAngle( - values[kMCPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kMCPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kMCPhiTildePP] = -999; // not computable @@ -5931,9 +5859,9 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kMCCosThetaRM]) { values[kMCCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -5950,18 +5878,18 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) // Randomize the event plane angle to check the unpolarized contribution ROOT::Math::XYZVector zaxisRandom = - ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), - TMath::Sin(values[kRandomPsi2]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kRandomPsi2]), + TMath::Sin(values[kRandomPsi2]), 0) + .Unit(); values[kCosThetaStarRandom] = v_CM.Dot(zaxisRandom); values[kCos2ThetaStarRandom] = - values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; + values[kCosThetaStarRandom] * values[kCosThetaStarRandom]; // truth event plane angle ROOT::Math::XYZVector zaxisTrue = - ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), - TMath::Sin(values[kMCEventPlaneAngle]), 0) - .Unit(); + ROOT::Math::XYZVector(TMath::Cos(values[kMCEventPlaneAngle]), + TMath::Sin(values[kMCEventPlaneAngle]), 0) + .Unit(); values[kMCCosThetaStar] = v_CM.Dot(zaxisTrue); } @@ -5969,41 +5897,40 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values) fgUsedVars[kCos2DeltaPhi_MC] || fgUsedVars[kCos2DeltaPhiPP_MC]) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; ROOT::Math::PtEtaPhiMVector v_daughter = - boostv12(t1.pdgCode() > 0 ? v1 : v2); + boostv12(t1.pdgCode() > 0 ? v1 : v2); // reaction plane float phi = - RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); + RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI); values[kDeltaPhi_Random] = phi - values[kRandomPsi2]; values[kDeltaPhi_Random] = - values[kDeltaPhi_Random] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] - : values[kDeltaPhi_Random]; + values[kDeltaPhi_Random] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; values[kDeltaPhi_MC] = phi - values[kMCEventPlaneAngle]; values[kDeltaPhi_MC] = - values[kDeltaPhi_MC] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] - : values[kDeltaPhi_MC]; + values[kDeltaPhi_MC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; // fold delta phi into [-pi/2, pi/2] values[kDeltaPhi_Random] = - values[kDeltaPhi_Random] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_Random] - : values[kDeltaPhi_Random]; + values[kDeltaPhi_Random] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_Random] + : values[kDeltaPhi_Random]; values[kDeltaPhi_MC] = values[kDeltaPhi_MC] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_MC] - : values[kDeltaPhi_MC]; + ? o2::constants::math::PI - values[kDeltaPhi_MC] + : values[kDeltaPhi_MC]; values[kCos2DeltaPhi_Random] = TMath::Cos(2. * (phi - values[kRandomPsi2])); values[kCos2DeltaPhi_MC] = - TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); + TMath::Cos(2. * (phi - values[kMCEventPlaneAngle])); } } template -void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, - float* values) -{ +void VarManager::FillTripleMC(T1 const &t1, T2 const &t2, T3 const &t3, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (candidateType == kTripleCandidateToEEPhoton) { @@ -6086,19 +6013,18 @@ void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, template -void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, - float* values) -{ +void VarManager::FillPairVertexing(C const &collision, T const &t1, T const &t2, + float *values) { // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -6127,16 +6053,16 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else if constexpr ((pairType == kDecayToMuMu) && muonHasCov) { @@ -6191,7 +6117,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, // \n",secondaryVertex[0],secondaryVertex[1],secondaryVertex[2]); covMatrixPCA = fgFitterTwoProngBarrel.calcPCACovMatrixFlat(); values[kVertexingChi2PCA] = - fgFitterTwoProngBarrel.getChi2AtPCACandidate(); + fgFitterTwoProngBarrel.getChi2AtPCACandidate(); v1 = {fgFitterTwoProngBarrel.getTrack(0).getPt(), fgFitterTwoProngBarrel.getTrack(0).getEta(), fgFitterTwoProngBarrel.getTrack(0).getPhi(), m1}; @@ -6223,14 +6149,14 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, double theta = std::atan2(dz, std::sqrt(dx * dx + dy * dy)); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingLxy] = dx * dx + dy * dy; values[kVertexingLz] = dz * dz; @@ -6240,60 +6166,60 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingTauz] = - -dz * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + -dz * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + (dx * v12.Px() + dy * v12.Py() + dz * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 values[kVertexingLzProjected] = - (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); + (dz * v12.Pz()) / TMath::Sqrt(v12.Pz() * v12.Pz()); values[kVertexingLxyProjected] = (dx * v12.Px()) + (dy * v12.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); values[kVertexingLxyzProjected] = - (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); + (dx * v12.Px()) + (dy * v12.Py()) + (dz * v12.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + - (v12.Pz() * v12.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (v12.Pt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + - (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } } else if constexpr (((pairType == kDecayToEE || pairType == kDecayToKPi) && trackHasCov) || @@ -6337,57 +6263,57 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr] || fgUsedVars[kCosPointingAngle]) { values[kVertexingLxy] = - std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV); values[kVertexingLz] = std::sqrt(dzPair2PV * dzPair2PV); values[kVertexingLxyz] = - std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + - dzPair2PV * dzPair2PV); + std::sqrt(dxPair2PV * dxPair2PV + dyPair2PV * dyPair2PV + + dzPair2PV * dzPair2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * - dxPair2PV * dxPair2PV + - (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * - dyPair2PV * dyPair2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * - dxPair2PV * dyPair2PV); + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * - dzPair2PV * dzPair2PV; + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * - dxPair2PV * dxPair2PV + - (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * - dyPair2PV * dyPair2PV + - (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * - dzPair2PV * dzPair2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * - dxPair2PV * dyPair2PV + - (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * - dxPair2PV * dzPair2PV + - (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * - dyPair2PV * dzPair2PV); + (KFPV.GetCovariance(0) + KFGeoTwoProng.GetCovariance(0)) * + dxPair2PV * dxPair2PV + + (KFPV.GetCovariance(2) + KFGeoTwoProng.GetCovariance(2)) * + dyPair2PV * dyPair2PV + + (KFPV.GetCovariance(5) + KFGeoTwoProng.GetCovariance(5)) * + dzPair2PV * dzPair2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoTwoProng.GetCovariance(1)) * + dxPair2PV * dyPair2PV + + (KFPV.GetCovariance(3) + KFGeoTwoProng.GetCovariance(3)) * + dxPair2PV * dzPair2PV + + (KFPV.GetCovariance(4) + KFGeoTwoProng.GetCovariance(4)) * + dyPair2PV * dzPair2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoTwoProng.GetPseudoProperDecayTime( - KFPV, KFGeoTwoProng.GetMass()) / + KFPV, KFGeoTwoProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzPair2PV * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * @@ -6395,48 +6321,48 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, values[kVertexingPz] = TMath::Abs(KFGeoTwoProng.GetPz()); values[kVertexingSV] = KFGeoTwoProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / - (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoTwoProng.GetMass() / + (KFGeoTwoProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoTwoProng.GetMass() / (TMath::Abs(KFGeoTwoProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + - std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + - std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxPair2PV * dxPair2PV) * v12.Px() + + std::sqrt(dyPair2PV * dyPair2PV) * v12.Py() + + std::sqrt(dzPair2PV * dzPair2PV) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); } // As defined in Run 2 (projected onto momentum) if (fgUsedVars[kVertexingLxyProjected] || fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { values[kVertexingLzProjected] = - (dzPair2PV * KFGeoTwoProng.GetPz()) / - TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); + (dzPair2PV * KFGeoTwoProng.GetPz()) / + TMath::Sqrt(KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz()); values[kVertexingLxyProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + - (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy())); values[kVertexingLxyzProjected] = (dxPair2PV * KFGeoTwoProng.GetPx()) + (dyPair2PV * KFGeoTwoProng.GetPy()) + (dzPair2PV * KFGeoTwoProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + - (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + - (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoTwoProng.GetPx() * KFGeoTwoProng.GetPx()) + + (KFGeoTwoProng.GetPy() * KFGeoTwoProng.GetPy()) + + (KFGeoTwoProng.GetPz() * KFGeoTwoProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoTwoProng.GetMass() / (KFGeoTwoProng.GetPt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (KFGeoTwoProng.GetPt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (KFGeoTwoProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoTwoProng.GetMass() / TMath::Abs(KFGeoTwoProng.GetPz()); @@ -6445,16 +6371,16 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, if (fgUsedVars[kVertexingLxyOverErr] || fgUsedVars[kVertexingLzOverErr] || fgUsedVars[kVertexingLxyzOverErr]) { values[kVertexingLxyOverErr] = - values[kVertexingLxy] / values[kVertexingLxyErr]; + values[kVertexingLxy] / values[kVertexingLxyErr]; values[kVertexingLzOverErr] = - values[kVertexingLz] / values[kVertexingLzErr]; + values[kVertexingLz] / values[kVertexingLzErr]; values[kVertexingLxyzOverErr] = - values[kVertexingLxyz] / values[kVertexingLxyzErr]; + values[kVertexingLxyz] / values[kVertexingLxyzErr]; } if (fgUsedVars[kKFChi2OverNDFGeo]) { values[kKFChi2OverNDFGeo] = - KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); + KFGeoTwoProng.GetChi2() / KFGeoTwoProng.GetNDF(); } if (fgUsedVars[kKFCosPA]) { values[kKFCosPA] = calculateCosPA(KFGeoTwoProng, KFPV); @@ -6474,20 +6400,20 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, } if (fgUsedVars[kKFDCAxyBetweenProngs]) { values[kKFDCAxyBetweenProngs] = - trk0KF.GetDistanceFromParticleXY(trk1KF); + trk0KF.GetDistanceFromParticleXY(trk1KF); } if (fgUsedVars[kKFTracksDCAxyzMax]) { values[kKFTracksDCAxyzMax] = - values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] - ? values[kKFTrack0DCAxyz] - : values[kKFTrack1DCAxyz]; + values[kKFTrack0DCAxyz] > values[kKFTrack1DCAxyz] + ? values[kKFTrack0DCAxyz] + : values[kKFTrack1DCAxyz]; } if (fgUsedVars[kKFTracksDCAxyMax]) { values[kKFTracksDCAxyMax] = TMath::Abs(values[kKFTrack0DCAxy]) > - TMath::Abs(values[kKFTrack1DCAxy]) - ? values[kKFTrack0DCAxy] - : values[kKFTrack1DCAxy]; + TMath::Abs(values[kKFTrack1DCAxy]) + ? values[kKFTrack0DCAxy] + : values[kKFTrack1DCAxy]; } if (fgUsedVars[kKFTrack0DeviationFromPV] || fgUsedVars[kKFTrack1DeviationFromPV]) { @@ -6497,9 +6423,9 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, if (fgUsedVars[kKFTrack0DeviationxyFromPV] || fgUsedVars[kKFTrack1DeviationxyFromPV]) { values[kKFTrack0DeviationxyFromPV] = - trk0KF.GetDeviationFromVertexXY(KFPV); + trk0KF.GetDeviationFromVertexXY(KFPV); values[kKFTrack1DeviationxyFromPV] = - trk1KF.GetDeviationFromVertexXY(KFPV); + trk1KF.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFJpsiDCAxyz]) { values[kKFJpsiDCAxyz] = KFGeoTwoProng.GetDistanceFromVertex(KFPV); @@ -6510,15 +6436,15 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, if (fgUsedVars[kKFPairDeviationFromPV] || fgUsedVars[kKFPairDeviationxyFromPV]) { values[kKFPairDeviationFromPV] = - KFGeoTwoProng.GetDeviationFromVertex(KFPV); + KFGeoTwoProng.GetDeviationFromVertex(KFPV); values[kKFPairDeviationxyFromPV] = - KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); + KFGeoTwoProng.GetDeviationFromVertexXY(KFPV); } if (fgUsedVars[kKFChi2OverNDFGeoTop] || fgUsedVars[kKFMassGeoTop]) { KFParticle KFGeoTopTwoProngBarrel = KFGeoTwoProng; KFGeoTopTwoProngBarrel.SetProductionVertex(KFPV); values[kKFChi2OverNDFGeoTop] = - KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); + KFGeoTopTwoProngBarrel.GetChi2() / KFGeoTopTwoProngBarrel.GetNDF(); float mass = 0., massErr = 0.; if (!KFGeoTopTwoProngBarrel.GetMass(mass, massErr)) { values[kKFMassGeoTop] = mass; @@ -6554,21 +6480,20 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2, template void VarManager::FillPairVertexingRecomputePV( - C const& /*collision*/, T const& t1, T const& t2, - const o2::dataformats::VertexBase& pvRefitted, float* values) -{ + C const & /*collision*/, T const &t1, T const &t2, + const o2::dataformats::VertexBase &pvRefitted, float *values) { // recompute decay lenght variables using updated primary vertex // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -6622,30 +6547,29 @@ void VarManager::FillPairVertexingRecomputePV( } values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + - (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); + (secondaryVertex[0] - pvRefitted.getX()) * v12.Px() + + (secondaryVertex[1] - pvRefitted.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } } } template -void VarManager::FillTripletVertexing(C const& collision, T const& t1, - T const& t2, T const& t3, +void VarManager::FillTripletVertexing(C const &collision, T const &t1, + T const &t2, T const &t3, VarManager::PairCandidateType tripletType, - float* values) -{ + float *values) { // TODO: Vertexing error variables constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -6670,26 +6594,26 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; std::array t3covs = { - t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -6726,7 +6650,7 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); std::array covMatrixPCA = - fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); @@ -6744,16 +6668,16 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -6762,61 +6686,61 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } else { KFParticle trk0KF; @@ -6867,59 +6791,59 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, double dzTriplet2PV = KFGeoThreeProng.GetZ() - KFPV.GetZ(); values[kVertexingLxy] = - std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV); values[kVertexingLz] = std::sqrt(dzTriplet2PV * dzTriplet2PV); values[kVertexingLxyz] = - std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + - dzTriplet2PV * dzTriplet2PV); + std::sqrt(dxTriplet2PV * dxTriplet2PV + dyTriplet2PV * dyTriplet2PV + + dzTriplet2PV * dzTriplet2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet2PV * dxTriplet2PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet2PV * dyTriplet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet2PV * dyTriplet2PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet2PV * dzTriplet2PV; + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet2PV * dxTriplet2PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet2PV * dyTriplet2PV + - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet2PV * dzTriplet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet2PV * dyTriplet2PV + - (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * - dxTriplet2PV * dzTriplet2PV + - (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * - dyTriplet2PV * dzTriplet2PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet2PV * dxTriplet2PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet2PV * dzTriplet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet2PV * dyTriplet2PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet2PV * dzTriplet2PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet2PV * dzTriplet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( - KFPV, KFGeoThreeProng.GetMass()) / + KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzTriplet2PV * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * @@ -6927,43 +6851,43 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, values[kVertexingPz] = TMath::Abs(KFGeoThreeProng.GetPz()); values[kVertexingSV] = KFGeoThreeProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / - (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoThreeProng.GetMass() / (TMath::Abs(KFGeoThreeProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + - std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + - std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxTriplet2PV * dxTriplet2PV) * v123.Px() + + std::sqrt(dyTriplet2PV * dyTriplet2PV) * v123.Py() + + std::sqrt(dzTriplet2PV * dzTriplet2PV) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); values[kVertexingLzProjected] = - (dzTriplet2PV * KFGeoThreeProng.GetPz()) / - TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + (dzTriplet2PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); values[kVertexingLxyProjected] = - (dxTriplet2PV * KFGeoThreeProng.GetPx()) + - (dyTriplet2PV * KFGeoThreeProng.GetPy()); + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); values[kVertexingLxyzProjected] = - (dxTriplet2PV * KFGeoThreeProng.GetPx()) + - (dyTriplet2PV * KFGeoThreeProng.GetPy()) + - (dzTriplet2PV * KFGeoThreeProng.GetPz()); + (dxTriplet2PV * KFGeoThreeProng.GetPx()) + + (dyTriplet2PV * KFGeoThreeProng.GetPy()) + + (dzTriplet2PV * KFGeoThreeProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + - (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass() / (KFGeoThreeProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoThreeProng.GetMass() / TMath::Abs(KFGeoThreeProng.GetPz()); @@ -6973,20 +6897,19 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, template -void VarManager::FillDileptonTrackVertexing(C const& collision, - T1 const& lepton1, - T1 const& lepton2, T1 const& track, - float* values) -{ +void VarManager::FillDileptonTrackVertexing(C const &collision, + T1 const &lepton1, + T1 const &lepton2, T1 const &track, + float *values) { constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); constexpr bool muonHasCov = - ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); + ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mtrack = o2::constants::physics::MassMuon; @@ -7022,35 +6945,35 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, lepton1.snp(), lepton1.tgl(), lepton1.signed1Pt()}; std::array lepton1covs = { - lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), - lepton1.cSnpY(), lepton1.cSnpZ(), lepton1.cSnpSnp(), - lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), - lepton1.cTglTgl(), lepton1.c1PtY(), lepton1.c1PtZ(), - lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; + lepton1.cYY(), lepton1.cZY(), lepton1.cZZ(), + lepton1.cSnpY(), lepton1.cSnpZ(), lepton1.cSnpSnp(), + lepton1.cTglY(), lepton1.cTglZ(), lepton1.cTglSnp(), + lepton1.cTglTgl(), lepton1.c1PtY(), lepton1.c1PtZ(), + lepton1.c1PtSnp(), lepton1.c1PtTgl(), lepton1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{lepton1.x(), lepton1.alpha(), lepton1pars, lepton1covs}; std::array lepton2pars = {lepton2.y(), lepton2.z(), lepton2.snp(), lepton2.tgl(), lepton2.signed1Pt()}; std::array lepton2covs = { - lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), - lepton2.cSnpY(), lepton2.cSnpZ(), lepton2.cSnpSnp(), - lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), - lepton2.cTglTgl(), lepton2.c1PtY(), lepton2.c1PtZ(), - lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; + lepton2.cYY(), lepton2.cZY(), lepton2.cZZ(), + lepton2.cSnpY(), lepton2.cSnpZ(), lepton2.cSnpSnp(), + lepton2.cTglY(), lepton2.cTglZ(), lepton2.cTglSnp(), + lepton2.cTglTgl(), lepton2.c1PtY(), lepton2.c1PtZ(), + lepton2.c1PtSnp(), lepton2.c1PtTgl(), lepton2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{lepton2.x(), lepton2.alpha(), lepton2pars, lepton2covs}; std::array lepton3pars = {track.y(), track.z(), track.snp(), track.tgl(), track.signed1Pt()}; std::array lepton3covs = { - track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), - track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), - track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), - track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; + track.cYY(), track.cZY(), track.cZZ(), track.cSnpY(), + track.cSnpZ(), track.cSnpSnp(), track.cTglY(), track.cTglZ(), + track.cTglSnp(), track.cTglTgl(), track.c1PtY(), track.c1PtZ(), + track.c1PtSnp(), track.c1PtTgl(), track.c1Pt21Pt2()}; o2::track::TrackParCov pars3{track.x(), track.alpha(), lepton3pars, lepton3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); procCodeJpsi = VarManager::fgFitterTwoProngBarrel.process(pars1, pars2); } else { return; @@ -7134,68 +7057,68 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); if (fgUsedVars[kVertexingLxy] || fgUsedVars[kVertexingLz] || fgUsedVars[kVertexingLxyz]) { values[VarManager::kVertexingLxy] = - (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + - (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posX() - secondaryVertex[0]) * + (collision.posX() - secondaryVertex[0]) + + (collision.posY() - secondaryVertex[1]) * + (collision.posY() - secondaryVertex[1]); values[VarManager::kVertexingLz] = - (collision.posZ() - secondaryVertex[2]) * - (collision.posZ() - secondaryVertex[2]); + (collision.posZ() - secondaryVertex[2]) * + (collision.posZ() - secondaryVertex[2]); values[VarManager::kVertexingLxyz] = values[VarManager::kVertexingLxy] + values[VarManager::kVertexingLz]; values[VarManager::kVertexingLxy] = - std::sqrt(values[VarManager::kVertexingLxy]); + std::sqrt(values[VarManager::kVertexingLxy]); values[VarManager::kVertexingLz] = - std::sqrt(values[VarManager::kVertexingLz]); + std::sqrt(values[VarManager::kVertexingLz]); values[VarManager::kVertexingLxyz] = - std::sqrt(values[VarManager::kVertexingLxyz]); + std::sqrt(values[VarManager::kVertexingLxyz]); } if (fgUsedVars[kVertexingLxyzErr] || fgUsedVars[kVertexingLxyErr] || fgUsedVars[kVertexingLzErr]) { values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); } values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v123.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); if (fgUsedVars[kCosPointingAngle] && fgUsedVars[kVertexingLxyz]) { values[VarManager::kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); } // run 2 definitions: Lxy projected onto the momentum vector of the // candidate @@ -7203,27 +7126,27 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingTauxyProjected]) { values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / v123.Pt(); + values[kVertexingLxyProjected] * v123.M() / v123.Pt(); } } } else { @@ -7253,7 +7176,7 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, // Quantities between 3rd prong and candidate if (fgUsedVars[kKFDCAxyzBetweenProngs]) { values[kKFDCAxyzBetweenProngs] = - KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); + KFGeoTwoLeptons.GetDistanceFromParticle(hadronKF); } KFGeoThreeProng.SetConstructMethod(2); @@ -7285,69 +7208,69 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, dyTriplet3PV * dyTriplet3PV + dzTriplet3PV * dzTriplet3PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet3PV * dxTriplet3PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet3PV * dyTriplet3PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet3PV * dyTriplet3PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet3PV * dzTriplet3PV; + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * - dxTriplet3PV * dxTriplet3PV + - (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * - dyTriplet3PV * dyTriplet3PV + - (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * - dzTriplet3PV * dzTriplet3PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * - dxTriplet3PV * dyTriplet3PV + - (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * - dxTriplet3PV * dzTriplet3PV + - (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * - dyTriplet3PV * dzTriplet3PV); + (KFPV.GetCovariance(0) + KFGeoThreeProng.GetCovariance(0)) * + dxTriplet3PV * dxTriplet3PV + + (KFPV.GetCovariance(2) + KFGeoThreeProng.GetCovariance(2)) * + dyTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(5) + KFGeoThreeProng.GetCovariance(5)) * + dzTriplet3PV * dzTriplet3PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoThreeProng.GetCovariance(1)) * + dxTriplet3PV * dyTriplet3PV + + (KFPV.GetCovariance(3) + KFGeoThreeProng.GetCovariance(3)) * + dxTriplet3PV * dzTriplet3PV + + (KFPV.GetCovariance(4) + KFGeoThreeProng.GetCovariance(4)) * + dyTriplet3PV * dzTriplet3PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / - values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / + values[kVertexingLxyz]; if (fgUsedVars[kVertexingTauxy]) { values[kVertexingTauxy] = KFGeoThreeProng.GetPseudoProperDecayTime( - KFPV, KFGeoThreeProng.GetMass()) / + KFPV, KFGeoThreeProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kVertexingTauxyErr]) { values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / - (KFGeoThreeProng.GetPt() * - o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoThreeProng.GetMass() / + (KFGeoThreeProng.GetPt() * + o2::constants::physics::LightSpeedCm2NS); } if (fgUsedVars[kCosPointingAngle]) { values[VarManager::kCosPointingAngle] = - (dxTriplet3PV * KFGeoThreeProng.GetPx() + - dyTriplet3PV * KFGeoThreeProng.GetPy() + - dzTriplet3PV * KFGeoThreeProng.GetPz()) / - (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); + (dxTriplet3PV * KFGeoThreeProng.GetPx() + + dyTriplet3PV * KFGeoThreeProng.GetPy() + + dzTriplet3PV * KFGeoThreeProng.GetPz()) / + (KFGeoThreeProng.GetP() * values[VarManager::kVertexingLxyz]); } } // end calculate vertex variables @@ -7356,33 +7279,33 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, fgUsedVars[kVertexingLxyzProjected] || fgUsedVars[kVertexingLzProjected]) { values[kVertexingLzProjected] = - (dzTriplet3PV * KFGeoThreeProng.GetPz()) / - TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); + (dzTriplet3PV * KFGeoThreeProng.GetPz()) / + TMath::Sqrt(KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz()); values[kVertexingLxyProjected] = - (dxTriplet3PV * KFGeoThreeProng.GetPx()) + - (dyTriplet3PV * KFGeoThreeProng.GetPy()); + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy())); values[kVertexingLxyzProjected] = - (dxTriplet3PV * KFGeoThreeProng.GetPx()) + - (dyTriplet3PV * KFGeoThreeProng.GetPy()) + - (dzTriplet3PV * KFGeoThreeProng.GetPz()); + (dxTriplet3PV * KFGeoThreeProng.GetPx()) + + (dyTriplet3PV * KFGeoThreeProng.GetPy()) + + (dzTriplet3PV * KFGeoThreeProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + - (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + - (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoThreeProng.GetPx() * KFGeoThreeProng.GetPx()) + + (KFGeoThreeProng.GetPy() * KFGeoThreeProng.GetPy()) + + (KFGeoThreeProng.GetPz() * KFGeoThreeProng.GetPz())); values[kVertexingTauxyProjected] = - (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / - (KFGeoThreeProng.GetPt()); + (values[kVertexingLxyProjected] * KFGeoThreeProng.GetMass()) / + (KFGeoThreeProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = - (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / - TMath::Abs(KFGeoThreeProng.GetPz()); + (values[kVertexingLzProjected] * KFGeoThreeProng.GetMass()) / + TMath::Abs(KFGeoThreeProng.GetPz()); } // end Run 2 quantities } // end eventHasVtxCov } // end (candidateType == kBtoJpsiEEK) && trackHasCov @@ -7391,16 +7314,15 @@ void VarManager::FillDileptonTrackVertexing(C const& collision, template void VarManager::FillQVectorFromGFW( - C const& /*collision*/, A const& compA11, A const& compB11, - A const& compC11, A const& compA21, A const& compB21, A const& compC21, - A const& compA31, A const& compB31, A const& compC31, A const& compA41, - A const& compB41, A const& compC41, A const& compA23, A const& compA42, - float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, - float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, - float S41A, float* values) -{ + C const & /*collision*/, A const &compA11, A const &compB11, + A const &compC11, A const &compA21, A const &compB21, A const &compC21, + A const &compA31, A const &compB31, A const &compC31, A const &compA41, + A const &compB41, A const &compC41, A const &compA23, A const &compA42, + float S10A, float S10B, float S10C, float S11A, float S11B, float S11C, + float S12A, float S13A, float S14A, float S21A, float S22A, float S31A, + float S41A, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Fill Qn vectors from generic flow framework for different eta gap A, B, C @@ -7431,13 +7353,13 @@ void VarManager::FillQVectorFromGFW( values[kQ4X0C] = compC41.real() / S11C; values[kQ4Y0C] = compC41.imag() / S11C; values[kQ42XA] = - compA42.real(); // Only being used by cumulants, no need for normalization + compA42.real(); // Only being used by cumulants, no need for normalization values[kQ42YA] = - compA42.imag(); // Only being used by cumulants, no need for normalization + compA42.imag(); // Only being used by cumulants, no need for normalization values[kQ23XA] = - compA23.real(); // Only being used by cumulants, no need for normalization + compA23.real(); // Only being used by cumulants, no need for normalization values[kQ23YA] = - compA23.imag(); // Only being used by cumulants, no need for normalization + compA23.imag(); // Only being used by cumulants, no need for normalization values[kS11A] = S11A; values[kS12A] = S12A; values[kS13A] = S13A; @@ -7465,7 +7387,7 @@ void VarManager::FillQVectorFromGFW( // Fill necessary quantities for cumulant calculations with weighted Q-vectors values[kM11REF] = S21A - S12A; values[kM1111REF] = - S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; + S41A - 6. * S12A * S21A + 8. * S13A * S11A + 3. * S22A - 6. * S14A; values[kCORR2REF] = (norm(compA21) - S12A) / values[kM11REF]; values[kCORR4REF] = (std::pow(norm(compA21), 2) + norm(compA42) - 2. * (compA42 * conj(compA21) * conj(compA21)).real() + @@ -7473,25 +7395,25 @@ void VarManager::FillQVectorFromGFW( 4. * S12A * norm(compA21) - 6. * S14A + 2. * S22A) / values[kM1111REF]; values[kCORR2REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR2REF]; + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR2REF]; values[kM11REF] = - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) - ? 0 - : values[kM11REF]; + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) + ? 0 + : values[kM11REF]; values[kCORR4REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR4REF]; + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR4REF]; values[kM1111REF] = - std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) - ? 0 - : values[kM1111REF]; + std::isnan(values[kM1111REF]) || std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || std::isinf(values[kCORR4REF]) + ? 0 + : values[kM1111REF]; values[kCORR2CORR4REF] = values[kCORR2REF] * values[kCORR4REF]; values[kM11M1111REF] = values[kM11REF] * values[kM1111REF]; @@ -7503,17 +7425,17 @@ void VarManager::FillQVectorFromGFW( values[kM11REFetagap] = S11B * S11C; values[kCORR2REFetagap] = ((QB * conj(QC)).real()) / values[kM11REFetagap]; values[kCORR2REFetagap] = std::isnan(values[kM11REFetagap]) || - std::isinf(values[kM11REFetagap]) || - std::isnan(values[kCORR2REFetagap]) || - std::isinf(values[kCORR2REFetagap]) - ? 0 - : values[kCORR2REFetagap]; + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) + ? 0 + : values[kCORR2REFetagap]; values[kM11REFetagap] = std::isnan(values[kM11REFetagap]) || - std::isinf(values[kM11REFetagap]) || - std::isnan(values[kCORR2REFetagap]) || - std::isinf(values[kCORR2REFetagap]) - ? 0 - : values[kM11REFetagap]; + std::isinf(values[kM11REFetagap]) || + std::isnan(values[kCORR2REFetagap]) || + std::isinf(values[kCORR2REFetagap]) + ? 0 + : values[kM11REFetagap]; // TODO: provide different computations for R // Compute the R factor using the 2 sub-events technique for second and third @@ -7528,13 +7450,13 @@ void VarManager::FillQVectorFromGFW( values[kPsi2C] = Psi2C; values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR3SP] = - (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); values[kR2EP_AB] = TMath::Cos(2 * (Psi2A - Psi2B)); values[kR2EP_AC] = TMath::Cos(2 * (Psi2A - Psi2C)); @@ -7543,10 +7465,9 @@ void VarManager::FillQVectorFromGFW( } template -void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) -{ +void VarManager::FillQVectorFromCentralFW(C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float xQVecFT0a = collision.qvecFT0ARe(); // already normalised @@ -7576,11 +7497,11 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kMultAPOS] = collision.nTrkTPCpos(); values[kMultANEG] = collision.nTrkTPCneg(); values[kMultB] = - collision - .sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity + collision + .sumAmplFT0A(); // Be careful, this is weighted sum of multiplicity values[kMultC] = - collision - .sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity + collision + .sumAmplFT0C(); // Be careful, this is weighted sum of multiplicity // Q-vectors components correlation (A, B, C) values[kQ2YYAB] = values[kQ2Y0A] * values[kQ2Y0B]; @@ -7599,9 +7520,9 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) EventPlaneHelper epHelper; float Psi2A = epHelper.GetEventPlane(values[kQ2X0A], values[kQ2Y0A], 2); float Psi2APOS = - epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); + epHelper.GetEventPlane(values[kQ2X0APOS], values[kQ2Y0APOS], 2); float Psi2ANEG = - epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); + epHelper.GetEventPlane(values[kQ2X0ANEG], values[kQ2Y0ANEG], 2); float Psi2B = epHelper.GetEventPlane(values[kQ2X0B], values[kQ2Y0B], 2); float Psi2C = epHelper.GetEventPlane(values[kQ2X0C], values[kQ2Y0C], 2); @@ -7612,11 +7533,11 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kPsi2C] = Psi2C; values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR2SP_FT0CTPCPOS] = (xQVecFT0c * xQVecBPos + yQVecFT0c * yQVecBPos); values[kR2SP_FT0CTPCNEG] = (xQVecFT0c * xQVecBNeg + yQVecFT0c * yQVecBNeg); values[kR2SP_FT0ATPCPOS] = (xQVecFT0a * xQVecBPos + yQVecFT0a * yQVecBPos); @@ -7638,28 +7559,27 @@ void VarManager::FillQVectorFromCentralFW(C const& collision, float* values) values[kR2EP_AC] = TMath::Cos(2 * getDeltaPsiInRange(epTPCFull, epFT0c, 2)); values[kR2EP_BC] = TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epFT0c, 2)); values[kR2EP_FT0CTPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBPoss, 2)); values[kR2EP_FT0CTPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0c, epBNegs, 2)); values[kR2EP_FT0ATPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBPoss, 2)); values[kR2EP_FT0ATPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0a, epBNegs, 2)); values[kR2EP_FT0MTPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBPoss, 2)); values[kR2EP_FT0MTPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFT0m, epBNegs, 2)); values[kR2EP_FV0ATPCPOS] = - TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBPoss, 2)); values[kR2EP_FV0ATPCNEG] = - TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); + TMath::Cos(2 * getDeltaPsiInRange(epFV0a, epBNegs, 2)); } template -void VarManager::FillSpectatorPlane(C const& collision, float* values) -{ +void VarManager::FillSpectatorPlane(C const &collision, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } auto zncEnergy = collision.energySectorZNC(); @@ -7674,13 +7594,13 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) } } float znaCommon = - collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); + collision.energyCommonZNA() < 0 ? -1.f : collision.energyCommonZNA(); float zncCommon = - collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); + collision.energyCommonZNC() < 0 ? -1.f : collision.energyCommonZNC(); float zpaCommon = - collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); + collision.energyCommonZPA() < 0 ? -1.f : collision.energyCommonZPA(); float zpcCommon = - collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); + collision.energyCommonZPC() < 0 ? -1.f : collision.energyCommonZPC(); // Store ZNA and ZNC energies for calibrations values[kEnergyCommonZNA] = znaCommon; @@ -7762,7 +7682,7 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) values[kQ1ZNACXY] = values[kQ1ZNAX] * values[kQ1ZNCY]; } else { values[kQ1ZNACXX] = values[kQ1ZNACYY] = values[kQ1ZNACYX] = - values[kQ1ZNACXY] = 999.; + values[kQ1ZNACXY] = 999.; } if (znaCommon != 0 && sumZNA != 0 && zncCommon != 0 && sumZNC != 0) { @@ -7772,11 +7692,10 @@ void VarManager::FillSpectatorPlane(C const& collision, float* values) } template -void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairVn(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -7815,13 +7734,13 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) values[kU3Q3] = values[kQ3X0A] * TMath::Cos(3 * v12.Phi()) + values[kQ3Y0A] * TMath::Sin(3 * v12.Phi()); values[kR2SP_AB] = - (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); + (values[kQ2X0A] * values[kQ2X0B] + values[kQ2Y0A] * values[kQ2Y0B]); values[kR2SP_AC] = - (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); + (values[kQ2X0A] * values[kQ2X0C] + values[kQ2Y0A] * values[kQ2Y0C]); values[kR2SP_BC] = - (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); + (values[kQ2X0B] * values[kQ2X0C] + values[kQ2Y0B] * values[kQ2Y0C]); values[kR3SP] = - (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); + (values[kQ3X0B] * values[kQ3X0C] + values[kQ3Y0B] * values[kQ3Y0C]); float Psi2A = getEventPlane(2, values[kQ2X0A], values[kQ2Y0A]); float Psi2APOS = getEventPlane(2, values[kQ2X0APOS], values[kQ2Y0APOS]); @@ -7848,7 +7767,7 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) values[kWV2SP] = std::isnan(V2SP) || std::isinf(V2SP) ? 0. : 1.0; values[kV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : V2EP; values[kV2EP_FT0C] = - std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; + std::isnan(V2EP_FT0C) || std::isinf(V2EP_FT0C) ? 0. : V2EP_FT0C; values[kWV2EP] = std::isnan(V2EP) || std::isinf(V2EP) ? 0. : 1.0; if (std::isnan(VarManager::fgValues[VarManager::kU2Q2])) { @@ -7885,24 +7804,24 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) ROOT::Math::XYZVectorF v_CM = (t1.sign() > 0 ? v1_CM : v2_CM); ROOT::Math::XYZVector zaxisTPC = - ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2A), TMath::Sin(Psi2A), 0).Unit(); values[kCosThetaStarTPC] = v_CM.Dot(zaxisTPC); ROOT::Math::XYZVector zaxisFT0A = - ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2B), TMath::Sin(Psi2B), 0).Unit(); values[kCosThetaStarFT0A] = v_CM.Dot(zaxisFT0A); ROOT::Math::XYZVector zaxisFT0C = - ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); + ROOT::Math::XYZVector(TMath::Cos(Psi2C), TMath::Sin(Psi2C), 0).Unit(); values[kCosThetaStarFT0C] = v_CM.Dot(zaxisFT0C); values[kAbsCosThetaStarFT0C] = std::abs(values[kCosThetaStarFT0C]); values[kCos2ThetaStarFT0C] = - values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; + values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C]; } // Coherent Jpsi A2 bool useCoherentJpsiA2 = - fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; + fgUsedVars[kA2EP_TPC] || fgUsedVars[kA2EP_FT0A] || fgUsedVars[kA2EP_FT0C]; if (useCoherentJpsiA2) { // remove daughter from TPC Q-vector // TODO: remove based on track cut in qVectorTable @@ -7948,36 +7867,36 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) // reaction plane float phi = v_daughter.Phi() > o2::constants::math::PI - ? o2::constants::math::TwoPI - v_daughter.Phi() - : v_daughter.Phi(); + ? o2::constants::math::TwoPI - v_daughter.Phi() + : v_daughter.Phi(); values[kDeltaPhi_TPC] = phi > Psi2ATPC ? phi - Psi2ATPC : Psi2ATPC - phi; values[kDeltaPhi_TPC] = - values[kDeltaPhi_TPC] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi; values[kDeltaPhi_FT0A] = - values[kDeltaPhi_FT0A] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi; values[kDeltaPhi_FT0C] = - values[kDeltaPhi_FT0C] > o2::constants::math::PI - ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] > o2::constants::math::PI + ? o2::constants::math::TwoPI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; // fold delta phi to [0, pi/2] values[kDeltaPhi_TPC] = - values[kDeltaPhi_TPC] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_TPC] - : values[kDeltaPhi_TPC]; + values[kDeltaPhi_TPC] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_TPC] + : values[kDeltaPhi_TPC]; values[kDeltaPhi_FT0A] = - values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_FT0A] - : values[kDeltaPhi_FT0A]; + values[kDeltaPhi_FT0A] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0A] + : values[kDeltaPhi_FT0A]; values[kDeltaPhi_FT0C] = - values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf - ? o2::constants::math::PI - values[kDeltaPhi_FT0C] - : values[kDeltaPhi_FT0C]; + values[kDeltaPhi_FT0C] > o2::constants::math::PIHalf + ? o2::constants::math::PI - values[kDeltaPhi_FT0C] + : values[kDeltaPhi_FT0C]; values[kCos2DeltaPhi_TPC] = TMath::Cos(2. * (phi - Psi2ATPC)); values[kCos2DeltaPhi_FT0A] = TMath::Cos(2. * (phi - Psi2B)); values[kCos2DeltaPhi_FT0C] = TMath::Cos(2. * (phi - Psi2C)); @@ -7986,11 +7905,11 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) float A2RP_FT0A = values[kCos2DeltaPhi_FT0A] / values[kR2EP]; float A2RP_FT0C = values[kCos2DeltaPhi_FT0C] / values[kR2EP]; values[kA2EP_TPC] = - std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; + std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC; values[kA2EP_FT0A] = - std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; + std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A; values[kA2EP_FT0C] = - std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; + std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C; } // kV4, kC4POI, kC4REF etc. @@ -8007,356 +7926,356 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) 2. * values[kS13A]); values[kCORR2POI] = (P2 * conj(Q21)).real() / values[kM01POI]; values[kCORR4POI] = - (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - - 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) - .real() / - values[kM0111POI]; + (P2 * Q21 * conj(Q21) * conj(Q21) - P2 * Q21 * conj(Q42) - + 2. * values[kS12A] * P2 * conj(Q21) + 2. * P2 * conj(Q23)) + .real() / + values[kM0111POI]; values[kM01POIoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? values[kM01POI] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? values[kM01POI] / values[kMultDimuons] + : 0; values[kM0111POIoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI])) - ? values[kM0111POI] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? values[kM0111POI] / values[kMultDimuons] + : 0; values[kM11REFoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultDimuons] + : 0; values[kM1111REFoverMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF])) - ? values[kM1111REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF])) + ? values[kM1111REF] / values[kMultDimuons] + : 0; values[kCORR2REFbydimuons] = std::isnan(values[kM11REFoverMp]) || - std::isinf(values[kM11REFoverMp]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REFoverMp]) || - std::isinf(values[kM1111REFoverMp]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) - ? 0 - : values[kCORR2REF]; + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REFoverMp]) || + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) + ? 0 + : values[kCORR2REF]; values[kCORR4REFbydimuons] = std::isnan(values[kM1111REFoverMp]) || - std::isinf(values[kM1111REFoverMp]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF]) || - std::isnan(values[kM11REFoverMp]) || - std::isinf(values[kM11REFoverMp]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) - ? 0 - : values[kCORR4REF]; + std::isinf(values[kM1111REFoverMp]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF]) || + std::isnan(values[kM11REFoverMp]) || + std::isinf(values[kM11REFoverMp]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) + ? 0 + : values[kCORR4REF]; values[kCORR2POI] = - std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || - std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2POI]; + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI]; values[kCORR4POI] = - std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) - ? 0 - : values[kCORR4POI]; + std::isnan(values[kCORR4POI]) || std::isinf(values[kCORR4POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR4POI]; values[kCORR2CORR4REF] = std::isnan(values[kM11M1111REFoverMp]) || - std::isinf(values[kM11M1111REFoverMp]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF]) - ? 0 - : values[kCORR2CORR4REF]; + std::isinf(values[kM11M1111REFoverMp]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF]) + ? 0 + : values[kCORR2CORR4REF]; values[kCORR2POICORR4POI] = - std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2POI] * values[kCORR4POI]; + std::isnan(values[kCORR2POI]) || std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2POI] * values[kCORR4POI]; values[kCORR2REFCORR4POI] = - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) - ? 0 - : values[kCORR2REF] * values[kCORR4POI]; + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) + ? 0 + : values[kCORR2REF] * values[kCORR4POI]; values[kCORR2REFCORR2POI] = - std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || - std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || - std::isinf(values[kM01POI]) - ? 0 - : values[kCORR2REF] * values[kCORR2POI]; + std::isnan(values[kCORR2REF]) || std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || std::isnan(values[kM11REF]) || + std::isinf(values[kM11REF]) || std::isnan(values[kM01POI]) || + std::isinf(values[kM01POI]) + ? 0 + : values[kCORR2REF] * values[kCORR2POI]; values[kM11M1111REFoverMp] = - values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || - std::isinf(values[kM11M1111REF]) || - std::isnan(values[kCORR2CORR4REF]) || - std::isinf(values[kCORR2CORR4REF])) - ? values[kM11M1111REF] / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && !(std::isnan(values[kM11M1111REF]) || + std::isinf(values[kM11M1111REF]) || + std::isnan(values[kCORR2CORR4REF]) || + std::isinf(values[kCORR2CORR4REF])) + ? values[kM11M1111REF] / values[kMultDimuons] + : 0; values[kM01M0111overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM01POI] * values[kM0111POI]) / values[kMultDimuons] + : 0; values[kM11M0111overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kM0111POI]) || - std::isinf(values[kM0111POI]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR4POI]) || - std::isinf(values[kCORR4POI])) - ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM0111POI]) || + std::isinf(values[kM0111POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR4POI]) || + std::isinf(values[kCORR4POI])) + ? (values[kM11REF] * values[kM0111POI]) / values[kMultDimuons] + : 0; values[kM11M01overMp] = - values[kMultDimuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kCORR2POI]) || - std::isinf(values[kCORR2POI])) - ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] - : 0; + values[kMultDimuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kM01POI]) || std::isinf(values[kM01POI]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kCORR2POI]) || + std::isinf(values[kCORR2POI])) + ? (values[kM11REF] * values[kM01POI]) / values[kMultDimuons] + : 0; std::complex P2plus(TMath::Cos(2 * v1.Phi()), TMath::Sin(2 * v1.Phi())); std::complex P2minus(TMath::Cos(2 * v2.Phi()), TMath::Sin(2 * v2.Phi())); values[kM11REFoverMpplus] = - values[kMultAntiMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultAntiMuons] + : 0; values[kM1111REFoverMpplus] = - values[kMultAntiMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM1111REF] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultAntiMuons] + : 0; values[kM11REFoverMpminus] = - values[kMultMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM11REF] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM11REF] / values[kMultMuons] + : 0; values[kM1111REFoverMpminus] = - values[kMultMuons] > 0 && - !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || - std::isnan(values[kCORR2REF]) || - std::isinf(values[kCORR2REF]) || - std::isnan(values[kM1111REF]) || - std::isinf(values[kM1111REF]) || - std::isnan(values[kCORR4REF]) || - std::isinf(values[kCORR4REF])) - ? values[kM1111REF] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && + !(std::isnan(values[kM11REF]) || std::isinf(values[kM11REF]) || + std::isnan(values[kCORR2REF]) || + std::isinf(values[kCORR2REF]) || + std::isnan(values[kM1111REF]) || + std::isinf(values[kM1111REF]) || + std::isnan(values[kCORR4REF]) || + std::isinf(values[kCORR4REF])) + ? values[kM1111REF] / values[kMultMuons] + : 0; values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POI]; values[kCORR2POIminus] = (P2minus * conj(Q21)).real() / values[kM01POI]; values[kM01POIplus] = values[kMultAntiMuons] * values[kS11A]; values[kM0111POIplus] = - values[kMultAntiMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultAntiMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIplus] = (P2plus * conj(Q21)).real() / values[kM01POIplus]; values[kCORR4POIplus] = - (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - - 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)) - .real() / - values[kM0111POIplus]; + (P2plus * Q21 * conj(Q21) * conj(Q21) - P2plus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2plus * conj(Q21) + 2. * P2plus * conj(Q23)) + .real() / + values[kM0111POIplus]; values[kM01POIminus] = values[kMultMuons] * values[kS11A]; values[kM0111POIminus] = - values[kMultMuons] * - (values[kS31A] - 3. * values[kS11A] * values[kS12A] + - 2. * values[kS13A]); + values[kMultMuons] * + (values[kS31A] - 3. * values[kS11A] * values[kS12A] + + 2. * values[kS13A]); values[kCORR2POIminus] = - (P2minus * conj(Q21)).real() / values[kM01POIminus]; + (P2minus * conj(Q21)).real() / values[kM01POIminus]; values[kCORR4POIminus] = - (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - - 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)) - .real() / - values[kM0111POIminus]; + (P2minus * Q21 * conj(Q21) * conj(Q21) - P2minus * Q21 * conj(Q42) - + 2. * values[kS12A] * P2minus * conj(Q21) + 2. * P2minus * conj(Q23)) + .real() / + values[kM0111POIminus]; values[kM01POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kM01POIplus]; - values[kM0111POIplus] = std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) ? 0 - : values[kM0111POIplus]; + : values[kM01POIplus]; + values[kM0111POIplus] = std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kM0111POIplus]; values[kCORR2POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kCORR2POIplus]; + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR2POIplus]; values[kCORR4POIplus] = std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) - ? 0 - : values[kCORR4POIplus]; + std::isinf(values[kM01POIplus]) || + std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) + ? 0 + : values[kCORR4POIplus]; values[kM01POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kM01POIminus]; - values[kM0111POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) ? 0 - : values[kM0111POIminus]; + : values[kM01POIminus]; + values[kM0111POIminus] = std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kM0111POIminus]; values[kCORR2POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kCORR2POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR2POIminus]; values[kCORR4POIminus] = std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) - ? 0 - : values[kCORR4POIminus]; + std::isinf(values[kM01POIminus]) || + std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) + ? 0 + : values[kCORR4POIminus]; values[kM01POIoverMpminus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) || - std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus])) - ? values[kM01POIminus] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM01POIminus] / values[kMultMuons] + : 0; values[kM0111POIoverMpminus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || - std::isinf(values[kM0111POIminus]) || - std::isnan(values[kCORR4POIminus]) || - std::isinf(values[kCORR4POIminus]) || - std::isnan(values[kM01POIminus]) || - std::isinf(values[kM01POIminus]) || - std::isnan(values[kCORR2POIminus]) || - std::isinf(values[kCORR2POIminus])) - ? values[kM0111POIminus] / values[kMultMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIminus]) || + std::isinf(values[kM0111POIminus]) || + std::isnan(values[kCORR4POIminus]) || + std::isinf(values[kCORR4POIminus]) || + std::isnan(values[kM01POIminus]) || + std::isinf(values[kM01POIminus]) || + std::isnan(values[kCORR2POIminus]) || + std::isinf(values[kCORR2POIminus])) + ? values[kM0111POIminus] / values[kMultMuons] + : 0; values[kM01POIoverMpplus] = - values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) || - std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus])) - ? values[kM01POIplus] / values[kMultAntiMuons] - : 0; + values[kMultAntiMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM01POIplus] / values[kMultAntiMuons] + : 0; values[kM0111POIoverMpplus] = - values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || - std::isinf(values[kM0111POIplus]) || - std::isnan(values[kCORR4POIplus]) || - std::isinf(values[kCORR4POIplus]) || - std::isnan(values[kM01POIplus]) || - std::isinf(values[kM01POIplus]) || - std::isnan(values[kCORR2POIplus]) || - std::isinf(values[kCORR2POIplus])) - ? values[kM0111POIplus] / values[kMultAntiMuons] - : 0; + values[kMultMuons] > 0 && !(std::isnan(values[kM0111POIplus]) || + std::isinf(values[kM0111POIplus]) || + std::isnan(values[kCORR4POIplus]) || + std::isinf(values[kCORR4POIplus]) || + std::isnan(values[kM01POIplus]) || + std::isinf(values[kM01POIplus]) || + std::isnan(values[kCORR2POIplus]) || + std::isinf(values[kCORR2POIplus])) + ? values[kM0111POIplus] / values[kMultAntiMuons] + : 0; } ROOT::Math::PtEtaPhiMVector v1_vp(v1.Pt(), v1.Eta(), v1.Phi() - Psi2B, @@ -8367,32 +8286,30 @@ void VarManager::FillPairVn(T1 const& t1, T2 const& t2, float* values) auto p12_vp = ROOT::Math::XYZVectorF(v12_vp.Px(), v12_vp.Py(), v12_vp.Pz()); auto p12_vp_projXZ = ROOT::Math::XYZVectorF(p12_vp.X(), 0, p12_vp.Z()); auto vDimu = (t1.sign() > 0 - ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()) - .Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), - v2_vp.Pz())) - : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()) - .Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), - v1_vp.Pz()))); + ? ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), v1_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), + v2_vp.Pz())) + : ROOT::Math::XYZVectorF(v2_vp.Px(), v2_vp.Py(), v2_vp.Pz()) + .Cross(ROOT::Math::XYZVectorF(v1_vp.Px(), v1_vp.Py(), + v1_vp.Pz()))); auto vRef = p12_vp.Cross(p12_vp_projXZ); values[kCosPhiVP] = vDimu.Dot(vRef) / (vRef.R() * vDimu.R()); values[kPhiVP] = std::acos(vDimu.Dot(vRef) / (vRef.R() * vDimu.R())); } -template -void VarManager::FillZDC(T const& zdc, float* values) -{ +template void VarManager::FillZDC(T const &zdc, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kEnergyCommonZNA] = - (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; + (zdc.energyCommonZNA() > 0) ? zdc.energyCommonZNA() : -1.; values[kEnergyCommonZNC] = - (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; + (zdc.energyCommonZNC() > 0) ? zdc.energyCommonZNC() : -1.; values[kEnergyCommonZPA] = - (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; + (zdc.energyCommonZPA() > 0) ? zdc.energyCommonZPA() : -1.; values[kEnergyCommonZPC] = - (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; + (zdc.energyCommonZPC() > 0) ? zdc.energyCommonZPC() : -1.; values[kTimeZNA] = zdc.timeZNA(); values[kTimeZNC] = zdc.timeZNC(); values[kTimeZPA] = zdc.timeZPA(); @@ -8400,11 +8317,10 @@ void VarManager::FillZDC(T const& zdc, float* values) } template -void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, - float* values, float hadronMass) -{ +void VarManager::FillDileptonHadron(T1 const &dilepton, T2 const &hadron, + float *values, float hadronMass) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || @@ -8427,7 +8343,7 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, ROOT::Math::PtEtaPhiMVector v12_Qvect = v1 - v2; double Pinv = v12.M(); double Q1 = - (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; + (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv; values[kDileptonHadronKstar] = std::sqrt(Q1 * Q1 - v12_Qvect.M2()) / 2.0; } @@ -8449,15 +8365,14 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, template -void VarManager::FillEnergyCorrelatorTriple(C const& collision, - T1 const& lepton1, - T2 const& lepton2, T3 const& hadron, - float* values, float Translow, +void VarManager::FillEnergyCorrelatorTriple(C const &collision, + T1 const &lepton1, + T2 const &lepton2, T3 const &hadron, + float *values, float Translow, float Transhigh, bool applyFitMass, - float sidebandMass, float weight) -{ + float sidebandMass, float weight) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kVertexingTauxyProjectedPoleJPsiMass] || fgUsedVars[kVertexingLxyProjected]) { @@ -8504,7 +8419,7 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, values[kPtDau] = v2.pt(); values[kEtaDau] = v2.eta(); values[kPhiDau] = - RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); + RecoDecay::constrainAngle(v2.phi(), -o2::constants::math::PIHalf); float deltaphi = RecoDecay::constrainAngle(v1.phi() - v2.phi(), -o2::constants::math::PI); @@ -8535,40 +8450,40 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, 3. * o2::constants::math::PIHalf); values[kPtDau_randomPhi_trans] = v2.pt(); ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans( - v2.pt(), v2.eta(), randomPhi_trans, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_trans, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_trans); values[kWeight_randomPhi_trans] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_trans) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_trans) / + v1.M() * weight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward( - v2.pt(), v2.eta(), randomPhi_toward, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_toward, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_toward); values[kWeight_randomPhi_toward] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_toward) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_toward) / + v1.M() * weight; ROOT::Math::PtEtaPhiMVector v2_randomPhi_away( - v2.pt(), v2.eta(), randomPhi_away, - o2::constants::physics::MassPionCharged); + v2.pt(), v2.eta(), randomPhi_away, + o2::constants::physics::MassPionCharged); values[kCosChi_randomPhi_away] = - LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); + LorentzTransformJpsihadroncosChi("coschi", v1, v2_randomPhi_away); values[kWeight_randomPhi_away] = - LorentzTransformJpsihadroncosChi("weight_boost", v1, - v2_randomPhi_away) / - v1.M() * weight; + LorentzTransformJpsihadroncosChi("weight_boost", v1, + v2_randomPhi_away) / + v1.M() * weight; values[kdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_trans, -o2::constants::math::PIHalf); values[kdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_toward, -o2::constants::math::PIHalf); values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle( - v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); + v1.phi() - randomPhi_away, -o2::constants::math::PIHalf); } } } @@ -8576,10 +8491,9 @@ void VarManager::FillEnergyCorrelatorTriple(C const& collision, template void VarManager::FillEnergyCorrelatorsUnfoldingTriple( - T1 const& lepton1, T2 const& lepton2, T3 const& hadron, T4 const& track, - T5 const& t1, float* values, bool applyFitMass, float Effweight_rec, - float Accweight_gen, float Translow, float Transhigh) -{ + T1 const &lepton1, T2 const &lepton2, T3 const &hadron, T4 const &track, + T5 const &t1, float *values, bool applyFitMass, float Effweight_rec, + float Accweight_gen, float Translow, float Transhigh) { if (fgUsedVars[kMCCosChi_gen] || fgUsedVars[kMCWeight_gen] || fgUsedVars[kMCdeltaeta_gen] || fgUsedVars[kMCCosChi_rec] || fgUsedVars[kMCWeight_rec] || fgUsedVars[kMCdeltaeta_rec]) { @@ -8607,12 +8521,12 @@ void VarManager::FillEnergyCorrelatorsUnfoldingTriple( o2::constants::physics::MassJPsi); ROOT::Math::PtEtaPhiMVector v2_gen(t1.pt(), t1.eta(), t1.phi(), MassHadron); float E_boost_gen = - LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen); float CosChi_gen = - LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); + LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen); values[kMCCosChi_gen] = CosChi_gen; values[kMCWeight_gen] = - E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; + E_boost_gen / o2::constants::physics::MassJPsi * Accweight_gen; values[kMCdeltaeta_gen] = track.eta() - t1.eta(); ROOT::Math::PtEtaPhiMVector v1_rec(dilepton.pt(), dilepton.eta(), @@ -8620,50 +8534,49 @@ void VarManager::FillEnergyCorrelatorsUnfoldingTriple( ROOT::Math::PtEtaPhiMVector v2_rec(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged); values[kMCCosChi_rec] = - LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); + LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec); float E_boost_rec = - LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec); values[kMCWeight_rec] = E_boost_rec / v1_rec.M() * Effweight_rec; values[kMCdeltaeta_rec] = dilepton.eta() - hadron.eta(); values[kMCCosChi_randomPhi_trans_rec] = -999.9f; values[kMCCosChi_randomPhi_trans_gen] = -999.9f; float deltaphi_rec = RecoDecay::constrainAngle( - dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); + dilepton.phi() - hadron.phi(), -o2::constants::math::PIHalf); if ((deltaphi_rec > -Transhigh * o2::constants::math::PI && deltaphi_rec < -Translow * o2::constants::math::PI) || (deltaphi_rec > Translow * o2::constants::math::PI && deltaphi_rec < Transhigh * o2::constants::math::PI)) { float randomPhi_trans_rec = gRandom->Uniform( - -o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); + -o2::constants::math::PIHalf, 3. * o2::constants::math::PIHalf); ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_rec( - v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, - o2::constants::physics::MassPionCharged); + v2_rec.pt(), v2_rec.eta(), randomPhi_trans_rec, + o2::constants::physics::MassPionCharged); values[kMCCosChi_randomPhi_trans_rec] = LorentzTransformJpsihadroncosChi( - "coschi", v1_rec, v2_randomPhi_trans_rec); + "coschi", v1_rec, v2_randomPhi_trans_rec); values[kMCWeight_randomPhi_trans_rec] = - LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, - v2_randomPhi_trans_rec) / - v1_rec.M() * Effweight_rec; + LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, + v2_randomPhi_trans_rec) / + v1_rec.M() * Effweight_rec; ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans_gen( - v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); + v2_gen.pt(), v2_gen.eta(), randomPhi_trans_rec, MassHadron); values[kMCCosChi_randomPhi_trans_gen] = LorentzTransformJpsihadroncosChi( - "coschi", v1_gen, v2_randomPhi_trans_gen); + "coschi", v1_gen, v2_randomPhi_trans_gen); values[kMCWeight_randomPhi_trans_gen] = - LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, - v2_randomPhi_trans_gen) / - v1_gen.M() * Accweight_gen; + LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, + v2_randomPhi_trans_gen) / + v1_gen.M() * Accweight_gen; } } } template -void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, - float* values) -{ +void VarManager::FillDileptonPhoton(T1 const &dilepton, T2 const &photon, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (fgUsedVars[kPairMass] || fgUsedVars[kPairPt] || fgUsedVars[kPairEta] || fgUsedVars[kPairPhi]) { @@ -8690,10 +8603,9 @@ void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, } template -void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) -{ +void VarManager::FillHadron(T const &hadron, float *values, float hadronMass) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } ROOT::Math::PtEtaPhiMVector vhadron(hadron.pt(), hadron.eta(), hadron.phi(), @@ -8706,12 +8618,11 @@ void VarManager::FillHadron(T const& hadron, float* values, float hadronMass) } template -void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, - H hfHelper, T& bdtScoreCharmHad, - float* values) -{ +void VarManager::FillSingleDileptonCharmHadron(Cand const &candidate, + H hfHelper, T &bdtScoreCharmHad, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr (partType == kJPsi) { @@ -8745,10 +8656,9 @@ void VarManager::FillSingleDileptonCharmHadron(Cand const& candidate, template -void VarManager::FillDileptonCharmHadron(DQ const& dilepton, - HF const& charmHadron, H hfHelper, - T& bdtScoreCharmHad, float* values) -{ +void VarManager::FillDileptonCharmHadron(DQ const &dilepton, + HF const &charmHadron, H hfHelper, + T &bdtScoreCharmHad, float *values) { FillSingleDileptonCharmHadron(dilepton, hfHelper, bdtScoreCharmHad, values); FillSingleDileptonCharmHadron(charmHadron, hfHelper, @@ -8756,11 +8666,10 @@ void VarManager::FillDileptonCharmHadron(DQ const& dilepton, } template -void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, - T3 const& hadron2, float* values) -{ +void VarManager::FillDileptonTrackTrack(T1 const &dilepton, T2 const &hadron1, + T3 const &hadron2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -8808,8 +8717,8 @@ void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); values[kCosthetaDileptonDitrack] = - (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / - (v1.P() * v123.P()); + (v1.Px() * v123.Px() + v1.Py() * v123.Py() + v1.Pz() * v123.Pz()) / + (v1.P() * v123.P()); values[kQ] = v123.M() - defaultDileptonMass - v23.M(); values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); @@ -8823,20 +8732,19 @@ void VarManager::FillDileptonTrackTrack(T1 const& dilepton, T2 const& hadron1, template void VarManager::FillDileptonTrackTrackVertexing( - C const& collision, T1 const& lepton1, T1 const& lepton2, T1 const& track1, - T1 const& track2, float* values) -{ + C const &collision, T1 const &lepton1, T1 const &lepton2, T1 const &track1, + T1 const &track2, float *values) { constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!eventHasVtxCov || !trackHasCov) { return; } if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float mlepton1 = o2::constants::physics::MassElectron; @@ -8922,7 +8830,7 @@ void VarManager::FillDileptonTrackTrackVertexing( // procCodeDileptonTrackTrack = // VarManager::fgFitterThreeProngBarrel.process(parsDilepton, pars3, pars4); procCodeDileptonTrackTrack = - VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); + VarManager::fgFitterFourProngBarrel.process(pars1, pars2, pars3, pars4); values[kVertexingProcCode] = procCodeDilepton; values[kVertexingQuadProcCode] = procCodeDileptonTrackTrack; @@ -8964,17 +8872,17 @@ void VarManager::FillDileptonTrackTrackVertexing( double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingChi2PCA] = fgFitterFourProngBarrel.getChi2AtPCACandidate(); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -8983,61 +8891,61 @@ void VarManager::FillDileptonTrackTrackVertexing( values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * mMother / - (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * mMother / - (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * mMother / - (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * mMother / + (TMath::Abs(v1234.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * mMother / - (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * mMother / + (v1234.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px() + - (secondaryVertex[1] - collision.posY()) * v1234.Py() + - (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v1234.Px() + + (secondaryVertex[1] - collision.posY()) * v1234.Py() + + (secondaryVertex[2] - collision.posZ()) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); // // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); + (secondaryVertex[2] - collision.posZ()) * v1234.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v1234.Pz() * v1234.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + - ((secondaryVertex[1] - collision.posY()) * v1234.Py()); + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + - ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); + ((secondaryVertex[0] - collision.posX()) * v1234.Px()) + + ((secondaryVertex[1] - collision.posY()) * v1234.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v1234.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + - (v1234.Pz() * v1234.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v1234.Px() * v1234.Px()) + (v1234.Py() * v1234.Py()) + + (v1234.Pz() * v1234.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); + values[kVertexingLzProjected] * mMother / TMath::Abs(v1234.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * mMother / (v1234.Pt()); + values[kVertexingLxyProjected] * mMother / (v1234.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * mMother / (v1234.P()); + values[kVertexingLxyzProjected] * mMother / (v1234.P()); } else { KFParticle lepton1KF; // lepton1 KFParticle lepton2KF; // lepton2 @@ -9121,60 +9029,60 @@ void VarManager::FillDileptonTrackTrackVertexing( double dzQuadlet2PV = KFGeoFourProng.GetZ() - KFPV.GetZ(); values[kVertexingLxy] = - std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV); values[kVertexingLz] = std::sqrt(dzQuadlet2PV * dzQuadlet2PV); values[kVertexingLxyz] = - std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + - dzQuadlet2PV * dzQuadlet2PV); + std::sqrt(dxQuadlet2PV * dxQuadlet2PV + dyQuadlet2PV * dyQuadlet2PV + + dzQuadlet2PV * dzQuadlet2PV); values[kVertexingLxyErr] = - (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * - dxQuadlet2PV * dxQuadlet2PV + - (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * - dyQuadlet2PV * dyQuadlet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * - dxQuadlet2PV * dyQuadlet2PV); + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV); values[kVertexingLzErr] = - (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * - dzQuadlet2PV * dzQuadlet2PV; + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV; values[kVertexingLxyzErr] = - (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * - dxQuadlet2PV * dxQuadlet2PV + - (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * - dyQuadlet2PV * dyQuadlet2PV + - (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * - dzQuadlet2PV * dzQuadlet2PV + - 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * - dxQuadlet2PV * dyQuadlet2PV + - (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * - dxQuadlet2PV * dzQuadlet2PV + - (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * - dyQuadlet2PV * dzQuadlet2PV); + (KFPV.GetCovariance(0) + KFGeoFourProng.GetCovariance(0)) * + dxQuadlet2PV * dxQuadlet2PV + + (KFPV.GetCovariance(2) + KFGeoFourProng.GetCovariance(2)) * + dyQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(5) + KFGeoFourProng.GetCovariance(5)) * + dzQuadlet2PV * dzQuadlet2PV + + 2 * ((KFPV.GetCovariance(1) + KFGeoFourProng.GetCovariance(1)) * + dxQuadlet2PV * dyQuadlet2PV + + (KFPV.GetCovariance(3) + KFGeoFourProng.GetCovariance(3)) * + dxQuadlet2PV * dzQuadlet2PV + + (KFPV.GetCovariance(4) + KFGeoFourProng.GetCovariance(4)) * + dyQuadlet2PV * dzQuadlet2PV); if (std::fabs(values[kVertexingLxy]) < 1.e-8f) { values[kVertexingLxy] = 1.e-8f; } values[kVertexingLxyErr] = - values[kVertexingLxyErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; + values[kVertexingLxyErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyErr]) / values[kVertexingLxy]; if (std::fabs(values[kVertexingLz]) < 1.e-8f) { values[kVertexingLz] = 1.e-8f; } values[kVertexingLzErr] = - values[kVertexingLzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; + values[kVertexingLzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLzErr]) / values[kVertexingLz]; if (std::fabs(values[kVertexingLxyz]) < 1.e-8f) { values[kVertexingLxyz] = 1.e-8f; } values[kVertexingLxyzErr] = - values[kVertexingLxyzErr] < 0. - ? 1.e8f - : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; + values[kVertexingLxyzErr] < 0. + ? 1.e8f + : std::sqrt(values[kVertexingLxyzErr]) / values[kVertexingLxyz]; values[kVertexingTauxy] = KFGeoFourProng.GetPseudoProperDecayTime( - KFPV, KFGeoFourProng.GetMass()) / + KFPV, KFGeoFourProng.GetMass()) / (o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauz] = -1 * dzQuadlet2PV * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * @@ -9183,58 +9091,57 @@ void VarManager::FillDileptonTrackTrackVertexing( values[kVertexingSV] = KFGeoFourProng.GetZ(); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / - (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * KFGeoFourProng.GetMass() / + (KFGeoFourProng.GetPt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = values[kVertexingLzErr] * KFGeoFourProng.GetMass() / (TMath::Abs(KFGeoFourProng.GetPz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingChi2PCA] = KFGeoFourProng.GetChi2(); values[kCosPointingAngle] = - (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + - std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + - std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / - (v1234.P() * values[VarManager::kVertexingLxyz]); + (std::sqrt(dxQuadlet2PV * dxQuadlet2PV) * v1234.Px() + + std::sqrt(dyQuadlet2PV * dyQuadlet2PV) * v1234.Py() + + std::sqrt(dzQuadlet2PV * dzQuadlet2PV) * v1234.Pz()) / + (v1234.P() * values[VarManager::kVertexingLxyz]); // // run 2 definitions: Decay length projected onto the momentum vector of // the candidate values[kVertexingLzProjected] = - (dzQuadlet2PV * KFGeoFourProng.GetPz()) / - TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); + (dzQuadlet2PV * KFGeoFourProng.GetPz()) / + TMath::Sqrt(KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz()); values[kVertexingLxyProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + - (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); + values[kVertexingLxyProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy())); values[kVertexingLxyzProjected] = (dxQuadlet2PV * KFGeoFourProng.GetPx()) + (dyQuadlet2PV * KFGeoFourProng.GetPy()) + (dzQuadlet2PV * KFGeoFourProng.GetPz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + - (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + - (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((KFGeoFourProng.GetPx() * KFGeoFourProng.GetPx()) + + (KFGeoFourProng.GetPy() * KFGeoFourProng.GetPy()) + + (KFGeoFourProng.GetPz() * KFGeoFourProng.GetPz())); values[kVertexingTauxyProjected] = values[kVertexingLxyProjected] * KFGeoFourProng.GetMass() / (KFGeoFourProng.GetPt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; values[kVertexingTauzProjected] = values[kVertexingLzProjected] * KFGeoFourProng.GetMass() / TMath::Abs(KFGeoFourProng.GetPz()); values[kKFChi2OverNDFGeo] = - KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); + KFGeoFourProng.GetChi2() / KFGeoFourProng.GetNDF(); } } //__________________________________________________________________ template -void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, - T2 const& track2, float* values) -{ +void VarManager::FillQuadMC(T1 const &dilepton, T2 const &track1, + T2 const &track2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } double defaultDileptonMass = o2::constants::physics::MassJPsi; @@ -9263,15 +9170,14 @@ void VarManager::FillQuadMC(T1 const& dilepton, T2 const& track1, values[kDeltaR1] = ROOT::Math::VectorUtil::DeltaR(v1, v2); values[kDeltaR2] = ROOT::Math::VectorUtil::DeltaR(v1, v3); values[kDeltaR] = - std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); + std::sqrt(std::pow(values[kDeltaR1], 2) + std::pow(values[kDeltaR2], 2)); values[kDitrackMass] = v23.M(); values[kDitrackPt] = v23.Pt(); } //__________________________________________________________________ template -float VarManager::calculatePhiV(T1 const& t1, T2 const& t2) -{ +float VarManager::calculatePhiV(T1 const &t1, T2 const &t2) { // cos(phiv) = w*a /|w||a| // with w = u x v // and a = u x z / |u x z| , unit vector perpendicular to v12 and @@ -9381,17 +9287,16 @@ float VarManager::calculatePhiV(T1 const& t1, T2 const& t2) // (wx,wy,wz) and (ax,ay,0). The angle between them should be small if the // pair is conversion. This function then returns values close to pi! pairPhiV = TMath::ACos( - wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; + wx * ax + wy * ay); // phiv in [0,pi] //cosPhiV = wx * ax + wy * ay; return pairPhiV; } /// Fill BDT score values. /// Supports binary (1 output) and multiclass (3 outputs) models. template -void VarManager::FillBdtScore(T1 const& bdtScore, float* values) -{ +void VarManager::FillBdtScore(T1 const &bdtScore, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if (bdtScore.size() == 1) { @@ -9406,9 +9311,8 @@ void VarManager::FillBdtScore(T1 const& bdtScore, float* values) } //__________________________________________________________________ template -float VarManager::LorentzTransformJpsihadroncosChi(const TString& Option, - T1 const& v1, T2 const& v2) -{ +float VarManager::LorentzTransformJpsihadroncosChi(const TString &Option, + T1 const &v1, T2 const &v2) { float value = -999.0f; auto beta_v1 = v1.BoostToCM(); ROOT::Math::Boost boostv1{beta_v1}; @@ -9430,11 +9334,10 @@ float VarManager::LorentzTransformJpsihadroncosChi(const TString& Option, } template -void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, - T4 const& fv0as, T5 const& fdds, float* values) -{ +void VarManager::FillFIT(T1 const &bc, T2 const &bcs, T3 const &ft0s, + T4 const &fv0as, T5 const &fdds, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } // Initialize FIT info structure @@ -9491,10 +9394,9 @@ void VarManager::FillFIT(T1 const& bc, T2 const& bcs, T3 const& ft0s, } template -void VarManager::FillEventAlice3(T const& event, float* values) -{ +void VarManager::FillEventAlice3(T const &event, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & CollisionTimestamp) > 0) { values[kTimestamp] = event.timestamp(); @@ -9579,10 +9481,9 @@ void VarManager::FillEventAlice3(T const& event, float* values) } template -void VarManager::FillTrackAlice3(T const& track, float* values) -{ +void VarManager::FillTrackAlice3(T const &track, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } if constexpr ((fillMap & Track) > 0 || (fillMap & ReducedTrack) > 0) { @@ -9609,7 +9510,7 @@ void VarManager::FillTrackAlice3(T const& track, float* values) if (fgUsedVars[kPVContributor]) { values[kPVContributor] = static_cast( - (track.flags() & o2::aod::track::PVContributor) > 0); + (track.flags() & o2::aod::track::PVContributor) > 0); } if (fgUsedVars[kITSClusterMap]) { @@ -9741,10 +9642,9 @@ void VarManager::FillTrackAlice3(T const& track, float* values) } template -void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) -{ +void VarManager::FillPairAlice3(T1 const &t1, T2 const &t2, float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; @@ -9776,9 +9676,9 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) values[kPhi] = RecoDecay::constrainAngle(v12.Phi()); values[kRap] = -v12.Rapidity(); double Ptot1 = - TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); + TMath::Sqrt(v1.Px() * v1.Px() + v1.Py() * v1.Py() + v1.Pz() * v1.Pz()); double Ptot2 = - TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); + TMath::Sqrt(v2.Px() * v2.Px() + v2.Py() * v2.Py() + v2.Pz() * v2.Pz()); values[kDeltaPtotTracks] = Ptot1 - Ptot2; values[kPt1] = t1.pt(); @@ -9790,7 +9690,7 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) if (fgUsedVars[kDeltaPhiPair2]) { values[kDeltaPhiPair2] = RecoDecay::constrainAngle( - v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); + v1.Phi() - v2.Phi(), -o2::constants::math::PIHalf); } if (fgUsedVars[kDeltaEtaPair2]) { @@ -9799,14 +9699,14 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) if (fgUsedVars[kPsiPair]) { values[kDeltaPhiPair] = (t1.sign() * fgMagField > 0.) - ? (v1.Phi() - v2.Phi()) - : (v2.Phi() - v1.Phi()); + ? (v1.Phi() - v2.Phi()) + : (v2.Phi() - v1.Phi()); double xipair = TMath::ACos( - (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / - v2.P()); + (v1.Px() * v2.Px() + v1.Py() * v2.Py() + v1.Pz() * v2.Pz()) / v1.P() / + v2.P()); values[kPsiPair] = (t1.sign() * fgMagField > 0.) - ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) - : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); + ? TMath::ASin((v1.Theta() - v2.Theta()) / xipair) + : TMath::ASin((v2.Theta() - v1.Theta()) / xipair); } if (fgUsedVars[kOpeningAngle]) { @@ -9829,9 +9729,9 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) // polarization parameters bool useHE = fgUsedVars[kCosThetaHE] || fgUsedVars[kPhiHE]; // helicity frame bool useCS = - fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame - bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame - bool useRM = fgUsedVars[kCosThetaRM]; // Random frame + fgUsedVars[kCosThetaCS] || fgUsedVars[kPhiCS]; // Collins-Soper frame + bool usePP = fgUsedVars[kCosThetaPP]; // production plane frame + bool useRM = fgUsedVars[kCosThetaRM]; // Random frame if (useHE || useCS || usePP || useRM) { ROOT::Math::Boost boostv12{v12.BoostToCM()}; @@ -9852,18 +9752,18 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiHE]) { values[kPhiHE] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); + TMath::ATan2(yaxis_HE.Dot(v_CM), xaxis_HE.Dot(v_CM))); } if (fgUsedVars[kPhiTildeHE]) { if (fgUsedVars[kCosThetaHE] && fgUsedVars[kPhiHE]) { if (values[kCosThetaHE] > 0) { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiHE] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeHE] = RecoDecay::constrainAngle( - values[kPhiHE] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiHE] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeHE] = -999; // not computable @@ -9880,18 +9780,18 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiCS]) { values[kPhiCS] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); + TMath::ATan2(yaxis_CS.Dot(v_CM), xaxis_CS.Dot(v_CM))); } if (fgUsedVars[kPhiTildeCS]) { if (fgUsedVars[kCosThetaCS] && fgUsedVars[kPhiCS]) { if (values[kCosThetaCS] > 0) { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiCS] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildeCS] = RecoDecay::constrainAngle( - values[kPhiCS] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiCS] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildeCS] = -999; // not computable @@ -9901,7 +9801,7 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) if (usePP) { ROOT::Math::XYZVector zaxis_PP = - ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); + ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f); ROOT::Math::XYZVector yaxis_PP{(v12.Vect()).Unit()}; ROOT::Math::XYZVector xaxis_PP{(yaxis_PP.Cross(zaxis_PP)).Unit()}; if (fgUsedVars[kCosThetaPP]) { @@ -9909,18 +9809,18 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } if (fgUsedVars[kPhiPP]) { values[kPhiPP] = RecoDecay::constrainAngle( - TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); + TMath::ATan2(yaxis_PP.Dot(v_CM), xaxis_PP.Dot(v_CM))); } if (fgUsedVars[kPhiTildePP]) { if (fgUsedVars[kCosThetaPP] && fgUsedVars[kPhiPP]) { if (values[kCosThetaPP] > 0) { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 + values[kPhiPP] - + o2::constants::math::PIQuarter); // phi_tilde = phi - pi/4 } else { values[kPhiTildePP] = RecoDecay::constrainAngle( - values[kPhiPP] - - 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 + values[kPhiPP] - + 3. * o2::constants::math::PIQuarter); // phi_tilde = phi - 3pi/4 } } else { values[kPhiTildePP] = -999; // not computable @@ -9932,9 +9832,9 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) double randomCostheta = gRandom->Uniform(-1., 1.); double randomPhi = gRandom->Uniform(0., o2::constants::math::TwoPI); ROOT::Math::XYZVectorF zaxis_RM( - randomCostheta, - std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), - std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); + randomCostheta, + std::sqrt(1 - randomCostheta * randomCostheta) * std::cos(randomPhi), + std::sqrt(1 - randomCostheta * randomCostheta) * std::sin(randomPhi)); if (fgUsedVars[kCosThetaRM]) { values[kCosThetaRM] = zaxis_RM.Dot(v_CM); } @@ -9959,16 +9859,16 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) double dca2sigZ = dca2Z / std::sqrt(t2.cZZ()); values[kQuadDCAabsXY] = - std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); + std::sqrt((dca1XY * dca1XY + dca2XY * dca2XY) / 2); values[kQuadDCAsigXY] = - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); values[kQuadDCAabsZ] = std::sqrt((dca1Z * dca1Z + dca2Z * dca2Z) / 2); values[kQuadDCAsigZ] = - std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); + std::sqrt((dca1sigZ * dca1sigZ + dca2sigZ * dca2sigZ) / 2); values[kSignQuadDCAsigXY] = - t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * - TMath::Sign(1., dca2sigXY) * - std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); + t1.sign() * t2.sign() * TMath::Sign(1., dca1sigXY) * + TMath::Sign(1., dca2sigXY) * + std::sqrt((dca1sigXY * dca1sigXY + dca2sigXY * dca2sigXY) / 2); double det1 = t1.cYY() * t1.cZZ() - t1.cZY() * t1.cZY(); double det2 = t2.cYY() * t2.cZZ() - t2.cZY() * t2.cZY(); @@ -9986,7 +9886,7 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) double dca2sigXYZ = std::sqrt(std::abs(chi2t2) / 2.); values[kQuadDCAsigXYZ] = - std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); + std::sqrt((dca1sigXYZ * dca1sigXYZ + dca2sigXYZ * dca2sigXYZ) / 2); } } } @@ -9996,11 +9896,10 @@ void VarManager::FillPairAlice3(T1 const& t1, T2 const& t2, float* values) } template -void VarManager::FillResolutions(M const& mcTrack, T const& track, - float* values) -{ +void VarManager::FillResolutions(M const &mcTrack, T const &track, + float *values) { if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } values[kDeltaPt] = track.pt() - mcTrack.pt(); @@ -10011,18 +9910,17 @@ void VarManager::FillResolutions(M const& mcTrack, T const& track, template -void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, - T const& t2, bool propToSV, - float* values) -{ +void VarManager::FillPairVertexingAlice3(C const &collision, T const &t1, + T const &t2, bool propToSV, + float *values) { // check at compile time that the event and cov matrix have the cov matrix constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); constexpr bool trackHasCov = - ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); + ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassElectron; float m2 = o2::constants::physics::MassElectron; @@ -10047,16 +9945,16 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; procCode = fgFitterTwoProngBarrel.process(pars1, pars2); } else { @@ -10119,26 +10017,26 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -10147,69 +10045,69 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingPz] = TMath::Abs(v12.Pz()); values[kVertexingSV] = secondaryVertex[2]; values[kVertexingTauzErr] = - values[kVertexingLzErr] * v12.M() / - (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v12.M() / + (TMath::Abs(v12.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v12.M() / - (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v12.M() / + (v12.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v12.Px() + - (secondaryVertex[1] - collision.posY()) * v12.Py() + - (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / - (v12.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v12.Px() + + (secondaryVertex[1] - collision.posY()) * v12.Py() + + (secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + (v12.P() * values[VarManager::kVertexingLxyz]); // Decay length defined as in Run 2 values[kVertexingLzProjected] = - ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / - TMath::Sqrt(v12.Pz() * v12.Pz()); + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()) / + TMath::Sqrt(v12.Pz() * v12.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v12.Px()) + - ((secondaryVertex[1] - collision.posY()) * v12.Py()); + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v12.Px()) + - ((secondaryVertex[1] - collision.posY()) * v12.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); + ((secondaryVertex[0] - collision.posX()) * v12.Px()) + + ((secondaryVertex[1] - collision.posY()) * v12.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v12.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + - (v12.Pz() * v12.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v12.Px() * v12.Px()) + (v12.Py() * v12.Py()) + + (v12.Pz() * v12.Pz())); if (fgPVrecalKF) { values[kVertexingLxyProjectedRecalculatePV] = - (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + - (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); + (secondaryVertex[0] - primaryVertexNew.getX()) * v12.Px() + + (secondaryVertex[1] - primaryVertexNew.getY()) * v12.Py(); values[kVertexingLxyProjectedRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); + values[kVertexingLxyProjectedRecalculatePV] / v12.Pt(); } values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); + values[kVertexingLxyProjected] * v12.M() / (v12.Pt()); values[kVertexingTauxyProjectedPoleJPsiMass] = - values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / - (v12.Pt()); + values[kVertexingLxyProjected] * o2::constants::physics::MassJPsi / + (v12.Pt()); values[kVertexingTauxyProjectedNs] = - values[kVertexingTauxyProjected] / - o2::constants::physics::LightSpeedCm2NS; + values[kVertexingTauxyProjected] / + o2::constants::physics::LightSpeedCm2NS; if (fgPVrecalKF) { values[kVertexingTauxyProjectedPoleJPsiMassRecalculatePV] = - values[kVertexingLxyProjectedRecalculatePV] * - o2::constants::physics::MassJPsi / (v12.Pt()); + values[kVertexingLxyProjectedRecalculatePV] * + o2::constants::physics::MassJPsi / (v12.Pt()); } values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); + values[kVertexingLzProjected] * v12.M() / TMath::Abs(v12.Pz()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v12.M() / (v12.P()); + values[kVertexingLxyzProjected] * v12.M() / (v12.P()); } } if (propToSV) { @@ -10231,16 +10129,15 @@ void VarManager::FillPairVertexingAlice3(C const& collision, T const& t1, template void VarManager::FillTripletVertexingALICE3( - C const& collision, T const& t1, T const& t2, T const& t3, - VarManager::PairCandidateType tripletType, float* values) -{ + C const &collision, T const &t1, T const &t2, T const &t3, + VarManager::PairCandidateType tripletType, float *values) { // TODO: Vertexing error variables constexpr bool eventHasVtxCov = - ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); + ((collFillMap & Collision) > 0 || (collFillMap & ReducedEventVtxCov) > 0); bool trackHasCov = ((fillMap & ReducedTrackBarrelCov) > 0); if (!values) { - values = static_cast(fgValues); + values = static_cast(fgValues); } float m1 = o2::constants::physics::MassKaonCharged; @@ -10268,26 +10165,26 @@ void VarManager::FillTripletVertexingALICE3( std::array t1pars = {t1.y(), t1.z(), t1.snp(), t1.tgl(), t1.signed1Pt()}; std::array t1covs = { - t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), - t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), - t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; + t1.cYY(), t1.cZY(), t1.cZZ(), t1.cSnpY(), t1.cSnpZ(), + t1.cSnpSnp(), t1.cTglY(), t1.cTglZ(), t1.cTglSnp(), t1.cTglTgl(), + t1.c1PtY(), t1.c1PtZ(), t1.c1PtSnp(), t1.c1PtTgl(), t1.c1Pt21Pt2()}; o2::track::TrackParCov pars1{t1.x(), t1.alpha(), t1pars, t1covs}; std::array t2pars = {t2.y(), t2.z(), t2.snp(), t2.tgl(), t2.signed1Pt()}; std::array t2covs = { - t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), - t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), - t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; + t2.cYY(), t2.cZY(), t2.cZZ(), t2.cSnpY(), t2.cSnpZ(), + t2.cSnpSnp(), t2.cTglY(), t2.cTglZ(), t2.cTglSnp(), t2.cTglTgl(), + t2.c1PtY(), t2.c1PtZ(), t2.c1PtSnp(), t2.c1PtTgl(), t2.c1Pt21Pt2()}; o2::track::TrackParCov pars2{t2.x(), t2.alpha(), t2pars, t2covs}; std::array t3pars = {t3.y(), t3.z(), t3.snp(), t3.tgl(), t3.signed1Pt()}; std::array t3covs = { - t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), - t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), - t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; + t3.cYY(), t3.cZY(), t3.cZZ(), t3.cSnpY(), t3.cSnpZ(), + t3.cSnpSnp(), t3.cTglY(), t3.cTglZ(), t3.cTglSnp(), t3.cTglTgl(), + t3.c1PtY(), t3.c1PtZ(), t3.c1PtSnp(), t3.c1PtTgl(), t3.c1Pt21Pt2()}; o2::track::TrackParCov pars3{t3.x(), t3.alpha(), t3pars, t3covs}; procCode = - VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); + VarManager::fgFitterThreeProngBarrel.process(pars1, pars2, pars3); } else { return; } @@ -10324,7 +10221,7 @@ void VarManager::FillTripletVertexingALICE3( secondaryVertex = fgFitterThreeProngBarrel.getPCACandidate(); std::array covMatrixPCA = - fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); + fgFitterThreeProngBarrel.calcPCACovMatrixFlat(); o2::math_utils::Point3D vtxXYZ(collision.posX(), collision.posY(), collision.posZ()); @@ -10342,16 +10239,16 @@ void VarManager::FillTripletVertexingALICE3( double phi = std::atan2(secondaryVertex[1] - collision.posY(), secondaryVertex[0] - collision.posX()); double theta = - std::atan2(secondaryVertex[2] - collision.posZ(), - std::sqrt((secondaryVertex[0] - collision.posX()) * - (secondaryVertex[0] - collision.posX()) + - (secondaryVertex[1] - collision.posY()) * - (secondaryVertex[1] - collision.posY()))); + std::atan2(secondaryVertex[2] - collision.posZ(), + std::sqrt((secondaryVertex[0] - collision.posX()) * + (secondaryVertex[0] - collision.posX()) + + (secondaryVertex[1] - collision.posY()) * + (secondaryVertex[1] - collision.posY()))); values[kVertexingLxy] = (collision.posX() - secondaryVertex[0]) * - (collision.posX() - secondaryVertex[0]) + + (collision.posX() - secondaryVertex[0]) + (collision.posY() - secondaryVertex[1]) * - (collision.posY() - secondaryVertex[1]); + (collision.posY() - secondaryVertex[1]); values[kVertexingLz] = (collision.posZ() - secondaryVertex[2]) * (collision.posZ() - secondaryVertex[2]); values[kVertexingLxyz] = values[kVertexingLxy] + values[kVertexingLz]; @@ -10360,61 +10257,61 @@ void VarManager::FillTripletVertexingALICE3( values[kVertexingLxyz] = std::sqrt(values[kVertexingLxyz]); values[kVertexingLxyzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + - getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, theta) + + getRotatedCovMatrixXX(covMatrixPCA, phi, theta)); values[kVertexingLxyErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + - getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, phi, 0.) + + getRotatedCovMatrixXX(covMatrixPCA, phi, 0.)); values[kVertexingLzErr] = - std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + - getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); + std::sqrt(getRotatedCovMatrixXX(covMatrixPV, 0, theta) + + getRotatedCovMatrixXX(covMatrixPCA, 0, theta)); values[kVertexingTauz] = - (collision.posZ() - secondaryVertex[2]) * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + (collision.posZ() - secondaryVertex[2]) * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxy] = - values[kVertexingLxy] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxy] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauzErr] = - values[kVertexingLzErr] * v123.M() / - (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLzErr] * v123.M() / + (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS); values[kVertexingTauxyErr] = - values[kVertexingLxyErr] * v123.M() / - (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); + values[kVertexingLxyErr] * v123.M() / + (v123.Pt() * o2::constants::physics::LightSpeedCm2NS); values[kCosPointingAngle] = - ((secondaryVertex[0] - collision.posX()) * v123.Px() + - (secondaryVertex[1] - collision.posY()) * v123.Py() + - (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / - (v123.P() * values[VarManager::kVertexingLxyz]); + ((secondaryVertex[0] - collision.posX()) * v123.Px() + + (secondaryVertex[1] - collision.posY()) * v123.Py() + + (secondaryVertex[2] - collision.posZ()) * v123.Pz()) / + (v123.P() * values[VarManager::kVertexingLxyz]); // run 2 definitions: Decay length projected onto the momentum vector of the // candidate values[kVertexingLzProjected] = - (secondaryVertex[2] - collision.posZ()) * v123.Pz(); + (secondaryVertex[2] - collision.posZ()) * v123.Pz(); values[kVertexingLzProjected] = - values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); + values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz()); values[kVertexingLxyProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()); values[kVertexingLxyProjected] = - values[kVertexingLxyProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); + values[kVertexingLxyProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py())); values[kVertexingLxyzProjected] = - ((secondaryVertex[0] - collision.posX()) * v123.Px()) + - ((secondaryVertex[1] - collision.posY()) * v123.Py()) + - ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); + ((secondaryVertex[0] - collision.posX()) * v123.Px()) + + ((secondaryVertex[1] - collision.posY()) * v123.Py()) + + ((secondaryVertex[2] - collision.posZ()) * v123.Pz()); values[kVertexingLxyzProjected] = - values[kVertexingLxyzProjected] / - TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + - (v123.Pz() * v123.Pz())); + values[kVertexingLxyzProjected] / + TMath::Sqrt((v123.Px() * v123.Px()) + (v123.Py() * v123.Py()) + + (v123.Pz() * v123.Pz())); values[kVertexingTauzProjected] = - values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); + values[kVertexingLzProjected] * v123.M() / TMath::Abs(v123.Pz()); values[kVertexingTauxyProjected] = - values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); + values[kVertexingLxyProjected] * v123.M() / (v123.Pt()); values[kVertexingTauxyzProjected] = - values[kVertexingLxyzProjected] * v123.M() / (v123.P()); + values[kVertexingLxyzProjected] * v123.M() / (v123.P()); } } diff --git a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx index daab108389d..b1c3d2b25d8 100644 --- a/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx +++ b/PWGDQ/Tasks/dqEfficiency_withAssoc.cxx @@ -75,10 +75,8 @@ using namespace o2::aod; using namespace o2::common::core; // Some definitions -namespace o2::aod -{ -namespace dqanalysisflags -{ +namespace o2::aod { +namespace dqanalysisflags { DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing //need to understand DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, @@ -90,15 +88,15 @@ DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsMuonSelected, isMuonSelected, - 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to ReducedMuonsAssoc) DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, int8_t); //! Muon track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, - 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) + IsBarrelSelectedPrefilter, isBarrelSelectedPrefilter, + 32); //! Barrel prefilter decisions (joinable to ReducedTracksAssoc) // Bcandidate columns for ML analysis of B->Jpsi+K DECLARE_SOA_COLUMN(RunNumber, runNumber, uint64_t); DECLARE_SOA_COLUMN(EventIdx, eventIdx, uint64_t); @@ -198,8 +196,8 @@ 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) + 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, @@ -209,7 +207,7 @@ DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the //! reconstructed mass DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, - float); //! kVertexingLxyProjected + float); //! kVertexingLxyProjected DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, @@ -233,62 +231,62 @@ DECLARE_SOA_COLUMN(OniaVtxZ, oniaVtxZ, float); } // namespace dqanalysisflags DECLARE_SOA_TABLE( - EventCuts, "AOD", "DQANAEVCUTS", - dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents + EventCuts, "AOD", "DQANAEVCUTS", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents DECLARE_SOA_TABLE( - BarrelTrackCuts, "AOD", "DQANATRKCUTS", - dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc + BarrelTrackCuts, "AOD", "DQANATRKCUTS", + dqanalysisflags::IsBarrelSelected); //! joinable to ReducedTracksAssoc DECLARE_SOA_TABLE( - BarrelAmbiguities, "AOD", "DQBARRELAMB", - dqanalysisflags::BarrelAmbiguityInBunch, - dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to - //! ReducedBarrelTracks + BarrelAmbiguities, "AOD", "DQBARRELAMB", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks DECLARE_SOA_TABLE( - MuonTrackCuts, "AOD", "DQANAMUONCUTS", - dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc + MuonTrackCuts, "AOD", "DQANAMUONCUTS", + dqanalysisflags::IsMuonSelected); //! joinable to ReducedMuonsAssoc DECLARE_SOA_TABLE( - MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, - dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to - //! ReducedMuonTracks + MuonAmbiguities, "AOD", "DQMUONAMB", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks DECLARE_SOA_TABLE( - Prefilter, "AOD", "DQPREFILTER", - dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to - //! ReducedTracksAssoc + Prefilter, "AOD", "DQPREFILTER", + dqanalysisflags::IsBarrelSelectedPrefilter); //! joinable to + //! ReducedTracksAssoc DECLARE_SOA_TABLE( - BmesonCandidates, "AOD", "DQBMESONS", dqanalysisflags::RunNumber, - dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, - dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, - dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, - dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, - dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, - dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, - dqanalysisflags::LzBcandidateErr, dqanalysisflags::TauxyBcandidate, - dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, - dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, - dqanalysisflags::Chi2Bcandidate, dqanalysisflags::MCLxyBcandidate, - dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, - dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, - dqanalysisflags::MCCosPBcandidate, dqanalysisflags::GlobalIndexassoc, - dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, - dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, - dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::PINleg1, - dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, - dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, - dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, - dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, - dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, - dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, - dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, - dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, - dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); + BmesonCandidates, "AOD", "DQBMESONS", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltaMassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyBcandidateErr, dqanalysisflags::LxyzBcandidate, + dqanalysisflags::LxyzBcandidateErr, dqanalysisflags::LzBcandidate, + dqanalysisflags::LzBcandidateErr, dqanalysisflags::TauxyBcandidate, + dqanalysisflags::TauxyBcandidateErr, dqanalysisflags::TauzBcandidate, + dqanalysisflags::TauzBcandidateErr, dqanalysisflags::CosPBcandidate, + dqanalysisflags::Chi2Bcandidate, dqanalysisflags::MCLxyBcandidate, + dqanalysisflags::MCLxyzBcandidate, dqanalysisflags::MCLzBcandidate, + dqanalysisflags::MCTauxyBcandidate, dqanalysisflags::MCTauzBcandidate, + dqanalysisflags::MCCosPBcandidate, dqanalysisflags::GlobalIndexassoc, + dqanalysisflags::GlobalIndexleg1, dqanalysisflags::GlobalIndexleg2, + dqanalysisflags::PINassoc, dqanalysisflags::Etaassoc, + dqanalysisflags::Ptpair, dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected, dqanalysisflags::McFlag); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, dqanalysisflags::MassDileptonCandidate, @@ -299,26 +297,26 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, - dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, - dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, - dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, - dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, - dqanalysisflags::MultiplicityNContrib); + 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, 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, @@ -332,84 +330,84 @@ DECLARE_SOA_TABLE(OniaMCTruth, "AOD", "MCTRUTHONIA", dqanalysisflags::OniaPt, using MyEvents = soa::Join; using MyEventsSelected = - soa::Join; + soa::Join; using MyEventsVtxCov = - soa::Join; + soa::Join; using MyEventsVtxCovSelected = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedInfo = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedMultExtra = - soa::Join; + soa::Join; using MyEventsVtxCovSelectedQvector = - soa::Join; + soa::Join; using MyEventsQvector = - soa::Join; + soa::Join; using MyEventsVtxCovHashSelected = - soa::Join; + soa::Join; using MyBarrelTracks = - soa::Join; + soa::Join; using MyBarrelTracksWithAmbiguities = - soa::Join; + soa::Join; using MyBarrelTracksWithCov = - soa::Join; + soa::Join; using MyBarrelTracksWithCovWithAmbiguities = - soa::Join; + soa::Join; using MyBarrelTracksWithCovWithAmbiguitiesWithColl = - soa::Join; + soa::Join; using MyDielectronCandidates = - soa::Join; + soa::Join; using MyDitrackCandidates = soa::Join; using MyDimuonCandidates = soa::Join; using MyMuonTracks = soa::Join; using MyMuonTracksWithCov = - soa::Join; + soa::Join; using MyMuonTracksWithCovWithAmbiguities = - soa::Join; + soa::Join; // using MyMuonTracksSelectedWithColl = soa::Join; // bit maps used for the Fill functions of the VarManager constexpr static uint32_t gkEventFillMap = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; constexpr static uint32_t gkEventFillMapWithCov = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; constexpr static uint32_t gkEventFillMapWithCovMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | + VarManager::ObjTypes::ReducedEventMultExtra; // constexpr static uint32_t gkEventFillMapWithQvector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | @@ -419,51 +417,48 @@ constexpr static uint32_t gkEventFillMapWithCovMultExtra = // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkTrackFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCov = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCovWithColl = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID | - VarManager::ObjTypes::ReducedTrackCollInfo; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; // constexpr static uint32_t gkTrackFillMapWithColl = // VarManager::ObjTypes::ReducedTrack | VarManager::ObjTypes::ReducedTrackBarrel // | VarManager::ObjTypes::ReducedTrackBarrelPID | // VarManager::ObjTypes::ReducedTrackCollInfo; constexpr static uint32_t gkMuonFillMap = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra; constexpr static uint32_t gkMuonFillMapWithCov = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | - VarManager::ObjTypes::ReducedMuonCov; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; // constexpr static uint32_t gkMuonFillMapWithColl = // VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | // VarManager::ObjTypes::ReducedMuonCollInfo; -namespace dqefficiency_helpers -{ -inline float* varValues() { return static_cast(VarManager::fgValues); } -inline TString* varNames() -{ - return static_cast(VarManager::fgVariableNames); +namespace dqefficiency_helpers { +inline float *varValues() { return static_cast(VarManager::fgValues); } +inline TString *varNames() { + return static_cast(VarManager::fgVariableNames); } -inline TString* varUnits() -{ - return static_cast(VarManager::fgVariableUnits); +inline TString *varUnits() { + return static_cast(VarManager::fgVariableUnits); } } // namespace dqefficiency_helpers // Global function used to define needed histogram classes void DefineHistograms( - HistogramManager* histMan, const TString& histClasses, - const char* histGroups); // defines histograms for all tasks + HistogramManager *histMan, const TString &histClasses, + const char *histGroups); // defines histograms for all tasks // template // void PrintBitMap(TMap map, int nbits) @@ -481,48 +476,48 @@ struct AnalysisEventSelection { Produces JetEvents; OutputObj fOutputList{"output"}; Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; Configurable fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"}; Configurable fConfigEventCutsJSON{ - "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddEventHistogram{ - "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddEventMCHistogram{ - "cfgAddEventMCHistogram", "generator", - "Comma separated list of histograms"}; + "cfgAddEventMCHistogram", "generator", + "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", - "Add event histograms defined via JSON formatting (see " - "HistogramsLibrary)"}; + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; Configurable fConfigSplitCollisionsDeltaZ{ - "splitCollisionsDeltaZ", 1.0, - "maximum delta-z (cm) between two collisions to consider them as split " - "candidates"}; + "splitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; Configurable fConfigSplitCollisionsDeltaBC{ - "splitCollisionsDeltaBC", 100, - "maximum delta-BC between two collisions to consider them as split " - "candidates; do not apply if value is negative"}; + "splitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; Configurable fConfigCheckSplitCollisions{ - "checkSplitCollisions", false, - "If true, run the split collision check and fill histograms"}; + "checkSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; - HistogramManager* fHistMan = nullptr; - MixingHandler* fMixHandler = nullptr; + HistogramManager *fHistMan = nullptr; + MixingHandler *fMixHandler = nullptr; - AnalysisCompositeCut* fEventCut = nullptr; + AnalysisCompositeCut *fEventCut = nullptr; Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; @@ -530,13 +525,12 @@ struct AnalysisEventSelection { std::map fSelMap; // key: reduced event global index, value: // event selection decision std::map> - fBCCollMap; // key: global BC, value: vector of reduced event global - // indices + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices std::map fMetadataRCT, fHeader; int fCurrentRun = -1; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -545,7 +539,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut* cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut *cut = dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -553,16 +547,16 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = - dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const& cutIt : jsonCuts) { + std::vector jsonCuts = + dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const &cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); @@ -578,8 +572,8 @@ struct AnalysisEventSelection { DefineHistograms(fHistMan, "EventsMC", fConfigAddEventMCHistogram.value.data()); dqhistograms::AddHistogramsFromJSON( - fHistMan, fConfigAddJSONHistograms.value - .c_str()); // aditional histograms via JSON + fHistMan, fConfigAddJSONHistograms.value + .c_str()); // aditional histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -603,12 +597,11 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const& events, TEventsMC const& mcEvents) - { + void runEventSelection(TEvents const &events, TEventsMC const &mcEvents) { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { fHeader = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - fMetadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + fMetadataRCT, -1); uint64_t sor = std::atol(fHeader["SOR"].c_str()); uint64_t eor = std::atol(fHeader["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -617,22 +610,22 @@ struct AnalysisEventSelection { fSelMap.clear(); fBCCollMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } bool decision = false; // if QA is requested fill histograms before event selections if (fConfigQA) { fHistMan->FillHistClass( - "Event_BeforeCuts", - dqefficiency_helpers::varValues()); // automatically fill all the - // histograms in the class Event + "Event_BeforeCuts", + dqefficiency_helpers::varValues()); // automatically fill all the + // histograms in the class Event } if (fEventCut->IsSelected(dqefficiency_helpers::varValues())) { if (fConfigQA) { @@ -646,17 +639,17 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto& evIndices = fBCCollMap[event.globalBC()]; + auto &evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } if (fMixHandler != nullptr) { int hh = - fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); + fMixHandler->FindEventCategory(dqefficiency_helpers::varValues()); hash(hh); } } - for (auto const& event : mcEvents) { + for (auto const &event : mcEvents) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); @@ -667,11 +660,10 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const& events) - { + void publishSelections(TEvents const &events) { std::map - collisionSplittingMap; // key: event global index, value: whether pileup - // event is a possible splitting + collisionSplittingMap; // key: event global index, value: whether pileup + // event is a possible splitting // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); @@ -679,7 +671,7 @@ struct AnalysisEventSelection { // of bunch 2-event correlations for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { uint64_t bc1 = bc1It->first; - auto const& bc1Events = bc1It->second; + auto const &bc1Events = bc1It->second; // same bunch event correlations, if more than 1 collisions in this bunch if (bc1Events.size() > 1) { @@ -713,13 +705,13 @@ struct AnalysisEventSelection { fConfigSplitCollisionsDeltaBC) { break; } - auto const& bc2Events = bc2It->second; + auto const &bc2Events = bc2It->second; // loop over events in the first BC - for (const auto& ev1It : bc1Events) { + for (const auto &ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (const auto& ev2It : bc2Events) { + for (const auto &ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); // compute 2-event quantities and mark the candidate split // collisions @@ -741,7 +733,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const& event : events) { + for (auto const &event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -759,25 +751,23 @@ struct AnalysisEventSelection { } } - void processSkimmed(MyEvents const& events, - aod::ReducedMCEvents const& mcEvents) - { + void processSkimmed(MyEvents const &events, + aod::ReducedMCEvents const &mcEvents) { runEventSelection(events, mcEvents); publishSelections(events); } void - processFillEvents(MyEvents const& events) // Used to forward the event table - // from tablemaker, typical use for - // now is jet analysis. + processFillEvents(MyEvents const &events) // Used to forward the event table + // from tablemaker, typical use for + // now is jet analysis. { - for (auto const& event : events) { + for (auto const &event : events) { JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -799,19 +789,19 @@ struct AnalysisTrackSelection { OutputObj fOutputList{"output"}; Configurable fConfigCuts{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; Configurable fConfigCutsJSON{ - "cfgBarrelTrackCutsJSON", "", - "Additional list of barrel track cuts in JSON format"}; + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; // Re-application of the track-to-collision time compatibility on the skimmed // associations. // timeMargin and nSigma must be <= the values used by @@ -819,53 +809,53 @@ struct AnalysisTrackSelection { // usePVAssociation and maxPvContributors must be identical to those values. struct : ConfigurableGroup { Configurable cfgAssocTimeCut{ - "cfgAssocTimeCut", false, - "If true, reject associations failing the time compatibility computed " - "with the parameters below"}; + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; Configurable cfgAssocTimeMargin{ - "cfgAssocTimeMargin", 0.f, - "time margin (ns); must be <= skimming timeMargin"}; + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; Configurable cfgAssocNSigma{ - "cfgAssocNSigma", 4.f, - "nSigmaForTimeCompat; must be <= skimming value"}; + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; Configurable cfgAssocBcWindowForOneSigma{ - "cfgAssocBcWindowForOneSigma", 60, - "bcWindowForOneSigma; must be equal to the skimming value"}; + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; Configurable cfgAssocUsePVAssociation{ - "cfgAssocUsePVAssociation", 1, - "usePVAssociation; must be equal to the skimming value"}; + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ - "cfgAssocMaxPvContributorsForLowMultReassoc", 10, - "maxPvContributorsForLowMultReassoc; must be equal to the skimming " - "value"}; + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigCcdbPathTPC{ - "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", - "base path to the ccdb object"}; + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Configurable fConfigComputeTPCpostCalib{ - "cfgTPCpostCalib", false, - "If true, compute TPC post-calibrated n-sigmas"}; + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable fConfigMCSignals{ - "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fTrackCuts; - std::vector fMCSignals; // list of signals to be checked + HistogramManager *fHistMan = nullptr; + std::vector fTrackCuts; + std::vector fMCSignals; // list of signals to be checked std::vector fHistNamesReco; std::vector fHistNamesMCMatched; @@ -873,16 +863,15 @@ struct AnalysisTrackSelection { // CCDB parameters) std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -894,28 +883,28 @@ struct AnalysisTrackSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fTrackCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // add extra cuts from JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -926,9 +915,9 @@ struct AnalysisTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -938,7 +927,7 @@ struct AnalysisTrackSelection { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); @@ -947,13 +936,13 @@ struct AnalysisTrackSelection { // Add histogram classes for each track cut and for each requested MC // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsBarrel_BeforeCuts;"; - for (auto const& cut : fTrackCuts) { + for (auto const &cut : fTrackCuts) { TString nameStr = Form("AssocsBarrel_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { + for (auto const &sig : fMCSignals) { TString nameStr2 = - Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsCorrectBarrel_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); nameStr2 = Form("AssocsIncorrectBarrel_%s_%s", cut->GetName(), @@ -967,16 +956,16 @@ struct AnalysisTrackSelection { fConfigAddTrackHistogram.value.data()); if (fConfigPublishAmbiguity) { DefineHistograms( - fHistMan, - "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", - "ambiguity"); + fHistMan, + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;", + "ambiguity"); } dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -990,11 +979,10 @@ struct AnalysisTrackSelection { template - void runTrackSelection(ReducedTracksAssoc const& assocs, - TEvents const& events, TTracks const& tracks, - TEventsMC const& /*eventsMC*/, - TTracksMC const& tracksMC) - { + void runTrackSelection(ReducedTracksAssoc const &assocs, + TEvents const &events, TTracks const &tracks, + TEventsMC const & /*eventsMC*/, + TTracksMC const &tracksMC) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1002,27 +990,27 @@ struct AnalysisTrackSelection { if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { auto calibList = fCCDB->getForTimeStamp( - fConfigCcdbPathTPC.value, events.begin().timestamp()); + fConfigCcdbPathTPC.value, events.begin().timestamp()); VarManager::SetCalibrationObject( - VarManager::kTPCElectronMean, - calibList->FindObject("mean_map_electron")); + VarManager::kTPCElectronMean, + calibList->FindObject("mean_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCElectronSigma, - calibList->FindObject("sigma_map_electron")); + VarManager::kTPCElectronSigma, + calibList->FindObject("sigma_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); + VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); + VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonMean, - calibList->FindObject("mean_map_proton")); + VarManager::kTPCProtonMean, + calibList->FindObject("mean_map_proton")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonSigma, - calibList->FindObject("sigma_map_proton")); + VarManager::kTPCProtonSigma, + calibList->FindObject("sigma_map_proton")); } auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -1037,7 +1025,7 @@ struct AnalysisTrackSelection { trackAmbiguities.reserve(tracks.size()); // Loop over associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { trackSel(0); @@ -1050,7 +1038,7 @@ struct AnalysisTrackSelection { VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); @@ -1061,11 +1049,11 @@ struct AnalysisTrackSelection { if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); if (!VarManager::isBarrelAssocTimeCompatible( - track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, - fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, - fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } @@ -1122,16 +1110,16 @@ struct AnalysisTrackSelection { if (filterMap & (static_cast(1) << icut)) { if (isCorrectAssoc) { fHistMan->FillHistClass( - fHistNamesMCMatched[icut * 2 * fMCSignals.size() + - 2 * isig] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - fHistNamesMCMatched[icut * 2 * fMCSignals.size() + - 2 * isig + 1] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[icut * 2 * fMCSignals.size() + + 2 * isig + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1169,7 +1157,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1178,7 +1166,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1191,7 +1179,7 @@ struct AnalysisTrackSelection { // So one could QA these tracks separately if (fConfigPublishAmbiguity) { if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1199,12 +1187,12 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqefficiency_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1212,14 +1200,14 @@ struct AnalysisTrackSelection { VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : tracks) { + for (auto const &track : tracks) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1235,26 +1223,23 @@ struct AnalysisTrackSelection { } } // end runTrackSelection() - void processSkimmed(ReducedTracksAssoc const& assocs, - MyEventsSelected const& events, - MyBarrelTracks const& tracks, - ReducedMCEvents const& eventsMC, - ReducedMCTracks const& tracksMC) - { + void processSkimmed(ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { runTrackSelection(assocs, events, tracks, eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedTracksAssoc const& assocs, - MyEventsVtxCovSelected const& events, - MyBarrelTracksWithCov const& tracks, - ReducedMCEvents const& eventsMC, - ReducedMCTracks const& tracksMC) - { + void processSkimmedWithCov(ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCov const &tracks, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { runTrackSelection( - assocs, events, tracks, eventsMC, tracksMC); + assocs, events, tracks, eventsMC, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -1280,52 +1265,51 @@ struct AnalysisMuonSelection { Configurable fConfigCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; Configurable fConfigCutsJSON{ - "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddMuonHistogram{ - "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; Configurable fConfigMCSignals{ - "cfgMuonMCSignals", "", "Comma separated list of MC signals"}; + "cfgMuonMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgMuonMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager *fHistMan = nullptr; + std::vector fMuonCuts; std::vector fHistNamesReco; std::vector fHistNamesMCMatched; - std::vector fMCSignals; // list of signals to be checked + std::vector fMCSignals; // list of signals to be checked int fCurrentRun = 0; // current run (needed to detect run changes for loading // CCDB parameters) std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1337,28 +1321,28 @@ struct AnalysisMuonSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fMuonCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Add cuts configured via JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const& t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const &t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); // Setting the MC signals for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -1369,9 +1353,9 @@ struct AnalysisMuonSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -1381,7 +1365,7 @@ struct AnalysisMuonSelection { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqefficiency_helpers::varNames(), dqefficiency_helpers::varUnits()); @@ -1390,17 +1374,17 @@ struct AnalysisMuonSelection { // Add histogram classes for each track cut and for each requested MC // signal (reconstructed tracks with MC truth) TString histClasses = "AssocsMuon_BeforeCuts;"; - for (auto const& cut : fMuonCuts) { + for (auto const &cut : fMuonCuts) { TString nameStr = Form("AssocsMuon_%s", cut->GetName()); fHistNamesReco.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { + for (auto const &sig : fMCSignals) { TString nameStr2 = - Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsCorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); nameStr2 = - Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); + Form("AssocsIncorrectMuon_%s_%s", cut->GetName(), sig->GetName()); fHistNamesMCMatched.push_back(nameStr2); histClasses += Form("%s;", nameStr2.Data()); } @@ -1410,14 +1394,14 @@ struct AnalysisMuonSelection { } DefineHistograms( - fHistMan, histClasses.Data(), - fConfigAddMuonHistogram.value.data()); // define all histograms + fHistMan, histClasses.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1429,11 +1413,10 @@ struct AnalysisMuonSelection { template - void runMuonSelection(ReducedMuonsAssoc const& assocs, TEvents const& events, - TMuons const& muons, - ReducedMCEvents const& /*eventsMC*/, - ReducedMCTracks const& muonsMC) - { + void runMuonSelection(ReducedMuonsAssoc const &assocs, TEvents const &events, + TMuons const &muons, + ReducedMCEvents const & /*eventsMC*/, + ReducedMCTracks const &muonsMC) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1443,12 +1426,12 @@ struct AnalysisMuonSelection { muonSel.reserve(assocs.size()); - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.has_reducedMCevent() || !event.isEventSelected_bit( - 0)) { // condition on reducedMCevent to avoid rec. events with no - // generated event + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event muonSel(0); continue; } @@ -1457,7 +1440,7 @@ struct AnalysisMuonSelection { // combine track and event properties VarManager::FillEvent(event); VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); auto track = assoc.template reducedmuon_as(); VarManager::FillTrack(track); @@ -1524,13 +1507,13 @@ struct AnalysisMuonSelection { if (filterMap & (static_cast(1) << j)) { if (isCorrectAssoc) { fHistMan->FillHistClass( - fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i].Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1] - .Data(), - dqefficiency_helpers::varValues()); + fHistNamesMCMatched[j * 2 * fMCSignals.size() + 2 * i + 1] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop over cuts @@ -1544,7 +1527,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1553,7 +1536,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1565,7 +1548,7 @@ struct AnalysisMuonSelection { // pileup and collisions from different bunches // So one could QA these tracks separately if (fConfigPublishAmbiguity) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1573,14 +1556,14 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); if (fConfigQA) { fHistMan->FillHistClass("Muon_AmbiguityInBunch", dqefficiency_helpers::varValues()); } } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1588,7 +1571,7 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); if (fConfigQA) { fHistMan->FillHistClass("Muon_AmbiguityOutOfBunch", dqefficiency_helpers::varValues()); @@ -1596,7 +1579,7 @@ struct AnalysisMuonSelection { } // end loop over out-of-bunch ambiguous tracks // publish the ambiguity table - for (auto const& track : muons) { + for (auto const &track : muons) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1612,26 +1595,23 @@ struct AnalysisMuonSelection { } } - void processSkimmed(ReducedMuonsAssoc const& assocs, - MyEventsSelected const& events, MyMuonTracks const& muons, - ReducedMCEvents const& eventsMC, - ReducedMCTracks const& tracksMC) - { + void processSkimmed(ReducedMuonsAssoc const &assocs, + MyEventsSelected const &events, MyMuonTracks const &muons, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { runMuonSelection(assocs, events, muons, eventsMC, tracksMC); } - void processSkimmedWithCov(ReducedMuonsAssoc const& assocs, - MyEventsVtxCovSelected const& events, - MyMuonTracksWithCov const& muons, - ReducedMCEvents const& eventsMC, - ReducedMCTracks const& tracksMC) - { + void processSkimmedWithCov(ReducedMuonsAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyMuonTracksWithCov const &muons, + ReducedMCEvents const &eventsMC, + ReducedMCTracks const &tracksMC) { runMuonSelection( - assocs, events, muons, eventsMC, tracksMC); + assocs, events, muons, eventsMC, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -1661,22 +1641,21 @@ struct AnalysisPrefilterSelection { Configurable fConfigPrefilterPairCut{"cfgPrefilterPairCut", "", "Prefilter pair cut"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // Track related options Configurable fPropTrack{"cfgPropTrack", false, "Propgate tracks to associated collision to " "recalculate DCA and momentum vector"}; std::map fPrefilterMap; - AnalysisCompositeCut* fPairCut = nullptr; + AnalysisCompositeCut *fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; Preslice trackAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1685,7 +1664,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1720,9 +1699,9 @@ struct AnalysisPrefilterSelection { false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } @@ -1730,7 +1709,7 @@ struct AnalysisPrefilterSelection { std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { LOG(fatal) << " Prefilter track cut not among the cuts calculated by " @@ -1758,27 +1737,26 @@ struct AnalysisPrefilterSelection { } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill VarManager::SetupTwoProngDCAFitter( - 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - true); // TODO: get these parameters from Configurables + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true); } template void runPrefilter( - TEvent const& event, - soa::Join const& assocs, - TTracks const& /*tracks*/) - { + TEvent const &event, + soa::Join const &assocs, + TTracks const & /*tracks*/) { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); @@ -1792,9 +1770,9 @@ struct AnalysisPrefilterSelection { // here we check the cuts fulfilled by both tracks, for both the tight and // loose selections uint32_t track1Candidate = - (assoc1.isBarrelSelected_raw() & fPrefilterMask); + (assoc1.isBarrelSelected_raw() & fPrefilterMask); uint32_t track2Candidate = - (assoc2.isBarrelSelected_raw() & fPrefilterMask); + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); @@ -1808,7 +1786,7 @@ struct AnalysisPrefilterSelection { track2); if (fPropTrack) { VarManager::FillPairCollision( - event, track1, track2); + event, track1, track2); } // if the pair fullfils the criteria, add an entry into the prefilter map // for the two tracks @@ -1826,16 +1804,15 @@ struct AnalysisPrefilterSelection { } void processBarrelSkimmed( - MyEvents const& events, - soa::Join const& assocs, - MyBarrelTracks const& tracks) - { + MyEvents const &events, + soa::Join const &assocs, + MyBarrelTracks const &tracks) { fPrefilterMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { auto groupedAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(event, groupedAssocs, tracks); } @@ -1849,7 +1826,7 @@ struct AnalysisPrefilterSelection { prefilter(mymap); } } else { - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { // TODO: just use the index from the assoc (no need to cast the whole // track) auto track = assoc.template reducedtrack_as(); @@ -1867,8 +1844,7 @@ struct AnalysisPrefilterSelection { } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -1887,28 +1863,28 @@ struct AnalysisPostPrefilterTrackSelection { OutputObj fOutputList{"output"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", - "Comma separated list of track cuts (among those of " - "analysis-track-selection) for which to fill histograms"}; + "cfgTrackCuts", "", + "Comma separated list of track cuts (among those of " + "analysis-track-selection) for which to fill histograms"}; Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigMCSignals{ - "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; + "cfgTrackMCSignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{ - "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; + "cfgTrackMCsignalsJSON", "", "Additional list of MC signals via JSON"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMCSignals; - std::vector fCutBits; // bit positions of the requested cuts in the - // track-selection task cut list + HistogramManager *fHistMan = nullptr; + std::vector fMCSignals; + std::vector fCutBits; // bit positions of the requested cuts in the + // track-selection task cut list std::vector fHistNamesSurvived; // [icut] std::vector fHistNamesVetoed; // [icut] std::vector fHistNamesMCSurvived; // [icut * nSignals + isig] @@ -1917,8 +1893,7 @@ struct AnalysisPostPrefilterTrackSelection { int fCurrentRun = 0; // current run (needed to detect run changes for loading // CCDB parameters) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1929,7 +1904,7 @@ struct AnalysisPostPrefilterTrackSelection { std::unique_ptr objArrayCuts(trackCutsStr.Tokenize(",")); if (objArrayCuts == nullptr || objArrayCuts->GetEntries() == 0) { LOG(fatal) - << " No track cuts specified! Check the cfgTrackCuts configurable"; + << " No track cuts specified! Check the cfgTrackCuts configurable"; } // get the full list of cuts computed by the track-selection task and // resolve the requested cuts to bit positions @@ -1942,24 +1917,24 @@ struct AnalysisPostPrefilterTrackSelection { "cfgBarrelTrackCutsJSON", trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } std::unique_ptr objArrayAllCuts(allTrackCutsStr.Tokenize(",")); if (objArrayAllCuts == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } std::vector cutNames; for (int icut = 0; icut < objArrayCuts->GetEntries(); ++icut) { TString cutName = objArrayCuts->At(icut)->GetName(); if (objArrayAllCuts->FindObject(cutName.Data()) == nullptr) { LOG(fatal) - << " Track cut " << cutName - << " not among the cuts calculated by the track-selection task! "; + << " Track cut " << cutName + << " not among the cuts calculated by the track-selection task! "; } for (int jcut = 0; jcut < objArrayAllCuts->GetEntries(); ++jcut) { if (cutName.CompareTo(objArrayAllCuts->At(jcut)->GetName()) == 0) { @@ -1973,8 +1948,8 @@ struct AnalysisPostPrefilterTrackSelection { TString configSigNamesStr = fConfigMCSignals.value; std::unique_ptr sigNamesArray(configSigNamesStr.Tokenize(",")); for (int isig = 0; isig < sigNamesArray->GetEntries(); ++isig) { - MCSignal* sig = - o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); + MCSignal *sig = + o2::aod::dqmcsignals::GetMCSignal(sigNamesArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; @@ -1985,9 +1960,9 @@ struct AnalysisPostPrefilterTrackSelection { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMCSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 1) { // NOTE: only 1 prong signals continue; } @@ -2004,14 +1979,14 @@ struct AnalysisPostPrefilterTrackSelection { // prefilter-surviving and prefilter-vetoed tracks, // and for each requested MC signal (reconstructed tracks with MC truth) TString histClasses = ""; - for (auto const& cutName : cutNames) { + for (auto const &cutName : cutNames) { TString nameStr = Form("TrackBarrelPostPrefilter_%s", cutName.Data()); fHistNamesSurvived.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); nameStr = Form("TrackBarrelPrefilterVetoed_%s", cutName.Data()); fHistNamesVetoed.push_back(nameStr); histClasses += Form("%s;", nameStr.Data()); - for (auto const& sig : fMCSignals) { + for (auto const &sig : fMCSignals) { TString nameStr2 = Form("TrackBarrelPostPrefilter_%s_%s", cutName.Data(), sig->GetName()); fHistNamesMCSurvived.push_back(nameStr2); @@ -2026,11 +2001,11 @@ struct AnalysisPostPrefilterTrackSelection { DefineHistograms(fHistMan, histClasses.Data(), fConfigAddTrackHistogram.value.data()); dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); fCCDB->setURL(fConfigCcdbUrl.value); @@ -2041,16 +2016,15 @@ struct AnalysisPostPrefilterTrackSelection { template void runPostPrefilterTrackSelection( - soa::Join const& assocs, - TEvents const& events, TTracks const& /*tracks*/, - TTracksMC const& tracksMC) - { + soa::Join const &assocs, + TEvents const &events, TTracks const & /*tracks*/, + TTracksMC const &tracksMC) { // load the magnetic field (needed to recompute the DCA with respect to the // associated collision) if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -2061,7 +2035,7 @@ struct AnalysisPostPrefilterTrackSelection { } // Loop over associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { continue; @@ -2089,7 +2063,7 @@ struct AnalysisPostPrefilterTrackSelection { VarManager::FillEvent(event); if (event.has_reducedMCevent()) { VarManager::FillEvent( - event.reducedMCevent()); + event.reducedMCevent()); } auto track = assoc.template reducedtrack_as(); @@ -2107,20 +2081,20 @@ struct AnalysisPostPrefilterTrackSelection { } bool isVetoed = (vetoMap & (static_cast(1) << icut)) > 0; fHistMan->FillHistClass( - (isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]) - .Data(), - dqefficiency_helpers::varValues()); + (isVetoed ? fHistNamesVetoed[icut] : fHistNamesSurvived[icut]) + .Data(), + dqefficiency_helpers::varValues()); if (track.has_reducedMCTrack()) { int isig = 0; for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) { if ((*sig)->CheckSignal(true, track.reducedMCTrack())) { fHistMan->FillHistClass( - (isVetoed - ? fHistNamesMCVetoed - : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig] - .Data(), - dqefficiency_helpers::varValues()); + (isVetoed + ? fHistNamesMCVetoed + : fHistNamesMCSurvived)[icut * fMCSignals.size() + isig] + .Data(), + dqefficiency_helpers::varValues()); } } } @@ -2129,27 +2103,24 @@ struct AnalysisPostPrefilterTrackSelection { } void processSkimmed(soa::Join const& assocs, - MyEventsSelected const& events, - MyBarrelTracks const& tracks, - ReducedMCEvents const& /*eventsMC*/, - ReducedMCTracks const& tracksMC) - { + aod::Prefilter> const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks, + ReducedMCEvents const & /*eventsMC*/, + ReducedMCTracks const &tracksMC) { runPostPrefilterTrackSelection( - assocs, events, tracks, tracksMC); + assocs, events, tracks, tracksMC); } void processSkimmedWithCov( - soa::Join const& assocs, - MyEventsVtxCovSelected const& events, MyBarrelTracksWithCov const& tracks, - ReducedMCEvents const& /*eventsMC*/, ReducedMCTracks const& tracksMC) - { + soa::Join const &assocs, + MyEventsVtxCovSelected const &events, MyBarrelTracksWithCov const &tracks, + ReducedMCEvents const & /*eventsMC*/, ReducedMCTracks const &tracksMC) { runPostPrefilterTrackSelection(assocs, events, tracks, tracksMC); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -2187,7 +2158,7 @@ struct AnalysisSameEventPairing { Produces MCTruthTableEffi; Produces dileptonPolarList; - o2::base::MatLayerCylSet* fLUT = nullptr; + o2::base::MatLayerCylSet *fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -2195,26 +2166,26 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable track{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; Configurable muon{"cfgMuonCuts", "", "Comma separated list of muon cuts"}; Configurable pair{ - "cfgPairCuts", "", - "Comma separated list of pair cuts, !!! Use only if you know what you " - "are doing, otherwise leave empty"}; + "cfgPairCuts", "", + "Comma separated list of pair cuts, !!! Use only if you know what you " + "are doing, otherwise leave empty"}; Configurable MCgenAcc{ - "cfgMCGenAccCuts", "", - "Comma separated list of MC generated particles acceptance cuts, !!! " - "Use only if you know what you are doing, otherwise leave empty"}; + "cfgMCGenAccCuts", "", + "Comma separated list of MC generated particles acceptance cuts, !!! " + "Use only if you know what you are doing, otherwise leave empty"}; // TODO: Add pair cuts via JSON } fConfigCuts; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddSEPHistogram{ - "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; struct : ConfigurableGroup { Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", @@ -2227,22 +2198,22 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable flatTables{ - "cfgFlatTables", false, - "Produce a single flat tables with all relevant information of the " - "pairs and single tracks"}; + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; Configurable polarTables{ - "cfgPolarTables", false, - "Produce tables with dilepton polarization information"}; + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; Configurable useKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is " - "used by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; Configurable useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of " "chi^2 minimization in secondary vertexing"}; Configurable noCorr{ - "cfgNoCorrFwdProp", false, - "Do not correct for MCS effects in track propagation"}; + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; Configurable collisionSystem{"syst", "pp", "Collision system, pp or PbPb"}; Configurable centerMassEnergy{"energy", 13600, @@ -2251,36 +2222,36 @@ struct AnalysisSameEventPairing { struct : ConfigurableGroup { Configurable genSignals{ - "cfgBarrelMCGenSignals", "", - "Comma separated list of MC signals (generated)"}; + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; Configurable genSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Additional list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Additional list of MC signals (generated) via JSON"}; Configurable recSignals{ - "cfgBarrelMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable recSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Comma separated list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Comma separated list of MC signals (reconstructed) via JSON"}; Configurable emuRecSignals{ - "cfgEmuMCRecSignals", "", - "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; + "cfgEmuMCRecSignals", "", + "Comma separated list of MC signals (reconstructed) for e-mu pairs"}; Configurable emuRecSignalsJSON{ - "cfgEmuMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) for e-mu pairs via " - "JSON"}; + "cfgEmuMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) for e-mu pairs via " + "JSON"}; Configurable finalStateSignals{ - "cfgBarrelMCFinalStateSignals", "eFromJpsi", - "Comma separated list of MC signals (final state particles)"}; + "cfgBarrelMCFinalStateSignals", "eFromJpsi", + "Comma separated list of MC signals (final state particles)"}; Configurable skimSignalOnly{ - "cfgSkimSignalOnly", false, - "Configurable to select only matched candidates"}; + "cfgSkimSignalOnly", false, + "Configurable to select only matched candidates"}; } fConfigMC; struct : ConfigurableGroup { Configurable fConfigMiniTree{ - "useMiniTree.cfgMiniTree", false, - "Produce a single flat table with minimal information for analysis"}; + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; Configurable fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; Configurable fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", @@ -2302,7 +2273,7 @@ struct AnalysisSameEventPairing { Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; // keep histogram class names in maps, so we don't have to buld their names in // the pair loops @@ -2312,21 +2283,21 @@ struct AnalysisSameEventPairing { std::map> fMuonHistNamesMCmatched; std::map> fTrackMuonHistNames; std::map> fTrackMuonHistNamesMCmatched; - std::vector fRecMCSignals; - std::vector fEmuRecMCSignals; - std::vector fGenMCSignals; - std::vector fFinalStateMCSignals; + std::vector fRecMCSignals; + std::vector fEmuRecMCSignals; + std::vector fGenMCSignals; + std::vector fFinalStateMCSignals; std::vector fPairCuts; - std::vector fMCGenAccCuts; + std::vector fMCGenAccCuts; bool fUseMCGenAccCut = false; uint32_t fTrackFilterMask = - 0; // mask for the track cuts required in this task to be applied on the - // barrel cuts produced upstream + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream uint32_t fMuonFilterMask = - 0; // mask for the muon cuts required in this task to be applied on the - // muon cuts produced upstream + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -2338,17 +2309,16 @@ struct AnalysisSameEventPairing { bool fEnableBarrelMuonMixingHistos = false; Preslice< - soa::Join> - trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + soa::Join> + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; Preslice> - muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + muonAssocsPerCollision = aod::reducedtrack_association::reducedeventId; Configurable fConfigMixingDepth{ - "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; NoBinningPolicy hashBin; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -2358,17 +2328,17 @@ struct AnalysisSameEventPairing { VarManager::SetDefaultVarNames(); fEnableBarrelHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processBarrelOnlySkimmed") || - context.mOptions.get("processBarrelOnlyWithCollSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed"); fEnableMuonHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processMuonOnlySkimmed") || - context.mOptions.get("processMuonOnlyVertexingSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableBarrelMuonHistos = - context.mOptions.get("processElectronMuonSkimmed"); + context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = - context.mOptions.get("processMixingElectronMuonSkimmed"); + context.mOptions.get("processMixingElectronMuonSkimmed"); // Keep track of all the histogram class names to avoid composing strings in // the pairing loop @@ -2378,7 +2348,7 @@ struct AnalysisSameEventPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - *dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + *dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } @@ -2387,12 +2357,12 @@ struct AnalysisSameEventPairing { // and make a mask for active cuts (barrel and muon selection tasks may // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray* objArrayMuonCuts = nullptr; + TObjArray *objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -2401,8 +2371,8 @@ struct AnalysisSameEventPairing { TString sigNamesStr = fConfigMC.recSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -2414,9 +2384,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsStr = fConfigMC.recSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2) { // NOTE: only 2 prong signals continue; } @@ -2429,8 +2399,8 @@ struct AnalysisSameEventPairing { TString emuSigNamesStr = fConfigMC.emuRecSignals.value; std::unique_ptr objEmuRecSigArray(emuSigNamesStr.Tokenize(",")); for (int isig = 0; isig < objEmuRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objEmuRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objEmuRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required continue; @@ -2440,9 +2410,9 @@ struct AnalysisSameEventPairing { } TString addEmuMCSignalsStr = fConfigMC.emuRecSignalsJSON.value; if (addEmuMCSignalsStr != "") { - std::vector addEmuMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); - for (auto const& mcIt : addEmuMCSignals) { + std::vector addEmuMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addEmuMCSignalsStr.Data()); + for (auto const &mcIt : addEmuMCSignals) { if (mcIt->GetNProngs() != 2) { continue; } @@ -2461,9 +2431,9 @@ struct AnalysisSameEventPairing { "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2485,9 +2455,9 @@ struct AnalysisSameEventPairing { if (fEnableBarrelHistos) { // assign the pair hist directories for the current cut std::vector names = { - Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsBarrelSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsBarrelSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks names.push_back(Form("PairsBarrelSEPM_ambiguousInBunch_%s", @@ -2503,7 +2473,7 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsBarrelSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fTrackHistNames[icut] = names; @@ -2516,23 +2486,23 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); // NOTE: In the numbering scheme for the map key, we use the // number of barrel cuts in the barrel-track selection task fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) @@ -2558,26 +2528,26 @@ struct AnalysisSameEventPairing { objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsBarrelSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsBarrelSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsBarrelSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fBarrelHistNamesMCmatched.try_emplace( - icut * fRecMCSignals.size() + isig, names); + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } // end if enableBarrelHistos @@ -2595,9 +2565,9 @@ struct AnalysisSameEventPairing { "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = - dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const& t : addMuonCuts) { + std::vector addMuonCuts = + dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const &t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2617,9 +2587,9 @@ struct AnalysisSameEventPairing { if (fEnableMuonHistos) { // assign pair hist directories for each required muon cut std::vector names = { - Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), - Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; + Form("PairsMuonSEPM_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEPP_%s", objArray->At(icut)->GetName()), + Form("PairsMuonSEMM_%s", objArray->At(icut)->GetName())}; if (fConfigQA) { // assign separate hist directories for ambiguous tracks names.push_back(Form("PairsMuonSEPM_ambiguousInBunch_%s", @@ -2635,7 +2605,7 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsMuonSEMM_ambiguousOutOfBunch_%s", objArray->At(icut)->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fMuonHistNames[icut] = names; @@ -2645,21 +2615,21 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) @@ -2669,12 +2639,12 @@ struct AnalysisSameEventPairing { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - sig->GetName()), + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + sig->GetName()), }; if (fConfigQA) { names.push_back(Form("PairsMuonSEPMCorrectAssoc_%s_%s", @@ -2687,26 +2657,26 @@ struct AnalysisSameEventPairing { objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousInBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousInBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back( - Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + Form("PairsMuonSEPM_ambiguousOutOfBunch_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsMuonSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); names.push_back(Form( - "PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", - objArray->At(icut)->GetName(), sig->GetName())); + "PairsMuonSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s", + objArray->At(icut)->GetName(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } fMuonHistNamesMCmatched.try_emplace( - icut * fRecMCSignals.size() + isig, names); + icut * fRecMCSignals.size() + isig, names); } // end loop over MC signals } } @@ -2728,9 +2698,9 @@ struct AnalysisSameEventPairing { tempBarrelCutsStr, false); TString barrelCutsJSONStr = tempBarrelCutsStr; if (barrelCutsJSONStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); - for (auto const& t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(barrelCutsJSONStr.Data()); + for (auto const &t : addCuts) { barrelCutsAll += Form(",%s", t->GetName()); } } @@ -2745,9 +2715,9 @@ struct AnalysisSameEventPairing { false); TString muonCutsJSONStr = tempMuonCutsStr; if (muonCutsJSONStr != "") { - std::vector addCuts = - dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); - for (auto const& t : addCuts) { + std::vector addCuts = + dqcuts::GetCutsFromJSON(muonCutsJSONStr.Data()); + for (auto const &t : addCuts) { muonCutsAll += Form(",%s", t->GetName()); } } @@ -2755,10 +2725,10 @@ struct AnalysisSameEventPairing { TString pairCutNamesStr = fConfigCuts.pair.value; std::unique_ptr objArrayPair( - pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.IsNull() ? nullptr : pairCutNamesStr.Tokenize(",")); int nPairCuts = (objArrayPair && objArrayPair->GetEntries() > 0) - ? objArrayPair->GetEntries() - : 1; + ? objArrayPair->GetEntries() + : 1; for (int iTrack = 0; iTrack < objArrayBarrel->GetEntries(); ++iTrack) { TString trackCutName = objArrayBarrel->At(iTrack)->GetName(); @@ -2776,12 +2746,12 @@ struct AnalysisSameEventPairing { // base (no pair-cut) entry std::vector names = { - Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), - muonCutName.Data()), - Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), - muonCutName.Data()), - Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), - muonCutName.Data())}; + Form("PairsEleMuSEPM_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEPP_%s_%s", trackCutName.Data(), + muonCutName.Data()), + Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), + muonCutName.Data())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); if (fEnableBarrelMuonMixingHistos) { @@ -2856,22 +2826,22 @@ struct AnalysisSameEventPairing { trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousInBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousInBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunch_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunchCorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); names.push_back(Form( - "PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", - trackCutName.Data(), muonCutName.Data(), sig->GetName())); + "PairsEleMuSEPM_ambiguousOutOfBunchIncorrectAssoc_%s_%s_%s", + trackCutName.Data(), muonCutName.Data(), sig->GetName())); } - for (auto const& n : names) { + for (auto const &n : names) { histNames += Form("%s;", n.Data()); } int index = iTrack * (fNCutsMuon * fEmuRecMCSignals.size()) + @@ -2888,8 +2858,8 @@ struct AnalysisSameEventPairing { if (!mcgenCutsStr.IsNull()) { std::unique_ptr objArray(mcgenCutsStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { - AnalysisCut* cut = - dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); + AnalysisCut *cut = + dqcuts::GetAnalysisCut(objArray->At(icut)->GetName()); if (cut != nullptr) { fMCGenAccCuts.push_back(cut); } @@ -2903,8 +2873,8 @@ struct AnalysisSameEventPairing { TString sigGenNamesStr = fConfigMC.genSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { fGenMCSignals.push_back(sig); } @@ -2913,9 +2883,9 @@ struct AnalysisSameEventPairing { // Add the MCSignals from the JSON config TString addMCSignalsGenStr = fConfigMC.genSignalsJSON.value; if (addMCSignalsGenStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsGenStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() > 2) { // NOTE: only 2 prong signals continue; } @@ -2926,22 +2896,22 @@ struct AnalysisSameEventPairing { // define final state MC signals TString sigFinalStateNamesStr = fConfigMC.finalStateSignals.value; std::unique_ptr objFinalStateSigArray( - sigFinalStateNamesStr.Tokenize(",")); + sigFinalStateNamesStr.Tokenize(",")); for (int isig = 0; isig < objFinalStateSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objFinalStateSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objFinalStateSigArray->At(isig)->GetName()); if (sig) { fFinalStateMCSignals.push_back(sig); } } if (isMCGen) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() == 1) { histNames += - Form("MCTruthGen_%s;", - sig->GetName()); // TODO: Add these names to a std::vector to - // avoid using Form in the process function + Form("MCTruthGen_%s;", + sig->GetName()); // TODO: Add these names to a std::vector to + // avoid using Form in the process function histNames += Form("MCTruthGenSel_%s;", sig->GetName()); } else if (sig->GetNProngs() == 2) { histNames += Form("MCTruthGenPair_%s;", sig->GetName()); @@ -2952,7 +2922,7 @@ struct AnalysisSameEventPairing { // for these pair level signals, also add histograms for each MCgenAcc // cut if specified if (fUseMCGenAccCut) { - for (auto const& cut : fMCGenAccCuts) { + for (auto const &cut : fMCGenAccCuts) { histNames += Form("MCTruthGenPairSel_%s_%s;", sig->GetName(), cut->GetName()); histNames += Form("MCTruthGenPseudoPolPairSel_%s_%s;", @@ -2973,7 +2943,7 @@ struct AnalysisSameEventPairing { VarManager::SetupFwdDCAFitterNoCorr(); } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigCCDB.lutPath)); + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } @@ -2983,26 +2953,25 @@ struct AnalysisSameEventPairing { dqefficiency_helpers::varUnits()); VarManager::SetCollisionSystem( - (TString)fConfigOptions.collisionSystem, - fConfigOptions.centerMassEnergy); // set collision system and center of - // mass energy + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center of + // mass energy DefineHistograms( - fHistMan, histNames.Data(), - fConfigAddSEPHistogram.value.data()); // define all histograms + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) - { + void initParamsFromCCDB(uint64_t timestamp, bool withTwoProngFitter = true) { auto grpmag = fCCDB->getForTimeStamp( - fConfigCCDB.grpMagPath, timestamp); + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -3015,19 +2984,19 @@ struct AnalysisSameEventPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // needed because take in varmanager Bz from - // fgFitterTwoProngBarrel for PhiV calculations + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } } @@ -3037,11 +3006,10 @@ struct AnalysisSameEventPairing { uint32_t TTrackFillMap, typename TEvents, typename TTrackAssocs, typename TTracks> void - runSameEventPairing(TEvents const& events, Preslice& preslice, - TTrackAssocs const& assocs, TTracks const& /*tracks*/, - ReducedMCEvents const& /*mcEvents*/, - ReducedMCTracks const& mcTracks) - { + runSameEventPairing(TEvents const &events, Preslice &preslice, + TTrackAssocs const &assocs, TTracks const & /*tracks*/, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; @@ -3072,11 +3040,11 @@ struct AnalysisSameEventPairing { // estimate reserved size int64_t reserveSize = 0; int64_t reserveSizeGen = mcTracks.size(); - for (auto const& event : events) { + for (auto const &event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const& t : groupedAssocs) { + for (auto const &t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -3110,15 +3078,15 @@ struct AnalysisSameEventPairing { } constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.has_reducedMCevent() || !event.isEventSelected_bit( - 0)) { // condition on reducedMCevent to avoid rec. events with no - // generated event + 0)) { // condition on reducedMCevent to avoid rec. events with no + // generated event continue; } uint8_t evSel = event.isEventSelected_raw(); @@ -3127,21 +3095,21 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); if (groupedAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : + for (auto const &[a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue @@ -3215,95 +3183,95 @@ struct AnalysisSameEventPairing { } if constexpr (trackHasCov && TTwoProngFitter) { dielectronsExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackCollInfo) > 0) { if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dielectronAllList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - t1.sign() + t2.sign(), twoTrackFilter, mcDecision, - t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), - t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), - t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), - t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), - t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), - t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), t2.eta(), - t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), - t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), - t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), - t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), - t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), - t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], - VarManager::fgValues[VarManager::kKFTrack1DCAxyz], - VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DCAxy], - VarManager::fgValues[VarManager::kKFTrack1DCAxy], - VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues - [VarManager::kKFTrack0DeviationFromPV], - VarManager::fgValues - [VarManager::kKFTrack1DeviationFromPV], - VarManager::fgValues - [VarManager::kKFTrack0DeviationxyFromPV], - VarManager::fgValues - [VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], - VarManager::fgValues[VarManager::kVertexingLxyz], - VarManager::fgValues[VarManager::kVertexingLxyzOverErr], - VarManager::fgValues[VarManager::kVertexingLxy], - VarManager::fgValues[VarManager::kVertexingLxyOverErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kKFCosPA], - VarManager::fgValues[VarManager::kKFJpsiDCAxyz], - VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], - VarManager::fgValues - [VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues - [VarManager::kVertexingTauxyProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + t1.sign() + t2.sign(), twoTrackFilter, mcDecision, + t1.pt(), t1.eta(), t1.phi(), t1.itsClusterMap(), + t1.itsChi2NCl(), t1.tpcNClsCrossedRows(), + t1.tpcNClsFound(), t1.tpcChi2NCl(), t1.dcaXY(), t1.dcaZ(), + t1.tpcSignal(), t1.tpcNSigmaEl(), t1.tpcNSigmaPi(), + t1.tpcNSigmaPr(), t1.beta(), t1.tofNSigmaEl(), + t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), t2.eta(), + t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), + t2.tpcChi2NCl(), t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), + t2.tpcNSigmaEl(), t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), + t2.beta(), t2.tofNSigmaEl(), t2.tofNSigmaPi(), + t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues + [VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues + [VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues + [VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues + [VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues + [VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } if (fConfigOptions.polarTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dileptonPolarList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - t1.sign() + t2.sign(), twoTrackFilter, - VarManager::fgValues[VarManager::kCosThetaHE], - VarManager::fgValues[VarManager::kPhiHE], - VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], - VarManager::fgValues[VarManager::kPhiCS], - VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], - VarManager::fgValues[VarManager::kPhiPP], - VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], - VarManager::fgValues[VarManager::kCosThetaStarFT0A], - VarManager::fgValues[VarManager::kCosThetaStarFT0C], - VarManager::fgValues[VarManager::kCosThetaStarRandom]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + t1.sign() + t2.sign(), twoTrackFilter, + VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); } } } } constexpr bool eventHasVtxCovForTable = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > 0); if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0 && trackHasCov && TTwoProngFitter && @@ -3313,52 +3281,52 @@ struct AnalysisSameEventPairing { // 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(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); const bool ambiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(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::kDCAxyOverSig1], - VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], - t1.itsChi2NCl(), t2.pt(), t2.eta(), - VarManager::fgValues[VarManager::kDCAxy2], - VarManager::fgValues[VarManager::kDCAz2], - VarManager::fgValues[VarManager::kDCAxyOverSig2], - VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], - t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, - isCorrectAssoc_leg1 && isCorrectAssoc_leg2, - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + 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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + VarManager::fgValues[VarManager::kITSclusterMap2], + t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, + isCorrectAssoc_leg1 && isCorrectAssoc_leg2, + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxNcontribReal]); } } } @@ -3449,47 +3417,47 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) { dimuonAllList( - event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, event.reducedMCevent().mcPosX(), - event.reducedMCevent().mcPosY(), - event.reducedMCevent().mcPosZ(), - VarManager::fgValues[VarManager::kMass], mcDecision, - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], - VarManager::fgValues[VarManager::kEta1], - VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], - VarManager::fgValues[VarManager::kEta2], - VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), - t1.mcMask(), t2.mcMask(), t1.chi2MatchMCHMID(), - t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), - t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), - t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), - 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(), - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - isCorrectAssoc_leg1, isCorrectAssoc_leg2, -999.0, -999.0, - -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, - -999.0, VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, event.reducedMCevent().mcPosX(), + event.reducedMCevent().mcPosY(), + event.reducedMCevent().mcPosZ(), + VarManager::fgValues[VarManager::kMass], mcDecision, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), + t1.mcMask(), t2.mcMask(), t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), + t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t1.reducedMCTrack().e(), + 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(), + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + isCorrectAssoc_leg1, isCorrectAssoc_leg2, -999.0, -999.0, + -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, + -999.0, VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } // Fill histograms @@ -3498,22 +3466,22 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass( - histNames[icut][0].Data(), - dqefficiency_helpers::varValues()); // reconstructed, - // unmatched + 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(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), - dqefficiency_helpers::varValues()); // matched signal + histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), + dqefficiency_helpers::varValues()); // matched signal if (useMiniTree.fConfigMiniTree) { if constexpr (TPairType == VarManager::kDecayToMuMu) { twoTrackFilter = a1.isMuonSelected_raw() & @@ -3528,41 +3496,41 @@ struct AnalysisSameEventPairing { auto t2 = a2.template reducedmuon_as(); float dileptonMass = - VarManager::fgValues[VarManager::kMass]; + VarManager::fgValues[VarManager::kMass]; if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) { // In the miniTree the positive daughter is positioned // as first if (t1.sign() > 0) { dileptonMiniTreeRec( - mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - VarManager::fgValues[VarManager::kCentFT0C], - t1.reducedMCTrack().pt(), - t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), - t2.reducedMCTrack().pt(), - t2.reducedMCTrack().eta(), - t2.reducedMCTrack().phi(), t1.pt(), t1.eta(), - t1.phi(), t2.pt(), t2.eta(), t2.phi()); + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), t1.pt(), t1.eta(), + t1.phi(), t2.pt(), t2.eta(), t2.phi()); } else { dileptonMiniTreeRec( - mcDecision, - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], - VarManager::fgValues[VarManager::kCentFT0C], - t2.reducedMCTrack().pt(), - t2.reducedMCTrack().eta(), - t2.reducedMCTrack().phi(), - t1.reducedMCTrack().pt(), - t1.reducedMCTrack().eta(), - t1.reducedMCTrack().phi(), t2.pt(), t2.eta(), - t2.phi(), t1.pt(), t1.eta(), t1.phi()); + mcDecision, + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], + VarManager::fgValues[VarManager::kCentFT0C], + t2.reducedMCTrack().pt(), + t2.reducedMCTrack().eta(), + t2.reducedMCTrack().phi(), + t1.reducedMCTrack().pt(), + t1.reducedMCTrack().eta(), + t1.reducedMCTrack().phi(), t2.pt(), t2.eta(), + t2.phi(), t1.pt(), t1.eta(), t1.phi()); } } } @@ -3572,47 +3540,47 @@ struct AnalysisSameEventPairing { isCorrectAssoc_leg2) { // correct track-collision // association fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][3] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][3] + .Data(), + dqefficiency_helpers::varValues()); } else { // incorrect track-collision association fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][4] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][4] + .Data(), + dqefficiency_helpers::varValues()); } if (isAmbiInBunch) { // ambiguous in bunch fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][5] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][5] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][6] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][6] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][7] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][7] + .Data(), + dqefficiency_helpers::varValues()); } } if (isAmbiOutOfBunch) { // ambiguous out of bunch fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][8] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][8] + .Data(), + dqefficiency_helpers::varValues()); if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][9] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][9] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][10] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][10] + .Data(), + dqefficiency_helpers::varValues()); } } } @@ -3636,9 +3604,9 @@ struct AnalysisSameEventPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][1] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][1] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { @@ -3658,9 +3626,9 @@ struct AnalysisSameEventPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - histNamesMC[icut * fRecMCSignals.size() + isig][2] - .Data(), - dqefficiency_helpers::varValues()); + histNamesMC[icut * fRecMCSignals.size() + isig][2] + .Data(), + dqefficiency_helpers::varValues()); } } if (fConfigQA) { @@ -3679,25 +3647,25 @@ struct AnalysisSameEventPairing { iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); if (!(cut.IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][0] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][0] + .Data(), + dqefficiency_helpers::varValues()); } else { if (sign1 > 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][1] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][1] + .Data(), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - histNames[ncuts + icut * fPairCuts.size() + iPairCut][2] - .Data(), - dqefficiency_helpers::varValues()); + histNames[ncuts + icut * fPairCuts.size() + iPairCut][2] + .Data(), + dqefficiency_helpers::varValues()); } } } // end loop (pair cuts) @@ -3708,20 +3676,19 @@ struct AnalysisSameEventPairing { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; template - void runMCGen(TEvents const& events, ReducedMCEvents const& mcEvents, - ReducedMCTracks const& mcTracks) - { + void runMCGen(TEvents const &events, ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { uint32_t mcDecision = 0; int isig = 0; // Loop over all MC single particles to fill generator level histograms, // disregarding of whether they belong to selected reconstructed events or // not - for (auto const& mctrack : mcTracks) { - for (auto const& sig : fGenMCSignals) { + for (auto const &mctrack : mcTracks) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { VarManager::FillTrackMC(mcTracks, mctrack); fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), @@ -3738,7 +3705,7 @@ struct AnalysisSameEventPairing { // Now loop over reconstructed events to select only MC particles belonging // to the same MC collision as the reconstructed event - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -3749,14 +3716,14 @@ struct AnalysisSameEventPairing { FinalStateMcParticleIndices.clear(); auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { if (track.reducedMCeventId() != event.reducedMCeventId()) { // check that the mc track belongs @@ -3769,20 +3736,20 @@ struct AnalysisSameEventPairing { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -3790,7 +3757,7 @@ struct AnalysisSameEventPairing { } isig++; } - for (auto const& sig : fFinalStateMCSignals) { + for (auto const &sig : fFinalStateMCSignals) { if (sig->CheckSignal(true, track_raw)) { FinalStateMcParticleIndices.push_back(track.globalIndex()); break; // if one of the final state signals is matched, no need to @@ -3804,9 +3771,9 @@ struct AnalysisSameEventPairing { if (fHasTwoProngGenMCsignals) { // loop over combinations of the selected mc particles to fill generator // level pair histograms - for (auto const& t1 : FinalStateMcParticleIndices) { + for (auto const &t1 : FinalStateMcParticleIndices) { auto t1_raw = mcTracks.rawIteratorAt(t1); - for (auto const& t2 : FinalStateMcParticleIndices) { + for (auto const &t2 : FinalStateMcParticleIndices) { if (t2 <= t1) { continue; // avoid double counting and self-pairing } @@ -3818,7 +3785,7 @@ struct AnalysisSameEventPairing { mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -3832,38 +3799,38 @@ struct AnalysisSameEventPairing { // length related variables if (t1_raw.has_mothers() && t2_raw.has_mothers()) { auto motherMCParticle_t1 = - t1_raw.template mothers_first_as(); + t1_raw.template mothers_first_as(); auto motherMCParticle_t2 = - t2_raw.template mothers_first_as(); + t2_raw.template mothers_first_as(); if (motherMCParticle_t1 == motherMCParticle_t2) { auto mcEvent = mcEvents.rawIteratorAt( - motherMCParticle_t1.reducedMCeventId()); + motherMCParticle_t1.reducedMCeventId()); std::array collVtxPos = { - mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; + mcEvent.mcPosX(), mcEvent.mcPosY(), mcEvent.mcPosZ()}; VarManager::FillTrackCollisionMC( - motherMCParticle_t1, collVtxPos, - pdgDB->Mass(motherMCParticle_t1.pdgCode())); + motherMCParticle_t1, collVtxPos, + pdgDB->Mass(motherMCParticle_t1.pdgCode())); } } // cout << " Filled VarManager for the pair." << endl; fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); fHistMan->FillHistClass( - Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPseudoPolPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // Fill also acceptance cut histograms if requested if (fUseMCGenAccCut) { - for (auto const& cut : fMCGenAccCuts) { + for (auto const &cut : fMCGenAccCuts) { if (cut->IsSelected(dqefficiency_helpers::varValues())) { fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s_%s", sig->GetName(), - cut->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s_%s", sig->GetName(), + cut->GetName()), + dqefficiency_helpers::varValues()); fHistMan->FillHistClass( - Form("MCTruthGenPseudoPolPairSel_%s_%s", - sig->GetName(), cut->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPseudoPolPairSel_%s_%s", + sig->GetName(), cut->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -3894,12 +3861,11 @@ struct AnalysisSameEventPairing { uint32_t TMuonFillMap, typename TEvents, typename TTrackAssocs, typename TTracks, typename TMuonAssocs, typename TMuons> void runEmuSameEventPairing( - TEvents const& events, Preslice& preslice1, - TTrackAssocs const& assocs1, TTracks const& /*tracks1*/, - Preslice& preslice2, TMuonAssocs const& assocs2, - TMuons const& /*tracks2*/, ReducedMCEvents const& /*mcEvents*/, - ReducedMCTracks const& /*mcTracks*/) - { + TEvents const &events, Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const & /*tracks1*/, + Preslice &preslice2, TMuonAssocs const &assocs2, + TMuons const & /*tracks2*/, ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/) { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), true); @@ -3907,8 +3873,8 @@ struct AnalysisSameEventPairing { } } - const auto& histNames = fTrackMuonHistNames; - const auto& histNamesMC = fTrackMuonHistNamesMCmatched; + const auto &histNames = fTrackMuonHistNames; + const auto &histNamesMC = fTrackMuonHistNamesMCmatched; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; uint32_t twoTrackFilter = 0; @@ -3919,11 +3885,11 @@ struct AnalysisSameEventPairing { int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.has_reducedMCevent() || !event.isEventSelected_bit(0)) { continue; } @@ -3932,7 +3898,7 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); auto groupedAssocs1 = assocs1.sliceBy(preslice1, event.globalIndex()); if (groupedAssocs1.size() == 0) { @@ -3943,9 +3909,9 @@ struct AnalysisSameEventPairing { continue; } - for (auto const& [a1, a2] : + for (auto const &[a1, a2] : o2::soa::combinations(soa::CombinationsFullIndexPolicy( - groupedAssocs1, groupedAssocs2))) { + groupedAssocs1, groupedAssocs2))) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; @@ -3999,9 +3965,9 @@ struct AnalysisSameEventPairing { } } isCorrectAssoc_leg1 = - (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); isCorrectAssoc_leg2 = - (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); + (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent()); } VarManager::FillPair(t1, t2); @@ -4017,11 +3983,11 @@ struct AnalysisSameEventPairing { } bool isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); bool isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); bool isCorrectPair = isCorrectAssoc_leg1 && isCorrectAssoc_leg2; // fill reco histograms per (track cut, muon cut[, pair cut]) and the @@ -4098,7 +4064,7 @@ struct AnalysisSameEventPairing { if (itHistMC == histNamesMC.end()) { continue; } - const auto& mcNames = itHistMC->second; + const auto &mcNames = itHistMC->second; if (sign1 * sign2 < 0) { fHistMan->FillHistClass(mcNames[0].Data(), dqefficiency_helpers::varValues()); @@ -4154,26 +4120,25 @@ struct AnalysisSameEventPairing { template - void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, - TTracks1 const& /*tracks1*/, - TTracks2 const& /*tracks2*/) - { - const auto& histNames = fTrackMuonHistNames; + void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { + const auto &histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; int sign1 = 0; int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& a1 : assocs1) { + for (auto const &a1 : assocs1) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; } - for (auto const& a2 : assocs2) { + for (auto const &a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -4252,15 +4217,14 @@ struct AnalysisSameEventPairing { template - void runEmuSameSideMixing(TEvents& events, Preslice& preslice1, - TTrackAssocs const& assocs1, TTracks const& tracks1, - Preslice& preslice2, - TMuonAssocs const& assocs2, TMuons const& tracks2) - { + void runEmuSameSideMixing(TEvents &events, Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const &tracks1, + Preslice &preslice2, + TMuonAssocs const &assocs2, TMuons const &tracks2) { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const& [event1, event2] : + for (auto const &[event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4277,35 +4241,33 @@ struct AnalysisSameEventPairing { continue; } runEmuMixedPairing( - groupedAssocs1, groupedAssocs2, tracks1, tracks2); + groupedAssocs1, groupedAssocs2, tracks1, tracks2); } } void processAllSkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks); runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } void processBarrelOnlySkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -4314,28 +4276,26 @@ struct AnalysisSameEventPairing { } void processBarrelOnlyWithCollSkimmed( - MyEventsVtxCovSelectedInfo const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelectedInfo const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); runMCGen(events, mcEvents, mcTracks); } void processMuonOnlySkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); // Feature replaced by processMCGen /* if (fConfigMC.runMCGenPair) { runMCGen(mcEvents, mcTracks); @@ -4343,28 +4303,26 @@ struct AnalysisSameEventPairing { } void processMuonOnlyVertexingSkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } PresliceUnsorted perReducedMcGenEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; - void processMCGen(soa::Filtered const& events, - ReducedMCEvents const& mcEvents, - ReducedMCTracks const& mcTracks) - { + void processMCGen(soa::Filtered const &events, + ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { // Fill Generated histograms taking into account all generated tracks uint32_t mcDecision = 0; int isig = 0; - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so // depending on the requested signal, the stack could be incomplete. NOTE: @@ -4372,7 +4330,7 @@ struct AnalysisSameEventPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -4381,7 +4339,7 @@ struct AnalysisSameEventPairing { } // Fill Generated histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4391,12 +4349,12 @@ struct AnalysisSameEventPairing { VarManager::FillEvent(event, dqefficiency_helpers::varValues()); VarManager::FillEvent( - event.reducedMCevent(), dqefficiency_helpers::varValues()); + event.reducedMCevent(), dqefficiency_helpers::varValues()); // auto groupedMCTracks = mcTracks.sliceBy(perReducedMcGenEvent, // event.reducedMCeventId()); // groupedMCTracks.bindInternalIndicesTo(&mcTracks); // for (auto const& track : groupedMCTracks) { - for (auto const& track : mcTracks) { + for (auto const &track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4405,26 +4363,26 @@ struct AnalysisSameEventPairing { // auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -4435,17 +4393,17 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); } @@ -4454,7 +4412,7 @@ struct AnalysisSameEventPairing { } } // Fill Generated PAIR histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4463,7 +4421,7 @@ struct AnalysisSameEventPairing { } if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { if (t1.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4475,7 +4433,7 @@ struct AnalysisSameEventPairing { if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -4483,10 +4441,10 @@ struct AnalysisSameEventPairing { if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), @@ -4502,14 +4460,13 @@ struct AnalysisSameEventPairing { } void - processMCGenWithGrouping(soa::Filtered const& events, - ReducedMCEvents const& mcEvents, - ReducedMCTracks const& mcTracks) - { + processMCGenWithGrouping(soa::Filtered const &events, + ReducedMCEvents const &mcEvents, + ReducedMCTracks const &mcTracks) { uint32_t mcDecision = 0; int isig = 0; - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so // depending on the requested signal, the stack could be incomplete. NOTE: @@ -4517,7 +4474,7 @@ struct AnalysisSameEventPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -4525,7 +4482,7 @@ struct AnalysisSameEventPairing { } } // Fill Generated histograms taking into account selected collisions - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4533,7 +4490,7 @@ struct AnalysisSameEventPairing { continue; } - for (auto const& track : mcTracks) { + for (auto const &track : mcTracks) { if (track.reducedMCeventId() != event.reducedMCeventId()) { continue; } @@ -4541,26 +4498,26 @@ struct AnalysisSameEventPairing { auto track_raw = mcTracks.rawIteratorAt(track.globalIndex()); mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { mcDecision |= (static_cast(1) << isig); fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); MCTruthTableEffi( - VarManager::fgValues[VarManager::kMCPt], - VarManager::fgValues[VarManager::kMCEta], - VarManager::fgValues[VarManager::kMCY], - VarManager::fgValues[VarManager::kMCPhi], - VarManager::fgValues[VarManager::kMCVz], - VarManager::fgValues[VarManager::kMCVtxZ], - VarManager::fgValues[VarManager::kMultFT0A], - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + VarManager::fgValues[VarManager::kMCPt], + VarManager::fgValues[VarManager::kMCEta], + VarManager::fgValues[VarManager::kMCY], + VarManager::fgValues[VarManager::kMCPhi], + VarManager::fgValues[VarManager::kMCVz], + VarManager::fgValues[VarManager::kMCVtxZ], + VarManager::fgValues[VarManager::kMultFT0A], + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kVtxNcontribReal]); if (useMiniTree.fConfigMiniTree) { auto mcEvent = - mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); + mcEvents.rawIteratorAt(track_raw.reducedMCeventId()); dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), track_raw.pt(), track_raw.eta(), track_raw.phi(), -999, -999, -999); @@ -4571,17 +4528,17 @@ struct AnalysisSameEventPairing { } } // end loop over reconstructed events if (fHasTwoProngGenMCsignals) { - for (auto const& [t1, t2] : combinations(mcTracks, mcTracks)) { + for (auto const &[t1, t2] : combinations(mcTracks, mcTracks)) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; } if (sig->CheckSignal(true, t1_raw, t2_raw)) { VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), dqefficiency_helpers::varValues()); } @@ -4589,7 +4546,7 @@ struct AnalysisSameEventPairing { } } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4599,16 +4556,16 @@ struct AnalysisSameEventPairing { // CURRENTLY ONLY FOR 1-GENERATION 2-PRONG SIGNALS if (fHasTwoProngGenMCsignals) { auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& [t1, t2] : + for (auto const &[t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) { auto t1_raw = groupedMCTracks.rawIteratorAt(t1.globalIndex()); auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) { mcDecision = 0; isig = 0; - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here continue; @@ -4616,10 +4573,10 @@ struct AnalysisSameEventPairing { if (sig->CheckSignal(true, t1_raw, t2_raw)) { mcDecision |= (static_cast(1) << isig); VarManager::FillPairMC( - t1, t2); // NOTE: This feature will only work for muons + t1, t2); // NOTE: This feature will only work for muons fHistMan->FillHistClass( - Form("MCTruthGenPairSel_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenPairSel_%s", sig->GetName()), + dqefficiency_helpers::varValues()); if (useMiniTree.fConfigMiniTree) { // WARNING! To be checked dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), @@ -4635,35 +4592,32 @@ struct AnalysisSameEventPairing { } void processElectronMuonSkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runEmuSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks); } void processMixingElectronMuonSkimmed( - soa::Filtered& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + soa::Filtered &events, + soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + soa::Join const &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runEmuSameSideMixing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -4678,24 +4632,24 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, - "Run muon only pairing with two-prong vertexing, with skimmed tracks", - false); + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingElectronMuonSkimmed, "Run electron-muon mixing pairing, with skimmed tracks/muons", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisSameEventPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMCGenWithGrouping, "Loop over MC particle stack (grouped MCTracks) and fill " "generator level histograms", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Run pairing for resonance with legs fulfilling separate cuts (asymmetric @@ -4705,7 +4659,7 @@ struct AnalysisAsymmetricPairing { Produces ditrackList; Produces ditrackExtraList; - o2::base::MatLayerCylSet* fLUT = nullptr; + o2::base::MatLayerCylSet *fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -4714,85 +4668,85 @@ struct AnalysisAsymmetricPairing { // Configurables Configurable fConfigLegCuts{ - "cfgLegCuts", "", - ":[:],[:[:],...]"}; + "cfgLegCuts", "", + ":[:],[:[:],...]"}; Configurable fConfigLegAFilterMask{ - "cfgLegAFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegAFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigLegBFilterMask{ - "cfgLegBFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegBFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigLegCFilterMask{ - "cfgLegCFilterMask", 0, - "Filter mask corresponding to cuts in event-selection"}; + "cfgLegCFilterMask", 0, + "Filter mask corresponding to cuts in event-selection"}; Configurable fConfigCommonTrackCuts{ - "cfgCommonTrackCuts", "", - "Comma separated list of cuts to be applied to all legs"}; + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; Configurable fConfigPairCuts{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; Configurable fConfigPairCutsJSON{ - "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; Configurable fConfigSkipAmbiguousIdCombinations{ - "cfgSkipAmbiguousIdCombinations", true, - "Choose whether to skip pairs/triples which pass a stricter combination " - "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; Configurable fConfigHistogramSubgroups{ - "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", - "Comma separated list of asymmetric-pairing histogram subgroups"}; + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; Configurable fConfigSameSignHistograms{ - "cfgSameSignHistograms", false, - "Include same sign pair histograms for 2-prong decays"}; + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; // Configurable fConfigAmbiguousHistograms{"cfgAmbiguousHistograms", // false, "Include separate histograms for pairs/triplets with ambiguous // tracks"}; Configurable fConfigReflectedHistograms{ - "cfgReflectedHistograms", false, - "Include separate histograms for pairs which are reflections of " - "previously counted pairs"}; + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable fConfigGRPMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; Configurable fConfigUseAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; Configurable fConfigLutPath{"lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; Configurable fConfigMCGenSignals{ - "cfgBarrelMCGenSignals", "", - "Comma separated list of MC signals (generated)"}; + "cfgBarrelMCGenSignals", "", + "Comma separated list of MC signals (generated)"}; Configurable fConfigMCRecSignals{ - "cfgBarrelMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgBarrelMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable fConfigMCRecSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; Configurable fConfigMCGenSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Comma separated list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; Service fCCDB{}; - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; // Filter masks to find legs in BarrelTrackCuts table uint32_t fLegAFilterMask = 0; @@ -4821,24 +4775,23 @@ struct AnalysisAsymmetricPairing { static_cast(0); Preslice> - trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; + trackAssocsPerCollision = aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs Partition> - legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegAFilterMask) > static_cast(0); + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); Partition> - legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegBFilterMask) > static_cast(0); + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); Partition> - legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegCFilterMask) > static_cast(0); + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isMCGen = context.mOptions.get("processMCGen") || context.mOptions.get("processMCGenWithEventSelection"); if (context.mOptions.get("processDummy")) { @@ -4862,16 +4815,16 @@ struct AnalysisAsymmetricPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = - dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -4885,8 +4838,8 @@ struct AnalysisAsymmetricPairing { TString sigNamesStr = fConfigMCRecSignals.value; std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { fRecMCSignals.push_back(sig); } @@ -4894,9 +4847,9 @@ struct AnalysisAsymmetricPairing { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 2 && mcIt->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " @@ -4923,9 +4876,9 @@ struct AnalysisAsymmetricPairing { "cfgBarrelTrackCutsJSON", tempCuts, false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -4942,8 +4895,8 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); fCommonTrackCutFilterMasks[icut] = - static_cast(1) - << objArray->IndexOf(objArrayCommon->At(icut)); + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { LOGF(fatal, @@ -5051,8 +5004,8 @@ struct AnalysisAsymmetricPairing { fConfigHistogramSubgroups.value.data()); if (fConfigQA) { DefineHistograms( - fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); @@ -5066,7 +5019,7 @@ struct AnalysisAsymmetricPairing { TString pairCutNamesStr = fConfigPairCuts.value; if (!pairCutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - pairCutNamesStr.Tokenize(",")); + pairCutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts @@ -5091,9 +5044,9 @@ struct AnalysisAsymmetricPairing { for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { auto sig = fRecMCSignals.at(isig); DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s", legsStr.Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5106,23 +5059,23 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), - objArrayPair->At(iPairCut)->GetName(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s", legsStr.Data(), + objArrayPair->At(iPairCut)->GetName(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms( - fHistMan, - Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), - objArrayCommon->At(iCommonCut)->GetName(), - objArrayPair->At(iPairCut)->GetName(), - sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("TripletsBarrelSE_%s_%s_%s_%s", legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } // end loop (common cuts) } // end loop (pair cuts) } // end if (pair cuts) @@ -5138,9 +5091,9 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigQA) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5179,10 +5132,10 @@ struct AnalysisAsymmetricPairing { ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5236,7 +5189,7 @@ struct AnalysisAsymmetricPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5253,13 +5206,13 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), - objArrayCommon->At(iCommonCut)->GetName(), - objArrayPair->At(iPairCut)->GetName(), - sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), + objArrayCommon->At(iCommonCut)->GetName(), + objArrayPair->At(iPairCut)->GetName(), + sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } // end loop (common cuts) } // end loop (pair cuts) @@ -5275,21 +5228,21 @@ struct AnalysisAsymmetricPairing { TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); DefineHistograms( - fHistMan, Form("MCTruthGen_%s;", sig->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGen_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function DefineHistograms( - fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGenSel_%s;", sig->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } @@ -5297,21 +5250,21 @@ struct AnalysisAsymmetricPairing { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); DefineHistograms( - fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGen_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function DefineHistograms( - fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), - fConfigHistogramSubgroups.value - .data()); // TODO: Add these names to a std::vector to avoid - // using Form in the process function + fHistMan, Form("MCTruthGenSel_%s;", mcIt->GetName()), + fConfigHistogramSubgroups.value + .data()); // TODO: Add these names to a std::vector to avoid + // using Form in the process function } } } @@ -5337,11 +5290,10 @@ struct AnalysisAsymmetricPairing { } // Make sure only pairs or only triplets of leg cuts were given int tripletCheckSum = - std::count(isThreeProng.begin(), isThreeProng.end(), true); + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, - "A mix of pairs and triplets was given as leg cuts. Check " - "your config!"); + LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -5351,22 +5303,21 @@ struct AnalysisAsymmetricPairing { fCCDB->setLocalObjectValidityChecking(); fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigLutPath)); + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) - { + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPMagPath, timestamp); + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -5387,9 +5338,9 @@ struct AnalysisAsymmetricPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigUseAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } @@ -5399,13 +5350,12 @@ struct AnalysisAsymmetricPairing { template - void runAsymmetricPairing(TEvents const& events, - Preslice& preslice, - TTrackAssocs const& /*assocs*/, - TTracks const& /*tracks*/, - ReducedMCEvents const& /*mcEvents*/, - ReducedMCTracks const& /*mcTracks*/) - { + void runAsymmetricPairing(TEvents const &events, + Preslice &preslice, + TTrackAssocs const & /*assocs*/, + TTracks const & /*tracks*/, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/) { fPairCount.clear(); if (events.size() > 0) { // Additional protection to avoid crashing of @@ -5423,10 +5373,10 @@ struct AnalysisAsymmetricPairing { ditrackExtraList.reserve(1); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5436,18 +5386,18 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : combinations(soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs))) { + for (auto const &[a1, a2] : combinations(soa::CombinationsFullIndexPolicy( + groupedLegAAssocs, groupedLegBAssocs))) { uint32_t twoTrackFilter = 0; uint32_t twoTrackCommonFilter = 0; @@ -5542,9 +5492,9 @@ struct AnalysisAsymmetricPairing { (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); // reconstructed, - // unmatched + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5558,8 +5508,8 @@ struct AnalysisAsymmetricPairing { } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { // ++ pairs fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5572,8 +5522,8 @@ struct AnalysisAsymmetricPairing { } } else { // -- pairs fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); if (isAmbi && fConfigQA) { fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5596,35 +5546,35 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); if (isReflected && fConfigReflectedHistograms.value) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_reflected_%s_%s", - fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); - if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_reflected_%s_%s", - fLegCutNames[icut].Data(), + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + if (isReflected && fConfigReflectedHistograms.value) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); - if (isReflected && fConfigReflectedHistograms.value) { - fHistMan->FillHistClass( - Form("PairsBarrelSEMM_reflected_%s_%s", - fLegCutNames[icut].Data(), + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + if (isReflected && fConfigReflectedHistograms.value) { + fHistMan->FillHistClass( + Form("PairsBarrelSEMM_reflected_%s_%s", + fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5636,20 +5586,20 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqefficiency_helpers::varValues()); } } for (unsigned int isig = 0; isig < fRecMCSignals.size(); @@ -5657,26 +5607,26 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5687,7 +5637,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); @@ -5715,26 +5665,26 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5746,26 +5696,26 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqefficiency_helpers::varValues()); } } for (unsigned int isig = 0; isig < fRecMCSignals.size(); @@ -5773,29 +5723,29 @@ struct AnalysisAsymmetricPairing { if (mcDecision & (static_cast(1) << isig)) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data(), fRecMCSignalNames[isig].Data()), dqefficiency_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); } } } @@ -5806,17 +5756,17 @@ struct AnalysisAsymmetricPairing { } } // end loop (cuts) ditrackList( - event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, pairFilter, twoTrackCommonFilter); + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { ditrackExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop @@ -5826,12 +5776,11 @@ struct AnalysisAsymmetricPairing { template - void runThreeProng(TEvents const& events, Preslice& preslice, - TTrackAssocs const& /*assocs*/, TTracks const& tracks, - ReducedMCEvents const& /*mcEvents*/, - ReducedMCTracks const& /*mcTracks*/, - VarManager::PairCandidateType tripletType) - { + void runThreeProng(TEvents const &events, Preslice &preslice, + TTrackAssocs const & /*assocs*/, TTracks const &tracks, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const & /*mcTracks*/, + VarManager::PairCandidateType tripletType) { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -5840,7 +5789,7 @@ struct AnalysisAsymmetricPairing { } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5850,35 +5799,35 @@ struct AnalysisAsymmetricPairing { dqefficiency_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } auto groupedLegCAssocs = - legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const& [a1, a2, a3] : + for (auto const &[a1, a2, a3] : combinations(soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const& a1 : groupedLegAAssocs) { - for (auto const& [a2, a3] : + for (auto const &a1 : groupedLegAAssocs) { + for (auto const &[a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } } else { @@ -5892,11 +5841,10 @@ struct AnalysisAsymmetricPairing { template - void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, - TTrackAssoc const& a3, TTracks const& /*tracks*/, - TEvent const& event, - VarManager::PairCandidateType tripletType) - { + void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, + TTrackAssoc const &a3, TTracks const & /*tracks*/, + TEvent const &event, + VarManager::PairCandidateType tripletType) { uint32_t mcDecision = 0; uint32_t threeTrackFilter = 0; @@ -5993,7 +5941,7 @@ struct AnalysisAsymmetricPairing { tripletType); if constexpr (TThreeProngFitter) { VarManager::FillTripletVertexing( - event, t1, t2, t3, tripletType); + event, t1, t2, t3, tripletType); } // Fill histograms @@ -6004,21 +5952,21 @@ struct AnalysisAsymmetricPairing { (threeTrackFilter & (static_cast(1) << 31)); if (threeTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); for (unsigned int isig = 0; isig < fRecMCSignals.size(); isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s", fLegCutNames[icut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) if (fConfigQA && isAmbi) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), - dqefficiency_helpers::varValues()); + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqefficiency_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { @@ -6030,10 +5978,10 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } @@ -6042,7 +5990,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqefficiency_helpers::varValues()))) { // apply pair cuts + dqefficiency_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts @@ -6054,10 +6002,10 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) // Histograms with pair cuts and common track cuts @@ -6074,12 +6022,12 @@ struct AnalysisAsymmetricPairing { isig++) { // loop over MC signals if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fRecMCSignalNames[isig].Data()), - dqefficiency_helpers::varValues()); // matched signal + Form("TripletsBarrelSE_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fRecMCSignalNames[isig].Data()), + dqefficiency_helpers::varValues()); // matched signal } } // end loop (MC signals) } @@ -6090,11 +6038,11 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runAsymmetricPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -6102,36 +6050,35 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmedMultExtra( - MyEventsVtxCovSelectedMultExtra const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelectedMultExtra const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runAsymmetricPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks); } void processKaonPionPionSkimmed( - MyEventsVtxCovSelected const& events, - soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + MyEventsVtxCovSelected const &events, + soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, - mcTracks, VarManager::kTripleCandidateToKPiPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, + mcTracks, VarManager::kTripleCandidateToKPiPi); } - void processMCGen(ReducedMCTracks const& mcTracks) - { + void processMCGen(ReducedMCTracks const &mcTracks) { // loop over mc stack and fill histograms for pure MC truth signals // group all the MC tracks which belong to the MC event corresponding to the // current reconstructed event auto groupedMCTracks = // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, // event.reducedMCevent().globalIndex()); - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { VarManager::FillTrackMC(mcTracks, mctrack); // NOTE: Signals are checked here mostly based on the skimmed MC stack, so @@ -6140,7 +6087,7 @@ struct AnalysisAsymmetricPairing { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -6150,13 +6097,12 @@ struct AnalysisAsymmetricPairing { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; void processMCGenWithEventSelection( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { - for (auto const& event : events) { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -6165,14 +6111,14 @@ struct AnalysisAsymmetricPairing { } auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -6182,8 +6128,7 @@ struct AnalysisAsymmetricPairing { } // end loop over reconstructed events } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -6194,14 +6139,14 @@ struct AnalysisAsymmetricPairing { PROCESS_SWITCH(AnalysisAsymmetricPairing, processKaonPionPionSkimmed, "Run kaon pion pion triplets, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisAsymmetricPairing, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processMCGenWithEventSelection, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisAsymmetricPairing, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Combines dileptons with barrel or muon tracks for either resonance or @@ -6215,92 +6160,92 @@ struct AnalysisDileptonTrack { OutputObj fOutputList{"output"}; Configurable fConfigTrackCuts{ - "cfgTrackCuts", "kaonPID", - "Comma separated list of track cuts to be correlated with the dileptons"}; + "cfgTrackCuts", "kaonPID", + "Comma separated list of track cuts to be correlated with the dileptons"}; Configurable fConfigDileptonLowMass{ - "cfgDileptonLowMass", 2.8, - "Low mass cut for the dileptons used in analysis"}; + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; Configurable fConfigDileptonHighMass{ - "cfgDileptonHighMass", 3.2, - "High mass cut for the dileptons used in analysis"}; + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; Configurable fConfigDileptonpTCut{ - "cfgDileptonpTCut", 0.0, - "pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonpTCut", 0.0, + "pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonLxyCut{ - "cfgDileptonLxyCut", 0.0, - "Lxy cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; Configurable fConfigDileptonLowpTCut{ - "cfgDileptonLowpTCut", 0.0, - "Low pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonHighpTCut{ - "cfgDileptonHighpTCut", 1E5, - "High pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; Configurable fConfigDileptonRapCutAbs{ - "cfgDileptonRapCutAbs", 1.0, - "Rap cut for dileptons used in the triplet vertexing"}; + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; Configurable fConfigHistogramSubgroups{ - "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", - "Comma separated list of dilepton-track histogram subgroups"}; + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; Configurable grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"}; Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; Configurable fConfigGeoPath{ - "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; Configurable fConfigMCRecSignals{ - "cfgMCRecSignals", "", - "Comma separated list of MC signals (reconstructed)"}; + "cfgMCRecSignals", "", + "Comma separated list of MC signals (reconstructed)"}; Configurable fConfigMCGenSignals{ - "cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; + "cfgMCGenSignals", "", "Comma separated list of MC signals (generated)"}; Configurable fConfigMCRecSignalsJSON{ - "cfgMCRecSignalsJSON", "", - "Additional list of MC signals (reconstructed) via JSON"}; + "cfgMCRecSignalsJSON", "", + "Additional list of MC signals (reconstructed) via JSON"}; Configurable fConfigMCGenSignalsJSON{ - "cfgMCGenSignalsJSON", "", - "Comma separated list of MC signals (generated) via JSON"}; + "cfgMCGenSignalsJSON", "", + "Comma separated list of MC signals (generated) via JSON"}; Configurable fConfigMCGenSignalDileptonLegPos{ - "cfgMCGenSignalDileptonLegPos", 0, - "generator level positive dilepton leg signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalDileptonLegPos", 0, + "generator level positive dilepton leg signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenSignalDileptonLegNeg{ - "cfgMCGenSignalDileptonLegNeg", 0, - "generator level negative dilepton leg signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalDileptonLegNeg", 0, + "generator level negative dilepton leg signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenSignalHadron{ - "cfgMCGenSignalHadron", 0, - "generator level associated hadron signal (bit number according to " - "table-maker)"}; + "cfgMCGenSignalHadron", 0, + "generator level associated hadron signal (bit number according to " + "table-maker)"}; Configurable fConfigMCGenDileptonLegPtMin{ - "cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; + "cfgMCGenDileptonLegPtMin", 1.0f, "minimum pt for the dilepton leg"}; Configurable fConfigMCGenHadronPtMin{"cfgMCGenHadronPtMin", 1.0f, "minimum pt for the hadron"}; Configurable fConfigMCGenDileptonLegEtaAbs{ - "cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; + "cfgMCGenDileptonLegEtaAbs", 0.9f, "eta abs range for the dilepton leg"}; Configurable fConfigMCGenHadronEtaAbs{"cfgMCGenHadronEtaAbs", 0.9f, "eta abs range for the hadron"}; Configurable fConfigUseMCRapcut{ - "cfgUseMCRapcut", false, - "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing(reconstructed)"}; Configurable fConfigUseCorrectlyAssociatedMC{ - "cfgUseCorrectlyAssociatedMC", true, - "Use only correctly associated track to construct triplet"}; + "cfgUseCorrectlyAssociatedMC", true, + "Use only correctly associated track to construct triplet"}; Configurable fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"}; @@ -6329,33 +6274,34 @@ struct AnalysisDileptonTrack { Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast(0); Filter dileptonFilter = - aod::reducedpair::pt > - fConfigDileptonLowpTCut&& aod::reducedpair::pt fConfigDileptonLowMass&& aod::reducedpair::mass - fConfigDileptonLxyCut; + aod::reducedpair::pt > + fConfigDileptonLowpTCut + &&aod::reducedpair::pt fConfigDileptonLowMass + &&aod::reducedpair::mass + fConfigDileptonLxyCut; Filter filterBarrel = aod::dqanalysisflags::isBarrelSelected > static_cast(0); Filter filterMuon = aod::dqanalysisflags::isMuonSelected > static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton = nullptr; - float* fValuesHadron = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesDilepton = nullptr; + float *fValuesHadron = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fRecMCSignals; - std::vector fGenMCSignals; + std::vector fRecMCSignals; + std::vector fGenMCSignals; NoBinningPolicy fHashBin; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); bool isMuon = context.mOptions.get("processMuonSkimmed"); @@ -6363,11 +6309,11 @@ struct AnalysisDileptonTrack { context.mOptions.get("processMCGenWithEventSelection"); bool isDummy = context.mOptions.get("processDummy"); bool isMCGen_energycorrelators = - context.mOptions.get("processMCGenEnergyCorrelators") || - context.mOptions.get("processMCGenEnergyCorrelatorsPion"); + context.mOptions.get("processMCGenEnergyCorrelators") || + context.mOptions.get("processMCGenEnergyCorrelatorsPion"); bool isMCGen_energycorrelatorsME = - context.mOptions.get("processMCGenEnergyCorrelatorsME") || - context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); + context.mOptions.get("processMCGenEnergyCorrelatorsME") || + context.mOptions.get("processMCGenEnergyCorrelatorsPionME"); if (isDummy) { if (isBarrel || isMuon || isBarrelAsymmetric || isMCGen) { @@ -6403,8 +6349,8 @@ struct AnalysisDileptonTrack { std::unique_ptr objRecSigArray(sigNamesStr.Tokenize(",")); if (!sigNamesStr.IsNull()) { for (int isig = 0; isig < objRecSigArray->GetEntries(); ++isig) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objRecSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objRecSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" @@ -6423,9 +6369,9 @@ struct AnalysisDileptonTrack { // Add the reco MCSignals from the JSON config TString addMCSignalsStr = fConfigMCRecSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() != 3) { LOG(fatal) << "Signal at reconstructed level requested (" << mcIt->GetName() << ") " @@ -6441,8 +6387,8 @@ struct AnalysisDileptonTrack { TString sigGenNamesStr = fConfigMCGenSignals.value; std::unique_ptr objGenSigArray(sigGenNamesStr.Tokenize(",")); for (int isig = 0; isig < objGenSigArray->GetEntries(); isig++) { - MCSignal* sig = o2::aod::dqmcsignals::GetMCSignal( - objGenSigArray->At(isig)->GetName()); + MCSignal *sig = o2::aod::dqmcsignals::GetMCSignal( + objGenSigArray->At(isig)->GetName()); if (sig) { if (sig->GetNProngs() == 1) { // NOTE: 1-prong signals required fGenMCSignals.push_back(sig); @@ -6453,9 +6399,9 @@ struct AnalysisDileptonTrack { // Add the gen MCSignals from the JSON config addMCSignalsStr = fConfigMCGenSignalsJSON.value; if (addMCSignalsStr != "") { - std::vector addMCSignals = - dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); - for (auto const& mcIt : addMCSignals) { + std::vector addMCSignals = + dqmcsignals::GetMCSignalsFromJSON(addMCSignalsStr.Data()); + for (auto const &mcIt : addMCSignals) { if (mcIt->GetNProngs() == 1) { fGenMCSignals.push_back(mcIt); } @@ -6480,10 +6426,10 @@ struct AnalysisDileptonTrack { "cfgMuonCuts", cfgTrackSelection_TrackCuts, false); } - TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { cfgTrackSelection_objArrayTrackCuts = - TString(cfgTrackSelection_TrackCuts).Tokenize(","); + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { @@ -6499,9 +6445,9 @@ struct AnalysisDileptonTrack { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = - dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + dqcuts::GetCutsFromJSON(cfgTrackSelection_TrackCuts.data()); + for (auto const &t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } @@ -6513,14 +6459,14 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { fTrackCutNames.push_back( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } // get the list of associated track cuts to be combined with the dileptons, // check that these were computed upstream, and create a bit mask - TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { cfgDileptonTrack_objArrayTrackCuts = - TString(fConfigTrackCuts.value).Tokenize(","); + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } @@ -6529,7 +6475,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { if (!cfgTrackSelection_objArrayTrackCuts->FindObject( - cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the single " @@ -6541,7 +6487,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { if (cfgDileptonTrack_objArrayTrackCuts->FindObject( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } @@ -6593,15 +6539,15 @@ struct AnalysisDileptonTrack { TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { if (std::strcmp( - cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), - objArrayCommon->At(icut)->GetName()) == 0) { + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; fCommonPairCutNames.push_back(objArrayCommon->At(icut)->GetName()); } @@ -6616,16 +6562,16 @@ struct AnalysisDileptonTrack { cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = - dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { + std::vector addPairCuts = + dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } std::unique_ptr objArrayPairCuts( - TString(cfgPairing_PairCuts).Tokenize(",")); + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); @@ -6633,7 +6579,7 @@ struct AnalysisDileptonTrack { // array of single lepton cuts specified in the same-analysis-pairing task std::unique_ptr cfgPairing_objArrayTrackCuts( - TString(cfgPairing_TrackCuts).Tokenize(",")); + TString(cfgPairing_TrackCuts).Tokenize(",")); // If asymmetric pairs are used, the number of cuts should come from the // asymmetric-pairing task if (isBarrelAsymmetric) { @@ -6652,15 +6598,15 @@ struct AnalysisDileptonTrack { // dileptons if (!isBarrelAsymmetric) { if (!cfgPairing_objArrayTrackCuts->FindObject( - fTrackCutNames[icut].Data())) { + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead pairLegCutName = - dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) - ->GetString(); + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); @@ -6683,17 +6629,17 @@ struct AnalysisDileptonTrack { Form("DileptonTrack_%s_%s", pairLegCutName.Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6707,7 +6653,7 @@ struct AnalysisDileptonTrack { fCommonPairCutNames[iCommonCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { DefineHistograms(fHistMan, Form("DileptonTrackMCMatched_%s_%s_%s_%s", pairLegCutName.Data(), @@ -6733,18 +6679,18 @@ struct AnalysisDileptonTrack { fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + pairLegCutName.Data(), fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6760,15 +6706,15 @@ struct AnalysisDileptonTrack { fPairCutNames[iPairCut].Data(), fTrackCutNames[iCutTrack].Data()), fConfigHistogramSubgroups.value.data()); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { DefineHistograms( - fHistMan, - Form("DileptonTrack_%s_%s_%s_%s_%s", - pairLegCutName.Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iCutTrack].Data(), sig->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("DileptonTrack_%s_%s_%s_%s_%s", + pairLegCutName.Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iCutTrack].Data(), sig->GetName()), + fConfigHistogramSubgroups.value.data()); } } } @@ -6779,28 +6725,28 @@ struct AnalysisDileptonTrack { } // end if (isBarrel || isBarrelAsymmetric || isMuon) if (isMCGen) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { DefineHistograms(fHistMan, Form("MCTruthGen_%s", sig->GetName()), ""); DefineHistograms(fHistMan, Form("MCTruthGenSel_%s", sig->GetName()), ""); } - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { DefineHistograms(fHistMan, Form("MCTruthGenSelBR_%s", sig->GetName()), ""); DefineHistograms( - fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); + fHistMan, Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelators) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { DefineHistograms( - fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); + fHistMan, Form("MCTruthEenergyCorrelators_%s", sig->GetName()), ""); } } if (isMCGen_energycorrelatorsME) { - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { DefineHistograms(fHistMan, Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), ""); @@ -6816,10 +6762,9 @@ struct AnalysisDileptonTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { + void initParamsFromCCDB(uint64_t timestamp) { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -6831,8 +6776,8 @@ struct AnalysisDileptonTrack { VarManager::SetupThreeProngKFParticle(magField); } else { VarManager::SetupThreeProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } @@ -6840,19 +6785,18 @@ struct AnalysisDileptonTrack { template - void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, - TTracks const& tracks, TDileptons const& dileptons, - ReducedMCEvents const& /*mcEvents*/, - ReducedMCTracks const& mcTracks) - { + void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, TDileptons const &dileptons, + ReducedMCEvents const & /*mcEvents*/, + ReducedMCTracks const &mcTracks) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent( - event.reducedMCevent(), fValuesHadron); + event.reducedMCevent(), fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); VarManager::FillEvent( - event.reducedMCevent(), fValuesDilepton); + event.reducedMCevent(), fValuesDilepton); auto mcDecision = static_cast(0); size_t iSigMc = 0; @@ -6860,7 +6804,7 @@ struct AnalysisDileptonTrack { bool isCorrectAssoc_lepton2 = false; bool isCorrectAssoc_assoc = false; - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6882,9 +6826,9 @@ struct AnalysisDileptonTrack { // Correct association if (fConfigUseCorrectlyAssociatedMC) { isCorrectAssoc_lepton1 = - (lepton1MC.reducedMCevent() == event.reducedMCevent()); + (lepton1MC.reducedMCevent() == event.reducedMCevent()); isCorrectAssoc_lepton2 = - (lepton2MC.reducedMCevent() == event.reducedMCevent()); + (lepton2MC.reducedMCevent() == event.reducedMCevent()); } VarManager::FillTrack(dilepton, fValuesDilepton); @@ -6898,8 +6842,8 @@ struct AnalysisDileptonTrack { // regular dileptons fHistMan->FillHistClass( - Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s if constexpr (TCandidateType == @@ -6910,9 +6854,9 @@ struct AnalysisDileptonTrack { iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { @@ -6924,13 +6868,13 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -6939,7 +6883,7 @@ struct AnalysisDileptonTrack { } // loop over track associations - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); @@ -6963,7 +6907,7 @@ struct AnalysisDileptonTrack { if (fConfigUseCorrectlyAssociatedMC) { // check if correctly // associated isCorrectAssoc_assoc = - (trackMC.reducedMCevent() == event.reducedMCevent()); + (trackMC.reducedMCevent() == event.reducedMCevent()); } bool isCorrect_triplet = isCorrectAssoc_lepton1 && isCorrectAssoc_lepton2 && @@ -6978,7 +6922,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); mcDecision = 0; iSigMc = 0; @@ -6995,11 +6939,11 @@ struct AnalysisDileptonTrack { while (true) { if (currentMCParticle.has_mothers()) { currentMCParticle = - currentMCParticle - .template mothers_first_as(); + currentMCParticle + .template mothers_first_as(); if (std::abs(currentMCParticle.pdgCode()) > 500 && std::abs(currentMCParticle.pdgCode()) < - 549) { // nb! hardcoded pdgcodes + 549) { // nb! hardcoded pdgcodes VarManager::FillTrackMC(mcTracks, currentMCParticle, fValuesHadron); break; @@ -7013,51 +6957,51 @@ struct AnalysisDileptonTrack { // PV) VarManager::FillTrackCollisionMC( - trackMC, currentMCParticle, event.reducedMCevent(), - fValuesHadron); + trackMC, currentMCParticle, event.reducedMCevent(), + fValuesHadron); } // table to be written out for ML analysis BmesonsTable( - event.runNumber(), event.globalIndex(), event.timestamp(), - fValuesHadron[VarManager::kPairMass], dilepton.mass(), - fValuesHadron[VarManager::kDeltaMass], - fValuesHadron[VarManager::kPairPt], - fValuesHadron[VarManager::kPairEta], - fValuesHadron[VarManager::kPairPhi], - fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], - fValuesHadron[VarManager::kVertexingLxyErr], - fValuesHadron[VarManager::kVertexingLxyz], - fValuesHadron[VarManager::kVertexingLxyzErr], - fValuesHadron[VarManager::kVertexingLz], - fValuesHadron[VarManager::kVertexingLzErr], - fValuesHadron[VarManager::kVertexingTauxy], - fValuesHadron[VarManager::kVertexingTauxyErr], - fValuesHadron[VarManager::kVertexingTauz], - fValuesHadron[VarManager::kVertexingTauzErr], - fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], - fValuesHadron[VarManager::kMCVertexingLxy], - fValuesHadron[VarManager::kMCVertexingLxyz], - fValuesHadron[VarManager::kMCVertexingLz], - fValuesHadron[VarManager::kMCVertexingTauxy], - fValuesHadron[VarManager::kMCVertexingTauz], - fValuesHadron[VarManager::kMCCosPointingAngle], - track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), - lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), - lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), - track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), - lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), - lepton2.tpcNSigmaPr(), track.itsClusterMap(), - lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), - lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), - lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection, - mcDecision); + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyErr], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLxyzErr], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingLzErr], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauxyErr], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kVertexingTauzErr], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], + fValuesHadron[VarManager::kMCVertexingLxy], + fValuesHadron[VarManager::kMCVertexingLxyz], + fValuesHadron[VarManager::kMCVertexingLz], + fValuesHadron[VarManager::kMCVertexingTauxy], + fValuesHadron[VarManager::kMCVertexingTauz], + fValuesHadron[VarManager::kMCCosPointingAngle], + track.globalIndex(), lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection, + mcDecision); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { @@ -7082,7 +7026,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); auto trackMC = track.reducedMCTrack(); mcDecision = 0; @@ -7110,7 +7054,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); if (!track.has_reducedMCTrack()) { continue; @@ -7171,21 +7115,21 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } @@ -7193,43 +7137,43 @@ struct AnalysisDileptonTrack { for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (uint32_t isig = 0; isig < fRecMCSignals.size(); isig++) { if (mcDecision & (static_cast(1) << isig)) { fHistMan->FillHistClass( - Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data(), - fRecMCSignals[isig]->GetName()), - fValuesHadron); + Form("DileptonTrackMCMatched_%s_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data(), + fRecMCSignals[isig]->GetName()), + fValuesHadron); } } } @@ -7244,20 +7188,19 @@ struct AnalysisDileptonTrack { } Preslice trackAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; Preslice dielectronsPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; Preslice ditracksPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; void processBarrelSkimmed( - soa::Filtered const& events, - soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - soa::Filtered const& dileptons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + soa::Filtered const &dileptons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7266,14 +7209,14 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons, @@ -7282,13 +7225,12 @@ struct AnalysisDileptonTrack { } void processDstarToD0Pi( - soa::Filtered const& events, - soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - soa::Filtered const& ditracks, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + soa::Filtered const &ditracks, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7297,11 +7239,11 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDitracks = - ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDitracks, @@ -7310,17 +7252,17 @@ struct AnalysisDileptonTrack { } Preslice muonAssocsPerCollision = - aod::reducedtrack_association::reducedeventId; + aod::reducedtrack_association::reducedeventId; Preslice dimuonsPerCollision = - aod::reducedpair::reducedeventId; + aod::reducedpair::reducedeventId; void processMuonSkimmed( - soa::Filtered const& events, - soa::Filtered> const& assocs, - MyMuonTracksWithCov const& tracks, - soa::Filtered const& dileptons, - ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + soa::Filtered> const + &assocs, + MyMuonTracksWithCov const &tracks, + soa::Filtered const &dileptons, + ReducedMCEvents const &mcEvents, ReducedMCTracks const &mcTracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -7329,28 +7271,27 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } auto groupedMuonAssocs = - assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); auto groupedDimuons = - dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); runDileptonHadron( - event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); + event, groupedMuonAssocs, tracks, groupedDimuons, mcEvents, mcTracks); } } - void processMCGen(ReducedMCTracks const& mcTracks) - { + void processMCGen(ReducedMCTracks const &mcTracks) { // loop over mc stack and fill histograms for pure MC truth signals // group all the MC tracks which belong to the MC event corresponding to the // current reconstructed event auto groupedMCTracks = // tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, // event.reducedMCevent().globalIndex()); - for (auto const& mctrack : mcTracks) { + for (auto const &mctrack : mcTracks) { // if ((std::abs(mctrack.pdgCode()) > 400 && std::abs(mctrack.pdgCode()) < // 599) || @@ -7390,7 +7331,7 @@ struct AnalysisDileptonTrack { // precomputed during skimming and are stored in the mcReducedFlags // member. // TODO: Use the mcReducedFlags to select signals - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, mctrack)) { fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -7400,13 +7341,12 @@ struct AnalysisDileptonTrack { } PresliceUnsorted perReducedMcEvent = - aod::reducedtrackMC::reducedMCeventId; + aod::reducedtrackMC::reducedMCeventId; void processMCGenWithEventSelection( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { - for (auto const& event : events) { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7415,14 +7355,14 @@ struct AnalysisDileptonTrack { } auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& track : groupedMCTracks) { + for (auto const &track : groupedMCTracks) { VarManager::FillTrackMC(mcTracks, track); auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex()); - for (auto const& sig : fGenMCSignals) { + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, track_raw)) { fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), dqefficiency_helpers::varValues()); @@ -7433,20 +7373,20 @@ struct AnalysisDileptonTrack { // make a list of all MC tracks in the MC collision corresponding to the // current reconstructed event std::vector mcTrackIndices; - for (auto const& t : groupedMCTracks) { + for (auto const &t : groupedMCTracks) { mcTrackIndices.push_back(t.globalIndex()); } // make a three nested for loop over all MC tracks in the vector - for (const auto& t1 : mcTrackIndices) { + for (const auto &t1 : mcTrackIndices) { auto track1 = mcTracks.rawIteratorAt(t1); - for (const auto& t2 : mcTrackIndices) { + for (const auto &t2 : mcTrackIndices) { if (t1 == t2) { continue; } // if (t2 < t1) continue; auto track2 = mcTracks.rawIteratorAt(t2); - for (const auto& t3 : mcTrackIndices) { + for (const auto &t3 : mcTrackIndices) { if (t3 == t1) { continue; } @@ -7455,27 +7395,27 @@ struct AnalysisDileptonTrack { } auto track3 = mcTracks.rawIteratorAt(t3); - for (auto const& sig : fRecMCSignals) { + for (auto const &sig : fRecMCSignals) { if (sig->CheckSignal(true, track1, track2, track3)) { VarManager::FillTripleMC( - track1, track2, track3, - dqefficiency_helpers::varValues()); // nb! hardcoded for - // jpsiK + track1, track2, track3, + dqefficiency_helpers::varValues()); // nb! hardcoded for + // jpsiK fHistMan->FillHistClass( - Form("MCTruthGenSelBR_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenSelBR_%s", sig->GetName()), + dqefficiency_helpers::varValues()); // apply kinematic cuts if (track1.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track1.eta()) > - fConfigMCGenDileptonLegEtaAbs.value) { + fConfigMCGenDileptonLegEtaAbs.value) { continue; } if (track2.pt() < fConfigMCGenDileptonLegPtMin.value || std::abs(track2.eta()) > - fConfigMCGenDileptonLegEtaAbs.value) { + fConfigMCGenDileptonLegEtaAbs.value) { continue; } if (track3.pt() < fConfigMCGenHadronPtMin.value || @@ -7483,8 +7423,8 @@ struct AnalysisDileptonTrack { continue; } fHistMan->FillHistClass( - Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthGenSelBRAccepted_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -7494,12 +7434,11 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelators(TEvent const& event, TMCTracks const& mcTracks) - { + void runEnergyCorrelators(TEvent const &event, TMCTracks const &mcTracks) { auto groupedMCTracks = - mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event.reducedMCeventId()); groupedMCTracks.bindInternalIndicesTo(&mcTracks); - for (auto const& t1 : groupedMCTracks) { + for (auto const &t1 : groupedMCTracks) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal if ((t1_raw.pt() < fConfigDileptonLowpTCut || @@ -7510,7 +7449,7 @@ struct AnalysisDileptonTrack { continue; } // for the energy correlators - for (auto const& t2 : groupedMCTracks) { + for (auto const &t2 : groupedMCTracks) { auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex()); if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || @@ -7525,26 +7464,25 @@ struct AnalysisDileptonTrack { continue; } VarManager::FillEnergyCorrelatorsMC( - t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const& sig : fGenMCSignals) { + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { fHistMan->FillHistClass( - Form("MCTruthEenergyCorrelators_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthEenergyCorrelators_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } } } void processMCGenEnergyCorrelators( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7556,14 +7494,13 @@ struct AnalysisDileptonTrack { } void processMCGenEnergyCorrelatorsPion( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -7575,17 +7512,16 @@ struct AnalysisDileptonTrack { } template - void runEnergyCorrelatorsMixedEvent(TEvent const& event1, - TEvent const& event2, - TMCTracks const& mcTracks) - { + void runEnergyCorrelatorsMixedEvent(TEvent const &event1, + TEvent const &event2, + TMCTracks const &mcTracks) { auto groupedMCTracks1 = - mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event1.reducedMCeventId()); auto groupedMCTracks2 = - mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); + mcTracks.sliceBy(perReducedMcEvent, event2.reducedMCeventId()); groupedMCTracks1.bindInternalIndicesTo(&mcTracks); groupedMCTracks2.bindInternalIndicesTo(&mcTracks); - for (auto const& t1 : groupedMCTracks1) { + for (auto const &t1 : groupedMCTracks1) { auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex()); // apply kinematic cuts for signal if ((t1_raw.pt() < fConfigDileptonLowpTCut || @@ -7596,7 +7532,7 @@ struct AnalysisDileptonTrack { continue; } // for the energy correlators - for (auto const& t2 : groupedMCTracks2) { + for (auto const &t2 : groupedMCTracks2) { auto t2_raw = groupedMCTracks2.rawIteratorAt(t2.globalIndex()); if (std::abs(t2_raw.pdgCode()) == o2::constants::physics::Pdg::kJPsi || std::abs(t2_raw.pdgCode()) == PDG_t::kElectron || @@ -7611,12 +7547,12 @@ struct AnalysisDileptonTrack { continue; } VarManager::FillEnergyCorrelatorsMC( - t1_raw, t2_raw, dqefficiency_helpers::varValues()); - for (auto const& sig : fGenMCSignals) { + t1_raw, t2_raw, dqefficiency_helpers::varValues()); + for (auto const &sig : fGenMCSignals) { if (sig->CheckSignal(true, t1_raw)) { fHistMan->FillHistClass( - Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), - dqefficiency_helpers::varValues()); + Form("MCTruthEenergyCorrelatorsME_%s", sig->GetName()), + dqefficiency_helpers::varValues()); } } } @@ -7624,16 +7560,15 @@ struct AnalysisDileptonTrack { } void processMCGenEnergyCorrelatorsME( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } @@ -7641,21 +7576,20 @@ struct AnalysisDileptonTrack { continue; } runEnergyCorrelatorsMixedEvent( - event1, event2, mcTracks); + event1, event2, mcTracks); } } void processMCGenEnergyCorrelatorsPionME( - soa::Filtered const& events, - ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks) - { + soa::Filtered const &events, + ReducedMCEvents const & /*mcEvents*/, ReducedMCTracks const &mcTracks) { if (events.size() == 0) { LOG(warning) << "No events in this TF, going to the next one ..."; return; } // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { if (!event1.isEventSelected_bit(0) || !event2.isEventSelected_bit(0)) { continue; } @@ -7667,8 +7601,7 @@ struct AnalysisDileptonTrack { } } - void processDummy(MyEvents const&) - { + void processDummy(MyEvents const &) { // do nothing } @@ -7682,11 +7615,11 @@ struct AnalysisDileptonTrack { PROCESS_SWITCH(AnalysisDileptonTrack, processMuonSkimmed, "Run muon dilepton-track pairing, using skimmed data", false); PROCESS_SWITCH( - AnalysisDileptonTrack, processMCGen, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisDileptonTrack, processMCGen, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH( - AnalysisDileptonTrack, processMCGenWithEventSelection, - "Loop over MC particle stack and fill generator level histograms", false); + AnalysisDileptonTrack, processMCGenWithEventSelection, + "Loop over MC particle stack and fill generator level histograms", false); PROCESS_SWITCH(AnalysisDileptonTrack, processMCGenEnergyCorrelators, "Loop over MC particle stack and fill generator level " "histograms(energy correlators)", @@ -7706,22 +7639,20 @@ struct AnalysisDileptonTrack { PROCESS_SWITCH(AnalysisDileptonTrack, processDummy, "Dummy function", true); }; -WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) -{ +WorkflowSpec defineDataProcessing(ConfigContext const &cfgc) { return WorkflowSpec{ - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc), - adaptAnalysisTask(cfgc)}; + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc), + adaptAnalysisTask(cfgc)}; } -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, - const char* histGroups) -{ +void DefineHistograms(HistogramManager *histMan, const TString &histClasses, + const char *histGroups) { // // Define here the histograms for all the classes required in analysis. // The histogram classes are provided in the histClasses string, separated by @@ -7769,7 +7700,7 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, } if (classStr.Contains("Ambiguity")) { dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } } diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index 973964f3a01..f2d8f7cb4bf 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -82,10 +82,8 @@ #include // Some definitions -namespace o2::aod -{ -namespace dqanalysisflags -{ +namespace o2::aod { +namespace dqanalysisflags { DECLARE_SOA_COLUMN(MixingHash, mixingHash, int); //! Hash used in event mixing DECLARE_SOA_BITMAP_COLUMN(IsEventSelected, isEventSelected, 8); //! Event decision @@ -96,8 +94,8 @@ DECLARE_SOA_COLUMN(BarrelAmbiguityInBunch, barrelAmbiguityInBunch, DECLARE_SOA_COLUMN(BarrelAmbiguityOutOfBunch, barrelAmbiguityOutOfBunch, int8_t); //! Barrel track out of bunch ambiguity DECLARE_SOA_BITMAP_COLUMN( - IsMuonSelected, isMuonSelected, - 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) + IsMuonSelected, isMuonSelected, + 32); //! Muon track decisions (joinable to o2::aod::ReducedMuonsAssoc) DECLARE_SOA_COLUMN(MuonAmbiguityInBunch, muonAmbiguityInBunch, int8_t); //! Muon track in-bunch ambiguity DECLARE_SOA_COLUMN(MuonAmbiguityOutOfBunch, muonAmbiguityOutOfBunch, @@ -193,13 +191,13 @@ DECLARE_SOA_COLUMN(MultiplicityNContrib, multiplicityNContribJPsi2ee, float); // Additional columns for prompt-non-prompt JPsi separation (BDT training) DECLARE_SOA_COLUMN(PairSign, pairSign, int8_t); //! t1.sign() + t2.sign() DECLARE_SOA_COLUMN( - PairFilter, pairFilter, - uint32_t); //! twoTrackFilter (cut bits + ambiguity bits 28-31) + 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( - Corrassoc, corrassoc, - bool); //! correct collision association (MC only, true in data) + Corrassoc, corrassoc, + bool); //! correct collision association (MC only, true in data) DECLARE_SOA_COLUMN(TauxyeeErr, tauxyeeErr, float); //! kVertexingTauxyErr: in ns (not cm) and with the //! reconstructed mass @@ -207,7 +205,7 @@ DECLARE_SOA_COLUMN(TauzeeErr, tauzeeErr, float); //! kVertexingTauzErr: in ns (not cm) and with the //! reconstructed mass DECLARE_SOA_COLUMN(LxyeeProjected, lxyeeProjected, - float); //! kVertexingLxyProjected + float); //! kVertexingLxyProjected DECLARE_SOA_COLUMN(LxyeeOverErr, lxyeeOverErr, float); //! kVertexingLxyOverErr DECLARE_SOA_COLUMN(Lxyzee, lxyzee, float); //! kVertexingLxyz DECLARE_SOA_COLUMN(LxyzeeOverErr, lxyzeeOverErr, @@ -225,59 +223,59 @@ DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); } // namespace dqanalysisflags DECLARE_SOA_TABLE( - EventCuts, "AOD", "DQANAEVCUTSA", - dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents + EventCuts, "AOD", "DQANAEVCUTSA", + dqanalysisflags::IsEventSelected); //! joinable to ReducedEvents DECLARE_SOA_TABLE(MixingHashes, "AOD", "DQANAMIXHASHA", dqanalysisflags::MixingHash); //! joinable to ReducedEvents DECLARE_SOA_TABLE( - BarrelTrackCuts, "AOD", "DQANATRKCUTSA", - dqanalysisflags::IsBarrelSelected); //! joinable to - //! o2::aod::ReducedTracksAssoc + BarrelTrackCuts, "AOD", "DQANATRKCUTSA", + dqanalysisflags::IsBarrelSelected); //! joinable to + //! o2::aod::ReducedTracksAssoc DECLARE_SOA_TABLE( - BarrelAmbiguities, "AOD", "DQBARRELAMBA", - dqanalysisflags::BarrelAmbiguityInBunch, - dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to - //! ReducedBarrelTracks + BarrelAmbiguities, "AOD", "DQBARRELAMBA", + dqanalysisflags::BarrelAmbiguityInBunch, + dqanalysisflags::BarrelAmbiguityOutOfBunch); //! joinable to + //! ReducedBarrelTracks DECLARE_SOA_TABLE( - MuonTrackCuts, "AOD", "DQANAMUONCUTSA", - dqanalysisflags::IsMuonSelected); //! joinable to - //! o2::aod::ReducedMuonsAssoc + MuonTrackCuts, "AOD", "DQANAMUONCUTSA", + dqanalysisflags::IsMuonSelected); //! joinable to + //! o2::aod::ReducedMuonsAssoc DECLARE_SOA_TABLE( - MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, - dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to - //! ReducedMuonTracks + MuonAmbiguities, "AOD", "DQMUONAMBA", dqanalysisflags::MuonAmbiguityInBunch, + dqanalysisflags::MuonAmbiguityOutOfBunch); //! joinable to + //! ReducedMuonTracks DECLARE_SOA_TABLE( - Prefilter, "AOD", "DQPREFILTERA", - dqanalysisflags:: - IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc + Prefilter, "AOD", "DQPREFILTERA", + dqanalysisflags:: + IsBarrelSelectedPrefilter); //! joinable to o2::aod::ReducedTracksAssoc DECLARE_SOA_TABLE( - BmesonCandidates, "AOD", "DQBMESONSA", dqanalysisflags::RunNumber, - dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, - dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, - dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, - dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, - dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, - dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, - dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, - dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, - dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, - dqanalysisflags::GlobalIndexleg2, dqanalysisflags::PINassoc, - dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, - dqanalysisflags::Etapair, dqanalysisflags::PINleg1, - dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, - dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, - dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, - dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, - dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, - dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, - dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, - dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, - dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, - dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, - dqanalysisflags::IsBarrelSelected); + BmesonCandidates, "AOD", "DQBMESONSA", dqanalysisflags::RunNumber, + dqanalysisflags::EventIdx, dqanalysisflags::EventTimestamp, + dqanalysisflags::massBcandidate, dqanalysisflags::MassDileptonCandidate, + dqanalysisflags::deltamassBcandidate, dqanalysisflags::pTBcandidate, + dqanalysisflags::EtaBcandidate, dqanalysisflags::PhiBcandidate, + dqanalysisflags::RapBcandidate, dqanalysisflags::LxyBcandidate, + dqanalysisflags::LxyzBcandidate, dqanalysisflags::LzBcandidate, + dqanalysisflags::TauxyBcandidate, dqanalysisflags::TauzBcandidate, + dqanalysisflags::CosPBcandidate, dqanalysisflags::Chi2Bcandidate, + dqanalysisflags::GlobalIndexassoc, dqanalysisflags::GlobalIndexleg1, + dqanalysisflags::GlobalIndexleg2, dqanalysisflags::PINassoc, + dqanalysisflags::Etaassoc, dqanalysisflags::Ptpair, + dqanalysisflags::Etapair, dqanalysisflags::PINleg1, + dqanalysisflags::Etaleg1, dqanalysisflags::PINleg2, + dqanalysisflags::Etaleg2, dqanalysisflags::TPCnsigmaKaassoc, + dqanalysisflags::TPCnsigmaPiassoc, dqanalysisflags::TPCnsigmaPrassoc, + dqanalysisflags::TOFnsigmaKaassoc, dqanalysisflags::TPCnsigmaElleg1, + dqanalysisflags::TPCnsigmaPileg1, dqanalysisflags::TPCnsigmaPrleg1, + dqanalysisflags::TPCnsigmaElleg2, dqanalysisflags::TPCnsigmaPileg2, + dqanalysisflags::TPCnsigmaPrleg2, dqanalysisflags::ITSClusterMapassoc, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2assoc, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::TPCNclsassoc, + dqanalysisflags::TPCNclsleg1, dqanalysisflags::TPCNclsleg2, + dqanalysisflags::TPCChi2assoc, dqanalysisflags::TPCChi2leg1, + dqanalysisflags::TPCChi2leg2, dqanalysisflags::IsJpsiFromBSelected, + dqanalysisflags::IsBarrelSelected); DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::DeltaEta, dqanalysisflags::DeltaPhi, dqanalysisflags::MassDileptonCandidate, @@ -288,238 +286,238 @@ DECLARE_SOA_TABLE(JPsiMuonCandidates, "AOD", "DQJPSIMUONA", dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::Phileg2); 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, - dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, - dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, - dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, - dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, - dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, - dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, - dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, - dqanalysisflags::MultiplicityNContrib); + 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::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::DcaXYOverSig1, dqanalysisflags::DcaZOverSig1, + dqanalysisflags::ITSClusterMapleg1, dqanalysisflags::ITSChi2leg1, + dqanalysisflags::Ptleg2, dqanalysisflags::Etaleg2, dqanalysisflags::DcaXY2, + dqanalysisflags::DcaZ2, dqanalysisflags::DcaXYOverSig2, + dqanalysisflags::DcaZOverSig2, dqanalysisflags::ITSClusterMapleg2, + dqanalysisflags::ITSChi2leg2, dqanalysisflags::AmbiguousInBunchPairs, + dqanalysisflags::AmbiguousOutOfBunchPairs, dqanalysisflags::Corrassoc, + dqanalysisflags::MultiplicityFT0C, dqanalysisflags::PercentileFT0C, + dqanalysisflags::MultiplicityNContrib); } // namespace o2::aod // Declarations of various short names using MyEvents = - o2::soa::Join; + o2::soa::Join; using MyEventsBasic = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraNoQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraQVector = - o2::soa::Join; + o2::soa::Join; using MyEventsZdc = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraZdc = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraZdcFit = - o2::soa::Join; + o2::soa::Join; using MyEventsSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsMultExtraSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCov = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedInfo = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovSelectedQvectorWithHash = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovZdcFitSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsVtxCovZdcFitSelectedMultExtra = - o2::soa::Join; + o2::soa::Join; using MyEventsQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelectedQvector = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentr = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentrMerge = - o2::soa::Join; + o2::soa::Join; using MyEventsQvectorCentrSelected = - o2::soa::Join; + o2::soa::Join; using MyEventsHashSelectedQvectorCentr = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracks = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCov = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithAmbiguitiesWithColl = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithEMCal = - o2::soa::Join; + o2::soa::Join; using MyBarrelTracksWithCovWithEMCal = - o2::soa::Join; + o2::soa::Join; using MyDielectronCandidates = - o2::soa::Join; + o2::soa::Join; using MyDitrackCandidates = - o2::soa::Join; + o2::soa::Join; using MyDimuonCandidates = - o2::soa::Join; + o2::soa::Join; using MyMuonTracks = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksWithCov = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksWithCovWithAmbiguities = - o2::soa::Join; + o2::soa::Join; using MyMuonTracksSelectedWithColl = - o2::soa::Join; + o2::soa::Join; // bit maps used for the Fill functions of the VarManager constexpr static uint32_t gkEventFillMap = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended; constexpr static uint32_t gkEventFillMapWithZdc = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | VarManager::ReducedZdc; constexpr static uint32_t gkEventFillMapWithCov = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov; // constexpr static uint32_t gkEventFillMapWithCovFlow = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkEventFillMapWithCovZdcFit = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | - VarManager::ReducedFit; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit; constexpr static uint32_t gkEventFillMapWithMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra; // New fillmap constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | - VarManager::ObjTypes::CollisionQvect; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | + VarManager::ObjTypes::CollisionQvect; // constexpr static uint32_t gkEventFillMapWithMultExtraWithQVector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | // VarManager::ObjTypes::ReducedEventMultExtra | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkEventFillMapWithMultExtraZdc = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc; constexpr static uint32_t gkEventFillMapWithMultExtraZdcFit = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | - VarManager::ReducedFit; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventMultExtra | VarManager::ReducedZdc | + VarManager::ReducedFit; constexpr static uint32_t gkEventFillMapWithCovZdcFitMultExtra = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | - VarManager::ReducedFit | VarManager::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::ReducedEventVtxCov | VarManager::ReducedZdc | + VarManager::ReducedFit | VarManager::ReducedEventMultExtra; constexpr static uint32_t gkEventFillMapWithQvectorCentr = - VarManager::ObjTypes::ReducedEvent | - VarManager::ObjTypes::ReducedEventExtended | - VarManager::ObjTypes::CollisionQvect | - VarManager::ObjTypes::ReducedEventMultExtra; + VarManager::ObjTypes::ReducedEvent | + VarManager::ObjTypes::ReducedEventExtended | + VarManager::ObjTypes::CollisionQvect | + VarManager::ObjTypes::ReducedEventMultExtra; // constexpr static uint32_t gkEventFillMapWithQvector = // VarManager::ObjTypes::ReducedEvent | // VarManager::ObjTypes::ReducedEventExtended | @@ -529,30 +527,30 @@ constexpr static uint32_t gkEventFillMapWithQvectorCentr = // VarManager::ObjTypes::ReducedEventVtxCov | // VarManager::ObjTypes::ReducedEventQvector; constexpr static uint32_t gkTrackFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCov = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID; constexpr static uint32_t gkTrackFillMapWithCovWithColl = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::ReducedTrackBarrel | - VarManager::ObjTypes::ReducedTrackBarrelCov | - VarManager::ObjTypes::ReducedTrackBarrelPID | - VarManager::ObjTypes::ReducedTrackCollInfo; + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::ReducedTrackBarrel | + VarManager::ObjTypes::ReducedTrackBarrelCov | + VarManager::ObjTypes::ReducedTrackBarrelPID | + VarManager::ObjTypes::ReducedTrackCollInfo; constexpr static uint32_t gkTrackFillMapWithEMCal = - gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; + gkTrackFillMap | VarManager::ObjTypes::TrackEMCal; constexpr static uint32_t gkTrackFillMapWithCovWithEMCal = - gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; + gkTrackFillMapWithCov | VarManager::ObjTypes::TrackEMCal; // constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | // VarManager::ObjTypes::ReducedMuonExtra; constexpr static uint32_t gkMuonFillMapWithCov = - VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | - VarManager::ObjTypes::ReducedMuonCov; + VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | + VarManager::ObjTypes::ReducedMuonCov; // constexpr static uint32_t gkMuonFillMapWithColl = // VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | // VarManager::ObjTypes::ReducedMuonCollInfo; @@ -561,27 +559,22 @@ constexpr static int pairTypeEE = VarManager::kDecayToEE; constexpr static int pairTypeMuMu = VarManager::kDecayToMuMu; // constexpr static int pairTypeEMu = VarManager::kElectronMuon; -namespace dqtablereader_helpers -{ -inline float* varValues() { return static_cast(VarManager::fgValues); } -inline TString* varNames() -{ - return static_cast(VarManager::fgVariableNames); +namespace dqtablereader_helpers { +inline float *varValues() { return static_cast(VarManager::fgValues); } +inline TString *varNames() { + return static_cast(VarManager::fgVariableNames); } -inline TString* varUnits() -{ - return static_cast(VarManager::fgVariableUnits); +inline TString *varUnits() { + return static_cast(VarManager::fgVariableUnits); } } // namespace dqtablereader_helpers // Global function used to define needed histogram classes void DefineHistograms( - HistogramManager* histMan, const TString& histClasses, - const char* histGroups); // defines histograms for all tasks + HistogramManager *histMan, const TString &histClasses, + const char *histGroups); // defines histograms for all tasks -template -void PrintBitMap(TMap map, int nbits) -{ +template void PrintBitMap(TMap map, int nbits) { std::string bits; bits.reserve(nbits); for (int i = 0; i < nbits; i++) { @@ -602,66 +595,66 @@ struct AnalysisEventSelection { // TODO: Provide the mixing variables and binning directly via configurables // (e.g. vectors of float) o2::framework::Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; o2::framework::Configurable fConfigMixingVariablesJson{ - "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; o2::framework::Configurable fConfigEventCuts{ - "cfgEventCuts", "eventStandard", "Event selection"}; + "cfgEventCuts", "eventStandard", "Event selection"}; o2::framework::Configurable fConfigEventCutsJSON{ - "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; + "cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"}; o2::framework::Configurable fConfigAddEventHistogram{ - "cfgAddEventHistogram", "", "Comma separated list of histograms"}; + "cfgAddEventHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", - "Add event histograms defined via JSON formatting (see " - "HistogramsLibrary)"}; + "cfgAddJSONHistograms", "", + "Add event histograms defined via JSON formatting (see " + "HistogramsLibrary)"}; o2::framework::Configurable fConfigQA{ - "cfgQA", true, "If true, QA histograms will be created and filled"}; + "cfgQA", true, "If true, QA histograms will be created and filled"}; o2::framework::Configurable fConfigITSROFrameStartBorderMargin{ - "cfgITSROFrameStartBorderMargin", -1, - "Number of bcs at the start of ITS RO Frame border. Take from CCDB if " - "-1"}; + "cfgITSROFrameStartBorderMargin", -1, + "Number of bcs at the start of ITS RO Frame border. Take from CCDB if " + "-1"}; o2::framework::Configurable fConfigITSROFrameEndBorderMargin{ - "cfgITSROFrameEndBorderMargin", -1, - "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; + "cfgITSROFrameEndBorderMargin", -1, + "Number of bcs at the end of ITS RO Frame border. Take from CCDB if -1"}; o2::framework::Configurable fConfigSplitCollisionsDeltaZ{ - "cfgSplitCollisionsDeltaZ", 1.0, - "maximum delta-z (cm) between two collisions to consider them as split " - "candidates"}; + "cfgSplitCollisionsDeltaZ", 1.0, + "maximum delta-z (cm) between two collisions to consider them as split " + "candidates"}; o2::framework::Configurable fConfigSplitCollisionsDeltaBC{ - "cfgSplitCollisionsDeltaBC", 100, - "maximum delta-BC between two collisions to consider them as split " - "candidates; do not apply if value is negative"}; + "cfgSplitCollisionsDeltaBC", 100, + "maximum delta-BC between two collisions to consider them as split " + "candidates; do not apply if value is negative"}; o2::framework::Configurable fConfigCheckSplitCollisions{ - "cfgCheckSplitCollisions", false, - "If true, run the split collision check and fill histograms"}; + "cfgCheckSplitCollisions", false, + "If true, run the split collision check and fill histograms"}; o2::framework::Configurable fConfigRunZorro{ - "cfgRunZorro", false, - "Enable event selection with zorro [WARNING: under debug, do not " - "enable!]"}; + "cfgRunZorro", false, + "Enable event selection with zorro [WARNING: under debug, do not " + "enable!]"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigFetchInteractionRate{ - "cfgFetchInteractionRate", false, - "Fetch event-wise interaction rate from the CCDB"}; + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; o2::framework::Configurable fConfigIRSource{ - "cfgIRSource", "ZNC hadronic", - "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " - "ZNC hadronic)"}; + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; - HistogramManager* fHistMan = nullptr; - MixingHandler* fMixHandler = nullptr; - AnalysisCompositeCut* fEventCut = nullptr; + HistogramManager *fHistMan = nullptr; + MixingHandler *fMixHandler = nullptr; + AnalysisCompositeCut *fEventCut = nullptr; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; @@ -670,23 +663,22 @@ struct AnalysisEventSelection { std::map fSelMap; // key: reduced event global index, value: // event selection decision std::map> - fBCCollMap; // key: global BC, value: vector of reduced event global - // indices + fBCCollMap; // key: global BC, value: vector of reduced event global + // indices int fCurrentRun = -1; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isAnyProcessEnabled = - context.mOptions.get("processSkimmed") || - context.mOptions.get("processSkimmedBasic") || - context.mOptions.get("processSkimmedWithZdc") || - context.mOptions.get("processSkimmedWithMultExtra") || - context.mOptions.get("processSkimmedWithMultExtraNoQvector") || - context.mOptions.get("processSkimmedWithMultExtraZdc") || - context.mOptions.get("processSkimmedWithMultExtraZdcFit") || - context.mOptions.get("processSkimmedWithQvectorCentr") || - context.mOptions.get("processSkimmedWithQvectorCentrMerge"); + context.mOptions.get("processSkimmed") || + context.mOptions.get("processSkimmedBasic") || + context.mOptions.get("processSkimmedWithZdc") || + context.mOptions.get("processSkimmedWithMultExtra") || + context.mOptions.get("processSkimmedWithMultExtraNoQvector") || + context.mOptions.get("processSkimmedWithMultExtraZdc") || + context.mOptions.get("processSkimmedWithMultExtraZdcFit") || + context.mOptions.get("processSkimmedWithQvectorCentr") || + context.mOptions.get("processSkimmedWithQvectorCentrMerge"); bool isDummyEnabled = context.mOptions.get("processDummy"); if (isDummyEnabled) { @@ -705,7 +697,7 @@ struct AnalysisEventSelection { fEventCut = new AnalysisCompositeCut(true); TString eventCutStr = fConfigEventCuts.value; if (eventCutStr != "") { - AnalysisCut* cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); + AnalysisCut *cut = o2::aod::dqcuts::GetAnalysisCut(eventCutStr.Data()); if (cut != nullptr) { fEventCut->AddCut(cut); } @@ -713,16 +705,16 @@ struct AnalysisEventSelection { // Additional cuts via JSON TString eventCutJSONStr = fConfigEventCutsJSON.value; if (eventCutJSONStr != "") { - std::vector jsonCuts = - o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); - for (auto const& cutIt : jsonCuts) { + std::vector jsonCuts = + o2::aod::dqcuts::GetCutsFromJSON(eventCutJSONStr.Data()); + for (auto const &cutIt : jsonCuts) { fEventCut->AddCut(cutIt); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = new HistogramManager("analysisHistos", "", VarManager::kNVars); @@ -737,7 +729,7 @@ struct AnalysisEventSelection { } // Additional histograms via JSON o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, fConfigAddJSONHistograms.value.c_str()); + fHistMan, fConfigAddJSONHistograms.value.c_str()); VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -769,47 +761,46 @@ struct AnalysisEventSelection { } template - void runEventSelection(TEvents const& events) - { + void runEventSelection(TEvents const &events) { if (events.size() > 0 && events.begin().runNumber() != fCurrentRun) { std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); auto alppar = fCCDB->getForTimeStamp>( - "ITS/Config/AlpideParam", events.begin().timestamp()); + "ITS/Config/AlpideParam", events.begin().timestamp()); auto par = fCCDB->getForTimeStamp( - "EventSelection/EventSelectionParams", events.begin().timestamp()); + "EventSelection/EventSelectionParams", events.begin().timestamp()); int itsROFrameStartBorderMargin = - fConfigITSROFrameStartBorderMargin < 0 - ? par->fITSROFrameStartBorderMargin - : fConfigITSROFrameStartBorderMargin; + fConfigITSROFrameStartBorderMargin < 0 + ? par->fITSROFrameStartBorderMargin + : fConfigITSROFrameStartBorderMargin; int itsROFrameEndBorderMargin = fConfigITSROFrameEndBorderMargin < 0 - ? par->fITSROFrameEndBorderMargin - : fConfigITSROFrameEndBorderMargin; + ? par->fITSROFrameEndBorderMargin + : fConfigITSROFrameEndBorderMargin; VarManager::SetITSROFBorderselection( - alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, - itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); + alppar->roFrameBiasInBC, alppar->roFrameLengthInBC, + itsROFrameStartBorderMargin, itsROFrameEndBorderMargin); fCurrentRun = events.begin().runNumber(); } fSelMap.clear(); fBCCollMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { // Reset the fValues array and fill event observables VarManager::ResetValues(0, VarManager::kNEventWiseVariables); VarManager::FillEvent(event); // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { VarManager::fgValues[VarManager::kInteractionRate] = - rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, - fConfigIRSource.value, true) / - 1000.; // kHz + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } bool decision = false; @@ -848,14 +839,14 @@ struct AnalysisEventSelection { std::vector evIndices = {event.globalIndex()}; fBCCollMap[event.globalBC()] = evIndices; } else { - auto& evIndices = fBCCollMap[event.globalBC()]; + auto &evIndices = fBCCollMap[event.globalBC()]; evIndices.push_back(event.globalIndex()); } // create the mixing hash and publish it into the hash table if (fMixHandler != nullptr) { int hh = - fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); + fMixHandler->FindEventCategory(dqtablereader_helpers::varValues()); // events outside the mixing limits (-1) get a distinct negative hash so // that they are not mixed with each other if (hh < 0) { @@ -867,8 +858,7 @@ struct AnalysisEventSelection { } template - void publishSelections(TEvents const& events) - { + void publishSelections(TEvents const &events) { // Create a map for collisions which are candidate of being split // key: event global index, value: whether pileup event is a possible // splitting @@ -882,7 +872,7 @@ struct AnalysisEventSelection { for (auto bc1It = fBCCollMap.begin(); bc1It != fBCCollMap.end(); ++bc1It) { uint64_t bc1 = bc1It->first; - auto const& bc1Events = bc1It->second; + auto const &bc1Events = bc1It->second; // same bunch event correlations, if more than 1 collisions in this // bunch @@ -918,13 +908,13 @@ struct AnalysisEventSelection { fConfigSplitCollisionsDeltaBC) { break; } - auto const& bc2Events = bc2It->second; + auto const &bc2Events = bc2It->second; // loop over events in the first BC - for (auto const& ev1It : bc1Events) { + for (auto const &ev1It : bc1Events) { auto ev1 = events.rawIteratorAt(ev1It); // loop over events in the second BC - for (auto const& ev2It : bc2Events) { + for (auto const &ev2It : bc2Events) { auto ev2 = events.rawIteratorAt(ev2It); // compute 2-event quantities and mark the candidate split // collisions @@ -947,7 +937,7 @@ struct AnalysisEventSelection { // publish the table auto evSel = static_cast(0); - for (auto const& event : events) { + for (auto const &event : events) { evSel = 0; if (fSelMap[event.globalIndex()]) { // event passed the user cuts evSel |= (static_cast(1) << 0); @@ -965,66 +955,57 @@ struct AnalysisEventSelection { } } - void processSkimmed(MyEvents const& events) - { + void processSkimmed(MyEvents const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedBasic(MyEventsBasic const& events) - { + void processSkimmedBasic(MyEventsBasic const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithZdc(MyEventsZdc const& events) - { + void processSkimmedWithZdc(MyEventsZdc const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtra(MyEventsMultExtra const& events) - { + void processSkimmedWithMultExtra(MyEventsMultExtra const &events) { runEventSelection(events); publishSelections(events); } void processSkimmedWithMultExtraNoQvector( - MyEventsMultExtraNoQvector const& events) - { + MyEventsMultExtraNoQvector const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const& events) - { + void processSkimmedWithMultExtraZdc(MyEventsMultExtraZdc const &events) { runEventSelection(events); publishSelections(events); } void - processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const& events) - { + processSkimmedWithMultExtraZdcFit(MyEventsMultExtraZdcFit const &events) { runEventSelection(events); publishSelections(events); } - void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const& events) - { + void processSkimmedWithQvectorCentr(MyEventsQvectorCentr const &events) { runEventSelection(events); publishSelections(events); } void - processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const& events) - { + processSkimmedWithQvectorCentrMerge(MyEventsQvectorCentrMerge const &events) { runEventSelection(events); publishSelections(events); } void processFillEvents( - MyEventsBasic const& events) // Used to forward the event table from tablemaker, typical - // use for now is jet analysis. + MyEventsBasic const + &events) // Used to forward the event table from tablemaker, typical + // use for now is jet analysis. { - for (auto const& event : events) { + for (auto const &event : events) { JetEvents(event.tag_raw(), event.runNumber(), event.posX(), event.posY(), event.posZ(), event.numContrib(), event.collisionTime(), event.collisionTimeRes()); } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -1043,13 +1024,13 @@ struct AnalysisEventSelection { "and without Q-vector", false); PROCESS_SWITCH( - AnalysisEventSelection, processSkimmedWithMultExtraZdc, - "Run event selection on DQ skimmed events, with mult extra and ZDC", - false); + AnalysisEventSelection, processSkimmedWithMultExtraZdc, + "Run event selection on DQ skimmed events, with mult extra and ZDC", + false); PROCESS_SWITCH( - AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, - "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", - false); + AnalysisEventSelection, processSkimmedWithMultExtraZdcFit, + "Run event selection on DQ skimmed events, with mult extra, ZDC and FIT", + false); PROCESS_SWITCH(AnalysisEventSelection, processSkimmedWithQvectorCentr, "Run event selection on DQ skimmed events, with Q-vector", false); @@ -1073,20 +1054,20 @@ struct AnalysisTrackSelection { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigCuts{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; o2::framework::Configurable fConfigCutsJSON{ - "cfgBarrelTrackCutsJSON", "", - "Additional list of barrel track cuts in JSON format"}; + "cfgBarrelTrackCutsJSON", "", + "Additional list of barrel track cuts in JSON format"}; o2::framework::Configurable fConfigAddTrackHistogram{ - "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; + "cfgAddTrackHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; o2::framework::Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; // Re-application of the track-to-collision time compatibility on the skimmed // associations. // timeMargin and nSigma must be <= the values used by @@ -1094,78 +1075,77 @@ struct AnalysisTrackSelection { // usePVAssociation and maxPvContributors must be identical to those values. struct : o2::framework::ConfigurableGroup { o2::framework::Configurable cfgAssocTimeCut{ - "cfgAssocTimeCut", false, - "If true, reject associations failing the time compatibility computed " - "with the parameters below"}; + "cfgAssocTimeCut", false, + "If true, reject associations failing the time compatibility computed " + "with the parameters below"}; o2::framework::Configurable cfgAssocTimeMargin{ - "cfgAssocTimeMargin", 0.f, - "time margin (ns); must be <= skimming timeMargin"}; + "cfgAssocTimeMargin", 0.f, + "time margin (ns); must be <= skimming timeMargin"}; o2::framework::Configurable cfgAssocNSigma{ - "cfgAssocNSigma", 4.f, - "nSigmaForTimeCompat; must be <= skimming value"}; + "cfgAssocNSigma", 4.f, + "nSigmaForTimeCompat; must be <= skimming value"}; o2::framework::Configurable cfgAssocBcWindowForOneSigma{ - "cfgAssocBcWindowForOneSigma", 60, - "bcWindowForOneSigma; must be equal to the skimming value"}; + "cfgAssocBcWindowForOneSigma", 60, + "bcWindowForOneSigma; must be equal to the skimming value"}; o2::framework::Configurable cfgAssocUsePVAssociation{ - "cfgAssocUsePVAssociation", 1, - "usePVAssociation; must be equal to the skimming value"}; + "cfgAssocUsePVAssociation", 1, + "usePVAssociation; must be equal to the skimming value"}; o2::framework::Configurable cfgAssocMaxPvContributorsForLowMultReassoc{ - "cfgAssocMaxPvContributorsForLowMultReassoc", 10, - "maxPvContributorsForLowMultReassoc; must be equal to the skimming " - "value"}; + "cfgAssocMaxPvContributorsForLowMultReassoc", 10, + "maxPvContributorsForLowMultReassoc; must be equal to the skimming " + "value"}; } fConfigAssocTime; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigCcdbPathTPC{ - "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", - "base path to the ccdb object"}; + "ccdb-path-tpc", "Users/z/zhxiong/TPCPID/PostCalib", + "base path to the ccdb object"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigComputeTPCpostCalib{ - "cfgTPCpostCalib", false, - "If true, compute TPC post-calibrated n-sigmas"}; + "cfgTPCpostCalib", false, + "If true, compute TPC post-calibrated n-sigmas"}; o2::framework::Configurable fConfigTPCpostCalibType{ - "cfgTPCpostCalibType", 1, - "1: (TPCncls,pIN,eta) calibration typically for pp, 2: " - "(eta,nPV,nLong,tLong) calibration typically for PbPb"}; + "cfgTPCpostCalibType", 1, + "1: (TPCncls,pIN,eta) calibration typically for pp, 2: " + "(eta,nPV,nLong,tLong) calibration typically for PbPb"}; o2::framework::Configurable fConfigTPCuseInterpolatedCalib{ - "cfgTPCpostCalibUseInterpolation", true, - "If true, use interpolated calibration values (default: true)"}; + "cfgTPCpostCalibUseInterpolation", true, + "If true, use interpolated calibration values (default: true)"}; o2::framework::Configurable grpmagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; // Track related options o2::framework::Configurable fPropTrack{ - "cfgPropTrack", true, - "Propgate tracks to associated collision to recalculate DCA and momentum " - "vector"}; + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and momentum " + "vector"}; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; - HistogramManager* fHistMan = nullptr; - std::vector fTrackCuts; + HistogramManager *fHistMan = nullptr; + std::vector fTrackCuts; int fCurrentRun = 0; // current run kept to detect run changes and trigger // loading params from CCDB std::map> - fNAssocsInBunch; // key: track global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: track global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: track global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: track global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1177,49 +1157,49 @@ struct AnalysisTrackSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fTrackCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra cuts via JSON TString addTrackCutsStr = fConfigCutsJSON.value; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { - fTrackCuts.push_back(dynamic_cast(t)); + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { + fTrackCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackBarrel_BeforeCuts;"; - for (auto const& cut : fTrackCuts) { + for (auto const &cut : fTrackCuts) { histDirNames += Form("TrackBarrel_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { histDirNames += - "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; + "TrackBarrel_AmbiguityInBunch;TrackBarrel_AmbiguityOutOfBunch;"; } DefineHistograms( - fHistMan, histDirNames.Data(), - fConfigAddTrackHistogram.value.data()); // define all histograms + fHistMan, histDirNames.Data(), + fConfigAddTrackHistogram.value.data()); // define all histograms o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1232,49 +1212,48 @@ struct AnalysisTrackSelection { template - void runTrackSelection(o2::aod::ReducedTracksAssoc const& assocs, - TEvents const& events, TTracks const& tracks) - { + void runTrackSelection(o2::aod::ReducedTracksAssoc const &assocs, + TEvents const &events, TTracks const &tracks) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); if (events.size() > 0 && fCurrentRun != events.begin().runNumber()) { if (fConfigComputeTPCpostCalib) { auto calibList = fCCDB->getForTimeStamp( - fConfigCcdbPathTPC.value, events.begin().timestamp()); + fConfigCcdbPathTPC.value, events.begin().timestamp()); VarManager::SetCalibrationObject( - VarManager::kTPCElectronMean, - calibList->FindObject("mean_map_electron")); + VarManager::kTPCElectronMean, + calibList->FindObject("mean_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCElectronSigma, - calibList->FindObject("sigma_map_electron")); + VarManager::kTPCElectronSigma, + calibList->FindObject("sigma_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); + VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); + VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonMean, - calibList->FindObject("mean_map_proton")); + VarManager::kTPCProtonMean, + calibList->FindObject("mean_map_proton")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonSigma, - calibList->FindObject("sigma_map_proton")); + VarManager::kTPCProtonSigma, + calibList->FindObject("sigma_map_proton")); if (fConfigTPCpostCalibType == 2) { VarManager::SetCalibrationObject( - VarManager::kTPCElectronStatus, - calibList->FindObject("status_map_electron")); + VarManager::kTPCElectronStatus, + calibList->FindObject("status_map_electron")); VarManager::SetCalibrationObject( - VarManager::kTPCPionStatus, - calibList->FindObject("status_map_pion")); + VarManager::kTPCPionStatus, + calibList->FindObject("status_map_pion")); VarManager::SetCalibrationObject( - VarManager::kTPCProtonStatus, - calibList->FindObject("status_map_proton")); + VarManager::kTPCProtonStatus, + calibList->FindObject("status_map_proton")); } VarManager::SetCalibrationType(fConfigTPCpostCalibType, fConfigTPCuseInterpolatedCalib); } auto grpmag = fCCDB->getForTimeStamp( - grpmagPath, events.begin().timestamp()); + grpmagPath, events.begin().timestamp()); if (grpmag != nullptr) { VarManager::SetMagneticField(grpmag->getNominalL3Field()); } else { @@ -1284,8 +1263,8 @@ struct AnalysisTrackSelection { std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), - metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", events.begin().runNumber()), + metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); @@ -1298,7 +1277,7 @@ struct AnalysisTrackSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { // if the event from this association is not selected, reject also the // association @@ -1320,11 +1299,11 @@ struct AnalysisTrackSelection { if (fConfigAssocTime.cfgAssocTimeCut) { auto origEvent = track.template reducedevent_as(); if (!VarManager::isBarrelAssocTimeCompatible( - track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, - fConfigAssocTime.cfgAssocTimeMargin, - fConfigAssocTime.cfgAssocBcWindowForOneSigma, - fConfigAssocTime.cfgAssocUsePVAssociation, - fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { + track, event, origEvent, fConfigAssocTime.cfgAssocNSigma, + fConfigAssocTime.cfgAssocTimeMargin, + fConfigAssocTime.cfgAssocBcWindowForOneSigma, + fConfigAssocTime.cfgAssocUsePVAssociation, + fConfigAssocTime.cfgAssocMaxPvContributorsForLowMultReassoc)) { trackSel(0); continue; } @@ -1344,7 +1323,7 @@ struct AnalysisTrackSelection { VarManager::ObjTypes::TrackEMCal)) { if (track.has_matchedEMCalCluster()) { auto cluster = - track.template matchedEMCalCluster_as(); + track.template matchedEMCalCluster_as(); VarManager::FillTrackEMCal(cluster, track.p(), track.emcalMatchDeltaEta(), track.emcalMatchDeltaPhi()); @@ -1379,7 +1358,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1388,7 +1367,7 @@ struct AnalysisTrackSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1398,7 +1377,7 @@ struct AnalysisTrackSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1408,12 +1387,12 @@ struct AnalysisTrackSelection { // Exceptionally, set the VarManager ambiguity number here, to be used // in histograms VarManager::fgValues[VarManager::kBarrelNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityInBunch", dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1422,14 +1401,14 @@ struct AnalysisTrackSelection { VarManager::FillTrack(track); // Exceptionally, set the VarManager ambiguity number here VarManager::fgValues[VarManager::kBarrelNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackBarrel_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : tracks) { + for (auto const &track : tracks) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1446,45 +1425,39 @@ struct AnalysisTrackSelection { } // end runTrackSelection() - void processSkimmed(o2::aod::ReducedTracksAssoc const& assocs, - MyEventsSelected const& events, - MyBarrelTracks const& tracks) - { + void processSkimmed(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracks const &tracks) { runTrackSelection(assocs, events, tracks); } - void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const& assocs, - MyEventsMultExtraSelected const& events, - MyBarrelTracks const& tracks) - { + void processSkimmedWithMultExtra(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsMultExtraSelected const &events, + MyBarrelTracks const &tracks) { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const& assocs, - MyEventsVtxCovSelected const& events, - MyBarrelTracksWithCov const& tracks) - { + void processSkimmedWithCov(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCov const &tracks) { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, - MyEventsSelected const& events, - MyBarrelTracksWithEMCal const& tracks, - o2::aod::ReducedEMCals const& /*emcals*/) - { + void processSkimmedWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsSelected const &events, + MyBarrelTracksWithEMCal const &tracks, + o2::aod::ReducedEMCals const & /*emcals*/) { runTrackSelection(assocs, events, tracks); } void - processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const& assocs, - MyEventsVtxCovSelected const& events, - MyBarrelTracksWithCovWithEMCal const& tracks, - o2::aod::ReducedEMCals const& /*emcals*/) - { + processSkimmedWithCovWithEMCal(o2::aod::ReducedTracksAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyBarrelTracksWithCovWithEMCal const &tracks, + o2::aod::ReducedEMCals const & /*emcals*/) { runTrackSelection( - assocs, events, tracks); + assocs, events, tracks); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -1520,47 +1493,46 @@ struct AnalysisMuonSelection { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigCuts{ - "cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; + "cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"}; o2::framework::Configurable fConfigCutsJSON{ - "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; + "cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; o2::framework::Configurable fConfigQA{"cfgQA", false, "If true, fill QA histograms"}; o2::framework::Configurable fConfigAddMuonHistogram{ - "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; + "cfgAddMuonHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigPublishAmbiguity{ - "cfgPublishAmbiguity", true, - "If true, publish ambiguity table and fill QA histograms"}; + "cfgPublishAmbiguity", true, + "If true, publish ambiguity table and fill QA histograms"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Service fCCDB{}; - HistogramManager* fHistMan = nullptr; - std::vector fMuonCuts; + HistogramManager *fHistMan = nullptr; + std::vector fMuonCuts; int fCurrentRun = 0; // current run kept to detect run changes and trigger // loading params from CCDB std::map> - fNAssocsInBunch; // key: muon global index, value: vector of global index - // for events associated in-bunch (events that have - // in-bunch pileup or splitting) + fNAssocsInBunch; // key: muon global index, value: vector of global index + // for events associated in-bunch (events that have + // in-bunch pileup or splitting) std::map> - fNAssocsOutOfBunch; // key: muon global index, value: vector of global - // index for events associated out-of-bunch (events - // that have no in-bunch pileup) + fNAssocsOutOfBunch; // key: muon global index, value: vector of global + // index for events associated out-of-bunch (events + // that have no in-bunch pileup) - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1572,49 +1544,49 @@ struct AnalysisMuonSelection { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fMuonCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // extra cuts from JSON TString addCutsStr = fConfigCutsJSON.value; if (addCutsStr != "") { - std::vector addCuts = - o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); - for (auto const& t : addCuts) { - fMuonCuts.push_back(dynamic_cast(t)); + std::vector addCuts = + o2::aod::dqcuts::GetCutsFromJSON(addCutsStr.Data()); + for (auto const &t : addCuts) { + fMuonCuts.push_back(dynamic_cast(t)); } } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(kTRUE); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); // set one histogram directory for each defined track cut TString histDirNames = "TrackMuon_BeforeCuts;"; - for (auto const& cut : fMuonCuts) { + for (auto const &cut : fMuonCuts) { histDirNames += Form("TrackMuon_%s;", cut->GetName()); } if (fConfigPublishAmbiguity) { histDirNames += - "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; + "TrackMuon_AmbiguityInBunch;TrackMuon_AmbiguityOutOfBunch;"; } DefineHistograms( - fHistMan, histDirNames.Data(), - fConfigAddMuonHistogram.value.data()); // define all histograms + fHistMan, histDirNames.Data(), + fConfigAddMuonHistogram.value.data()); // define all histograms o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } @@ -1626,9 +1598,8 @@ struct AnalysisMuonSelection { template - void runMuonSelection(o2::aod::ReducedMuonsAssoc const& assocs, - TEvents const& events, TMuons const& muons) - { + void runMuonSelection(o2::aod::ReducedMuonsAssoc const &assocs, + TEvents const &events, TMuons const &muons) { fNAssocsInBunch.clear(); fNAssocsOutOfBunch.clear(); @@ -1641,7 +1612,7 @@ struct AnalysisMuonSelection { auto filterMap = static_cast(0); int iCut = 0; - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { auto event = assoc.template reducedevent_as(); if (!event.isEventSelected_bit(0)) { muonSel(0); @@ -1680,7 +1651,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsInBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsInBunch[track.globalIndex()]; + auto &evVector = fNAssocsInBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } else { @@ -1689,7 +1660,7 @@ struct AnalysisMuonSelection { std::vector evVector = {event.globalIndex()}; fNAssocsOutOfBunch[track.globalIndex()] = evVector; } else { - auto& evVector = fNAssocsOutOfBunch[track.globalIndex()]; + auto &evVector = fNAssocsOutOfBunch[track.globalIndex()]; evVector.push_back(event.globalIndex()); } } @@ -1699,7 +1670,7 @@ struct AnalysisMuonSelection { if (fConfigPublishAmbiguity) { // QA the collision-track associations if (fConfigQA) { - for (auto const& [trackIdx, evIndices] : fNAssocsInBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsInBunch) { if (evIndices.size() == 1) { continue; } @@ -1707,12 +1678,12 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsInBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackMuon_AmbiguityInBunch", dqtablereader_helpers::varValues()); } // end loop over in-bunch ambiguous tracks - for (auto const& [trackIdx, evIndices] : fNAssocsOutOfBunch) { + for (auto const &[trackIdx, evIndices] : fNAssocsOutOfBunch) { if (evIndices.size() == 1) { continue; } @@ -1720,14 +1691,14 @@ struct AnalysisMuonSelection { VarManager::ResetValues(0, VarManager::kNMuonTrackVariables); VarManager::FillTrack(track); VarManager::fgValues[VarManager::kMuonNAssocsOutOfBunch] = - static_cast(evIndices.size()); + static_cast(evIndices.size()); fHistMan->FillHistClass("TrackMuon_AmbiguityOutOfBunch", dqtablereader_helpers::varValues()); } // end loop over out-of-bunch ambiguous tracks } // publish the ambiguity table - for (auto const& track : muons) { + for (auto const &track : muons) { int8_t nInBunch = 0; if (fNAssocsInBunch.find(track.globalIndex()) != fNAssocsInBunch.end()) { @@ -1743,15 +1714,13 @@ struct AnalysisMuonSelection { } } - void processSkimmed(o2::aod::ReducedMuonsAssoc const& assocs, - MyEventsVtxCovSelected const& events, - MyMuonTracksWithCov const& muons) - { + void processSkimmed(o2::aod::ReducedMuonsAssoc const &assocs, + MyEventsVtxCovSelected const &events, + MyMuonTracksWithCov const &muons) { runMuonSelection( - assocs, events, muons); + assocs, events, muons); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -1769,28 +1738,27 @@ struct AnalysisMuonSelection { // analysis. struct AnalysisPrefilterSelection { o2::framework::Produces - prefilter; // joinable with o2::aod::ReducedTracksAssoc + prefilter; // joinable with o2::aod::ReducedTracksAssoc // Configurables o2::framework::Configurable fConfigPrefilterTrackCut{ - "cfgPrefilterTrackCut", "", "Prefilter track cut"}; + "cfgPrefilterTrackCut", "", "Prefilter track cut"}; o2::framework::Configurable fConfigPrefilterPairCut{ - "cfgPrefilterPairCut", "", "Prefilter pair cut"}; + "cfgPrefilterPairCut", "", "Prefilter pair cut"}; o2::framework::Configurable fConfigTrackCuts{ - "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; + "cfgTrackCuts", "", "Track cuts for which to run the prefilter"}; // TODO: Add prefilter pair cut via JSON std::map fPrefilterMap; - AnalysisCompositeCut* fPairCut = nullptr; + AnalysisCompositeCut *fPairCut = nullptr; uint32_t fPrefilterMask = 0; int fPrefilterCutBit = -1; o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -1799,7 +1767,7 @@ struct AnalysisPrefilterSelection { bool runPrefilter = true; // get the list of track cuts to be prefiltered TString trackCutsStr = fConfigTrackCuts.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); if (objArrayTrackCuts == nullptr) { @@ -1825,18 +1793,18 @@ struct AnalysisPrefilterSelection { // to mark just the ones we want to apply a prefilter on std::string trackCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", trackCuts, - false); + context, "analysis-track-selection", "cfgTrackCuts", trackCuts, + false); TString allTrackCutsStr = trackCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", - trackCuts, false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + trackCuts, false); TString addTrackCutsStr = trackCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { allTrackCutsStr += Form(",%s", t->GetName()); } } @@ -1844,7 +1812,7 @@ struct AnalysisPrefilterSelection { std::unique_ptr objArray(allTrackCutsStr.Tokenize(",")); if (objArray == nullptr) { LOG(fatal) - << " Not getting any track cuts from the barrel-track-selection "; + << " Not getting any track cuts from the barrel-track-selection "; } if (objArray->FindObject(prefilterTrackCutStr.Data()) == nullptr) { LOG(fatal) << " Prefilter track cut not among the cuts calculated by " @@ -1872,25 +1840,24 @@ struct AnalysisPrefilterSelection { } VarManager::SetUseVars( - AnalysisCut::fgUsedVars); // provide the list of required variables so - // that VarManager knows what to fill + AnalysisCut::fgUsedVars); // provide the list of required variables so + // that VarManager knows what to fill VarManager::SetupTwoProngDCAFitter( - 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - true); // TODO: get these parameters from Configurables + 5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + true); // TODO: get these parameters from Configurables // VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, // true); } template void runPrefilter(o2::soa::Join const& assocs, - TTracks const& /*tracks*/) - { + o2::aod::BarrelTrackCuts> const &assocs, + TTracks const & /*tracks*/) { if (fPrefilterCutBit < 0 || fPrefilterMask == 0) { return; } - for (auto const& [assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[assoc1, assoc2] : o2::soa::combinations(assocs, assocs)) { auto track1 = assoc1.template reducedtrack_as(); auto track2 = assoc2.template reducedtrack_as(); @@ -1904,9 +1871,9 @@ struct AnalysisPrefilterSelection { // here we check the cuts fulfilled by both tracks, for both the tight and // loose selections uint32_t track1Candidate = - (assoc1.isBarrelSelected_raw() & fPrefilterMask); + (assoc1.isBarrelSelected_raw() & fPrefilterMask); uint32_t track2Candidate = - (assoc2.isBarrelSelected_raw() & fPrefilterMask); + (assoc2.isBarrelSelected_raw() & fPrefilterMask); bool track1Loose = assoc1.isBarrelSelected_bit(fPrefilterCutBit); bool track2Loose = assoc2.isBarrelSelected_bit(fPrefilterCutBit); @@ -1935,15 +1902,15 @@ struct AnalysisPrefilterSelection { } void processBarrelSkimmed( - MyEventsBasic const& events, - o2::soa::Join const& assocs, - MyBarrelTracks const& tracks) - { + MyEventsBasic const &events, + o2::soa::Join const + &assocs, + MyBarrelTracks const &tracks) { fPrefilterMap.clear(); - for (auto const& event : events) { + for (auto const &event : events) { auto groupedAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); if (groupedAssocs.size() > 1) { runPrefilter(groupedAssocs, tracks); } @@ -1957,7 +1924,7 @@ struct AnalysisPrefilterSelection { prefilter(mymap); } } else { - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { // TODO: just use the index from the assoc (no need to cast the whole // track) auto track = assoc.template reducedtrack_as(); @@ -1975,8 +1942,7 @@ struct AnalysisPrefilterSelection { } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -2009,9 +1975,9 @@ struct AnalysisSameEventPairing { o2::framework::Produces dileptonEventInfoList; o2::framework::Produces dileptonMiniTree; - o2::base::MatLayerCylSet* fLUT = nullptr; - TH1D* ResoFlowSP = nullptr; - TH1D* ResoFlowEP = nullptr; + o2::base::MatLayerCylSet *fLUT = nullptr; + TH1D *ResoFlowSP = nullptr; + TH1D *ResoFlowEP = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -2019,154 +1985,154 @@ struct AnalysisSameEventPairing { struct : o2::framework::ConfigurableGroup { o2::framework::Configurable track{ - "cfgTrackCuts", "jpsiO2MCdebugCuts2", - "Comma separated list of barrel track cuts"}; + "cfgTrackCuts", "jpsiO2MCdebugCuts2", + "Comma separated list of barrel track cuts"}; o2::framework::Configurable muon{ - "cfgMuonCuts", "", "Comma separated list of muon cuts"}; + "cfgMuonCuts", "", "Comma separated list of muon cuts"}; o2::framework::Configurable pair{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; o2::framework::Configurable qVector{ - "cfgQvectorTrackCut", "", - "Track cut of Q-vector, enable this if you want to remove the " - "auto-correlation in TPC"}; + "cfgQvectorTrackCut", "", + "Track cut of Q-vector, enable this if you want to remove the " + "auto-correlation in TPC"}; o2::framework::Configurable event{ - "cfgRemoveCollSplittingCandidates", false, - "If true, remove collision splitting candidates as determined by the " - "event selection task upstream"}; + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; // TODO: Add pair cuts via JSON } fConfigCuts; o2::framework::Configurable fConfigMixingDepth{ - "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; + "cfgMixingDepth", 100, "Number of Events stored for event mixing"}; o2::framework::Configurable fConfigMixingVariables{ - "cfgMixingVars", "", - "Mixing configs separated by a comma, default no mixing"}; + "cfgMixingVars", "", + "Mixing configs separated by a comma, default no mixing"}; o2::framework::Configurable fConfigMixingVariablesJson{ - "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; + "cfgMixingVarsJSON", "", "Mixing configs in JSON format"}; o2::framework::Configurable fConfigRunMixingAcrossTFs{ - "cfgRunMixingAcrossTFs", false, - "If true, run event mixing using the MixingHandler which accumulates " - "events across multiple TFs"}; + "cfgRunMixingAcrossTFs", false, + "If true, run event mixing using the MixingHandler which accumulates " + "events across multiple TFs"}; // o2::framework::Configurable // fConfigAddEventMixingHistogram{"cfgAddEventMixingHistogram", "", "Comma // separated list of histograms"}; o2::framework::Configurable fConfigAddSEPHistogram{ - "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; + "cfgAddSEPHistogram", "", "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigQA{ - "cfgQA", true, "If true, fill output histograms"}; + "cfgQA", true, "If true, fill output histograms"}; o2::framework::Configurable fConfigAmbiguousMuonHistograms{ - "cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; + "cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"}; // option for TR pair fill o2::framework::Configurable fConfigTRPairs{ - "cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; + "cfgFillTRPairs", false, "If true, fill Track rotation pairs"}; o2::framework::Configurable fConfigNRotations{ - "cfgNRotations", 3, - "Number of rotations for event plane preserving track rotation method, " - "only 1 or 3 are supported"}; + "cfgNRotations", 3, + "Number of rotations for event plane preserving track rotation method, " + "only 1 or 3 are supported"}; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable url{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable grpMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable lutPath{ - "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; o2::framework::Configurable GrpLhcIfPath{ - "grplhcif", "GLO/Config/GRPLHCIF", - "Path on the CCDB for the GRPLHCIF object"}; + "grplhcif", "GLO/Config/GRPLHCIF", + "Path on the CCDB for the GRPLHCIF object"}; o2::framework::Configurable efficiencyPath{ - "effHistPath", "Users/z/zhxiong/efficiency", - "Path on the CCDB for the efficiency histograms"}; + "effHistPath", "Users/z/zhxiong/efficiency", + "Path on the CCDB for the efficiency histograms"}; o2::framework::Configurable flowPath{ - "flowPath", "Users/y/yiping/FlowResolution", - "Path to the flow resolution object"}; + "flowPath", "Users/y/yiping/FlowResolution", + "Path to the flow resolution object"}; o2::framework::Configurable phiPath{ - "phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", - "Path to load phi distribution for track rotation"}; + "phiPath", "Users/h/hxiaoyu/TrackPhi/LHC23", + "Path to load phi distribution for track rotation"}; } fConfigCCDB; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable flatTables{ - "cfgFlatTables", false, - "Produce a single flat tables with all relevant information of the " - "pairs and single tracks"}; + "cfgFlatTables", false, + "Produce a single flat tables with all relevant information of the " + "pairs and single tracks"}; o2::framework::Configurable polarTables{ - "cfgPolarTables", false, - "Produce tables with dilepton polarization information"}; + "cfgPolarTables", false, + "Produce tables with dilepton polarization information"}; o2::framework::Configurable useKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is " - "used by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is " + "used by default)"}; o2::framework::Configurable useAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; o2::framework::Configurable noCorr{ - "cfgNoCorrFwdProp", false, - "Do not correct for MCS effects in track propagation"}; + "cfgNoCorrFwdProp", false, + "Do not correct for MCS effects in track propagation"}; o2::framework::Configurable collisionSystem{ - "syst", "pp", "Collision system, pp or PbPb"}; + "syst", "pp", "Collision system, pp or PbPb"}; o2::framework::Configurable centerMassEnergy{ - "energy", 13600, "Center of mass energy in GeV"}; + "energy", 13600, "Center of mass energy in GeV"}; o2::framework::Configurable propTrack{ - "cfgPropTrack", true, - "Propgate tracks to associated collision to recalculate DCA and " - "momentum vector"}; + "cfgPropTrack", true, + "Propgate tracks to associated collision to recalculate DCA and " + "momentum vector"}; o2::framework::Configurable useRemoteCollisionInfo{ - "cfgUseRemoteCollisionInfo", false, - "Use remote collision information from CCDB"}; + "cfgUseRemoteCollisionInfo", false, + "Use remote collision information from CCDB"}; o2::framework::Configurable useEfficiencyWeighting{ - "cfgUseEfficiencyWeighting", false, - "Apply efficiency weighting to the pairs from CCDB"}; + "cfgUseEfficiencyWeighting", false, + "Apply efficiency weighting to the pairs from CCDB"}; o2::framework::Configurable efficiencyType{ - "cfgEfficiencyType", 0, - "Type of efficiency to apply from CCDB: 0 no efficiency, 1 " - "pt-cent-costhetastar"}; + "cfgEfficiencyType", 0, + "Type of efficiency to apply from CCDB: 0 no efficiency, 1 " + "pt-cent-costhetastar"}; o2::framework::Configurable useFlowReso{ - "cfgUseFlowReso", false, "Use remote flow information from CCDB"}; + "cfgUseFlowReso", false, "Use remote flow information from CCDB"}; o2::framework::Configurable usePhiDistribution{ - "cfgUsePhiDistribution", false, - "Use phi distribution to correct track rotation"}; + "cfgUsePhiDistribution", false, + "Use phi distribution to correct track rotation"}; } fConfigOptions; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable applyBDT{"applyBDT", false, "Flag to apply ML selections"}; o2::framework::Configurable fConfigBdtCutsJSON{ - "fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; + "fConfigBdtCutsJSON", "", "Additional list of BDT cuts in JSON format"}; o2::framework::Configurable> modelPathsCCDB{ - "modelPathsCCDB", - std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, - "Paths of models on CCDB"}; + "modelPathsCCDB", + std::vector{"Users/j/jseo/ML/PbPbPsi/default/"}, + "Paths of models on CCDB"}; o2::framework::Configurable timestampCCDB{ - "timestampCCDB", -1, - "timestamp of the ONNX file for ML model used to query in CCDB"}; + "timestampCCDB", -1, + "timestamp of the ONNX file for ML model used to query in CCDB"}; o2::framework::Configurable loadModelsFromCCDB{ - "loadModelsFromCCDB", false, - "Flag to enable or disable the loading of models from CCDB"}; + "loadModelsFromCCDB", false, + "Flag to enable or disable the loading of models from CCDB"}; } fConfigML; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable fConfigMiniTree{ - "useMiniTree.cfgMiniTree", false, - "Produce a single flat table with minimal information for analysis"}; + "useMiniTree.cfgMiniTree", false, + "Produce a single flat table with minimal information for analysis"}; o2::framework::Configurable fConfigMiniTreeMinMass{ - "useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; + "useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"}; o2::framework::Configurable fConfigMiniTreeMaxMass{ - "useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; + "useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"}; } useMiniTree; o2::framework::Service fCCDB{}; o2::ccdb::CcdbApi fCCDBApi; o2::framework::expressions::Filter - filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + filterEventSelected = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; MixingHandler fMixingHandler; o2::analysis::DQMlResponse fDQMlResponse; @@ -2183,14 +2149,14 @@ struct AnalysisSameEventPairing { std::map, uint32_t> fAmbiguousPairs; uint32_t fTrackFilterMask = - 0; // mask for the track cuts required in this task to be applied on the - // barrel cuts produced upstream + 0; // mask for the track cuts required in this task to be applied on the + // barrel cuts produced upstream uint32_t fMuonFilterMask = - 0; // mask for the muon cuts required in this task to be applied on the - // muon cuts produced upstream + 0; // mask for the muon cuts required in this task to be applied on the + // muon cuts produced upstream uint32_t fQvectorFilterMask = - 0; // mask for the track cuts applied in TPC Q-vector calculation, used to - // remove auto-correlation in flow analysis + 0; // mask for the track cuts applied in TPC Q-vector calculation, used to + // remove auto-correlation in flow analysis int fNCutsBarrel = 0; int fNCutsMuon = 0; int fNPairCuts = 0; @@ -2206,48 +2172,47 @@ struct AnalysisSameEventPairing { o2::framework::NoBinningPolicy hashBin; o2::framework::Preslice< - o2::soa::Join> - trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice< - o2::soa::Join> - muonAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + muonAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { fEnableBarrelHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processBarrelOnlySkimmed") || - context.mOptions.get("processBarrelOnlyWithCollSkimmed") || - context.mOptions.get("processBarrelOnlySkimmedNoCov") || - context.mOptions.get( - "processBarrelOnlySkimmedNoCovWithMultExtra") || - context.mOptions.get( - "processBarrelOnlyWithQvectorCentrSkimmedNoCov") || - context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processBarrelOnlySkimmed") || + context.mOptions.get("processBarrelOnlyWithCollSkimmed") || + context.mOptions.get("processBarrelOnlySkimmedNoCov") || + context.mOptions.get( + "processBarrelOnlySkimmedNoCovWithMultExtra") || + context.mOptions.get( + "processBarrelOnlyWithQvectorCentrSkimmedNoCov") || + context.mOptions.get("processBarrelOnlyWithQvectorCentrSkimmed"); fEnableBarrelMixingHistos = - context.mOptions.get("processMixingAllSkimmed") || - context.mOptions.get("processMixingBarrelSkimmed") || - context.mOptions.get("processMixingBarrelSkimmedFlow") || - context.mOptions.get( - "processMixingBarrelWithQvectorCentrSkimmedNoCov"); + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingBarrelSkimmed") || + context.mOptions.get("processMixingBarrelSkimmedFlow") || + context.mOptions.get( + "processMixingBarrelWithQvectorCentrSkimmedNoCov"); fEnableBarrelMixingHistos |= fConfigRunMixingAcrossTFs; fEnableMuonHistos = - context.mOptions.get("processAllSkimmed") || - context.mOptions.get("processMuonOnlySkimmed") || - context.mOptions.get("processMuonOnlySkimmedMultExtra") || - context.mOptions.get("processMuonOnlySkimmedFlow") || - context.mOptions.get("processMuonOnlyVertexingSkimmed"); + context.mOptions.get("processAllSkimmed") || + context.mOptions.get("processMuonOnlySkimmed") || + context.mOptions.get("processMuonOnlySkimmedMultExtra") || + context.mOptions.get("processMuonOnlySkimmedFlow") || + context.mOptions.get("processMuonOnlyVertexingSkimmed"); fEnableMuonMixingHistos = - context.mOptions.get("processMixingAllSkimmed") || - context.mOptions.get("processMixingMuonSkimmed") || - context.mOptions.get("processMixingMuonSkimmedFlow"); + context.mOptions.get("processMixingAllSkimmed") || + context.mOptions.get("processMixingMuonSkimmed") || + context.mOptions.get("processMixingMuonSkimmedFlow"); fEnableBarrelMuonHistos = - context.mOptions.get("processElectronMuonSkimmed"); + context.mOptions.get("processElectronMuonSkimmed"); fEnableBarrelMuonMixingHistos = - context.mOptions.get("processMixingElectronMuonSkimmed"); + context.mOptions.get("processMixingElectronMuonSkimmed"); if (context.mOptions.get("processDummy")) { if (fEnableBarrelHistos || fEnableBarrelMixingHistos || @@ -2284,7 +2249,7 @@ struct AnalysisSameEventPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - *o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + *o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } @@ -2293,12 +2258,12 @@ struct AnalysisSameEventPairing { // and make a mask for active cuts (barrel and muon selection tasks may // run more cuts, needed for other analyses) TString trackCutsStr = fConfigCuts.track.value; - TObjArray* objArrayTrackCuts = nullptr; + TObjArray *objArrayTrackCuts = nullptr; if (!trackCutsStr.IsNull()) { objArrayTrackCuts = trackCutsStr.Tokenize(","); } TString muonCutsStr = fConfigCuts.muon.value; - TObjArray* objArrayMuonCuts = nullptr; + TObjArray *objArrayMuonCuts = nullptr; if (!muonCutsStr.IsNull()) { objArrayMuonCuts = muonCutsStr.Tokenize(","); } @@ -2314,11 +2279,11 @@ struct AnalysisSameEventPairing { std::vector onnxFileNames; auto config = o2::aod::dqmlcuts::GetBdtScoreCutsAndConfigFromJSON( - fConfigML.fConfigBdtCutsJSON.value.c_str()); + fConfigML.fConfigBdtCutsJSON.value.c_str()); if (std::holds_alternative( - config)) { - auto& cfg = std::get(config); + config)) { + auto &cfg = std::get(config); binsMl = cfg.binsMl; nClassesMl = 1; cutsMl = cfg.cutsMl; @@ -2330,8 +2295,8 @@ struct AnalysisSameEventPairing { fDQMlResponse.setCentType(cfg.centType); LOG(info) << "Using BDT cuts for binary classification"; } else { - auto& cfg = - std::get(config); + auto &cfg = + std::get(config); binsMl = cfg.binsMl; nClassesMl = 3; cutsMl = cfg.cutsMl; @@ -2360,17 +2325,17 @@ struct AnalysisSameEventPairing { // get the barrel track selection cuts std::string tempCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, - false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2403,45 +2368,45 @@ struct AnalysisSameEventPairing { names[5].Data()); if (fConfigTRPairs) { names.push_back( - Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelTRPM_%s", objArray->At(icut)->GetName())); names.push_back(Form("PairsBarrelTRPM_ambiguousextra_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelTR_MEPM_%s", objArray->At(icut)->GetName())); histNames += Form("%s;%s;%s;", names[6].Data(), names[7].Data(), names[8].Data()); } if (fEnableBarrelMixingHistos) { names.push_back( - Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEPM_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEPP_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); + Form("PairsBarrelMEMM_%s", objArray->At(icut)->GetName())); histNames += - Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), - names[(fConfigTRPairs ? 10 : 7)].Data(), - names[(fConfigTRPairs ? 11 : 8)].Data()); + Form("%s;%s;%s;", names[(fConfigTRPairs ? 9 : 6)].Data(), + names[(fConfigTRPairs ? 10 : 7)].Data(), + names[(fConfigTRPairs ? 11 : 8)].Data()); } fTrackHistNames[icut] = names; if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsBarrelSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsBarrelSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fTrackHistNames[fNCutsBarrel + icut * fNPairCuts + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) } // end if enableBarrelHistos @@ -2451,16 +2416,16 @@ struct AnalysisSameEventPairing { // get the muon track selection cuts o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); + context, "analysis-muon-selection", "cfgMuonCuts", tempCuts, false); tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); + context, "analysis-muon-selection", "cfgMuonCutsJSON", tempCuts, false); TString addMuonCutsStr = tempCuts; if (addMuonCutsStr != "") { - std::vector addMuonCuts = - o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); - for (auto const& t : addMuonCuts) { + std::vector addMuonCuts = + o2::aod::dqcuts::GetCutsFromJSON(addMuonCutsStr.Data()); + for (auto const &t : addMuonCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -2483,11 +2448,11 @@ struct AnalysisSameEventPairing { names[2].Data()); if (fEnableMuonMixingHistos) { names.push_back( - Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEPM_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEPP_%s", objArray->At(icut)->GetName())); names.push_back( - Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); + Form("PairsMuonMEMM_%s", objArray->At(icut)->GetName())); histNames += Form("%s;%s;%s;", names[3].Data(), names[4].Data(), names[5].Data()); } @@ -2511,17 +2476,17 @@ struct AnalysisSameEventPairing { names.push_back(Form("PairsMuonSEMM_unambiguous_%s", objArray->At(icut)->GetName())); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), - names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), - names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 6 : 3)].Data(), + names[(fEnableMuonMixingHistos ? 7 : 4)].Data(), + names[(fEnableMuonMixingHistos ? 8 : 5)].Data()); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), - names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), - names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 9 : 6)].Data(), + names[(fEnableMuonMixingHistos ? 10 : 7)].Data(), + names[(fEnableMuonMixingHistos ? 11 : 8)].Data()); histNames += Form( - "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), - names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), - names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); + "%s;%s;%s;", names[(fEnableMuonMixingHistos ? 12 : 9)].Data(), + names[(fEnableMuonMixingHistos ? 13 : 10)].Data(), + names[(fEnableMuonMixingHistos ? 14 : 11)].Data()); if (fEnableMuonMixingHistos) { names.push_back(Form("PairsMuonMEPM_ambiguousInBunch_%s", objArray->At(icut)->GetName())); @@ -2553,21 +2518,21 @@ struct AnalysisSameEventPairing { if (!cutNamesStr.IsNull()) { // if pair cuts std::unique_ptr objArrayPair( - cutNamesStr.Tokenize(",")); + cutNamesStr.Tokenize(",")); fNPairCuts = objArrayPair->GetEntries(); for (int iPairCut = 0; iPairCut < fNPairCuts; ++iPairCut) { // loop over pair cuts names = { - Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName()), - Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), - objArrayPair->At(iPairCut)->GetName())}; + Form("PairsMuonSEPM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEPP_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName()), + Form("PairsMuonSEMM_%s_%s", objArray->At(icut)->GetName(), + objArrayPair->At(iPairCut)->GetName())}; histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data()); fMuonHistNames[fNCutsMuon + icut * fNCutsMuon + iPairCut] = - names; + names; } // end loop (pair cuts) } // end if (pair cuts) } @@ -2614,7 +2579,7 @@ struct AnalysisSameEventPairing { VarManager::SetupFwdDCAFitterNoCorr(); } else { fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigCCDB.lutPath)); + fCCDB->get(fConfigCCDB.lutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); } @@ -2692,43 +2657,42 @@ struct AnalysisSameEventPairing { if (fConfigQA) { fHistMan = - new HistogramManager("analysisHistos", "aa", VarManager::kNVars); + new HistogramManager("analysisHistos", "aa", VarManager::kNVars); fHistMan->SetUseDefaultVariableNames(true); fHistMan->SetDefaultVarNames(dqtablereader_helpers::varNames(), dqtablereader_helpers::varUnits()); VarManager::SetCollisionSystem( - (TString)fConfigOptions.collisionSystem, - fConfigOptions.centerMassEnergy); // set collision system and center - // of mass energy + (TString)fConfigOptions.collisionSystem, + fConfigOptions.centerMassEnergy); // set collision system and center + // of mass energy DefineHistograms( - fHistMan, histNames.Data(), - fConfigAddSEPHistogram.value.data()); // define all histograms + fHistMan, histNames.Data(), + fConfigAddSEPHistogram.value.data()); // define all histograms if (fEnableBarrelHistos) { DefineHistograms( - fHistMan, "PairingSEQA", - "sameevent-pairing"); // histograms for QA of the pairing + fHistMan, "PairingSEQA", + "sameevent-pairing"); // histograms for QA of the pairing } if (fEnableBarrelMixingHistos) { DefineHistograms( - fHistMan, "PairingMEQA", - "mixedevent-pairing"); // histograms for QA of the pairing + fHistMan, "PairingMEQA", + "mixedevent-pairing"); // histograms for QA of the pairing } o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } } void initParamsFromCCDB(uint64_t timestamp, int runNumber, - bool withTwoProngFitter = true) - { + bool withTwoProngFitter = true) { auto grpmag = fCCDB->getForTimeStamp( - fConfigCCDB.grpMagPath, timestamp); + fConfigCCDB.grpMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -2741,37 +2705,37 @@ struct AnalysisSameEventPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // TODO: get these parameters from Configurables VarManager::SetupTwoProngFwdDCAFitter(magField, true, 200.0f, 1.0e-3f, 0.9f, fConfigOptions.useAbsDCA.value); } } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigOptions.useAbsDCA - .value); // needed because take in varmanager Bz from - // fgFitterTwoProngBarrel for PhiV calculations + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigOptions.useAbsDCA + .value); // needed because take in varmanager Bz from + // fgFitterTwoProngBarrel for PhiV calculations } std::map metadataRCT, header; header = fCCDBApi.retrieveHeaders( - Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); + Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1); uint64_t sor = std::atol(header["SOR"].c_str()); uint64_t eor = std::atol(header["EOR"].c_str()); VarManager::SetSORandEOR(sor, eor); if (fConfigOptions.useRemoteCollisionInfo) { auto grpo = fCCDB->getForTimeStamp( - fConfigCCDB.GrpLhcIfPath, timestamp); + fConfigCCDB.GrpLhcIfPath, timestamp); VarManager::SetCollisionSystem(grpo); } if (fConfigOptions.useEfficiencyWeighting) { auto effList = fCCDB->getForTimeStamp( - fConfigCCDB.efficiencyPath.value, timestamp); + fConfigCCDB.efficiencyPath.value, timestamp); VarManager::SetEfficiencyObject(fConfigOptions.efficiencyType.value, effList->FindObject("efficiency")); } @@ -2781,9 +2745,9 @@ struct AnalysisSameEventPairing { TString ccdbPathFlowSP = Form("%s/ScalarProduct", PathFlow.Data()); TString ccdbPathFlowEP = Form("%s/EventPlane", PathFlow.Data()); ResoFlowSP = - fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathFlowSP.Data(), timestamp); ResoFlowEP = - fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathFlowEP.Data(), timestamp); if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { LOGF(fatal, "Flow resolution histograms not available in CCDB at " @@ -2797,9 +2761,9 @@ struct AnalysisSameEventPairing { TString ccdbPathPhiPosi = Form("%s/hPtPhiPositive", PathPhi.Data()); TString ccdbPathPhiNega = Form("%s/hPtPhiNegative", PathPhi.Data()); auto phiPosi = - fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathPhiPosi.Data(), timestamp); auto phiNega = - fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); + fCCDB->getForTimeStamp(ccdbPathPhiNega.Data(), timestamp); if (phiPosi == nullptr || phiNega == nullptr) { LOGF(fatal, "Phi distribution histograms not available in CCDB at " @@ -2816,11 +2780,10 @@ struct AnalysisSameEventPairing { template - void runSameEventPairing(TEvents const& events, - o2::framework::Preslice& preslice, - TTrackAssocs const& assocs, - TTracks const& /*tracks*/) - { + void runSameEventPairing(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const &assocs, + TTracks const & /*tracks*/) { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -2858,7 +2821,7 @@ struct AnalysisSameEventPairing { auto twoTrackFilter = static_cast(0); auto dileptonMcDecision = static_cast( - 0); // placeholder, copy of the dqEfficiency.cxx one + 0); // placeholder, copy of the dqEfficiency.cxx one int sign1 = 0; int sign2 = 0; // Reserve capacity for the output tables to avoid repeated reallocations @@ -2866,11 +2829,11 @@ struct AnalysisSameEventPairing { // only — pages are not faulted in until written. // estimate reserved size int64_t reserveSize = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (event.isEventSelected_bit(0)) { auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex()); size_t nGood = 0; - for (auto const& t : groupedAssocs) { + for (auto const &t : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { if (t.isBarrelSelected_raw()) { nGood++; @@ -2907,17 +2870,17 @@ struct AnalysisSameEventPairing { fAmbiguousPairs.clear(); constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); // constexpr bool fillFlowReso = eventHasQvector || eventHasQvectorCentr; bool isSelectedBDT = false; fNPairPerEvent = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -2939,26 +2902,25 @@ struct AnalysisSameEventPairing { if (fConfigOptions.useFlowReso) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { - LOGF(fatal, - "Flow resolution histograms are not available, cannot " - "fill flow variables!"); + LOGF(fatal, "Flow resolution histograms are not available, cannot " + "fill flow variables!"); } VarManager::FillEventFlowResoFactor(ResoFlowSP, ResoFlowEP); } int mixingCategory = -1; if (fConfigRunMixingAcrossTFs) { mixingCategory = fMixingHandler.FindEventCategory( - dqtablereader_helpers::varValues()); + dqtablereader_helpers::varValues()); } bool isFirst = true; - for (auto const& [a1, a2] : + for (auto const &[a1, a2] : o2::soa::combinations(groupedAssocs, groupedAssocs)) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue @@ -3038,38 +3000,38 @@ struct AnalysisSameEventPairing { } if (fConfigOptions.polarTables.value) { dileptonPolarList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), - twoTrackFilter, VarManager::fgValues[VarManager::kCosThetaHE], - VarManager::fgValues[VarManager::kPhiHE], - VarManager::fgValues[VarManager::kPhiTildeHE], - VarManager::fgValues[VarManager::kCosThetaCS], - VarManager::fgValues[VarManager::kPhiCS], - VarManager::fgValues[VarManager::kPhiTildeCS], - VarManager::fgValues[VarManager::kCosThetaPP], - VarManager::fgValues[VarManager::kPhiPP], - VarManager::fgValues[VarManager::kPhiTildePP], - VarManager::fgValues[VarManager::kCosThetaRM], - VarManager::fgValues[VarManager::kCosThetaStarTPC], - VarManager::fgValues[VarManager::kCosThetaStarFT0A], - VarManager::fgValues[VarManager::kCosThetaStarFT0C], - VarManager::fgValues[VarManager::kCosThetaStarRandom]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], t1.sign() + t2.sign(), + twoTrackFilter, VarManager::fgValues[VarManager::kCosThetaHE], + VarManager::fgValues[VarManager::kPhiHE], + VarManager::fgValues[VarManager::kPhiTildeHE], + VarManager::fgValues[VarManager::kCosThetaCS], + VarManager::fgValues[VarManager::kPhiCS], + VarManager::fgValues[VarManager::kPhiTildeCS], + VarManager::fgValues[VarManager::kCosThetaPP], + VarManager::fgValues[VarManager::kPhiPP], + VarManager::fgValues[VarManager::kPhiTildePP], + VarManager::fgValues[VarManager::kCosThetaRM], + VarManager::fgValues[VarManager::kCosThetaStarTPC], + VarManager::fgValues[VarManager::kCosThetaStarFT0A], + VarManager::fgValues[VarManager::kCosThetaStarFT0C], + VarManager::fgValues[VarManager::kCosThetaStarRandom]); dileptonEventInfoList( - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxZ], - VarManager::fgValues[VarManager::kVtxNcontrib], - VarManager::fgValues[VarManager::kRandomPsi2], - VarManager::fgValues[VarManager::kPsi2A], - VarManager::fgValues[VarManager::kPsi2B], - VarManager::fgValues[VarManager::kPsi2C]); + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxZ], + VarManager::fgValues[VarManager::kVtxNcontrib], + VarManager::fgValues[VarManager::kRandomPsi2], + VarManager::fgValues[VarManager::kPsi2A], + VarManager::fgValues[VarManager::kPsi2B], + VarManager::fgValues[VarManager::kPsi2C]); } if constexpr (trackHasCov && TTwoProngFitter) { dielectronsExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } if constexpr ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelPID) > 0) { @@ -3077,8 +3039,8 @@ struct AnalysisSameEventPairing { fOutputMlPsi2ee.clear(); if (fConfigML.applyBDT) { std::vector dqInputFeatures = - fDQMlResponse.getInputFeatures( - t1, t2, dqtablereader_helpers::varValues()); + fDQMlResponse.getInputFeatures( + t1, t2, dqtablereader_helpers::varValues()); if (dqInputFeatures.empty()) { LOG(fatal) << "Input features for ML selection are empty! " @@ -3087,22 +3049,22 @@ struct AnalysisSameEventPairing { } int modelIndex = -1; - const auto& binsCent = fDQMlResponse.getBinsCent(); - const auto& binsPt = fDQMlResponse.getBinsPt(); - const std::string& centType = fDQMlResponse.getCentType(); + const auto &binsCent = fDQMlResponse.getBinsCent(); + const auto &binsPt = fDQMlResponse.getBinsPt(); + const std::string ¢Type = fDQMlResponse.getCentType(); if ("kCentFT0C" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0A" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0A], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0A], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else if ("kCentFT0M" == centType) { modelIndex = o2::aod::dqmlcuts::getMlBinIndex( - VarManager::fgValues[VarManager::kCentFT0M], - VarManager::fgValues[VarManager::kPt], binsCent, binsPt); + VarManager::fgValues[VarManager::kCentFT0M], + VarManager::fgValues[VarManager::kPt], binsCent, binsPt); } else { LOG(fatal) << "Unknown centrality estimation type: " << centType; @@ -3111,8 +3073,8 @@ struct AnalysisSameEventPairing { if (modelIndex < 0) { LOG(debug) - << "Ml index is negative! This means that the " - "centrality/pt is not in the range of the model bins."; + << "Ml index is negative! This means that the " + "centrality/pt is not in the range of the model bins."; continue; } @@ -3121,7 +3083,7 @@ struct AnalysisSameEventPairing { << ", centrality (kCentFT0C): " << VarManager::fgValues[VarManager::kCentFT0C]; isSelectedBDT = fDQMlResponse.isSelectedMl( - dqInputFeatures, modelIndex, fOutputMlPsi2ee); + dqInputFeatures, modelIndex, fOutputMlPsi2ee); VarManager::FillBdtScore(fOutputMlPsi2ee); } @@ -3131,118 +3093,118 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value) { dielectronAllList( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, dileptonMcDecision, t1.pt(), t1.eta(), - t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), - t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), - t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), - t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), - t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), - t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), - t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), - t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), - t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), - t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), - VarManager::fgValues[VarManager::kKFTrack0DCAxyz], - VarManager::fgValues[VarManager::kKFTrack1DCAxyz], - VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DCAxy], - VarManager::fgValues[VarManager::kKFTrack1DCAxy], - VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], - VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], - VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], - VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMass], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], - VarManager::fgValues[VarManager::kVertexingLxyz], - VarManager::fgValues[VarManager::kVertexingLxyzOverErr], - VarManager::fgValues[VarManager::kVertexingLxy], - VarManager::fgValues[VarManager::kVertexingLxyOverErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kKFCosPA], - VarManager::fgValues[VarManager::kKFJpsiDCAxyz], - VarManager::fgValues[VarManager::kKFJpsiDCAxy], - VarManager::fgValues[VarManager::kKFPairDeviationFromPV], - VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], - VarManager::fgValues[VarManager::kKFMassGeoTop], - VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingTauxyProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, dileptonMcDecision, t1.pt(), t1.eta(), + t1.phi(), t1.itsClusterMap(), t1.itsChi2NCl(), + t1.tpcNClsCrossedRows(), t1.tpcNClsFound(), t1.tpcChi2NCl(), + t1.dcaXY(), t1.dcaZ(), t1.tpcSignal(), t1.tpcNSigmaEl(), + t1.tpcNSigmaPi(), t1.tpcNSigmaPr(), t1.beta(), + t1.tofNSigmaEl(), t1.tofNSigmaPi(), t1.tofNSigmaPr(), t2.pt(), + t2.eta(), t2.phi(), t2.itsClusterMap(), t2.itsChi2NCl(), + t2.tpcNClsCrossedRows(), t2.tpcNClsFound(), t2.tpcChi2NCl(), + t2.dcaXY(), t2.dcaZ(), t2.tpcSignal(), t2.tpcNSigmaEl(), + t2.tpcNSigmaPi(), t2.tpcNSigmaPr(), t2.beta(), + t2.tofNSigmaEl(), t2.tofNSigmaPi(), t2.tofNSigmaPr(), + VarManager::fgValues[VarManager::kKFTrack0DCAxyz], + VarManager::fgValues[VarManager::kKFTrack1DCAxyz], + VarManager::fgValues[VarManager::kKFDCAxyzBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DCAxy], + VarManager::fgValues[VarManager::kKFTrack1DCAxy], + VarManager::fgValues[VarManager::kKFDCAxyBetweenProngs], + VarManager::fgValues[VarManager::kKFTrack0DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationFromPV], + VarManager::fgValues[VarManager::kKFTrack0DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFTrack1DeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMass], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeo], + VarManager::fgValues[VarManager::kVertexingLxyz], + VarManager::fgValues[VarManager::kVertexingLxyzOverErr], + VarManager::fgValues[VarManager::kVertexingLxy], + VarManager::fgValues[VarManager::kVertexingLxyOverErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kKFCosPA], + VarManager::fgValues[VarManager::kKFJpsiDCAxyz], + VarManager::fgValues[VarManager::kKFJpsiDCAxy], + VarManager::fgValues[VarManager::kKFPairDeviationFromPV], + VarManager::fgValues[VarManager::kKFPairDeviationxyFromPV], + VarManager::fgValues[VarManager::kKFMassGeoTop], + VarManager::fgValues[VarManager::kKFChi2OverNDFGeoTop], + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingTauxyProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); dielectronMlList( - VarManager::fgValues[VarManager::kCentFT0C], - (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) - ? VarManager::fgValues[VarManager::kBdtBackground] - : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) - ? VarManager::fgValues[VarManager::kBdtPrompt] - : -999.f, - (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) - ? VarManager::fgValues[VarManager::kBdtNonprompt] - : -999.f); + VarManager::fgValues[VarManager::kCentFT0C], + (fConfigML.applyBDT && !fOutputMlPsi2ee.empty()) + ? VarManager::fgValues[VarManager::kBdtBackground] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 1) + ? VarManager::fgValues[VarManager::kBdtPrompt] + : -999.f, + (fConfigML.applyBDT && fOutputMlPsi2ee.size() > 2) + ? VarManager::fgValues[VarManager::kBdtNonprompt] + : -999.f); } constexpr bool eventHasVtxCovForTable = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > - 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventVtxCov) > + 0); if constexpr (trackHasCov && TTwoProngFitter && eventHasVtxCovForTable) { const bool ambiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); const bool ambiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); // 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) { PromptNonPromptSepTable( - twoTrackFilter, dileptonMcDecision, - 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::kDCAxyOverSig1], - VarManager::fgValues[VarManager::kDCAzOverSig1], - VarManager::fgValues[VarManager::kITSclusterMap1], - t1.itsChi2NCl(), t2.pt(), t2.eta(), - VarManager::fgValues[VarManager::kDCAxy2], - VarManager::fgValues[VarManager::kDCAz2], - VarManager::fgValues[VarManager::kDCAxyOverSig2], - VarManager::fgValues[VarManager::kDCAzOverSig2], - VarManager::fgValues[VarManager::kITSclusterMap2], - t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, - VarManager::fgValues[VarManager::kMultFT0C], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kVtxNcontribReal]); + twoTrackFilter, dileptonMcDecision, + 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::kDCAxyOverSig1], + VarManager::fgValues[VarManager::kDCAzOverSig1], + VarManager::fgValues[VarManager::kITSclusterMap1], + t1.itsChi2NCl(), t2.pt(), t2.eta(), + VarManager::fgValues[VarManager::kDCAxy2], + VarManager::fgValues[VarManager::kDCAz2], + VarManager::fgValues[VarManager::kDCAxyOverSig2], + VarManager::fgValues[VarManager::kDCAzOverSig2], + VarManager::fgValues[VarManager::kITSclusterMap2], + t2.itsChi2NCl(), ambiInBunch, ambiOutOfBunch, true, + VarManager::fgValues[VarManager::kMultFT0C], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kVtxNcontribReal]); } } } @@ -3319,80 +3281,80 @@ struct AnalysisSameEventPairing { VarManager::fgValues[VarManager::kVertexingLxy]); if (fConfigOptions.flatTables.value) { dimuonAllList( - event.posX(), event.posY(), event.posZ(), event.numContrib(), - event.selection_raw(), evSel, -999., -999., -999., - VarManager::fgValues[VarManager::kMass], false, - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], - VarManager::fgValues[VarManager::kPt1], - VarManager::fgValues[VarManager::kEta1], - VarManager::fgValues[VarManager::kPhi1], t1.sign(), - VarManager::fgValues[VarManager::kPt2], - VarManager::fgValues[VarManager::kEta2], - VarManager::fgValues[VarManager::kPhi2], t2.sign(), - t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), 0., 0., - t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), - t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), t1.chi2(), - t2.chi2(), -999., -999., -999., -999., -999., -999., -999., - -999., -999., -999., -999., -999., -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - true, true, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], - VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], - VarManager::fgValues[VarManager::kCORR4POI], - VarManager::fgValues[VarManager::kM01POI], - VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); - } - - if constexpr ((TTrackFillMap & - VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { - if constexpr (eventHasQvector || eventHasQvectorCentr) { - dileptonFlowList( - event.collisionId(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kCentFT0C], + event.posX(), event.posY(), event.posZ(), event.numContrib(), + event.selection_raw(), evSel, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - isFirst, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kR2SP_AC], - VarManager::fgValues[VarManager::kR2SP_BC], + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], + VarManager::fgValues[VarManager::kPt1], + VarManager::fgValues[VarManager::kEta1], + VarManager::fgValues[VarManager::kPhi1], t1.sign(), + VarManager::fgValues[VarManager::kPt2], + VarManager::fgValues[VarManager::kEta2], + VarManager::fgValues[VarManager::kPhi2], t2.sign(), + t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), t2.fwdDcaY(), 0., 0., + t1.chi2MatchMCHMID(), t2.chi2MatchMCHMID(), + t1.chi2MatchMCHMFT(), t2.chi2MatchMCHMFT(), t1.chi2(), + t2.chi2(), -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR3SP], - VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kR2EP_AB], - VarManager::fgValues[VarManager::kR2EP_AC], - VarManager::fgValues[VarManager::kR2EP_BC], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kR3EP], VarManager::fgValues[VarManager::kCORR2POI], VarManager::fgValues[VarManager::kCORR4POI], VarManager::fgValues[VarManager::kM01POI], VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kCORR2REF], - VarManager::fgValues[VarManager::kCORR4REF], - VarManager::fgValues[VarManager::kM11REF], - VarManager::fgValues[VarManager::kM1111REF], VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kMultA]); + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); + } + + if constexpr ((TTrackFillMap & + VarManager::ObjTypes::ReducedMuonCollInfo) > 0) { + if constexpr (eventHasQvector || eventHasQvectorCentr) { + dileptonFlowList( + event.collisionId(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + isFirst, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kR2SP_AC], + VarManager::fgValues[VarManager::kR2SP_BC], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR3SP], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2EP_AC], + VarManager::fgValues[VarManager::kR2EP_BC], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kR3EP], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kCORR2REF], + VarManager::fgValues[VarManager::kCORR4REF], + VarManager::fgValues[VarManager::kM11REF], + VarManager::fgValues[VarManager::kM1111REF], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kMultA]); } } if (t1.sign() != t2.sign()) { @@ -3422,11 +3384,11 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); isLeg1Ambi = (twoTrackFilter & (static_cast(1) << 28) || (twoTrackFilter & (static_cast(1) << 30))); @@ -3468,40 +3430,40 @@ struct AnalysisSameEventPairing { // first if (t1.sign() > 0) { dileptonMiniTree( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), - t2.phi()); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), + t2.phi()); } else { dileptonMiniTree( - VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kRap], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), - t1.phi()); + VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kRap], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + t2.pt(), t2.eta(), t2.phi(), t1.pt(), t1.eta(), + t1.phi()); } } } if (fConfigQA && fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][3 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][3 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3523,18 +3485,18 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][4 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][4 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3553,18 +3515,18 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset + 3].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset + 3].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][5 + histIdxOffset + 6].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][5 + histIdxOffset + 6].Data(), + dqtablereader_helpers::varValues()); } } } @@ -3583,23 +3545,23 @@ struct AnalysisSameEventPairing { iPairCut++) { AnalysisCompositeCut cut = fPairCuts.at(iPairCut); if (!(cut.IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair - // cuts + dqtablereader_helpers::varValues()))) { // apply pair + // cuts continue; } if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][0].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][0].Data(), + dqtablereader_helpers::varValues()); } else { if (sign1 > 0) { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][1].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][1].Data(), + dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - histNames[ncuts + icut * ncuts + iPairCut][2].Data(), - dqtablereader_helpers::varValues()); + histNames[ncuts + icut * ncuts + iPairCut][2].Data(), + dqtablereader_helpers::varValues()); } } } // end loop (pair cuts) @@ -3612,9 +3574,9 @@ struct AnalysisSameEventPairing { if (fConfigTRPairs) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter // bit in common to continue @@ -3641,18 +3603,18 @@ struct AnalysisSameEventPairing { for (int icut = 0; icut < ncuts; icut++) { if (twoTrackFilter & (static_cast(1) << icut)) { isAmbiInBunch = - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)); + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)); isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch); isLeg1Ambi = - (twoTrackFilter & (static_cast(1) << 28) || - (twoTrackFilter & (static_cast(1) << 30))); + (twoTrackFilter & (static_cast(1) << 28) || + (twoTrackFilter & (static_cast(1) << 30))); isLeg2Ambi = - (twoTrackFilter & (static_cast(1) << 29) || - (twoTrackFilter & (static_cast(1) << 31))); + (twoTrackFilter & (static_cast(1) << 29) || + (twoTrackFilter & (static_cast(1) << 31))); if constexpr (TPairType == VarManager::kDecayToEE) { if (isLeg1Ambi && isLeg2Ambi) { std::pair iPair(a1.reducedtrackId(), @@ -3675,17 +3637,17 @@ struct AnalysisSameEventPairing { if (sign1 * sign2 < 0) { if (fConfigNRotations.value == 1) { VarManager::FillPairRotation( - t1, t2, fConfigNRotations.value); + t1, t2, fConfigNRotations.value); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbiExtra) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_ambiguousextra_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3693,18 +3655,18 @@ struct AnalysisSameEventPairing { for (int irot = 1; irot <= fConfigNRotations.value; irot++) { VarManager::FillPairRotation( - t1, t2, irot); + t1, t2, irot); if constexpr (TPairType == VarManager::kDecayToEE) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelTRPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); - if (isAmbiExtra) { - fHistMan->FillHistClass( - Form("PairsBarrelTRPM_ambiguousextra_%s", + Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), dqtablereader_helpers::varValues()); + if (isAmbiExtra) { + fHistMan->FillHistClass( + Form("PairsBarrelTRPM_ambiguousextra_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3736,7 +3698,7 @@ struct AnalysisSameEventPairing { // 1) create a MixingEvent and fill it with the relevant tracks MixingHandler::MixingEvent mixingEvent; uint32_t trackFilterForMixing = 0; - for (auto const& assoc : groupedAssocs) { + for (auto const &assoc : groupedAssocs) { if constexpr (TPairType == VarManager::kDecayToEE) { trackFilterForMixing = assoc.isBarrelSelected_raw() & assoc.isBarrelSelectedPrefilter_raw() & @@ -3759,14 +3721,14 @@ struct AnalysisSameEventPairing { } // 2) run the mixing with the events in the pool corresponding to this // event - auto& pool = fMixingHandler.GetPool(mixingCategory); - for (auto const& poolEvent : pool.GetEvents()) { - for (auto const& t1 : mixingEvent.tracks1) { + auto &pool = fMixingHandler.GetPool(mixingCategory); + for (auto const &poolEvent : pool.GetEvents()) { + for (auto const &t1 : mixingEvent.tracks1) { // run +- pairing - for (auto const& t2 : poolEvent.tracks2) { + for (auto const &t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3775,8 +3737,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3795,19 +3757,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("PairsBarrelTR_MEPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run ++ pairing - for (auto const& t2 : poolEvent.tracks1) { + for (auto const &t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3816,19 +3778,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } - for (auto const& t1 : mixingEvent.tracks2) { + for (auto const &t1 : mixingEvent.tracks2) { // run -+ pairing - for (auto const& t2 : poolEvent.tracks1) { + for (auto const &t2 : poolEvent.tracks1) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3837,8 +3799,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3856,19 +3818,19 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("PairsBarrelTR_MEPM_%s", - fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelTR_MEPM_%s", + fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } } } // run -- pairing - for (auto const& t2 : poolEvent.tracks2) { + for (auto const &t2 : poolEvent.tracks2) { // check the two-track filter for the mixed pair uint32_t mixedTwoTrackFilter = - t1.filteringFlags & t2.filteringFlags; + t1.filteringFlags & t2.filteringFlags; if (!mixedTwoTrackFilter) { continue; } @@ -3877,8 +3839,8 @@ struct AnalysisSameEventPairing { if (mixedTwoTrackFilter & (static_cast(1) << icut)) { if (fConfigQA) { fHistMan->FillHistClass( - Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -3895,21 +3857,20 @@ struct AnalysisSameEventPairing { template - void runMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, - TTracks1 const& /*tracks1*/, - TTracks2 const& /*tracks2*/) - { + void runMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { std::map> histNames = fTrackHistNames; int pairSign = 0; int ncuts = 0; auto twoTrackFilter = static_cast(0); - for (auto const& a1 : assocs1) { - for (auto const& a2 : assocs2) { + for (auto const &a1 : assocs1) { + for (auto const &a2 : assocs2) { if constexpr (TPairType == VarManager::kDecayToEE) { twoTrackFilter = - a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & - a1.isBarrelSelectedPrefilter_raw() & - a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; + a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & + a1.isBarrelSelectedPrefilter_raw() & + a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask; if (!twoTrackFilter) { // the tracks must have at least one filter bit // in common to continue continue; @@ -3975,42 +3936,42 @@ struct AnalysisSameEventPairing { if (fConfigOptions.flatTables.value) { dimuonAllList( - -999., -999., -999., -999., 0, 0, -999., -999., -999., - VarManager::fgValues[VarManager::kMass], false, - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - VarManager::fgValues[VarManager::kVertexingChi2PCA], - VarManager::fgValues[VarManager::kVertexingTauz], - VarManager::fgValues[VarManager::kVertexingTauzErr], - VarManager::fgValues[VarManager::kVertexingTauxy], - VarManager::fgValues[VarManager::kVertexingTauxyErr], - VarManager::fgValues[VarManager::kCosPointingAngle], t1.pt(), - t1.eta(), t1.phi(), t1.sign(), t2.pt(), t2.eta(), t2.phi(), - t2.sign(), t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), - t2.fwdDcaY(), 0., 0., t1.chi2MatchMCHMID(), - t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), - t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), -999., -999., -999., - -999., -999., -999., -999., -999., -999., -999., -999., -999., - -999., -999., -999., -999., - (twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)), - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)), - true, true, VarManager::fgValues[VarManager::kU2Q2], - VarManager::fgValues[VarManager::kU3Q3], - VarManager::fgValues[VarManager::kR2EP_AB], - VarManager::fgValues[VarManager::kR2SP_AB], - VarManager::fgValues[VarManager::kCentFT0C], - VarManager::fgValues[VarManager::kCos2DeltaPhi], - VarManager::fgValues[VarManager::kCos3DeltaPhi], - VarManager::fgValues[VarManager::kCORR2POI], - VarManager::fgValues[VarManager::kCORR4POI], - VarManager::fgValues[VarManager::kM01POI], - VarManager::fgValues[VarManager::kM0111POI], - VarManager::fgValues[VarManager::kMultDimuons], - VarManager::fgValues[VarManager::kVertexingPz], - VarManager::fgValues[VarManager::kVertexingSV]); + -999., -999., -999., -999., 0, 0, -999., -999., -999., + VarManager::fgValues[VarManager::kMass], false, + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + VarManager::fgValues[VarManager::kVertexingChi2PCA], + VarManager::fgValues[VarManager::kVertexingTauz], + VarManager::fgValues[VarManager::kVertexingTauzErr], + VarManager::fgValues[VarManager::kVertexingTauxy], + VarManager::fgValues[VarManager::kVertexingTauxyErr], + VarManager::fgValues[VarManager::kCosPointingAngle], t1.pt(), + t1.eta(), t1.phi(), t1.sign(), t2.pt(), t2.eta(), t2.phi(), + t2.sign(), t1.fwdDcaX(), t1.fwdDcaY(), t2.fwdDcaX(), + t2.fwdDcaY(), 0., 0., t1.chi2MatchMCHMID(), + t2.chi2MatchMCHMID(), t1.chi2MatchMCHMFT(), + t2.chi2MatchMCHMFT(), t1.chi2(), t2.chi2(), -999., -999., -999., + -999., -999., -999., -999., -999., -999., -999., -999., -999., + -999., -999., -999., -999., + (twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)), + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31)), + true, true, VarManager::fgValues[VarManager::kU2Q2], + VarManager::fgValues[VarManager::kU3Q3], + VarManager::fgValues[VarManager::kR2EP_AB], + VarManager::fgValues[VarManager::kR2SP_AB], + VarManager::fgValues[VarManager::kCentFT0C], + VarManager::fgValues[VarManager::kCos2DeltaPhi], + VarManager::fgValues[VarManager::kCos3DeltaPhi], + VarManager::fgValues[VarManager::kCORR2POI], + VarManager::fgValues[VarManager::kCORR4POI], + VarManager::fgValues[VarManager::kM01POI], + VarManager::fgValues[VarManager::kM0111POI], + VarManager::fgValues[VarManager::kMultDimuons], + VarManager::fgValues[VarManager::kVertexingPz], + VarManager::fgValues[VarManager::kVertexingSV]); } } /*if constexpr (TPairType == VarManager::kElectronMuon) { @@ -4029,13 +3990,13 @@ struct AnalysisSameEventPairing { isAmbiInBunch = (twoTrackFilter & (static_cast(1) << 28)) || (twoTrackFilter & (static_cast(1) << 29)); isAmbiOutOfBunch = - (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31)); - isUnambiguous = - !((twoTrackFilter & (static_cast(1) << 28)) || - (twoTrackFilter & (static_cast(1) << 29)) || (twoTrackFilter & (static_cast(1) << 30)) || - (twoTrackFilter & (static_cast(1) << 31))); + (twoTrackFilter & (static_cast(1) << 31)); + isUnambiguous = + !((twoTrackFilter & (static_cast(1) << 28)) || + (twoTrackFilter & (static_cast(1) << 29)) || + (twoTrackFilter & (static_cast(1) << 30)) || + (twoTrackFilter & (static_cast(1) << 31))); if (fConfigQA) { if (pairSign == 0) { if constexpr (TPairType == VarManager::kDecayToMuMu) { @@ -4058,8 +4019,8 @@ struct AnalysisSameEventPairing { } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if (pairSign > 0) { @@ -4069,25 +4030,25 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][16].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][16].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][19].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][19].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][22].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][22].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEPP_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } else { if constexpr (TPairType == VarManager::kDecayToMuMu) { @@ -4096,25 +4057,25 @@ struct AnalysisSameEventPairing { if (fConfigAmbiguousMuonHistograms) { if (isAmbiInBunch) { fHistMan->FillHistClass( - histNames[icut][17].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][17].Data(), + dqtablereader_helpers::varValues()); } if (isAmbiOutOfBunch) { fHistMan->FillHistClass( - histNames[icut][20].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][20].Data(), + dqtablereader_helpers::varValues()); } if (isUnambiguous) { fHistMan->FillHistClass( - histNames[icut][23].Data(), - dqtablereader_helpers::varValues()); + histNames[icut][23].Data(), + dqtablereader_helpers::varValues()); } } } if constexpr (TPairType == VarManager::kDecayToEE) { fHistMan->FillHistClass( - Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelMEMM_%s", fTrackCuts[icut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -4127,10 +4088,9 @@ struct AnalysisSameEventPairing { // barrel-barrel and muon-muon event mixing template - void runSameSideMixing(TEvents& events, TAssocs const& assocs, - TTracks const& tracks, - o2::framework::Preslice& preSlice) - { + void runSameSideMixing(TEvents &events, TAssocs const &assocs, + TTracks const &tracks, + o2::framework::Preslice &preSlice) { if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) { LOG(info) << "Flow resolution objects not set, flow will not be filled " "for mixed events"; @@ -4142,7 +4102,7 @@ struct AnalysisSameEventPairing { events.bindExternalIndices(&assocs); int mixingDepth = fConfigMixingDepth.value; fAmbiguousPairs.clear(); - for (auto const& [event1, event2] : + for (auto const &[event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4174,14 +4134,13 @@ struct AnalysisSameEventPairing { uint32_t TTrackFillMap, uint32_t TMuonFillMap, typename TEvents, typename TTrackAssocs, typename TTracks, typename TMuonAssocs, typename TMuons> - void runEmuSameEventPairing(TEvents const& events, - o2::framework::Preslice& preslice1, - TTrackAssocs const& assocs1, - TTracks const& /*tracks1*/, - o2::framework::Preslice& preslice2, - TMuonAssocs const& assocs2, - TMuons const& /*tracks2*/) - { + void runEmuSameEventPairing(TEvents const &events, + o2::framework::Preslice &preslice1, + TTrackAssocs const &assocs1, + TTracks const & /*tracks1*/, + o2::framework::Preslice &preslice2, + TMuonAssocs const &assocs2, + TMuons const & /*tracks2*/) { if (events.size() > 0) { if (fCurrentRun != events.begin().runNumber()) { initParamsFromCCDB(events.begin().timestamp(), @@ -4190,7 +4149,7 @@ struct AnalysisSameEventPairing { } } - const auto& histNames = fTrackMuonHistNames; + const auto &histNames = fTrackMuonHistNames; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; electronmuonList.reserve(assocs1.size()); @@ -4200,11 +4159,11 @@ struct AnalysisSameEventPairing { int sign2 = 0; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -4226,9 +4185,9 @@ struct AnalysisSameEventPairing { } // Custom combination policy - for (auto const& [a1, a2] : + for (auto const &[a1, a2] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy( - groupedAssocs1, groupedAssocs2))) { + groupedAssocs1, groupedAssocs2))) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; @@ -4334,25 +4293,24 @@ struct AnalysisSameEventPairing { template - void runEmuMixedPairing(TAssoc1 const& assocs1, TAssoc2 const& assocs2, - TTracks1 const& /*tracks1*/, - TTracks2 const& /*tracks2*/) - { - const auto& histNames = fTrackMuonHistNames; + void runEmuMixedPairing(TAssoc1 const &assocs1, TAssoc2 const &assocs2, + TTracks1 const & /*tracks1*/, + TTracks2 const & /*tracks2*/) { + const auto &histNames = fTrackMuonHistNames; int sign1 = 0; int sign2 = 0; int nPairCuts = !fPairCuts.empty() ? static_cast(fPairCuts.size()) : 1; constexpr bool eventHasQvector = - ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); + ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0); constexpr bool eventHasQvectorCentr = - ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); + ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0); - for (auto const& a1 : assocs1) { + for (auto const &a1 : assocs1) { if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask)) { continue; } - for (auto const& a2 : assocs2) { + for (auto const &a2 : assocs2) { if (!(a2.isMuonSelected_raw() & fMuonFilterMask)) { continue; } @@ -4417,16 +4375,15 @@ struct AnalysisSameEventPairing { template - void runEmuSameSideMixing(TEvents& events, - o2::framework::Preslice& preslice1, - TTrackAssocs const& assocs1, TTracks const& tracks1, - o2::framework::Preslice& preslice2, - TMuonAssocs const& assocs2, TMuons const& tracks2) - { + void runEmuSameSideMixing(TEvents &events, + o2::framework::Preslice &preslice1, + TTrackAssocs const &assocs1, TTracks const &tracks1, + o2::framework::Preslice &preslice2, + TMuonAssocs const &assocs2, TMuons const &tracks2) { events.bindExternalIndices(&assocs1); events.bindExternalIndices(&assocs2); int mixingDepth = fConfigMixingDepth.value; - for (auto const& [event1, event2] : + for (auto const &[event1, event2] : selfCombinations(hashBin, mixingDepth, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -4450,13 +4407,13 @@ struct AnalysisSameEventPairing { } void processAllSkimmed( - MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); @@ -4468,107 +4425,100 @@ struct AnalysisSameEventPairing { } void processBarrelOnlySkimmed( - MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedFlow( - MyEventsVtxCovSelectedQvector const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovSelectedQvector const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedNoCov( - MyEventsSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { + MyEventsSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { runSameEventPairing(events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlySkimmedNoCovWithMultExtra( - MyEventsMultExtraSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { + MyEventsMultExtraSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithCollSkimmed( - MyEventsVtxCovSelectedInfo const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks) - { + MyEventsVtxCovSelectedInfo const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguitiesWithColl const &barrelTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithQvectorCentrSkimmedNoCov( - MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithAmbiguities const& barrelTracks) - { + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithAmbiguities const &barrelTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processBarrelOnlyWithQvectorCentrSkimmed( - MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processMuonOnlySkimmed( - MyEventsVtxCovSelected const& events, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsVtxCovSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedMultExtra( - MyEventsVtxCovSelectedMultExtra const& events, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsVtxCovSelectedMultExtra const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameEventPairing( - events, muonAssocsPerCollision, muonAssocs, muons); + events, muonAssocsPerCollision, muonAssocs, muons); } void processMuonOnlySkimmedFlow( - MyEventsQvectorCentrSelected const& events, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsQvectorCentrSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameEventPairing(events, muonAssocsPerCollision, @@ -4576,38 +4526,39 @@ struct AnalysisSameEventPairing { } void processMuonOnlyVertexingSkimmed( - MyEventsVtxCovSelected const& events, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsVtxCovSelected const &events, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameEventPairing(events, muonAssocsPerCollision, muonAssocs, muons); } void processElectronMuonSkimmed( - MyEventsVtxCovSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + MyEventsVtxCovSelected const &events, + o2::soa::Join const &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runEmuSameEventPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } void processMixingAllSkimmed( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, - MyBarrelTracksWithCov const& tracks, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); runSameSideMixing(events, muonAssocs, muons, @@ -4615,68 +4566,70 @@ struct AnalysisSameEventPairing { } void processMixingBarrelSkimmed( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, - o2::aod::ReducedTracks const& tracks) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + o2::aod::ReducedTracks const &tracks) { runSameSideMixing(events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingBarrelSkimmedFlow( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, - o2::aod::ReducedTracks const& tracks) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + o2::aod::ReducedTracks const &tracks) { runSameSideMixing( - events, trackAssocs, tracks, trackAssocsPerCollision); + events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingBarrelWithQvectorCentrSkimmedNoCov( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& trackAssocs, - MyBarrelTracksWithAmbiguities const& tracks) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &trackAssocs, + MyBarrelTracksWithAmbiguities const &tracks) { runSameSideMixing( - events, trackAssocs, tracks, trackAssocsPerCollision); + events, trackAssocs, tracks, trackAssocsPerCollision); } void processMixingMuonSkimmed( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameSideMixing(events, muonAssocs, muons, muonAssocsPerCollision); } void processMixingMuonSkimmedFlow( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runSameSideMixing( - events, muonAssocs, muons, muonAssocsPerCollision); + events, muonAssocs, muons, muonAssocsPerCollision); } void processMixingElectronMuonSkimmed( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Join const& barrelAssocs, - o2::aod::ReducedTracks const& barrelTracks, - o2::soa::Join const& muonAssocs, - MyMuonTracksWithCovWithAmbiguities const& muons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Join const &barrelAssocs, + o2::aod::ReducedTracks const &barrelTracks, + o2::soa::Join const + &muonAssocs, + MyMuonTracksWithCovWithAmbiguities const &muons) { runEmuSameSideMixing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - muonAssocsPerCollision, muonAssocs, muons); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + muonAssocsPerCollision, muonAssocs, muons); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -4703,10 +4656,10 @@ struct AnalysisSameEventPairing { "tracks, with Qvector from central framework", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, - "Run barrel only pairing (no covariances), with skimmed tracks, with " - "collision information, with Qvector from central framework", - false); + AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, + "Run barrel only pairing (no covariances), with skimmed tracks, with " + "collision information, with Qvector from central framework", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmedFlow, "Run barrel only pairing, with skimmed tracks and with flow", false); @@ -4717,9 +4670,9 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmedFlow, "Run muon only pairing, with skimmed tracks and flow", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, - "Run muon only pairing with two-prong vertexing, with skimmed tracks", - false); + AnalysisSameEventPairing, processMuonOnlyVertexingSkimmed, + "Run muon only pairing with two-prong vertexing, with skimmed tracks", + false); PROCESS_SWITCH(AnalysisSameEventPairing, processElectronMuonSkimmed, "Run electron-muon pairing, with skimmed tracks/muons", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingAllSkimmed, @@ -4728,8 +4681,8 @@ struct AnalysisSameEventPairing { PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelSkimmed, "Run barrel type mixing pairing, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, - "Run barrel type mixing pairing, with flow, with skimmed tracks", false); + AnalysisSameEventPairing, processMixingBarrelSkimmedFlow, + "Run barrel type mixing pairing, with flow, with skimmed tracks", false); PROCESS_SWITCH(AnalysisSameEventPairing, processMixingBarrelWithQvectorCentrSkimmedNoCov, "Run barrel type mixing pairing, with skimmed tracks and with " @@ -4744,8 +4697,8 @@ struct AnalysisSameEventPairing { "Run electron-muon mixing pairing, with skimmed tracks/muons", false); PROCESS_SWITCH( - AnalysisSameEventPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisSameEventPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Run pairing for resonance with legs fulfilling separate cuts (asymmetric @@ -4755,7 +4708,7 @@ struct AnalysisAsymmetricPairing { o2::framework::Produces ditrackList; o2::framework::Produces ditrackExtraList; - o2::base::MatLayerCylSet* fLUT = nullptr; + o2::base::MatLayerCylSet *fLUT = nullptr; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -4764,82 +4717,82 @@ struct AnalysisAsymmetricPairing { // Configurables o2::framework::Configurable fConfigLegCuts{ - "cfgLegCuts", "", - ":[:],[:[:],...]"}; + "cfgLegCuts", "", + ":[:],[:[:],...]"}; o2::framework::Configurable fConfigLegAFilterMask{ - "cfgLegAFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegAFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigLegBFilterMask{ - "cfgLegBFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegBFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigLegCFilterMask{ - "cfgLegCFilterMask", 0, - "o2::framework::expressions::Filter mask corresponding to cuts in " - "track-selection"}; + "cfgLegCFilterMask", 0, + "o2::framework::expressions::Filter mask corresponding to cuts in " + "track-selection"}; o2::framework::Configurable fConfigCommonTrackCuts{ - "cfgCommonTrackCuts", "", - "Comma separated list of cuts to be applied to all legs"}; + "cfgCommonTrackCuts", "", + "Comma separated list of cuts to be applied to all legs"}; o2::framework::Configurable fConfigPairCuts{ - "cfgPairCuts", "", "Comma separated list of pair cuts"}; + "cfgPairCuts", "", "Comma separated list of pair cuts"}; o2::framework::Configurable fConfigPairCutsJSON{ - "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; + "cfgPairCutsJSON", "", "Additional list of pair cuts in JSON format"}; o2::framework::Configurable fConfigRemoveCollSplittingCandidates{ - "cfgRemoveCollSplittingCandidates", false, - "If true, remove collision splitting candidates as determined by the " - "event selection task upstream"}; + "cfgRemoveCollSplittingCandidates", false, + "If true, remove collision splitting candidates as determined by the " + "event selection task upstream"}; o2::framework::Configurable fConfigSkipAmbiguousIdCombinations{ - "cfgSkipAmbiguousIdCombinations", true, - "Choose whether to skip pairs/triples which pass a stricter combination " - "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; + "cfgSkipAmbiguousIdCombinations", true, + "Choose whether to skip pairs/triples which pass a stricter combination " + "of cuts, e.g. KKPi triplets for D+ -> KPiPi"}; o2::framework::Configurable fConfigHistogramSubgroups{ - "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", - "Comma separated list of asymmetric-pairing histogram subgroups"}; + "cfgAsymmetricPairingHistogramsSubgroups", "barrel,vertexing", + "Comma separated list of asymmetric-pairing histogram subgroups"}; o2::framework::Configurable fConfigSameSignHistograms{ - "cfgSameSignHistograms", false, - "Include same sign pair histograms for 2-prong decays"}; + "cfgSameSignHistograms", false, + "Include same sign pair histograms for 2-prong decays"}; o2::framework::Configurable fConfigAmbiguousHistograms{ - "cfgAmbiguousHistograms", false, - "Include separate histograms for pairs/triplets with ambiguous tracks"}; + "cfgAmbiguousHistograms", false, + "Include separate histograms for pairs/triplets with ambiguous tracks"}; o2::framework::Configurable fConfigReflectedHistograms{ - "cfgReflectedHistograms", false, - "Include separate histograms for pairs which are reflections of " - "previously counted pairs"}; + "cfgReflectedHistograms", false, + "Include separate histograms for pairs which are reflections of " + "previously counted pairs"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigGRPMagPath{ - "grpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "grpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigUseAbsDCA{ - "cfgUseAbsDCA", false, - "Use absolute DCA minimization instead of chi^2 minimization in " - "secondary vertexing"}; + "cfgUseAbsDCA", false, + "Use absolute DCA minimization instead of chi^2 minimization in " + "secondary vertexing"}; o2::framework::Configurable fConfigLutPath{ - "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; + "lutPath", "GLO/Param/MatLUT", "Path of the Lut parametrization"}; o2::framework::Configurable fConfigFetchInteractionRate{ - "cfgFetchInteractionRate", false, - "Fetch event-wise interaction rate from the CCDB"}; + "cfgFetchInteractionRate", false, + "Fetch event-wise interaction rate from the CCDB"}; o2::framework::Configurable fConfigIRSource{ - "cfgIRSource", "ZNC hadronic", - "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " - "ZNC hadronic)"}; + "cfgIRSource", "ZNC hadronic", + "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> " + "ZNC hadronic)"}; o2::framework::Service fCCDB{}; o2::ctpRateFetcher rateFetcher; - HistogramManager* fHistMan = nullptr; + HistogramManager *fHistMan = nullptr; - std::vector fPairCuts; + std::vector fPairCuts; int fNPairHistPrefixes = 0; // o2::framework::expressions::Filter masks to find legs in BarrelTrackCuts @@ -4866,29 +4819,28 @@ struct AnalysisAsymmetricPairing { std::vector fCommonCutNames; o2::framework::Preslice< - o2::soa::Join> - trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::soa::Join> + trackAssocsPerCollision = + o2::aod::reducedtrack_association::reducedeventId; // Partitions for triplets and asymmetric pairs o2::framework::Partition< - o2::soa::Join> - legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegAFilterMask) > static_cast(0); + o2::soa::Join> + legACandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegAFilterMask) > static_cast(0); o2::framework::Partition< - o2::soa::Join> - legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegBFilterMask) > static_cast(0); + o2::soa::Join> + legBCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegBFilterMask) > static_cast(0); o2::framework::Partition< - o2::soa::Join> - legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & - fConfigLegCFilterMask) > static_cast(0); + o2::soa::Join> + legCCandidateAssocs = (o2::aod::dqanalysisflags::isBarrelSelected & + fConfigLegCFilterMask) > static_cast(0); // Map to track how many times a pair of tracks has been encountered std::map, int8_t> fPairCount; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { if (context.mOptions.get("processDummy")) { return; } @@ -4909,16 +4861,16 @@ struct AnalysisAsymmetricPairing { std::unique_ptr objArray(cutNamesStr.Tokenize(",")); for (int icut = 0; icut < objArray->GetEntries(); ++icut) { fPairCuts.push_back( - o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); + o2::aod::dqcuts::GetCompositeCut(objArray->At(icut)->GetName())); } } // Extra pair cuts via JSON TString addPairCutsStr = fConfigPairCutsJSON.value; if (addPairCutsStr != "") { - std::vector addPairCuts = - o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { - fPairCuts.push_back(dynamic_cast(t)); + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { + fPairCuts.push_back(dynamic_cast(t)); cutNamesStr += Form(",%s", t->GetName()); } } @@ -4930,17 +4882,17 @@ struct AnalysisAsymmetricPairing { // Get the barrel track selection cuts std::string tempCuts; o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", tempCuts, false); TString tempCutsStr = tempCuts; // check also the cuts added via JSON and add them to the string of cuts o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, - false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", tempCuts, + false); TString addTrackCutsStr = tempCuts; if (addTrackCutsStr != "") { - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON(addTrackCutsStr.Data()); + for (auto const &t : addTrackCuts) { tempCutsStr += Form(",%s", t->GetName()); } } @@ -4957,8 +4909,8 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutMask |= static_cast(1) << objArray->IndexOf(objArrayCommon->At(icut)); fCommonTrackCutFilterMasks[icut] = - static_cast(1) - << objArray->IndexOf(objArrayCommon->At(icut)); + static_cast(1) + << objArray->IndexOf(objArrayCommon->At(icut)); fCommonCutNames.push_back(objArrayCommon->At(icut)->GetName()); } else { LOGF(fatal, @@ -5065,8 +5017,8 @@ struct AnalysisAsymmetricPairing { fConfigHistogramSubgroups.value.data()); if (fConfigAmbiguousHistograms.value) { DefineHistograms( - fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, Form("TripletsBarrelSE_ambiguous_%s", legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } std::unique_ptr objArrayCommon(commonNamesStr.Tokenize(",")); @@ -5106,9 +5058,9 @@ struct AnalysisAsymmetricPairing { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s", pairHistPrefixes[iPrefix].Data(), legsStr.Data()), + fConfigHistogramSubgroups.value.data()); } if (fConfigAmbiguousHistograms.value) { for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { @@ -5147,10 +5099,10 @@ struct AnalysisAsymmetricPairing { ++iPairCut) { // loop over pair cuts for (int iPrefix = 0; iPrefix < fNPairHistPrefixes; ++iPrefix) { DefineHistograms( - fHistMan, - Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), - legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), - fConfigHistogramSubgroups.value.data()); + fHistMan, + Form("%s_%s_%s", pairHistPrefixes[iPrefix].Data(), + legsStr.Data(), objArrayPair->At(iPairCut)->GetName()), + fConfigHistogramSubgroups.value.data()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { @@ -5190,11 +5142,10 @@ struct AnalysisAsymmetricPairing { } // Make sure only pairs or only triplets of leg cuts were given int tripletCheckSum = - std::count(isThreeProng.begin(), isThreeProng.end(), true); + std::count(isThreeProng.begin(), isThreeProng.end(), true); if (tripletCheckSum != 0 && tripletCheckSum != fNLegCuts) { - LOGF(fatal, - "A mix of pairs and triplets was given as leg cuts. Check " - "your config!"); + LOGF(fatal, "A mix of pairs and triplets was given as leg cuts. Check " + "your config!"); } fCurrentRun = 0; @@ -5204,22 +5155,21 @@ struct AnalysisAsymmetricPairing { fCCDB->setLocalObjectValidityChecking(); fLUT = o2::base::MatLayerCylSet::rectifyPtrFromFile( - fCCDB->get(fConfigLutPath)); + fCCDB->get(fConfigLutPath)); VarManager::SetupMatLUTFwdDCAFitter(fLUT); o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars( - fHistMan->GetUsedVars()); // provide the list of required variables so - // that VarManager knows what to fill + fHistMan->GetUsedVars()); // provide the list of required variables so + // that VarManager knows what to fill fOutputList.setObject(fHistMan->GetMainHistogramList()); } - void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) - { + void initParamsFromCCDB(uint64_t timestamp, bool isTriplets) { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPMagPath, timestamp); + fConfigGRPMagPath, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -5240,9 +5190,9 @@ struct AnalysisAsymmetricPairing { VarManager::SetupTwoProngKFParticle(magField); } else { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - fConfigUseAbsDCA - .value); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + fConfigUseAbsDCA + .value); // TODO: get these parameters from Configurables } } } @@ -5252,11 +5202,10 @@ struct AnalysisAsymmetricPairing { template - void runAsymmetricPairing(TEvents const& events, - o2::framework::Preslice& preslice, - TTrackAssocs const& /*assocs*/, - TTracks const& /*tracks*/) - { + void runAsymmetricPairing(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const & /*assocs*/, + TTracks const & /*tracks*/) { fPairCount.clear(); if (events.size() > 0) { // Additional protection to avoid crashing of @@ -5272,7 +5221,7 @@ struct AnalysisAsymmetricPairing { // Reserve capacity for the output tables int64_t reserveSize = 0; - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5281,9 +5230,9 @@ struct AnalysisAsymmetricPairing { continue; } auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); reserveSize += static_cast(groupedLegAAssocs.size()) * static_cast(groupedLegBAssocs.size()); } @@ -5291,10 +5240,10 @@ struct AnalysisAsymmetricPairing { ditrackExtraList.reserve(reserveSize); constexpr bool trackHasCov = - ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || - (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); + ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0 || + (TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0); - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5309,25 +5258,25 @@ struct AnalysisAsymmetricPairing { // Get the instantaneous IR from the CCDB if (fConfigFetchInteractionRate.value) { VarManager::fgValues[VarManager::kInteractionRate] = - rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, - fConfigIRSource.value, true) / - 1000.; // kHz + rateFetcher.fetch(fCCDB.service, event.timestamp(), fCurrentRun, + fConfigIRSource.value, true) / + 1000.; // kHz } auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } - for (auto const& [a1, a2] : + for (auto const &[a1, a2] : combinations(o2::soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs))) { + groupedLegAAssocs, groupedLegBAssocs))) { auto twoTrackFilter = static_cast(0); auto twoTrackCommonFilter = static_cast(0); @@ -5406,9 +5355,9 @@ struct AnalysisAsymmetricPairing { (twoTrackFilter & (static_cast(1) << 31)); if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); // reconstructed, - // unmatched + Form("PairsBarrelSEPM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); // reconstructed, + // unmatched if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEPM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5422,8 +5371,8 @@ struct AnalysisAsymmetricPairing { } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPP_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEPP_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5436,8 +5385,8 @@ struct AnalysisAsymmetricPairing { } } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (isAmbi && fConfigAmbiguousHistograms.value) { fHistMan->FillHistClass(Form("PairsBarrelSEMM_ambiguous_%s", fLegCutNames[icut].Data()), @@ -5456,20 +5405,20 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else if (fConfigSameSignHistograms.value) { if (sign1 > 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEPP_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s", fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -5478,7 +5427,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair cuts + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } pairFilter |= (static_cast(1) << iPairCut); @@ -5508,26 +5457,26 @@ struct AnalysisAsymmetricPairing { fCommonTrackCutFilterMasks[iCommonCut]) { if (sign1 * sign2 < 0) { fHistMan->FillHistClass( - Form("PairsBarrelSEPM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqtablereader_helpers::varValues()); - } else if (fConfigSameSignHistograms.value) { - if (sign1 > 0) { - fHistMan->FillHistClass( - Form("PairsBarrelSEPP_%s_%s_%s", + Form("PairsBarrelSEPM_%s_%s_%s", fLegCutNames[icut].Data(), fCommonCutNames[iCommonCut].Data(), fPairCutNames[iPairCut].Data()), dqtablereader_helpers::varValues()); + } else if (fConfigSameSignHistograms.value) { + if (sign1 > 0) { + fHistMan->FillHistClass( + Form("PairsBarrelSEPP_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } else { fHistMan->FillHistClass( - Form("PairsBarrelSEMM_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data()), - dqtablereader_helpers::varValues()); + Form("PairsBarrelSEMM_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -5536,17 +5485,17 @@ struct AnalysisAsymmetricPairing { } } // end loop (cuts) ditrackList( - event.globalIndex(), VarManager::fgValues[VarManager::kMass], - VarManager::fgValues[VarManager::kPt], - VarManager::fgValues[VarManager::kEta], - VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), - twoTrackFilter, pairFilter, twoTrackCommonFilter); + event.globalIndex(), VarManager::fgValues[VarManager::kMass], + VarManager::fgValues[VarManager::kPt], + VarManager::fgValues[VarManager::kEta], + VarManager::fgValues[VarManager::kPhi], t1.sign() + t2.sign(), + twoTrackFilter, pairFilter, twoTrackCommonFilter); if constexpr (trackHasCov && TTwoProngFitter) { ditrackExtraList( - t1.globalIndex(), t2.globalIndex(), - VarManager::fgValues[VarManager::kVertexingTauzProjected], - VarManager::fgValues[VarManager::kVertexingLzProjected], - VarManager::fgValues[VarManager::kVertexingLxyProjected]); + t1.globalIndex(), t2.globalIndex(), + VarManager::fgValues[VarManager::kVertexingTauzProjected], + VarManager::fgValues[VarManager::kVertexingLzProjected], + VarManager::fgValues[VarManager::kVertexingLxyProjected]); } } // end inner assoc loop (leg A) } // end event loop @@ -5556,11 +5505,10 @@ struct AnalysisAsymmetricPairing { template - void runThreeProng(TEvents const& events, - o2::framework::Preslice& preslice, - TTrackAssocs const& /*assocs*/, TTracks const& tracks, - VarManager::PairCandidateType tripletType) - { + void runThreeProng(TEvents const &events, + o2::framework::Preslice &preslice, + TTrackAssocs const & /*assocs*/, TTracks const &tracks, + VarManager::PairCandidateType tripletType) { if (events.size() > 0) { // Additional protection to avoid crashing of // events.begin().runNumber() if (fCurrentRun != events.begin().runNumber()) { @@ -5569,7 +5517,7 @@ struct AnalysisAsymmetricPairing { } } - for (auto const& event : events) { + for (auto const &event : events) { if (!event.isEventSelected_bit(0)) { continue; } @@ -5583,35 +5531,35 @@ struct AnalysisAsymmetricPairing { dqtablereader_helpers::varValues()); auto groupedLegAAssocs = - legACandidateAssocs.sliceBy(preslice, event.globalIndex()); + legACandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegAAssocs.size() == 0) { continue; } auto groupedLegBAssocs = - legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legBCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegBAssocs.size() == 0) { continue; } auto groupedLegCAssocs = - legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); + legCCandidateAssocs.sliceBy(preslice, event.globalIndex()); if (groupedLegCAssocs.size() == 0) { continue; } // Based on triplet type, make suitable combinations of the partitions if (tripletType == VarManager::kTripleCandidateToPKPi) { - for (auto const& [a1, a2, a3] : + for (auto const &[a1, a2, a3] : combinations(o2::soa::CombinationsFullIndexPolicy( - groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { + groupedLegAAssocs, groupedLegBAssocs, groupedLegCAssocs))) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } else if (tripletType == VarManager::kTripleCandidateToKPiPi) { - for (auto const& a1 : groupedLegAAssocs) { - for (auto const& [a2, a3] : + for (auto const &a1 : groupedLegAAssocs) { + for (auto const &[a2, a3] : combinations(groupedLegBAssocs, groupedLegCAssocs)) { readTriplet( - a1, a2, a3, tracks, event, tripletType); + a1, a2, a3, tracks, event, tripletType); } } } else { @@ -5625,11 +5573,10 @@ struct AnalysisAsymmetricPairing { template - void readTriplet(TTrackAssoc const& a1, TTrackAssoc const& a2, - TTrackAssoc const& a3, TTracks const& /*tracks*/, - TEvent const& event, - VarManager::PairCandidateType tripletType) - { + void readTriplet(TTrackAssoc const &a1, TTrackAssoc const &a2, + TTrackAssoc const &a3, TTracks const & /*tracks*/, + TEvent const &event, + VarManager::PairCandidateType tripletType) { auto threeTrackFilter = static_cast(0); auto threeTrackCommonFilter = static_cast(0); for (int icut = 0; icut < fNLegCuts; ++icut) { @@ -5715,22 +5662,22 @@ struct AnalysisAsymmetricPairing { tripletType); if constexpr (TThreeProngFitter) { VarManager::FillTripletVertexing( - event, t1, t2, t3, tripletType); + event, t1, t2, t3, tripletType); } // Fill histograms for (int icut = 0; icut < fNLegCuts; icut++) { if (threeTrackFilter & (static_cast(1) << icut)) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("TripletsBarrelSE_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); if (fConfigAmbiguousHistograms.value && ((threeTrackFilter & (static_cast(1) << 29)) || (threeTrackFilter & (static_cast(1) << 30)) || (threeTrackFilter & (static_cast(1) << 31)))) { fHistMan->FillHistClass( - Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), - dqtablereader_helpers::varValues()); + Form("TripletsBarrelSE_ambiguous_%s", fLegCutNames[icut].Data()), + dqtablereader_helpers::varValues()); } for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (threeTrackCommonFilter & fCommonTrackCutFilterMasks[iCommonCut]) { @@ -5744,7 +5691,7 @@ struct AnalysisAsymmetricPairing { for (auto cut = fPairCuts.begin(); cut != fPairCuts.end(); cut++, iPairCut++) { if (!((*cut)->IsSelected( - dqtablereader_helpers::varValues()))) { // apply pair cuts + dqtablereader_helpers::varValues()))) { // apply pair cuts continue; } // Histograms with pair cuts @@ -5770,20 +5717,20 @@ struct AnalysisAsymmetricPairing { } void processKaonPionSkimmed( - MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runAsymmetricPairing( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks); } void processKaonPionSkimmedMultExtra( - MyEventsVtxCovZdcFitSelectedMultExtra const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovZdcFitSelectedMultExtra const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runAsymmetricPairing(events, trackAssocsPerCollision, @@ -5791,20 +5738,20 @@ struct AnalysisAsymmetricPairing { } void processKaonPionPionSkimmed( - MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - VarManager::kTripleCandidateToKPiPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToKPiPi); } void processKaonPionPionSkimmedMultExtra( - MyEventsVtxCovZdcFitSelectedMultExtra const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovZdcFitSelectedMultExtra const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runThreeProng(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, @@ -5812,17 +5759,16 @@ struct AnalysisAsymmetricPairing { } void processProtonKaonPionSkimmed( - MyEventsVtxCovZdcFitSelected const& events, - o2::soa::Join const& barrelAssocs, - MyBarrelTracksWithCovWithAmbiguities const& barrelTracks) - { + MyEventsVtxCovZdcFitSelected const &events, + o2::soa::Join const + &barrelAssocs, + MyBarrelTracksWithCovWithAmbiguities const &barrelTracks) { runThreeProng( - events, trackAssocsPerCollision, barrelAssocs, barrelTracks, - VarManager::kTripleCandidateToPKPi); + events, trackAssocsPerCollision, barrelAssocs, barrelTracks, + VarManager::kTripleCandidateToPKPi); } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -5837,8 +5783,8 @@ struct AnalysisAsymmetricPairing { PROCESS_SWITCH(AnalysisAsymmetricPairing, processProtonKaonPionSkimmed, "Run proton kaon pion triplets, with skimmed tracks", false); PROCESS_SWITCH( - AnalysisAsymmetricPairing, processDummy, - "Dummy function, enabled only if none of the others are enabled", true); + AnalysisAsymmetricPairing, processDummy, + "Dummy function, enabled only if none of the others are enabled", true); }; // Combines dileptons with barrel or muon tracks for either resonance or @@ -5852,82 +5798,82 @@ struct AnalysisDileptonTrack { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigTrackCuts{ - "cfgTrackCuts", "kaonPID", - "Comma separated list of cuts for the track to be correlated with the " - "dileptons"}; + "cfgTrackCuts", "kaonPID", + "Comma separated list of cuts for the track to be correlated with the " + "dileptons"}; o2::framework::Configurable fConfigDileptonLowMass{ - "cfgDileptonLowMass", 2.8, - "Low mass cut for the dileptons used in analysis"}; + "cfgDileptonLowMass", 2.8, + "Low mass cut for the dileptons used in analysis"}; o2::framework::Configurable fConfigDileptonHighMass{ - "cfgDileptonHighMass", 3.2, - "High mass cut for the dileptons used in analysis"}; + "cfgDileptonHighMass", 3.2, + "High mass cut for the dileptons used in analysis"}; o2::framework::Configurable fConfigDileptonLowpTCut{ - "cfgDileptonLowpTCut", 0.0, - "Low pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLowpTCut", 0.0, + "Low pT cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonHighpTCut{ - "cfgDileptonHighpTCut", 1E5, - "High pT cut for dileptons used in the triplet vertexing"}; + "cfgDileptonHighpTCut", 1E5, + "High pT cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonRapCutAbs{ - "cfgDileptonRapCutAbs", 1.0, - "Rap cut for dileptons used in the triplet vertexing"}; + "cfgDileptonRapCutAbs", 1.0, + "Rap cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonLxyCut{ - "cfgDileptonLxyCut", 0.0, - "Lxy cut for dileptons used in the triplet vertexing"}; + "cfgDileptonLxyCut", 0.0, + "Lxy cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigDileptonTauxyCut{ - "cfgDileptonTauxyCut", -10000, - "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; + "cfgDileptonTauxyCut", -10000, + "Tauxy cut for dileptons used to select the non-prompt Jpsi"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigHistogramSubgroups{ - "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", - "Comma separated list of dilepton-track histogram subgroups"}; + "cfgDileptonTrackHistogramsSubgroups", "invmass,vertexing", + "Comma separated list of dilepton-track histogram subgroups"}; o2::framework::Configurable fConfigAddJSONHistograms{ - "cfgAddJSONHistograms", "", "Histograms in JSON format"}; + "cfgAddJSONHistograms", "", "Histograms in JSON format"}; o2::framework::Configurable fConfigMixingDepth{ - "cfgMixingDepth", 5, "Event mixing pool depth"}; + "cfgMixingDepth", 5, "Event mixing pool depth"}; o2::framework::Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Configurable fConfigCcdbUrl{ - "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + "ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; o2::framework::Configurable fConfigNoLaterThan{ - "ccdb-no-later-than", - std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()) - .count(), - "latest acceptable timestamp of creation for the object"}; + "ccdb-no-later-than", + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(), + "latest acceptable timestamp of creation for the object"}; o2::framework::Configurable fConfigGeoPath{ - "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; + "geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"}; o2::framework::Configurable fConfigUseRapcut{ - "cfgUseMCRapcut", false, - "Use Rap cut for dileptons used in the triplet vertexing"}; + "cfgUseMCRapcut", false, + "Use Rap cut for dileptons used in the triplet vertexing"}; o2::framework::Configurable fConfigEnergycorrelator{ - "cfgEnergycorrelator", false, - "Add some hist for energy correlator study"}; + "cfgEnergycorrelator", false, + "Add some hist for energy correlator study"}; o2::framework::Configurable fConfigApplyMassEC{ - "cfgApplyMassEC", false, - "Apply fit mass for sideband for the energy correlator study"}; + "cfgApplyMassEC", false, + "Apply fit mass for sideband for the energy correlator study"}; o2::framework::Configurable> fConfigFitmassEC{ - "cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, - "parameter from the fit fuction and fit range"}; + "cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, + "parameter from the fit fuction and fit range"}; o2::framework::Configurable> fConfigTransRange{ - "cfgTransRange", std::vector{0.333333, 0.666667}, - "Transverse region for the energy correlstor analysis"}; + "cfgTransRange", std::vector{0.333333, 0.666667}, + "Transverse region for the energy correlstor analysis"}; o2::framework::Configurable fConfigApplyEfficiency{ - "cfgApplyEfficiency", false, - "If true, apply efficiency correction for the energy correlator study"}; + "cfgApplyEfficiency", false, + "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigApplyEfficiencyME{ - "cfgApplyEfficiencyME", false, - "If true, apply efficiency correction for the energy correlator study"}; + "cfgApplyEfficiencyME", false, + "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigAccCCDBPath{ - "AccCCDBPath", "Users/y/yalin/pptest/test2", - "Path of the efficiency corrections"}; + "AccCCDBPath", "Users/y/yalin/pptest/test2", + "Path of the efficiency corrections"}; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -5952,42 +5898,44 @@ struct AnalysisDileptonTrack { // TODO: The filter expressions seem to always use the default value of // configurables, not the values from the actual configuration file o2::framework::expressions::Filter - eventFilter = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); o2::framework::expressions::Filter dileptonFilter = - o2::aod::reducedpair::pt > - fConfigDileptonLowpTCut&& o2::aod::reducedpair::pt< - fConfigDileptonHighpTCut && - o2::aod::reducedpair::mass> fConfigDileptonLowMass&& o2::aod::reducedpair::mass fConfigDileptonLxyCut&& o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; + o2::aod::reducedpair::pt > + fConfigDileptonLowpTCut &&o2::aod::reducedpair::pt< + fConfigDileptonHighpTCut && + o2::aod::reducedpair::mass> fConfigDileptonLowMass + &&o2::aod::reducedpair::mass< + fConfigDileptonHighMass && o2::aod::reducedpair::sign == 0 && + o2::aod::reducedpair::lxy> fConfigDileptonLxyCut + &&o2::aod::reducedpair::tauxy > fConfigDileptonTauxyCut; o2::framework::expressions::Filter - filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > - static_cast(0); + filterBarrel = o2::aod::dqanalysisflags::isBarrelSelected > + static_cast(0); o2::framework::expressions::Filter - filterMuon = o2::aod::dqanalysisflags::isMuonSelected > - static_cast(0); + filterMuon = o2::aod::dqanalysisflags::isMuonSelected > + static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use two values array to avoid mixing up the quantities - float* fValuesDilepton = nullptr; - float* fValuesHadron = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesDilepton = nullptr; + float *fValuesHadron = nullptr; + HistogramManager *fHistMan = nullptr; o2::framework::NoBinningPolicy fHashBin; - TF1* fMassBkg = nullptr; + TF1 *fMassBkg = nullptr; - TH2F* hAcceptance_rec = nullptr; - TH2F* hAcceptance_gen = nullptr; - TH2F* hEfficiency_dilepton = nullptr; - TH2F* hEfficiency_hadron = nullptr; - TH1F* hMasswindow = nullptr; + TH2F *hAcceptance_rec = nullptr; + TH2F *hAcceptance_gen = nullptr; + TH2F *hEfficiency_dilepton = nullptr; + TH2F *hEfficiency_hadron = nullptr; + TH1F *hMasswindow = nullptr; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { bool isBarrel = context.mOptions.get("processBarrelSkimmed"); bool isBarrelME = context.mOptions.get("processBarrelMixedEvent"); bool isBarrelAsymmetric = context.mOptions.get("processDstarToD0Pi"); @@ -6024,65 +5972,65 @@ struct AnalysisDileptonTrack { std::string cfgTrackSelection_TrackCuts; if (isBarrel || isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgTrackCuts", - cfgTrackSelection_TrackCuts, false); + context, "analysis-track-selection", "cfgTrackCuts", + cfgTrackSelection_TrackCuts, false); } else { o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCuts", - cfgTrackSelection_TrackCuts, false); + context, "analysis-muon-selection", "cfgMuonCuts", + cfgTrackSelection_TrackCuts, false); } - TObjArray* cfgTrackSelection_objArrayTrackCuts = nullptr; + TObjArray *cfgTrackSelection_objArrayTrackCuts = nullptr; if (!cfgTrackSelection_TrackCuts.empty()) { cfgTrackSelection_objArrayTrackCuts = - TString(cfgTrackSelection_TrackCuts).Tokenize(","); + TString(cfgTrackSelection_TrackCuts).Tokenize(","); } // get also the list of cuts specified via the JSON parameters if (isBarrel || isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", - cfgTrackSelection_TrackCuts, false); + context, "analysis-track-selection", "cfgBarrelTrackCutsJSON", + cfgTrackSelection_TrackCuts, false); } else { o2::common::core::getTaskOptionValue( - context, "analysis-muon-selection", "cfgMuonCutsJSON", - cfgTrackSelection_TrackCuts, false); + context, "analysis-muon-selection", "cfgMuonCutsJSON", + cfgTrackSelection_TrackCuts, false); } if (!cfgTrackSelection_TrackCuts.empty()) { if (cfgTrackSelection_objArrayTrackCuts == nullptr) { cfgTrackSelection_objArrayTrackCuts = new TObjArray(); } - std::vector addTrackCuts = - o2::aod::dqcuts::GetCutsFromJSON( - cfgTrackSelection_TrackCuts.data()); - for (auto const& t : addTrackCuts) { + std::vector addTrackCuts = + o2::aod::dqcuts::GetCutsFromJSON( + cfgTrackSelection_TrackCuts.data()); + for (auto const &t : addTrackCuts) { auto tempObjStr = new TObjString(t->GetName()); cfgTrackSelection_objArrayTrackCuts->Add(tempObjStr); } } if (cfgTrackSelection_objArrayTrackCuts->GetEntries() == 0) { LOG(fatal) - << " No track cuts found in the barrel or muon upstream tasks"; + << " No track cuts found in the barrel or muon upstream tasks"; } // store all the computed track cut names in a vector for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { fTrackCutNames.push_back( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName()); } // get the list of associated track cuts to be combined with the dileptons // and // check that these were computed upstream and create a bit mask - TObjArray* cfgDileptonTrack_objArrayTrackCuts = nullptr; + TObjArray *cfgDileptonTrack_objArrayTrackCuts = nullptr; if (!fConfigTrackCuts.value.empty()) { cfgDileptonTrack_objArrayTrackCuts = - TString(fConfigTrackCuts.value).Tokenize(","); + TString(fConfigTrackCuts.value).Tokenize(","); } else { LOG(fatal) << " No track cuts specified! Check it out!"; } for (int icut = 0; icut < cfgDileptonTrack_objArrayTrackCuts->GetEntries(); icut++) { if (!cfgTrackSelection_objArrayTrackCuts->FindObject( - cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { + cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName())) { LOG(fatal) << "Specified track cut (" << cfgDileptonTrack_objArrayTrackCuts->At(icut)->GetName() << ") not found in the list of computed cuts by the " @@ -6092,7 +6040,7 @@ struct AnalysisDileptonTrack { for (int icut = 0; icut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); icut++) { if (cfgDileptonTrack_objArrayTrackCuts->FindObject( - cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { + cfgTrackSelection_objArrayTrackCuts->At(icut)->GetName())) { fTrackCutBitMap |= (static_cast(1) << icut); } } @@ -6111,28 +6059,28 @@ struct AnalysisDileptonTrack { std::string cfgPairing_CommonTrackCuts; if (isBarrel) { o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgTrackCuts", - cfgPairing_TrackCuts, false); + context, "analysis-same-event-pairing", "cfgTrackCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isMuon) { o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgMuonCuts", - cfgPairing_TrackCuts, false); + context, "analysis-same-event-pairing", "cfgMuonCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-same-event-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-same-event-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); } else if (isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgLegCuts", - cfgPairing_TrackCuts, false); + context, "analysis-asymmetric-pairing", "cfgLegCuts", + cfgPairing_TrackCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgPairCuts", - cfgPairing_PairCuts, false); + context, "analysis-asymmetric-pairing", "cfgPairCuts", + cfgPairing_PairCuts, false); o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", - cfgPairing_CommonTrackCuts, false); + context, "analysis-asymmetric-pairing", "cfgCommonTrackCuts", + cfgPairing_CommonTrackCuts, false); } if (cfgPairing_TrackCuts.empty()) { LOG(fatal) << "There are no dilepton cuts specified in the upstream in " @@ -6143,18 +6091,18 @@ struct AnalysisDileptonTrack { TString cfgPairing_strCommonTrackCuts = cfgPairing_CommonTrackCuts; if (!cfgPairing_strCommonTrackCuts.IsNull()) { // if common track cuts std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); fNCommonTrackCuts = objArrayCommon->GetEntries(); for (int icut = 0; icut < fNCommonTrackCuts; ++icut) { for (int iicut = 0; iicut < cfgTrackSelection_objArrayTrackCuts->GetEntries(); iicut++) { if (std::strcmp( - cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), - objArrayCommon->At(icut)->GetName()) == 0) { + cfgTrackSelection_objArrayTrackCuts->At(iicut)->GetName(), + objArrayCommon->At(icut)->GetName()) == 0) { fCommonTrackCutMap[icut] = iicut; fCommonPairCutNames.push_back( - objArrayCommon->At(icut)->GetName()); + objArrayCommon->At(icut)->GetName()); } } } @@ -6162,20 +6110,20 @@ struct AnalysisDileptonTrack { // Get also the pair cuts specified via the JSON parameters if (isBarrelAsymmetric) { o2::common::core::getTaskOptionValue( - context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", - cfgPairing_PairCutsJSON, false); + context, "analysis-asymmetric-pairing", "cfgPairCutsJSON", + cfgPairing_PairCutsJSON, false); TString addPairCutsStr = cfgPairing_PairCutsJSON; if (addPairCutsStr != "") { - std::vector addPairCuts = - o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); - for (auto const& t : addPairCuts) { + std::vector addPairCuts = + o2::aod::dqcuts::GetCutsFromJSON(addPairCutsStr.Data()); + for (auto const &t : addPairCuts) { cfgPairing_PairCuts += Form(",%s", t->GetName()); } } } std::unique_ptr objArrayPairCuts( - TString(cfgPairing_PairCuts).Tokenize(",")); + TString(cfgPairing_PairCuts).Tokenize(",")); fNPairCuts = objArrayPairCuts->GetEntries(); for (int j = 0; j < fNPairCuts; j++) { fPairCutNames.push_back(objArrayPairCuts->At(j)->GetName()); @@ -6183,7 +6131,7 @@ struct AnalysisDileptonTrack { // array of single lepton cuts specified in the same-analysis-pairing task std::unique_ptr cfgPairing_objArrayTrackCuts( - TString(cfgPairing_TrackCuts).Tokenize(",")); + TString(cfgPairing_TrackCuts).Tokenize(",")); // If asymmetric pairs are used, the number of cuts should come from the // asymmetric-pairing task if (isBarrelAsymmetric) { @@ -6200,15 +6148,15 @@ struct AnalysisDileptonTrack { // dileptons if (!isBarrelAsymmetric) { if (!cfgPairing_objArrayTrackCuts->FindObject( - fTrackCutNames[icut].Data())) { + fTrackCutNames[icut].Data())) { continue; } pairLegCutName = fTrackCutNames[icut].Data(); } else { // For asymmetric pairs we access the leg cuts instead pairLegCutName = - dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) - ->GetString(); + dynamic_cast(cfgPairing_objArrayTrackCuts->At(icut)) + ->GetString(); } fLegCutNames.push_back(pairLegCutName); @@ -6234,7 +6182,7 @@ struct AnalysisDileptonTrack { if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6268,7 +6216,7 @@ struct AnalysisDileptonTrack { if (!cfgPairing_strCommonTrackCuts.IsNull()) { std::unique_ptr objArrayCommon( - cfgPairing_strCommonTrackCuts.Tokenize(",")); + cfgPairing_strCommonTrackCuts.Tokenize(",")); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; ++iCommonCut) { DefineHistograms(fHistMan, @@ -6291,10 +6239,10 @@ struct AnalysisDileptonTrack { if (isBarrelME || isMuonME) { DefineHistograms( - fHistMan, - Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), - fTrackCutNames[iCutTrack].Data()), - "dilepton-hadron-array-correlation"); // define ME histograms + fHistMan, + Form("DileptonTrackME_%s_%s", pairLegCutName.Data(), + fTrackCutNames[iCutTrack].Data()), + "dilepton-hadron-array-correlation"); // define ME histograms if (fConfigEnergycorrelator) { DefineHistograms(fHistMan, Form("DileptonTrackECME_%s_%s", @@ -6308,8 +6256,8 @@ struct AnalysisDileptonTrack { } o2::aod::dqhistograms::AddHistogramsFromJSON( - fHistMan, - fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON + fHistMan, + fConfigAddJSONHistograms.value.c_str()); // ad-hoc histograms via JSON VarManager::SetUseVars(fHistMan->GetUsedVars()); fOutputList.setObject(fHistMan->GetMainHistogramList()); @@ -6326,16 +6274,15 @@ struct AnalysisDileptonTrack { // the background mass distribution in signal region std::vector fMassBkgpar = fConfigFitmassEC; fMassBkg = - new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); + new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]); fMassBkg->SetParameters(fMassBkgpar[0]); fMassBkg->SetNpx(1000); } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { + void initParamsFromCCDB(uint64_t timestamp) { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -6347,27 +6294,26 @@ struct AnalysisDileptonTrack { VarManager::SetupThreeProngKFParticle(magField); } else { VarManager::SetupThreeProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } - void initAccFromCCDB(uint64_t timestamp) - { + void initAccFromCCDB(uint64_t timestamp) { auto listAccs = - fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); + fCCDB->getForTimeStamp(fConfigAccCCDBPath, timestamp); if (!listAccs) { LOG(fatal) << "Problem getting TList object with efficiencies!"; } hEfficiency_dilepton = - dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); + dynamic_cast(listAccs->FindObject("hEfficiency_dilepton")); hEfficiency_hadron = - dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); + dynamic_cast(listAccs->FindObject("hEfficiency_hadron")); hAcceptance_rec = - dynamic_cast(listAccs->FindObject("hAcceptance_rec")); + dynamic_cast(listAccs->FindObject("hAcceptance_rec")); hAcceptance_gen = - dynamic_cast(listAccs->FindObject("hAcceptance_gen")); - hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); + dynamic_cast(listAccs->FindObject("hAcceptance_gen")); + hMasswindow = dynamic_cast(listAccs->FindObject("hMasswindow")); if (!hAcceptance_rec || !hAcceptance_gen || !hEfficiency_dilepton || !hEfficiency_hadron || !hMasswindow) { LOG(fatal) << "Problem getting histograms from the TList object with " @@ -6375,8 +6321,7 @@ struct AnalysisDileptonTrack { } } - float GetSafeInterpolationWeight(TH2* hEff, float x, float y) - { + float GetSafeInterpolationWeight(TH2 *hEff, float x, float y) { if (!hEff) { return 1.0; } @@ -6396,15 +6341,14 @@ struct AnalysisDileptonTrack { template - void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, - TTracks const& tracks, TDileptons const& dileptons) - { + void runDileptonHadron(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, TDileptons const &dileptons) { VarManager::ResetValues(0, VarManager::kNVars, fValuesHadron); VarManager::ResetValues(0, VarManager::kNVars, fValuesDilepton); VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6429,8 +6373,8 @@ struct AnalysisDileptonTrack { // regular dileptons fHistMan->FillHistClass( - Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s", fLegCutNames[icut].Data()), + fValuesDilepton); // other pairs, e.g.: D0s if constexpr (TCandidateType == @@ -6441,9 +6385,9 @@ struct AnalysisDileptonTrack { iCommonCut++) { if (dilepton.commonFilterMap_bit(fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data()), + fValuesDilepton); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { @@ -6455,13 +6399,13 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonsSelected_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[icut].Data()), - fValuesDilepton); + Form("DileptonsSelected_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[icut].Data()), + fValuesDilepton); } } } @@ -6470,7 +6414,7 @@ struct AnalysisDileptonTrack { } // end loop over single lepton selections // loop over hadrons - for (auto const& assoc : assocs) { + for (auto const &assoc : assocs) { uint32_t trackSelection = 0; if constexpr (TCandidateType == VarManager::kBtoJpsiEEK) { @@ -6492,7 +6436,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); // for the energy correlator analysis float Effweight_rec = 1.0f; @@ -6502,53 +6446,53 @@ struct AnalysisDileptonTrack { float hadron_eta = track.eta(); float hadron_phi = track.phi(); float deltaphi = RecoDecay::constrainAngle( - dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); Effweight_rec = GetSafeInterpolationWeight( - hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); float Effdilepton = GetSafeInterpolationWeight( - hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); float Effhadron = GetSafeInterpolationWeight( - hEfficiency_hadron, track.eta(), track.pt()); + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); Effweight_rec = - Effweight_rec * Effdilepton * Effhadron * Masswindow; + Effweight_rec * Effdilepton * Effhadron * Masswindow; } std::vector fTransRange = fConfigTransRange; VarManager::FillEnergyCorrelatorTriple( - event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], - fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), - 1. / Effweight_rec); + event, lepton1, lepton2, track, fValuesHadron, fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); // table to be written out for ML analysis BmesonsTable( - event.runNumber(), event.globalIndex(), event.timestamp(), - fValuesHadron[VarManager::kPairMass], dilepton.mass(), - fValuesHadron[VarManager::kDeltaMass], - fValuesHadron[VarManager::kPairPt], - fValuesHadron[VarManager::kPairEta], - fValuesHadron[VarManager::kPairPhi], - fValuesHadron[VarManager::kPairRap], - fValuesHadron[VarManager::kVertexingLxy], - fValuesHadron[VarManager::kVertexingLxyz], - fValuesHadron[VarManager::kVertexingLz], - fValuesHadron[VarManager::kVertexingTauxy], - fValuesHadron[VarManager::kVertexingTauz], - fValuesHadron[VarManager::kCosPointingAngle], - fValuesHadron[VarManager::kVertexingChi2PCA], track.globalIndex(), - lepton1.globalIndex(), lepton2.globalIndex(), - track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), - lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), - lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), - track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), - lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), - lepton2.tpcNSigmaPr(), track.itsClusterMap(), - lepton1.itsClusterMap(), lepton2.itsClusterMap(), - track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), - track.tpcNClsFound(), lepton1.tpcNClsFound(), - lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), - lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection); + event.runNumber(), event.globalIndex(), event.timestamp(), + fValuesHadron[VarManager::kPairMass], dilepton.mass(), + fValuesHadron[VarManager::kDeltaMass], + fValuesHadron[VarManager::kPairPt], + fValuesHadron[VarManager::kPairEta], + fValuesHadron[VarManager::kPairPhi], + fValuesHadron[VarManager::kPairRap], + fValuesHadron[VarManager::kVertexingLxy], + fValuesHadron[VarManager::kVertexingLxyz], + fValuesHadron[VarManager::kVertexingLz], + fValuesHadron[VarManager::kVertexingTauxy], + fValuesHadron[VarManager::kVertexingTauz], + fValuesHadron[VarManager::kCosPointingAngle], + fValuesHadron[VarManager::kVertexingChi2PCA], track.globalIndex(), + lepton1.globalIndex(), lepton2.globalIndex(), + track.tpcInnerParam(), track.eta(), dilepton.pt(), dilepton.eta(), + lepton1.tpcInnerParam(), lepton1.eta(), lepton2.tpcInnerParam(), + lepton2.eta(), track.tpcNSigmaKa(), track.tpcNSigmaPi(), + track.tpcNSigmaPr(), track.tofNSigmaKa(), lepton1.tpcNSigmaEl(), + lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton2.tpcNSigmaEl(), lepton2.tpcNSigmaPi(), + lepton2.tpcNSigmaPr(), track.itsClusterMap(), + lepton1.itsClusterMap(), lepton2.itsClusterMap(), + track.itsChi2NCl(), lepton1.itsChi2NCl(), lepton2.itsChi2NCl(), + track.tpcNClsFound(), lepton1.tpcNClsFound(), + lepton2.tpcNClsFound(), track.tpcChi2NCl(), lepton1.tpcChi2NCl(), + lepton2.tpcChi2NCl(), dilepton.filterMap_raw(), trackSelection); } if constexpr (TCandidateType == VarManager::kDstarToD0KPiPi) { trackSelection = (assoc.isBarrelSelected_raw() & fTrackCutBitMap); @@ -6571,7 +6515,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); } if constexpr (TCandidateType == VarManager::kBcToThreeMuons) { trackSelection = (assoc.isMuonSelected_raw() & fTrackCutBitMap); @@ -6587,7 +6531,7 @@ struct AnalysisDileptonTrack { VarManager::FillDileptonHadron(dilepton, track, fValuesHadron); VarManager::FillDileptonTrackVertexing( - event, lepton1, lepton2, track, fValuesHadron); + event, lepton1, lepton2, track, fValuesHadron); // Fill table for correlation analysis DileptonTrackTable(fValuesHadron[VarManager::kDeltaEta], fValuesHadron[VarManager::kDeltaPhi], @@ -6625,32 +6569,32 @@ struct AnalysisDileptonTrack { for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } for (int iPairCut = 0; iPairCut < fNPairCuts; iPairCut++) { if (dilepton.pairFilterMap_bit(iPairCut)) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s", fLegCutNames[icut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); for (int iCommonCut = 0; iCommonCut < fNCommonTrackCuts; iCommonCut++) { if (dilepton.commonFilterMap_bit( - fCommonTrackCutMap[iCommonCut])) { + fCommonTrackCutMap[iCommonCut])) { fHistMan->FillHistClass( - Form("DileptonTrack_%s_%s_%s_%s", - fLegCutNames[icut].Data(), - fCommonPairCutNames[iCommonCut].Data(), - fPairCutNames[iPairCut].Data(), - fTrackCutNames[iTrackCut].Data()), - fValuesHadron); + Form("DileptonTrack_%s_%s_%s_%s", + fLegCutNames[icut].Data(), + fCommonPairCutNames[iCommonCut].Data(), + fPairCutNames[iPairCut].Data(), + fTrackCutNames[iTrackCut].Data()), + fValuesHadron); } } } @@ -6663,19 +6607,18 @@ struct AnalysisDileptonTrack { } o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dielectronsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; o2::framework::Preslice ditracksPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processBarrelSkimmed( - o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - o2::soa::Filtered const& dileptons) - { + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6687,11 +6630,11 @@ struct AnalysisDileptonTrack { } fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedBarrelAssocs, tracks, groupedDielectrons); @@ -6699,12 +6642,11 @@ struct AnalysisDileptonTrack { } void processDstarToD0Pi( - o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - o2::soa::Filtered const& ditracks) - { + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &ditracks) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6713,29 +6655,28 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDitracks = - ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); + ditracks.sliceBy(ditracksPerCollision, event.globalIndex()); runDileptonHadron( - event, groupedBarrelAssocs, tracks, groupedDitracks); + event, groupedBarrelAssocs, tracks, groupedDitracks); } } o2::framework::Preslice muonAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dimuonsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processMuonSkimmed( - o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyMuonTracksWithCov const& tracks, - o2::soa::Filtered const& dileptons) - { + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyMuonTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { // set up KF or DCAfitter if (events.size() == 0) { return; @@ -6744,11 +6685,11 @@ struct AnalysisDileptonTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { auto groupedMuonAssocs = - assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event.globalIndex()); auto groupedDimuons = - dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event.globalIndex()); runDileptonHadron(event, groupedMuonAssocs, tracks, groupedDimuons); @@ -6756,12 +6697,12 @@ struct AnalysisDileptonTrack { } void processBarrelMixedEvent( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - o2::soa::Filtered const& dileptons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } @@ -6777,8 +6718,8 @@ struct AnalysisDileptonTrack { events.bindExternalIndices(&assocs); // loop over two event comibnations - for (auto const& [event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { // fill event quantities VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, @@ -6786,20 +6727,20 @@ struct AnalysisDileptonTrack { // get the dilepton slice for event1 auto evDileptons = - dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); // get the track associations slice for event2 auto evAssocs = - assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); // loop over associations - for (auto const& assoc : evAssocs) { + for (auto const &assoc : evAssocs) { // check that this track fulfills at least one of the specified cuts uint32_t trackSelection = - (assoc.isBarrelSelected_raw() & fTrackCutBitMap); + (assoc.isBarrelSelected_raw() & fTrackCutBitMap); if (trackSelection == 0) { continue; } @@ -6808,7 +6749,7 @@ struct AnalysisDileptonTrack { auto track = assoc.template reducedtrack_as(); // loop over dileptons - for (auto const& dilepton : evDileptons) { + for (auto const &dilepton : evDileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); auto lepton2 = tracks.rawIteratorAt(dilepton.index1Id()); @@ -6834,21 +6775,21 @@ struct AnalysisDileptonTrack { float hadron_eta = track.eta(); float hadron_phi = track.phi(); float deltaphi = RecoDecay::constrainAngle( - dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); + dilepton_phi - hadron_phi, -0.5 * o2::constants::math::PI); Effweight_rec = GetSafeInterpolationWeight( - hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); + hAcceptance_rec, dilepton_eta - hadron_eta, deltaphi); float Effdilepton = GetSafeInterpolationWeight( - hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); + hEfficiency_dilepton, dilepton.rap(), dilepton.pt()); float Effhadron = GetSafeInterpolationWeight( - hEfficiency_hadron, track.eta(), track.pt()); + hEfficiency_hadron, track.eta(), track.pt()); float Masswindow = hMasswindow->Interpolate(dilepton.pt()); if (fConfigApplyEfficiencyME) { Effweight_rec = - Effdilepton * Effhadron * - Masswindow; // for the moment, apply the efficiency correction - // also for the mixed event pairs, but this can be - // changed in case we want to apply it only for - // the same event pairs + Effdilepton * Effhadron * + Masswindow; // for the moment, apply the efficiency correction + // also for the mixed event pairs, but this can be + // changed in case we want to apply it only for + // the same event pairs } else { Effweight_rec = Effweight_rec * Effdilepton * Effhadron * Masswindow; // apply acceptance and efficiency @@ -6859,10 +6800,10 @@ struct AnalysisDileptonTrack { VarManager::FillEnergyCorrelatorTriple( - event1, lepton1, lepton2, track, - dqtablereader_helpers::varValues(), fTransRange[0], - fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), - 1. / Effweight_rec); + event1, lepton1, lepton2, track, + dqtablereader_helpers::varValues(), fTransRange[0], + fTransRange[1], fConfigApplyMassEC, fMassBkg->GetRandom(), + 1. / Effweight_rec); // loop over dilepton leg cuts and track cuts and fill histograms // separately for each combination @@ -6880,10 +6821,10 @@ struct AnalysisDileptonTrack { dqtablereader_helpers::varValues()); if (fConfigEnergycorrelator) { fHistMan->FillHistClass( - Form("DileptonTrackECME_%s_%s", - fTrackCutNames[icut].Data(), - fTrackCutNames[iTrackCut].Data()), - dqtablereader_helpers::varValues()); + Form("DileptonTrackECME_%s_%s", + fTrackCutNames[icut].Data(), + fTrackCutNames[iTrackCut].Data()), + dqtablereader_helpers::varValues()); } } } @@ -6894,33 +6835,33 @@ struct AnalysisDileptonTrack { } void processMuonMixedEvent( - o2::soa::Filtered& events, // o2-linter: disable=const-ref-in-process - o2::soa::Filtered> const& assocs, - MyMuonTracksWithCov const&, - o2::soa::Filtered const& dileptons) - { + o2::soa::Filtered + &events, // o2-linter: disable=const-ref-in-process + o2::soa::Filtered> const &assocs, + MyMuonTracksWithCov const &, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } events.bindExternalIndices(&dileptons); events.bindExternalIndices(&assocs); - for (auto const& [event1, event2] : selfCombinations( - fHashBin, fConfigMixingDepth.value, -1, events, events)) { + for (auto const &[event1, event2] : selfCombinations( + fHashBin, fConfigMixingDepth.value, -1, events, events)) { VarManager::ResetValues(0, VarManager::kNVars); VarManager::FillEvent(event1, dqtablereader_helpers::varValues()); auto evDileptons = - dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); + dileptons.sliceBy(dimuonsPerCollision, event1.globalIndex()); evDileptons.bindExternalIndices(&events); auto evAssocs = - assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); + assocs.sliceBy(muonAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); - for (auto const& assoc : evAssocs) { + for (auto const &assoc : evAssocs) { uint32_t muonSelection = assoc.isMuonSelected_raw() & fTrackCutBitMap; if (muonSelection == 0) { @@ -6928,7 +6869,7 @@ struct AnalysisDileptonTrack { } auto track = assoc.template reducedmuon_as(); - for (auto const& dilepton : evDileptons) { + for (auto const &dilepton : evDileptons) { VarManager::FillDileptonHadron(dilepton, track, dqtablereader_helpers::varValues()); for (int icut = 0; icut < fNCuts; icut++) { @@ -6951,8 +6892,7 @@ struct AnalysisDileptonTrack { } // end event loop } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -6976,37 +6916,37 @@ struct AnalysisDileptonTrackTrack { o2::framework::OutputObj fOutputList{"output"}; o2::framework::Configurable fConfigTrackCut1{ - "cfgTrackCut1", "pionPIDCut1", - "track1 cut"}; // used for select the tracks from SelectedTracks + "cfgTrackCut1", "pionPIDCut1", + "track1 cut"}; // used for select the tracks from SelectedTracks o2::framework::Configurable fConfigTrackCut2{ - "cfgTrackCut2", "pionPIDCut2", - "track2 cut"}; // used for select the tracks from SelectedTracks + "cfgTrackCut2", "pionPIDCut2", + "track2 cut"}; // used for select the tracks from SelectedTracks o2::framework::Configurable fConfigDileptonCut{ - "cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; + "cfgDiLeptonCut", "pairJpsi2", "Dilepton cut"}; o2::framework::Configurable fConfigQuadrupletCuts{ - "cfgQuadrupletCuts", "pairX3872Cut1", - "Comma separated list of Dilepton-Track-Track cut"}; + "cfgQuadrupletCuts", "pairX3872Cut1", + "Comma separated list of Dilepton-Track-Track cut"}; o2::framework::Configurable fConfigAddDileptonHistogram{ - "cfgAddDileptonHistogram", "barrel", - "Comma separated list of histograms"}; + "cfgAddDileptonHistogram", "barrel", + "Comma separated list of histograms"}; o2::framework::Configurable fConfigAddQuadrupletHistogram{ - "cfgAddQuadrupletHistogram", "xtojpsipipi", - "Comma separated list of histograms"}; + "cfgAddQuadrupletHistogram", "xtojpsipipi", + "Comma separated list of histograms"}; o2::framework::Configurable fConfigSetupFourProngFitter{ - "cfgSetupFourProngFitter", false, - "Use DCA for secondary vertex reconstruction (DCAFitter is used by " - "default)"}; + "cfgSetupFourProngFitter", false, + "Use DCA for secondary vertex reconstruction (DCAFitter is used by " + "default)"}; o2::framework::Configurable fConfigUseKFVertexing{ - "cfgUseKFVertexing", false, - "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " - "by default)"}; + "cfgUseKFVertexing", false, + "Use KF Particle for secondary vertex reconstruction (DCAFitter is used " + "by default)"}; o2::framework::Configurable fConfigGRPmagPath{ - "cfgGrpmagPath", "GLO/Config/GRPMagField", - "CCDB path of the GRPMagField object"}; + "cfgGrpmagPath", "GLO/Config/GRPMagField", + "CCDB path of the GRPMagField object"}; o2::framework::Produces - DileptonTrackTrackTable; + DileptonTrackTrackTable; int fCurrentRun = -1; // needed to detect if the run changed and trigger // update of calibrations etc. @@ -7022,24 +6962,23 @@ struct AnalysisDileptonTrackTrack { o2::framework::Service fCCDB{}; o2::framework::expressions::Filter - eventFilter = o2::aod::dqanalysisflags::isEventSelected > - static_cast(0); + eventFilter = o2::aod::dqanalysisflags::isEventSelected > + static_cast(0); o2::framework::expressions::Filter dileptonFilter = - o2::aod::reducedpair::sign == 0; + o2::aod::reducedpair::sign == 0; o2::framework::expressions::Filter - filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > - static_cast(0); + filterBarrelTrackSelected = o2::aod::dqanalysisflags::isBarrelSelected > + static_cast(0); constexpr static uint32_t fgDileptonFillMap = - VarManager::ObjTypes::ReducedTrack | - VarManager::ObjTypes::Pair; // fill map + VarManager::ObjTypes::ReducedTrack | + VarManager::ObjTypes::Pair; // fill map // use some values array to avoid mixing up the quantities - float* fValuesQuadruplet = nullptr; - HistogramManager* fHistMan = nullptr; + float *fValuesQuadruplet = nullptr; + HistogramManager *fHistMan = nullptr; - void init(o2::framework::InitContext& context) - { + void init(o2::framework::InitContext &context) { // bool isBarrel = context.mOptions.get("processJpsiPiPi"); if (context.mOptions.get("processDummy")) { @@ -7063,15 +7002,15 @@ struct AnalysisDileptonTrackTrack { } TString configDileptonCutNamesStr = fConfigDileptonCut.value; fDileptonCut = - *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); + *o2::aod::dqcuts::GetCompositeCut(configDileptonCutNamesStr.Data()); TString configQuadruletCutNamesStr = fConfigQuadrupletCuts.value; std::unique_ptr objArray( - configQuadruletCutNamesStr.Tokenize(",")); + configQuadruletCutNamesStr.Tokenize(",")); for (Int_t icut = 0; icut < objArray->GetEntries(); ++icut) { TString cutName = objArray->At(icut)->GetName(); fQuadrupletCutNames.push_back(cutName); fQuadrupletCuts.push_back( - *o2::aod::dqcuts::GetCompositeCut(cutName.Data())); + *o2::aod::dqcuts::GetCompositeCut(cutName.Data())); } if (!context.mOptions.get("processDummy")) { @@ -7082,27 +7021,27 @@ struct AnalysisDileptonTrackTrack { for (std::size_t icut = 0; icut < fQuadrupletCutNames.size(); ++icut) { if (fIsSameTrackCut) { DefineHistograms( - fHistMan, - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } else { DefineHistograms( - fHistMan, - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); DefineHistograms( - fHistMan, - Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } DefineHistograms( - fHistMan, - Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); DefineHistograms( - fHistMan, - Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), - fConfigAddQuadrupletHistogram.value.data()); + fHistMan, + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[icut].Data()), + fConfigAddQuadrupletHistogram.value.data()); } } } @@ -7112,10 +7051,9 @@ struct AnalysisDileptonTrackTrack { } // init parameters from CCDB - void initParamsFromCCDB(uint64_t timestamp) - { + void initParamsFromCCDB(uint64_t timestamp) { auto grpmag = fCCDB->getForTimeStamp( - fConfigGRPmagPath.value, timestamp); + fConfigGRPmagPath.value, timestamp); float magField = 0.0; if (grpmag != nullptr) { magField = grpmag->getNominalL3Field(); @@ -7128,11 +7066,11 @@ struct AnalysisDileptonTrackTrack { VarManager::SetupFourProngKFParticle(magField); } else if (fConfigSetupFourProngFitter.value) { VarManager::SetupTwoProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables VarManager::SetupFourProngDCAFitter( - magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, - false); // TODO: get these parameters from Configurables + magField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, + false); // TODO: get these parameters from Configurables } } @@ -7140,16 +7078,15 @@ struct AnalysisDileptonTrackTrack { template - void runDileptonTrackTrack(TEvent const& event, TTrackAssocs const& assocs, - TTracks const& tracks, - TDileptons const& dileptons) - { + void runDileptonTrackTrack(TEvent const &event, TTrackAssocs const &assocs, + TTracks const &tracks, + TDileptons const &dileptons) { VarManager::ResetValues(0, VarManager::kNVars, fValuesQuadruplet); VarManager::FillEvent(event, fValuesQuadruplet); // int indexOffset = -999; // std::vector trackGlobalIndexes; - for (auto const& dilepton : dileptons) { + for (auto const &dilepton : dileptons) { // get full track info of tracks based on the index int indexLepton1 = dilepton.index0Id(); @@ -7173,16 +7110,16 @@ struct AnalysisDileptonTrackTrack { fValuesQuadruplet); // loop over hadrons pairs - for (auto const& [a1, a2] : o2::soa::combinations(assocs, assocs)) { + for (auto const &[a1, a2] : o2::soa::combinations(assocs, assocs)) { uint32_t trackSelection = 0; if (fIsSameTrackCut) { trackSelection = - ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || - (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) || + (a2.isBarrelSelected_raw() & (static_cast(1) << 1))); } else { trackSelection = - ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && - (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); + ((a1.isBarrelSelected_raw() & (static_cast(1) << 1)) && + (a2.isBarrelSelected_raw() & (static_cast(1) << 2))); } // LOGP(info, "trackSelection: {}, a1: {}, a2: {}", trackSelection, // a1.isBarrelSelected_raw(), a2.isBarrelSelected_raw()); @@ -7203,12 +7140,12 @@ struct AnalysisDileptonTrackTrack { // fill variables VarManager::FillDileptonTrackTrack( - dilepton, track1, track2, fValuesQuadruplet); + dilepton, track1, track2, fValuesQuadruplet); if (fConfigSetupFourProngFitter || fConfigUseKFVertexing) { // LOGP(info, "Using KF or DCA fitter for secondary vertexing"); VarManager::FillDileptonTrackTrackVertexing< - TCandidateType, TEventFillMap, TTrackFillMap>( - event, lepton1, lepton2, track1, track2, fValuesQuadruplet); + TCandidateType, TEventFillMap, TTrackFillMap>( + event, lepton1, lepton2, track1, track2, fValuesQuadruplet); } int iCut = 0; @@ -7221,28 +7158,28 @@ struct AnalysisDileptonTrackTrack { if (fIsSameTrackCut) { if (track1.sign() * track2.sign() < 0) { fHistMan->FillHistClass( - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } else { if ((track1.sign() < 0) && (track2.sign() > 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEMP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() > 0) && (track2.sign() < 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } if ((track1.sign() > 0) && (track2.sign() > 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEPP_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } else if ((track1.sign() < 0) && (track2.sign() < 0)) { fHistMan->FillHistClass( - Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), - fValuesQuadruplet); + Form("QuadrupletSEMM_%s", fQuadrupletCutNames[iCut].Data()), + fValuesQuadruplet); } } } // loop over dilepton-track-track cuts @@ -7252,62 +7189,61 @@ struct AnalysisDileptonTrackTrack { continue; } DileptonTrackTrackTable( - fValuesQuadruplet[VarManager::kQuadMass], - fValuesQuadruplet[VarManager::kQuadPt], - fValuesQuadruplet[VarManager::kQuadEta], - fValuesQuadruplet[VarManager::kQuadPhi], - fValuesQuadruplet[VarManager::kRap], - fValuesQuadruplet[VarManager::kQ], - fValuesQuadruplet[VarManager::kDeltaR1], - fValuesQuadruplet[VarManager::kDeltaR2], - fValuesQuadruplet[VarManager::kDeltaR], dilepton.mass(), - dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), - lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), - lepton1.tpcNClsFound(), lepton2.tpcNSigmaEl(), - lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), - lepton2.tpcNClsFound(), fValuesQuadruplet[VarManager::kDitrackMass], - fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), - track1.eta(), track2.eta(), track1.phi(), track2.phi(), - track1.sign(), track2.sign(), track1.tpcNSigmaPi(), - track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), - track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), - track2.tpcNClsFound(), fValuesQuadruplet[VarManager::kKFMass], - fValuesQuadruplet[VarManager::kVertexingProcCode], - fValuesQuadruplet[VarManager::kVertexingChi2PCA], - fValuesQuadruplet[VarManager::kCosPointingAngle], - fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], - fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], - fValuesQuadruplet[VarManager::kVertexingLz], - fValuesQuadruplet[VarManager::kVertexingLxy], - fValuesQuadruplet[VarManager::kVertexingLxyz], - fValuesQuadruplet[VarManager::kVertexingTauz], - fValuesQuadruplet[VarManager::kVertexingTauxy], - fValuesQuadruplet[VarManager::kVertexingLzErr], - fValuesQuadruplet[VarManager::kVertexingLxyzErr], - fValuesQuadruplet[VarManager::kVertexingTauzErr], - fValuesQuadruplet[VarManager::kVertexingLzProjected], - fValuesQuadruplet[VarManager::kVertexingLxyProjected], - fValuesQuadruplet[VarManager::kVertexingLxyzProjected], - fValuesQuadruplet[VarManager::kVertexingTauzProjected], - fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); + fValuesQuadruplet[VarManager::kQuadMass], + fValuesQuadruplet[VarManager::kQuadPt], + fValuesQuadruplet[VarManager::kQuadEta], + fValuesQuadruplet[VarManager::kQuadPhi], + fValuesQuadruplet[VarManager::kRap], + fValuesQuadruplet[VarManager::kQ], + fValuesQuadruplet[VarManager::kDeltaR1], + fValuesQuadruplet[VarManager::kDeltaR2], + fValuesQuadruplet[VarManager::kDeltaR], dilepton.mass(), + dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.sign(), + lepton1.tpcNSigmaEl(), lepton1.tpcNSigmaPi(), lepton1.tpcNSigmaPr(), + lepton1.tpcNClsFound(), lepton2.tpcNSigmaEl(), + lepton2.tpcNSigmaPi(), lepton2.tpcNSigmaPr(), + lepton2.tpcNClsFound(), fValuesQuadruplet[VarManager::kDitrackMass], + fValuesQuadruplet[VarManager::kDitrackPt], track1.pt(), track2.pt(), + track1.eta(), track2.eta(), track1.phi(), track2.phi(), + track1.sign(), track2.sign(), track1.tpcNSigmaPi(), + track2.tpcNSigmaPi(), track1.tpcNSigmaKa(), track2.tpcNSigmaKa(), + track1.tpcNSigmaPr(), track1.tpcNSigmaPr(), track1.tpcNClsFound(), + track2.tpcNClsFound(), fValuesQuadruplet[VarManager::kKFMass], + fValuesQuadruplet[VarManager::kVertexingProcCode], + fValuesQuadruplet[VarManager::kVertexingChi2PCA], + fValuesQuadruplet[VarManager::kCosPointingAngle], + fValuesQuadruplet[VarManager::kKFDCAxyzBetweenProngs], + fValuesQuadruplet[VarManager::kKFChi2OverNDFGeo], + fValuesQuadruplet[VarManager::kVertexingLz], + fValuesQuadruplet[VarManager::kVertexingLxy], + fValuesQuadruplet[VarManager::kVertexingLxyz], + fValuesQuadruplet[VarManager::kVertexingTauz], + fValuesQuadruplet[VarManager::kVertexingTauxy], + fValuesQuadruplet[VarManager::kVertexingLzErr], + fValuesQuadruplet[VarManager::kVertexingLxyzErr], + fValuesQuadruplet[VarManager::kVertexingTauzErr], + fValuesQuadruplet[VarManager::kVertexingLzProjected], + fValuesQuadruplet[VarManager::kVertexingLxyProjected], + fValuesQuadruplet[VarManager::kVertexingLxyzProjected], + fValuesQuadruplet[VarManager::kVertexingTauzProjected], + fValuesQuadruplet[VarManager::kVertexingTauxyProjected]); } } } o2::framework::Preslice trackAssocsPerCollision = - o2::aod::reducedtrack_association::reducedeventId; + o2::aod::reducedtrack_association::reducedeventId; o2::framework::Preslice dielectronsPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; o2::framework::Preslice ditracksPerCollision = - o2::aod::reducedpair::reducedeventId; + o2::aod::reducedpair::reducedeventId; void processJpsiPiPi( - o2::soa::Filtered const& events, - o2::soa::Filtered> const& assocs, - MyBarrelTracksWithCov const& tracks, - o2::soa::Filtered const& dileptons) - { + o2::soa::Filtered const &events, + o2::soa::Filtered> const &assocs, + MyBarrelTracksWithCov const &tracks, + o2::soa::Filtered const &dileptons) { if (events.size() == 0) { return; } @@ -7315,19 +7251,18 @@ struct AnalysisDileptonTrackTrack { initParamsFromCCDB(events.begin().timestamp()); fCurrentRun = events.begin().runNumber(); } // end: runNumber - for (auto const& event : events) { + for (auto const &event : events) { auto groupedBarrelAssocs = - assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); + assocs.sliceBy(trackAssocsPerCollision, event.globalIndex()); auto groupedDielectrons = - dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); + dileptons.sliceBy(dielectronsPerCollision, event.globalIndex()); runDileptonTrackTrack(event, groupedBarrelAssocs, tracks, groupedDielectrons); } } - void processDummy(MyEventsBasic const&) - { + void processDummy(MyEventsBasic const &) { // do nothing } @@ -7337,9 +7272,8 @@ struct AnalysisDileptonTrackTrack { true); }; -void DefineHistograms(HistogramManager* histMan, const TString& histClasses, - const char* histGroups) -{ +void DefineHistograms(HistogramManager *histMan, const TString &histClasses, + const char *histGroups) { // // Define here the histograms for all the classes required in analysis. // The histogram classes are provided in the histClasses string, separated by @@ -7356,90 +7290,90 @@ void DefineHistograms(HistogramManager* histMan, const TString& histClasses, // configurables if (classStr.Contains("Event")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "event", histName); + histMan, objArray->At(iclass)->GetName(), "event", histName); } if (classStr.Contains("SameBunchCorrelations") || classStr.Contains("OutOfBunchCorrelations")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); + histMan, objArray->At(iclass)->GetName(), "two-collisions", histName); } if (classStr.Contains("Track") && !classStr.Contains("Pairs")) { if (classStr.Contains("Barrel")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); if (classStr.Contains("PIDCalibElectron")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_electron"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_electron"); } if (classStr.Contains("PIDCalibPion")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_pion"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_pion"); } if (classStr.Contains("PIDCalibProton")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", - "postcalib_proton"); + histMan, objArray->At(iclass)->GetName(), "track", + "postcalib_proton"); } if (classStr.Contains("Ambiguity")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); + histMan, objArray->At(iclass)->GetName(), "track", "ambiguity"); } } if (classStr.Contains("Muon")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); } } if (classStr.Contains("Pairs")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", histName); + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("Pairing")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "event", histName); + histMan, objArray->At(iclass)->GetName(), "event", histName); } if (classStr.Contains("Triplets")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", histName); + histMan, objArray->At(iclass)->GetName(), "pair", histName); } if (classStr.Contains("DileptonsSelected")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); + histMan, objArray->At(iclass)->GetName(), "pair", "barrel,vertexing"); } if (classStr.Contains("DileptonTrack") && !classStr.Contains("ME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", histName); } if (classStr.Contains("DileptonTrackME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", - "dilepton-hadron-array-correlation"); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "dilepton-hadron-array-correlation"); } if (classStr.Contains("DileptonTrackECME")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-track", - "energy-correlator"); + histMan, objArray->At(iclass)->GetName(), "dilepton-track", + "energy-correlator"); } if (classStr.Contains("HadronsSelected")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "track", histName); + histMan, objArray->At(iclass)->GetName(), "track", histName); } if (classStr.Contains("DileptonHadronInvMass")) { o2::aod::dqhistograms::DefineHistograms( - histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); + histMan, objArray->At(iclass)->GetName(), "dilepton-hadron-mass"); } if (classStr.Contains("DileptonHadronCorrelation")) {