diff --git a/PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h b/PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h index 05e0cfb5682..f3878d03fad 100644 --- a/PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h +++ b/PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h @@ -187,8 +187,9 @@ class FemtoUniverseDetaDphiStar } } - template - void init_kT(HistogramRegistry* registry, t1& ktbins, std::vector ldeltaphistarcutmin, std::vector ldeltaphistarcutmax, std::vector ldeltaetacutmin, std::vector ldeltaetacutmax) + template + // void init_kT(HistogramRegistry* registry, t1& ktbins, std::vector ldeltaphistarcutmin, std::vector ldeltaphistarcutmax, std::vector ldeltaetacutmin, std::vector ldeltaetacutmax, std::vector ldeltaphistarcutFractionmin, std::vector ldeltaphistarcutFractionmax, std::vector ldeltaetacutFractionmin, std::vector ldeltaetacutFractionmax) + void init_kT(HistogramRegistry* registry, t1& ktbins, t2& ldeltaphistarcutmin, t2& ldeltaphistarcutmax, t2& ldeltaetacutmin, t2& ldeltaetacutmax, t2& ldeltaphistarcutFractionmin, t2& ldeltaphistarcutFractionmax, t2& ldeltaetacutFractionmin, t2& ldeltaetacutFractionmax) { mHistogramRegistry = registry; ktBins = ktbins; @@ -198,6 +199,11 @@ class FemtoUniverseDetaDphiStar cutDeltaEtaMaxVector = ldeltaetacutmax; cutDeltaEtaMinVector = ldeltaetacutmin; + cutDeltaPhiStarFractionMaxVector = ldeltaphistarcutFractionmax; + cutDeltaPhiStarFractionMinVector = ldeltaphistarcutFractionmin; + cutDeltaEtaFractionMaxVector = ldeltaetacutFractionmax; + cutDeltaEtaFractionMinVector = ldeltaetacutFractionmin; + if constexpr (kPartOneType == o2::aod::femtouniverseparticle::ParticleType::kTrack && kPartTwoType == o2::aod::femtouniverseparticle::ParticleType::kTrack) { std::string dirName = static_cast(DirNames[0]); for (int j = 1; j < static_cast(ktBins.size() - 1); j++) { @@ -208,6 +214,8 @@ class FemtoUniverseDetaDphiStar histdetadphimixedbeforekT[j] = mHistogramRegistry->add((dirName + histFolderkT + "detadphidetadphiBeforeMixed").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}}); histdetadphisameafterkT[j] = mHistogramRegistry->add((dirName + histFolderkT + "detadphidetadphiAfterSame").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}}); histdetadphimixedafterkT[j] = mHistogramRegistry->add((dirName + histFolderkT + "detadphidetadphiAfterMixed").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}}); + histdetadphisameafterFractionkT[j] = mHistogramRegistry->add((dirName + histFolderkT + "detadphidetadphiAfterFractionSame").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}}); + histdetadphimixedafterFractionkT[j] = mHistogramRegistry->add((dirName + histFolderkT + "detadphidetadphiAfterFractionMIxed").c_str(), "; #Delta #eta; #Delta #phi", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}}); } } } @@ -713,6 +721,55 @@ class FemtoUniverseDetaDphiStar } } + /// Check if pair is close or not + template + bool isClosePairFractionkT(Part const& part1, Part const& part2, uint8_t ChosenEventType, float ktval, float lmagfield, float DistMax, float FracMax) + { + /// Track-Track combination + // check if provided particles are in agreement with the class instantiation + if (part1.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack || part2.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack) { + LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar instantiation! Please provide kTrack,kTrack candidates."; + return false; + } + + int ktbinval = 1; + if (ktval >= ktBins[1] && ktval < ktBins[2]) { + ktbinval = 1; + } else if (ktval >= ktBins[2] && ktval < ktBins[3]) { + ktbinval = 2; + } else if (ktval >= ktBins[3] && ktval < ktBins[4]) { + ktbinval = 3; + } else if (ktval >= ktBins[4] && ktval < ktBins[5]) { + ktbinval = 4; + } + + magfield = lmagfield; + + auto deta = part1.eta() - part2.eta(); + auto dphiAvg = averagePhiStar(part1, part2, 0); + auto distfrac = averagePhiStarFrac(part1, part2, DistMax); + auto DeltaPhiStarMax = static_cast(cutDeltaPhiStarFractionMaxVector[ktbinval]); + auto DeltaPhiStarMin = static_cast(cutDeltaPhiStarFractionMinVector[ktbinval]); + auto DeltaEtaMax = static_cast(cutDeltaEtaFractionMaxVector[ktbinval]); + auto DeltaEtaMin = static_cast(cutDeltaEtaFractionMinVector[ktbinval]); + + double outerVal = std::pow(dphiAvg, 2) / std::pow(DeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(DeltaEtaMax, 2); + double innerVal = std::pow(dphiAvg, 2) / std::pow(DeltaPhiStarMin, 2) + std::pow(deta, 2) / std::pow(DeltaEtaMin, 2); + + if ((innerVal >= 1.0) && (outerVal < 1.0) && (distfrac > FracMax)) { + return true; + } else { + if (ChosenEventType == femto_universe_container::EventType::same) { + histdetadphisameafterFractionkT[ktbinval]->Fill(deta, dphiAvg); + } else if (ChosenEventType == femto_universe_container::EventType::mixed) { + histdetadphimixedafterFractionkT[ktbinval]->Fill(deta, dphiAvg); + } else { + LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed."; + } + return false; + } + } + /// Check if pair is close or not template void ClosePairqLCMS(Part const& part1, Part const& part2, float lmagfield, uint8_t ChosenEventType, double qlcms) // add typename Parts and variable parts for adding MClabels @@ -787,10 +844,15 @@ class FemtoUniverseDetaDphiStar float cutDeltaEtaMax; float cutDeltaEtaMin; - std::vector cutDeltaPhiStarMaxVector; - std::vector cutDeltaPhiStarMinVector; - std::vector cutDeltaEtaMaxVector; - std::vector cutDeltaEtaMinVector; + std::vector cutDeltaPhiStarMaxVector; + std::vector cutDeltaPhiStarMinVector; + std::vector cutDeltaEtaMaxVector; + std::vector cutDeltaEtaMinVector; + + std::vector cutDeltaPhiStarFractionMaxVector; + std::vector cutDeltaPhiStarFractionMinVector; + std::vector cutDeltaEtaFractionMaxVector; + std::vector cutDeltaEtaFractionMinVector; float magfield; bool plotForEveryRadii = false; @@ -805,6 +867,8 @@ class FemtoUniverseDetaDphiStar std::array, 4> histdetadphimixedbeforekT{}; std::array, 4> histdetadphisameafterkT{}; std::array, 4> histdetadphimixedafterkT{}; + std::array, 4> histdetadphisameafterFractionkT{}; + std::array, 4> histdetadphimixedafterFractionkT{}; std::array, 9>, 7> histdetadpiRadii{}; diff --git a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackSpherHarMultKtExtended.cxx b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackSpherHarMultKtExtended.cxx index 023a355abc6..6c310c792a5 100644 --- a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackSpherHarMultKtExtended.cxx +++ b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackTrackSpherHarMultKtExtended.cxx @@ -89,14 +89,11 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended { Configurable confIsCPRatITS{"confIsCPRatITS", false, "Close Pair check at ITS"}; Configurable confCPRPlotPerRadii{"confCPRPlotPerRadii", false, "Plot CPR per radii"}; Configurable confCPRdeltaPhiCutMax{"confCPRdeltaPhiCutMax", 0.0, "Delta Phi max cut for Close Pair Rejection"}; - Configurable confCPRdeltaPhiCutMin{"confCPRdeltaPhiCutMin", 0., "Delta Phi min cut for Close Pair Rejection"}; - Configurable confCPRdeltaEtaCutMax{"confCPRdeltaEtaCutMax", 0., "Delta Eta max cut for Close Pair Rejection"}; - Configurable confCPRdeltaEtaCutMin{"confCPRdeltaEtaCutMin", 0., "Delta Eta min cut for Close Pair Rejection"}; - Configurable> confCPRdeltaPhiCutMaxVector{"confCPRdeltaPhiCutMaxVector", std::vector{0.0, 0.0, 0.0, 0.0}, "Delta Phi max cut for Close Pair Rejection"}; - Configurable> confCPRdeltaPhiCutMinVector{"confCPRdeltaPhiCutMinVector", std::vector{0.0, 0.0, 0.0, 0.0}, "Delta Phi min cut for Close Pair Rejection"}; - Configurable> confCPRdeltaEtaCutMaxVector{"confCPRdeltaEtaCutMaxVector", std::vector{0.0, 0.0, 0.0, 0.0}, "Delta Eta max cut for Close Pair Rejection"}; - Configurable> confCPRdeltaEtaCutMinVector{"confCPRdeltaEtaCutMinVector", std::vector{0.0, 0.0, 0.0, 0.0}, "Delta Eta min cut for Close Pair Rejection"}; + Configurable confCPRdeltaPhiCutMin{"confCPRdeltaPhiCutMin", 0.0, "Delta Phi min cut for Close Pair Rejection"}; + Configurable confCPRdeltaEtaCutMax{"confCPRdeltaEtaCutMax", 0.0, "Delta Eta max cut for Close Pair Rejection"}; + Configurable confCPRdeltaEtaCutMin{"confCPRdeltaEtaCutMin", 0.0, "Delta Eta min cut for Close Pair Rejection"}; Configurable confIsCPRkT{"confIsCPRkT", true, "kT dependent deltaEta-deltaPhi cut for Close Pair Rejection"}; + Configurable confIsCPRFraction{"confIsCPRFraction", true, "Close Pair Rejection with fraction of merged points"}; Configurable confTrkDCAxyMax{"confTrkDCAxyMax", 0.2, "Max DCA in xy "}; Configurable confTrkDCAzMax{"confTrkDCAzMax", 0.2, "Max DCA in z "}; Configurable confTrkTPCcRowsMin{"confTrkTPCcRowsMin", 80, "Min of TPC crossed rows"}; @@ -120,6 +117,17 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended { Configurable confisIdenLCMS{"confisIdenLCMS", true, "Choosing identical or non-identical pairs in LCMS"}; Configurable confIsWeight{"confIsWeight", true, "Fill quantum weight"}; Configurable confisIdenPRF{"confisIdenPRF", false, "Choosing identical or non-identical pairs in PRF"}; + + ConfigurableAxis confCPRdeltaEtaCutMaxVec{"confCPRdeltaEtaCutMaxVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for max delta eta cut in CPR"}; + ConfigurableAxis confCPRdeltaEtaCutMinVec{"confCPRdeltaEtaCutMinVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for min delta eta cut in CPR"}; + ConfigurableAxis confCPRdeltaPhiCutMaxVec{"confCPRdeltaPhiCutMaxVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for max delta phi cut in CPR"}; + ConfigurableAxis confCPRdeltaPhiCutMinVec{"confCPRdeltaPhiCutMinVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for min delta phi cut in CPR"}; + + ConfigurableAxis confCPRdeltaEtaCutFractionMaxVec{"confCPRdeltaEtaCutFractionMaxVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for max delta eta cut in CPR Fraction"}; + ConfigurableAxis confCPRdeltaEtaCutFractionMinVec{"confCPRdeltaEtaCutFractionMinVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for min delta eta cut in CPR Fraction"}; + ConfigurableAxis confCPRdeltaPhiCutFractionMaxVec{"confCPRdeltaPhiCutFractionMaxVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for max delta phi cut in CPR Fraction"}; + ConfigurableAxis confCPRdeltaPhiCutFractionMinVec{"confCPRdeltaPhiCutFractionMinVec", {VARIABLE_WIDTH, 0.0f, 0.0f, 0.0f, 0.0f}, "Bins for min delta phi cut in CPR Fraction"}; + } twotracksconfigs; using FemtoFullParticles = soa::Join; @@ -489,7 +497,7 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended { pairCleaner.init(&qaRegistry); if (twotracksconfigs.confIsCPR.value) { pairCloseRejection.init(&resultRegistry, &qaRegistry, twotracksconfigs.confCPRdeltaPhiCutMin.value, twotracksconfigs.confCPRdeltaPhiCutMax.value, twotracksconfigs.confCPRdeltaEtaCutMin.value, twotracksconfigs.confCPRdeltaEtaCutMax.value, twotracksconfigs.confCPRChosenRadii.value, twotracksconfigs.confCPRPlotPerRadii.value); - pairCloseRejection.init_kT(&resultRegistry, confKtKstarBins, twotracksconfigs.confCPRdeltaPhiCutMinVector, twotracksconfigs.confCPRdeltaPhiCutMaxVector, twotracksconfigs.confCPRdeltaEtaCutMinVector, twotracksconfigs.confCPRdeltaEtaCutMaxVector); + pairCloseRejection.init_kT(&resultRegistry, confKtKstarBins, twotracksconfigs.confCPRdeltaPhiCutMinVec.value, twotracksconfigs.confCPRdeltaPhiCutMaxVec.value, twotracksconfigs.confCPRdeltaEtaCutMinVec.value, twotracksconfigs.confCPRdeltaEtaCutMaxVec.value, twotracksconfigs.confCPRdeltaPhiCutFractionMinVec.value, twotracksconfigs.confCPRdeltaPhiCutFractionMaxVec.value, twotracksconfigs.confCPRdeltaEtaCutFractionMinVec.value, twotracksconfigs.confCPRdeltaEtaCutFractionMaxVec.value); } vPIDPartOne = trackonefilter.confPIDPartOne.value; @@ -633,6 +641,11 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended { if (pairCloseRejection.isClosePairkT(p1, p2, femto_universe_container::EventType::same, kT, twotracksconfigs.confIsCircularCut, twotracksconfigs.confCPRDphiAvgOrDist, magFieldTesla, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax)) { continue; } + if (twotracksconfigs.confIsCPRFraction) { + if (pairCloseRejection.isClosePairFractionkT(p1, p2, femto_universe_container::EventType::same, kT, magFieldTesla, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax)) { + continue; + } + } } else { if (pairCloseRejection.isClosePairFrac(part1, part2, magFieldTesla, femto_universe_container::EventType::same, twotracksconfigs.confCPRDphiAvgOrDist, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax, twotracksconfigs.confIsCircularCut)) { continue; @@ -996,6 +1009,11 @@ struct femtoUniversePairTaskTrackTrackSpherHarMultKtExtended { if (pairCloseRejection.isClosePairkT(p1, p2, femto_universe_container::EventType::mixed, kT, twotracksconfigs.confIsCircularCut, twotracksconfigs.confCPRDphiAvgOrDist, magFieldTesla, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax)) { continue; } + if (twotracksconfigs.confIsCPRFraction) { + if (pairCloseRejection.isClosePairFractionkT(p1, p2, femto_universe_container::EventType::mixed, kT, magFieldTesla, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax)) { + continue; + } + } } else { if (pairCloseRejection.isClosePairFrac(part1, part2, magFieldTesla, femto_universe_container::EventType::mixed, twotracksconfigs.confCPRDphiAvgOrDist, twotracksconfigs.confCPRDistMax, twotracksconfigs.confCPRFracMax, twotracksconfigs.confIsCircularCut)) { continue;