Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 127 additions & 110 deletions PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,10 @@
MC_gen_reg.add("histCentrality", "Impact parameter", HistType::kTH1F, {centralityAxis});
MC_gen_reg.add("hist_gen_p", "generated p distribution", HistType::kTH2F, {pAxis, PDGBINNING});
MC_gen_reg.add("hist_gen_pT", "generated p_{T} distribution", HistType::kTH2F, {ptAxis, PDGBINNING});
MC_gen_reg.add("histPhi", "#phi", HistType::kTH2F, {{100, 0., 2. * TMath::Pi()}, PDGBINNING});

Check warning on line 79 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Consider using the PI constant (and its multiples and fractions) defined in o2::constants::math.

Check warning on line 79 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pi-multiple-fraction]

Consider using multiples/fractions of PI defined in o2::constants::math.
MC_gen_reg.add("histEta", "#eta", HistType::kTH2F, {{102, -2.01, 2.01}, PDGBINNING});
MC_gen_reg.add("histRapid", "#gamma", HistType::kTH2F, {{1000, -5.0, 5.0}, PDGBINNING});

// *********************** Generated reco **********************

MC_gen_reg.add("histGenVtxMC_reco", "MC generated (reco) vertex z position", HistType::kTH1F, {{400, -40., +40., "z position (cm)"}});
Expand All @@ -91,7 +91,7 @@
// ********************** Reconstructed *********************
MC_recon_reg.add("histRecVtxMC", "MC reconstructed vertex z position", HistType::kTH1F, {{400, -40., +40., "z position (cm)"}});
MC_recon_reg.add("histCentrality", "Centrality", HistType::kTH1F, {centralityAxis});
MC_recon_reg.add("histPhi", "#phi", HistType::kTH2F, {{100, 0., 2. * TMath::Pi()}, PDGBINNING});

Check warning on line 94 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[external-pi]

Consider using the PI constant (and its multiples and fractions) defined in o2::constants::math.

Check warning on line 94 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pi-multiple-fraction]

Consider using multiples/fractions of PI defined in o2::constants::math.
MC_recon_reg.add("histEta", "#eta", HistType::kTH2F, {{102, -2.01, 2.01}, PDGBINNING});
MC_recon_reg.add("hist_rec_ITS_vs_p", "ITS reconstructed p distribution", HistType::kTH2F, {pAxis, PDGBINNING});
MC_recon_reg.add("hist_rec_ITS_TPC_vs_p", "ITS_TPC reconstructed p distribution", HistType::kTH2F, {pAxis, PDGBINNING});
Expand Down Expand Up @@ -149,11 +149,15 @@
template <typename particleType>
bool isInAcceptance(const particleType& particle)
{
if (particle.pt() < p_min || particle.pt() > p_max) return false;
if (particle.eta() < -cfgCutEta || particle.eta() > cfgCutEta) return false;
//if (particle.phi() < phiMin || particle.phi() > phiMax) return false;
if (particle.y() < yMin || particle.y() > yMax) return false;
if (!particle.isPhysicalPrimary()) return false;
if (particle.pt() < p_min || particle.pt() > p_max)
return false;
if (particle.eta() < -cfgCutEta || particle.eta() > cfgCutEta)
return false;
// if (particle.phi() < phiMin || particle.phi() > phiMax) return false;
if (particle.y() < yMin || particle.y() > yMax)
return false;
if (!particle.isPhysicalPrimary())
return false;

return true;
}
Expand All @@ -163,27 +167,39 @@
template <typename CollisionType>
bool isEventSelected(CollisionType const& collision)
{
if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) return false;
if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) return false;
if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) return false;
if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC)) return false;
if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) return false;
if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder))
return false;
if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup))
return false;
if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV))
return false;
if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC))
return false;
if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder))
return false;

return true;
}

//***********************************************************************************

