Skip to content

Commit e7cacf2

Browse files
prchakraalibuild
andauthored
[PWGCF] FemtoUniverse: Add kT dependent closed-pair deta-dphi* cut (#13634)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 8f72191 commit e7cacf2

File tree

2 files changed

+81
-40
lines changed

2 files changed

+81
-40
lines changed

PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -188,18 +188,22 @@ class FemtoUniverseDetaDphiStar
188188
}
189189

190190
template <typename t1>
191-
void init_kT(HistogramRegistry* registry, t1& ktbins)
191+
void init_kT(HistogramRegistry* registry, t1& ktbins, std::vector<float> ldeltaphistarcutmin, std::vector<float> ldeltaphistarcutmax, std::vector<float> ldeltaetacutmin, std::vector<float> ldeltaetacutmax)
192192
{
193193
mHistogramRegistry = registry;
194194
ktBins = ktbins;
195195

196+
cutDeltaPhiStarMaxVector = ldeltaphistarcutmax;
197+
cutDeltaPhiStarMinVector = ldeltaphistarcutmin;
198+
cutDeltaEtaMaxVector = ldeltaetacutmax;
199+
cutDeltaEtaMinVector = ldeltaetacutmin;
200+
196201
if constexpr (kPartOneType == o2::aod::femtouniverseparticle::ParticleType::kTrack && kPartTwoType == o2::aod::femtouniverseparticle::ParticleType::kTrack) {
197202
std::string dirName = static_cast<std::string>(DirNames[0]);
198203
for (int j = 0; j < static_cast<int>(ktBins.size() - 1); j++) {
199204
std::string histSuffixkT1 = std::to_string(static_cast<int>(ktBins[j] * 100.0));
200205
std::string histSuffixkT2 = std::to_string(static_cast<int>(ktBins[j + 1] * 100.0));
201206
std::string histFolderkT = "kT_" + histSuffixkT1 + "_" + histSuffixkT2 + "/";
202-
203207
histdetadphisamebeforekT[j] = mHistogramRegistry->add<TH2>((dirName + histFolderkT + "detadphidetadphiBeforeSame").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}});
204208
histdetadphimixedbeforekT[j] = mHistogramRegistry->add<TH2>((dirName + histFolderkT + "detadphidetadphiBeforeMixed").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}});
205209
histdetadphisameafterkT[j] = mHistogramRegistry->add<TH2>((dirName + histFolderkT + "detadphidetadphiAfterSame").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}});
@@ -581,7 +585,6 @@ class FemtoUniverseDetaDphiStar
581585
}
582586
}
583587

584-
/// Check if pair is close or not
585588
template <typename Part>
586589
bool isClosePairFrac(Part const& part1, Part const& part2, float lmagfield, uint8_t ChosenEventType, bool IsDphiAvgOrDist, float DistMax, float FracMax, bool CircCut)
587590
{
@@ -641,16 +644,17 @@ class FemtoUniverseDetaDphiStar
641644
}
642645
}
643646

644-
/// Templated function to access different kT directory and call addEventPair
645-
/// \param part1 particle 1
646-
/// \param part2 particle 2
647-
/// \param ChosenEventType Same or Mixed evet type
648-
/// \param maxl Maximum valie of L component of the spherical harmonics
649-
/// \param multval Multiplicity value
650-
/// \param ktval kT value
647+
/// Check if pair is close or not
651648
template <typename Part>
652-
void kTdetadphi(Part const& part1, Part const& part2, uint8_t ChosenEventType, float ktval)
649+
bool isClosePairkT(Part const& part1, Part const& part2, uint8_t ChosenEventType, float ktval, bool CircCut)
653650
{
651+
/// Track-Track combination
652+
// check if provided particles are in agreement with the class instantiation
653+
if (part1.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack || part2.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack) {
654+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar instantiation! Please provide kTrack,kTrack candidates.";
655+
return false;
656+
}
657+
654658
int ktbinval = -1;
655659
if (ktval >= ktBins[0] && ktval < ktBins[1]) {
656660
ktbinval = 0;
@@ -660,22 +664,8 @@ class FemtoUniverseDetaDphiStar
660664
ktbinval = 2;
661665
} else if (ktval >= ktBins[3] && ktval < ktBins[4]) {
662666
ktbinval = 3;
663-
} else {
664-
return;
665667
}
666-
isClosePairkT(part1, part2, ChosenEventType, ktbinval);
667-
}
668668

