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
188 changes: 83 additions & 105 deletions PWGLF/Tasks/Nuspex/nucleitpcpbpb.cxx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.

Check failure on line 1 in PWGLF/Tasks/Nuspex/nucleitpcpbpb.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/workflow-file]

Name of a workflow file must match the name of the main struct in it (without the PWG prefix). (Class implementation files should be in "Core" directories.)
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand Down Expand Up @@ -76,6 +76,17 @@
{1, 0, 4, 70, 4.0, 0.5, 100, 0.50, 5.0, 3.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1},
{1, 0, 4, 75, 4.0, 0.5, 100, 0.50, 5.0, 5.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1},
{1, 0, 4, 70, 4.0, 0.5, 100, 0.50, 5.0, 5.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1}};

const int nTrkSettings2 = 3;
static const std::vector<std::string> trackPIDsettingsNames2{"useITSnsigma", "minITSnsigma", "maxITSnsigma"};
constexpr double kTrackPIDSettings2[nParticles][nTrkSettings2]{
{1, -5, 4},
{1, -5, 4},
{1, -5, 4},
{1, -5, 4},
{1, -5, 4},
{1, -5, 4}};

struct PrimParticles {
TString name;
int pdgCode, charge;
Expand All @@ -92,8 +103,6 @@
}
}; // struct PrimParticles
//----------------------------------------------------------------------------------------------------------------
std::vector<std::shared_ptr<TH2>> hDeDx;
std::vector<std::shared_ptr<TH2>> hNsigmaPt;
std::vector<std::shared_ptr<TH2>> hmass;
} // namespace
//----------------------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -143,8 +152,9 @@

Configurable<LabeledArray<double>> cfgBetheBlochParams{"cfgBetheBlochParams", {kBetheBlochDefault[0], nParticles, nBetheParams, particleNames, betheBlochParNames}, "TPC Bethe-Bloch parameterisation for light nuclei"};
Configurable<LabeledArray<double>> cfgTrackPIDsettings{"cfgTrackPIDsettings", {kTrackPIDSettings[0], nParticles, nTrkSettings, particleNames, trackPIDsettingsNames}, "track selection and PID criteria"};
Configurable<bool> cfgFillDeDxWithCut{"cfgFillDeDxWithCut", true, "Fill with cut beth bloch"};
Configurable<bool> cfgFillnsigma{"cfgFillnsigma", false, "Fill n-sigma histograms"};
Configurable<LabeledArray<double>> cfgTrackPIDsettings2{"cfgTrackPIDsettings2", {kTrackPIDSettings2[0], nParticles, nTrkSettings2, particleNames, trackPIDsettingsNames2}, "track selection and PID criteria"};
Configurable<bool> cfgFillhspectra{"cfgFillhspectra", true, "fill data sparsh"};
Configurable<bool> cfgFillQAplots{"cfgFillQAplots", false, "Fill QA sparsh"};
Configurable<bool> cfgFillmass{"cfgFillmass", false, "Fill mass histograms"};
Configurable<float> centcut{"centcut", 80.0f, "centrality cut"};
Configurable<float> cfgCutRapidity{"cfgCutRapidity", 0.5f, "Rapidity range"};
Expand All @@ -169,6 +179,13 @@
ConfigurableAxis axisrapidity{"axisrapidity", {100, -2, 2}, "rapidity"};
ConfigurableAxis axismass{"axismass", {100, -10, 10}, "mass^{2}"};
ConfigurableAxis nsigmaAxis{"nsigmaAxis", {160, -20, 20}, "n#sigma_{#pi^{+}}"};
ConfigurableAxis speciesBitAxis{"speciesBitAxis", {8, -0.5, 7.5}, "particle type 0: pion, 1: proton, 2: deuteron, 3: triton, 4:He3, 5:He4"};
ConfigurableAxis axisDCA{"axisDCA", {400, -10., 10.}, "DCA axis"};
ConfigurableAxis axisTPCcls{"axisTPCcls", {400, 0., 200.}, "TPCcls axis"};
ConfigurableAxis axisITScls{"axisITScls", {400, 0., 200.}, "ITScls axis"};
ConfigurableAxis axisITSchi2{"axisITSchi2", {400, 0., 100.}, "ITSchi2 axis"};
ConfigurableAxis axisTPCchi2{"axisTPCchi2", {400, 0., 100.}, "TPCchi2 axis"};

