From bc609de94bdb7c8309b9d109678b3be49156c521 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 12 Sep 2025 21:57:24 +0000 Subject: [PATCH] Please consider the following formatting changes --- PWGCF/DataModel/FemtoDerived.h | 4 +- .../Core/femtoDreamCollisionSelection.h | 158 +++++++++--------- PWGCF/FemtoDream/Core/femtoDreamContainer.h | 16 +- .../TableProducer/femtoDreamProducerTask.cxx | 54 +++--- .../Tasks/femtoDreamPairTaskTrackTrack.cxx | 74 ++++---- 5 files changed, 152 insertions(+), 154 deletions(-) diff --git a/PWGCF/DataModel/FemtoDerived.h b/PWGCF/DataModel/FemtoDerived.h index 674c7464215..7c0c92974ae 100644 --- a/PWGCF/DataModel/FemtoDerived.h +++ b/PWGCF/DataModel/FemtoDerived.h @@ -35,7 +35,7 @@ enum CollisionBinning { kMult, //! Bin collision in number of charged tracks for mixing kMultPercentile, //! Bin collision in multiplicity percentile for mixing kMultMultPercentile, //! Bin collision in number of charged tracks and multiplicity percentile for mixing - kMultPercentileqn, //! Bin collision in multiplicity percentile an qn value for mixing + kMultPercentileqn, //! Bin collision in multiplicity percentile an qn value for mixing kNCollisionBinning }; @@ -52,7 +52,7 @@ DECLARE_SOA_COLUMN(BitMaskTrackThree, bitmaskTrackThree, BitMaskType); //! Bit f DECLARE_SOA_COLUMN(Downsample, downsample, bool); //! Flag for downsampling -DECLARE_SOA_COLUMN(QnVal, qnVal, int); //! qn bins for dividing events +DECLARE_SOA_COLUMN(QnVal, qnVal, int); //! qn bins for dividing events DECLARE_SOA_COLUMN(Occupancy, occupancy, int); //! TPC occupancy } // namespace femtodreamcollision diff --git a/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h b/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h index 181a04d247c..6ad6b1e06fd 100644 --- a/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h +++ b/PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h @@ -16,16 +16,17 @@ #ifndef PWGCF_FEMTODREAM_CORE_FEMTODREAMCOLLISIONSELECTION_H_ #define PWGCF_FEMTODREAM_CORE_FEMTODREAMCOLLISIONSELECTION_H_ -#include -#include -#include #include "Common/CCDB/TriggerAliases.h" +#include "Common/Core/EventPlaneHelper.h" #include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/Qvectors.h" + #include "Framework/HistogramRegistry.h" #include "Framework/Logger.h" -#include "Common/Core/EventPlaneHelper.h" -#include "Common/DataModel/Qvectors.h" +#include +#include +#include using namespace o2::framework; @@ -165,17 +166,15 @@ class FemtoDreamCollisionSelection /// \param col Collision /// \return whether or not the collisions fulfills the specified selections template - bool isPileUpCollisionPbPb(C const& col, - bool noSameBunchPileup, bool isGoodITSLayersAll, - int tpcOccupancyMin, int tpcOccupancyMax) + bool isPileUpCollisionPbPb(C const& col, + bool noSameBunchPileup, bool isGoodITSLayersAll, + int tpcOccupancyMin, int tpcOccupancyMax) { const auto occupancy = col.trackOccupancyInTimeRange(); if ((occupancy < tpcOccupancyMin || occupancy > tpcOccupancyMax)) { return false; } - if ((noSameBunchPileup && !col.selection_bit(aod::evsel::kNoSameBunchPileup)) - || (isGoodITSLayersAll && !col.selection_bit(aod::evsel::kIsGoodITSLayersAll)) - ) { + if ((noSameBunchPileup && !col.selection_bit(aod::evsel::kNoSameBunchPileup)) || (isGoodITSLayersAll && !col.selection_bit(aod::evsel::kIsGoodITSLayersAll))) { return false; } @@ -207,11 +206,11 @@ class FemtoDreamCollisionSelection { mHistogramQn = registry; mHistogramQn->add("Event/centFT0CBefore", "; cent", kTH1F, {{10, 0, 100}}); - mHistogramQn->add("Event/centFT0CAfter", "; cent", kTH1F, {{10, 0, 100}}); + mHistogramQn->add("Event/centFT0CAfter", "; cent", kTH1F, {{10, 0, 100}}); mHistogramQn->add("Event/centVsqn", "; cent; qn", kTH2F, {{10, 0, 100}, {100, 0, 1000}}); mHistogramQn->add("Event/centVsqnVsSpher", "; cent; qn; Sphericity", kTH3F, {{10, 0, 100}, {100, 0, 1000}, {100, 0, 1}}); mHistogramQn->add("Event/qnBin", "; qnBin; entries", kTH1F, {{20, 0, 20}}); - + for (int iqn(0); iqn < mumQnBins; ++iqn) { mHistogramQn->add(("Qn/mult_" + std::to_string(iqn)).c_str(), "; cent; c22", kTH1F, {{100, 0, 3500}}); } @@ -230,12 +229,12 @@ class FemtoDreamCollisionSelection mReQ2thisEvt = new TH2D("ReQ2thisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8); mImQ2thisEvt = new TH2D("ImQ2thisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8); mMQthisEvt = new TH2D("MQthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8); - mMQWeightthisEvt = new TH2D("MQWeightthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8); - + mMQWeightthisEvt = new TH2D("MQWeightthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8); + mHistogramQn = registry; mHistogramQn->add("Event/profileC22", "; cent; c22", kTProfile, {{10, 0, 100}}); mHistogramQn->add("Event/profileC24", "; cent; c24", kTProfile, {{10, 0, 100}}); - if (doQnSeparation){ + if (doQnSeparation) { for (int iqn(0); iqn < mumQnBins; ++iqn) { mHistogramQn->add(("Qn/profileC22_" + std::to_string(iqn)).c_str(), "; cent; c22", kTProfile, {{10, 0, 100}}); } @@ -328,14 +327,14 @@ class FemtoDreamCollisionSelection /// \todo to be implemented! /// \return the 1-d qn-vector separator to 2-d - std::vector> getQnBinSeparator2D(std::vector flat, const int numQnBins = 10) + std::vector> getQnBinSeparator2D(std::vector flat, const int numQnBins = 10) { - size_t nBins = numQnBins+1; + size_t nBins = numQnBins + 1; if (flat.empty() || flat.size() % nBins != 0) { - LOGP(error, "ConfQnBinSeparator size = {} is not divisible by {}", + LOGP(error, "ConfQnBinSeparator size = {} is not divisible by {}", flat.size(), nBins); - return {{-999, -999}}; + return {{-999, -999}}; } size_t nCent = flat.size() / nBins; @@ -362,14 +361,14 @@ class FemtoDreamCollisionSelection } if (doFillHisto) - mHistogramQn->fill(HIST("Event/centFT0CBefore"), centrality); + mHistogramQn->fill(HIST("Event/centFT0CBefore"), centrality); int qnBin = -999; int mycentBin = static_cast(centrality / centBinWidth); if (mycentBin >= static_cast(centMax / centBinWidth)) return qnBin; - if (mycentBin > static_cast(twoDSeparator.size()) -1) + if (mycentBin > static_cast(twoDSeparator.size()) - 1) return qnBin; for (int iqn(0); iqn < static_cast(twoDSeparator[mycentBin].size()) - 1; ++iqn) { @@ -383,12 +382,12 @@ class FemtoDreamCollisionSelection mQnBin = qnBin; - if (doFillHisto){ + if (doFillHisto) { mHistogramQn->fill(HIST("Event/centFT0CAfter"), centrality); mHistogramQn->fill(HIST("Event/centVsqn"), centrality, qn); mHistogramQn->fill(HIST("Event/centVsqnVsSpher"), centrality, qn, fSpher); mHistogramQn->fill(HIST("Event/qnBin"), qnBin); - if (qnBin >= 0 && qnBin < numQnBins){ + if (qnBin >= 0 && qnBin < numQnBins) { switch (qnBin) { case 0: mHistogramQn->fill(HIST("Qn/mult_") + HIST("0"), mult); @@ -397,8 +396,8 @@ class FemtoDreamCollisionSelection mHistogramQn->fill(HIST("Qn/mult_") + HIST("1"), mult); break; case 2: - mHistogramQn->fill(HIST("Qn/mult_") + HIST("2"), mult); - break; + mHistogramQn->fill(HIST("Qn/mult_") + HIST("2"), mult); + break; case 3: mHistogramQn->fill(HIST("Qn/mult_") + HIST("3"), mult); break; @@ -419,11 +418,11 @@ class FemtoDreamCollisionSelection break; case 9: mHistogramQn->fill(HIST("Qn/mult_") + HIST("9"), mult); - break; + break; default: - return qnBin; // invalid qn bin + return qnBin; // invalid qn bin } - } + } } return qnBin; @@ -436,34 +435,34 @@ class FemtoDreamCollisionSelection /// \tparam T2 type of the tracks /// \param tracks All tracks template - bool fillCumulants(T1 const& col, T2 const& tracks, float fHarmonic=2.f) - { + bool fillCumulants(T1 const& col, T2 const& tracks, float fHarmonic = 2.f) + { int numOfTracks = col.numContrib(); if (numOfTracks < 3) return false; mReQthisEvt->Reset(); mImQthisEvt->Reset(); - mReQ2thisEvt->Reset(); - mImQ2thisEvt->Reset(); + mReQ2thisEvt->Reset(); + mImQ2thisEvt->Reset(); mMQthisEvt->Reset(); - mMQWeightthisEvt->Reset(); + mMQWeightthisEvt->Reset(); for (auto const& track : tracks) { - double weight=1; // Will implement NUA&NUE correction + double weight = 1; // Will implement NUA&NUE correction double phi = track.phi(); double pt = track.pt(); double eta = track.eta(); - double cosnphi = weight * TMath::Cos(fHarmonic*phi); - double sinnphi = weight * TMath::Sin(fHarmonic*phi); - double cos2nphi = weight * TMath::Cos(2*fHarmonic*phi); - double sin2nphi = weight * TMath::Sin(2*fHarmonic*phi); + double cosnphi = weight * TMath::Cos(fHarmonic * phi); + double sinnphi = weight * TMath::Sin(fHarmonic * phi); + double cos2nphi = weight * TMath::Cos(2 * fHarmonic * phi); + double sin2nphi = weight * TMath::Sin(2 * fHarmonic * phi); mReQthisEvt->Fill(pt, eta, cosnphi); mImQthisEvt->Fill(pt, eta, sinnphi); - mReQ2thisEvt->Fill(pt,eta,cos2nphi); - mImQ2thisEvt->Fill(pt, eta, sin2nphi); - mMQthisEvt ->Fill(pt, eta); - mMQWeightthisEvt ->Fill(pt, eta, weight); + mReQ2thisEvt->Fill(pt, eta, cos2nphi); + mImQ2thisEvt->Fill(pt, eta, sin2nphi); + mMQthisEvt->Fill(pt, eta); + mMQWeightthisEvt->Fill(pt, eta, weight); } return true; } @@ -480,73 +479,72 @@ class FemtoDreamCollisionSelection if (!fillCumulants(col, tracks)) return; - if (mMQthisEvt->Integral(1, binPt, 1, binEta) < 2) + if (mMQthisEvt->Integral(1, binPt, 1, binEta) < 2) return; - - double allReQ = mReQthisEvt ->Integral(1, binPt, 1, binEta); - double allImQ = mImQthisEvt ->Integral(1, binPt, 1, binEta); + + double allReQ = mReQthisEvt->Integral(1, binPt, 1, binEta); + double allImQ = mImQthisEvt->Integral(1, binPt, 1, binEta); TComplex Q(allReQ, allImQ); TComplex QStar = TComplex::Conjugate(Q); - - double posEtaRe = mReQthisEvt->Integral(1, binPt, mReQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta); - double posEtaIm = mImQthisEvt->Integral(1, binPt, mImQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta); - if (mMQthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta) < 2) + + double posEtaRe = mReQthisEvt->Integral(1, binPt, mReQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta); + double posEtaIm = mImQthisEvt->Integral(1, binPt, mImQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta); + if (mMQthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta) < 2) return; - float posEtaMQ = mMQWeightthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta); + float posEtaMQ = mMQWeightthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta); TComplex posEtaQ = TComplex(posEtaRe, posEtaIm); TComplex posEtaQStar = TComplex::Conjugate(posEtaQ); - - double negEtaRe = mReQthisEvt->Integral(1, binPt, 1, mReQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6)); - double negEtaIm = mImQthisEvt->Integral(1, binPt, 1, mImQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6)); - if (mMQthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6)) < 2) + + double negEtaRe = mReQthisEvt->Integral(1, binPt, 1, mReQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6)); + double negEtaIm = mImQthisEvt->Integral(1, binPt, 1, mImQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6)); + if (mMQthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6)) < 2) return; - float negEtaMQ = mMQWeightthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6)); + float negEtaMQ = mMQWeightthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6)); TComplex negEtaQ = TComplex(negEtaRe, negEtaIm); TComplex negEtaQStar = TComplex::Conjugate(negEtaQ); - mHistogramQn->get(HIST("Event/profileC22"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); - if (doQnSeparation && mQnBin >= 0 && mQnBin < numQnBins){ + mHistogramQn->get(HIST("Event/profileC22"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); + if (doQnSeparation && mQnBin >= 0 && mQnBin < numQnBins) { switch (mQnBin) { case 0: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("0"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("0"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 1: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("1"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("1"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 2: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("2"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("2"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 3: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("3"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("3"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 4: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("4"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("4"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 5: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("5"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("5"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 6: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("6"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("6"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 7: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("7"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("7"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 8: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("8"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("8"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); break; case 9: - mHistogramQn->get(HIST("Qn/profileC22_") + HIST("9"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ)); - break; + mHistogramQn->get(HIST("Qn/profileC22_") + HIST("9"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ)); + break; default: - return; // invalid qn bin + return; // invalid qn bin } } return; } - private: - HistogramRegistry* mHistogramRegistry = nullptr; ///< For QA output + HistogramRegistry* mHistogramRegistry = nullptr; ///< For QA output bool mCutsSet = false; ///< Protection against running without cuts bool mCheckTrigger = false; ///< Check for trigger bool mCheckOffline = false; ///< Check for offline criteria (might change) @@ -557,13 +555,13 @@ class FemtoDreamCollisionSelection float mMinSphericity = 0.f; float mSphericityPtmin = 0.f; int mQnBin = -999; - HistogramRegistry* mHistogramQn = nullptr; ///< For flow cumulant output - TH2D* mReQthisEvt = nullptr; ///< For flow cumulant in an event - TH2D* mImQthisEvt = nullptr; ///< For flow cumulant in an event - TH2D* mReQ2thisEvt = nullptr; ///< For flow cumulant in an event - TH2D* mImQ2thisEvt = nullptr; ///< For flow cumulant in an event - TH2D* mMQthisEvt = nullptr; ///< For flow cumulant in an event - TH2D* mMQWeightthisEvt = nullptr; ///< For flow cumulant in an event + HistogramRegistry* mHistogramQn = nullptr; ///< For flow cumulant output + TH2D* mReQthisEvt = nullptr; ///< For flow cumulant in an event + TH2D* mImQthisEvt = nullptr; ///< For flow cumulant in an event + TH2D* mReQ2thisEvt = nullptr; ///< For flow cumulant in an event + TH2D* mImQ2thisEvt = nullptr; ///< For flow cumulant in an event + TH2D* mMQthisEvt = nullptr; ///< For flow cumulant in an event + TH2D* mMQWeightthisEvt = nullptr; ///< For flow cumulant in an event }; } // namespace o2::analysis::femtoDream diff --git a/PWGCF/FemtoDream/Core/femtoDreamContainer.h b/PWGCF/FemtoDream/Core/femtoDreamContainer.h index f48d84c832c..4e8300c5c9e 100644 --- a/PWGCF/FemtoDream/Core/femtoDreamContainer.h +++ b/PWGCF/FemtoDream/Core/femtoDreamContainer.h @@ -183,15 +183,15 @@ class FemtoDreamContainer /// Initialize the histograms for pairs in divided qn bins template void init_base_qn(std::string folderName, std::string femtoObs, - T& femtoObsAxis, T& mTAxi4D, T& multPercentileAxis4D, T& qnAxis4D) + T& femtoObsAxis, T& mTAxi4D, T& multPercentileAxis4D, T& qnAxis4D) { mHistogramRegistry->add((folderName + "/relPairkstarmTMultMultPercentileQn").c_str(), ("; " + femtoObs + "; #it{m}_{T} (GeV/#it{c}); Centrality; qn").c_str(), kTHnSparseF, {femtoObsAxis, mTAxi4D, multPercentileAxis4D, qnAxis4D}); } template void init_qn(HistogramRegistry* registry, - T& kstarBins4D, T& mTBins4D, T& multPercentileBins4D, - bool isMC, float highkstarCut, ConfigurableAxis qnBins4D = {"qnBins4D", {10,0,10}, "qn binning"}) + T& kstarBins4D, T& mTBins4D, T& multPercentileBins4D, + bool isMC, float highkstarCut, ConfigurableAxis qnBins4D = {"qnBins4D", {10, 0, 10}, "qn binning"}) { mHistogramRegistry = registry; std::string femtoObs; @@ -207,13 +207,13 @@ class FemtoDreamContainer std::string folderName = static_cast(mFolderSuffix[mEventType]) + static_cast(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kRecon]) + static_cast("_qn"); - init_base_qn(folderName, femtoObs, - kstarAxis4D, mTAxis4D, multPercentileAxis4D, qnAxis4D); + init_base_qn(folderName, femtoObs, + kstarAxis4D, mTAxis4D, multPercentileAxis4D, qnAxis4D); if (isMC) { folderName = static_cast(mFolderSuffix[mEventType]) + static_cast(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth]) + static_cast("_qn"); init_base_qn(folderName, femtoObs, - kstarAxis4D, mTAxis4D, multPercentileAxis4D, qnAxis4D); + kstarAxis4D, mTAxis4D, multPercentileAxis4D, qnAxis4D); } } @@ -359,7 +359,7 @@ class FemtoDreamContainer void setPair_qn_base(const float femtoObs, const float mT, const float multPercentile, const int myQnBin, const int numQnBins = 10) { if (myQnBin >= 0 && myQnBin < numQnBins) { - mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("_qn") + HIST("/relPairkstarmTMultMultPercentileQn"), femtoObs, mT, multPercentile, myQnBin); + mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("_qn") + HIST("/relPairkstarmTMultMultPercentileQn"), femtoObs, mT, multPercentile, myQnBin); } else { return; } @@ -379,7 +379,7 @@ class FemtoDreamContainer } } const float mT = FemtoDreamMath::getmT(part1, mMassOne, part2, mMassTwo); - + if (mHistogramRegistry) { setPair_qn_base(femtoObs, mT, multPercentile, myQnBin, numQnBins); diff --git a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx index 369b1ae8a89..e191b1c6791 100644 --- a/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx +++ b/PWGCF/FemtoDream/TableProducer/femtoDreamProducerTask.cxx @@ -276,9 +276,9 @@ struct femtoDreamProducerTask { struct : o2::framework::ConfigurableGroup { Configurable ConfFlowCalculate{"ConfFlowCalculate", false, "Evt sel: Cumulant of flow"}; // To do Configurable ConfQnSeparation{"ConfQnSeparation", false, "Evt sel: Qn of event"}; - Configurable> ConfQnBinSeparator{"ConfQnBinSeparator", std::vector{-999.f, -999.f, -999.f}, "Qn bin separator"}; + Configurable> ConfQnBinSeparator{"ConfQnBinSeparator", std::vector{-999.f, -999.f, -999.f}, "Qn bin separator"}; Configurable ConfdoFillHisto{"ConfdoFillHisto", false, "Fill histos for Qn and sphericity and mult "}; - Configurable ConfCentralityMax{"ConfCentralityMax", 80.f, "Evt sel: Maximum Centrality cut"}; + Configurable ConfCentralityMax{"ConfCentralityMax", 80.f, "Evt sel: Maximum Centrality cut"}; Configurable ConfCentBinWidth{"ConfCentBinWidth", 1.f, "Centrality bin length for qn separator"}; Configurable ConfQnBinMin{"ConfQnBinMin", 0, "Minimum qn bin"}; Configurable ConfNumQnBins{"ConfNumQnBins", 10, "Number of qn bins"}; @@ -310,9 +310,7 @@ struct femtoDreamProducerTask { if (doprocessData == false && doprocessData_noCentrality == false && doprocessData_CentPbPb == false && doprocessData_CentPbPb_qvec == false && doprocessMC == false && doprocessMC_noCentrality == false && doprocessMC_CentPbPb == false) { LOGF(fatal, "Neither processData nor processMC enabled. Please choose one."); } - if ((doprocessData == true && doprocessMC == true) || (doprocessData == true && doprocessMC_noCentrality == true) || (doprocessMC == true && doprocessMC_noCentrality == true) || (doprocessData_noCentrality == true && doprocessData == true) || (doprocessData_noCentrality == true && doprocessMC == true) || (doprocessData_noCentrality == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessData == true) || (doprocessData_CentPbPb == true && doprocessData_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessMC == true) || (doprocessData_CentPbPb == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessMC_CentPbPb == true) - || (doprocessData_CentPbPb_qvec == true && doprocessData == true) || (doprocessData_CentPbPb_qvec == true && doprocessData_noCentrality == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC_CentPbPb == true) || (doprocessData_CentPbPb_qvec == true && doprocessData_CentPbPb == true) - ) { + if ((doprocessData == true && doprocessMC == true) || (doprocessData == true && doprocessMC_noCentrality == true) || (doprocessMC == true && doprocessMC_noCentrality == true) || (doprocessData_noCentrality == true && doprocessData == true) || (doprocessData_noCentrality == true && doprocessMC == true) || (doprocessData_noCentrality == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessData == true) || (doprocessData_CentPbPb == true && doprocessData_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessMC == true) || (doprocessData_CentPbPb == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb == true && doprocessMC_CentPbPb == true) || (doprocessData_CentPbPb_qvec == true && doprocessData == true) || (doprocessData_CentPbPb_qvec == true && doprocessData_noCentrality == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC_noCentrality == true) || (doprocessData_CentPbPb_qvec == true && doprocessMC_CentPbPb == true) || (doprocessData_CentPbPb_qvec == true && doprocessData_CentPbPb == true)) { LOGF(fatal, "Cannot enable more than one process switch at the same time. " "Please choose one."); @@ -766,10 +764,10 @@ struct femtoDreamProducerTask { // Pileup rejection in PbPb data if constexpr (analysePbPb) { - if (OptionEvtSpecialSelections.ConfIsUsePileUp && - !colCuts.isPileUpCollisionPbPb(col, OptionEvtSpecialSelections.ConfEvNoSameBunchPileup, OptionEvtSpecialSelections.ConfEvIsGoodITSLayersAll, - OptionEvtSpecialSelections.ConfTPCOccupancyMin, OptionEvtSpecialSelections.ConfTPCOccupancyMax)) { - return; + if (OptionEvtSpecialSelections.ConfIsUsePileUp && + !colCuts.isPileUpCollisionPbPb(col, OptionEvtSpecialSelections.ConfEvNoSameBunchPileup, OptionEvtSpecialSelections.ConfEvIsGoodITSLayersAll, + OptionEvtSpecialSelections.ConfTPCOccupancyMin, OptionEvtSpecialSelections.ConfTPCOccupancyMax)) { + return; } } @@ -1166,28 +1164,28 @@ struct femtoDreamProducerTask { if (colCuts.isEmptyCollision(col, tracks, trackCuts)) { return; } - + if (rctCut.requireRCTFlagChecker && !rctChecker(col)) { return; } // Pileup rejection in PbPb data if constexpr (analysePbPb) { - if (OptionEvtSpecialSelections.ConfIsUsePileUp && - !colCuts.isPileUpCollisionPbPb(col, OptionEvtSpecialSelections.ConfEvNoSameBunchPileup, OptionEvtSpecialSelections.ConfEvIsGoodITSLayersAll, - OptionEvtSpecialSelections.ConfTPCOccupancyMin, OptionEvtSpecialSelections.ConfTPCOccupancyMax)) { - return; + if (OptionEvtSpecialSelections.ConfIsUsePileUp && + !colCuts.isPileUpCollisionPbPb(col, OptionEvtSpecialSelections.ConfEvNoSameBunchPileup, OptionEvtSpecialSelections.ConfEvIsGoodITSLayersAll, + OptionEvtSpecialSelections.ConfTPCOccupancyMin, OptionEvtSpecialSelections.ConfTPCOccupancyMax)) { + return; } } - // Calculate and fill qn values + // Calculate and fill qn values float myqn = colCuts.computeqnVec(col); outputExtQnCollision(myqn, col.trackOccupancyInTimeRange()); - + // Calculate flow via cumulant if (qnCal.ConfFlowCalculate) { int qnBin = colCuts.myqnBin(mult, qnCal.ConfCentralityMax, qnCal.ConfQnBinSeparator, qnCal.ConfdoFillHisto, spher, myqn, qnCal.ConfNumQnBins, multNtr, qnCal.ConfCentBinWidth); - if (qnBin < qnCal.ConfQnBinMin || qnBin > qnCal.ConfNumQnBins){ + if (qnBin < qnCal.ConfQnBinMin || qnBin > qnCal.ConfNumQnBins) { qnBin = -999; } colCuts.doCumulants(col, tracks, mult, qnCal.ConfQnSeparation); @@ -1248,19 +1246,19 @@ struct femtoDreamProducerTask { auto tracksWithItsPid = soa::Attach(tracks); if (ConfUseItsPid.value) { - fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); + fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); } else { - fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); + fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); } } PROCESS_SWITCH(femtoDreamProducerTask, processData_CentPbPb, "Provide experimental data with centrality information for PbPb collisions", false); void processData_CentPbPb_qvec(aod::FemtoFullCollision_CentPbPb_qvec const& col, - aod::BCsWithTimestamps const&, - aod::FemtoFullTracks const& tracks, - o2::aod::V0Datas const& fullV0s, - o2::aod::CascDatas const& fullCascades) + aod::BCsWithTimestamps const&, + aod::FemtoFullTracks const& tracks, + o2::aod::V0Datas const& fullV0s, + o2::aod::CascDatas const& fullCascades) { // get magnetic field for run initCCDB_Mag_Trig(col.bc_as()); @@ -1268,13 +1266,13 @@ struct femtoDreamProducerTask { auto tracksWithItsPid = soa::Attach(tracks); if (ConfUseItsPid.value) { - fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); + fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); } else { - fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); + fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracksWithItsPid, fullV0s, fullCascades); } - if (qnCal.ConfQnSeparation){ - fillCollisionsFlow(col, tracks); + if (qnCal.ConfQnSeparation) { + fillCollisionsFlow(col, tracks); } } PROCESS_SWITCH(femtoDreamProducerTask, processData_CentPbPb_qvec, @@ -1321,7 +1319,7 @@ struct femtoDreamProducerTask { // get magnetic field for run initCCDB_Mag_Trig(col.bc_as()); // fill the tables - fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracks, fullV0s, fullCascades); + fillCollisionsAndTracksAndV0AndCascade(col, tracks, tracks, fullV0s, fullCascades); } PROCESS_SWITCH(femtoDreamProducerTask, processMC_CentPbPb, "Provide MC data with centrality information for PbPb collisions", false); }; diff --git a/PWGCF/FemtoDream/Tasks/femtoDreamPairTaskTrackTrack.cxx b/PWGCF/FemtoDream/Tasks/femtoDreamPairTaskTrackTrack.cxx index efd9934ac40..049d94ddb85 100644 --- a/PWGCF/FemtoDream/Tasks/femtoDreamPairTaskTrackTrack.cxx +++ b/PWGCF/FemtoDream/Tasks/femtoDreamPairTaskTrackTrack.cxx @@ -15,30 +15,32 @@ /// \author Georgios Mantzaridis, TU München, georgios.mantzaridis@tum.de /// \author Anton Riedel, TU München, anton.riedel@tum.de -#include -#include -#include -#include -#include "TRandom3.h" -#include "Framework/AnalysisTask.h" -#include "Framework/runDataProcessing.h" -#include "Framework/HistogramRegistry.h" -#include "Framework/ASoAHelpers.h" -#include "Framework/RunningWorkflowInfo.h" -#include "Framework/StepTHn.h" -#include "Framework/O2DatabasePDGPlugin.h" -#include "Framework/Configurable.h" -#include "Framework/Expressions.h" - #include "PWGCF/DataModel/FemtoDerived.h" #include "PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h" -#include "PWGCF/FemtoDream/Core/femtoDreamParticleHisto.h" -#include "PWGCF/FemtoDream/Core/femtoDreamEventHisto.h" -#include "PWGCF/FemtoDream/Core/femtoDreamPairCleaner.h" #include "PWGCF/FemtoDream/Core/femtoDreamContainer.h" #include "PWGCF/FemtoDream/Core/femtoDreamDetaDphiStar.h" +#include "PWGCF/FemtoDream/Core/femtoDreamEventHisto.h" +#include "PWGCF/FemtoDream/Core/femtoDreamPairCleaner.h" +#include "PWGCF/FemtoDream/Core/femtoDreamParticleHisto.h" #include "PWGCF/FemtoDream/Core/femtoDreamUtils.h" +#include "Framework/ASoAHelpers.h" +#include "Framework/AnalysisTask.h" +#include "Framework/Configurable.h" +#include "Framework/Expressions.h" +#include "Framework/HistogramRegistry.h" +#include "Framework/O2DatabasePDGPlugin.h" +#include "Framework/RunningWorkflowInfo.h" +#include "Framework/StepTHn.h" +#include "Framework/runDataProcessing.h" + +#include "TRandom3.h" + +#include +#include +#include +#include + using namespace o2::aod; using namespace o2::soa; using namespace o2::framework; @@ -87,13 +89,13 @@ struct femtoDreamPairTaskTrackTrack { FemtoDreamCollisionSelection qnBinCalculator; struct : ConfigurableGroup { std::string prefix = std::string("qnCal"); - Configurable doQnSeparation{"doQnSeparation", false, "Do qn separation"}; - Configurable> qnBinSeparator{"qnBinSeparator", std::vector{-999.f, -999.f, -999.f}, "Qn bin separator"}; + Configurable doQnSeparation{"doQnSeparation", false, "Do qn separation"}; + Configurable> qnBinSeparator{"qnBinSeparator", std::vector{-999.f, -999.f, -999.f}, "Qn bin separator"}; Configurable doFillHisto{"doFillHisto", false, "Fill histos for Qn and sphericity and mult "}; - Configurable storeEvtTrkInfo{"storeEvtTrkInfo", false, "Fill info of track1 and track2 while pariing in divided qn bins"}; + Configurable storeEvtTrkInfo{"storeEvtTrkInfo", false, "Fill info of track1 and track2 while pariing in divided qn bins"}; Configurable numQnBins{"numQnBins", 10, "Number of qn bins"}; Configurable qnBinMin{"qnBinMin", 0, "Number of qn bins"}; - Configurable centMax{"centMax", 80.f, "Evt sel: Maximum Centrality cut"}; + Configurable centMax{"centMax", 80.f, "Evt sel: Maximum Centrality cut"}; Configurable centBinWidth{"centBinWidth", 1.f, "Centrality bin length for qn separator"}; } qnCal; @@ -230,7 +232,7 @@ struct femtoDreamPairTaskTrackTrack { ConfigurableAxis MultMixBins{"MultMixBins", {VARIABLE_WIDTH, 0.0f, 4.0f, 8.0f, 12.0f, 16.0f, 20.0f, 24.0f, 28.0f, 32.0f, 36.0f, 40.0f, 44.0f, 48.0f, 52.0f, 56.0f, 60.0f, 64.0f, 68.0f, 72.0f, 76.0f, 80.0f, 84.0f, 88.0f, 92.0f, 96.0f, 100.0f, 200.0f}, "Mixing bins - multiplicity"}; ConfigurableAxis MultPercentileMixBins{"MultPercentileMixBins", {VARIABLE_WIDTH, 0.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f}, "Mixing bins - multiplicity percentile"}; ConfigurableAxis VztxMixBins{"VztxMixBins", {VARIABLE_WIDTH, -10.0f, -8.f, -6.f, -4.f, -2.f, 0.f, 2.f, 4.f, 6.f, 8.f, 10.f}, "Mixing bins - z-vertex"}; - ConfigurableAxis QnMixBins{"QnMixBins", {VARIABLE_WIDTH, 0.50f, 68.50f, 100.50f, 126.50f, 151.50f, 176.50f, 203.50f, 232.50f, 269.50f, 322.50f, 833.50f}, "Mixing bins - qn-value"}; + ConfigurableAxis QnMixBins{"QnMixBins", {VARIABLE_WIDTH, 0.50f, 68.50f, 100.50f, 126.50f, 151.50f, 176.50f, 203.50f, 232.50f, 269.50f, 322.50f, 833.50f}, "Mixing bins - qn-value"}; Configurable Depth{"Depth", 5, "Number of events for mixing"}; Configurable Policy{"Policy", 0, "Binning policy for mixing - 0: multiplicity, 1: multipliciy percentile, 2: both, 3: multipliciy percentile and qn value"}; } Mixing; @@ -292,13 +294,13 @@ struct femtoDreamPairTaskTrackTrack { pairCloseRejectionME.init(&Registry, &Registry, Option.CPRdeltaPhiMax.value, Option.CPRdeltaEtaMax.value, Option.CPRPlotPerRadii.value, 2, Option.CPROld.value); } - if (qnCal.doQnSeparation){ + if (qnCal.doQnSeparation) { sameEventQnCont.init_qn(&Registry, - Binning4D.kstar, Binning4D.mT, Binning4D.multPercentile, - Option.IsMC, Option.HighkstarCut); - if (qnCal.doFillHisto){ + Binning4D.kstar, Binning4D.mT, Binning4D.multPercentile, + Option.IsMC, Option.HighkstarCut); + if (qnCal.doFillHisto) { qnBinCalculator.initQn(&Registry, qnCal.numQnBins); - } + } } // get bit for the collision mask @@ -339,9 +341,9 @@ struct femtoDreamPairTaskTrackTrack { } } } - if ((doprocessSameEvent && doprocessSameEventMasked ) || - (doprocessSameEvent && doprocessSameEventQn ) || - (doprocessSameEventMasked && doprocessSameEventQn ) || + if ((doprocessSameEvent && doprocessSameEventMasked) || + (doprocessSameEvent && doprocessSameEventQn) || + (doprocessSameEventMasked && doprocessSameEventQn) || (doprocessMixedEvent && doprocessMixedEventMasked) || (doprocessMixedEvent && doprocessMixedEventQn) || (doprocessMixedEventMasked && doprocessMixedEventQn) || @@ -661,7 +663,7 @@ struct femtoDreamPairTaskTrackTrack { template void doSameEventQn(PartitionType SliceTrk1, PartitionType SliceTrk2, PartType parts, Collision col) { - if (qnCal.storeEvtTrkInfo){ + if (qnCal.storeEvtTrkInfo) { for (auto& part : SliceTrk1) { trackHistoPartOne.fillQA(part, aod::femtodreamparticle::kPt, col.multNtr(), col.multV0M()); } @@ -674,7 +676,7 @@ struct femtoDreamPairTaskTrackTrack { } auto myqnBin = qnBinCalculator.myqnBin(col.multV0M(), qnCal.centMax, qnCal.qnBinSeparator, qnCal.doFillHisto, col.sphericity(), col.qnVal(), qnCal.numQnBins, col.multNtr(), qnCal.centBinWidth); - if (myqnBin < qnCal.qnBinMin || myqnBin > qnCal.numQnBins){ + if (myqnBin < qnCal.qnBinMin || myqnBin > qnCal.numQnBins) { myqnBin = -999; } @@ -729,7 +731,7 @@ struct femtoDreamPairTaskTrackTrack { if (SliceTrk1.size() == 0 && SliceTrk2.size() == 0) { return; } - if (qnCal.doQnSeparation){ + if (qnCal.doQnSeparation) { doSameEventQn(SliceTrk1, SliceTrk2, parts, col); } } @@ -750,8 +752,8 @@ struct femtoDreamPairTaskTrackTrack { case femtodreamcollision::kMultMultPercentile: doMixedEvent_NotMasked(cols, parts, PartitionTrk1, PartitionTrk2, colBinningMultMultPercentile); break; - case femtodreamcollision::kMultPercentileqn: - doMixedEvent_NotMasked(cols, parts, PartitionTrk1, PartitionTrk2, colBinningMultPercentileqn); + case femtodreamcollision::kMultPercentileqn: + doMixedEvent_NotMasked(cols, parts, PartitionTrk1, PartitionTrk2, colBinningMultPercentileqn); break; default: LOG(fatal) << "Invalid binning policiy specifed. Breaking...";