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
59 changes: 50 additions & 9 deletions PWGLF/Tasks/Strangeness/cascadeAnalysisLightIonsDerivedData.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@
#include <TPDGCode.h>
#include <TProfile.h>

#include <string>
#include <vector>

using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;
Expand Down Expand Up @@ -96,6 +99,9 @@ struct CascadeAnalysisLightIonsDerivedData {
Configurable<bool> requireIsVertexTOFmatched{"requireIsVertexTOFmatched", false, "require events with at least one of vertex contributors matched to TOF"};
Configurable<bool> requireIsVertexTRDmatched{"requireIsVertexTRDmatched", false, "require events with at least one of vertex contributors matched to TRD"};
Configurable<bool> rejectSameBunchPileup{"rejectSameBunchPileup", true, "reject collisions in case of pileup with another collision in the same foundBC"};
Configurable<bool> applyZVtxSelOnMCPV{"applyZVtxSelOnMCPV", false, "Apply Z-vtx cut on the PV of the generated collision?"};
Configurable<bool> requireInel0{"requireInel0", false, "Enable INEL > 0 selection"};
Configurable<bool> requireInel0OnMC{"requireInel0OnMC", false, "Enable INEL > 0 selection for MC gen events"};

// Track analysis Parameters
Configurable<float> minITSnCls{"minITSnCls", 4.0f, "min number of ITS clusters"};
Expand Down Expand Up @@ -129,6 +135,7 @@ struct CascadeAnalysisLightIonsDerivedData {
Configurable<float> minimumCascRadius{"minimumCascRadius", 1.1f, "Minimum Cascade Radius"};
Configurable<float> v0masswindow{"v0masswindow", 0.005, "v0 mass window"};
Configurable<float> competingmassrej{"competingmassrej", 0.008, "Competing mass rejection"};

// Axes parameters
ConfigurableAxis centEstimatorHistBin{"centEstimatorHistBin", {101, 0.0f, 101.0f}, ""};
ConfigurableAxis centralityBinning{"centralityBinning", {VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f}, ""};
Expand All @@ -145,7 +152,7 @@ struct CascadeAnalysisLightIonsDerivedData {
kNGlobal };

// For manual sliceBy
PresliceUnsorted<soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraCollLabels>> perMcCollision = aod::v0data::straMCCollisionId;
PresliceUnsorted<soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraCollLabels>> perMcCollision = aod::cascdata::straMCCollisionId;

void init(InitContext const&)
{
Expand Down Expand Up @@ -183,6 +190,7 @@ struct CascadeAnalysisLightIonsDerivedData {
registryData.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(8, "kIsVertexTOFmatched");
registryData.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(9, "kIsVertexTRDmatched");
registryData.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(10, "kNoSameBunchPileup");
registryData.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(11, "kINELgr0");

registryData.add("number_of_events_data_vs_centrality", "number of events in data vs centrality", HistType::kTH2D, {{20, -0.5f, +19.5f}, {101, 0.0f, 101.0f}});
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetXaxis()->SetBinLabel(1, "All collisions");
Expand All @@ -195,6 +203,7 @@ struct CascadeAnalysisLightIonsDerivedData {
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetXaxis()->SetBinLabel(8, "kIsVertexTOFmatched");
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetXaxis()->SetBinLabel(9, "kIsVertexTRDmatched");
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetXaxis()->SetBinLabel(10, "kNoSameBunchPileup");
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetXaxis()->SetBinLabel(11, "kINELgr0");
registryData.get<TH2>(HIST("number_of_events_data_vs_centrality"))->GetYaxis()->SetTitle("Centrality (%)");

// QC Histograms
Expand Down Expand Up @@ -244,6 +253,7 @@ struct CascadeAnalysisLightIonsDerivedData {
registryMC.get<TH1>(HIST("number_of_events_mc_rec"))->GetXaxis()->SetBinLabel(8, "kIsVertexTOFmatched");
registryMC.get<TH1>(HIST("number_of_events_mc_rec"))->GetXaxis()->SetBinLabel(9, "kIsVertexTRDmatched");
registryMC.get<TH1>(HIST("number_of_events_mc_rec"))->GetXaxis()->SetBinLabel(10, "kNoSameBunchPileup");
registryMC.get<TH1>(HIST("number_of_events_mc_rec"))->GetXaxis()->SetBinLabel(11, "kINELgr0");

registryMC.add("number_of_events_mc_rec_vs_centrality", "number of events in mc_rec vs centrality", HistType::kTH2D, {{20, -0.5f, +19.5f}, {101, 0.0f, 101.0f}});
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetXaxis()->SetBinLabel(1, "All collisions");
Expand All @@ -256,6 +266,7 @@ struct CascadeAnalysisLightIonsDerivedData {
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetXaxis()->SetBinLabel(8, "kIsVertexTOFmatched");
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetXaxis()->SetBinLabel(9, "kIsVertexTRDmatched");
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetXaxis()->SetBinLabel(10, "kNoSameBunchPileup");
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetXaxis()->SetBinLabel(11, "kINELgr0");
registryMC.get<TH2>(HIST("number_of_events_mc_rec_vs_centrality"))->GetYaxis()->SetTitle("Centrality (%)");

// QC Histograms
Expand Down Expand Up @@ -313,9 +324,11 @@ struct CascadeAnalysisLightIonsDerivedData {
registryMC.add("h2dGenOmegaPlus", "h2dGenOmegaPlus", HistType::kTH2D, {centAxis, ptAxis});

// Histograms for event loss/splitting
registryMC.add("hGenEvents", "hGenEvents", HistType::kTH2D, {{axisNch}, {2, -0.5f, +1.5f}});
registryMC.add("hGenEvents", "hGenEvents", HistType::kTH2D, {{axisNch}, {4, -0.5f, +3.5f}});
registryMC.get<TH2>(HIST("hGenEvents"))->GetYaxis()->SetBinLabel(1, "All gen. events");
registryMC.get<TH2>(HIST("hGenEvents"))->GetYaxis()->SetBinLabel(2, "Gen. with at least 1 rec. events");
registryMC.get<TH2>(HIST("hGenEvents"))->GetYaxis()->SetBinLabel(2, "All gen. events in INEL > 0");
registryMC.get<TH2>(HIST("hGenEvents"))->GetYaxis()->SetBinLabel(3, "Gen. with at least 1 rec. events");
registryMC.get<TH2>(HIST("hGenEvents"))->GetYaxis()->SetBinLabel(4, "Gen. with at least 1 rec. events in INEL > 0");
registryMC.add("hGenEventCentrality", "hGenEventCentrality", kTH1D, {{101, 0.0f, 101.0f}});

registryMC.add("hCentralityVsNcoll_beforeEvSel", "hCentralityVsNcoll_beforeEvSel", HistType::kTH2D, {centAxis, {50, -0.5f, 49.5f}});
Expand Down Expand Up @@ -631,6 +644,10 @@ struct CascadeAnalysisLightIonsDerivedData {
continue;
}

if (requireInel0 && collision.multNTracksPVeta1() < 1) {
continue;
}

// Find the collision with the biggest nbr of PV contributors
// Follows what was done here: https://github.com/AliceO2Group/O2Physics/blob/master/Common/TableProducer/mcCollsExtra.cxx#L93
if (biggestNContribs < collision.multPVTotalContributors()) {
Expand All @@ -650,11 +667,16 @@ struct CascadeAnalysisLightIonsDerivedData {
std::vector<int> listBestCollisionIdx(mcCollisions.size());
for (auto const& mcCollision : mcCollisions) {
// event selections
if (applyVtxZ && std::fabs(mcCollision.posZ()) > zVtx)
if (applyZVtxSelOnMCPV && std::fabs(mcCollision.posZ()) > zVtx)
continue;

registryMC.fill(HIST("hGenEvents"), mcCollision.multMCNParticlesEta05(), 0 /* all gen. events*/);

if (requireInel0OnMC && mcCollision.multMCNParticlesEta10() < 1) {
continue;
}
registryMC.fill(HIST("hGenEvents"), mcCollision.multMCNParticlesEta05(), 1 /* all gen. events in INEL > 0*/);

auto groupedCollisions = getGroupedCollisions(collisions, mcCollision.globalIndex());
// Check if there is at least one of the reconstructed collisions associated to this MC collision
// If so, we consider it
Expand Down Expand Up @@ -698,6 +720,10 @@ struct CascadeAnalysisLightIonsDerivedData {
continue;
}

if (requireInel0 && collision.multNTracksPVeta1() < 1) {
continue;
}

if (biggestNContribs < collision.multPVTotalContributors()) {
biggestNContribs = collision.multPVTotalContributors();
if (centralityEstimator == Option::kFT0C)
Expand All @@ -721,8 +747,8 @@ struct CascadeAnalysisLightIonsDerivedData {
registryQC.fill(HIST("hVertexZGen"), mcCollision.posZ());

if (atLeastOne) {
registryMC.fill(HIST("hGenEvents"), mcCollision.multMCNParticlesEta05(), 1 /* at least 1 rec. event*/);

registryMC.fill(HIST("hGenEvents"), mcCollision.multMCNParticlesEta05(), 2 /* at least 1 rec. event*/);
registryMC.fill(HIST("hGenEvents"), mcCollision.multMCNParticlesEta05(), 3 /* at least 1 rec. event in INEL > 0*/);
registryMC.fill(HIST("hGenEventCentrality"), centralitydata);
}
}
Expand Down Expand Up @@ -815,6 +841,12 @@ struct CascadeAnalysisLightIonsDerivedData {
registryData.fill(HIST("number_of_events_data"), 9 /* Not at same bunch pile-up */);
registryData.fill(HIST("number_of_events_data_vs_centrality"), 9, centrality);

if (requireInel0 && collision.multNTracksPVeta1() < 1) {
return;
}
registryData.fill(HIST("number_of_events_data"), 10 /* INEL > 0 */);
registryData.fill(HIST("number_of_events_data_vs_centrality"), 10, centrality);

// Store the Zvtx
registryQC.fill(HIST("hVertexZdata"), collision.posZ());

Expand Down Expand Up @@ -959,6 +991,12 @@ struct CascadeAnalysisLightIonsDerivedData {
registryMC.fill(HIST("number_of_events_mc_rec"), 9 /* Not at same bunch pile-up */);
registryMC.fill(HIST("number_of_events_mc_rec_vs_centrality"), 9, centralityMcRec);

if (requireInel0 && RecCol.multNTracksPVeta1() < 1) {
continue;
}
registryMC.fill(HIST("number_of_events_mc_rec"), 10 /* INEL > 0 */);
registryMC.fill(HIST("number_of_events_mc_rec_vs_centrality"), 10, centralityMcRec);

// Store the Zvtx
registryQC.fill(HIST("hVertexZRec"), RecCol.posZ());

Expand Down Expand Up @@ -1055,17 +1093,20 @@ struct CascadeAnalysisLightIonsDerivedData {
if (!isPhysPrim)
continue;

float ptmc = RecoDecay::sqrtSumOfSquares(cascMC.pxMC(), cascMC.pyMC());
float ptmc = cascMC.ptMC();

auto mcCollision = cascMC.template straMCCollision_as<CollisionMCTrueTable>();

// event selections
if (applyVtxZ && std::abs(mcCollision.posZ()) > zVtx)
if (applyZVtxSelOnMCPV && std::abs(mcCollision.posZ()) > zVtx)
continue;

// Store the Zvtx
registryQC.fill(HIST("hVertexZGen"), mcCollision.posZ());

if (requireInel0OnMC && mcCollision.multMCNParticlesEta10() < 1) {
continue;
}

float centralityMC = 100.5f;

if (listBestCollisionIdx[mcCollision.globalIndex()] > -1) {
Expand Down
Loading