99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111//
12- // Nuclei spectra analysis task
13- // ========================
14- //
15- // Executable + dependencies:
16- //
17- // Data (run3):
18- // o2-analysis-lf-nuclei-spectra, o2-analysis-timestamp
19- // o2-analysis-pid-tof-base, o2-analysis-multiplicity-table, o2-analysis-event-selection
20- // (to add flow: o2-analysis-qvector-table, o2-analysis-centrality-table)
12+ // / \brief TableProducer/Task for nuclei QC. The produced table can be disabled with a configurable.
13+ // /
14+ // / \author Giorgio Alberto Lucia (giorgio.alberto.lucia@cern.ch)
15+ // /
2116
2217#include " PWGLF/DataModel/EPCalibrationTables.h"
2318#include " PWGLF/DataModel/LFSlimNucleiTables.h"
@@ -250,19 +245,33 @@ struct nucleiQC {
250245 } else {
251246 candidate.flags |= nuclei::Flags::kIsSecondaryFromMaterial ;
252247 }
253-
254- mFilledMcParticleIds .emplace_back (particle.globalIndex ());
255248 }
256249
257250 template <typename Tcollision, typename Ttrack>
258251 void fillNucleusFlagsPdgs (const int iSpecies, const Tcollision& collision, const Ttrack& track, nuclei::SlimCandidate& candidate)
259252 {
260253 candidate.flags = static_cast <uint16_t >((track.pidForTracking () & 0xF ) << 12 );
261- candidate.flags |= iSpecies == nuclei::Species::kPr ? nuclei::Flags::kProton : iSpecies == nuclei::Species::kDe ? nuclei::Flags::kDeuteron
262- : iSpecies == nuclei::Species::kTr ? nuclei::Flags::kTriton
263- : iSpecies == nuclei::Species::kHe ? nuclei::Flags::kHe3
264- : iSpecies == nuclei::Species::kAl ? nuclei::Flags::kHe4
265- : 0 ;
254+
255+ switch (iSpecies) {
256+ case nuclei::Species::kPr :
257+ candidate.flags |= nuclei::Flags::kProton ;
258+ break ;
259+ case nuclei::Species::kDe :
260+ candidate.flags |= nuclei::Flags::kDeuteron ;
261+ break ;
262+ case nuclei::Species::kTr :
263+ candidate.flags |= nuclei::Flags::kTriton ;
264+ break ;
265+ case nuclei::Species::kHe :
266+ candidate.flags |= nuclei::Flags::kHe3 ;
267+ break ;
268+ case nuclei::Species::kAl :
269+ candidate.flags |= nuclei::Flags::kHe4 ;
270+ break ;
271+ default :
272+ candidate.flags |= 0 ;
273+ break ;
274+ }
266275
267276 if (track.hasTOF ())
268277 candidate.flags |= nuclei::Flags::kHasTOF ;
@@ -414,11 +423,6 @@ struct nucleiQC {
414423 if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary ())
415424 return ;
416425
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-
422426 mHistograms .fill (HIST (nuclei::cNames[kSpeciesCt ]) + HIST (" /hTrackSelections" ), nuclei::trackSelection::kNoCuts );
423427 if (!trackSelection (track))
424428 return ;
@@ -428,10 +432,11 @@ struct nucleiQC {
428432 return ;
429433 mHistograms .fill (HIST (nuclei::cNames[kSpeciesCt ]) + HIST (" /hTrackSelections" ), nuclei::trackSelection::kPidCuts );
430434
431- // nuclei::SlimCandidate candidate;
432- // candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
435+ nuclei::SlimCandidate candidate;
436+ candidate = fillCandidate</* isMc*/ true >(kSpeciesCt , collision, track);
433437
434438 mNucleiCandidates .emplace_back (candidate);
439+ mFilledMcParticleIds .emplace_back (particle.globalIndex ());
435440 dispatchFillHistograms</* isGenerated*/ true >(kSpeciesRt , candidate);
436441 dispatchFillHistograms</* isGenerated*/ false >(kSpeciesRt , candidate);
437442 });
@@ -442,12 +447,16 @@ struct nucleiQC {
442447 mcParticlesThisCollision.bindExternalIndices (&mcParticles);
443448
444449 for (const auto & particle : mcParticlesThisCollision) {
450+
445451 if (std::find (mFilledMcParticleIds .begin (), mFilledMcParticleIds .end (), particle.globalIndex ()) != mFilledMcParticleIds .end ())
446452 continue ;
447453
448454 if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary ())
449455 continue ;
450456
457+ if ((particle.y () - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y () - cfgRapidityCenterMass) > cfgRapidityMax)
458+ continue ;
459+
451460 int iSpecies = nuclei::getSpeciesFromPdg (particle.pdgCode ());
452461 if (std::find (mSpeciesToProcess .begin (), mSpeciesToProcess .end (), iSpecies) == mSpeciesToProcess .end ())
453462 continue ;
@@ -457,6 +466,7 @@ struct nucleiQC {
457466 fillNucleusGeneratedVariables (particle, candidate);
458467
459468 mNucleiCandidates .emplace_back (candidate);
469+ mFilledMcParticleIds .emplace_back (particle.globalIndex ());
460470 dispatchFillHistograms</* isGenerated*/ true >(iSpecies, candidate);
461471 }
462472
0 commit comments