Skip to content

Commit 32f204f

Browse files
[PWGLF] added configurable to select physical primaries, tracks are now required to have an associated mc particle (#13465)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 188fee8 commit 32f204f

File tree

1 file changed

+45
-43
lines changed

1 file changed

+45
-43
lines changed

PWGLF/TableProducer/QC/nucleiQC.cxx

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ struct nucleiQC {
7676

7777
Configurable<bool> cfgFillTable{"cfgFillTable", true, "Fill output tree"};
7878
Configurable<bool> cfgDoCheckPdgCode{"cfgDoCheckPdgCode", true, "Should you only select tracks associated to a mc particle with the correct PDG code?"};
79+
Configurable<bool> cfgFillOnlyPhysicalPrimaries{"cfgFillOnlyPhysicalPrimaries", true, "Should you only select physical primary particles?"};
7980
Configurable<LabeledArray<int>> cfgSpeciesToProcess{"cfgSpeciesToProcess", {nuclei::speciesToProcessDefault[0], nuclei::Species::kNspecies, 1, nuclei::names, {"processNucleus"}}, "Nuclei to process"};
8081
Configurable<LabeledArray<int>> cfgEventSelections{"cfgEventSelections", {nuclei::EvSelDefault[0], 8, 1, nuclei::eventSelectionLabels, nuclei::eventSelectionTitle}, "Event selections"};
8182
Configurable<int> cfgCentralityEstimator{"cfgCentralityEstimator", 0, "Centrality estimator (FV0A: 0, FT0M: 1, FT0A: 2, FT0C: 3)"};
@@ -136,18 +137,16 @@ struct nucleiQC {
136137
}
137138

138139
for (int iSpecies = 0; iSpecies < static_cast<int>(nuclei::Species::kNspecies); iSpecies++) {
139-
if (cfgSpeciesToProcess->get(iSpecies) == 1) {
140+
if (cfgSpeciesToProcess->get(iSpecies) == 1)
140141
mSpeciesToProcess.emplace_back(iSpecies);
141-
}
142142
}
143143

144144
static_for<0, nuclei::kNspecies - 1>([&](auto iSpecies) {
145145
constexpr int kSpeciesCt = decltype(iSpecies)::value;
146146
const int kSpeciesRt = kSpeciesCt;
147147

148-
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesCt) == mSpeciesToProcess.end()) {
148+
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesCt) == mSpeciesToProcess.end())
149149
return;
150-
}
151150

