diff --git a/PWGHF/D2H/Tasks/taskCharmPolarisation.cxx b/PWGHF/D2H/Tasks/taskCharmPolarisation.cxx index 29fff1a54f7..d767b73bd95 100644 --- a/PWGHF/D2H/Tasks/taskCharmPolarisation.cxx +++ b/PWGHF/D2H/Tasks/taskCharmPolarisation.cxx @@ -17,13 +17,12 @@ /// \author M. Faggin (CERN) mattia.faggin@cern.ch /// \author M. Li (CCNU) mingze.li@cern.ch - #include "PWGHF/Core/CentralityEstimation.h" #include "PWGHF/Core/DecayChannels.h" #include "PWGHF/Core/HfHelper.h" +#include "PWGHF/D2H/Utils/utilsFlow.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" -#include "PWGHF/D2H/Utils/utilsFlow.h" #include "PWGHF/Utils/utilsEvSelHf.h" #include "Common/Core/EventPlaneHelper.h" @@ -221,7 +220,7 @@ struct HfTaskCharmPolarisation { SliceCache cache; EventPlaneHelper epHelper; // event plane helper - HfEventSelection hfEvSel; // event selection and monitoring + HfEventSelection hfEvSel; // event selection and monitoring o2::framework::Service ccdb; using CollisionsWithMcLabels = soa::SmallGroups>; diff --git a/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx b/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx index 045abce1068..59bfd1d605e 100644 --- a/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx +++ b/PWGHF/D2H/Tasks/taskFlowCharmHadrons.cxx @@ -19,9 +19,9 @@ #include "PWGHF/Core/CentralityEstimation.h" #include "PWGHF/Core/HfHelper.h" +#include "PWGHF/D2H/Utils/utilsFlow.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" -#include "PWGHF/D2H/Utils/utilsFlow.h" #include "PWGHF/Utils/utilsEvSelHf.h" #include "Common/Core/EventPlaneHelper.h" diff --git a/PWGHF/D2H/Utils/utilsFlow.h b/PWGHF/D2H/Utils/utilsFlow.h index ef8223069f1..2599ccb6554 100644 --- a/PWGHF/D2H/Utils/utilsFlow.h +++ b/PWGHF/D2H/Utils/utilsFlow.h @@ -24,180 +24,180 @@ namespace o2::analysis { namespace hf_flow_utils { - enum QvecEstimator { FV0A = 0, - FT0M, - FT0A, - FT0C, - TPCPos, - TPCNeg, - TPCTot }; - - /// Compute the delta psi in the range [0, pi/harmonic] - /// \param psi1 is the first angle - /// \param psi2 is the second angle - /// \param harmonic is the harmonic - /// \note Ported from AliAnalysisTaskSECharmHadronvn::GetDeltaPsiSubInRange - float getDeltaPsiInRange(float psi1, float psi2, int harmonic) - { - float deltaPsi = psi1 - psi2; - deltaPsi = RecoDecay::constrainAngle(deltaPsi, -o2::constants::math::PI / harmonic, harmonic); - return deltaPsi; - } - - /// Get the Q vector - template - concept HasQvecFT0A = requires(T collision) { - collision.qvecFT0ARe(); - collision.qvecFT0AIm(); - }; - - template - concept HasQvecFT0C = requires(T collision) { - collision.qvecFT0CRe(); - collision.qvecFT0CIm(); - }; - - template - concept HasQvecFT0M = requires(T collision) { - collision.qvecFT0MRe(); - collision.qvecFT0MIm(); - }; - - template - concept HasQvecFV0A = requires(T collision) { - collision.qvecFV0ARe(); - collision.qvecFV0AIm(); - }; - - template - concept HasQvecTPCpos = requires(T collision) { - collision.qvecBPosRe(); - collision.qvecBPosIm(); - }; - - template - concept HasQvecTPCneg = requires(T collision) { - collision.qvecBNegRe(); - collision.qvecBNegIm(); - }; - - template - concept HasQvecTPCtot = requires(T collision) { - collision.qvecBTotRe(); - collision.qvecBTotIm(); - }; - - /// Get the Q vector using FT0A estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.sumAmplFT0A()}; - } - - /// Get the Q vector using FT0C estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.sumAmplFT0C()}; - } - - /// Get the Q vector using FT0C estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.sumAmplFT0M()}; - } - - /// Get the Q vector using FV0A estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.sumAmplFV0A()}; - } - - /// Get the Q vector using TPCpos estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecBPosRe(), collision.qvecBPosIm(), collision.nTrkBPos()}; - } - - /// Get the Q vector using TPCneg estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecBNegRe(), collision.qvecBNegIm(), collision.nTrkBNeg()}; - } - - /// Get the Q vector using TPCtot estimator - /// \param collision is the collision - /// \return Q vector of the collision - template - std::array getQvec(const TCollision& collision) - { - return std::array{collision.qvecBTotRe(), collision.qvecBTotIm(), collision.nTrkBTot()}; - } - - /// Get the Q vector choosing your favourite estimator - /// \param collision is the collision with the Q vector information - /// \param qvecEst is the chosen Q-vector estimator - template - std::array getQvec(TCollision const& collision, const int qvecEst) - { - switch (qvecEst) { - case QvecEstimator::FV0A: - if constexpr (HasQvecFV0A) { - return std::array{collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.sumAmplFV0A()}; - } - break; - case QvecEstimator::FT0A: - if constexpr (HasQvecFT0A) { - return std::array{collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.sumAmplFT0A()}; - } - break; - case QvecEstimator::FT0C: - if constexpr (HasQvecFT0C) { - return std::array{collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.sumAmplFT0C()}; - } - break; - case QvecEstimator::FT0M: - if constexpr (HasQvecFT0M) { - return std::array{collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.sumAmplFT0M()}; - } - break; - case QvecEstimator::TPCPos: - if constexpr (HasQvecTPCpos) { - return std::array{collision.qvecBPosRe(), collision.qvecBPosIm(), static_cast(collision.nTrkBPos())}; - } - break; - case QvecEstimator::TPCNeg: - if constexpr (HasQvecTPCneg) { - return std::array{collision.qvecBNegRe(), collision.qvecBNegIm(), static_cast(collision.nTrkBNeg())}; - } - break; - case QvecEstimator::TPCTot: - if constexpr (HasQvecTPCtot) { - return std::array{collision.qvecBTotRe(), collision.qvecBTotIm(), static_cast(collision.nTrkBTot())}; - } - break; - default: - LOGP(fatal, "Q-vector estimator not valid. Please choose between FV0A, FT0M, FT0A, FT0C, TPCPos, TPCNeg, TPCTot"); - break; - } - return std::array{-999.f, -999.f, -999.f}; +enum QvecEstimator { FV0A = 0, + FT0M, + FT0A, + FT0C, + TPCPos, + TPCNeg, + TPCTot }; + +/// Compute the delta psi in the range [0, pi/harmonic] +/// \param psi1 is the first angle +/// \param psi2 is the second angle +/// \param harmonic is the harmonic +/// \note Ported from AliAnalysisTaskSECharmHadronvn::GetDeltaPsiSubInRange +float getDeltaPsiInRange(float psi1, float psi2, int harmonic) +{ + float deltaPsi = psi1 - psi2; + deltaPsi = RecoDecay::constrainAngle(deltaPsi, -o2::constants::math::PI / harmonic, harmonic); + return deltaPsi; +} + +/// Get the Q vector +template +concept HasQvecFT0A = requires(T collision) { + collision.qvecFT0ARe(); + collision.qvecFT0AIm(); +}; + +template +concept HasQvecFT0C = requires(T collision) { + collision.qvecFT0CRe(); + collision.qvecFT0CIm(); +}; + +template +concept HasQvecFT0M = requires(T collision) { + collision.qvecFT0MRe(); + collision.qvecFT0MIm(); +}; + +template +concept HasQvecFV0A = requires(T collision) { + collision.qvecFV0ARe(); + collision.qvecFV0AIm(); +}; + +template +concept HasQvecTPCpos = requires(T collision) { + collision.qvecBPosRe(); + collision.qvecBPosIm(); +}; + +template +concept HasQvecTPCneg = requires(T collision) { + collision.qvecBNegRe(); + collision.qvecBNegIm(); +}; + +template +concept HasQvecTPCtot = requires(T collision) { + collision.qvecBTotRe(); + collision.qvecBTotIm(); +}; + +/// Get the Q vector using FT0A estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.sumAmplFT0A()}; +} + +/// Get the Q vector using FT0C estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.sumAmplFT0C()}; +} + +/// Get the Q vector using FT0C estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.sumAmplFT0M()}; +} + +/// Get the Q vector using FV0A estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.sumAmplFV0A()}; +} + +/// Get the Q vector using TPCpos estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecBPosRe(), collision.qvecBPosIm(), collision.nTrkBPos()}; +} + +/// Get the Q vector using TPCneg estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecBNegRe(), collision.qvecBNegIm(), collision.nTrkBNeg()}; +} + +/// Get the Q vector using TPCtot estimator +/// \param collision is the collision +/// \return Q vector of the collision +template +std::array getQvec(const TCollision& collision) +{ + return std::array{collision.qvecBTotRe(), collision.qvecBTotIm(), collision.nTrkBTot()}; +} + +/// Get the Q vector choosing your favourite estimator +/// \param collision is the collision with the Q vector information +/// \param qvecEst is the chosen Q-vector estimator +template +std::array getQvec(TCollision const& collision, const int qvecEst) +{ + switch (qvecEst) { + case QvecEstimator::FV0A: + if constexpr (HasQvecFV0A) { + return std::array{collision.qvecFV0ARe(), collision.qvecFV0AIm(), collision.sumAmplFV0A()}; + } + break; + case QvecEstimator::FT0A: + if constexpr (HasQvecFT0A) { + return std::array{collision.qvecFT0ARe(), collision.qvecFT0AIm(), collision.sumAmplFT0A()}; + } + break; + case QvecEstimator::FT0C: + if constexpr (HasQvecFT0C) { + return std::array{collision.qvecFT0CRe(), collision.qvecFT0CIm(), collision.sumAmplFT0C()}; + } + break; + case QvecEstimator::FT0M: + if constexpr (HasQvecFT0M) { + return std::array{collision.qvecFT0MRe(), collision.qvecFT0MIm(), collision.sumAmplFT0M()}; + } + break; + case QvecEstimator::TPCPos: + if constexpr (HasQvecTPCpos) { + return std::array{collision.qvecBPosRe(), collision.qvecBPosIm(), static_cast(collision.nTrkBPos())}; + } + break; + case QvecEstimator::TPCNeg: + if constexpr (HasQvecTPCneg) { + return std::array{collision.qvecBNegRe(), collision.qvecBNegIm(), static_cast(collision.nTrkBNeg())}; + } + break; + case QvecEstimator::TPCTot: + if constexpr (HasQvecTPCtot) { + return std::array{collision.qvecBTotRe(), collision.qvecBTotIm(), static_cast(collision.nTrkBTot())}; + } + break; + default: + LOGP(fatal, "Q-vector estimator not valid. Please choose between FV0A, FT0M, FT0A, FT0C, TPCPos, TPCNeg, TPCTot"); + break; } + return std::array{-999.f, -999.f, -999.f}; +} } // namespace hf_flow_utils } // namespace o2::analysis diff --git a/PWGHF/Utils/utilsEvSelHf.h b/PWGHF/Utils/utilsEvSelHf.h index 40ab354788c..2eed9fb65b4 100644 --- a/PWGHF/Utils/utilsEvSelHf.h +++ b/PWGHF/Utils/utilsEvSelHf.h @@ -254,7 +254,7 @@ struct HfEventSelection : o2::framework::ConfigurableGroup { /// \brief Inits the HF event selection object /// \param registry reference to the histogram registry - template + template void init(o2::framework::HistogramRegistry& registry, T& zorroSummary) { // we initialise the RCT checker