@@ -85,6 +85,7 @@ struct Derivedcascadeanalysis {
8585 Configurable<int > nPtBinsForNsigmaTPC{" nPtBinsForNsigmaTPC" , 100 , " " };
8686 Configurable<std::string> irSource{" irSource" , " T0VTX" , " Estimator of the interaction rate (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)" };
8787 Configurable<std::string> ccdburl{" ccdburl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
88+ Configurable<std::string> histoCCDBPath{" histoCCDBPath" , " Users/l/lhusova/LHC2025/PointingAngleSelection" , " Path for the selection histograms in the CCDB" };
8889
8990 o2::aod::rctsel::RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel .value };
9091
@@ -201,6 +202,7 @@ struct Derivedcascadeanalysis {
201202 Configurable<bool > doAtLeastOneTrackAB{" doAtLeastOneTrackAB" , false , " require that at least one of the daughter tracks is from Afterburner" };
202203 Configurable<bool > doBachelorITSTracking{" doBachelorITSTracking" , false , " require that the bachelor track is from the ITS tracking" };
203204 Configurable<bool > doAllTracksMinITSClusters{" doAllTracksMinITSClusters" , false , " require that all daughter tracks have minimal ITS hits" };
205+ Configurable<bool > useInterpolationForCosPACut{" useInterpolationForCosPACut" , true , " use interpolation for pt dependent cosPA cut" };
204206 } candidateSelectionFlags;
205207
206208 struct : ConfigurableGroup {
@@ -256,6 +258,11 @@ struct Derivedcascadeanalysis {
256258 Configurable<float > dcaCacsDauPtSelectionHigh{" dcaCacsDauPtSelectionHigh" , 4.0 , " high pt selection for range where DCA selection changes to Par2" };
257259 } candidateSelectionValues;
258260
261+ TH1F * hXiPointingAngleSelection = nullptr ;
262+ TH1F * hOmegaPointingAngleSelection = nullptr ;
263+ TH1F * hXiLambdaPointingAngleSelection = nullptr ;
264+ TH1F * hOmegaLambdaPointingAngleSelection = nullptr ;
265+
259266 o2::ccdb::CcdbApi ccdbApi;
260267 Service<o2::ccdb::BasicCCDBManager> ccdb;
261268 ctpRateFetcher rateFetcher;
@@ -574,6 +581,20 @@ struct Derivedcascadeanalysis {
574581 }
575582 }
576583 }
584+ void initCosPASelectionHistograms (float timeStamp)
585+ {
586+
587+ auto * listHistograms = ccdb->getForTimeStamp <TList>(histoCCDBPath, timeStamp);
588+
589+ if (!listHistograms) {
590+ LOG (fatal) << " Problem getting TList object with histograms!" ;
591+ }
592+
593+ hOmegaLambdaPointingAngleSelection = dynamic_cast <TH1F *>(listHistograms->FindObject (" hOmegaLambdaPointingAngleSelection" ));
594+ hXiPointingAngleSelection = dynamic_cast <TH1F *>(listHistograms->FindObject (" hXiPointingAngleSelection" ));
595+ hOmegaPointingAngleSelection = dynamic_cast <TH1F *>(listHistograms->FindObject (" hOmegaPointingAngleSelection" ));
596+ hXiLambdaPointingAngleSelection = dynamic_cast <TH1F *>(listHistograms->FindObject (" hXiLambdaPointingAngleSelection" ));
597+ }
577598 // Return slicing output
578599 template <bool run3, typename TCollisions>
579600 auto getGroupedCollisions (TCollisions const & collisions, int globalIndex)
@@ -590,12 +611,28 @@ struct Derivedcascadeanalysis {
590611
591612 if (ptdepcut) {
592613 double ptdepCut = -1 ;
593- if (isCascPa) {
594- ptdepCut = candidateSelectionValues.cosPApar0 + candidateSelectionValues.cosPApar1 * casc.pt ();
614+ if (candidateSelectionFlags.useInterpolationForCosPACut ) {
615+ if (isCascPa) {
616+ if (isXi) {
617+ ptdepCut = hXiPointingAngleSelection->Interpolate (casc.pt ());
618+ } else {
619+ ptdepCut = hOmegaPointingAngleSelection->Interpolate (casc.pt ());
620+ }
621+ } else {
622+ if (isXi) {
623+ ptdepCut = hXiLambdaPointingAngleSelection->Interpolate (casc.pt ());
624+ } else {
625+ ptdepCut = hOmegaLambdaPointingAngleSelection->Interpolate (casc.pt ());
626+ }
627+ }
595628 } else {
596- ptdepCut = candidateSelectionValues.v0cosPApar0 + candidateSelectionValues.v0cosPApar1 * casc.pt ();
629+ if (isCascPa) {
630+ ptdepCut = candidateSelectionValues.cosPApar0 + candidateSelectionValues.cosPApar1 * casc.pt ();
631+ } else {
632+ ptdepCut = candidateSelectionValues.v0cosPApar0 + candidateSelectionValues.v0cosPApar1 * casc.pt ();
633+ }
597634 }
598- if (ptdepCut > candidateSelectionValues.ptdepCosPACutMaxValue && casc. pt () < candidateSelectionValues. minPtForCosPAcut ) {
635+ if (ptdepCut > candidateSelectionValues.ptdepCosPACutMaxValue ) {
599636 ptdepCut = candidateSelectionValues.ptdepCosPACutMaxValue ;
600637 }
601638 if (ptdepCut < candidateSelectionValues.ptdepCosPACutMinValue ) {
@@ -1209,6 +1246,10 @@ struct Derivedcascadeanalysis {
12091246 float nChEta1 = -1 ;
12101247 float occupancy = -2 ;
12111248
1249+ if (candidateSelectionFlags.useInterpolationForCosPACut ) {
1250+ initCosPASelectionHistograms (coll.timestamp ());
1251+ }
1252+
12121253 if constexpr (requires { coll.centFT0C (); }) {
12131254 nChEta1 = coll.multNTracksPVeta1 ();
12141255 centrality = coll.centFT0C ();
0 commit comments