// CCDB
Service<o2::ccdb::BasicCCDBManager> ccdb;
Configurable<double> bField{"bField", -999, "bz field, -999 is automatic"};
Expand Down Expand Up @@ -211,31 +228,22 @@
}
histos.add("histeta", "histeta", kTH1F, {axiseta});
histos.add("Tofsignal", "Tofsignal", kTH2F, {axisRigidity, {4000, 0.2, 1.2, "#beta"}});
histos.add("histDcaZVsPtData_particle", "dcaZ vs Pt (particle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.5, 2.5, "dca"}});
histos.add("histDcaXYVsPtData_particle", "dcaXY vs Pt (particle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.0, 2.0, "dca"}});
histos.add("histDcaZVsPtData_antiparticle", "dcaZ vs Pt (antiparticle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.5, 2.5, "dca"}});
histos.add("histDcaXYVsPtData_antiparticle", "dcaXY vs Pt (antiparticle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.0, 2.0, "dca"}});
hDeDx.resize(2 * nParticles + 2);
hNsigmaPt.resize(2 * nParticles + 2);
histos.add("Tpcsignal", "Tpcsignal", kTH2F, {axisRigidity, axisdEdx});

hmass.resize(2 * nParticles + 2);
for (int i = 0; i < nParticles + 1; i++) {
TString histName = i < nParticles ? primaryParticles[i].name : "all";
if (cfgFillDeDxWithCut) {
hDeDx[2 * i] = histos.add<TH2>(Form("dedx/histdEdx_%s_Cuts", histName.Data()), ";p_{TPC}/z (GeV/#it{c}); d#it{E}/d#it{x}", HistType::kTH2F, {axisRigidity, axisdEdx});
}
}

for (int i = 0; i < nParticles; i++) {
TString histName = primaryParticles[i].name;
if (cfgFillnsigma) {
hNsigmaPt[2 * i] = histos.add<TH2>(Form("histnsigmaTPC_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); TPCnsigma", HistType::kTH2F, {ptAxis, nsigmaAxis});
hNsigmaPt[2 * i + 1] = histos.add<TH2>(Form("histnsigmaTPC_anti_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); TPCnsigma", HistType::kTH2F, {ptAxis, nsigmaAxis});
}
if (cfgFillmass) {
hmass[2 * i] = histos.add<TH2>(Form("histmass_pt/histmass_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); mass^{2}", HistType::kTH2F, {ptAxis, axismass});
hmass[2 * i + 1] = histos.add<TH2>(Form("histmass_ptanti/histmass_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); mass^{2}", HistType::kTH2F, {ptAxis, axismass});
}
}

histos.add<THnSparse>("hSpectra", " ", HistType::kTHnSparseF, {speciesBitAxis, ptAxis, nsigmaAxis, {5, -2.5, 2.5}, axisCent, axisRigidity, axisdEdx, axisDCA, axisDCA, nsigmaAxis});

histos.add<THnSparse>("hQAtest", "", HistType::kTHnSparseF, {speciesBitAxis, ptAxis, {5, -2.5, 2.5}, axisTPCcls, axisITScls, axisITSchi2, axisTPCchi2});

if (doprocessMC) {
histomc.add("histVtxZgen", "histVtxZgen", kTH1F, {axisVtxZ});
histomc.add("ImptParameter", "ImptParameter", kTH1F, {axisImpt});
Expand All @@ -259,7 +267,7 @@
}
}
//----------------------------------------------------------------------------------------------------------------
void findprimaryParticles(aod::TrackAssoc const& tracksByColl, TracksFull const& tracks)
void findprimaryParticles(aod::TrackAssoc const& tracksByColl, TracksFull const& tracks, float cent)
{
for (const auto& trackId : tracksByColl) {
const auto& track = tracks.rawIteratorAt(trackId.trackId());
Expand All @@ -276,6 +284,21 @@
if (std::abs(track.eta()) > cfgCutEta && cfgetaRequire)
continue;
for (size_t i = 0; i < primaryParticles.size(); i++) {

float ptMomn;
setTrackParCov(track, mTrackParCov);
mTrackParCov.setPID(track.pidForTracking());
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
int sign = 0;
if (track.sign() > 0) {
sign = 1;
}
if (track.sign() < 0) {
sign = -1;
} // <- This redeclares a new local variable!
if (cfgFillQAplots) {
histos.fill(HIST("hQAtest"), i, ptMomn, sign, track.tpcNClsFound(), track.itsNCls(), track.itsChi2NCl(), track.tpcChi2NCl());
}
if (std::abs(getRapidity(track, i)) > cfgCutRapidity && cfgRapidityRequire)
continue;
if (track.tpcNClsFound() < cfgTrackPIDsettings->get(i, "minTPCnCls") && cfgTPCNClsfoundRequire)
Expand All @@ -299,44 +322,31 @@
continue;
if (getMeanItsClsSize(track) > cfgTrackPIDsettings->get(i, "maxITSclsSize") && cfgmaxGetMeanItsClsSizeRequire)
continue;
if ((getRigidity(track) < cfgTrackPIDsettings->get(i, "minRigidity") || getRigidity(track) > cfgTrackPIDsettings->get(i, "maxRigidity")) && cfgRigidityCutRequire)
continue;
float ptMomn;
setTrackParCov(track, mTrackParCov);
mTrackParCov.setPID(track.pidForTracking());
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();

bool insideDCAxy = (std::abs(track.dcaXY()) <= (cfgTrackPIDsettings->get(i, "maxDcaXY") * (0.0105f + 0.0350f / std::pow(ptMomn, 1.1f)))); // o2-linter: disable=magic-number (To be checked)
if ((!(insideDCAxy) || std::abs(track.dcaZ()) > dcazSigma(ptMomn, cfgTrackPIDsettings->get(i, "maxDcaZ"))) && cfgDCAwithptRequire)
continue;
if (track.sign() > 0) {
histos.fill(HIST("histDcaZVsPtData_particle"), ptMomn, track.dcaZ());
histos.fill(HIST("histDcaXYVsPtData_particle"), ptMomn, track.dcaXY());
}
if (track.sign() < 0) {
histos.fill(HIST("histDcaZVsPtData_antiparticle"), ptMomn, track.dcaZ());
histos.fill(HIST("histDcaXYVsPtData_antiparticle"), ptMomn, track.dcaXY());
}

float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
if ((std::abs(tpcNsigma) > cfgTrackPIDsettings->get(i, "maxTPCnSigma")) && cfgmaxTPCnSigmaRequire)
continue;
float itsSigma = getITSnSigma(track, primaryParticles.at(i));
if ((std::abs(itsSigma) > cfgITSnsigma) && cfgmaxITSnSigmaRequire)
continue;
fillnsigma(track, i);
filldedx(track, i);
// TOF selection
if (!track.hasTOF() && cfgTrackPIDsettings->get(i, "TOFrequiredabove") < 1)

if (itsSigma < cfgTrackPIDsettings2->get(i, "minITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
continue;
float beta{o2::pid::tof::Beta::GetBeta(track)};
float charge{1.f + static_cast<float>(i == he3 || i == he4)};
float tofMasses = getRigidity(track) * charge * std::sqrt(1.f / (beta * beta) - 1.f);
if ((getRigidity(track) > cfgTrackPIDsettings->get(i, "TOFrequiredabove") && (tofMasses < cfgTrackPIDsettings->get(i, "minTOFmass") || tofMasses > cfgTrackPIDsettings->get(i, "maxTOFmass"))) && cfgmassRequire)
if (itsSigma > cfgTrackPIDsettings2->get(i, "maxITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
continue;

fillhmass(track, i);
if (cfgFillhspectra) {
histos.fill(HIST("hSpectra"), i, ptMomn, tpcNsigma, sign, cent, getRigidity(track) * track.sign(), track.tpcSignal(), track.dcaZ(), track.dcaXY(), itsSigma);
}
if (cfgRequirebetaplot) {
histos.fill(HIST("Tofsignal"), getRigidity(track) * track.sign(), o2::pid::tof::Beta::GetBeta(track));
}
filldedx(track, nParticles);
}
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls) {
histos.fill(HIST("Tpcsignal"), getRigidity(track) * track.sign(), track.tpcSignal());
}
histos.fill(HIST("histeta"), track.eta());
} // track loop
Expand Down Expand Up @@ -365,7 +375,8 @@
histos.fill(HIST("histCentFTOC_cut"), collision.centFT0C());
const uint64_t collIdx = collision.globalIndex();
auto tracksByColl = tracksColl.sliceBy(perCollision, collIdx);
findprimaryParticles(tracksByColl, tracks);

findprimaryParticles(tracksByColl, tracks, collision.centFT0C());
if (!collHasCandidate)
continue;
}
Expand Down Expand Up @@ -473,6 +484,21 @@
for (size_t i = 0; i < primaryParticles.size(); i++) {
if (std::abs(pdg) != std::abs(particlePdgCodes.at(i)))
continue;

float ptMomn;
setTrackParCov(track, mTrackParCov);
mTrackParCov.setPID(track.pidForTracking());
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
int sign = 0;
if (track.sign() > 0) {
sign = 1;
}
if (track.sign() < 0) {
sign = -1;
} // <- This redeclares a new local variable!
if (cfgFillQAplots) {
histos.fill(HIST("hQAtest"), i, ptMomn, sign, track.tpcNClsFound(), track.itsNCls(), track.itsChi2NCl(), track.tpcChi2NCl());
}
if (std::abs(getRapidity(track, i)) > cfgCutRapidity && cfgRapidityRequire)
continue;
if (track.tpcNClsFound() < cfgTrackPIDsettings->get(i, "minTPCnCls") && cfgTPCNClsfoundRequire)
Expand All @@ -496,43 +522,29 @@
continue;
if (getMeanItsClsSize(track) > cfgTrackPIDsettings->get(i, "maxITSclsSize") && cfgmaxGetMeanItsClsSizeRequire)
continue;
if ((getRigidity(track) < cfgTrackPIDsettings->get(i, "minRigidity") || getRigidity(track) > cfgTrackPIDsettings->get(i, "maxRigidity")) && cfgRigidityCutRequire)
continue;
float ptMomn;
setTrackParCov(track, mTrackParCov);
mTrackParCov.setPID(track.pidForTracking());
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();

bool insideDCAxy = (std::abs(track.dcaXY()) <= (cfgTrackPIDsettings->get(i, "maxDcaXY") * (0.0105f + 0.0350f / std::pow(ptMomn, 1.1f)))); // o2-linter: disable=magic-number (To be checked)
if ((!(insideDCAxy) || std::abs(track.dcaZ()) > dcazSigma(ptMomn, cfgTrackPIDsettings->get(i, "maxDcaZ"))) && cfgDCAwithptRequire)
continue;
if (track.sign() > 0) {
histos.fill(HIST("histDcaZVsPtData_particle"), ptMomn, track.dcaZ());
histos.fill(HIST("histDcaXYVsPtData_particle"), ptMomn, track.dcaXY());
}
if (track.sign() < 0) {
histos.fill(HIST("histDcaZVsPtData_antiparticle"), ptMomn, track.dcaZ());
histos.fill(HIST("histDcaXYVsPtData_antiparticle"), ptMomn, track.dcaXY());
}

float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
if ((std::abs(tpcNsigma) > cfgTrackPIDsettings->get(i, "maxTPCnSigma")) && cfgmaxTPCnSigmaRequire)
continue;
float itsSigma = getITSnSigma(track, primaryParticles.at(i));
if ((std::abs(itsSigma) > cfgITSnsigma) && cfgmaxITSnSigmaRequire)
continue;
fillnsigma(track, i);
filldedx(track, i);
if (!track.hasTOF() && cfgTrackPIDsettings->get(i, "TOFrequiredabove") < 1)

if (itsSigma < cfgTrackPIDsettings2->get(i, "minITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
continue;
float beta{o2::pid::tof::Beta::GetBeta(track)};
float charge{1.f + static_cast<float>(i == he3 || i == he4)};
float tofMasses = getRigidity(track) * charge * std::sqrt(1.f / (beta * beta) - 1.f);
if ((getRigidity(track) > cfgTrackPIDsettings->get(i, "TOFrequiredabove") && (tofMasses < cfgTrackPIDsettings->get(i, "minTOFmass") || tofMasses > cfgTrackPIDsettings->get(i, "maxTOFmass"))) && cfgmassRequire)
if (itsSigma > cfgTrackPIDsettings2->get(i, "maxITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
continue;

fillhmass(track, i);
if (cfgFillhspectra) {
histos.fill(HIST("hSpectra"), i, ptMomn, tpcNsigma, sign, collision.centFT0C(), getRigidity(track) * track.sign(), track.tpcSignal(), track.dcaZ(), track.dcaXY(), itsSigma);
}
if (cfgRequirebetaplot) {
histos.fill(HIST("Tofsignal"), getRigidity(track) * track.sign(), o2::pid::tof::Beta::GetBeta(track));
}
filldedx(track, nParticles);

/*----------------------------------------------------------------------------------------------------------------*/
float ptReco;
mTrackParCov.setPID(track.pidForTracking());
Expand Down Expand Up @@ -631,42 +643,8 @@
}
//----------------------------------------------------------------------------------------------------------------
template <class T>
void filldedx(T const& track, int species)
{
const float rigidity = getRigidity(track);
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
return;
if (cfgFillDeDxWithCut) {
hDeDx[2 * species]->Fill(track.sign() * rigidity, track.tpcSignal());
}
}
//----------------------------------------------------------------------------------------------------------------
template <class T>
void fillnsigma(T const& track, int species)
{
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
return;
if (cfgFillnsigma) {
int i = species;
const float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
float ptMomn;
setTrackParCov(track, mTrackParCov);
mTrackParCov.setPID(track.pidForTracking());
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
if (track.sign() > 0) {
hNsigmaPt[2 * species]->Fill(ptMomn, tpcNsigma);
}
if (track.sign() < 0) {
hNsigmaPt[2 * species + 1]->Fill(ptMomn, tpcNsigma);
}
}
}
//----------------------------------------------------------------------------------------------------------------
template <class T>
void fillhmass(T const& track, int species)
{
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
return;
if (!track.hasTOF() || !cfgFillmass)
return;
float beta{o2::pid::tof::Beta::GetBeta(track)};
Expand Down
Loading