1616#ifndef PWGEM_DILEPTON_CORE_EMTRACKCUT_H_
1717#define PWGEM_DILEPTON_CORE_EMTRACKCUT_H_
1818
19- // #include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"
19+ #include " PWGEM/Dilepton/Utils/EMTrackUtilities.h"
2020
2121#include " CommonConstants/PhysicsConstants.h"
2222#include " Framework/DataTypes.h"
3131#include < utility>
3232#include < vector>
3333
34- // using namespace o2::aod::pwgem::dilepton::utils::emtrackutil;
34+ using namespace o2 ::aod::pwgem::dilepton::utils::emtrackutil;
3535
3636class EMTrackCut : public TNamed
3737{
@@ -45,80 +45,84 @@ class EMTrackCut : public TNamed
4545 kTrackPtRange ,
4646 kTrackEtaRange ,
4747 kTrackPhiRange ,
48+ kDCAxy ,
49+ kDCAz ,
4850 kTPCNCls ,
4951 kTPCCrossedRows ,
5052 kTPCCrossedRowsOverNCls ,
5153 kTPCFracSharedClusters ,
5254 kTPCChi2NDF ,
53- kDCAxy ,
54- kDCAz ,
5555 kITSNCls ,
5656 kITSChi2NDF ,
57+ kTrackBits ,
5758 kNCuts
5859 };
5960
6061 template <typename TTrack>
6162 bool IsSelected (TTrack const & track) const
6263 {
63- if (!track.hasITS () || !track.hasTPC ()) {
64- return false ;
65- }
64+ // if (!track.hasITS() || !track.hasTPC()) {
65+ // return false;
66+ // }
6667
6768 if (!IsSelectedTrack (track, EMTrackCuts::kTrackPtRange )) {
6869 return false ;
6970 }
7071 if (!IsSelectedTrack (track, EMTrackCuts::kTrackEtaRange )) {
7172 return false ;
7273 }
73-
7474 if (!IsSelectedTrack (track, EMTrackCuts::kTrackPhiRange )) {
7575 return false ;
7676 }
77+
7778 if (!IsSelectedTrack (track, EMTrackCuts::kDCAxy )) {
7879 return false ;
7980 }
8081 if (!IsSelectedTrack (track, EMTrackCuts::kDCAz )) {
8182 return false ;
8283 }
83-
84- // ITS cuts
85- if (!IsSelectedTrack (track, EMTrackCuts::kITSNCls )) {
84+ if (!IsSelectedTrack (track, EMTrackCuts::kTrackBits )) {
8685 return false ;
8786 }
88- if (!IsSelectedTrack (track, EMTrackCuts::kITSChi2NDF )) {
89- return false ;
90- }
91-
92- if (mRequireITSibAny ) {
93- 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); });
94- if (hits_ib < its_ib_any_Requirement.first ) {
95- return false ;
96- }
97- }
9887
99- if (mRequireITSib1st ) {
100- auto hits_ib = std::count_if (its_ib_1st_Requirement.second .begin (), its_ib_1st_Requirement.second .end (), [&](auto && requiredLayer) { return track.itsClusterMap () & (1 << requiredLayer); });
101- if (hits_ib < its_ib_1st_Requirement.first ) {
102- return false ;
103- }
104- }
105-
106- // TPC cuts
107- if (!IsSelectedTrack (track, EMTrackCuts::kTPCNCls )) {
108- return false ;
109- }
110- if (!IsSelectedTrack (track, EMTrackCuts::kTPCCrossedRows )) {
111- return false ;
112- }
113- if (!IsSelectedTrack (track, EMTrackCuts::kTPCCrossedRowsOverNCls )) {
114- return false ;
115- }
116- if (!IsSelectedTrack (track, EMTrackCuts::kTPCFracSharedClusters )) {
117- return false ;
118- }
119- if (!IsSelectedTrack (track, EMTrackCuts::kTPCChi2NDF )) {
120- return false ;
121- }
88+ // // ITS cuts
89+ // if (!IsSelectedTrack(track, EMTrackCuts::kITSNCls)) {
90+ // return false;
91+ // }
92+ // if (!IsSelectedTrack(track, EMTrackCuts::kITSChi2NDF)) {
93+ // return false;
94+ // }
95+ //
96+ // if (mRequireITSibAny) {
97+ // 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); });
98+ // if (hits_ib < its_ib_any_Requirement.first) {
99+ // return false;
100+ // }
101+ // }
102+ //
103+ // if (mRequireITSib1st) {
104+ // auto hits_ib = std::count_if(its_ib_1st_Requirement.second.begin(), its_ib_1st_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
105+ // if (hits_ib < its_ib_1st_Requirement.first) {
106+ // return false;
107+ // }
108+ // }
109+ //
110+ // // TPC cuts
111+ // if (!IsSelectedTrack(track, EMTrackCuts::kTPCNCls)) {
112+ // return false;
113+ // }
114+ // if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRows)) {
115+ // return false;
116+ // }
117+ // if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRowsOverNCls)) {
118+ // return false;
119+ // }
120+ // if (!IsSelectedTrack(track, EMTrackCuts::kTPCFracSharedClusters)) {
121+ // return false;
122+ // }
123+ // if (!IsSelectedTrack(track, EMTrackCuts::kTPCChi2NDF)) {
124+ // return false;
125+ // }
122126
123127 return true ;
124128 }
@@ -136,32 +140,35 @@ class EMTrackCut : public TNamed
136140 case EMTrackCuts::kTrackPhiRange :
137141 return track.phi () > mMinTrackPhi && track.phi () < mMaxTrackPhi ;
138142
139- case EMTrackCuts::kTPCNCls :
140- return track.tpcNClsFound () >= mMinNClustersTPC ;
141-
142- case EMTrackCuts::kTPCCrossedRows :
143- return track.tpcNClsCrossedRows () >= mMinNCrossedRowsTPC ;
144-
145- case EMTrackCuts::kTPCCrossedRowsOverNCls :
146- return track.tpcCrossedRowsOverFindableCls () > mMinNCrossedRowsOverFindableClustersTPC ;
147-
148- case EMTrackCuts::kTPCFracSharedClusters :
149- return track.tpcFractionSharedCls () < mMaxFracSharedClustersTPC ;
150-
151- case EMTrackCuts::kTPCChi2NDF :
152- return mMinChi2PerClusterTPC < track.tpcChi2NCl () && track.tpcChi2NCl () < mMaxChi2PerClusterTPC ;
153-
154143 case EMTrackCuts::kDCAxy :
155144 return std::fabs (track.dcaXY ()) < ((mMaxDcaXYPtDep ) ? mMaxDcaXYPtDep (track.pt ()) : mMaxDcaXY );
156145
157146 case EMTrackCuts::kDCAz :
158147 return std::fabs (track.dcaZ ()) < mMaxDcaZ ;
159148
160- case EMTrackCuts::kITSNCls :
161- return mMinNClustersITS <= track.itsNCls () && track.itsNCls () <= mMaxNClustersITS ;
162-
163- case EMTrackCuts::kITSChi2NDF :
164- return mMinChi2PerClusterITS < track.itsChi2NCl () && track.itsChi2NCl () < mMaxChi2PerClusterITS ;
149+ case EMTrackCuts::kTrackBits :
150+ return true ;
151+
152+ // case EMTrackCuts::kTPCNCls:
153+ // return track.tpcNClsFound() >= mMinNClustersTPC;
154+ //
155+ // case EMTrackCuts::kTPCCrossedRows:
156+ // return track.tpcNClsCrossedRows() >= mMinNCrossedRowsTPC;
157+ //
158+ // case EMTrackCuts::kTPCCrossedRowsOverNCls:
159+ // return track.tpcCrossedRowsOverFindableCls() > mMinNCrossedRowsOverFindableClustersTPC;
160+ //
161+ // case EMTrackCuts::kTPCFracSharedClusters:
162+ // return track.tpcFractionSharedCls() < mMaxFracSharedClustersTPC;
163+ //
164+ // case EMTrackCuts::kTPCChi2NDF:
165+ // return mMinChi2PerClusterTPC < track.tpcChi2NCl() && track.tpcChi2NCl() < mMaxChi2PerClusterTPC;
166+ //
167+ // case EMTrackCuts::kITSNCls:
168+ // return mMinNClustersITS <= track.itsNCls() && track.itsNCls() <= mMaxNClustersITS;
169+ //
170+ // case EMTrackCuts::kITSChi2NDF:
171+ // return mMinChi2PerClusterITS < track.itsChi2NCl() && track.itsChi2NCl() < mMaxChi2PerClusterITS;
165172
166173 default :
167174 return false ;
@@ -186,6 +193,7 @@ class EMTrackCut : public TNamed
186193 void SetTrackMaxDcaXYPtDep (std::function<float (float )> ptDepCut);
187194 void RequireITSibAny (bool flag);
188195 void RequireITSib1st (bool flag);
196+ void SetTrackBits (uint16_t bits);
189197
190198 private:
191199 static const std::pair<int8_t , std::set<uint8_t >> its_ib_any_Requirement;
@@ -206,6 +214,7 @@ class EMTrackCut : public TNamed
206214 float mMinChi2PerClusterITS {0 .f }, mMaxChi2PerClusterITS {1e10f}; // max its fit chi2 per ITS cluster
207215 bool mRequireITSibAny {true };
208216 bool mRequireITSib1st {false };
217+ uint16_t mTrackBits {0 };
209218
210219 float mMaxDcaXY {1 .0f }; // max dca in xy plane
211220 float mMaxDcaZ {1 .0f }; // max dca in z direction
0 commit comments