@@ -73,7 +73,7 @@ class DielectronCut : public TNamed
7373 kDCAz ,
7474 kITSNCls ,
7575 kITSChi2NDF ,
76- kITSCluserSize ,
76+ kITSClusterSize ,
7777 kPrefilter ,
7878 kNCuts
7979 };
@@ -85,7 +85,9 @@ class DielectronCut : public TNamed
8585 kTPChadrejORTOFreq = 2 ,
8686 kTPConly = 3 ,
8787 kTOFif = 4 ,
88- kPIDML = 5
88+ kITSTOFreq = 5 ,
89+ kTPChadrejORITSTOFreq = 6 ,
90+ kPIDML = 7
8991 };
9092
9193 template <typename T = int , typename TPair>
@@ -176,9 +178,9 @@ class DielectronCut : public TNamed
176178 if (!IsSelectedTrack (track, DielectronCuts::kITSChi2NDF )) {
177179 return false ;
178180 }
179- if (!IsSelectedTrack (track, DielectronCuts::kITSCluserSize )) {
180- return false ;
181- }
181+ // if (!IsSelectedTrack(track, DielectronCuts::kITSClusterSize )) {
182+ // return false;
183+ // }
182184
183185 if (mRequireITSibAny ) {
184186 auto hits_ib = std::count_if (its_ib_any_Requirement.second .begin (), its_ib_any_Requirement.second .end (), [&](auto && requiredLayer) { return track.itsClusterMap () & (1 << requiredLayer); });
@@ -271,6 +273,12 @@ class DielectronCut : public TNamed
271273 case static_cast <int >(PIDSchemes::kTOFif ):
272274 return PassTOFif (track);
273275
276+ case static_cast <int >(PIDSchemes::kITSTOFreq ):
277+ return PassTOFreq (track) && PassITSreq (track);
278+
279+ case static_cast <int >(PIDSchemes::kTPChadrejORITSTOFreq ):
280+ return PassTPChadrej (track) || (PassTOFreq (track) && PassITSreq (track));
281+
274282 case static_cast <int >(PIDSchemes::kPIDML ):
275283 return true ; // don't use kPIDML here.
276284
@@ -319,6 +327,15 @@ class DielectronCut : public TNamed
319327 return is_el_included_TPC && is_pi_excluded_TPC && is_el_included_TOF;
320328 }
321329
330+ template <typename T>
331+ bool PassITSreq (T const & track) const
332+ {
333+ bool is_el_included_TPC = mMinTPCNsigmaEl < track.tpcNSigmaEl () && track.tpcNSigmaEl () < mMaxTPCNsigmaEl ;
334+ bool is_pi_excluded_TPC = track.tpcInnerParam () < mMaxPinForPionRejectionTPC ? (track.tpcNSigmaPi () < mMinTPCNsigmaPi || mMaxTPCNsigmaPi < track.tpcNSigmaPi ()) : true ;
335+ bool is_el_included_ITS = (track.p () < mMinP_ITSClusterSize || mMaxP_ITSClusterSize < track.p ()) ? true : (mMinMeanClusterSizeITS < track.meanClusterSizeITS () * std::cos (std::atan (track.tgl ()))) && (track.meanClusterSizeITS () * std::cos (std::atan (track.tgl ())) < (mMaxMeanClusterSizeITSPDep ? mMaxMeanClusterSizeITSPDep (track.p ()) : mMaxMeanClusterSizeITS ));
336+ return is_el_included_TPC && is_pi_excluded_TPC && is_el_included_ITS;
337+ }
338+
322339 template <typename T>
323340 bool IsSelectedTrack (T const & track, const DielectronCuts& cut) const
324341 {
@@ -362,8 +379,13 @@ class DielectronCut : public TNamed
362379 case DielectronCuts::kITSChi2NDF :
363380 return mMinChi2PerClusterITS < track.itsChi2NCl () && track.itsChi2NCl () < mMaxChi2PerClusterITS ;
364381
365- case DielectronCuts::kITSCluserSize :
366- return track.p () < mMaxP_ITSClusterSize ? mMinMeanClusterSizeITS < track.meanClusterSizeITS () * std::cos (std::atan (track.tgl ())) && track.meanClusterSizeITS () * std::cos (std::atan (track.tgl ())) < mMaxMeanClusterSizeITS : true ;
382+ // case DielectronCuts::kITSClusterSize: {
383+ // if (track.p() < mMinP_ITSClusterSize || mMaxP_ITSClusterSize < track.p()) {
384+ // return true;
385+ // } else {
386+ // return (mMinMeanClusterSizeITS < track.meanClusterSizeITS() * std::cos(std::atan(track.tgl()))) && (track.meanClusterSizeITS() * std::cos(std::atan(track.tgl())) < (mMaxMeanClusterSizeITSPDep ? mMaxMeanClusterSizeITSPDep(track.p()) : mMaxMeanClusterSizeITS));
387+ // }
388+ // }
367389
368390 case DielectronCuts::kPrefilter :
369391 return track.pfb () <= 0 ;
@@ -393,7 +415,8 @@ class DielectronCut : public TNamed
393415 void SetChi2PerClusterTPC (float min, float max);
394416 void SetNClustersITS (int min, int max);
395417 void SetChi2PerClusterITS (float min, float max);
396- void SetMeanClusterSizeITS (float min, float max, float maxP = 0 .f);
418+ void SetMeanClusterSizeITS (float min, float max, float minP = 0 .f, float maxP = 0 .f);
419+ void SetMeanClusterSizeITSPDep (std::function<float (float )> pDepCut, float minP = 0.f, float maxP = 0.f);
397420
398421 void SetPIDScheme (int scheme);
399422 void SetMinPinTOF (float min);
@@ -470,7 +493,9 @@ class DielectronCut : public TNamed
470493 bool mApplyPhiV {true };
471494 bool mApplyPF {false };
472495 float mMinMeanClusterSizeITS {-1e10f}, mMaxMeanClusterSizeITS {1e10f}; // max <its cluster size> x cos(Lmabda)
496+ float mMinP_ITSClusterSize {0.0 };
473497 float mMaxP_ITSClusterSize {0.0 };
498+ std::function<float (float )> mMaxMeanClusterSizeITSPDep {}; // max dca in xy plane as function of pT
474499
475500 // pid cuts
476501 int mPIDScheme {-1 };
0 commit comments