diff --git a/OADB/AliEventCuts.cxx b/OADB/AliEventCuts.cxx index 1e41c42ab56..398a9db992f 100644 --- a/OADB/AliEventCuts.cxx +++ b/OADB/AliEventCuts.cxx @@ -72,6 +72,7 @@ AliEventCuts::AliEventCuts(bool saveplots) : TList(), fUseVariablesCorrelationCuts{false}, fUseEstimatorsCorrelationCut{false}, fUseStrongVarCorrelationCut{false}, + fUseITSTPCCluCorrelationCut{false}, fEstimatorsCorrelationCoef{0.,1.}, fEstimatorsSigmaPars{10000.,0.,0.,0.}, fDeltaEstimatorNsigma{1.,1.}, @@ -82,6 +83,7 @@ AliEventCuts::AliEventCuts(bool saveplots) : TList(), fMultiplicityV0McorrCut{nullptr}, fFB128vsTrklLinearCut{1.e8,0.}, fVZEROvsTPCoutPolCut{1.e8,0.,0.,0.,0.}, + fITSvsTPCcluPolCut{0.,0.,0.}, fRequireExactTriggerMask{false}, fTriggerMask{AliVEvent::kAny}, fTriggerClasses{}, @@ -226,6 +228,12 @@ bool AliEventCuts::AcceptEvent(AliVEvent *ev) { bool usePileUpSPD = (fUseCombinedMVSPDcut && vtx == vtSPD) || fUseSPDpileUpCut; AliVMultiplicity* mult = ev->GetMultiplicity(); const int ntrkl = mult->GetNumberOfTracklets(); + int nCluSDDSSD=0; + for(Int_t iLay=2; iLay<6; iLay++) nCluSDDSSD+=mult->GetNumberOfITSClusters(iLay); + int nCluTPC=0; + if (dynamic_cast(ev)) nCluTPC=dynamic_cast(ev)->GetNumberOfTPCClusters(); + else if (dynamic_cast(ev)) nCluTPC=dynamic_cast(ev)->GetNumberOfTPCClusters(); + if (fUseMultiplicityDependentPileUpCuts) { if (ntrkl < 20) fSPDpileupMinContributors = 3; else if (ntrkl < 50) fSPDpileupMinContributors = 4; @@ -235,6 +243,9 @@ bool AliEventCuts::AcceptEvent(AliVEvent *ev) { (!fTrackletBGcut || !fUtils.IsSPDClusterVsTrackletBG(ev)) && (!usePileUpMV || !fUtils.IsPileUpMV(ev))) fFlag |= BIT(kPileUp); + + const double its_tpcclus_limit = PolN(double(nCluTPC),fITSvsTPCcluPolCut,2); + if(!fUseITSTPCCluCorrelationCut || (nCluSDDSSD > its_tpcclus_limit)) fFlag |= BIT(kTPCPileUp); /// Centrality cuts: /// * Check for min and max centrality @@ -790,7 +801,10 @@ void AliEventCuts::SetupPbPb2018() { array vzero_tpcout_polcut = {-2000.,2.1,3.5e-5,0.,0.}; std::copy(vzero_tpcout_polcut.begin(),vzero_tpcout_polcut.end(),fVZEROvsTPCoutPolCut); - + + array its_tpcclus_polcut = {-3000.,0.0099,9.426e-10}; + std::copy(its_tpcclus_polcut.begin(),its_tpcclus_polcut.end(),fITSvsTPCcluPolCut); + if (fCentralityFramework != 0) { if(!fMultiplicityV0McorrCut) fMultiplicityV0McorrCut = new TF1("fMultiplicityV0McorrCut","[0]+[1]*x+[2]*exp([3]-[4]*x) - 5.*([5]+[6]*exp([7]-[8]*x))",0,100); fMultiplicityV0McorrCut->SetParameters(-6.15980e+02, 4.89828e+00, 4.84776e+03, -5.22988e-01, 3.04363e-02, -1.21144e+01, 2.95321e+02, -9.20062e-01, 2.17372e-02); diff --git a/OADB/AliEventCuts.h b/OADB/AliEventCuts.h index 70ef15cd46c..9377a7dc3e4 100644 --- a/OADB/AliEventCuts.h +++ b/OADB/AliEventCuts.h @@ -69,6 +69,7 @@ class AliEventCuts : public TList { kCorrelations, kTimeRangeCut, kEMCALEDCut, + kTPCPileUp, kAllCuts }; @@ -168,6 +169,7 @@ class AliEventCuts : public TList { bool fUseVariablesCorrelationCuts; ///< Switch on/off the cuts on the correlation between event variables bool fUseEstimatorsCorrelationCut; ///< Switch on/off the cut on the correlation between centrality estimators bool fUseStrongVarCorrelationCut; ///< Switch on/off the strong cuts on the correlation between event variables + bool fUseITSTPCCluCorrelationCut; ///< Switch on/off the strong cuts on the correlation between event variables double fEstimatorsCorrelationCoef[2]; ///< fCentEstimators[0] = [0] + [1] * fCentEstimators[1] double fEstimatorsSigmaPars[4]; ///< Sigma parametrisation fCentEstimators[1] vs fCentEstimators[0] double fDeltaEstimatorNsigma[2]; ///< Number of sigma to cut on fCentEstimators[1] vs fCentEstimators[0] @@ -178,7 +180,8 @@ class AliEventCuts : public TList { TF1 *fMultiplicityV0McorrCut; //! fTriggerClasses; ///< Trigger classes @@ -239,7 +242,7 @@ class AliEventCuts : public TList { AliESDtrackCuts* fFB32trackCuts; //! F AliEventCuts::PolN(F x,F* coef, int n) {