diff --git a/PWGLF/DataModel/LFNonPromptCascadeTables.h b/PWGLF/DataModel/LFNonPromptCascadeTables.h index da4a1495602..4d3d16f07f6 100644 --- a/PWGLF/DataModel/LFNonPromptCascadeTables.h +++ b/PWGLF/DataModel/LFNonPromptCascadeTables.h @@ -195,7 +195,7 @@ DECLARE_SOA_TABLE(NPCascTable, "AOD", "NPCASCTABLE", NPCascadeTable::CentFT0M, NPCascadeTable::MultNTracksGlobal, NPCascadeTable::ToiMask, - NPCascadeTable::NoSameBunchPileup) + NPCascadeTable::NoSameBunchPileup); DECLARE_SOA_TABLE(NPCascTableNT, "AOD", "NPCASCTABLENT", NPCascadeTable::RunNumber, @@ -263,7 +263,7 @@ DECLARE_SOA_TABLE(NPCascTableNT, "AOD", "NPCASCTABLENT", NPCascadeTable::CentFT0M, NPCascadeTable::MultNTracksGlobal, NPCascadeTable::ToiMask, - NPCascadeTable::NoSameBunchPileup) + NPCascadeTable::NoSameBunchPileup); DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC", NPCascadeTable::RunNumber, @@ -350,7 +350,7 @@ DECLARE_SOA_TABLE(NPCascTableMC, "AOD", "NPCASCTABLEMC", NPCascadeTable::MotherDecayDaughters, NPCascadeTable::MultNTracksGlobal, NPCascadeTable::ToiMask, - NPCascadeTable::NoSameBunchPileup) + NPCascadeTable::NoSameBunchPileup); DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT", NPCascadeTable::RunNumber, @@ -437,7 +437,7 @@ DECLARE_SOA_TABLE(NPCascTableMCNT, "AOD", "NPCASCTABLEMCNT", NPCascadeTable::MotherDecayDaughters, NPCascadeTable::MultNTracksGlobal, NPCascadeTable::ToiMask, - NPCascadeTable::NoSameBunchPileup) + NPCascadeTable::NoSameBunchPileup); DECLARE_SOA_TABLE(NPCascTableGen, "AOD", "NPCASCTABLEGen", NPCascadeTable::gPt, NPCascadeTable::gEta, @@ -449,7 +449,12 @@ DECLARE_SOA_TABLE(NPCascTableGen, "AOD", "NPCASCTABLEGen", NPCascadeTable::DCAzMC, NPCascadeTable::IsFromBeauty, NPCascadeTable::IsFromCharm, - NPCascadeTable::MotherDecayDaughters) + NPCascadeTable::MotherDecayDaughters); +DECLARE_SOA_TABLE(NPMCChargedTable, "AOD", "NPMCChargedTABLE", + NPCascadeTable::PtGen, + NPCascadeTable::PtRec, + NPCascadeTable::MultNTracksGlobal, + NPCascadeTable::MultGen); DECLARE_SOA_TABLE(NPCollisionTable, "AOD", "NPCollisionTABLE", NPCascadeTable::RunNumber, NPCascadeTable::GlobalBC, @@ -457,13 +462,8 @@ DECLARE_SOA_TABLE(NPCollisionTable, "AOD", "NPCollisionTABLE", NPCascadeTable::MultNTracksGlobal, NPCascadeTable::CentFT0M, NPCascadeTable::MultFT0M); -DECLARE_SOA_TABLE(NPMCChargedTable, "AOD", "NPMCChargedTABLE", - NPCascadeTable::PtGen, - NPCascadeTable::PtRec, - NPCascadeTable::MultNTracksGlobal, - NPCascadeTable::MultGen); DECLARE_SOA_INDEX_COLUMN_FULL(NPCollision, npCollision, int32_t, NPCollisionTable, ""); -DECLARE_SOA_TABLE(NPRecoChargedCandidate, "AOD", "NPRecoChargedCandidate", +DECLARE_SOA_TABLE(NPRecoChargedCand, "AOD", "NPRecoChargedCand", NPCollisionId, NPCascadeTable::PtRec); } // namespace o2::aod diff --git a/PWGLF/Tasks/Strangeness/nonPromptCascade.cxx b/PWGLF/Tasks/Strangeness/nonPromptCascade.cxx index 2085067c176..4b828a18bd3 100644 --- a/PWGLF/Tasks/Strangeness/nonPromptCascade.cxx +++ b/PWGLF/Tasks/Strangeness/nonPromptCascade.cxx @@ -185,7 +185,7 @@ struct NonPromptCascadeTask { // Produces NPCollsTable; Produces NPMCNTable; - Produces NPRecoCandTable; + Produces NPRecoCandTable; using TracksExtData = soa::Join; using TracksExtMC = soa::Join; @@ -196,6 +196,7 @@ struct NonPromptCascadeTask { Preslice perCollision = aod::track::collisionId; Preslice perCollisionMC = aod::track::collisionId; + Preslice perCollisionSel = aod::track::collisionId; HistogramRegistry mRegistry; @@ -222,6 +223,7 @@ struct NonPromptCascadeTask { Configurable cfgMaxMultFV0{"cfgMaxMultFV0", 10000.f, "Upper range of multiplicty FV0 histo"}; Configurable cfgPtEdgesdNdeta{"ptEdges", "0,0.2,0.4,0.6,0.8,1,1.2,1.6,2.0,2.4,2.8,3.2,3.6,4,4.5,5,5.5,6,7,8,10", "Pt bin edges (comma-separated)"}; Configurable cfgDownscaleMB{"cfgDownscaleMB", 1, "Downscaling for pile up study sample"}; + Configurable cfgEtaCutdNdeta{"cfgEtaCutdNdeta", 0.8, "Eta cut for charged tracks"}; Zorro mZorro; OutputObj mZorroSummary{"ZorroSummary"}; @@ -331,8 +333,9 @@ struct NonPromptCascadeTask { // dN/deta // bool runMCdNdeta = context.options().get("processdNdetaMC"); + bool rundNdeta = context.options().get("processdNdeta"); // std::cout << "runMCdNdeta: " << runMCdNdeta << std::endl; - if (runMCdNdeta) { + if (runMCdNdeta || rundNdeta) { std::vector ptBins; std::vector tokens = o2::utils::Str::tokenize(cfgPtEdgesdNdeta, ','); for (auto const& pts : tokens) { @@ -344,13 +347,14 @@ struct NonPromptCascadeTask { } ptBins.push_back(pt); } - AxisSpec ptAxisMC{ptBins, "pT MC"}; AxisSpec ptAxisReco{ptBins, "pT Reco"}; + AxisSpec ptAxisMC{ptBins, "pT MC"}; // multMeasured, multMC, ptMeasured, ptMC mRegistrydNdeta.add("hdNdetaRM/hdNdetaRM", "hdNdetaRM", HistType::kTHnSparseF, {nTracksAxisMC, nTracksAxis, ptAxisMC, ptAxisReco}); mRegistrydNdeta.add("hdNdetaRM/hdNdetaRMNotInRecoCol", "hdNdetaRMNotInRecoCol", HistType::kTHnSparseF, {nTracksAxisMC, ptAxisMC}); mRegistrydNdeta.add("hdNdetaRM/hdNdetaRMNotInRecoTrk", "hdNdetaRMNotInRecoTrk", HistType::kTHnSparseF, {nTracksAxisMC, ptAxisMC}); + mRegistrydNdeta.add("hdNdetaData", "hdNdetaData", HistType::kTH1F, {nTracksAxis}); } } @@ -810,6 +814,10 @@ struct NonPromptCascadeTask { aod::McParticles const& mcParticles, TracksWithLabel const& tracks) { + //------------------------------------------------------------ + // Downscaling output table by BC as there is no pileup in MC + //------------------------------------------------------------ + int ds = 1; //------------------------------------------------------------- // MC mult for all MC coll //-------------------------------------------------------------- @@ -822,7 +830,7 @@ struct NonPromptCascadeTask { // apply your primary/eta/charge definition here if (!mcp.isPhysicalPrimary()) continue; - if (std::abs(mcp.eta()) > 0.5f) + if (std::abs(mcp.eta()) > cfgEtaCutdNdeta) continue; int q = 0; if (auto pdg = pdgDB->GetParticle(mcp.pdgCode())) { @@ -859,7 +867,7 @@ struct NonPromptCascadeTask { // ------------------------------------------------------------ std::vector recoMultDense(colls.size(), 0); for (auto const& trk : tracks) { - if (std::abs(trk.eta()) > 0.5f) { + if (std::abs(trk.eta()) > cfgEtaCutdNdeta) { continue; } const int collRowId = trk.collisionId(); @@ -887,7 +895,7 @@ struct NonPromptCascadeTask { // ------------------------------------------------------------ for (auto const& trk : tracks) { // Accept reco track - if (std::abs(trk.eta()) > 0.5f) { + if (std::abs(trk.eta()) > cfgEtaCutdNdeta) { continue; } @@ -931,7 +939,7 @@ struct NonPromptCascadeTask { if (!mcPar.isPhysicalPrimary()) { continue; } - if (std::abs(mcPar.eta()) > 0.5f) { + if (std::abs(mcPar.eta()) > cfgEtaCutdNdeta) { continue; } @@ -952,7 +960,10 @@ struct NonPromptCascadeTask { const float ptMC = mcPar.pt(); mRegistrydNdeta.fill(HIST("hdNdetaRM/hdNdetaRM"), mult, multReco, ptMC, ptReco); - NPMCNTable(ptMC, ptReco, mult, multReco); + if (ds % cfgDownscaleMB == 0) { + NPMCNTable(ptMC, ptReco, mult, multReco); + } + ds++; } // ------------------------------------------------------------ @@ -983,7 +994,7 @@ struct NonPromptCascadeTask { PROCESS_SWITCH(NonPromptCascadeTask, processdNdetaMC, "process mc dN/deta", false); // - void processdNdeta(CollisionCandidatesRun3 const& collisions, TracksWithSel const& tracks) + void processdNdeta(CollisionCandidatesRun3 const& collisions, TracksWithSel const& tracks, aod::BCsWithTimestamps const&) { int ds = 1; uint32_t orbitO = 0; @@ -1006,22 +1017,26 @@ struct NonPromptCascadeTask { mRunNumber = bc.runNumber(); } NPCollsTable(mRunNumber, - coll.bc().globalBC(), + globalBC, coll.numContrib(), coll.multNTracksGlobal(), coll.centFT0M(), coll.multFT0M()); auto collIdx = NPCollsTable.lastIndex(); - auto tracksThisColl = tracks.sliceBy(perCollision, coll.globalIndex()); + auto tracksThisColl = tracks.sliceBy(perCollisionSel, coll.globalIndex()); + float multreco = 0.; + // std::cout << "tracks:" << tracksThisColl.size() << std::endl; for (auto const& track : tracksThisColl) { - if (std::fabs(track.eta()) < 0.8 && track.tpcNClsFound() >= 80 && track.tpcNClsCrossedRows() >= 100) { + // std::cout << track.pt() << " tracks " << track.isGlobalTrack() << std::endl; + if (std::fabs(track.eta()) < cfgEtaCutdNdeta && track.tpcNClsFound() >= 80 && track.tpcNClsCrossedRows() >= 100) { if (track.isGlobalTrack()) { - // mults.multGlobalTracks++; + multreco++; NPRecoCandTable(collIdx, track.pt()); } } } + mRegistrydNdeta.fill(HIST("hdNdetaData"), multreco); } } }