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
212 changes: 105 additions & 107 deletions PWGLF/Tasks/GlobalEventProperties/dndeta-mft-pp.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -49,29 +49,29 @@ using namespace o2::framework::expressions;
using namespace o2::aod::track;

AxisSpec PtAxis = {1001, -0.005, 10.005};
AxisSpec DeltaZAxis = {61, -6.1, 6.1};
AxisSpec ZAxis = {301, -30.1, 30.1};
AxisSpec PhiAxis = {629, 0, o2::constants::math::TwoPI, "Rad", "phi axis"};
// AxisSpec EtaAxis = {18, -4.6, -1.};
AxisSpec DCAxyAxis = {5000, -1, 500};
AxisSpec DCAzAxis = {5000, -251, 250};
AxisSpec CentAxis = {{0, 10, 20, 30, 40, 50, 60, 70, 80, 100}};

static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
AxisSpec DeltaZAxis = {61, -6.1, 6.1};
AxisSpec ZAxis = {301, -30.1, 30.1};
AxisSpec PhiAxis = {629, 0, o2::constants::math::TwoPI, "Rad", "phi axis"};
// AxisSpec EtaAxis = {18, -4.6, -1.};
AxisSpec DCAxyAxis = {5000, -1, 500};
AxisSpec DCAzAxis = {5000, -251, 250};
AxisSpec CentAxis = {{0, 10, 20, 30, 40, 50, 60, 70, 80, 100}};

static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
TrackSelectionFlags::kITSNCls | TrackSelectionFlags::kITSChi2NDF |
TrackSelectionFlags::kITSHits;

static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
TrackSelectionFlags::kTPCNCls |
TrackSelectionFlags::kTPCCrossedRowsOverNCls |
TrackSelectionFlags::kTPCChi2NDF;

static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;

using MFTTracksLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
using MFTTracksLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;

struct PseudorapidityDensityMFT {
struct PseudorapidityDensityMFT {
SliceCache cache;
Preslice<aod::MFTTracks> perCol = o2::aod::fwdtrack::collisionId;
Preslice<aod::McParticles> perMcCol = aod::mcparticle::mcCollisionId;
Expand All @@ -80,7 +80,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
Service<o2::framework::O2DatabasePDG> pdg;

Configurable<float> estimatorEta{"estimatorEta", 1.0,
"eta range for INEL>0 sample definition"};
"eta range for INEL>0 sample definition"};

Configurable<bool> useEvSel{"useEvSel", true, "use event selection"};
Configurable<bool> disableITSROFCut{"disableITSROFCut", false, "Disable ITS ROF cut for event selection"};
Expand All @@ -99,65 +99,63 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
Configurable<float> cfgPhiCut{"cfgPhiCut", 0.1f,
"Cut on azimuthal angle of MFT tracks"};
Configurable<float> cfgPhiCut1{"cfgPhiCut1", 0.0f,
"low Cut on azimuthal angle of MFT tracks"};
"low Cut on azimuthal angle of MFT tracks"};
Configurable<float> cfgPhiCut2{"cfgPhiCut2", 6.3f,
"high Cut on azimuthal angle of MFT tracks"};
"high Cut on azimuthal angle of MFT tracks"};
Configurable<float> cfgVzCut1{"cfgVzCut1", -30.0f,
"Cut1 on vertex position of MFT tracks"};
Configurable<float> cfgVzCut2{"cfgVzCut2", 30.0f,
"Cut2 on vertex position of MFT tracks"};
Configurable<float> cfgnCluster{"cfgnCluster", 5.0f,
"Cut on no of clusters per MFT track"};
Configurable<float> cfgnEta1{"cfgnEta1", -4.5f,
"Cut on eta1"};
"Cut on eta1"};
Configurable<float> cfgnEta2{"cfgnEta2", -1.0f,
"Cut on eta1"};
"Cut on eta1"};
Configurable<float> cfgChi2NDFMax{"cfgChi2NDFMax", 2000.0f, "Max allowed chi2/NDF for MFT tracks"};
Configurable<float> maxDCAxy{"maxDCAxy", 2.0f, "Cut on dcaXY"};
Configurable<float> maxDCAz{"maxDCAz", 2.0f, "Cut on dcaZ"};

