diff --git a/PWGMM/UE/Tasks/uecharged.cxx b/PWGMM/UE/Tasks/uecharged.cxx index abe50e6b93e..c981efe908b 100644 --- a/PWGMM/UE/Tasks/uecharged.cxx +++ b/PWGMM/UE/Tasks/uecharged.cxx @@ -15,8 +15,13 @@ /// \since November 2021 /// \last update: September 2025 -#include -#include +#include "PWGLF/Utils/inelGt.h" + +#include "Common/Core/TrackSelection.h" +#include "Common/Core/TrackSelectionDefaults.h" +#include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/Multiplicity.h" +#include "Common/DataModel/TrackSelectionTables.h" #include "Framework/ASoAHelpers.h" #include "Framework/AnalysisDataModel.h" @@ -25,21 +30,17 @@ #include "Framework/O2DatabasePDGPlugin.h" #include "Framework/StaticFor.h" #include "Framework/runDataProcessing.h" -#include "PWGLF/Utils/inelGt.h" - -#include "Common/Core/TrackSelection.h" -#include "Common/Core/TrackSelectionDefaults.h" -#include "Common/DataModel/EventSelection.h" -#include "Common/DataModel/Multiplicity.h" -#include "Common/DataModel/TrackSelectionTables.h" #include "ReconstructionDataFormats/Track.h" -#include "TDatabasePDG.h" +#include "TDatabasePDG.h" #include #include #include #include +#include +#include + // TODO: implement 50% stat for MC closure vs 50% for testing, add flag for weak // decays @@ -51,7 +52,8 @@ using BCsRun3 = soa::Join fEff{"fpara"}; - void init(InitContext const &); + void init(InitContext const&); template - void processMeasMC(const C &collision, const T &tracks, const P &particles); + void processMeasMC(const C& collision, const T& tracks, const P& particles); template - void processMeas(const C &collision, const T &tracks); + void processMeas(const C& collision, const T& tracks); template - void processTrue(const C &mcCollision, const P &particles); + void processTrue(const C& mcCollision, const P& particles); template - void analyzeEventAndTrackSelection(const C &collision, const T &tracks); + void analyzeEventAndTrackSelection(const C& collision, const T& tracks); Filter trackFilter = (nabs(aod::track::eta) < cfgTrkEtaCut) && (aod::track::pt > cfgTrkLowPtCut); using CollisionTableMCTrue = aod::McCollisions; using CollisionTableMC = - soa::SmallGroups>; + soa::SmallGroups>; using TrackTableMC = - soa::Filtered>; + soa::Filtered>; using ParticleTableMC = aod::McParticles; Preslice perCollision = aod::track::collisionId; - void processMC(CollisionTableMCTrue::iterator const &mcCollision, - CollisionTableMC const &collisions, TrackTableMC const &tracks, - ParticleTableMC const &particles, aod::FT0s const &, - BCsRun3 const &); + void processMC(CollisionTableMCTrue::iterator const& mcCollision, + CollisionTableMC const& collisions, TrackTableMC const& tracks, + ParticleTableMC const& particles, aod::FT0s const&, + BCsRun3 const&); PROCESS_SWITCH(ueCharged, processMC, "process MC", false); using CollisionTableMCData = - soa::Join; + soa::Join; using TrackTableMCData = - soa::Filtered>; - void processDataMC(CollisionTableMCData::iterator const &collision, - TrackTableMCData const &tracks, - ParticleTableMC const &particles, - aod::McCollisions const &mcCollisions); + soa::Filtered>; + void processDataMC(CollisionTableMCData::iterator const& collision, + TrackTableMCData const& tracks, + ParticleTableMC const& particles, + aod::McCollisions const& mcCollisions); PROCESS_SWITCH(ueCharged, processDataMC, "process data MC", false); using CollisionTableData = - soa::Join; + soa::Join; using TrackTableData = - soa::Filtered>; - void processData(CollisionTableData::iterator const &collision, - TrackTableData const &tracks, aod::FT0s const &, - BCsRun3 const &); + soa::Filtered>; + void processData(CollisionTableData::iterator const& collision, + TrackTableData const& tracks, aod::FT0s const&, + BCsRun3 const&); PROCESS_SWITCH(ueCharged, processData, "process data", false); // add new method }; -WorkflowSpec defineDataProcessing(ConfigContext const &cfgc) { +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +{ WorkflowSpec workflow{}; workflow.push_back(adaptAnalysisTask(cfgc)); return workflow; @@ -215,7 +219,8 @@ WorkflowSpec defineDataProcessing(ConfigContext const &cfgc) { float ueCharged::deltaPhi(float phia, float phib, float rangeMin = -o2::constants::math::PI / 2.0, float rangeMax = 3.0 * o2::constants::math::PI / - 2.0) { + 2.0) +{ float dphi = -999; if (phia < 0) { @@ -238,13 +243,14 @@ float ueCharged::deltaPhi(float phia, float phib, return dphi; } -void ueCharged::init(InitContext const &) { +void ueCharged::init(InitContext const&) +{ mySelectionPrim = myTrackSelectionPrim(); mySelectionOpenDCA = myTrackSelectionOpenDCA(); ConfigurableAxis ptBinningt{"ptBinningt", - {0, 0.15, 0.50, 1.00, 1.50, 2.00, 2.50, + {0, 0.15, 0.50, 1.00, 1.50, 2.00, 2.50, 3.00, 3.50, 4.00, 4.50, 5.00, 6.00, 7.00, 8.00, 9.00, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 40.0, 50.0}, @@ -252,22 +258,23 @@ void ueCharged::init(InitContext const &) { AxisSpec ptAxist = {ptBinningt, "#it{p}_{T}^{trig} (GeV/#it{c})"}; ConfigurableAxis ptBinning{ - "ptBinning", - {0, 0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, - 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, - 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, - 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, - 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 40.0, 50.0}, - "pTassoc bin limits"}; + "ptBinning", + {0, 0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, + 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, + 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, + 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 40.0, 50.0}, + "pTassoc bin limits"}; AxisSpec ptAxis = {ptBinning, "#it{p}_{T}^{assoc} (GeV/#it{c})"}; - + fEff.setObject( - new TF1("fpara", - "(x<0.3)*((0.315318)+x*(2.38596)+x*x*(-4.388)) +" - "(x>=0.3&&x<1.8)*((0.604051)+(0.154763)*x+(-0.103004)*x*x+(0.0266487)*x*x*x) +" - "(x>=1.8&&x<14.)*((0.700444)+(-0.00115506)*x+(0.000667608)*x*x+(-3.82915e-05)*x*x*x) +" - "(x>=14)*((0.731778)+(-0.000994634)*x)", 0., 1e5)); - + new TF1("fpara", + "(x<0.3)*((0.315318)+x*(2.38596)+x*x*(-4.388)) +" + "(x>=0.3&&x<1.8)*((0.604051)+(0.154763)*x+(-0.103004)*x*x+(0.0266487)*x*x*x) +" + "(x>=1.8&&x<14.)*((0.700444)+(-0.00115506)*x+(0.000667608)*x*x+(-3.82915e-05)*x*x*x) +" + "(x>=14)*((0.731778)+(-0.000994634)*x)", + 0., 1e5)); + if (doprocessMC) { ue.add("hPtOut", "pT all rec; pT; Nch", HistType::kTH1D, {ptAxis}); ue.add("hPtInPrim", "pT mc prim; pT; Nch", HistType::kTH1D, {ptAxis}); @@ -465,13 +472,14 @@ void ueCharged::init(InitContext const &) { } } -void ueCharged::processMC(CollisionTableMCTrue::iterator const &mcCollision, - CollisionTableMC const &collisions, - TrackTableMC const &tracks, - ParticleTableMC const &particles, aod::FT0s const &, - BCsRun3 const &) { +void ueCharged::processMC(CollisionTableMCTrue::iterator const& mcCollision, + CollisionTableMC const& collisions, + TrackTableMC const& tracks, + ParticleTableMC const& particles, aod::FT0s const&, + BCsRun3 const&) +{ if (collisions.size() != 0) { - for (const auto &collision : collisions) { + for (const auto& collision : collisions) { auto curTracks = tracks.sliceBy(perCollision, collision.globalIndex()); processMeasMC(collision, curTracks, particles); if (analyzeEvandTracksel) { @@ -483,15 +491,17 @@ void ueCharged::processMC(CollisionTableMCTrue::iterator const &mcCollision, processTrue(mcCollision, particles); } -void ueCharged::processDataMC(CollisionTableMCData::iterator const &collision, - TrackTableMCData const &tracks, - ParticleTableMC const &particles, - aod::McCollisions const & /*mcCollisions*/) { +void ueCharged::processDataMC(CollisionTableMCData::iterator const& collision, + TrackTableMCData const& tracks, + ParticleTableMC const& particles, + aod::McCollisions const& /*mcCollisions*/) +{ processMeasMC(collision, tracks, particles); } -void ueCharged::processData(CollisionTableData::iterator const &collision, - TrackTableData const &tracks, aod::FT0s const &, - BCsRun3 const &) { +void ueCharged::processData(CollisionTableData::iterator const& collision, + TrackTableData const& tracks, aod::FT0s const&, + BCsRun3 const&) +{ processMeas(collision, tracks); if (analyzeEvandTracksel) { analyzeEventAndTrackSelection(collision, tracks); @@ -499,10 +509,11 @@ void ueCharged::processData(CollisionTableData::iterator const &collision, } template -void ueCharged::processTrue(const C &mcCollision, const P &particles) { +void ueCharged::processTrue(const C& mcCollision, const P& particles) +{ int multTrue = 0; int multTrueINEL = 0; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { continue; @@ -533,7 +544,7 @@ void ueCharged::processTrue(const C &mcCollision, const P &particles) { double flPhiTrue = 0; int flIndexTrue = 0; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { continue; @@ -570,7 +581,7 @@ void ueCharged::processTrue(const C &mcCollision, const P &particles) { std::vector phiArrayTrue; std::vector indexArrayTrue; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { @@ -631,7 +642,8 @@ void ueCharged::processTrue(const C &mcCollision, const P &particles) { indexArrayTrue.clear(); } template -void ueCharged::processMeas(const C &collision, const T &tracks) { +void ueCharged::processMeas(const C& collision, const T& tracks) +{ ue.fill(HIST("hCounter"), 0); @@ -684,7 +696,7 @@ void ueCharged::processMeas(const C &collision, const T &tracks) { int flIndex = 0; int multRec = 0; int track_multiplicity = 0; - for (const auto &track : tracks) { + for (const auto& track : tracks) { if (!mySelectionPrim.IsSelected(track)) { continue; } @@ -719,7 +731,7 @@ void ueCharged::processMeas(const C &collision, const T &tracks) { std::vector phiArray; std::vector indexArray; - for (const auto &track : tracks) { + for (const auto& track : tracks) { if (mySelectionOpenDCA.IsSelected(track)) { ue.fill(HIST("hPTVsDCAData"), track.pt(), track.dcaXY()); @@ -847,8 +859,9 @@ void ueCharged::processMeas(const C &collision, const T &tracks) { } template -void ueCharged::processMeasMC(const C &collision, const T &tracks, - const P &particles) { +void ueCharged::processMeasMC(const C& collision, const T& tracks, + const P& particles) +{ ue.fill(HIST("hStat"), collision.size()); auto vtxZ = collision.posZ(); @@ -858,7 +871,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, double flPhiTrue = 0; int flIndexTrue = 0; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { continue; @@ -893,7 +906,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, std::vector phiArrayTrue; std::vector indexArrayTrue; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { @@ -998,7 +1011,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, ue.fill(HIST("hvtxZ"), vtxZ); // loop over MC true particles int multTrue = 0; - for (const auto &particle : particles) { + for (const auto& particle : particles) { auto pdgParticle = pdg->GetParticle(particle.pdgCode()); if (!pdgParticle || pdgParticle->Charge() == 0.) { continue; @@ -1024,7 +1037,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, int multRec = 0; int track_multiplicity = 0; - for (const auto &track : tracks) { + for (const auto& track : tracks) { if (!mySelectionPrim.IsSelected(track)) { continue; } @@ -1057,7 +1070,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, std::vector phiArray; std::vector indexArray; - for (const auto &track : tracks) { + for (const auto& track : tracks) { if (mySelectionOpenDCA.IsSelected(track)) { // TODO: set cuts w/o DCA cut ue.fill(HIST("hPTVsDCAData"), track.pt(), track.dcaXY()); @@ -1070,7 +1083,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, if (mySelectionOpenDCA.IsSelected(track)) { ue.fill(HIST("hPtDCAall"), track.pt(), track.dcaXY()); } - const auto &particle = track.mcParticle(); + const auto& particle = track.mcParticle(); if (particle.isPhysicalPrimary()) { if (mySelectionPrim.IsSelected(track)) { @@ -1087,7 +1100,7 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, } if (mySelectionOpenDCA.IsSelected(track)) { if (particle - .producedByGenerator()) { // i guess these are from decays + .producedByGenerator()) { // i guess these are from decays ue.fill(HIST("hPtDCAWeak"), track.pt(), track.dcaXY()); } else { //// i guess these are from material ue.fill(HIST("hPtDCAMat"), track.pt(), track.dcaXY()); @@ -1219,12 +1232,13 @@ void ueCharged::processMeasMC(const C &collision, const T &tracks, } template -void ueCharged::analyzeEventAndTrackSelection(const C &collision, - const T &tracks) { +void ueCharged::analyzeEventAndTrackSelection(const C& collision, + const T& tracks) +{ // z-vertex from FT0 vs PV analysis - const auto &foundBC = collision.template foundBC_as(); + const auto& foundBC = collision.template foundBC_as(); if (foundBC.has_ft0()) { ue.fill(HIST("hVtxFT0VsVtxCol"), foundBC.ft0().posZ(), collision.posZ()); @@ -1274,7 +1288,7 @@ void ueCharged::analyzeEventAndTrackSelection(const C &collision, int tracks_before = 0; int tracks_after = 0; - for (auto &track : tracks) { + for (auto& track : tracks) { if (track.hasITS() && track.hasTPC()) { ue.fill(HIST("preselection_track/ITS/itsNCls"), track.itsNCls());