Skip to content

Commit af49432

Browse files
[PWGLF] Update nucleitpcpbpb.cxx for memory consuption (#12547)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 9aa3d15 commit af49432

File tree

1 file changed

+83
-105
lines changed

1 file changed

+83
-105
lines changed

PWGLF/Tasks/Nuspex/nucleitpcpbpb.cxx

Lines changed: 83 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ constexpr double kTrackPIDSettings[nParticles][nTrkSettings]{
7676
{1, 0, 4, 70, 4.0, 0.5, 100, 0.50, 5.0, 3.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1},
7777
{1, 0, 4, 75, 4.0, 0.5, 100, 0.50, 5.0, 5.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1},
7878
{1, 0, 4, 70, 4.0, 0.5, 100, 0.50, 5.0, 5.0, -1, 0, 100, 2., 2., 0., 1000, 70, 1}};
79+
80+
const int nTrkSettings2 = 3;
81+
static const std::vector<std::string> trackPIDsettingsNames2{"useITSnsigma", "minITSnsigma", "maxITSnsigma"};
82+
constexpr double kTrackPIDSettings2[nParticles][nTrkSettings2]{
83+
{1, -5, 4},
84+
{1, -5, 4},
85+
{1, -5, 4},
86+
{1, -5, 4},
87+
{1, -5, 4},
88+
{1, -5, 4}};
89+
7990
struct PrimParticles {
8091
TString name;
8192
int pdgCode, charge;
@@ -92,8 +103,6 @@ struct PrimParticles {
92103
}
93104
}; // struct PrimParticles
94105
//----------------------------------------------------------------------------------------------------------------
95-
std::vector<std::shared_ptr<TH2>> hDeDx;
96-
std::vector<std::shared_ptr<TH2>> hNsigmaPt;
97106
std::vector<std::shared_ptr<TH2>> hmass;
98107
} // namespace
99108
//----------------------------------------------------------------------------------------------------------------
@@ -143,8 +152,9 @@ struct NucleitpcPbPb {
143152

144153
Configurable<LabeledArray<double>> cfgBetheBlochParams{"cfgBetheBlochParams", {kBetheBlochDefault[0], nParticles, nBetheParams, particleNames, betheBlochParNames}, "TPC Bethe-Bloch parameterisation for light nuclei"};
145154
Configurable<LabeledArray<double>> cfgTrackPIDsettings{"cfgTrackPIDsettings", {kTrackPIDSettings[0], nParticles, nTrkSettings, particleNames, trackPIDsettingsNames}, "track selection and PID criteria"};
146-
Configurable<bool> cfgFillDeDxWithCut{"cfgFillDeDxWithCut", true, "Fill with cut beth bloch"};
147-
Configurable<bool> cfgFillnsigma{"cfgFillnsigma", false, "Fill n-sigma histograms"};
155+
Configurable<LabeledArray<double>> cfgTrackPIDsettings2{"cfgTrackPIDsettings2", {kTrackPIDSettings2[0], nParticles, nTrkSettings2, particleNames, trackPIDsettingsNames2}, "track selection and PID criteria"};
156+
Configurable<bool> cfgFillhspectra{"cfgFillhspectra", true, "fill data sparsh"};
157+
Configurable<bool> cfgFillQAplots{"cfgFillQAplots", false, "Fill QA sparsh"};
148158
Configurable<bool> cfgFillmass{"cfgFillmass", false, "Fill mass histograms"};
149159
Configurable<float> centcut{"centcut", 80.0f, "centrality cut"};
150160
Configurable<float> cfgCutRapidity{"cfgCutRapidity", 0.5f, "Rapidity range"};
@@ -169,6 +179,13 @@ struct NucleitpcPbPb {
169179
ConfigurableAxis axisrapidity{"axisrapidity", {100, -2, 2}, "rapidity"};
170180
ConfigurableAxis axismass{"axismass", {100, -10, 10}, "mass^{2}"};
171181
ConfigurableAxis nsigmaAxis{"nsigmaAxis", {160, -20, 20}, "n#sigma_{#pi^{+}}"};
182+
ConfigurableAxis speciesBitAxis{"speciesBitAxis", {8, -0.5, 7.5}, "particle type 0: pion, 1: proton, 2: deuteron, 3: triton, 4:He3, 5:He4"};
183+
ConfigurableAxis axisDCA{"axisDCA", {400, -10., 10.}, "DCA axis"};
184+
ConfigurableAxis axisTPCcls{"axisTPCcls", {400, 0., 200.}, "TPCcls axis"};
185+
ConfigurableAxis axisITScls{"axisITScls", {400, 0., 200.}, "ITScls axis"};
186+
ConfigurableAxis axisITSchi2{"axisITSchi2", {400, 0., 100.}, "ITSchi2 axis"};
187+
ConfigurableAxis axisTPCchi2{"axisTPCchi2", {400, 0., 100.}, "TPCchi2 axis"};
188+
172189
// CCDB
173190
Service<o2::ccdb::BasicCCDBManager> ccdb;
174191
Configurable<double> bField{"bField", -999, "bz field, -999 is automatic"};
@@ -211,31 +228,22 @@ struct NucleitpcPbPb {
211228
}
212229
histos.add("histeta", "histeta", kTH1F, {axiseta});
213230
histos.add("Tofsignal", "Tofsignal", kTH2F, {axisRigidity, {4000, 0.2, 1.2, "#beta"}});
214-
histos.add("histDcaZVsPtData_particle", "dcaZ vs Pt (particle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.5, 2.5, "dca"}});
215-
histos.add("histDcaXYVsPtData_particle", "dcaXY vs Pt (particle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.0, 2.0, "dca"}});
216-
histos.add("histDcaZVsPtData_antiparticle", "dcaZ vs Pt (antiparticle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.5, 2.5, "dca"}});
217-
histos.add("histDcaXYVsPtData_antiparticle", "dcaXY vs Pt (antiparticle)", HistType::kTH2F, {{1000, 0, 20}, {1000, -2.0, 2.0, "dca"}});
218-
hDeDx.resize(2 * nParticles + 2);
219-
hNsigmaPt.resize(2 * nParticles + 2);
231+
histos.add("Tpcsignal", "Tpcsignal", kTH2F, {axisRigidity, axisdEdx});
232+
220233
hmass.resize(2 * nParticles + 2);
221-
for (int i = 0; i < nParticles + 1; i++) {
222-
TString histName = i < nParticles ? primaryParticles[i].name : "all";
223-
if (cfgFillDeDxWithCut) {
224-
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});
225-
}
226-
}
234+
227235
for (int i = 0; i < nParticles; i++) {
228236
TString histName = primaryParticles[i].name;
229-
if (cfgFillnsigma) {
230-
hNsigmaPt[2 * i] = histos.add<TH2>(Form("histnsigmaTPC_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); TPCnsigma", HistType::kTH2F, {ptAxis, nsigmaAxis});
231-
hNsigmaPt[2 * i + 1] = histos.add<TH2>(Form("histnsigmaTPC_anti_%s", histName.Data()), ";p_T{TPC} (GeV/#it{c}); TPCnsigma", HistType::kTH2F, {ptAxis, nsigmaAxis});
232-
}
233237
if (cfgFillmass) {
234238
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});
235239
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});
236240
}
237241
}
238242

