3737#include < ReconstructionDataFormats/PID.h>
3838
3939#include < TComplex.h>
40- #include < TDatabasePDG.h>
4140#include < TF1.h>
4241#include < THn.h>
4342#include < TList.h>
@@ -546,18 +545,31 @@ struct V0ptHadPiKaProt {
546545 return false ;
547546 int flag = 0 ; // ! pid check main flag
548547
548+ float partNsigmaTpcOrItsPi = 0.0 ;
549+ float partNsigmaTpcOrItsKa = 0.0 ;
550+ float partNsigmaTpcOrItsPr = 0.0 ;
551+ if (cfgUseItsPID) {
552+ partNsigmaTpcOrItsPi = itsResponse.nSigmaITS <o2::track::PID::Pion>(candidate);
553+ partNsigmaTpcOrItsKa = itsResponse.nSigmaITS <o2::track::PID::Kaon>(candidate);
554+ partNsigmaTpcOrItsPr = itsResponse.nSigmaITS <o2::track::PID::Proton>(candidate);
555+ } else {
556+ partNsigmaTpcOrItsPi = candidate.tpcNSigmaPi ();
557+ partNsigmaTpcOrItsKa = candidate.tpcNSigmaKa ();
558+ partNsigmaTpcOrItsPr = candidate.tpcNSigmaPr ();
559+ }
560+
549561 if (candidate.pt () > cfgCutPtLower && candidate.pt () <= cfgCutPtUpperTPC) {
550- if (!candidate.hasTOF () && std::abs (candidate. tpcNSigmaPr () ) < cfgnSigmaCutTPC) {
562+ if (!candidate.hasTOF () && std::abs (partNsigmaTpcOrItsPr ) < cfgnSigmaCutTPC) {
551563 flag = 1 ;
552564 }
553- if (candidate.hasTOF () && std::abs (candidate. tpcNSigmaPr () ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaPr ()) < cfgnSigmaCutTOF) {
565+ if (candidate.hasTOF () && std::abs (partNsigmaTpcOrItsPr ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaPr ()) < cfgnSigmaCutTOF) {
554566 flag = 1 ;
555567 }
556568 }
557569 if (candidate.hasTOF () && candidate.pt () > cfgCutPtUpperTPC && candidate.pt () < cfgCutPtUpperPID) {
558- const float combNSigmaPr = std::sqrt (std::pow (candidate. tpcNSigmaPr () , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
559- const float combNSigmaPi = std::sqrt (std::pow (candidate. tpcNSigmaPi () , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
560- const float combNSigmaKa = std::sqrt (std::pow (candidate. tpcNSigmaKa () , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
570+ const float combNSigmaPr = std::sqrt (std::pow (partNsigmaTpcOrItsPr , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
571+ const float combNSigmaPi = std::sqrt (std::pow (partNsigmaTpcOrItsPi , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
572+ const float combNSigmaKa = std::sqrt (std::pow (partNsigmaTpcOrItsKa , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
561573
562574 int flag2 = 0 ;
563575 if (combNSigmaPr < cfgnSigmaOtherParticles)
@@ -568,8 +580,8 @@ struct V0ptHadPiKaProt {
568580 flag2 += 1 ;
569581
570582 if (cfgUseNewSeperationPid) {
571- if (std::abs (candidate. tpcNSigmaPr () ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaPr ()) < cfgnSigmaCutTOFHigherPt) {
572- if (!(flag2 > 1 ) && std::abs (candidate. tpcNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (candidate. tpcNSigmaKa () ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaKa ()) > cfgnSigmaSeperationCut)
583+ if (std::abs (partNsigmaTpcOrItsPr ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaPr ()) < cfgnSigmaCutTOFHigherPt) {
584+ if (!(flag2 > 1 ) && std::abs (partNsigmaTpcOrItsPi) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (partNsigmaTpcOrItsKa ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaKa ()) > cfgnSigmaSeperationCut)
573585 flag = 1 ;
574586 }
575587 } else {
@@ -600,18 +612,31 @@ struct V0ptHadPiKaProt {
600612 return false ;
601613 int flag = 0 ; // ! pid check main flag
602614
615+ float partNsigmaTpcOrItsPi = 0.0 ;
616+ float partNsigmaTpcOrItsKa = 0.0 ;
617+ float partNsigmaTpcOrItsPr = 0.0 ;
618+ if (cfgUseItsPID) {
619+ partNsigmaTpcOrItsPi = itsResponse.nSigmaITS <o2::track::PID::Pion>(candidate);
620+ partNsigmaTpcOrItsKa = itsResponse.nSigmaITS <o2::track::PID::Kaon>(candidate);
621+ partNsigmaTpcOrItsPr = itsResponse.nSigmaITS <o2::track::PID::Proton>(candidate);
622+ } else {
623+ partNsigmaTpcOrItsPi = candidate.tpcNSigmaPi ();
624+ partNsigmaTpcOrItsKa = candidate.tpcNSigmaKa ();
625+ partNsigmaTpcOrItsPr = candidate.tpcNSigmaPr ();
626+ }
627+
603628 if (candidate.pt () > cfgCutPtLower && candidate.pt () <= cfgCutPtUpperTPC) {
604- if (!candidate.hasTOF () && std::abs (candidate. tpcNSigmaPi () ) < cfgnSigmaCutTPC) {
629+ if (!candidate.hasTOF () && std::abs (partNsigmaTpcOrItsPi ) < cfgnSigmaCutTPC) {
605630 flag = 1 ;
606631 }
607- if (candidate.hasTOF () && std::abs (candidate. tpcNSigmaPi () ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaPi ()) < cfgnSigmaCutTOF) {
632+ if (candidate.hasTOF () && std::abs (partNsigmaTpcOrItsPi ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaPi ()) < cfgnSigmaCutTOF) {
608633 flag = 1 ;
609634 }
610635 }
611636 if (candidate.hasTOF () && candidate.pt () > cfgCutPtUpperTPC && candidate.pt () < cfgCutPtUpperPID) {
612- const float combNSigmaPr = std::sqrt (std::pow (candidate. tpcNSigmaPr () , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
613- const float combNSigmaPi = std::sqrt (std::pow (candidate. tpcNSigmaPi () , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
614- const float combNSigmaKa = std::sqrt (std::pow (candidate. tpcNSigmaKa () , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
637+ const float combNSigmaPr = std::sqrt (std::pow (partNsigmaTpcOrItsPr , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
638+ const float combNSigmaPi = std::sqrt (std::pow (partNsigmaTpcOrItsPi , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
639+ const float combNSigmaKa = std::sqrt (std::pow (partNsigmaTpcOrItsKa , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
615640
616641 int flag2 = 0 ;
617642 if (combNSigmaPr < cfgnSigmaOtherParticles)
@@ -622,8 +647,8 @@ struct V0ptHadPiKaProt {
622647 flag2 += 1 ;
623648
624649 if (cfgUseNewSeperationPid) {
625- if (std::abs (candidate. tpcNSigmaPi () ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaPi ()) < cfgnSigmaCutTOFHigherPt) {
626- if (!(flag2 > 1 ) && std::abs (candidate. tpcNSigmaKa ()) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaKa ()) > cfgnSigmaSeperationCut && std::abs (candidate. tpcNSigmaPr () ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPr ()) > cfgnSigmaSeperationCut)
650+ if (std::abs (partNsigmaTpcOrItsPi ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaPi ()) < cfgnSigmaCutTOFHigherPt) {
651+ if (!(flag2 > 1 ) && std::abs (partNsigmaTpcOrItsKa) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaKa ()) > cfgnSigmaSeperationCut && std::abs (partNsigmaTpcOrItsPr ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPr ()) > cfgnSigmaSeperationCut)
627652 flag = 1 ;
628653 }
629654 } else {
@@ -654,18 +679,31 @@ struct V0ptHadPiKaProt {
654679 return false ;
655680 int flag = 0 ; // ! pid check main flag
656681
682+ float partNsigmaTpcOrItsPi = 0.0 ;
683+ float partNsigmaTpcOrItsKa = 0.0 ;
684+ float partNsigmaTpcOrItsPr = 0.0 ;
685+ if (cfgUseItsPID) {
686+ partNsigmaTpcOrItsPi = itsResponse.nSigmaITS <o2::track::PID::Pion>(candidate);
687+ partNsigmaTpcOrItsKa = itsResponse.nSigmaITS <o2::track::PID::Kaon>(candidate);
688+ partNsigmaTpcOrItsPr = itsResponse.nSigmaITS <o2::track::PID::Proton>(candidate);
689+ } else {
690+ partNsigmaTpcOrItsPi = candidate.tpcNSigmaPi ();
691+ partNsigmaTpcOrItsKa = candidate.tpcNSigmaKa ();
692+ partNsigmaTpcOrItsPr = candidate.tpcNSigmaPr ();
693+ }
694+
657695 if (candidate.pt () > cfgCutPtLower && candidate.pt () <= cfgCutPtUpperTPC) {
658- if (!candidate.hasTOF () && std::abs (candidate. tpcNSigmaKa () ) < cfgnSigmaCutTPC) {
696+ if (!candidate.hasTOF () && std::abs (partNsigmaTpcOrItsKa ) < cfgnSigmaCutTPC) {
659697 flag = 1 ;
660698 }
661- if (candidate.hasTOF () && std::abs (candidate. tpcNSigmaKa () ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaKa ()) < cfgnSigmaCutTOF) {
699+ if (candidate.hasTOF () && std::abs (partNsigmaTpcOrItsKa ) < cfgnSigmaCutTPC && std::abs (candidate.tofNSigmaKa ()) < cfgnSigmaCutTOF) {
662700 flag = 1 ;
663701 }
664702 }
665703 if (candidate.hasTOF () && candidate.pt () > cfgCutPtUpperTPC && candidate.pt () < cfgCutPtUpperPID) {
666- const float combNSigmaPr = std::sqrt (std::pow (candidate. tpcNSigmaPr () , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
667- const float combNSigmaPi = std::sqrt (std::pow (candidate. tpcNSigmaPi () , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
668- const float combNSigmaKa = std::sqrt (std::pow (candidate. tpcNSigmaKa () , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
704+ const float combNSigmaPr = std::sqrt (std::pow (partNsigmaTpcOrItsPr , 2.0 ) + std::pow (candidate.tofNSigmaPr (), 2.0 ));
705+ const float combNSigmaPi = std::sqrt (std::pow (partNsigmaTpcOrItsPi , 2.0 ) + std::pow (candidate.tofNSigmaPi (), 2.0 ));
706+ const float combNSigmaKa = std::sqrt (std::pow (partNsigmaTpcOrItsKa , 2.0 ) + std::pow (candidate.tofNSigmaKa (), 2.0 ));
669707
670708 int flag2 = 0 ;
671709 if (combNSigmaPr < cfgnSigmaOtherParticles)
@@ -676,8 +714,8 @@ struct V0ptHadPiKaProt {
676714 flag2 += 1 ;
677715
678716 if (cfgUseNewSeperationPid) {
679- if (std::abs (candidate. tpcNSigmaKa () ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaKa ()) < cfgnSigmaCutTOFHigherPt) {
680- if (!(flag2 > 1 ) && std::abs (candidate. tpcNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (candidate. tpcNSigmaPr () ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPr ()) > cfgnSigmaSeperationCut)
717+ if (std::abs (partNsigmaTpcOrItsKa ) < cfgnSigmaCutTPCHigherPt && std::abs (candidate.tofNSigmaKa ()) < cfgnSigmaCutTOFHigherPt) {
718+ if (!(flag2 > 1 ) && std::abs (partNsigmaTpcOrItsPi) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPi ()) > cfgnSigmaSeperationCut && std::abs (partNsigmaTpcOrItsPr ) > cfgnSigmaSeperationCut && std::abs (candidate.tofNSigmaPr ()) > cfgnSigmaSeperationCut)
681719 flag = 1 ;
682720 }
683721 } else {
@@ -1335,27 +1373,29 @@ struct V0ptHadPiKaProt {
13351373 double trkEta = track.eta ();
13361374 double trkPhi = track.phi ();
13371375
1376+ double effweight = 1.0 ;
1377+ if (cfgLoadPtEffWeights) {
1378+ effweight = 1.0 / getEffAllCharged (track); // NUE weight
1379+ }
1380+
13381381 // inclusive charged particles
13391382 if (track.sign () != 0 ) {
13401383 if (trkEta < cfgCutEtaLeft) {
13411384 fPtProfileHad ->Fill (trkPt);
1342- pTsumEtaLeftHad += trkPt;
1343- nSumEtaLeftHad += 1.0 ;
1385+ pTsumEtaLeftHad += trkPt * effweight ;
1386+ nSumEtaLeftHad += effweight ;
13441387 }
13451388 if (trkEta > cfgCutEtaRight) {
1346- pTsumEtaRightHad += trkPt;
1347- nSumEtaRightHad += 1.0 ;
1389+ pTsumEtaRightHad += trkPt * effweight ;
1390+ nSumEtaRightHad += effweight ;
13481391 }
13491392 }
13501393
13511394 double phiweight = 1.0 ;
13521395 if (cfgLoadPhiWeights) {
13531396 phiweight = getPhiWeight (track, coll.posZ ()); // NUA weight
13541397 }
1355- double effweight = 1.0 ;
1356- if (cfgLoadPtEffWeights) {
1357- effweight = 1.0 / getEffAllCharged (track); // NUE weight
1358- }
1398+
13591399 double weight = phiweight * effweight;
13601400
13611401 if (track.sign () != 0 && trkPt < cfgCutPtMaxForV02) {
@@ -1433,34 +1473,34 @@ struct V0ptHadPiKaProt {
14331473 histos.fill (HIST (" h2DnsigmaProtonTpcVsTofAfterCut" ), trkPt, nSigmaTpcProt, nSigmaTofProt);
14341474 }
14351475
1476+ double effweightPion = 1.0 ;
1477+ double effweightKaon = 1.0 ;
1478+ double effweightProton = 1.0 ;
1479+ if (cfgLoadPtEffWeights) {
1480+ effweightPion = 1.0 / getEffPion (track); // NUE weight for pion
1481+ effweightKaon = 1.0 / getEffKaon (track); // NUE weight for kaon
1482+ effweightProton = 1.0 / getEffProton (track); // NUE weight for proton
1483+ }
1484+
14361485 if (track.sign () != 0 ) {
14371486 if (trkPt < cfgCutPtUpperPID) {
14381487 if (trkEta < cfgCutEtaLeft) {
14391488 if (isPion) {
1440- fPtProfilePi ->Fill (trkPt);
1441- nSumEtaLeftPi += 1.0 ;
1489+ fPtProfilePi ->Fill (trkPt, effweightPion );
1490+ nSumEtaLeftPi += effweightPion ;
14421491 }
14431492 if (isKaon) {
1444- fPtProfileKa ->Fill (trkPt);
1445- nSumEtaLeftKa += 1.0 ;
1493+ fPtProfileKa ->Fill (trkPt, effweightKaon );
1494+ nSumEtaLeftKa += effweightKaon ;
14461495 }
14471496 if (isProton && trkPt > cfgCutPtLowerProt) {
1448- fPtProfileProt ->Fill (trkPt);
1449- nSumEtaLeftProt += 1.0 ;
1497+ fPtProfileProt ->Fill (trkPt, effweightProton );
1498+ nSumEtaLeftProt += effweightProton ;
14501499 }
14511500 }
14521501 }
14531502 }
14541503
1455- double effweightPion = 1.0 ;
1456- double effweightKaon = 1.0 ;
1457- double effweightProton = 1.0 ;
1458- if (cfgLoadPtEffWeights) {
1459- effweightPion = 1.0 / getEffPion (track); // NUE weight for pion
1460- effweightKaon = 1.0 / getEffKaon (track); // NUE weight for kaon
1461- effweightProton = 1.0 / getEffProton (track); // NUE weight for proton
1462- }
1463-
14641504 // fill subevent B for ***identified particles'*** f(pT) in v02(pT)
14651505 if (track.sign () != 0 && trkPt < cfgCutPtMaxForV02) {
14661506 if (std::abs (trkEta) < cfgCutEtaWindowB) {
0 commit comments