Skip to content

Commit af6ef47

Browse files
logic flow uniformed to nucleiSpectra for cross check
1 parent 4d3c95f commit af6ef47

File tree

1 file changed

+81
-67
lines changed

1 file changed

+81
-67
lines changed

PWGLF/TableProducer/QC/nucleiQC.cxx

Lines changed: 81 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ struct nucleiQC {
110110
Configurable<int> cfgTrackTunerConfigSource{"cfgTrackTunerConfigSource", aod::track_tuner::InputString, "1: input string; 2: TrackTuner Configurables"};
111111
ConfigurableAxis cfgAxisPtQA{"axisPtQA", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"};
112112

113+
Configurable<bool> cfgRapidityToggle{"cfgRapidityToggle", false, "If true, cut on rapidity for reconstructed particles"};
113114
Configurable<float> cfgRapidityMin{"cfgRapidityMin", -1., "Minimum rapidity value"};
114115
Configurable<float> cfgRapidityMax{"cfgRapidityMax", 1., "Maximum rapidity value"};
115116
Configurable<float> cfgRapidityCenterMass{"cfgRapidityCenterMass", 0.0f, "Center of mass rapidity"};
@@ -347,10 +348,8 @@ struct nucleiQC {
347348
}
348349
}
349350

350-
template <typename Tcollision, typename Ttrack>
351-
void fillNucleusFlagsPdgs(const int iSpecies, const Tcollision& collision, const Ttrack& track, nuclei::SlimCandidate& candidate)
351+
void fillSpeciesFlags(const int iSpecies, nuclei::SlimCandidate& candidate)
352352
{
353-
candidate.flags = static_cast<uint16_t>((track.pidForTracking() & 0xF) << 12);
354353

355354
switch (iSpecies) {
356355
case nuclei::Species::kPr:
@@ -372,6 +371,14 @@ struct nucleiQC {
372371
candidate.flags |= 0;
373372
break;
374373
}
374+
}
375+
376+
template <typename Tcollision, typename Ttrack>
377+
void fillNucleusFlagsPdgs(const int iSpecies, const Tcollision& collision, const Ttrack& track, nuclei::SlimCandidate& candidate)
378+
{
379+
candidate.flags = static_cast<uint16_t>((track.pidForTracking() & 0xF) << 12);
380+
381+
fillSpeciesFlags(iSpecies, candidate);
375382

376383
if (track.hasTOF())
377384
candidate.flags |= nuclei::Flags::kHasTOF;
@@ -508,110 +515,117 @@ struct nucleiQC {
508515
}
509516
}
510517

511-
void processMc(const Collision& collision, const TrackCandidatesMC& tracks, const aod::BCsWithTimestamps&, const aod::McParticles& mcParticles)
518+
void processMc(const Collisions& collisions, const TrackCandidatesMC& tracks, const aod::BCsWithTimestamps&, const aod::McParticles& mcParticles)
512519
{
513-
514520
gRandom->SetSeed(67);
515521
mNucleiCandidates.clear();
516-
mFilledMcParticleIds.clear();
522+
std::vector<bool> reconstructedMcParticles(mcParticles.size(), false);
517523

518-
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
519-
initCCDB(bc);
524+
for (const auto& collision : collisions) {
520525

521-
if (!nuclei::eventSelection(collision, mHistograms, cfgEventSelections, cfgCutVertex))
522-
return;
526+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
527+
initCCDB(bc);
523528

524-
bool anyTrackTuner = false;
525-
for (int iSpecies = 0; iSpecies < static_cast<int>(nuclei::Species::kNspecies); iSpecies++) {
526-
anyTrackTuner = anyTrackTuner || cfgUseTrackTuner->get(iSpecies);
527-
}
528-
if (anyTrackTuner && mTrackTuner.autoDetectDcaCalib && !mTrackTuner.areGraphsConfigured) {
529+
if (!nuclei::eventSelection(collision, mHistograms, cfgEventSelections, cfgCutVertex))
530+
continue;
529531

530-
mTrackTuner.setRunNumber(mRunNumber);
532+
bool anyTrackTuner = false;
533+
for (int iSpecies = 0; iSpecies < static_cast<int>(nuclei::Species::kNspecies); iSpecies++) {
534+
anyTrackTuner = anyTrackTuner || cfgUseTrackTuner->get(iSpecies);
535+
}
536+
if (anyTrackTuner && mTrackTuner.autoDetectDcaCalib && !mTrackTuner.areGraphsConfigured) {
531537

532-
/// setup the "auto-detected" path based on the run number
533-
mTrackTuner.getPathInputFileAutomaticFromCCDB();
534-
mHistTrackTunedTracks->SetTitle(mTrackTuner.outputString.c_str());
535-
mTrackTuner.getDcaGraphs();
536-
}
538+
mTrackTuner.setRunNumber(mRunNumber);
539+
540+
/// setup the "auto-detected" path based on the run number
541+
mTrackTuner.getPathInputFileAutomaticFromCCDB();
542+
mHistTrackTunedTracks->SetTitle(mTrackTuner.outputString.c_str());
543+
mTrackTuner.getDcaGraphs();
544+
}
545+
546+
auto tracksThisCollision = tracks.sliceBy(mTracksPerCollision, collision.globalIndex());
547+
for (const auto& track : tracksThisCollision) {
537548

538-
auto tracksThisCollision = tracks.sliceBy(mTracksPerCollision, collision.globalIndex());
539-
tracksThisCollision.bindExternalIndices(&tracks);
549+
static_for<0, nuclei::kNspecies - 1>([&](auto iSpecies) {
550+
constexpr int kSpeciesCt = decltype(iSpecies)::value;
551+
const int kSpeciesRt = kSpeciesCt;
540552

541-
for (const auto& track : tracks) {
553+
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesRt) == mSpeciesToProcess.end())
554+
return;
542555

543-
static_for<0, nuclei::kNspecies - 1>([&](auto iSpecies) {
544-
constexpr int kSpeciesCt = decltype(iSpecies)::value;
545-
const int kSpeciesRt = kSpeciesCt;
556+
if (!track.has_mcParticle())
557+
return;
546558

547-
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), kSpeciesRt) == mSpeciesToProcess.end())
548-
return;
559+
if (track.mcParticleId() < -1 || track.mcParticleId() >= mcParticles.size())
560+
return;
561+
const auto& particle = mcParticles.iteratorAt(track.mcParticleId());
549562

550-
if (!track.has_mcParticle())
551-
return;
563+
if (cfgDoCheckPdgCode) {
564+
if (std::abs(particle.pdgCode()) != nuclei::pdgCodes[kSpeciesRt])
565+
return;
566+
}
552567

553-
const auto& particle = track.mcParticle();
554-
if (cfgDoCheckPdgCode) {
555-
if (std::abs(particle.pdgCode()) != nuclei::pdgCodes[kSpeciesRt])
568+
if (cfgDownscalingFactor->get(kSpeciesRt) < 1.) {
569+
if ((gRandom->Uniform()) > cfgDownscalingFactor->get(kSpeciesRt))
570+
return;
571+
}
572+
573+
if (cfgRapidityToggle && ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax))
556574
return;
557-
}
558575

559-
if (cfgDownscalingFactor->get(kSpeciesRt) < 1.) {
560-
if ((gRandom->Uniform()) > cfgDownscalingFactor->get(kSpeciesRt))
576+
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
561577
return;
562-
}
563578

564-
if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax)
565-
return;
579+
LOG(info) << "track passed physical primary cut";
566580

567-
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
568-
return;
581+
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kNoCuts);
582+
if (!trackSelection<kSpeciesRt>(track))
583+
return;
584+
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kTrackCuts);
569585

570-
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kNoCuts);
571-
if (!trackSelection<kSpeciesRt>(track))
572-
return;
573-
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kTrackCuts);
586+
if (!pidSelection<kSpeciesRt>(track, collision))
587+
return;
588+
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kPidCuts);
574589

