From 2a727c1e0a68f184021b0cfd659131ee338bd32c Mon Sep 17 00:00:00 2001 From: Lucia Anna Tarasovicova Date: Fri, 7 Aug 2026 15:35:09 +0200 Subject: [PATCH] add an option to apply the cosPA selection based on the interpolation of an histogram stored in the ccdb --- .../Strangeness/derivedcascadeanalysis.cxx | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/derivedcascadeanalysis.cxx b/PWGLF/Tasks/Strangeness/derivedcascadeanalysis.cxx index 16411bb5780..e782cf4436f 100644 --- a/PWGLF/Tasks/Strangeness/derivedcascadeanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/derivedcascadeanalysis.cxx @@ -85,6 +85,7 @@ struct Derivedcascadeanalysis { Configurable nPtBinsForNsigmaTPC{"nPtBinsForNsigmaTPC", 100, ""}; Configurable irSource{"irSource", "T0VTX", "Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; Configurable ccdburl{"ccdburl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable histoCCDBPath{"histoCCDBPath", "Users/l/lhusova/LHC2025/PointingAngleSelection", "Path for the selection histograms in the CCDB"}; o2::aod::rctsel::RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; @@ -201,6 +202,7 @@ struct Derivedcascadeanalysis { Configurable doAtLeastOneTrackAB{"doAtLeastOneTrackAB", false, "require that at least one of the daughter tracks is from Afterburner"}; Configurable doBachelorITSTracking{"doBachelorITSTracking", false, "require that the bachelor track is from the ITS tracking"}; Configurable doAllTracksMinITSClusters{"doAllTracksMinITSClusters", false, "require that all daughter tracks have minimal ITS hits"}; + Configurable useInterpolationForCosPACut{"useInterpolationForCosPACut", true, "use interpolation for pt dependent cosPA cut"}; } candidateSelectionFlags; struct : ConfigurableGroup { @@ -256,6 +258,11 @@ struct Derivedcascadeanalysis { Configurable dcaCacsDauPtSelectionHigh{"dcaCacsDauPtSelectionHigh", 4.0, "high pt selection for range where DCA selection changes to Par2"}; } candidateSelectionValues; + TH1F* hXiPointingAngleSelection = nullptr; + TH1F* hOmegaPointingAngleSelection = nullptr; + TH1F* hXiLambdaPointingAngleSelection = nullptr; + TH1F* hOmegaLambdaPointingAngleSelection = nullptr; + o2::ccdb::CcdbApi ccdbApi; Service ccdb; ctpRateFetcher rateFetcher; @@ -574,6 +581,20 @@ struct Derivedcascadeanalysis { } } } + void initCosPASelectionHistograms(float timeStamp) + { + + auto* listHistograms = ccdb->getForTimeStamp(histoCCDBPath, timeStamp); + + if (!listHistograms) { + LOG(fatal) << "Problem getting TList object with histograms!"; + } + + hOmegaLambdaPointingAngleSelection = dynamic_cast(listHistograms->FindObject("hOmegaLambdaPointingAngleSelection")); + hXiPointingAngleSelection = dynamic_cast(listHistograms->FindObject("hXiPointingAngleSelection")); + hOmegaPointingAngleSelection = dynamic_cast(listHistograms->FindObject("hOmegaPointingAngleSelection")); + hXiLambdaPointingAngleSelection = dynamic_cast(listHistograms->FindObject("hXiLambdaPointingAngleSelection")); + } // Return slicing output template auto getGroupedCollisions(TCollisions const& collisions, int globalIndex) @@ -590,12 +611,28 @@ struct Derivedcascadeanalysis { if (ptdepcut) { double ptdepCut = -1; - if (isCascPa) { - ptdepCut = candidateSelectionValues.cosPApar0 + candidateSelectionValues.cosPApar1 * casc.pt(); + if (candidateSelectionFlags.useInterpolationForCosPACut) { + if (isCascPa) { + if (isXi) { + ptdepCut = hXiPointingAngleSelection->Interpolate(casc.pt()); + } else { + ptdepCut = hOmegaPointingAngleSelection->Interpolate(casc.pt()); + } + } else { + if (isXi) { + ptdepCut = hXiLambdaPointingAngleSelection->Interpolate(casc.pt()); + } else { + ptdepCut = hOmegaLambdaPointingAngleSelection->Interpolate(casc.pt()); + } + } } else { - ptdepCut = candidateSelectionValues.v0cosPApar0 + candidateSelectionValues.v0cosPApar1 * casc.pt(); + if (isCascPa) { + ptdepCut = candidateSelectionValues.cosPApar0 + candidateSelectionValues.cosPApar1 * casc.pt(); + } else { + ptdepCut = candidateSelectionValues.v0cosPApar0 + candidateSelectionValues.v0cosPApar1 * casc.pt(); + } } - if (ptdepCut > candidateSelectionValues.ptdepCosPACutMaxValue && casc.pt() < candidateSelectionValues.minPtForCosPAcut) { + if (ptdepCut > candidateSelectionValues.ptdepCosPACutMaxValue) { ptdepCut = candidateSelectionValues.ptdepCosPACutMaxValue; } if (ptdepCut < candidateSelectionValues.ptdepCosPACutMinValue) { @@ -1209,6 +1246,10 @@ struct Derivedcascadeanalysis { float nChEta1 = -1; float occupancy = -2; + if (useInterpolationForCosPACut) { + initCosPASelectionHistograms(coll.timestamp()); + } + if constexpr (requires { coll.centFT0C(); }) { nChEta1 = coll.multNTracksPVeta1(); centrality = coll.centFT0C();