669-
/// Check if pair is close or not
670-
template <typename Part>
671-
void isClosePairkT(Part const& part1, Part const& part2, uint8_t ChosenEventType, int ktbinval)
672-
{
673-
/// Track-Track combination
674-
// check if provided particles are in agreement with the class instantiation
675-
if (part1.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack || part2.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack) {
676-
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar instantiation! Please provide kTrack,kTrack candidates.";
677-
return;
678-
}
679669
auto deta = part1.eta() - part2.eta();
680670
auto dphiAvg = averagePhiStar(part1, part2, 0);
681671
if (ChosenEventType == femto_universe_container::EventType::same) {
@@ -686,7 +676,7 @@ class FemtoUniverseDetaDphiStar
686676
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
687677
}
688678

689-
if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMax, 2) > 1.) {
679+
if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMaxVector[ktbinval], 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMaxVector[ktbinval], 2) > 1.) {
690680
if (ChosenEventType == femto_universe_container::EventType::same) {
691681
histdetadphisameafterkT[ktbinval]->Fill(deta, dphiAvg);
692682
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
@@ -695,6 +685,21 @@ class FemtoUniverseDetaDphiStar
695685
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
696686
}
697687
}
688+
689+
if (CircCut && (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMaxVector[ktbinval], 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMaxVector[ktbinval], 2) < 1.)) {
690+
return true;
691+
} else if (!CircCut && (dphiAvg > cutDeltaPhiStarMinVector[ktbinval]) && (dphiAvg < cutDeltaPhiStarMaxVector[ktbinval]) && (deta > cutDeltaEtaMinVector[ktbinval]) && (deta < cutDeltaEtaMaxVector[ktbinval])) {
692+
return true;
693+
} else {
694+
if (ChosenEventType == femto_universe_container::EventType::same) {
695+
histdetadphisameafterkT[ktbinval]->Fill(deta, dphiAvg);
696+
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
697+
histdetadphimixedafterkT[ktbinval]->Fill(deta, dphiAvg);
698+
} else {
699+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
700+
}
701+
return false;
702+
}
698703
}
699704

700705
/// Check if pair is close or not
@@ -770,6 +775,12 @@ class FemtoUniverseDetaDphiStar
770775
float cutDeltaPhiStarMin;
771776
float cutDeltaEtaMax;
772777
float cutDeltaEtaMin;
778+
779+
std::vector<float> cutDeltaPhiStarMaxVector;
780+
std::vector<float> cutDeltaPhiStarMinVector;
781+
std::vector<float> cutDeltaEtaMaxVector;
782+
std::vector<float> cutDeltaEtaMinVector;
783+
773784
float magfield;
774785
bool plotForEveryRadii = false;
775786
float cutPhiInvMassLow;

PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackSpherHarMultKtExtended.cxx

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,14 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
8484
Configurable<bool> ConfIsCPR{"ConfIsCPR", true, "Close Pair Rejection"};
8585
Configurable<bool> ConfCPRPlotPerRadii{"ConfCPRPlotPerRadii", false, "Plot CPR per radii"};
8686
Configurable<float> ConfCPRdeltaPhiCutMax{"ConfCPRdeltaPhiCutMax", 0.0, "Delta Phi max cut for Close Pair Rejection"};
87-
Configurable<float> ConfCPRdeltaPhiCutMin{"ConfCPRdeltaPhiCutMin", 0.0, "Delta Phi min cut for Close Pair Rejection"};
88-
Configurable<float> ConfCPRdeltaEtaCutMax{"ConfCPRdeltaEtaCutMax", 0.0, "Delta Eta max cut for Close Pair Rejection"};
89-
Configurable<float> ConfCPRdeltaEtaCutMin{"ConfCPRdeltaEtaCutMin", 0.0, "Delta Eta min cut for Close Pair Rejection"};
87+
Configurable<float> ConfCPRdeltaPhiCutMin{"ConfCPRdeltaPhiCutMin", 0., "Delta Phi min cut for Close Pair Rejection"};
88+
Configurable<float> ConfCPRdeltaEtaCutMax{"ConfCPRdeltaEtaCutMax", 0., "Delta Eta max cut for Close Pair Rejection"};
89+
Configurable<float> ConfCPRdeltaEtaCutMin{"ConfCPRdeltaEtaCutMin", 0., "Delta Eta min cut for Close Pair Rejection"};
90+
Configurable<std::vector<float>> ConfCPRdeltaPhiCutMaxVector{"ConfCPRdeltaPhiCutMaxVector", std::vector<float>{0.0, 0.0, 0.0, 0.0}, "Delta Phi max cut for Close Pair Rejection"};
91+
Configurable<std::vector<float>> ConfCPRdeltaPhiCutMinVector{"ConfCPRdeltaPhiCutMinVector", std::vector<float>{0.0, 0.0, 0.0, 0.0}, "Delta Phi min cut for Close Pair Rejection"};
92+
Configurable<std::vector<float>> ConfCPRdeltaEtaCutMaxVector{"ConfCPRdeltaEtaCutMaxVector", std::vector<float>{0.0, 0.0, 0.0, 0.0}, "Delta Eta max cut for Close Pair Rejection"};
93+
Configurable<std::vector<float>> ConfCPRdeltaEtaCutMinVector{"ConfCPRdeltaEtaCutMinVector", std::vector<float>{0.0, 0.0, 0.0, 0.0}, "Delta Eta min cut for Close Pair Rejection"};
94+
Configurable<bool> confIsCPRkT{"confIsCPRkT", true, "kT dependent deltaEta-deltaPhi cut for Close Pair Rejection"};
9095
Configurable<float> ConfCPRChosenRadii{"ConfCPRChosenRadii", 0.80, "Delta Eta cut for Close Pair Rejection"};
9196
Configurable<bool> confUseCCImCut{"confUseCCImCut", false, "Fill SH within specific quadrants of qout-qside"};
9297
Configurable<bool> confUse1stand3rd{"confUse1stand3rd", false, "Use first and third quadrants of qout-qside"};
@@ -97,7 +102,7 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
97102
// Filters for selecting particles (both p1 and p2)
98103
Filter trackAdditionalfilter = (nabs(aod::femtouniverseparticle::eta) < twotracksconfigs.ConfEtaMax); // example filtering on configurable
99104
using FilteredFemtoFullParticles = soa::Filtered<FemtoFullParticles>;
100-
// using FilteredFemtoFullParticles = FemtoFullParticles; //if no filtering is applied uncomment this option
105+
// using FilteredFemtoFullParticles = FemtoFullParticles; //if no filtering is applied uncomment this optionconfIsCPRkT
101106
using FemtoRecoParticles = soa::Join<aod::FDParticles, aod::FDExtParticles, aod::FDMCLabels>;
102107
using FilteredFemtoRecoParticles = soa::Filtered<FemtoRecoParticles>;
103108

@@ -454,7 +459,7 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
454459
pairCleaner.init(&qaRegistry);
455460
if (twotracksconfigs.ConfIsCPR.value) {
456461
pairCloseRejection.init(&resultRegistry, &qaRegistry, twotracksconfigs.ConfCPRdeltaPhiCutMin.value, twotracksconfigs.ConfCPRdeltaPhiCutMax.value, twotracksconfigs.ConfCPRdeltaEtaCutMin.value, twotracksconfigs.ConfCPRdeltaEtaCutMax.value, twotracksconfigs.ConfCPRChosenRadii.value, twotracksconfigs.ConfCPRPlotPerRadii.value);
457-
pairCloseRejection.init_kT(&resultRegistry, ConfKtKstarBins);
462+
pairCloseRejection.init_kT(&resultRegistry, ConfKtKstarBins, twotracksconfigs.ConfCPRdeltaPhiCutMaxVector, twotracksconfigs.ConfCPRdeltaPhiCutMinVector, twotracksconfigs.ConfCPRdeltaEtaCutMaxVector, twotracksconfigs.ConfCPRdeltaEtaCutMinVector);
458463
}
459464