template < typename CollType>
template <typename CollType>
bool isCollisionSelected(const CollType& collision)
{
if (event_selection_MC_sel8 && !collision.sel8()) return false;
if (collision.posZ() < -cfgCutVertex || collision.posZ() > cfgCutVertex) return false;
if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) return false;
if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) return false;
if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) return false;
if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC)) return false;
if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder)) return false;
if (event_selection_MC_sel8 && !collision.sel8())
return false;
if (collision.posZ() < -cfgCutVertex || collision.posZ() > cfgCutVertex)
return false;
if (removeITSROFrameBorder && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder))
return false;
if (removeNoSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup))
return false;
if (requireIsGoodZvtxFT0vsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV))
return false;
if (requireIsVertexITSTPC && !collision.selection_bit(aod::evsel::kIsVertexITSTPC))
return false;
if (removeNoTimeFrameBorder && !collision.selection_bit(aod::evsel::kNoTimeFrameBorder))
return false;

return true;
}
Expand All @@ -193,33 +209,33 @@
template <typename trackType>
bool isTrackSelected(trackType& track)
{
if (!track.has_mcParticle()) return false;
if (!track.has_mcParticle())
return false;

const auto mcParticle = track.mcParticle();
if (!isInAcceptance(mcParticle)) return false; // pt eta phi y
if (!track.has_collision()) return false;

if (!isInAcceptance(mcParticle))
return false; // pt eta phi y
if (!track.has_collision())
return false;

float TPCnumberClsFound = track.tpcNClsFound();
float TPC_nCls_Crossed_Rows = track.tpcNClsCrossedRows();
float RatioCrossedRowsOverFindableTPC = track.tpcCrossedRowsOverFindableCls();
float Chi2perClusterTPC = track.tpcChi2NCl();
float Chi2perClusterITS = track.itsChi2NCl();

bool insideDCAxy = (std::abs(track.dcaXY()) <= (maxDcaXYFactor.value * (0.0105f + 0.0350f / pow(track.pt(), 1.1f))));

Check warning on line 227 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[std-prefix]

Use std:: prefix for names from the std namespace.

if (!(insideDCAxy) || TMath::Abs(track.dcaZ()) > maxDCA_Z || TPCnumberClsFound < minTPCnClsFound || TPC_nCls_Crossed_Rows < minNCrossedRowsTPC || RatioCrossedRowsOverFindableTPC < minRatioCrossedRowsTPC || RatioCrossedRowsOverFindableTPC > maxRatioCrossedRowsTPC || Chi2perClusterTPC > maxChi2PerClusterTPC || Chi2perClusterTPC < minChi2PerClusterTPC || Chi2perClusterITS > maxChi2PerClusterITS || !(track.passedTPCRefit()) || !(track.passedITSRefit()) || (track.itsNClsInnerBarrel()) < minReqClusterITSib || (track.itsNCls()) < minReqClusterITS)

Check warning on line 229 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[root-entity]

Consider replacing ROOT entities with equivalents from standard C++ or from O2.
return false;
if ((requireITS && !(track.hasITS())) || (requireTPC && !(track.hasTPC())))
return false;
if (requireGoldenChi2 && !(track.passedGoldenChi2()))
return false;


return true;
}



//***********************************************************************************
using CollisionCandidates = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels, aod::CentFT0Cs>;
using CollisionCandidatesMC = o2::soa::Join<CollisionCandidates, o2::aod::McCollisionLabels>;
Expand All @@ -230,7 +246,7 @@
Preslice<o2::aod::Tracks> perCollision = o2::aod::track::collisionId;
Preslice<o2::aod::McParticles> perCollisionMc = o2::aod::mcparticle::mcCollisionId;
PresliceUnsorted<CollisionCandidatesMC> collPerCollMc = o2::aod::mccollisionlabel::mcCollisionId;

