@@ -113,7 +113,7 @@ struct alice3multicharmTable {
113113
114114 Configurable<float > minPiCPt{" minPiCPt" , 0.15 , " Minimum pT for XiC pions" };
115115 Configurable<float > minPiCCPt{" minPiCCPt" , 0.3 , " Minimum pT for XiCC pions" };
116- Configurable<float > minNTracks{" minNTracks" , - 1 , " Minimum number of tracks" };
116+ Configurable<std::vector< float >> minNTracks{" minNTracks" , {- 1 } , " Minimum number of tracks" };
117117
118118 Configurable<float > minXiRadius{" minXiRadius" , 0.5 , " Minimum R2D for XiC decay (cm)" };
119119 Configurable<float > minXiCRadius{" minXiCRadius" , 0.001 , " Minimum R2D for XiC decay (cm)" };
@@ -527,44 +527,41 @@ struct alice3multicharmTable {
527527 // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
528528 void processFindXiCC (aod::Collision const & collision, alice3tracks const & tracks, aod::McParticles const &, aod::UpgradeCascades const & cascades)
529529 {
530- // histos.fill(HIST("hNCollisions"), 1);
531- // histos.fill(HIST("hNTracks"), tracks.size());
532-
533- // if (tracks.size() < minNTracks)
534- // return;
535-
536- // histos.fill(HIST("hNCollisions"), 2);
537-
538530 // group with this collision
539531 // n.b. cascades do not need to be grouped, being used directly in iterator-grouping
540532 auto tracksPiFromXiCgrouped = tracksPiFromXiC->sliceByCached (aod::track::collisionId, collision.globalIndex (), cache);
541533 auto tracksPiFromXiCCgrouped = tracksPiFromXiCC->sliceByCached (aod::track::collisionId, collision.globalIndex (), cache);
542534
543- if (doDCAplots) {
544- for (auto const & cascade : cascades) {
545- if (cascade.has_cascadeTrack ()) {
546- auto track = cascade.cascadeTrack_as <alice3tracks>(); // de-reference cascade track
547- histos.fill (HIST (" h2dDCAxyVsPtXiFromXiC" ), track.pt (), track.dcaXY () * 1e+4 );
548- } else {
549- LOGF (info, " Damn, something is wrong" );
550- }
551- }
535+ static constexpr int kMaxLUTConfigs = 20 ;
536+ std::vector<int > nTracks (kMaxLUTConfigs );
537+ for (auto const & track : tracks) {
538+ int lutConfigId = track.lutConfigId ();
539+ nTracks[lutConfigId]++;
552540
553- for (auto const & track : tracks) {
554- if (bitcheck (track.decayMap (), kTruePiFromXiC ))
555- histos.fill (HIST (" h2dDCAxyVsPtPiFromXiC" ), track.pt (), track.dcaXY () * 1e+4 );
556- if (bitcheck (track.decayMap (), kTruePiFromXiCC ))
557- histos.fill (HIST (" h2dDCAxyVsPtPiFromXiCC" ), track.pt (), track.dcaXY () * 1e+4 );
558- }
541+ if (bitcheck (track.decayMap (), kTruePiFromXiC ))
542+ histos.fill (HIST (" h2dDCAxyVsPtPiFromXiC" ), track.pt (), track.dcaXY () * 1e+4 );
543+ if (bitcheck (track.decayMap (), kTruePiFromXiCC ))
544+ histos.fill (HIST (" h2dDCAxyVsPtPiFromXiCC" ), track.pt (), track.dcaXY () * 1e+4 );
559545 }
560-
546+
561547 for (auto const & xiCand : cascades) {
562548 auto xi = xiCand.cascadeTrack_as <alice3tracks>(); // de-reference cascade track
563549 int lutConfigId = xi.lutConfigId ();
564- std::string histPath = " Configuration_" + std::to_string (lutConfigId) + " /" ;
565550 initConf (lutConfigId);
551+ if (minNTracks.value .size () < static_cast <size_t >(lutConfigId)) {
552+ if (nTracks[lutConfigId] < minNTracks.value .front ()) {
553+ continue ; // fallback to first
554+ }
555+ } else {
556+ if (nTracks[lutConfigId] < minNTracks.value [lutConfigId]) {
557+ continue ;
558+ }
559+ }
560+
566561
562+ std::string histPath = " Configuration_" + std::to_string (lutConfigId) + " /" ;
567563 histos.fill (HIST (" hMassXi" ), xiCand.mXi ());
564+ histos.fill (HIST (" h2dDCAxyVsPtXiFromXiC" ), xi.pt (), xi.dcaXY () * 1e+4 );
568565 if (std::fabs (xiCand.mXi () - o2::constants::physics::MassXiMinus) > massWindowXi)
569566 continue ; // out of mass region
570567
0 commit comments