243+
histos.add<THnSparse>("hSpectra", " ", HistType::kTHnSparseF, {speciesBitAxis, ptAxis, nsigmaAxis, {5, -2.5, 2.5}, axisCent, axisRigidity, axisdEdx, axisDCA, axisDCA, nsigmaAxis});
244+
245+
histos.add<THnSparse>("hQAtest", "", HistType::kTHnSparseF, {speciesBitAxis, ptAxis, {5, -2.5, 2.5}, axisTPCcls, axisITScls, axisITSchi2, axisTPCchi2});
246+
239247
if (doprocessMC) {
240248
histomc.add("histVtxZgen", "histVtxZgen", kTH1F, {axisVtxZ});
241249
histomc.add("ImptParameter", "ImptParameter", kTH1F, {axisImpt});
@@ -259,7 +267,7 @@ struct NucleitpcPbPb {
259267
}
260268
}
261269
//----------------------------------------------------------------------------------------------------------------
262-
void findprimaryParticles(aod::TrackAssoc const& tracksByColl, TracksFull const& tracks)
270+
void findprimaryParticles(aod::TrackAssoc const& tracksByColl, TracksFull const& tracks, float cent)
263271
{
264272
for (const auto& trackId : tracksByColl) {
265273
const auto& track = tracks.rawIteratorAt(trackId.trackId());
@@ -276,6 +284,21 @@ struct NucleitpcPbPb {
276284
if (std::abs(track.eta()) > cfgCutEta && cfgetaRequire)
277285
continue;
278286
for (size_t i = 0; i < primaryParticles.size(); i++) {
287+
288+
float ptMomn;
289+
setTrackParCov(track, mTrackParCov);
290+
mTrackParCov.setPID(track.pidForTracking());
291+
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
292+
int sign = 0;
293+
if (track.sign() > 0) {
294+
sign = 1;
295+
}
296+
if (track.sign() < 0) {
297+
sign = -1;
298+
} // <- This redeclares a new local variable!
299+
if (cfgFillQAplots) {
300+
histos.fill(HIST("hQAtest"), i, ptMomn, sign, track.tpcNClsFound(), track.itsNCls(), track.itsChi2NCl(), track.tpcChi2NCl());
301+
}
279302
if (std::abs(getRapidity(track, i)) > cfgCutRapidity && cfgRapidityRequire)
280303
continue;
281304
if (track.tpcNClsFound() < cfgTrackPIDsettings->get(i, "minTPCnCls") && cfgTPCNClsfoundRequire)
@@ -299,44 +322,31 @@ struct NucleitpcPbPb {
299322
continue;
300323
if (getMeanItsClsSize(track) > cfgTrackPIDsettings->get(i, "maxITSclsSize") && cfgmaxGetMeanItsClsSizeRequire)
301324
continue;
302-
if ((getRigidity(track) < cfgTrackPIDsettings->get(i, "minRigidity") || getRigidity(track) > cfgTrackPIDsettings->get(i, "maxRigidity")) && cfgRigidityCutRequire)
303-
continue;
304-
float ptMomn;
305-
setTrackParCov(track, mTrackParCov);
306-
mTrackParCov.setPID(track.pidForTracking());
307-
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
325+
308326
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)
309327
if ((!(insideDCAxy) || std::abs(track.dcaZ()) > dcazSigma(ptMomn, cfgTrackPIDsettings->get(i, "maxDcaZ"))) && cfgDCAwithptRequire)
310328
continue;
311-
if (track.sign() > 0) {
312-
histos.fill(HIST("histDcaZVsPtData_particle"), ptMomn, track.dcaZ());
313-
histos.fill(HIST("histDcaXYVsPtData_particle"), ptMomn, track.dcaXY());
314-
}
315-
if (track.sign() < 0) {
316-
histos.fill(HIST("histDcaZVsPtData_antiparticle"), ptMomn, track.dcaZ());
317-
histos.fill(HIST("histDcaXYVsPtData_antiparticle"), ptMomn, track.dcaXY());
318-
}
329+
319330
float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
320331
if ((std::abs(tpcNsigma) > cfgTrackPIDsettings->get(i, "maxTPCnSigma")) && cfgmaxTPCnSigmaRequire)
321332
continue;
322333
float itsSigma = getITSnSigma(track, primaryParticles.at(i));
323-
if ((std::abs(itsSigma) > cfgITSnsigma) && cfgmaxITSnSigmaRequire)
324-
continue;
325-
fillnsigma(track, i);
326-
filldedx(track, i);
327-
// TOF selection
328-
if (!track.hasTOF() && cfgTrackPIDsettings->get(i, "TOFrequiredabove") < 1)
334+
335+
if (itsSigma < cfgTrackPIDsettings2->get(i, "minITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
329336
continue;
330-
float beta{o2::pid::tof::Beta::GetBeta(track)};
331-
float charge{1.f + static_cast<float>(i == he3 || i == he4)};
332-
float tofMasses = getRigidity(track) * charge * std::sqrt(1.f / (beta * beta) - 1.f);
333-
if ((getRigidity(track) > cfgTrackPIDsettings->get(i, "TOFrequiredabove") && (tofMasses < cfgTrackPIDsettings->get(i, "minTOFmass") || tofMasses > cfgTrackPIDsettings->get(i, "maxTOFmass"))) && cfgmassRequire)
337+
if (itsSigma > cfgTrackPIDsettings2->get(i, "maxITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
334338
continue;
339+
335340
fillhmass(track, i);
341+
if (cfgFillhspectra) {
342+
histos.fill(HIST("hSpectra"), i, ptMomn, tpcNsigma, sign, cent, getRigidity(track) * track.sign(), track.tpcSignal(), track.dcaZ(), track.dcaXY(), itsSigma);
343+
}
336344
if (cfgRequirebetaplot) {
337345
histos.fill(HIST("Tofsignal"), getRigidity(track) * track.sign(), o2::pid::tof::Beta::GetBeta(track));
338346
}
339-
filldedx(track, nParticles);
347+
}
348+
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls) {
349+
histos.fill(HIST("Tpcsignal"), getRigidity(track) * track.sign(), track.tpcSignal());
340350
}
341351
histos.fill(HIST("histeta"), track.eta());
342352
} // track loop
@@ -365,7 +375,8 @@ struct NucleitpcPbPb {
365375
histos.fill(HIST("histCentFTOC_cut"), collision.centFT0C());
366376
const uint64_t collIdx = collision.globalIndex();
367377
auto tracksByColl = tracksColl.sliceBy(perCollision, collIdx);
368-
findprimaryParticles(tracksByColl, tracks);
378+
379+
findprimaryParticles(tracksByColl, tracks, collision.centFT0C());
369380
if (!collHasCandidate)
370381
continue;
371382
}
@@ -473,6 +484,21 @@ struct NucleitpcPbPb {
473484
for (size_t i = 0; i < primaryParticles.size(); i++) {
474485
if (std::abs(pdg) != std::abs(particlePdgCodes.at(i)))
475486
continue;
487+
488+
float ptMomn;
489+
setTrackParCov(track, mTrackParCov);
490+
mTrackParCov.setPID(track.pidForTracking());
491+
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
492+
int sign = 0;
493+
if (track.sign() > 0) {
494+
sign = 1;
495+
}
496+
if (track.sign() < 0) {
497+
sign = -1;
498+
} // <- This redeclares a new local variable!
499+
if (cfgFillQAplots) {
500+
histos.fill(HIST("hQAtest"), i, ptMomn, sign, track.tpcNClsFound(), track.itsNCls(), track.itsChi2NCl(), track.tpcChi2NCl());
501+
}
476502
if (std::abs(getRapidity(track, i)) > cfgCutRapidity && cfgRapidityRequire)
477503
continue;
478504
if (track.tpcNClsFound() < cfgTrackPIDsettings->get(i, "minTPCnCls") && cfgTPCNClsfoundRequire)
@@ -496,43 +522,29 @@ struct NucleitpcPbPb {
496522
continue;
497523
if (getMeanItsClsSize(track) > cfgTrackPIDsettings->get(i, "maxITSclsSize") && cfgmaxGetMeanItsClsSizeRequire)
498524
continue;
499-
if ((getRigidity(track) < cfgTrackPIDsettings->get(i, "minRigidity") || getRigidity(track) > cfgTrackPIDsettings->get(i, "maxRigidity")) && cfgRigidityCutRequire)
500-
continue;
501-
float ptMomn;
502-
setTrackParCov(track, mTrackParCov);
503-
mTrackParCov.setPID(track.pidForTracking());
504-
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
525+
505526
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)
506527
if ((!(insideDCAxy) || std::abs(track.dcaZ()) > dcazSigma(ptMomn, cfgTrackPIDsettings->get(i, "maxDcaZ"))) && cfgDCAwithptRequire)
507528
continue;
508-
if (track.sign() > 0) {
509-
histos.fill(HIST("histDcaZVsPtData_particle"), ptMomn, track.dcaZ());
510-
histos.fill(HIST("histDcaXYVsPtData_particle"), ptMomn, track.dcaXY());
511-
}
512-
if (track.sign() < 0) {
513-
histos.fill(HIST("histDcaZVsPtData_antiparticle"), ptMomn, track.dcaZ());
514-
histos.fill(HIST("histDcaXYVsPtData_antiparticle"), ptMomn, track.dcaXY());
515-
}
529+
516530
float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
517531
if ((std::abs(tpcNsigma) > cfgTrackPIDsettings->get(i, "maxTPCnSigma")) && cfgmaxTPCnSigmaRequire)
518532
continue;
519533
float itsSigma = getITSnSigma(track, primaryParticles.at(i));
520-
if ((std::abs(itsSigma) > cfgITSnsigma) && cfgmaxITSnSigmaRequire)
521-
continue;
522-
fillnsigma(track, i);
523-
filldedx(track, i);
524-
if (!track.hasTOF() && cfgTrackPIDsettings->get(i, "TOFrequiredabove") < 1)
534+
535+
if (itsSigma < cfgTrackPIDsettings2->get(i, "minITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
525536
continue;
526-
float beta{o2::pid::tof::Beta::GetBeta(track)};
527-
float charge{1.f + static_cast<float>(i == he3 || i == he4)};
528-
float tofMasses = getRigidity(track) * charge * std::sqrt(1.f / (beta * beta) - 1.f);
529-
if ((getRigidity(track) > cfgTrackPIDsettings->get(i, "TOFrequiredabove") && (tofMasses < cfgTrackPIDsettings->get(i, "minTOFmass") || tofMasses > cfgTrackPIDsettings->get(i, "maxTOFmass"))) && cfgmassRequire)
537+
if (itsSigma > cfgTrackPIDsettings2->get(i, "maxITSnsigma") && cfgTrackPIDsettings2->get(i, "useITSnsigma") < 1)
530538
continue;
539+
531540
fillhmass(track, i);
541+
if (cfgFillhspectra) {
542+
histos.fill(HIST("hSpectra"), i, ptMomn, tpcNsigma, sign, collision.centFT0C(), getRigidity(track) * track.sign(), track.tpcSignal(), track.dcaZ(), track.dcaXY(), itsSigma);
543+
}
532544
if (cfgRequirebetaplot) {
533545
histos.fill(HIST("Tofsignal"), getRigidity(track) * track.sign(), o2::pid::tof::Beta::GetBeta(track));
534546
}
535-
filldedx(track, nParticles);
547+
536548
/*----------------------------------------------------------------------------------------------------------------*/
537549
float ptReco;
538550
mTrackParCov.setPID(track.pidForTracking());
@@ -631,42 +643,8 @@ struct NucleitpcPbPb {
631643
}
632644
//----------------------------------------------------------------------------------------------------------------
633645
template <class T>
634-
void filldedx(T const& track, int species)
635-
{
636-
const float rigidity = getRigidity(track);
637-
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
638-
return;
639-
if (cfgFillDeDxWithCut) {
640-
hDeDx[2 * species]->Fill(track.sign() * rigidity, track.tpcSignal());
641-
}
642-
}
643-
//----------------------------------------------------------------------------------------------------------------
644-
template <class T>
645-
void fillnsigma(T const& track, int species)
646-
{
647-
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
648-
return;
649-
if (cfgFillnsigma) {
650-
int i = species;
651-
const float tpcNsigma = getTPCnSigma(track, primaryParticles.at(i));
652-
float ptMomn;
653-
setTrackParCov(track, mTrackParCov);
654-
mTrackParCov.setPID(track.pidForTracking());
655-
ptMomn = (i == he3 || i == he4) ? 2 * mTrackParCov.getPt() : mTrackParCov.getPt();
656-
if (track.sign() > 0) {
657-
hNsigmaPt[2 * species]->Fill(ptMomn, tpcNsigma);
658-
}
659-
if (track.sign() < 0) {
660-
hNsigmaPt[2 * species + 1]->Fill(ptMomn, tpcNsigma);
661-
}
662-
}
663-
}
664-
//----------------------------------------------------------------------------------------------------------------
665-
template <class T>
666646
void fillhmass(T const& track, int species)
667647
{
668-
if (track.tpcNClsFound() < cfgtpcNClsFound || track.itsNCls() < cfgitsNCls)
669-
return;
670648
if (!track.hasTOF() || !cfgFillmass)
671649
return;
672650
float beta{o2::pid::tof::Beta::GetBeta(track)};

0 commit comments

Comments
 (0)