@@ -67,7 +67,7 @@ struct ThreePartCorr {
6767 using MyFilteredMCRecCollision = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>>::iterator;
6868 using MyFilteredMCTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::McTrackLabels,
6969 aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr,
70- aod::pidTOFPi , aod::pidTOFKa , aod::pidTOFPr , aod::pidTOFbeta>>;
70+ aod::pidTOFFullPi , aod::pidTOFFullKa , aod::pidTOFFullPr , aod::pidTOFbeta>>;
7171
7272 // Mixed-events binning policy
7373 SliceCache cache;
@@ -209,24 +209,24 @@ struct ThreePartCorr {
209209 QARegistry.fill (HIST (" hTOFProton" ), track.pt (), track.tofNSigmaPr ());
210210 }
211211
212- A_PID = TrackPID ( track);
213- if ( A_PID[ 1 ] < 4.0 ) {
212+ if ( TrackFilters ( track)) {
213+ A_PID = TrackPID (track);
214214 QARegistry.fill (HIST (" hTrackPt" ), track.pt ());
215215 QARegistry.fill (HIST (" hTrackEta" ), track.eta ());
216216 QARegistry.fill (HIST (" hTrackPhi" ), track.phi ());
217- QARegistry.fill (HIST (" hdEdx" ), track.p (), track.tpcSignal ());
218- QARegistry.fill (HIST (" hBeta" ), track.p (), track.beta ());
217+ QARegistry.fill (HIST (" hdEdx" ), track.pt (), track.tpcSignal ());
218+ QARegistry.fill (HIST (" hBeta" ), track.pt (), track.beta ());
219219 if (A_PID[0 ] == 0.0 ) { // Pions
220- QARegistry.fill (HIST (" hdEdxPion" ), track.p (), track.tpcSignal ());
221- QARegistry.fill (HIST (" hBetaPion" ), track.p (), track.beta ());
220+ QARegistry.fill (HIST (" hdEdxPion" ), track.pt (), track.tpcSignal ());
221+ QARegistry.fill (HIST (" hBetaPion" ), track.pt (), track.beta ());
222222 QARegistry.fill (HIST (" hNSigmaPion" ), track.tpcNSigmaPi (), track.tofNSigmaPi ());
223223 } else if (A_PID[0 ] == 1.0 ) { // Kaons
224- QARegistry.fill (HIST (" hdEdxKaon" ), track.p (), track.tpcSignal ());
225- QARegistry.fill (HIST (" hBetaKaon" ), track.p (), track.beta ());
224+ QARegistry.fill (HIST (" hdEdxKaon" ), track.pt (), track.tpcSignal ());
225+ QARegistry.fill (HIST (" hBetaKaon" ), track.pt (), track.beta ());
226226 QARegistry.fill (HIST (" hNSigmaKaon" ), track.tpcNSigmaKa (), track.tofNSigmaKa ());
227227 } else if (A_PID[0 ] == 2.0 ) { // Protons
228- QARegistry.fill (HIST (" hdEdxProton" ), track.p (), track.tpcSignal ());
229- QARegistry.fill (HIST (" hBetaProton" ), track.p (), track.beta ());
228+ QARegistry.fill (HIST (" hdEdxProton" ), track.pt (), track.tpcSignal ());
229+ QARegistry.fill (HIST (" hBetaProton" ), track.pt (), track.beta ());
230230 QARegistry.fill (HIST (" hNSigmaProton" ), track.tpcNSigmaPr (), track.tofNSigmaPr ());
231231 }
232232 }
@@ -247,8 +247,8 @@ struct ThreePartCorr {
247247 }
248248
249249 for (const auto & associate : tracks) {
250- if (TrackFilters (trigger, associate)) {
251- if (FakeV0Filter (trigger, associate)) {
250+ if (TrackFilters (associate)) {
251+ if (CorrelationFilters (trigger, associate) && FakeV0Filter (trigger, associate)) {
252252
253253 A_PID = TrackPID (associate);
254254 DeltaPhi = DeltaPhiShift (trigger.phi (), associate.phi ());
@@ -285,8 +285,8 @@ struct ThreePartCorr {
285285 // Start of the Mixed-events Correlations
286286 for (const auto & [coll_1, v0_1, coll_2, track_2] : pair) {
287287 for (const auto & [trigger, associate] : soa::combinations (soa::CombinationsFullIndexPolicy (v0_1, track_2))) {
288- if (V0Filters (trigger) && TrackFilters (trigger, associate)) {
289- if (FakeV0Filter (trigger, associate)) {
288+ if (V0Filters (trigger) && TrackFilters (associate)) {
289+ if (CorrelationFilters (trigger, associate) && FakeV0Filter (trigger, associate)) {
290290
291291 T_Sign = V0Sign (trigger);
292292 if (T_Sign == 1 ) {
@@ -363,65 +363,65 @@ struct ThreePartCorr {
363363 continue ;
364364 }
365365
366- auto particle = track. mcParticle ();
367- if (particle. isPhysicalPrimary ()) {
368-
369- // Efficiency - Reconstructed
370- MCRegistry. fill ( HIST ( " hReconstructed " ), track. pt ());
371- if (particle. pdgCode () == kPiPlus ) { // Pos pions
372- MCRegistry. fill ( HIST ( " hRecPionP " ), track. pt ());
373- } else if (particle. pdgCode () == kPiMinus ) { // Neg pions
374- MCRegistry. fill ( HIST ( " hRecPionN " ), track. pt ());
375- } else if (particle. pdgCode () == kKPlus ) { // Pos kaons
376- MCRegistry. fill ( HIST ( " hRecKaonP " ), track. pt ());
377- } else if (particle. pdgCode () == kKMinus ) { // Neg kaons
378- MCRegistry. fill ( HIST ( " hRecKaonN " ), track. pt ());
379- } else if (particle. pdgCode () == kProton ) { // Pos protons
380- MCRegistry. fill ( HIST ( " hRecProtonP " ), track. pt ());
381- } else if (particle. pdgCode () == kProtonBar ) { // Neg protons
382- MCRegistry. fill ( HIST ( " hRecProtonN " ), track. pt ());
383- }
384-
385- // Purity
386- A_PID = TrackPID (track);
387- if ( A_PID[ 1 ] < 4.0 ) {
388-
389- if (track.sign () > 0 ) { // Positive tracks
390- if (A_PID[0 ] == 0.0 ) { // Pions
391- MCRegistry.fill (HIST (" hSelectPionP" ), track.pt ());
392- if (particle.pdgCode () == kPiPlus ) {
393- MCRegistry.fill (HIST (" hTrueSelectPionP" ), track.pt ());
394- }
395- } else if (A_PID[0 ] == 1.0 ) { // Kaons
396- MCRegistry.fill (HIST (" hSelectKaonP" ), track.pt ());
397- if (particle.pdgCode () == kKPlus ) {
398- MCRegistry.fill (HIST (" hTrueSelectKaonP" ), track.pt ());
399- }
400- } else if (A_PID[0 ] == 2.0 ) { // Protons
401- MCRegistry.fill (HIST (" hSelectProtonP" ), track.pt ());
402- if (particle.pdgCode () == kProton ) {
403- MCRegistry.fill (HIST (" hTrueSelectProtonP" ), track.pt ());
404- }
405- }
406- } else if (track.sign () < 0 ) { // Negative tracks
407- if (A_PID[0 ] == 0.0 ) { // Pions
408- MCRegistry.fill (HIST (" hSelectPionN" ), track.pt ());
409- if (particle.pdgCode () == kPiMinus ) {
410- MCRegistry.fill (HIST (" hTrueSelectPionN" ), track.pt ());
411- }
412- } else if (A_PID[0 ] == 1.0 ) { // Kaons
413- MCRegistry.fill (HIST (" hSelectKaonN" ), track.pt ());
414- if (particle.pdgCode () == kKMinus ) {
415- MCRegistry.fill (HIST (" hTrueSelectKaonN" ), track.pt ());
416- }
417- } else if (A_PID[0 ] == 2.0 ) { // Protons
418- MCRegistry.fill (HIST (" hSelectProtonN" ), track.pt ());
419- if (particle.pdgCode () == kProtonBar ) {
420- MCRegistry.fill (HIST (" hTrueSelectProtonN" ), track.pt ());
421- }
422- }
423- }
424- }
366+ if ( TrackFilters (track)) {
367+ auto particle = track. mcParticle ();
368+ if (particle. isPhysicalPrimary ()) {
369+
370+ // Efficiency - Reconstructed
371+ MCRegistry. fill ( HIST ( " hReconstructed " ), track. pt ());
372+ if (particle. pdgCode () == kPiPlus ) { // Pos pions
373+ MCRegistry. fill ( HIST ( " hRecPionP " ), track. pt ());
374+ } else if (particle. pdgCode () == kPiMinus ) { // Neg pions
375+ MCRegistry. fill ( HIST ( " hRecPionN " ), track. pt ());
376+ } else if (particle. pdgCode () == kKPlus ) { // Pos kaons
377+ MCRegistry. fill ( HIST ( " hRecKaonP " ), track. pt ());
378+ } else if (particle. pdgCode () == kKMinus ) { // Neg kaons
379+ MCRegistry. fill ( HIST ( " hRecKaonN " ), track. pt ());
380+ } else if (particle. pdgCode () == kProton ) { // Pos protons
381+ MCRegistry. fill ( HIST ( " hRecProtonP " ), track. pt ());
382+ } else if (particle. pdgCode () == kProtonBar ) { // Neg protons
383+ MCRegistry. fill ( HIST ( " hRecProtonN " ), track. pt ());
384+ }
385+
386+ // Purity (PID)
387+ A_PID = TrackPID (track);
388+
389+ if (track.sign () > 0 ) { // Positive tracks
390+ if (A_PID[0 ] == 0.0 ) { // Pions
391+ MCRegistry.fill (HIST (" hSelectPionP" ), track.pt ());
392+ if (particle.pdgCode () == kPiPlus ) {
393+ MCRegistry.fill (HIST (" hTrueSelectPionP" ), track.pt ());
394+ }
395+ } else if (A_PID[0 ] == 1.0 ) { // Kaons
396+ MCRegistry.fill (HIST (" hSelectKaonP" ), track.pt ());
397+ if (particle.pdgCode () == kKPlus ) {
398+ MCRegistry.fill (HIST (" hTrueSelectKaonP" ), track.pt ());
399+ }
400+ } else if (A_PID[0 ] == 2.0 ) { // Protons
401+ MCRegistry.fill (HIST (" hSelectProtonP" ), track.pt ());
402+ if (particle.pdgCode () == kProton ) {
403+ MCRegistry.fill (HIST (" hTrueSelectProtonP" ), track.pt ());
404+ }
405+ }
406+ } else if (track.sign () < 0 ) { // Negative tracks
407+ if (A_PID[0 ] == 0.0 ) { // Pions
408+ MCRegistry.fill (HIST (" hSelectPionN" ), track.pt ());
409+ if (particle.pdgCode () == kPiMinus ) {
410+ MCRegistry.fill (HIST (" hTrueSelectPionN" ), track.pt ());
411+ }
412+ } else if (A_PID[0 ] == 1.0 ) { // Kaons
413+ MCRegistry.fill (HIST (" hSelectKaonN" ), track.pt ());
414+ if (particle.pdgCode () == kKMinus ) {
415+ MCRegistry.fill (HIST (" hTrueSelectKaonN" ), track.pt ());
416+ }
417+ } else if (A_PID[0 ] == 2.0 ) { // Protons
418+ MCRegistry.fill (HIST (" hSelectProtonN" ), track.pt ());
419+ if (particle.pdgCode () == kProtonBar ) {
420+ MCRegistry.fill (HIST (" hTrueSelectProtonN" ), track.pt ());
421+ }
422+ }
423+ }
424+ }
425425 }
426426 }
427427 // End of the Monte-Carlo reconstructed QA
@@ -480,34 +480,31 @@ struct ThreePartCorr {
480480
481481 static Double_t ID[2 ]; // {PID, NSigma}
482482
483- Double_t NSigmaTPC[3 ], NSigma[3 ];
484- Double_t NSigmaTOF[3 ] = {0.0 , 0.0 , 0.0 };
485- NSigmaTPC[0 ] = Track.tpcNSigmaPi ();
486- NSigmaTPC[1 ] = Track.tpcNSigmaKa ();
487- NSigmaTPC[2 ] = Track.tpcNSigmaPr ();
488- if (Track.hasTOF ()) {
489- NSigmaTOF[0 ] = Track.tofNSigmaPi ();
490- NSigmaTOF[1 ] = Track.tofNSigmaKa ();
491- NSigmaTOF[2 ] = Track.tofNSigmaPr ();
492- }
483+ Double_t NSigma[3 ];
484+ Double_t NSigmaTOF[3 ];
485+ NSigmaTOF[0 ] = Track.tofNSigmaPi ();
486+ NSigmaTOF[1 ] = Track.tofNSigmaKa ();
487+ NSigmaTOF[2 ] = Track.tofNSigmaPr ();
493488
494- NSigma[0 ] = TMath::Sqrt ( pow (NSigmaTPC[ 0 ], 2 ) + pow ( NSigmaTOF[0 ], 2 ) );
495- NSigma[1 ] = TMath::Sqrt ( pow (NSigmaTPC[ 1 ], 2 ) + pow ( NSigmaTOF[1 ], 2 ) );
496- NSigma[2 ] = TMath::Sqrt ( pow (NSigmaTPC[ 2 ], 2 ) + pow ( NSigmaTOF[2 ], 2 ) );
489+ NSigma[0 ] = TMath::Abs ( NSigmaTOF[0 ]);
490+ NSigma[1 ] = TMath::Abs ( NSigmaTOF[1 ]);
491+ NSigma[2 ] = TMath::Abs ( NSigmaTOF[2 ]);
497492
498493 if (NSigma[0 ] <= std::min (NSigma[1 ], NSigma[2 ])) { // Pions
499494 ID[0 ] = 0.0 ;
500- ID[1 ] = NSigma [0 ];
495+ ID[1 ] = NSigmaTOF [0 ];
501496 } else if (NSigma[1 ] <= std::min (NSigma[0 ], NSigma[2 ])) { // Kaons
502497 ID[0 ] = 1.0 ;
503- ID[1 ] = NSigma [1 ];
504- } else if (NSigma[2 ] <= std::min (NSigma[0 ], NSigma[1 ])) { // Protons
498+ ID[1 ] = NSigmaTOF [1 ];
499+ } else if (NSigma[2 ] < std::min (NSigma[0 ], NSigma[1 ])) { // Protons
505500 ID[0 ] = 2.0 ;
506- ID[1 ] = NSigma [2 ];
501+ ID[1 ] = NSigmaTOF [2 ];
507502 }
508503
509504 return ID;
510505 }
506+
507+ // ================================================================================================================================================================================================================
511508
512509 template <class V0Cand >
513510 Bool_t V0Filters (const V0Cand& V0)
@@ -528,14 +525,83 @@ struct ThreePartCorr {
528525 return kTRUE ;
529526 }
530527
531- template <class V0Cand , class TrackCand >
532- Bool_t TrackFilters (const V0Cand& V0, const TrackCand& Track)
528+ template <class TrackCand >
529+ Bool_t TrackFilters (const TrackCand& Track)
533530 {
534531
535- if (Track.globalIndex () == V0. posTrackId () || Track. globalIndex () == V0. negTrackId ()) {
532+ if (! Track.hasTOF ()) {
536533 return kFALSE ;
537534 }
538- if (TrackPID (Track)[1 ] > 4.0 ) {
535+
536+ if (TrackPID (Track)[0 ] == 0.0 ) { // Pions
537+ if (TMath::Abs (Track.tpcNSigmaPi ()) > 4.0 ) {
538+ return kFALSE ;
539+ }
540+ if (Track.pt () < 0.3 ) {
541+ return kFALSE ;
542+ } else if (Track.pt () > 0.3 && Track.pt () < 1.5 ) {
543+ if (TMath::Abs (TrackPID (Track)[1 ]) > 4.0 ) {
544+ return kFALSE ;
545+ }
546+ } else if (Track.pt () > 1.5 && Track.pt () < 2.3 ) {
547+ if (TrackPID (Track)[1 ] < -4.0 || TrackPID (Track)[1 ] > 0.0 ) {
548+ return kFALSE ;
549+ }
550+ } else if (Track.pt () > 2.3 ) {
551+ return kFALSE ;
552+ }
553+
554+ } else if (TrackPID (Track)[0 ] == 1.0 ) { // Kaons
555+ if (TMath::Abs (Track.tpcNSigmaKa ()) > 4.0 ) {
556+ return kFALSE ;
557+ }
558+ if (Track.pt () < 0.5 ) {
559+ return kFALSE ;
560+ } else if (Track.pt () > 0.5 && Track.pt () < 1.5 ) {
561+ if (TMath::Abs (TrackPID (Track)[1 ]) > 4.0 ) {
562+ return kFALSE ;
563+ }
564+ } else if (Track.pt () > 1.5 && Track.pt () < 2.0 ) {
565+ if (TrackPID (Track)[1 ] < -2.0 || TrackPID (Track)[1 ] > 4.0 ) {
566+ return kFALSE ;
567+ }
568+ } else if (Track.pt () > 2.0 && Track.pt () < 2.5 ) {
569+ if (TrackPID (Track)[1 ] < 0.0 || TrackPID (Track)[1 ] > 4.0 ) {
570+ return kFALSE ;
571+ }
572+ } else if (Track.pt () > 2.5 ) {
573+ return kFALSE ;
574+ }
575+
576+ } else if (TrackPID (Track)[0 ] == 2.0 ) { // Protons
577+ if (TMath::Abs (Track.tpcNSigmaPr ()) > 4.0 ) {
578+ return kFALSE ;
579+ }
580+ if (Track.pt () < 0.5 ) {
581+ return kFALSE ;
582+ } else if (Track.pt () > 0.5 && Track.pt () < 0.7 ) {
583+ if (TrackPID (Track)[1 ] < -2.0 || TrackPID (Track)[1 ] > 4.0 ) {
584+ return kFALSE ;
585+ }
586+ } else if (Track.pt () > 0.7 && Track.pt () < 2.5 ) {
587+ if (TMath::Abs (TrackPID (Track)[1 ]) > 4.0 ) {
588+ return kFALSE ;
589+ }
590+ } else if (Track.pt () > 2.5 ) {
591+ if (TrackPID (Track)[1 ] < -2.0 || TrackPID (Track)[1 ] > 4.0 ) {
592+ return kFALSE ;
593+ }
594+ }
595+ }
596+
597+ return kTRUE ;
598+ }
599+
600+ template <class V0Cand , class TrackCand >
601+ Bool_t CorrelationFilters (const V0Cand& V0, const TrackCand& Track)
602+ {
603+
604+ if (Track.globalIndex () == V0.posTrackId () || Track.globalIndex () == V0.negTrackId ()) {
539605 return kFALSE ;
540606 }
541607
0 commit comments