460465
vPIDPartOne = trackonefilter.ConfPIDPartOne.value;
@@ -520,14 +525,24 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
520525
continue;
521526
}
522527

528+
float kT = FemtoUniverseMath::getkT(p1, mass1, p2, mass2);
529+
if (kT > ConfKtKstarBins.value.back() || kT < ConfKtKstarBins.value.front())
530+
continue;
531+
523532
if (twotracksconfigs.ConfIsCPR.value) {
524533
if (confCPRIsAtITS.value) {
525534
if (pairCloseRejection.isClosePairAtITS(p1, p2, magFieldTesla, femto_universe_container::EventType::same)) {
526535
continue;
527536
}
528537
} else {
529-
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::same, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
530-
continue;
538+
if (twotracksconfigs.confIsCPRkT) {
539+
if (pairCloseRejection.isClosePairkT(p1, p2, femto_universe_container::EventType::same, kT, confIsCircularCut)) {
540+
continue;
541+
}
542+
} else {
543+
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::same, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
544+
continue;
545+
}
531546
}
532547
}
533548
}
@@ -536,7 +551,6 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
536551
if (!pairCleaner.isCleanPair(p1, p2, parts)) {
537552
continue;
538553
}
539-
float kT = FemtoUniverseMath::getkT(p1, mass1, p2, mass2);
540554
sameEventMultCont.fillMultNumDen(p1, p2, femto_universe_sh_container::EventType::same, 2, multCol, kT, ConfIsIden);
541555
}
542556
} else {
@@ -551,15 +565,23 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
551565
}
552566

553567
float kT = FemtoUniverseMath::getkT(p1, mass1, p2, mass2);
568+
if (kT > ConfKtKstarBins.value.back() || kT < ConfKtKstarBins.value.front())
569+
continue;
570+
554571
if (twotracksconfigs.ConfIsCPR.value) {
555-
pairCloseRejection.kTdetadphi(p1, p2, femto_universe_container::EventType::same, kT);
556572
if (confCPRIsAtITS.value) {
557573
if (pairCloseRejection.isClosePairAtITS(p1, p2, magFieldTesla, femto_universe_container::EventType::same)) {
558574
continue;
559575
}
560576
} else {
561-
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::same, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
562-
continue;
577+
if (twotracksconfigs.confIsCPRkT) {
578+
if (pairCloseRejection.isClosePairkT(p1, p2, femto_universe_container::EventType::same, kT, confIsCircularCut)) {
579+
continue;
580+
}
581+
} else {
582+
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::same, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
583+
continue;
584+
}
563585
}
564586
}
565587
}
@@ -922,15 +944,23 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended {
922944
}
923945

924946
float kT = FemtoUniverseMath::getkT(p1, mass1, p2, mass2);
947+
if (kT > ConfKtKstarBins.value.back() || kT < ConfKtKstarBins.value.front())
948+
continue;
949+
925950
if (twotracksconfigs.ConfIsCPR.value) {
926-
pairCloseRejection.kTdetadphi(p1, p2, femto_universe_container::EventType::mixed, kT);
927951
if (confCPRIsAtITS.value) {
928952
if (pairCloseRejection.isClosePairAtITS(p1, p2, magFieldTesla, femto_universe_container::EventType::mixed)) {
929953
continue;
930954
}
931955
} else {
932-
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::mixed, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
933-
continue;
956+
if (twotracksconfigs.confIsCPRkT) {
957+
if (pairCloseRejection.isClosePairkT(p1, p2, femto_universe_container::EventType::mixed, kT, confIsCircularCut)) {
958+
continue;
959+
}
960+
} else {
961+
if (pairCloseRejection.isClosePairFrac(p1, p2, magFieldTesla, femto_universe_container::EventType::mixed, confCPRDphiAvgOrDist, confCPRDistMax, confCPRFracMax, confIsCircularCut)) {
962+
continue;
963+
}
934964
}
935965
}
936966
}

0 commit comments

Comments
 (0)