void processMC(o2::aod::McCollisions const& mcCollisions,
// o2::soa::SmallGroups<CollisionCandidatesMC> const& collisions,
CollisionCandidatesMC const& collisions,
Expand All @@ -243,15 +259,18 @@
const auto groupedCollisions = collisions.sliceBy(collPerCollMc, mcCollision.globalIndex());
const auto groupedMcParticles = mcParticles.sliceBy(perCollisionMc, mcCollision.globalIndex());

if (groupedCollisions.size() < 1) continue;
if (groupedCollisions.size() < 1)
continue;
float centrality = -1.;

/// loop over reconstructed collisions
for (const auto& collision : groupedCollisions) {
if (!isCollisionSelected(collision)) continue;
if (!isCollisionSelected(collision))
continue;

centrality = collision.centFT0C();
if (centrality < minCentrality || centrality > maxCentrality) continue;
if (centrality < minCentrality || centrality > maxCentrality)
continue;

MC_recon_reg.fill(HIST("histCentrality"), centrality);
MC_recon_reg.fill(HIST("histRecVtxMC"), collision.posZ());
Expand All @@ -260,12 +279,13 @@

// Track loop
for (const auto& track : groupedTracks) {
if (!isTrackSelected(track)) continue;
if (!isTrackSelected(track))
continue;

const auto& particle = track.mcParticle();
//TLorentzVector lorentzVector_particle_MC{};
// TLorentzVector lorentzVector_particle_MC{};

int pdgbin = -10;

Check warning on line 288 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid using hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
switch (particle.pdgCode()) {
case +211:
histPDG_reco->AddBinContent(1);
Expand All @@ -277,15 +297,15 @@
break;
case +321:
histPDG_reco->AddBinContent(3);
pdgbin = 2;

Check warning on line 300 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid using hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
break;
case -321:
histPDG_reco->AddBinContent(4);
pdgbin = 3;

Check warning on line 304 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid using hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
break;
case +2212:
histPDG_reco->AddBinContent(5);
pdgbin = 4;

Check warning on line 308 in PWGLF/Tasks/Nuspex/NucleiEfficiencyTask.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid using hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
break;
case -2212:
histPDG_reco->AddBinContent(6);
Expand Down Expand Up @@ -328,8 +348,7 @@
continue;
break;
}



MC_recon_reg.fill(HIST("histPhi"), track.phi(), pdgbin);
MC_recon_reg.fill(HIST("histEta"), track.eta(), pdgbin);

Expand Down Expand Up @@ -371,88 +390,87 @@
// putting this condition here avoids the particle loop a few lines below
if (applyPvZCutGenColl) {
const float genPvZ = mcCollision.posZ();
if (genPvZ < -cfgCutVertex || genPvZ > cfgCutVertex) continue;
if (genPvZ < -cfgCutVertex || genPvZ > cfgCutVertex)
continue;
}
}

MC_gen_reg.fill(HIST("histGenVtxMC_reco"), mcCollision.posZ());
MC_gen_reg.fill(HIST("histCentrality_reco"), centrality);

/// only to fill denominator of ITS-TPC matched primary tracks only in MC events with at least 1 reco. vtx
for (const auto& particle : groupedMcParticles) { // Particle loop

/// require generated particle in acceptance
if (!isInAcceptance(particle)) continue;

int pdgbin = -10;
switch (particle.pdgCode()) {
case +211:
histPDG_gen_reco->AddBinContent(1);
pdgbin = 0;
break;
case -211:
histPDG_gen_reco->AddBinContent(2);
pdgbin = 1;
break;
case +321:
histPDG_gen_reco->AddBinContent(3);
pdgbin = 2;
break;
case -321:
histPDG_gen_reco->AddBinContent(4);
pdgbin = 3;
break;
case +2212:
histPDG_gen_reco->AddBinContent(5);
pdgbin = 4;
break;
case -2212:
histPDG_gen_reco->AddBinContent(6);
pdgbin = 5;
break;
case +1000010020:
histPDG_gen_reco->AddBinContent(7);
pdgbin = 6;
break;
case -1000010020:
histPDG_gen_reco->AddBinContent(8);
pdgbin = 7;
break;
case +1000010030:
histPDG_gen_reco->AddBinContent(9);
pdgbin = 8;
break;
case -1000010030:
histPDG_gen_reco->AddBinContent(10);
pdgbin = 9;
break;
case +1000020030:
histPDG_gen_reco->AddBinContent(11);
pdgbin = 10;
break;
case -1000020030:
histPDG_gen_reco->AddBinContent(12);
pdgbin = 11;
break;
case +1000020040:
histPDG_gen_reco->AddBinContent(13);
pdgbin = 12;
break;
case -1000020040:
histPDG_gen_reco->AddBinContent(14);
pdgbin = 13;
break;
default:
pdgbin = -10;
continue;
break;
}
MC_gen_reg.fill(HIST("histEta_reco"), particle.eta(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_reco_p"), particle.p(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_reco_pT"), particle.pt(), pdgbin);


if (!isInAcceptance(particle))
continue;

int pdgbin = -10;
switch (particle.pdgCode()) {
case +211:
histPDG_gen_reco->AddBinContent(1);
pdgbin = 0;
break;
case -211:
histPDG_gen_reco->AddBinContent(2);
pdgbin = 1;
break;
case +321:
histPDG_gen_reco->AddBinContent(3);
pdgbin = 2;
break;
case -321:
histPDG_gen_reco->AddBinContent(4);
pdgbin = 3;
break;
case +2212:
histPDG_gen_reco->AddBinContent(5);
pdgbin = 4;
break;
case -2212:
histPDG_gen_reco->AddBinContent(6);
pdgbin = 5;
break;
case +1000010020:
histPDG_gen_reco->AddBinContent(7);
pdgbin = 6;
break;
case -1000010020:
histPDG_gen_reco->AddBinContent(8);
pdgbin = 7;
break;
case +1000010030:
histPDG_gen_reco->AddBinContent(9);
pdgbin = 8;
break;
case -1000010030:
histPDG_gen_reco->AddBinContent(10);
pdgbin = 9;
break;
case +1000020030:
histPDG_gen_reco->AddBinContent(11);
pdgbin = 10;
break;
case -1000020030:
histPDG_gen_reco->AddBinContent(12);
pdgbin = 11;
break;
case +1000020040:
histPDG_gen_reco->AddBinContent(13);
pdgbin = 12;
break;
case -1000020040:
histPDG_gen_reco->AddBinContent(14);
pdgbin = 13;
break;
default:
pdgbin = -10;
continue;
break;
}
MC_gen_reg.fill(HIST("histEta_reco"), particle.eta(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_reco_p"), particle.p(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_reco_pT"), particle.pt(), pdgbin);
}
} /// end loop over reconstructed collisions

Expand All @@ -467,10 +485,11 @@

// Loop on particles to fill the denominator
for (const auto& mcParticle : groupedMcParticles) {
if (!isInAcceptance(mcParticle)) continue;
if (!isInAcceptance(mcParticle))
continue;

MC_gen_reg.fill(HIST("histGenVtxMC"), mcCollision.posZ());
//MC_gen_reg.fill(HIST("histCentrality"), mcParticle.impactParameter());
// MC_gen_reg.fill(HIST("histCentrality"), mcParticle.impactParameter());

int pdgbin = -10;
switch (mcParticle.pdgCode()) {
Expand Down Expand Up @@ -541,12 +560,10 @@
MC_gen_reg.fill(HIST("histRapid"), mcParticle.y(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_p"), mcParticle.p(), pdgbin);
MC_gen_reg.fill(HIST("hist_gen_pT"), mcParticle.pt(), pdgbin);

}
} /// end loop over generated collisions
}
PROCESS_SWITCH(NucleiEfficiencyTask, processMC, "process generated MC", true);

};

//***********************************************************************************
Expand Down
Loading