diff --git a/PWGLF/Tasks/Resonances/initializereventqa.cxx b/PWGLF/Tasks/Resonances/initializereventqa.cxx index d3ddae10cbb..076163e6ef0 100644 --- a/PWGLF/Tasks/Resonances/initializereventqa.cxx +++ b/PWGLF/Tasks/Resonances/initializereventqa.cxx @@ -13,36 +13,38 @@ /// \brief QA for the event-loss and signal-loss correction at the generator level for the ResonanceInitializer in pp collisions (referred to TableProducer/Strangeness/cascqaanalysis.cxx) /// /// Following the discussions at the two PAG meetings (https://indico.cern.ch/event/1518979, https://indico.cern.ch/event/1575984) -/// we have introduced an auxiliary task that, when the resonanceInitializer.cxx is used, +/// we have introduced an auxiliary task that, when the resonanceInitializer.cxx is used, /// computes the event-loss and signal-loss correction factors at the generator level. -/// With minor configuration tuning for a truth-tagging, +/// With minor configuration tuning for a truth-tagging, /// we expect it to be applicable to most analyses that rely on the initializer. /// /// \author Minjae Kim (minjae.kim@cern.ch) -#include -#include -#include - -#include "Framework/runDataProcessing.h" -#include "Framework/AnalysisTask.h" -#include "Common/DataModel/TrackSelectionTables.h" #include "PWGLF/DataModel/LFStrangenessTables.h" +#include "PWGLF/DataModel/cascqaanalysis.h" +#include "PWGLF/DataModel/mcCentrality.h" +#include "PWGLF/Utils/inelGt.h" + +#include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" -#include "Common/DataModel/PIDResponse.h" #include "Common/DataModel/Multiplicity.h" -#include "Common/DataModel/Centrality.h" -#include "PWGLF/DataModel/cascqaanalysis.h" -#include "TRandom2.h" +#include "Common/DataModel/PIDResponse.h" +#include "Common/DataModel/TrackSelectionTables.h" + +#include "Framework/AnalysisTask.h" #include "Framework/O2DatabasePDGPlugin.h" -#include "PWGLF/Utils/inelGt.h" -#include "PWGLF/DataModel/mcCentrality.h" +#include "Framework/runDataProcessing.h" + +#include "TRandom2.h" +#include + +#include +#include using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; - using TrkPidInfo = soa::Join; using DauTracks = soa::Join; @@ -58,7 +60,7 @@ struct Initializereventqa { ConfigurableAxis ptAxis{"ptAxis", {400, 0.0f, 20.0f}, "#it{p}_{T} (GeV/#it{c})"}; ConfigurableAxis rapidityAxis{"rapidityAxis", {200, -2.0f, 2.0f}, "y"}; ConfigurableAxis centFT0MAxis{"centFT0MAxis", - {VARIABLE_WIDTH, 0.0, 1.0, 5.0, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 70.0, 100.0, 110.0}, + {VARIABLE_WIDTH, 0.0, 1.0, 5.0, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 70.0, 100.0, 110.0}, "FT0M (%)"}; ConfigurableAxis eventTypeAxis{"eventTypeAxis", {2, -0.5f, 1.5f}, "Event Type"}; @@ -117,7 +119,6 @@ struct Initializereventqa { } registry.add("hZCollision", "hZCollision", {HistType::kTH1D, {{200, -20.f, 20.f}}}); - registry.add("fakeEvents", "fakeEvents", {HistType::kTH1F, {{1, -0.5f, 0.5f}}}); registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1D, {{5, 0.0f, 5.0f}}}); @@ -125,18 +126,17 @@ struct Initializereventqa { registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); } registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1D, {{200, -20.f, 20.f}}}); - registry.add("hCentFT0MNAssocMCCollisions", "hCentFT0MNAssocMCCollisions", {HistType::kTH3D, {centFT0MAxis, nAssocCollAxis, eventTypeAxis}}); + registry.add("hCentFT0MNAssocMCCollisions", "hCentFT0MNAssocMCCollisions", {HistType::kTH3D, {centFT0MAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hCentFT0MNAssocMCCollisionsSameType", "hCentFT0MNAssocMCCollisionsSameType", {HistType::kTH3D, {centFT0MAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH3D, {nChargedFT0MGenAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hNchFT0MNAssocMCCollisionsSameType", "hNchFT0MNAssocMCCollisionsSameType", {HistType::kTH3D, {nChargedFT0MGenAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hNContributorsCorrelation", "hNContributorsCorrelation", {HistType::kTH2F, {{250, -0.5f, 249.5f, "Secondary Contributor"}, {250, -0.5f, 249.5f, "Main Contributor"}}}); registry.add("hNchFT0MGenEvType", "hNchFT0MGenEvType", {HistType::kTH2D, {nChargedFT0MGenAxis, eventTypeAxis}}); registry.add("hCentFT0M_genMC", "hCentFT0M_genMC", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}}); - + registry.add("hCentFT0M_rec", "hCentFT0M_rec", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}}); registry.add("hCentFT0M_corr", "hCentFT0M_Corr", {HistType::kTH2D, {centFT0MAxis, centFT0MAxis}}); - if (multQA) { registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); @@ -145,23 +145,22 @@ struct Initializereventqa { registry.add("hFT0MsignalPVContr", "hFT0MsignalPVContr", {HistType::kTH3D, {signalFT0MAxis, multNTracksAxis, eventTypeAxis}}); } - registry.add("h3ResonanceTruth", "pT distribution of True Resonance", kTHnSparseF, {eventTypeAxis, ptAxis, centFT0MAxis}); - registry.add("h3ResonanceTruthAnti", "pT distribution of True Resonance Anti", kTHnSparseF, {eventTypeAxis, ptAxis, centFT0MAxis}); + registry.add("h3ResonanceTruth", "pT distribution of True Resonance", kTHnSparseF, {eventTypeAxis, ptAxis, centFT0MAxis}); + registry.add("h3ResonanceTruthAnti", "pT distribution of True Resonance Anti", kTHnSparseF, {eventTypeAxis, ptAxis, centFT0MAxis}); } -float pvEta1 = 1.0f; + float pvEta1 = 1.0f; float globalEta05 = 0.5f; Partition pvContribTracksIUEta1 = (nabs(aod::track::eta) < pvEta1) && ((aod::track::flags & static_cast(o2::aod::track::PVContributor)) == static_cast(o2::aod::track::PVContributor)); Partition globalTracksIUEta05 = (nabs(aod::track::eta) < globalEta05) && (requireGlobalTrackInFilter()); - template uint16_t getGenNchInFT0Mregion(TMcParticles particles) { float region1FT0 = -3.3f; float region2FT0 = -2.1f; float region3FT0 = 3.5f; - float region4FT0 = 4.9f; + float region4FT0 = 4.9f; // Particle counting in FITFT0: -3.3<η<-2.1; 3.5<η<4.9 uint16_t nchFT0 = 0; for (const auto& mcParticle : particles) { @@ -264,7 +263,6 @@ float pvEta1 = 1.0f; return true; } - template void fillMCParticles(TotalMCParts const& mcParticles, MultMCGen const& multiplicity, evtType const& eventType) @@ -282,24 +280,24 @@ float pvEta1 = 1.0f; daughterPDGs = {-1, -1}; } - if(isDaughterCheck){ - bool pass1 = std::abs(daughterPDGs[0]) == pdgTruthDaughter1 || std::abs(daughterPDGs[1]) == pdgTruthDaughter1; - bool pass2 = std::abs(daughterPDGs[0]) == pdgTruthDaughter2 || std::abs(daughterPDGs[1]) == pdgTruthDaughter2; - if (!pass1 || !pass2) - continue; + if (isDaughterCheck) { + bool pass1 = std::abs(daughterPDGs[0]) == pdgTruthDaughter1 || std::abs(daughterPDGs[1]) == pdgTruthDaughter1; + bool pass2 = std::abs(daughterPDGs[0]) == pdgTruthDaughter2 || std::abs(daughterPDGs[1]) == pdgTruthDaughter2; + if (!pass1 || !pass2) + continue; } if (mcPart.pdgCode() > 0) // Consider INELt0 or INEL registry.fill(HIST("h3ResonanceTruth"), eventType, mcPart.pt(), multiplicity); else registry.fill(HIST("h3ResonanceTruthAnti"), eventType, mcPart.pt(), multiplicity); - daughterPDGs.clear(); + daughterPDGs.clear(); } } - void processData(soa::Join::iterator const& collision, - DauTracks const&) + DauTracks const&) { if (!acceptEvent(collision, 1)) { return; @@ -325,7 +323,6 @@ float pvEta1 = 1.0f; registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); registry.fill(HIST("hFT0MsignalPVContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evType); } - } Preslice perMcCollision = aod::mcparticle::mcCollisionId; @@ -354,8 +351,8 @@ float pvEta1 = 1.0f; int nTracksGlobal = tracksGroupedGlobal.size(); // N charged in FT0M region in corresponding gen. MC collision - auto mcPartSlice = mcParticles.sliceBy(perMcCollision, collision.mcCollision_as>().globalIndex()); - uint16_t nchFT0 = getGenNchInFT0Mregion(mcPartSlice); + auto mcPartSlice = mcParticles.sliceBy(perMcCollision, collision.mcCollision_as>().globalIndex()); + uint16_t nchFT0 = getGenNchInFT0Mregion(mcPartSlice); int evType = 0; registry.fill(HIST("hNEvents"), 10.5); // reco INEL @@ -374,19 +371,18 @@ float pvEta1 = 1.0f; registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); registry.fill(HIST("hFT0MsignalPVContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evType); } - } void processMCgen(soa::Join::iterator const& mcCollision, aod::McParticles const& mcParticles, - const soa::SmallGroups>& collisions) + const soa::SmallGroups>& collisions) { auto cent = mcCollision.centFT0M(); registry.fill(HIST("hNEventsMC"), 0.5); - if (isZvtxcut && std::fabs(mcCollision.posZ()) > cutzvertex) { + if (isZvtxcut && std::fabs(mcCollision.posZ()) > cutzvertex) { return; } registry.fill(HIST("hZCollisionGen"), mcCollision.posZ()); @@ -399,7 +395,7 @@ float pvEta1 = 1.0f; registry.fill(HIST("hNEventsMC"), 3.5); } - fillMCParticles(mcParticles,cent, evType); + fillMCParticles(mcParticles, cent, evType); registry.fill(HIST("hCentFT0M_genMC"), cent, evType); @@ -423,16 +419,16 @@ float pvEta1 = 1.0f; collWithType.typeFlag |= o2::aod::myMCcascades::EvFlags::EvINELgt0; } selectedEvents[nevts++] = collWithType; - if (collision.mcCollision_as>().globalIndex() == mcCollision.globalIndex()) { + if (collision.mcCollision_as>().globalIndex() == mcCollision.globalIndex()) { nAssocColl++; numberOfContributors.push_back(collision.numContrib()); } } selectedEvents.resize(nevts); - registry.fill(HIST("hCentFT0MNAssocMCCollisions"),cent, nAssocColl, evType); + registry.fill(HIST("hCentFT0MNAssocMCCollisions"), cent, nAssocColl, evType); registry.fill(HIST("hNchFT0MNAssocMCCollisions"), nchFT0, nAssocColl, evType); - + if (numberOfContributors.size() == nContSize) { std::sort(numberOfContributors.begin(), numberOfContributors.end()); registry.fill(HIST("hNContributorsCorrelation"), numberOfContributors[0], numberOfContributors[1]); @@ -473,5 +469,5 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{ adaptAnalysisTask(cfgc), - }; + }; } diff --git a/PWGLF/Tasks/Resonances/xi1530Analysisqa.cxx b/PWGLF/Tasks/Resonances/xi1530Analysisqa.cxx index ebfb994b255..07ed10a9460 100644 --- a/PWGLF/Tasks/Resonances/xi1530Analysisqa.cxx +++ b/PWGLF/Tasks/Resonances/xi1530Analysisqa.cxx @@ -14,24 +14,25 @@ /// /// \author Min-jae Kim , Bong-Hwi Lim // #include -#include "Math/Vector4D.h" -#include "TF1.h" -#include "TRandom3.h" +#include "PWGLF/DataModel/LFResonanceTables.h" +#include "PWGLF/DataModel/LFStrangenessTables.h" +#include "PWGLF/DataModel/mcCentrality.h" +#include "PWGLF/Utils/inelGt.h" -#include "Common/DataModel/PIDResponse.h" +#include "Common/Core/RecoDecay.h" #include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" -#include "Framework/AnalysisTask.h" -#include "Framework/ASoAHelpers.h" -#include "Framework/runDataProcessing.h" -#include "PWGLF/DataModel/LFResonanceTables.h" -#include "PWGLF/DataModel/LFStrangenessTables.h" +#include "Common/DataModel/PIDResponse.h" + #include "CommonConstants/PhysicsConstants.h" -#include "Common/Core/RecoDecay.h" +#include "Framework/ASoAHelpers.h" +#include "Framework/AnalysisTask.h" #include "Framework/O2DatabasePDGPlugin.h" -#include "PWGLF/DataModel/mcCentrality.h" -#include "PWGLF/Utils/inelGt.h" +#include "Framework/runDataProcessing.h" +#include "Math/Vector4D.h" +#include "TF1.h" +#include "TRandom3.h" using namespace o2; using namespace o2::framework; @@ -475,7 +476,7 @@ struct Xi1530Analysisqa { return true; } - bool hasSubsystemInfo(float Nsigma) + bool hasSubsystemInfo(float Nsigma) { return std::abs(Nsigma) < cPIDBound; } @@ -674,7 +675,7 @@ struct Xi1530Analysisqa { template void fillHistograms(const CollisionType& collision, const CenMult& multiplicity, const TracksType& dTracks1, const TracksTypeCasc& dTracks2) // Order: ResoColl, ResoTrack, ResoCascTrack { - //auto multiplicity = collision.cent(); + // auto multiplicity = collision.cent(); { if constexpr (!IsMix) { @@ -750,7 +751,7 @@ struct Xi1530Analysisqa { float trk2NSigmaPiNegTOF = trk2.daughterTOFNSigmaNegPi(); if constexpr (!IsMix) { - //// QA plots before the selection // + //// QA plots before the selection // // --- PID QA if (pidPlots) { histos.fill(HIST("QAbefore/TPC_Nsigma_pi_first_all"), multiplicity, trk1ptPi, trk1NSigmaPiTPC); @@ -1051,23 +1052,23 @@ struct Xi1530Analysisqa { } } - void processData(aod::ResoCollision const& resoCollision, - aod::ResoCollisionColls const& collisionIndex, - soa::Join const& collisions, - aod::ResoTracks const& resoTracks, - aod::ResoCascades const& cascTracks) + void processData(aod::ResoCollision const& resoCollision, + aod::ResoCollisionColls const& collisionIndex, + soa::Join const& collisions, + aod::ResoTracks const& resoTracks, + aod::ResoCascades const& cascTracks) { auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex()); auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision auto coll = collisions.iteratorAt(collId); // Take original collision matched with resoCollision - if(cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision + if (cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision return; histos.fill(HIST("QAevent/hEvtCounterSameE"), 1.0); auto multiplicity = resoCollision.cent(); - fillHistograms(resoCollision,multiplicity,resoTracks, cascTracks); + fillHistograms(resoCollision, multiplicity, resoTracks, cascTracks); } // Reconstructed level MC for the track @@ -1080,46 +1081,45 @@ struct Xi1530Analysisqa { { if (!resoCollision.isInAfterAllCuts() || (std::abs(resoCollision.posZ()) > cZvertCutMC)) // MC event selection, all cuts missing vtx cut return; - - auto linkRow = resoCollisionIndex.iteratorAt(resoCollision.globalIndex()); - const int collId = linkRow.collisionId(); + auto linkRow = resoCollisionIndex.iteratorAt(resoCollision.globalIndex()); + const int collId = linkRow.collisionId(); - auto coll = collisionsMC.iteratorAt(collId); + auto coll = collisionsMC.iteratorAt(collId); - if(cRecoINELgt0 && !coll.isInelGt0()) - return; + if (cRecoINELgt0 && !coll.isInelGt0()) + return; - auto mcColl = coll.mcCollision_as>(); + auto mcColl = coll.mcCollision_as>(); - auto multiplicityReco = resoCollision.cent(); // Reco level multiplicity per. - auto multiplicityGen = mcColl.centFT0M(); // Gen level multiplicity per. + auto multiplicityReco = resoCollision.cent(); // Reco level multiplicity per. + auto multiplicityGen = mcColl.centFT0M(); // Gen level multiplicity per. - float multiplicity = cMCCent ? multiplicityGen : multiplicityReco; + float multiplicity = cMCCent ? multiplicityGen : multiplicityReco; fillHistograms(resoCollision, multiplicity, resoTracks, cascTracks); } // Truth level MC for the track with reco event - void processMCTrue(ResoMCCols::iterator const& resoCollision, - aod::ResoCollisionColls const& resoCollisionIndex, - aod::ResoMCParents const& resoParents, - aod::ResoCollisionCandidatesMC const& collisionsMC, - soa::Join const&) + void processMCTrue(ResoMCCols::iterator const& resoCollision, + aod::ResoCollisionColls const& resoCollisionIndex, + aod::ResoMCParents const& resoParents, + aod::ResoCollisionCandidatesMC const& collisionsMC, + soa::Join const&) { - - auto linkRow = resoCollisionIndex.iteratorAt(resoCollision.globalIndex()); - const int collId = linkRow.collisionId(); - auto coll = collisionsMC.iteratorAt(collId); + auto linkRow = resoCollisionIndex.iteratorAt(resoCollision.globalIndex()); + const int collId = linkRow.collisionId(); - auto mcColl = coll.mcCollision_as>(); + auto coll = collisionsMC.iteratorAt(collId); - auto multiplicityReco = resoCollision.cent(); // Reco level multiplicity per. - auto multiplicityGen = mcColl.centFT0M(); // Gen level multiplicity per. + auto mcColl = coll.mcCollision_as>(); + + auto multiplicityReco = resoCollision.cent(); // Reco level multiplicity per. + auto multiplicityGen = mcColl.centFT0M(); // Gen level multiplicity per. + + float multiplicity = cMCCent ? multiplicityGen : multiplicityReco; - float multiplicity = cMCCent ? multiplicityGen : multiplicityReco; - for (const auto& part : resoParents) { // loop over all pre-filtered MC particles if (std::abs(part.pdgCode()) != kXiStar || std::abs(part.y()) >= cfgRapidityCut) continue; @@ -1165,18 +1165,18 @@ struct Xi1530Analysisqa { } } - void processDataMicro(aod::ResoCollision const& resoCollision, - aod::ResoCollisionColls const& collisionIndex, - soa::Join const& collisions, - aod::ResoMicroTracks const& resomicrotracks, - aod::ResoCascades const& cascTracks) + void processDataMicro(aod::ResoCollision const& resoCollision, + aod::ResoCollisionColls const& collisionIndex, + soa::Join const& collisions, + aod::ResoMicroTracks const& resomicrotracks, + aod::ResoCascades const& cascTracks) { auto linkRow = collisionIndex.iteratorAt(resoCollision.globalIndex()); auto collId = linkRow.collisionId(); // Take original collision global index matched with resoCollision auto coll = collisions.iteratorAt(collId); // Take original collision matched with resoCollision - if(cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision + if (cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision return; histos.fill(HIST("QAevent/hEvtCounterSameE"), 1.0); @@ -1200,7 +1200,7 @@ struct Xi1530Analysisqa { histos.fill(HIST("QAevent/hEvtCounterMixedE"), 1.0); auto multiplicity = collision1.cent(); - fillHistograms(collision1,multiplicity, tracks1, tracks2); + fillHistograms(collision1, multiplicity, tracks1, tracks2); } } void processDataDF(aod::ResoCollisionDF const& resoCollision, aod::ResoTrackDFs const& resotracks, aod::ResoCascadeDFs const& cascTracks) @@ -1209,11 +1209,11 @@ struct Xi1530Analysisqa { fillHistograms(resoCollision, multiplicity, resotracks, cascTracks); } - void processMEMicro(aod::ResoCollisions const& resoCollisions, - aod::ResoCollisionColls const& collisionIndex, - soa::Join const& collisions, - aod::ResoMicroTracks const& resomicrotracks, - aod::ResoCascades const& cascTracks) + void processMEMicro(aod::ResoCollisions const& resoCollisions, + aod::ResoCollisionColls const& collisionIndex, + soa::Join const& collisions, + aod::ResoMicroTracks const& resomicrotracks, + aod::ResoCascades const& cascTracks) { auto tracksTuple = std::make_tuple(resomicrotracks, cascTracks); @@ -1222,18 +1222,18 @@ struct Xi1530Analysisqa { for (const auto& [collision1, tracks1, collision2, tracks2] : pairs) { - const auto rcIdx = collision1.globalIndex(); + const auto rcIdx = collision1.globalIndex(); - const auto linkRow = collisionIndex.iteratorAt(rcIdx); - const auto collId = linkRow.collisionId(); + const auto linkRow = collisionIndex.iteratorAt(rcIdx); + const auto collId = linkRow.collisionId(); - auto coll = collisions.iteratorAt(collId); - if(cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision - continue; + auto coll = collisions.iteratorAt(collId); + if (cRecoINELgt0 && !coll.isInelGt0()) // Check reco INELgt0 (at least one PV track in |eta| < 1) about the collision + continue; histos.fill(HIST("QAevent/hEvtCounterMixedE"), 1.0); auto multiplicity = collision1.cent(); - fillHistograms(collision1, multiplicity,tracks1, tracks2); + fillHistograms(collision1, multiplicity, tracks1, tracks2); } }