Skip to content

Commit

Permalink
PWGJE/EMCal + PWGJE/PhotonMeson: Changes to Yield and Event Histograms (
Browse files Browse the repository at this point in the history
#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 <[email protected]>
  • Loading branch information
nstrangm and Nicolas Strangmann authored Sep 30, 2024
1 parent cee6366 commit 9ce95c6
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 77 deletions.
27 changes: 27 additions & 0 deletions PWGEM/PhotonMeson/Tasks/emcalQC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,14 @@ struct emcalQC {
DefineEMEventCut();

o2::aod::pwgem::photonmeson::utils::eventhistogram::addEventHistograms(&fRegistry);
auto hEMCCollisionCounter = fRegistry.add<TH1>("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);
}

Expand All @@ -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;
Expand Down
13 changes: 8 additions & 5 deletions PWGJE/Tasks/emceventselectionqa.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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});
Expand Down Expand Up @@ -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<TH1>(HIST("hCollisionMatching")).get());
initCollisionHistogram(mHistManager.get<TH1>(HIST("hCollisionMatchingReadout")).get());
Expand Down Expand Up @@ -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());
Expand All @@ -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) {
Expand Down
116 changes: 44 additions & 72 deletions PWGJE/Tasks/mcgeneratorstudies.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -32,63 +32,50 @@ using namespace o2::framework;
using namespace o2::framework::expressions;

using MyMCCollisions = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::EMCALMatchedCollisions>;
using bcEvSels = o2::soa::Join<o2::aod::BCs, o2::aod::BcSels>;

struct MCGeneratorStudies {
HistogramRegistry mHistManager{"MCGeneratorStudyHistograms"};

Configurable<float> mVertexCut{"vertexCut", 10.f, "apply z-vertex cut with value in cm"};
Configurable<float> mRapidityCut{"rapidityCut", 0.9f, "Maximum absolute rapidity of counted generated particles"};
Configurable<int> mSelectedParticleCode{"particlePDGCode", 111, "PDG code of the particle to be investigated"};
Configurable<int> mSelectedParticleCode{"particlePDGCode", 111, "PDG code of the particle to be investigated (0 for all)"};
Configurable<bool> mRequireGammaGammaDecay{"requireGammaGammaDecay", false, "Only count generated particles that decayed into two photons"};
Configurable<bool> 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<TH1>("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<TH1>("hAllCollisionCounter", "Number of all collisions for different BC ids", HistType::kTH1F, {bcAxis});
auto hTVXCollisionCounter = mHistManager.add<TH1>("hTVXCollisionCounter", "Number of TVX collisions for different BC ids", HistType::kTH1F, {bcAxis});
auto hgoodsmallTVXCollisionCounter = mHistManager.add<TH1>("hgoodsmallTVXCollisionCounter", "Number of good small TVX collisions for different BC ids", HistType::kTH1F, {bcAxis});
auto hkTVXinEMCCollisionCounter = mHistManager.add<TH1>("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;
case 221:
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<TH1>("hEMCollisionCounter", "collision counter;;Number of events", kTH1F, {{13, 0.5, 13.5}}, false);
hEMCollisionCounter->GetXaxis()->SetBinLabel(1, "all");
Expand All @@ -110,50 +97,40 @@ struct MCGeneratorStudies {

PresliceUnsorted<aod::McParticles> 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<bcEvSels>().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());
}
}
}
Expand Down Expand Up @@ -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))
Expand All @@ -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);
}
}
}
}
Expand Down

0 comments on commit 9ce95c6

Please sign in to comment.