From 9ce95c6f167e8a7c2379bfe0ef4649e184cd98cb Mon Sep 17 00:00:00 2001 From: Nicolas Strangmann <77485327+nstrangm@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:13:39 +0200 Subject: [PATCH] PWGJE/EMCal + PWGJE/PhotonMeson: Changes to Yield and Event Histograms (#7825) - Move BC histograms from MCGen to EMC Event QA task - Reorder event selections in MCGen task - In EM: Add histogram for NEvents after subsequent cuts in EMC QC task Co-authored-by: Nicolas Strangmann --- PWGEM/PhotonMeson/Tasks/emcalQC.cxx | 27 +++++++ PWGJE/Tasks/emceventselectionqa.cxx | 13 ++-- PWGJE/Tasks/mcgeneratorstudies.cxx | 116 +++++++++++----------------- 3 files changed, 79 insertions(+), 77 deletions(-) diff --git a/PWGEM/PhotonMeson/Tasks/emcalQC.cxx b/PWGEM/PhotonMeson/Tasks/emcalQC.cxx index 4e80081162d..ded5abf9c70 100644 --- a/PWGEM/PhotonMeson/Tasks/emcalQC.cxx +++ b/PWGEM/PhotonMeson/Tasks/emcalQC.cxx @@ -138,6 +138,14 @@ struct emcalQC { DefineEMEventCut(); o2::aod::pwgem::photonmeson::utils::eventhistogram::addEventHistograms(&fRegistry); + auto hEMCCollisionCounter = fRegistry.add("Event/hEMCCollisionCounter", "Number of collisions after event cuts", HistType::kTH1F, {{7, 0.5, 7.5}}, false); + hEMCCollisionCounter->GetXaxis()->SetBinLabel(1, "all"); + hEMCCollisionCounter->GetXaxis()->SetBinLabel(2, "+TVX"); // TVX + hEMCCollisionCounter->GetXaxis()->SetBinLabel(3, "+|z|<10cm"); // TVX with z < 10cm + hEMCCollisionCounter->GetXaxis()->SetBinLabel(4, "+Sel8"); // TVX with z < 10cm and Sel8 + hEMCCollisionCounter->GetXaxis()->SetBinLabel(5, "+Good z vtx"); // TVX with z < 10cm and Sel8 and good z xertex + hEMCCollisionCounter->GetXaxis()->SetBinLabel(6, "+unique"); // TVX with z < 10cm and Sel8 and good z xertex and unique (only collision in the BC) + hEMCCollisionCounter->GetXaxis()->SetBinLabel(7, "+EMC readout"); // TVX with z < 10cm and Sel8 and good z xertex and unique (only collision in the BC) and kTVXinEMC o2::aod::pwgem::photonmeson::utils::clusterhistogram::addClusterHistograms(&fRegistry, cfgDo2DQA); } @@ -151,6 +159,25 @@ struct emcalQC { continue; } + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 1); + if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) { + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 2); + if (abs(collision.posZ()) < eventcuts.cfgZvtxMax) { + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 3); + if (collision.sel8()) { + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 4); + if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 5); + if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 6); + if (collision.alias_bit(kTVXinEMC)) + fRegistry.fill(HIST("Event/hEMCCollisionCounter"), 7); + } + } + } + } + } + o2::aod::pwgem::photonmeson::utils::eventhistogram::fillEventInfo<0>(&fRegistry, collision); if (!fEMEventCut.IsSelected(collision)) { continue; diff --git a/PWGJE/Tasks/emceventselectionqa.cxx b/PWGJE/Tasks/emceventselectionqa.cxx index b373371499f..de4228aa70e 100644 --- a/PWGJE/Tasks/emceventselectionqa.cxx +++ b/PWGJE/Tasks/emceventselectionqa.cxx @@ -41,7 +41,7 @@ struct EmcEventSelectionQA { using o2HistType = o2::framework::HistType; using o2Axis = o2::framework::AxisSpec; - o2Axis matchingAxis{3, -0.5, 2.5, "matchingStatus", "Matching status"}, // 0, no vertex,1 vertex found , 2 multiple vertices found + o2Axis matchingAxis{3, -0.5, 2.5, "Matching Status (0, 1, 2+ collisions)", "Matching status"}, // 0, no vertex,1 vertex found , 2 multiple vertices found bcAxis{4001, -0.5, 4000.5, "bcid", "BC ID"}; mHistManager.add("hCollisionMatching", "Collision Status", o2HistType::kTH1F, {matchingAxis}); @@ -72,6 +72,7 @@ struct EmcEventSelectionQA { mHistManager.add("hBCEmcalDJ2", "Bunch crossings with DJ2 trigger from CTP", o2HistType::kTH1F, {bcAxis}); mHistManager.add("hBCTVX", "Bunch crossings with FIT TVX trigger from CTP", o2HistType::kTH1F, {bcAxis}); mHistManager.add("hBCEmcalCellContent", "Bunch crossings with non-0 EMCAL cell content", o2HistType::kTH1F, {bcAxis}); + mHistManager.add("hBCCollisionCounter_TVX", "Number of BCs with a certain number of rec. colls", o2HistType::kTH2F, {bcAxis, matchingAxis}); initCollisionHistogram(mHistManager.get(HIST("hCollisionMatching")).get()); initCollisionHistogram(mHistManager.get(HIST("hCollisionMatchingReadout")).get()); @@ -162,10 +163,6 @@ struct EmcEventSelectionQA { } } - if (bc.selection_bit(aod::evsel::kIsTriggerTVX)) { - mHistManager.fill(HIST("hBCTVX"), bcID); - } - // lookup number of cells for global BC of this BC // avoid iteration over cell table for speed reason auto found = cellGlobalBCs.find(bc.globalBC()); @@ -185,6 +182,12 @@ struct EmcEventSelectionQA { } else { collisionStatus = 2; } + + if (bc.selection_bit(aod::evsel::kIsTriggerTVX)) { + mHistManager.fill(HIST("hBCTVX"), bcID); + mHistManager.fill(HIST("hBCCollisionCounter_TVX"), bcID, collisionStatus); + } + if (collisionStatus >= 0) { mHistManager.fill(HIST("hCollisionMatching"), collisionStatus); if (isEMCALreadout) { diff --git a/PWGJE/Tasks/mcgeneratorstudies.cxx b/PWGJE/Tasks/mcgeneratorstudies.cxx index 44a61f44474..83e37759732 100644 --- a/PWGJE/Tasks/mcgeneratorstudies.cxx +++ b/PWGJE/Tasks/mcgeneratorstudies.cxx @@ -32,37 +32,34 @@ using namespace o2::framework; using namespace o2::framework::expressions; using MyMCCollisions = soa::Join; -using bcEvSels = o2::soa::Join; struct MCGeneratorStudies { HistogramRegistry mHistManager{"MCGeneratorStudyHistograms"}; Configurable mVertexCut{"vertexCut", 10.f, "apply z-vertex cut with value in cm"}; Configurable mRapidityCut{"rapidityCut", 0.9f, "Maximum absolute rapidity of counted generated particles"}; - Configurable mSelectedParticleCode{"particlePDGCode", 111, "PDG code of the particle to be investigated"}; + Configurable mSelectedParticleCode{"particlePDGCode", 111, "PDG code of the particle to be investigated (0 for all)"}; Configurable mRequireGammaGammaDecay{"requireGammaGammaDecay", false, "Only count generated particles that decayed into two photons"}; Configurable mRequireEMCCellContent{"requireEMCCellContent", false, "Ask forEMCal cell content instead of the kTVXinEMC trigger"}; void init(InitContext const&) { AxisSpec pTAxis{250, 0., 25., "#it{p}_{T} (GeV/#it{c})"}; - AxisSpec bcAxis{4000, 0., 4000., "BC id"}; auto hCollisionCounter = mHistManager.add("hCollisionCounter", "Number of collisions after event cuts", HistType::kTH1F, {{7, 0.5, 7.5}}); hCollisionCounter->GetXaxis()->SetBinLabel(1, "all"); - hCollisionCounter->GetXaxis()->SetBinLabel(2, "TVX"); - hCollisionCounter->GetXaxis()->SetBinLabel(3, "T zSmall"); - hCollisionCounter->GetXaxis()->SetBinLabel(4, "Tz zGood"); - hCollisionCounter->GetXaxis()->SetBinLabel(5, "Tzz EMCal"); - hCollisionCounter->GetXaxis()->SetBinLabel(6, "TzzE Sel8"); - hCollisionCounter->GetXaxis()->SetBinLabel(7, "TzzES Unique"); - auto hAllCollisionCounter = mHistManager.add("hAllCollisionCounter", "Number of all collisions for different BC ids", HistType::kTH1F, {bcAxis}); - auto hTVXCollisionCounter = mHistManager.add("hTVXCollisionCounter", "Number of TVX collisions for different BC ids", HistType::kTH1F, {bcAxis}); - auto hgoodsmallTVXCollisionCounter = mHistManager.add("hgoodsmallTVXCollisionCounter", "Number of good small TVX collisions for different BC ids", HistType::kTH1F, {bcAxis}); - auto hkTVXinEMCCollisionCounter = mHistManager.add("hkTVXinEMCCollisionCounter", "Number of kTVXinEMC collisions for different BC ids", HistType::kTH1F, {bcAxis}); + hCollisionCounter->GetXaxis()->SetBinLabel(2, "+TVX"); // TVX + hCollisionCounter->GetXaxis()->SetBinLabel(3, "+|z|<10cm"); // TVX with z < 10cm + hCollisionCounter->GetXaxis()->SetBinLabel(4, "+Sel8"); // TVX with z < 10cm and Sel8 + hCollisionCounter->GetXaxis()->SetBinLabel(5, "+Good z vtx"); // TVX with z < 10cm and Sel8 and good z xertex + hCollisionCounter->GetXaxis()->SetBinLabel(6, "+unique"); // TVX with z < 10cm and Sel8 and good z xertex and unique (only collision in the BC) + hCollisionCounter->GetXaxis()->SetBinLabel(7, "+EMC readout"); // TVX with z < 10cm and Sel8 and good z xertex and unique (only collision in the BC) and kTVXinEMC TString mesonLatexString = (TString)mSelectedParticleCode; switch (mSelectedParticleCode) { + case 0: + mesonLatexString = "particles"; + break; case 111: mesonLatexString = "#pi^{0}"; break; @@ -70,25 +67,15 @@ struct MCGeneratorStudies { mesonLatexString = "#eta"; break; } - mHistManager.add("hpT_all", Form("Generated %s in all collisions", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_TVX", Form("Generated %s in TVX triggered collisions", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_T_zsmall", Form("Generated %s in TVX collisions with z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_T_z_zGood", Form("Generated %s in TVX collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpTAccepted_T_z_z", Form("Accepted (EMCal) %s in TVX collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_T_z_z_EMCal", Form("Generated %s in TVXinEMC collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_T_z_z_E_Sel8", Form("Generated %s in TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpT_T_z_z_E_S_Unique", Form("Generated %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - mHistManager.add("hpTAccepted_T_z_z_E_S_U", Form("Accepted %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); - - mHistManager.add("hbc_all", Form("Generated %s in all collisions", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_TVX", Form("Generated %s in TVX triggered collisions", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_T_zsmall", Form("Generated %s in TVX collisions with z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_T_z_zGood", Form("Generated %s in TVX collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbcAccepted_T_z_z", Form("Accepted (EMCal) %s in TVX collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_T_z_z_EMCal", Form("Generated %s in TVXinEMC collisions with good z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_T_z_z_E_Sel8", Form("Generated %s in TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbc_T_z_z_E_S_Unique", Form("Generated %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); - mHistManager.add("hbcAccepted_T_z_z_E_S_U", Form("Accepted %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {bcAxis}); + mHistManager.add("Yield", Form("Generated %s in all collisions", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_Accepted", Form("Accepted %s in all collisions", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_T", Form("Generated %s in TVX triggered collisions", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZ", Form("Generated %s in TVX collisions with z < 10cm", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZS", Form("Generated %s in TVX collisions with z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZSG", Form("Generated %s in collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZSGU", Form("Generated %s in unique collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZSGUE", Form("Generated %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); + mHistManager.add("Yield_TZSGUE_Accepted", Form("Accepted %s in unique TVXinEMC collisions with good z < 10cm and Sel8", mesonLatexString.Data()), HistType::kTH1F, {pTAxis}); auto hEMCollisionCounter = mHistManager.add("hEMCollisionCounter", "collision counter;;Number of events", kTH1F, {{13, 0.5, 13.5}}, false); hEMCollisionCounter->GetXaxis()->SetBinLabel(1, "all"); @@ -110,50 +97,40 @@ struct MCGeneratorStudies { PresliceUnsorted perMcCollision = aod::mcparticle::mcCollisionId; - void process(MyMCCollisions::iterator const& collision, aod::McCollisions const&, aod::McParticles const& mcParticles, bcEvSels const& bcs) + void process(MyMCCollisions::iterator const& collision, aod::McCollisions const&, aod::McParticles const& mcParticles) { - auto globalbcid = collision.foundBC_as().globalBC(); - auto bcID = globalbcid % 3564; - fillEventHistogram(&mHistManager, collision, bcID); + fillEventHistogram(&mHistManager, collision); auto mcCollision = collision.mcCollision(); auto mcParticles_inColl = mcParticles.sliceBy(perMcCollision, mcCollision.globalIndex()); for (auto& mcParticle : mcParticles_inColl) { - if (mcParticle.pdgCode() != mSelectedParticleCode || fabs(mcParticle.y()) > mRapidityCut) + if (mcParticle.pdgCode() != 0 && mcParticle.pdgCode() != mSelectedParticleCode) + continue; + if (fabs(mcParticle.y()) > mRapidityCut) continue; if (!mcParticle.isPhysicalPrimary() && !mcParticle.producedByGenerator()) continue; if (mRequireGammaGammaDecay && !isGammaGammaDecay(mcParticle, mcParticles)) continue; - mHistManager.fill(HIST("hbc_all"), bcID); - mHistManager.fill(HIST("hpT_all"), mcParticle.pt()); + mHistManager.fill(HIST("Yield"), mcParticle.pt()); + if (isAccepted(mcParticle, mcParticles)) + mHistManager.fill(HIST("Yield_Accepted"), mcParticle.pt()); if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) { - mHistManager.fill(HIST("hbc_TVX"), bcID); - mHistManager.fill(HIST("hpT_TVX"), mcParticle.pt()); + mHistManager.fill(HIST("Yield_T"), mcParticle.pt()); if (abs(collision.posZ()) < mVertexCut) { - mHistManager.fill(HIST("hbc_T_zsmall"), bcID); - mHistManager.fill(HIST("hpT_T_zsmall"), mcParticle.pt()); - if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { - mHistManager.fill(HIST("hbc_T_z_zGood"), bcID); - mHistManager.fill(HIST("hpT_T_z_zGood"), mcParticle.pt()); - if (isAccepted(mcParticle, mcParticles)) - mHistManager.fill(HIST("hbcAccepted_T_z_z"), bcID); - mHistManager.fill(HIST("hpTAccepted_T_z_z"), mcParticle.pt()); - if (mRequireEMCCellContent ? collision.isemcreadout() : collision.alias_bit(kTVXinEMC)) { - mHistManager.fill(HIST("hbc_T_z_z_EMCal"), bcID); - mHistManager.fill(HIST("hpT_T_z_z_EMCal"), mcParticle.pt()); - if (collision.sel8()) { - mHistManager.fill(HIST("hbc_T_z_z_E_Sel8"), bcID); - mHistManager.fill(HIST("hpT_T_z_z_E_Sel8"), mcParticle.pt()); - if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { - mHistManager.fill(HIST("hbc_T_z_z_E_S_Unique"), bcID); - mHistManager.fill(HIST("hpT_T_z_z_E_S_Unique"), mcParticle.pt()); - if (isAccepted(mcParticle, mcParticles)) { - mHistManager.fill(HIST("hbcAccepted_T_z_z_E_S_U"), bcID); - mHistManager.fill(HIST("hpTAccepted_T_z_z_E_S_U"), mcParticle.pt()); - } + mHistManager.fill(HIST("Yield_TZ"), mcParticle.pt()); + if (collision.sel8()) { + mHistManager.fill(HIST("Yield_TZS"), mcParticle.pt()); + if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { + mHistManager.fill(HIST("Yield_TZSG"), mcParticle.pt()); + if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { + mHistManager.fill(HIST("Yield_TZSGU"), mcParticle.pt()); + if (mRequireEMCCellContent ? collision.isemcreadout() : collision.alias_bit(kTVXinEMC)) { + mHistManager.fill(HIST("Yield_TZSGUE"), mcParticle.pt()); + if (isAccepted(mcParticle, mcParticles)) + mHistManager.fill(HIST("Yield_TZSGUE_Accepted"), mcParticle.pt()); } } } @@ -197,7 +174,7 @@ struct MCGeneratorStudies { return true; } - void fillEventHistogram(HistogramRegistry* fRegistry, MyMCCollisions::iterator const& collision, int bcID) + void fillEventHistogram(HistogramRegistry* fRegistry, MyMCCollisions::iterator const& collision) { fRegistry->fill(HIST("hEMCollisionCounter"), 1.0); if (collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) @@ -224,24 +201,19 @@ struct MCGeneratorStudies { fRegistry->fill(HIST("hEMCollisionCounter"), 12.0); fRegistry->fill(HIST("hEMCollisionCounter"), 13.0); - fRegistry->fill(HIST("hAllCollisionCounter"), bcID); fRegistry->fill(HIST("hCollisionCounter"), 1); if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) { - fRegistry->fill(HIST("hTVXCollisionCounter"), bcID); fRegistry->fill(HIST("hCollisionCounter"), 2); if (abs(collision.posZ()) < mVertexCut) { fRegistry->fill(HIST("hCollisionCounter"), 3); - if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { - fRegistry->fill(HIST("hgoodsmallTVXCollisionCounter"), bcID); + if (collision.sel8()) { fRegistry->fill(HIST("hCollisionCounter"), 4); - if (mRequireEMCCellContent ? collision.isemcreadout() : collision.alias_bit(kTVXinEMC)) { - fRegistry->fill(HIST("hkTVXinEMCCollisionCounter"), bcID); + if (collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { fRegistry->fill(HIST("hCollisionCounter"), 5); - if (collision.sel8()) { + if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { fRegistry->fill(HIST("hCollisionCounter"), 6); - if (collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { + if (mRequireEMCCellContent ? collision.isemcreadout() : collision.alias_bit(kTVXinEMC)) fRegistry->fill(HIST("hCollisionCounter"), 7); - } } } }