@@ -162,6 +162,7 @@ struct nucleiQC {
162162 std::array<bool , nuclei::Species::kNspecies > mFillSpecies {false };
163163 Produces<aod::NucleiTableRed> mNucleiTableRed ;
164164 Produces<aod::NucleiTableExt> mNucleiTableExt ;
165+ Produces<aod::NucleiTableMat> mNucleiTableMat ;
165166
166167 std::vector<nuclei::SlimCandidate> mNucleiCandidates ;
167168 std::vector<int > mFilledMcParticleIds ;
@@ -209,6 +210,7 @@ struct nucleiQC {
209210
210211 nuclei::createHistogramRegistryNucleus<kSpeciesCt >(mHistograms );
211212 mHistograms .add (fmt::format (" {}/hTrackQuality" , nuclei::cNames[kSpeciesRt ]).c_str (), (fmt::format (" {} track quality;" , nuclei::cNames[kSpeciesRt ]) + std::string (" #it{p}_{T} / #it{Z} (GeV/#it{c}); Selection step; Counts" )).c_str (), o2::framework::HistType::kTH2D , {{400 , -10 .0f , 10 .0f }, {trackQuality::kNtrackQuality , -0 .5f , static_cast <float >(trackQuality::kNtrackQuality ) - 0 .5f }});
213+ mHistograms .add (fmt::format (" {}/h2Productionvertex" , nuclei::cNames[kSpeciesRt ]).c_str (), (fmt::format (" {} production vertex;" , nuclei::cNames[kSpeciesRt ]) + std::string (" #it{x} (cm); #it{y} (cm); Counts" )).c_str (), o2::framework::HistType::kTH2D , {{400 , -100 .0f , 100 .0f }, {400 , -100 .0f , 100 .0f }});
212214 for (size_t iSel = 0 ; iSel < trackQuality::kNtrackQuality ; iSel++) {
213215 mHistograms .get <TH2 >(HIST (nuclei::cNames[kSpeciesRt ]) + HIST (" /hTrackQuality" ))->GetYaxis ()->SetBinLabel (iSel + 1 , trackQualityLabels[iSel].c_str ());
214216 }
@@ -352,7 +354,7 @@ struct nucleiQC {
352354 return true ;
353355 }
354356
355- template <typename Tparticle>
357+ template <int iSpecies, typename Tparticle>
356358 void fillNucleusFlagsPdgsMc (const Tparticle& particle, nuclei::SlimCandidate& candidate)
357359 {
358360 candidate.pdgCode = particle.pdgCode ();
@@ -383,6 +385,9 @@ struct nucleiQC {
383385 candidate.flags |= nuclei::QcFlags::kQcIsSecondaryFromWeakDecay ;
384386 } else {
385387 candidate.flags |= nuclei::QcFlags::kQcIsSecondaryFromMaterial ;
388+ mHistograms .fill (HIST (nuclei::cNames[iSpecies]) + HIST (" /h2Productionvertex" ), particle.vx (), particle.vy ());
389+ candidate.vx = particle.vx ();
390+ candidate.vy = particle.vy ();
386391 }
387392 }
388393
@@ -443,15 +448,22 @@ struct nucleiQC {
443448 .centrality = nuclei::getCentrality (collision, cfgCentralityEstimator, mHistFailCentrality ),
444449 .mcProcess = TMCProcess::kPNoProcess ,
445450 .nsigmaTpc = mPidManagers [iSpecies].getNSigmaTPC (track),
446- .nsigmaTof = mPidManagers [iSpecies].getNSigmaTOF (track)};
451+ .nsigmaTof = mPidManagers [iSpecies].getNSigmaTOF (track),
452+ .vx = -999 .f ,
453+ .vy = -999 .f };
447454
448455 fillNucleusFlagsPdgs (collision, track, candidate);
449456
450457 if constexpr (isMc) {
451458 if (track.has_mcParticle ()) {
452459
453460 const auto & particle = track.mcParticle ();
454- fillNucleusFlagsPdgsMc (particle, candidate);
461+ static_for<0 , nuclei::kNspecies - 1 >([&](auto iSpeciesCtV) {
462+ constexpr int kSpeciesCt = decltype (iSpeciesCtV)::value;
463+ if (std::abs (particle.pdgCode ()) == nuclei::pdgCodes[kSpeciesCt ]) {
464+ fillNucleusFlagsPdgsMc<kSpeciesCt >(particle, candidate);
465+ }
466+ });
455467 fillNucleusGeneratedVariables (particle, candidate);
456468 }
457469 }
@@ -527,6 +539,9 @@ struct nucleiQC {
527539 mNucleiTableExt (
528540 candidate.nsigmaTpc ,
529541 candidate.nsigmaTof );
542+ mNucleiTableMat (
543+ candidate.vx ,
544+ candidate.vy );
530545 }
531546
532547 void processMc (const Collisions& collisions, const TrackCandidatesMC& tracks, const aod::BCsWithTimestamps&, const aod::McParticles& mcParticles, const aod::McCollisions& /* mcCollisions*/ )
@@ -647,7 +662,12 @@ struct nucleiQC {
647662 const auto & centralityIt = mcCollisionIdToCentrality.find (particle.mcCollisionId ());
648663 candidate.centrality = centralityIt != mcCollisionIdToCentrality.end () ? centralityIt->second : -1 .f ;
649664 fillCollisionFlag (particle, candidate, reconstructedCollisions);
650- fillNucleusFlagsPdgsMc (particle, candidate);
665+ static_for<0 , nuclei::kNspecies - 1 >([&](auto iSpeciesCtV) {
666+ constexpr int kSpeciesCt = decltype (iSpeciesCtV)::value;
667+ if (std::abs (particle.pdgCode ()) == nuclei::pdgCodes[kSpeciesCt ]) {
668+ fillNucleusFlagsPdgsMc<kSpeciesCt >(particle, candidate);
669+ }
670+ });
651671 fillNucleusGeneratedVariables (particle, candidate);
652672
653673 writeCandidate (candidate);
0 commit comments