575-
if (!pidSelection<kSpeciesRt>(track, collision))
576-
return;
577-
mHistograms.fill(HIST(nuclei::cNames[kSpeciesCt]) + HIST("/hTrackSelections"), nuclei::trackSelection::kPidCuts);
590+
nuclei::SlimCandidate candidate;
591+
candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
578592

579-
nuclei::SlimCandidate candidate;
580-
candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
593+
mNucleiCandidates.emplace_back(candidate);
594+
reconstructedMcParticles[particle.globalIndex()] = true;
581595

582-
mNucleiCandidates.emplace_back(candidate);
583-
mFilledMcParticleIds.emplace_back(particle.globalIndex());
584-
dispatchFillHistograms</*isGenerated*/ true>(kSpeciesRt, candidate);
585-
dispatchFillHistograms</*isGenerated*/ false>(kSpeciesRt, candidate);
586-
});
596+
dispatchFillHistograms</*isGenerated*/ true>(kSpeciesRt, candidate);
597+
dispatchFillHistograms</*isGenerated*/ false>(kSpeciesRt, candidate);
598+
});
599+
}
587600
}
588601

589-
const int mcCollisionId = collision.mcCollisionId();
590-
auto mcParticlesThisCollision = mcParticles.sliceBy(mMcParticlesPerCollision, mcCollisionId);
591-
mcParticlesThisCollision.bindExternalIndices(&mcParticles);
602+
int mcIndex = -1;
603+
for (const auto& particle : mcParticles) {
592604

593-
for (const auto& particle : mcParticlesThisCollision) {
605+
mcIndex++;
594606

595-
if (std::find(mFilledMcParticleIds.begin(), mFilledMcParticleIds.end(), particle.globalIndex()) != mFilledMcParticleIds.end())
607+
int iSpecies = nuclei::getSpeciesFromPdg(particle.pdgCode());
608+
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), iSpecies) == mSpeciesToProcess.end())
596609
continue;
597610

598-
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
611+
if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax)
599612
continue;
600613

601-
if ((particle.y() - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y() - cfgRapidityCenterMass) > cfgRapidityMax)
614+
if (reconstructedMcParticles[mcIndex])
602615
continue;
603616

604-
int iSpecies = nuclei::getSpeciesFromPdg(particle.pdgCode());
605-
if (std::find(mSpeciesToProcess.begin(), mSpeciesToProcess.end(), iSpecies) == mSpeciesToProcess.end())
617+
if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary())
606618
continue;
607619

608620
if (cfgDownscalingFactor->get(iSpecies) < 1.) {
609621
if ((gRandom->Uniform()) > cfgDownscalingFactor->get(iSpecies))
610-
return;
622+
continue;
611623
}
612624

613625
nuclei::SlimCandidate candidate;
614-
candidate.centrality = nuclei::getCentrality(collision, cfgCentralityEstimator, mHistFailCentrality);
626+
// candidate.centrality = nuclei::getCentrality(collision, cfgCentralityEstimator, mHistFailCentrality);
627+
candidate.centrality = -1.f; // centrality is not well defined for non-reconstructed particles, set to -1 for now
628+
fillSpeciesFlags(iSpecies, candidate);
615629
fillNucleusFlagsPdgsMc(particle, candidate);
616630
fillNucleusGeneratedVariables(particle, candidate);
617631

0 commit comments

Comments
 (0)