Skip to content

Commit 4ba00e5

Browse files
committed
[PWGCF] Changed to track PID to use TOF only and added a rudimentary pT-based PID filter
1 parent cb51b27 commit 4ba00e5

File tree

1 file changed

+161
-95
lines changed

1 file changed

+161
-95
lines changed

PWGCF/MultiparticleCorrelations/Tasks/ThreeParticleCorrelations.cxx

Lines changed: 161 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)