HistogramRegistry registry{
"registry",
{
{"TracksEtaZvtx",
"; #eta; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
{"Tracks/EtaZvtx_gt0",
"; #eta; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
{"TracksPhiEta",
"; #varphi; #eta; tracks",
{HistType::kTH2F, {PhiAxis, EtaAxis}}}, //
{"TracksPhiZvtx",
"; #varphi; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {PhiAxis, ZAxis}}}, //
{"TracksPtEta",
" ; p_{T} (GeV/c); #eta",
{HistType::kTH2F, {PtAxis, EtaAxis}}}, //
{"EventSelection",
";status;events",
{HistType::kTH1F, {{15, 0.5, 15.5}}}},
{"EventCounts",
";status;events",
{HistType::kTH1F, {{2, 0.5, 2.5}}}},
{"Tracks/Control/TrackCount", ";status;Track counts", {HistType::kTH1F, {{15, 0.5, 15.5}}}}, // added
// Purity-related histograms
{"Purity/SelectedAfterDCAxy/All",
";bin;counts",
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
{"Purity/SelectedAfterDCAxy/AllEta",
";#eta;counts",
{HistType::kTH1F, {EtaAxis}}},
{"Purity/Gen/PrimaryEta",
";#eta;primaries",
{HistType::kTH1F, {EtaAxis}}},
{"Purity/Gen/All",
";bin;counts",
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
{"Purity/Gen/AllEta",
";#eta;counts",
{HistType::kTH1F, {EtaAxis}}}
}};
{{"TracksEtaZvtx",
"; #eta; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
{"Tracks/EtaZvtx_gt0",
"; #eta; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
{"TracksPhiEta",
"; #varphi; #eta; tracks",
{HistType::kTH2F, {PhiAxis, EtaAxis}}}, //
{"TracksPhiZvtx",
"; #varphi; #it{z}_{vtx} (cm); tracks",
{HistType::kTH2F, {PhiAxis, ZAxis}}}, //
{"TracksPtEta",
" ; p_{T} (GeV/c); #eta",
{HistType::kTH2F, {PtAxis, EtaAxis}}}, //
{"EventSelection",
";status;events",
{HistType::kTH1F, {{15, 0.5, 15.5}}}},
{"EventCounts",
";status;events",
{HistType::kTH1F, {{2, 0.5, 2.5}}}},
{"Tracks/Control/TrackCount", ";status;Track counts", {HistType::kTH1F, {{15, 0.5, 15.5}}}}, // added
// Purity-related histograms
{"Purity/SelectedAfterDCAxy/All",
";bin;counts",
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
{"Purity/SelectedAfterDCAxy/AllEta",
";#eta;counts",
{HistType::kTH1F, {EtaAxis}}},
{"Purity/Gen/PrimaryEta",
";#eta;primaries",
{HistType::kTH1F, {EtaAxis}}},
{"Purity/Gen/All",
";bin;counts",
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
{"Purity/Gen/AllEta",
";#eta;counts",
{HistType::kTH1F, {EtaAxis}}}}};

void init(InitContext&)
{
Expand All @@ -167,9 +165,9 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
static_cast<int>(doprocessCountingCentrality) >
1) {
LOGP(fatal,
"Exactly one process function between processMult, "
"processMultReassoc, processMultReassoc3d and processCountingCentrality should be "
"enabled!");
"Exactly one process function between processMult, "
"processMultReassoc, processMultReassoc3d and processCountingCentrality should be "
"enabled!");
}
AxisSpec MultAxis = {multBinning, "N_{trk}"};
auto hstat = registry.get<TH1>(HIST("EventSelection"));
Expand Down Expand Up @@ -479,7 +477,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
x->SetBinLabel(2, "Selected");

registry.add("Events/Centrality/CentPercentileMCGen",
"CentPercentileMCGen", kTH1D, {CentAxis}, false);
"CentPercentileMCGen", kTH1D, {CentAxis}, false);
registry.add({"Events/Centrality/NtrkZvtxGen",
"; N_{trk}; Z_{vtx} (cm); centrality",
{HistType::kTH3F, {MultAxis, ZAxis, CentAxis}}});
Expand Down Expand Up @@ -507,7 +505,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
for (const auto& bc : bcs) {
if (!useEvSel ||
(useEvSel && ((bc.selection_bit(aod::evsel::kIsBBT0A) &&
bc.selection_bit(aod::evsel::kIsBBT0C)) != 0))) {
bc.selection_bit(aod::evsel::kIsBBT0C)) != 0))) {
registry.fill(HIST("EventSelection"), 8); // added 5->12
cols.clear();
for (const auto& collision : collisions) {
Expand All @@ -531,7 +529,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processTagging,
"Collect event sample stats", true);
"Collect event sample stats", true);

Partition<aod::MFTTracks> sample =
(aod::fwdtrack::eta < -2.8f) && (aod::fwdtrack::eta > -3.2f);
Expand All @@ -547,10 +545,10 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
expressions::Filter trackSelectionCentral =
((aod::track::trackCutFlag & trackSelectionITS) == trackSelectionITS) &&
ifnode((aod::track::v001::detectorMap & (uint8_t)o2::aod::track::TPC) ==
(uint8_t)o2::aod::track::TPC,
(aod::track::trackCutFlag & trackSelectionTPC) ==
trackSelectionTPC,
true) &&
(uint8_t)o2::aod::track::TPC,
(aod::track::trackCutFlag & trackSelectionTPC) ==
trackSelectionTPC,
true) &&
((aod::track::trackCutFlag & trackSelectionDCA) == trackSelectionDCA) &&
(nabs(aod::track::eta) < estimatorEta);

Expand All @@ -559,8 +557,8 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
aod::TracksDCA>>; // central tracks for INEL>0

void processMult(CollwEv::iterator const& collision,
aod::MFTTracks const& tracks,
FiCentralTracks const& midtracks, aod::Tracks const&)
aod::MFTTracks const& tracks,
FiCentralTracks const& midtracks, aod::Tracks const&)
{

registry.fill(HIST("EventSelection"), 1.);
Expand Down Expand Up @@ -590,7 +588,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
((phi > o2::constants::math::PI - cfgPhiCut) && (phi < o2::constants::math::PI + cfgPhiCut)) ||
(phi > o2::constants::math::TwoPI - cfgPhiCut) ||
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
continue;
}

Expand All @@ -613,7 +611,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processMult,
"Process reco or data info", true);
"Process reco or data info", true);
// Common implementation for both BestCollisionsFwd and BestCollisionsFwd3d
template <typename RetracksT>
void processMultReassocCommon(CollwEv::iterator const& collision,
Expand Down Expand Up @@ -725,26 +723,26 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
float dcaxy_cut = retrack.bestDCAXY();
o2::math_utils::bringTo02Pi(phi);
// Declare dcaz_cut only if needed below.
if ((cfgnEta1 < track.eta()) && (track.eta() < cfgnEta2) && track.nClusters() >= cfgnCluster && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
if (usePhiCut) {
if ((phi <= 0.02) || ((phi >= 3.10) && (phi <= 3.23)) || (phi >= 6.21))
continue;
}
if (useDCAxyCut) {
if (dcaxy_cut > maxDCAxy)
continue;
}
if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
float dcaz_cut = retrack.bestDCAZ();
if (useDCAzCut) {
if (dcaz_cut > maxDCAz)
if ((cfgnEta1 < track.eta()) && (track.eta() < cfgnEta2) && track.nClusters() >= cfgnCluster && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
if (usePhiCut) {
if ((phi <= 0.02) || ((phi >= 3.10) && (phi <= 3.23)) || (phi >= 6.21))
continue;
}
}
// Purity denominator: all tracks that pass the DCA selection and other quality cuts
registry.fill(HIST("Purity/SelectedAfterDCAxy/All"), 1.);
registry.fill(HIST("Purity/SelectedAfterDCAxy/AllEta"), track.eta());
registry.fill(HIST("TracksEtaZvtx"), track.eta(), z);
if (useDCAxyCut) {
if (dcaxy_cut > maxDCAxy)
continue;
}
if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
float dcaz_cut = retrack.bestDCAZ();
if (useDCAzCut) {
if (dcaz_cut > maxDCAz)
continue;
}
}
// Purity denominator: all tracks that pass the DCA selection and other quality cuts
registry.fill(HIST("Purity/SelectedAfterDCAxy/All"), 1.);
registry.fill(HIST("Purity/SelectedAfterDCAxy/AllEta"), track.eta());
registry.fill(HIST("TracksEtaZvtx"), track.eta(), z);
if (midtracks.size() > 0 && retrack.ambDegree() > 0) {
registry.fill(HIST("Tracks/EtaZvtx_gt0"), track.eta(), z);
registry.fill(HIST("Tracks/2Danalysis/EtaZvtx_sel8_inelfwdgt0"), track.eta(), z);
Expand Down Expand Up @@ -898,15 +896,15 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
processMultReassocCommon(collision, mft, retracks, midtracks, trk);
}
PROCESS_SWITCH(PseudorapidityDensityMFT, processMultReassoc,
"Process reco or data info", false);
"Process reco or data info", false);

PROCESS_SWITCH(PseudorapidityDensityMFT, processMultReassoc3d,
"Process reco or data info (3d)", false);
"Process reco or data info (3d)", false);

