@@ -33,7 +33,7 @@ namespace o2::aod::singletrackselector
3333namespace pidutils
3434{
3535
36- // ========================================== SFINAE checks ==========================================
36+ // ========================================== SFINAE checks for TPC ==========================================
3737
3838template <typename T, typename = void >
3939struct hasTPCPi : std::false_type {
@@ -77,6 +77,8 @@ template <typename T>
7777struct hasTPCHe <T, std::void_t <o2::aod::pidutils::hasTPCHe<T>>> : std::true_type {
7878};
7979
80+ // ========================================== SFINAE checks for TOF ==========================================
81+
8082template <typename T, typename = void >
8183struct hasTOFPi : std::false_type {
8284};
@@ -119,6 +121,50 @@ template <typename T>
119121struct hasTOFHe <T, std::void_t <o2::aod::pidutils::hasTOFHe<T>>> : std::true_type {
120122};
121123
124+ // ========================================== SFINAE checks for ITS ==========================================
125+
126+ template <typename T, typename = void >
127+ struct hasITSPi : std::false_type {
128+ };
129+ template <typename T>
130+ struct hasITSPi <T, std::void_t <decltype (std::declval<T&>().itsNSigmaPi())>> : std::true_type {
131+ };
132+
133+ template <typename T, typename = void >
134+ struct hasITSKa : std::false_type {
135+ };
136+ template <typename T>
137+ struct hasITSKa <T, std::void_t <decltype (std::declval<T&>().itsNSigmaKa())>> : std::true_type {
138+ };
139+
140+ template <typename T, typename = void >
141+ struct hasITSPr : std::false_type {
142+ };
143+ template <typename T>
144+ struct hasITSPr <T, std::void_t <decltype (std::declval<T&>().itsNSigmaPr())>> : std::true_type {
145+ };
146+
147+ template <typename T, typename = void >
148+ struct hasITSDe : std::false_type {
149+ };
150+ template <typename T>
151+ struct hasITSDe <T, std::void_t <decltype (std::declval<T&>().itsNSigmaDe())>> : std::true_type {
152+ };
153+
154+ template <typename T, typename = void >
155+ struct hasITSTr : std::false_type {
156+ };
157+ template <typename T>
158+ struct hasITSTr <T, std::void_t <decltype (std::declval<T&>().itsNSigmaTr())>> : std::true_type {
159+ };
160+
161+ template <typename T, typename = void >
162+ struct hasITSHe : std::false_type {
163+ };
164+ template <typename T>
165+ struct hasITSHe <T, std::void_t <decltype (std::declval<T&>().itsNSigmaHe())>> : std::true_type {
166+ };
167+
122168} // namespace pidutils
123169
124170// ========================================== ITS PID ==========================================
@@ -128,17 +174,23 @@ inline float getITSNsigma(TrackType const& track, int const& PDG)
128174{
129175 switch (PDG ) {
130176 case 211 :
131- return track.itsNSigmaPi ();
177+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSPi<TrackType>::value)
178+ return track.itsNSigmaPi ();
132179 case 321 :
133- return track.itsNSigmaKa ();
180+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSKa<TrackType>::value)
181+ return track.itsNSigmaKa ();
134182 case 2212 :
135- return track.itsNSigmaPr ();
183+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSPr<TrackType>::value)
184+ return track.itsNSigmaPr ();
136185 case 1000010020 :
137- return track.itsNSigmaDe ();
186+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSDe<TrackType>::value)
187+ return track.itsNSigmaDe ();
138188 case 1000020030 :
139- return track.itsNSigmaHe ();
189+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSHe<TrackType>::value)
190+ return track.itsNSigmaHe ();
140191 case 1000010030 :
141- return track.itsNSigmaTr ();
192+ if constexpr (o2::aod::singletrackselector::pidutils::hasITSTr<TrackType>::value)
193+ return track.itsNSigmaTr ();
142194 case 0 :
143195 return -1000.0 ;
144196 default :
0 commit comments