@@ -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