using ExColsCent = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels>;

void processCountingCentrality(ExColsCent::iterator const& collision,
aod::MFTTracks const& tracks)
aod::MFTTracks const& tracks)
{
auto c = collision.centFT0C();
registry.fill(HIST("Events/Centrality/Selection"), 1., c);
Expand All @@ -930,7 +928,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
((phi > o2::constants::math::PI - cfgPhiCut) && (phi < o2::constants::math::PI + cfgPhiCut)) ||
(phi > o2::constants::math::TwoPI - cfgPhiCut) ||
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
continue;
}

Expand All @@ -945,12 +943,12 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processCountingCentrality,
"Count tracks in centrality bins", false);
"Count tracks in centrality bins", false);

using Particles = soa::Filtered<aod::McParticles>;
expressions::Filter primaries =
(aod::mcparticle::flags &
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) ==
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) ==
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary;
Partition<Particles> mcSample = nabs(aod::mcparticle::eta) < 1.1f;
Partition<Particles> mcSampleCentral =
Expand All @@ -959,7 +957,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
void processGen(
aod::McCollisions::iterator const& mcCollision,
o2::soa::SmallGroups<soa::Join<aod::Collisions, aod::EvSels,
aod::McCollisionLabels>> const& collisions,
aod::McCollisionLabels>> const& collisions,
Particles const& particles, aod::MFTTracks const& /*tracks*/,
FiCentralTracks const& midtracks)
{
Expand Down Expand Up @@ -1009,7 +1007,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
int moreThanOne = 0;

LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(),
collisions.size());
collisions.size());
for (const auto& collision : collisions) {
registry.fill(HIST("EventEfficiency"), 3.);
if (!disableITSROFCut && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) {
Expand Down Expand Up @@ -1103,11 +1101,11 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processGen,
"Process generator-level info", false);
"Process generator-level info", false);

using ExColsGenCent =
soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions,
aod::CentFT0Cs, aod::EvSels>>;
aod::CentFT0Cs, aod::EvSels>>;

void processGenCent(aod::McCollisions::iterator const& mcCollision,
ExColsGenCent const& collisions,
Expand All @@ -1116,7 +1114,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
{

LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(),
collisions.size());
collisions.size());

float c_gen = -1;
bool atLeastOne = false;
Expand Down Expand Up @@ -1195,7 +1193,7 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processGenCent,
"Process generator-level info in centrality bins", false);
"Process generator-level info in centrality bins", false);

void processGenPt(
soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision,
Expand All @@ -1216,10 +1214,10 @@ AxisSpec PtAxis = {1001, -0.005, 10.005};
}

PROCESS_SWITCH(PseudorapidityDensityMFT, processGenPt,
"Process particle-level info of pt", false);
};
"Process particle-level info of pt", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{adaptAnalysisTask<PseudorapidityDensityMFT>(cfgc)};
}
}