152151
float tpcBetheBlochParams[6];
153152
for (int iParam = 0; iParam < 6; iParam++) {
@@ -166,9 +165,9 @@ struct nucleiQC {
166165

167166
void initCCDB(const aod::BCsWithTimestamps::iterator& bc)
168167
{
169-
if (mRunNumber == bc.runNumber()) {
168+
if (mRunNumber == bc.runNumber())
170169
return;
171-
}
170+
172171
auto timestamp = bc.timestamp();
173172
mRunNumber = bc.runNumber();
174173

@@ -199,9 +198,8 @@ struct nucleiQC {
199198
bool pidSelection(const Ttrack& track, const Tcollision& collision)
200199
{
201200
constexpr int kIndex = iSpecies;
202-
if (!nuclei::checkSpeciesValidity(kIndex)) {
201+
if (!nuclei::checkSpeciesValidity(kIndex))
203202
std::runtime_error("species contains invalid nucleus kIndex");
204-
}
205203

206204
float centrality = nuclei::getCentrality(collision, cfgCentralityEstimator);
207205
float nsigmaTPC = mPidManagers[kIndex].getNSigmaTPC(track);
@@ -266,15 +264,14 @@ struct nucleiQC {
266264
: iSpecies == nuclei::Species::kAl ? nuclei::Flags::kHe4
267265
: 0;
268266

269-
if (track.hasTOF()) {
267+
if (track.hasTOF())
270268
candidate.flags |= nuclei::Flags::kHasTOF;
271-
}
272-
if (track.hasTRD()) {
269+
270+
if (track.hasTRD())
273271
candidate.flags |= nuclei::Flags::kHasTRD;
274-
}
275-
if (!collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) {
272+
273+
if (!collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder))
276274
candidate.flags |= nuclei::Flags::kITSrof;
277-
}
278275
}
279276

280277
template <typename Tparticle>
@@ -304,9 +301,9 @@ struct nucleiQC {
304301
template <const bool isMc, typename Tcollision, typename Ttrack>
305302
nuclei::SlimCandidate fillCandidate(const int iSpecies, Tcollision const& collision, Ttrack const& track)
306303
{
307-
if (!nuclei::checkSpeciesValidity(iSpecies)) {
304+
if (!nuclei::checkSpeciesValidity(iSpecies))
308305
std::runtime_error("species contains invalid nucleus index");
309-
}
306+
310307
nuclei::SlimCandidate candidate = {.pt = track.pt() * track.sign(),
311308
.eta = track.eta(),
312309
.phi = track.phi(),
@@ -336,7 +333,6 @@ struct nucleiQC {
336333
}
337334
}
338335

339-
mNucleiCandidates.emplace_back(candidate);
340336
return candidate;
341337
}
342338

@@ -363,9 +359,8 @@ struct nucleiQC {
363359
void fillHistograms(const nuclei::SlimCandidate& candidate)
364360
{
365361
constexpr int kIndex = iSpecies;
366-
if (!nuclei::checkSpeciesValidity(kIndex)) {
362+
if (!nuclei::checkSpeciesValidity(kIndex))
367363
std::runtime_error("species contains invalid nucleus kIndex");
368-
}
369364

370365
if (isGenerated) {
371366
const float ptGenerated = (kIndex == nuclei::Species::kPr || kIndex == nuclei::Species::kDe || kIndex == nuclei::Species::kTr) ? candidate.ptGenerated : candidate.ptGenerated / 2.f;
@@ -392,31 +387,38 @@ struct nucleiQC {
392387
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
393388
initCCDB(bc);
394389

395-
if (!nuclei::eventSelection(collision, mHistograms, cfgEventSelections, cfgCutVertex)) {
390+
if (!nuclei::eventSelection(collision, mHistograms, cfgEventSelections, cfgCutVertex))
396391
return;
397-
}
398392

399393
for (const auto& track : tracks) {
400394

401395
static_for<0, nuclei::kNspecies - 1>([&](auto iSpecies) {
402396
constexpr int kSpeciesCt = decltype(iSpecies)::value;
403397
const int kSpeciesRt = kSpeciesCt;
404398

405-
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesRt) == mSpeciesToProcess.end()) {
399+
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesRt) == mSpeciesToProcess.end())
400+
return;
401+
402+
if (!track.has_mcParticle())
406403
return;
407-
}
408404

409-
if (track.has_mcParticle()) {
410-
const auto& particle = track.mcParticle();
411-
if (cfgDoCheckPdgCode) {
412-
if (std::abs(particle.pdgCode()) != nuclei::pdgCodes[kSpeciesRt])
413-
return;
414-
}
415-
if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax) {
405+
const auto& particle = track.mcParticle();
406+
if (cfgDoCheckPdgCode) {
407+
if (std::abs(particle.pdgCode()) != nuclei::pdgCodes[kSpeciesRt])
416408
return;
417-
}
418409
}
419410

411+
if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax)
412+
return;
413+
414+
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
415+
return;
416+
417+
nuclei::SlimCandidate candidate;
418+
candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
419+
if ((candidate.flags >> 10) & 0b1)
420+
LOG(info) << "track from material before track selection";
421+
420422
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kNoCuts);
421423
if (!trackSelection(track))
422424
return;
@@ -426,35 +428,35 @@ struct nucleiQC {
426428
return;
427429
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kPidCuts);
428430

429-
nuclei::SlimCandidate candidate;
430-
if (track.has_mcParticle()) {
431-
candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
432-
dispatchFillHistograms</*isGenerated*/ true>(kSpeciesRt, candidate);
433-
} else {
434-
candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
435-
}
431+
// nuclei::SlimCandidate candidate;
432+
// candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
436433

434+
mNucleiCandidates.emplace_back(candidate);
435+
dispatchFillHistograms</*isGenerated*/ true>(kSpeciesRt, candidate);
437436
dispatchFillHistograms</*isGenerated*/ false>(kSpeciesRt, candidate);
438437
});
439438
}
440439

441440
const int mcCollisionId = collision.mcCollisionId();
442441
auto mcParticlesThisCollision = mcParticles.sliceBy(mMcParticlesPerCollision, mcCollisionId);
443442
mcParticlesThisCollision.bindExternalIndices(&mcParticles);
443+
444444
for (const auto& particle : mcParticlesThisCollision) {
445-
if (std::find(mFilledMcParticleIds.begin(), mFilledMcParticleIds.end(), particle.globalIndex()) != mFilledMcParticleIds.end()) {
445+
if (std::find(mFilledMcParticleIds.begin(), mFilledMcParticleIds.end(), particle.globalIndex()) != mFilledMcParticleIds.end())
446446
continue;
447-
}
447+
448+
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
449+
continue;
450+
448451
int iSpecies = nuclei::getSpeciesFromPdg(particle.pdgCode());
449-
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), iSpecies) == mSpeciesToProcess.end()) {
452+
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), iSpecies) == mSpeciesToProcess.end())
450453
continue;
451-
}
452454

453455
nuclei::SlimCandidate candidate;
454456
fillNucleusFlagsPdgsMc(particle, candidate);
455457
fillNucleusGeneratedVariables(particle, candidate);
456-
mNucleiCandidates.emplace_back(candidate);
457458

459+
mNucleiCandidates.emplace_back(candidate);
458460
dispatchFillHistograms</*isGenerated*/ true>(iSpecies, candidate);
459461
}
460462

0 commit comments

Comments
 (0)