@@ -64,6 +64,7 @@ struct sigmaminustask {
6464 {
6565 // Axes
6666 const AxisSpec ptAxis{100 , -10 , 10 , " #it{p}_{T} (GeV/#it{c})" };
67+ const AxisSpec ptDaughterAxis{200 , 0 , 10 , " Daughter #it{p}_{T} (GeV/#it{c})" };
6768 const AxisSpec nSigmaPiAxis{60 , -30 , 30 , " n#sigma_{#pi}" };
6869 const AxisSpec nSigmaPrAxis{60 , -30 , 30 , " n#sigma_{p}" };
6970 const AxisSpec sigmaMassAxis{100 , 1.1 , 1.4 , " m (GeV/#it{c}^{2})" };
@@ -78,7 +79,7 @@ struct sigmaminustask {
7879 const AxisSpec massResolutionAxis{100 , -0.5 , 0.5 , " (m_{rec} - m_{gen}) / m_{gen}" };
7980 const AxisSpec radiusResolutionAxis{100 , -0.5 , 0.5 , " (r_{rec} - r_{gen}) / r_{gen}" };
8081
81- const AxisSpec boolAxis{2 , -0.5 , 1.5 , " Boolean value (0=false, 1=true) " };
82+ const AxisSpec boolAxis{2 , -0.5 , 1.5 , " Boolean value" };
8283 const AxisSpec filtersAxis{10 , -0.5 , 9.5 , " Filter index" };
8384
8485 // Event selection
@@ -111,12 +112,30 @@ struct sigmaminustask {
111112
112113 if (doprocessFindable) {
113114 // Add findable Sigma histograms
114- rFindable.add (" h2MassPtFindableAll" , " h2MassPtFindableAll" , {HistType::kTH2F , {ptAxis, sigmaMassAxis}});
115115 rFindable.add (" hFilterIndex" , " hFilterIndex" , {HistType::kTH1F , {filtersAxis}});
116+
117+ auto hFilterIndex = rFindable.get <TH1>(HIST (" hFilterIndex" ));
118+ hFilterIndex->GetXaxis ()->SetBinLabel (1 , " Initial" ); // 0: all generated pairs with tracks
119+ hFilterIndex->GetXaxis ()->SetBinLabel (2 , " Det. signals" ); // 1: correct ITS, TPC signals present
120+ hFilterIndex->GetXaxis ()->SetBinLabel (3 , " Moth ITS" ); // 2: cuts on ITS mother signal
121+ hFilterIndex->GetXaxis ()->SetBinLabel (4 , " Moth p_{T}" ); // 3: mother pT > KBminPtMoth
122+ hFilterIndex->GetXaxis ()->SetBinLabel (5 , " Daug TPC" ); // 4: cuts on TPC daughter signal
123+ hFilterIndex->GetXaxis ()->SetBinLabel (6 , " #eta cuts" ); // 5: eta < KBetaMax
124+ hFilterIndex->GetXaxis ()->SetBinLabel (7 , " #Delta#phi" ); // 6: delta phi < KBmaxPhiDiff
125+ hFilterIndex->GetXaxis ()->SetBinLabel (8 , " Radius" ); // 7: decay radius > KBradiusCut
126+ hFilterIndex->GetXaxis ()->SetBinLabel (9 , " Collision" ); // 8: collision sel8 cut
127+ hFilterIndex->GetXaxis ()->SetBinLabel (10 , " TOF daug" ); // 9: daughter has TOF
128+
116129 rFindable.add (" h2MCRadiusFilterIndex" , " h2MCRadiusFilterIndex" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
117130 rFindable.add (" h2RecRadiusFilterIndex" , " h2RecRadiusFilterIndex" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
118- rFindable.add (" h2MCRadiusFilter_protonkink" , " h2MCRadiusFilter_protonkink" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
119- rFindable.add (" h2MCRadiusFilter_pikink" , " h2MCRadiusFilter_pikink" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
131+
132+ rFindable.add (" h2MCRadiusFilter_plus_protonkink" , " h2MCRadiusFilter_plus_protonkink" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
133+ rFindable.add (" h2MCRadiusFilter_plus_pikink" , " h2MCRadiusFilter_plus_pikink" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
134+ rFindable.add (" h2MCRadiusFilter_minus_pikink" , " h2MCRadiusFilter_minus_pikink" , {HistType::kTH2F , {filtersAxis, radiusAxis}});
135+
136+ rFindable.add (" h2PtFilter_plus_protonkink" , " h2PtFilter_plus_protonkink" , {HistType::kTH2F , {filtersAxis, ptDaughterAxis}});
137+ rFindable.add (" h2PtFilter_plus_pikink" , " h2PtFilter_plus_pikink" , {HistType::kTH2F , {filtersAxis, ptDaughterAxis}});
138+ rFindable.add (" h2PtFilter_minus_pikink" , " h2PtFilter_minus_pikink" , {HistType::kTH2F , {filtersAxis, ptDaughterAxis}});
120139 }
121140 }
122141
@@ -299,20 +318,29 @@ struct sigmaminustask {
299318
300319 PROCESS_SWITCH (sigmaminustask, processMC, " MC processing" , false );
301320
302- void fillFindableHistograms (int filterIndex, float mcRadius, float recRadius, bool isPiDaughter) {
321+ void fillFindableHistograms (int filterIndex, float mcRadius, float recRadius, float ptDaughter, bool isSigmaMinus, bool isPiDaughter) {
303322 rFindable.fill (HIST (" hFilterIndex" ), filterIndex);
304323 rFindable.fill (HIST (" h2MCRadiusFilterIndex" ), filterIndex, mcRadius);
305324 rFindable.fill (HIST (" h2RecRadiusFilterIndex" ), filterIndex, recRadius);
306325
307326 if (isPiDaughter) {
308- rFindable.fill (HIST (" h2MCRadiusFilter_pikink" ), filterIndex, mcRadius);
327+ if (isSigmaMinus) {
328+ rFindable.fill (HIST (" h2MCRadiusFilter_minus_pikink" ), filterIndex, mcRadius);
329+ rFindable.fill (HIST (" h2PtFilter_minus_pikink" ), filterIndex, ptDaughter);
330+ } else {
331+ rFindable.fill (HIST (" h2MCRadiusFilter_plus_pikink" ), filterIndex, mcRadius);
332+ rFindable.fill (HIST (" h2PtFilter_plus_pikink" ), filterIndex, ptDaughter);
333+ }
309334 } else {
310- rFindable.fill (HIST (" h2MCRadiusFilter_protonkink" ), filterIndex, mcRadius);
335+ if (!isSigmaMinus) {
336+ rFindable.fill (HIST (" h2MCRadiusFilter_plus_protonkink" ), filterIndex, mcRadius);
337+ rFindable.fill (HIST (" h2PtFilter_plus_protonkink" ), filterIndex, ptDaughter);
338+ }
311339 }
312340 }
313341
314- void processFindable (aod::KinkCands const & kinkCands, aod::McTrackLabels const & trackLabelsMC, aod::McParticles const & particlesMC,
315- TracksFull const & tracks, CollisionsFullMC const & mcCollisions ){
342+ void processFindable (aod::KinkCands const & kinkCands, aod::McTrackLabels const & trackLabelsMC,
343+ TracksFull const & tracks, aod::McParticles const &, CollisionsFullMC const & ){
316344 // A - generated findable track pairs map: mcMother.globalIndex() -> (motherTrack.globalIndex(), daughterTrack.globalIndex())
317345 std::unordered_map<int64_t , std::pair<int64_t , int64_t >> allCandsIndices;
318346
@@ -394,28 +422,28 @@ struct sigmaminustask {
394422 auto mcDaughter = mcLabDaug.mcParticle_as <aod::McParticles>();
395423
396424 // Compute mass and radii
397- float mcMass = std::sqrt (mcMother.e () * mcMother.e () - mcMother.p () * mcMother.p ());
398- int sigmaSign = mcMother.pdgCode () > 0 ? 1 : -1 ;
399- bool isPiDaughter = std::abs (mcDaughter.pdgCode ()) == 211 ;
400- float mcRadius = std::sqrt ((mcMother.vx () - mcDaughter.vx ()) * (mcMother.vx () - mcDaughter.vx ()) +
401- (mcMother.vy () - mcDaughter.vy ()) * (mcMother.vy () - mcDaughter.vy ()));
425+ bool isSigmaMinus = (std::abs (mcMother.pdgCode ()) == 3112 );
426+ bool isPiDaughter = (std::abs (mcDaughter.pdgCode ()) == 211 );
427+
428+ // float mcMass = std::sqrt(mcMother.e() * mcMother.e() - mcMother.p() * mcMother.p());
429+ // int sigmaSign = mcMother.pdgCode() > 0 ? 1 : -1;
430+ float mcRadius = std::sqrt ((mcMother.vx () - mcDaughter.vx ()) * (mcMother.vx () - mcDaughter.vx ()) + (mcMother.vy () - mcDaughter.vy ()) * (mcMother.vy () - mcDaughter.vy ()));
402431 float recRadius = -1.0 ;
403432 if (findableToKinkCand.find (mcMother.globalIndex ()) != findableToKinkCand.end ()) {
404433 auto kinkCand = kinkCands.rawIteratorAt (findableToKinkCand[mcMother.globalIndex ()]);
405434 recRadius = std::sqrt (kinkCand.xDecVtx () * kinkCand.xDecVtx () + kinkCand.yDecVtx () * kinkCand.yDecVtx ());
406435 }
407-
408- rFindable.fill (HIST (" h2MassPtFindableAll" ), sigmaSign * mcMother.pt (), mcMass);
436+ float recPtDaughter = daughterTrack.pt ();
409437
410438 // Define filter index and progressively apply kinkbuilder cuts to track pairs
411439 int filterIndex = 0 ;
412- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
440+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
413441
414442 // 1 - tracks with right ITS, TPC, TOF signals
415443 if (motherTrack.has_collision () && motherTrack.hasITS () && !motherTrack.hasTPC () && !motherTrack.hasTOF () &&
416444 daughterTrack.hasITS () && daughterTrack.hasTPC ()) {
417445 filterIndex += 1 ;
418- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
446+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
419447
420448 } else {
421449 continue ;
@@ -425,15 +453,15 @@ struct sigmaminustask {
425453 if (motherTrack.itsNCls () < 6 &&
426454 motherTrack.itsNClsInnerBarrel () == 3 && motherTrack.itsChi2NCl () < 36 ) {
427455 filterIndex += 1 ;
428- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
456+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
429457
430458 } else {
431459 continue ;
432460 }
433461
434462 if (motherTrack.pt () > KBminPtMoth) {
435463 filterIndex += 1 ;
436- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
464+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
437465
438466 } else {
439467 continue ;
@@ -443,7 +471,7 @@ struct sigmaminustask {
443471 if (daughterTrack.itsNClsInnerBarrel () == 0 && daughterTrack.itsNCls () < 4 &&
444472 daughterTrack.tpcNClsCrossedRows () > 0.8 * daughterTrack.tpcNClsFindable () && daughterTrack.tpcNClsFound () > KBnTPCClusMinDaug) {
445473 filterIndex += 1 ;
446- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
474+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
447475
448476 } else {
449477 continue ;
@@ -452,7 +480,7 @@ struct sigmaminustask {
452480 // 5 - geometric cuts: eta
453481 if (std::abs (motherTrack.eta ()) < KBetaMax && std::abs (daughterTrack.eta ()) < KBetaMax) {
454482 filterIndex += 1 ;
455- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
483+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
456484
457485 } else {
458486 continue ;
@@ -461,7 +489,7 @@ struct sigmaminustask {
461489 // 6 - geometric cuts: phi difference
462490 if (std::abs (motherTrack.phi () - daughterTrack.phi ()) * radToDeg < KBmaxPhiDiff) {
463491 filterIndex += 1 ;
464- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
492+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
465493
466494 } else {
467495 continue ;
@@ -470,7 +498,7 @@ struct sigmaminustask {
470498 // 7 - radius cut
471499 if (recRadius > KBradiusCut) {
472500 filterIndex += 1 ;
473- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
501+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
474502
475503 } else {
476504 continue ;
@@ -480,14 +508,14 @@ struct sigmaminustask {
480508 auto collision = motherTrack.template collision_as <CollisionsFullMC>();
481509 if (!(std::abs (collision.posZ ()) > cutzvertex || !collision.sel8 ())) {
482510 filterIndex += 1 ;
483- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
511+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
484512
485513 }
486514
487515 // 9 - TOF daughter presence
488516 if (daughterTrack.hasTOF ()) {
489517 filterIndex += 1 ;
490- fillFindableHistograms (filterIndex, mcRadius, recRadius, isPiDaughter);
518+ fillFindableHistograms (filterIndex, mcRadius, recRadius, recPtDaughter, isSigmaMinus, isPiDaughter);
491519
492520 }
493521 }
@@ -501,6 +529,3 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
501529 return WorkflowSpec{
502530 adaptAnalysisTask<sigmaminustask>(cfgc)};
503531}
504-
505- // Next steps:
506- // 4. For generated h2, avoid mass axis, use a bool axis to easily distinguish sigma minus and sigma plus
0 commit comments