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,20 +245,28 @@ 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 ;
266254
255+ switch (iSpecies) {
256+ case nuclei::Species::kPr :
257+ candidate.flags |= nuclei::Flags::kProton ;
258+ case nuclei::Species::kDe :
259+ candidate.flags |= nuclei::Flags::kDeuteron ;
260+ case nuclei::Species::kTr :
261+ candidate.flags |= nuclei::Flags::kTriton ;
262+ case nuclei::Species::kHe :
263+ candidate.flags |= nuclei::Flags::kHe3 ;
264+ case nuclei::Species::kAl :
265+ candidate.flags |= nuclei::Flags::kHe4 ;
266+ default :
267+ candidate.flags |= 0 ;
268+ }
269+
267270 if (track.hasTOF ())
268271 candidate.flags |= nuclei::Flags::kHasTOF ;
269272
@@ -414,11 +417,6 @@ struct nucleiQC {
414417 if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary ())
415418 return ;
416419
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-
422420 mHistograms .fill (HIST (nuclei::cNames[kSpeciesCt ]) + HIST (" /hTrackSelections" ), nuclei::trackSelection::kNoCuts );
423421 if (!trackSelection (track))
424422 return ;
@@ -428,10 +426,11 @@ struct nucleiQC {
428426 return ;
429427 mHistograms .fill (HIST (nuclei::cNames[kSpeciesCt ]) + HIST (" /hTrackSelections" ), nuclei::trackSelection::kPidCuts );
430428
431- // nuclei::SlimCandidate candidate;
432- // candidate = fillCandidate</*isMc*/ true>(kSpeciesCt, collision, track);
429+ nuclei::SlimCandidate candidate;
430+ candidate = fillCandidate</* isMc*/ true >(kSpeciesCt , collision, track);
433431
434432 mNucleiCandidates .emplace_back (candidate);
433+ mFilledMcParticleIds .emplace_back (particle.globalIndex ());
435434 dispatchFillHistograms</* isGenerated*/ true >(kSpeciesRt , candidate);
436435 dispatchFillHistograms</* isGenerated*/ false >(kSpeciesRt , candidate);
437436 });
@@ -442,12 +441,16 @@ struct nucleiQC {
442441 mcParticlesThisCollision.bindExternalIndices (&mcParticles);
443442
444443 for (const auto & particle : mcParticlesThisCollision) {
444+
445445 if (std::find (mFilledMcParticleIds .begin (), mFilledMcParticleIds .end (), particle.globalIndex ()) != mFilledMcParticleIds .end ())
446446 continue ;
447447
448448 if (cfgFillOnlyPhysicalPrimaries && !particle.isPhysicalPrimary ())
449449 continue ;
450450
451+ if ((particle.y () - cfgRapidityCenterMass) < cfgRapidityMin || (particle.y () - cfgRapidityCenterMass) > cfgRapidityMax)
452+ continue ;
453+
451454 int iSpecies = nuclei::getSpeciesFromPdg (particle.pdgCode ());
452455 if (std::find (mSpeciesToProcess .begin (), mSpeciesToProcess .end (), iSpecies) == mSpeciesToProcess .end ())
453456 continue ;
@@ -457,6 +460,7 @@ struct nucleiQC {
457460 fillNucleusGeneratedVariables (particle, candidate);
458461
459462 mNucleiCandidates .emplace_back (candidate);
463+ mFilledMcParticleIds .emplace_back (particle.globalIndex ());
460464 dispatchFillHistograms</* isGenerated*/ true >(iSpecies, candidate);
461465 }
462466
@@ -480,6 +484,7 @@ struct nucleiQC {
480484 }
481485 }
482486 PROCESS_SWITCH (nucleiQC, processMc, " Mc analysis" , false );
487+
483488};
484489
485490WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments