@@ -57,6 +57,7 @@ class DielectronCut : public TNamed
5757 kTPCCrossedRows ,
5858 kTPCCrossedRowsOverNCls ,
5959 kTPCFracSharedClusters ,
60+ kRelDiffPin ,
6061 kTPCChi2NDF ,
6162 kTPCNsigmaEl ,
6263 kTPCNsigmaMu ,
@@ -209,6 +210,9 @@ class DielectronCut : public TNamed
209210 if (!IsSelectedTrack (track, DielectronCuts::kTPCFracSharedClusters )) {
210211 return false ;
211212 }
213+ if (!IsSelectedTrack (track, DielectronCuts::kRelDiffPin )) {
214+ return false ;
215+ }
212216 if (!IsSelectedTrack (track, DielectronCuts::kTPCChi2NDF )) {
213217 return false ;
214218 }
@@ -217,11 +221,6 @@ class DielectronCut : public TNamed
217221 return false ;
218222 }
219223
220- // // TOF beta cut
221- // if (track.hasTOF() && (track.beta() < mMinTOFbeta || mMaxTOFbeta < track.beta())) {
222- // return false;
223- // }
224-
225224 // PID cuts
226225 if constexpr (isML) {
227226 if (!PassPIDML (track, collision)) {
@@ -282,7 +281,7 @@ class DielectronCut : public TNamed
282281 {
283282 bool is_el_included_TPC = mMinTPCNsigmaEl < track.tpcNSigmaEl () && track.tpcNSigmaEl () < mMaxTPCNsigmaEl ;
284283 bool is_pi_excluded_TPC = track.tpcInnerParam () < mMaxPinForPionRejectionTPC ? (track.tpcNSigmaPi () < mMinTPCNsigmaPi || mMaxTPCNsigmaPi < track.tpcNSigmaPi ()) : true ;
285- bool is_el_included_TOF = mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl ;
284+ bool is_el_included_TOF = ( mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl ) && (track. hasTOF () && track. tofChi2 () < mMaxChi2TOF ) ;
286285 return is_el_included_TPC && is_pi_excluded_TPC && is_el_included_TOF;
287286 }
288287
@@ -294,7 +293,7 @@ class DielectronCut : public TNamed
294293 bool is_pi_excluded_TPC = track.tpcInnerParam () < mMaxPinForPionRejectionTPC ? (track.tpcNSigmaPi () < mMinTPCNsigmaPi || mMaxTPCNsigmaPi < track.tpcNSigmaPi ()) : true ;
295294 bool is_ka_excluded_TPC = track.tpcNSigmaKa () < mMinTPCNsigmaKa || mMaxTPCNsigmaKa < track.tpcNSigmaKa ();
296295 bool is_pr_excluded_TPC = track.tpcNSigmaPr () < mMinTPCNsigmaPr || mMaxTPCNsigmaPr < track.tpcNSigmaPr ();
297- bool is_el_included_TOF = track.hasTOF () ? (mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl ) : true ;
296+ bool is_el_included_TOF = track.hasTOF () ? (mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl && track. tofChi2 () < mMaxChi2TOF ) : true ;
298297 return is_el_included_TPC && is_mu_excluded_TPC && is_pi_excluded_TPC && is_ka_excluded_TPC && is_pr_excluded_TPC && is_el_included_TOF;
299298 }
300299
@@ -310,7 +309,7 @@ class DielectronCut : public TNamed
310309 {
311310 bool is_el_included_TPC = mMinTPCNsigmaEl < track.tpcNSigmaEl () && track.tpcNSigmaEl () < mMaxTPCNsigmaEl ;
312311 bool is_pi_excluded_TPC = track.tpcInnerParam () < mMaxPinForPionRejectionTPC ? (track.tpcNSigmaPi () < mMinTPCNsigmaPi || mMaxTPCNsigmaPi < track.tpcNSigmaPi ()) : true ;
313- bool is_el_included_TOF = track.hasTOF () ? (mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl ) : true ;
312+ bool is_el_included_TOF = track.hasTOF () ? (mMinTOFNsigmaEl < track.tofNSigmaEl () && track.tofNSigmaEl () < mMaxTOFNsigmaEl && track. tofChi2 () < mMaxChi2TOF ) : true ;
314313 return is_el_included_TPC && is_pi_excluded_TPC && is_el_included_TOF;
315314 }
316315
@@ -339,6 +338,9 @@ class DielectronCut : public TNamed
339338 case DielectronCuts::kTPCFracSharedClusters :
340339 return track.tpcFractionSharedCls () <= mMaxFracSharedClustersTPC ;
341340
341+ case DielectronCuts::kRelDiffPin :
342+ return mMinRelDiffPin < (track.tpcInnerParam () - track.p ()) / track.p () && (track.tpcInnerParam () - track.p ()) / track.p () < mMaxRelDiffPin ;
343+
342344 case DielectronCuts::kTPCChi2NDF :
343345 return mMinChi2PerClusterTPC < track.tpcChi2NCl () && track.tpcChi2NCl () < mMaxChi2PerClusterTPC ;
344346
@@ -386,10 +388,12 @@ class DielectronCut : public TNamed
386388 void SetMinNCrossedRowsTPC (int minNCrossedRowsTPC);
387389 void SetMinNCrossedRowsOverFindableClustersTPC (float minNCrossedRowsOverFindableClustersTPC);
388390 void SetMaxFracSharedClustersTPC (float max);
391+ void SetRelDiffPin (float min, float max);
389392 void SetChi2PerClusterTPC (float min, float max);
390393 void SetNClustersITS (int min, int max);
391394 void SetChi2PerClusterITS (float min, float max);
392395 void SetMeanClusterSizeITS (float min, float max, float minP = 0 .f, float maxP = 0 .f);
396+ void SetChi2TOF (float min, float max);
393397
394398 void SetPIDScheme (int scheme);
395399 void SetMinPinTOF (float min);
@@ -452,12 +456,14 @@ class DielectronCut : public TNamed
452456 float mMinChi2PerClusterTPC {-1e10f}, mMaxChi2PerClusterTPC {1e10f}; // max tpc fit chi2 per TPC cluster
453457 float mMinNCrossedRowsOverFindableClustersTPC {0 .f }; // min ratio crossed rows / findable clusters
454458 float mMaxFracSharedClustersTPC {999 .f }; // max ratio shared clusters / clusters in TPC
459+ float mMinRelDiffPin {-1e10f}, mMaxRelDiffPin {1e10f}; // max relative difference between p at TPC inner wall and p at PV
455460 int mMinNClustersITS {0 }, mMaxNClustersITS {7 }; // range in number of ITS clusters
456461 float mMinChi2PerClusterITS {-1e10f}, mMaxChi2PerClusterITS {1e10f}; // max its fit chi2 per ITS cluster
457462 float mMaxPinMuonTPConly {0 .2f }; // max pin cut for muon ID with TPConly
458463 float mMaxPinForPionRejectionTPC {1e10f}; // max pin cut for muon ID with TPConly
459464 bool mRequireITSibAny {true };
460465 bool mRequireITSib1st {false };
466+ float mMinChi2TOF {-1e10f}, mMaxChi2TOF {1e10f}; // max tof chi2 per
461467
462468 float mMinDca3D {0 .0f }; // min dca in 3D in units of sigma
463469 float mMaxDca3D {1e+10 }; // max dca in 3D in units of sigma
0 commit comments