@@ -47,7 +47,7 @@ struct HfCandidateSelectorXicToXiPiPi {
4747 Configurable<bool > activateQA{" activateQA" , false , " Flag to enable QA histogram" };
4848 // Enable PID
4949 Configurable<bool > usePid{" usePid" , true , " Switch for PID selection at track level" };
50- Configurable<bool > acceptPIDNotApplicable{ " acceptPIDNotApplicable " , true , " Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection " };
50+ Configurable<bool > useTpcPidOnly{ " useTpcPidOnly " , false , " Switch to use TPC PID only instead of TPC OR TOF) " };
5151 // TPC PID
5252 Configurable<float > ptPidTpcMin{" ptPidTpcMin" , 0.15 , " Lower bound of track pT for TPC PID" };
5353 Configurable<float > ptPidTpcMax{" ptPidTpcMax" , 20 ., " Upper bound of track pT for TPC PID" };
@@ -194,24 +194,27 @@ struct HfCandidateSelectorXicToXiPiPi {
194194 }
195195
196196 // / Apply PID selection
197- // / \param pidTrackPi0 PID status of trackPi0 (prong1 of Xic candidate)
198- // / \param pidTrackPi1 PID status of trackPi1 (prong2 of Xic candidate)
199- // / \param pidTrackPr PID status of trackPr (positive daughter of V0 candidate)
200- // / \param pidTrackPiLam PID status of trackPiLam (negative daughter of V0 candidate)
201- // / \param pidTrackPiXi PID status of trackPiXi (Bachelor of cascade candidate)
202- // / \param acceptPIDNotApplicable switch to accept Status::NotApplicable
197+ // / \param statusPidPi0 PID status of trackPi0 (prong1 of Xic candidate)
198+ // / \param statusPidPi1 PID status of trackPi1 (prong2 of Xic candidate)
199+ // / \param statusPidPiXi PID status of trackPiXi (Bachelor of cascade candidate)
200+ // / \param statusPidPrLam PID status of trackPr (positive daughter of V0 candidate)
201+ // / \param statusPidPiLam PID status of trackPiLam (negative daughter of V0 candidate)
202+ // / \param usePidTpcOnly switch to check only TPC status
203203 // / \return true if prongs of Xic candidate pass all selections
204- bool selectionPid (TrackSelectorPID::Status const pidTrackPi0 ,
205- TrackSelectorPID::Status const pidTrackPi1 ,
206- TrackSelectorPID::Status const pidTrackPr ,
207- TrackSelectorPID::Status const pidTrackPiLam ,
208- TrackSelectorPID::Status const pidTrackPiXi ,
209- bool const acceptPIDNotApplicable )
204+ bool selectionPid (TrackSelectorPID::Status const statusPidPi0 ,
205+ TrackSelectorPID::Status const statusPidPi1 ,
206+ TrackSelectorPID::Status const statusPidPiXi ,
207+ TrackSelectorPID::Status const statusPidPrLam ,
208+ TrackSelectorPID::Status const statusPidPiLam ,
209+ bool const useTpcPidOnly )
210210 {
211- if (!acceptPIDNotApplicable && (pidTrackPi0 != TrackSelectorPID::Accepted || pidTrackPi1 != TrackSelectorPID::Accepted || pidTrackPr != TrackSelectorPID::Accepted || pidTrackPiLam != TrackSelectorPID::Accepted || pidTrackPiXi != TrackSelectorPID::Accepted)) {
212- return false ;
211+ if (useTpcPidOnly) {
212+ if ((statusPidPi0 != TrackSelectorPID::Accepted && statusPidPi0 != TrackSelectorPID::NotApplicable) || (statusPidPi1 != TrackSelectorPID::Accepted && statusPidPi1 != TrackSelectorPID::NotApplicable) || (statusPidPiXi != TrackSelectorPID::Accepted && statusPidPiXi != TrackSelectorPID::NotApplicable) || (statusPidPrLam != TrackSelectorPID::Accepted && statusPidPrLam != TrackSelectorPID::NotApplicable) || (statusPidPiLam != TrackSelectorPID::Accepted && statusPidPiLam != TrackSelectorPID::NotApplicable)) {
213+ return false ;
214+ }
215+ return true ;
213216 }
214- if (acceptPIDNotApplicable && (pidTrackPi0 == TrackSelectorPID::Rejected || pidTrackPi1 == TrackSelectorPID::Rejected || pidTrackPr == TrackSelectorPID::Rejected || pidTrackPiLam == TrackSelectorPID::Rejected || pidTrackPiXi == TrackSelectorPID::Rejected) ) {
217+ if (statusPidPi0 == TrackSelectorPID::Rejected || statusPidPi1 == TrackSelectorPID::Rejected || statusPidPiXi == TrackSelectorPID::Rejected || statusPidPrLam == TrackSelectorPID::Rejected || statusPidPiLam == TrackSelectorPID::Rejected) {
215218 return false ;
216219 }
217220 return true ;
@@ -252,6 +255,12 @@ struct HfCandidateSelectorXicToXiPiPi {
252255
253256 // track-level PID selection
254257 if (usePid) {
258+ TrackSelectorPID::Status statusPidPi0 = TrackSelectorPID::NotApplicable;
259+ TrackSelectorPID::Status statusPidPi1 = TrackSelectorPID::NotApplicable;
260+ TrackSelectorPID::Status statusPidPiXi = TrackSelectorPID::NotApplicable;
261+ TrackSelectorPID::Status statusPidPrLam = TrackSelectorPID::NotApplicable;
262+ TrackSelectorPID::Status statusPidPiLam = TrackSelectorPID::NotApplicable;
263+
255264 auto trackPi0 = hfCandXic.pi0_as <TracksPidWithSel>();
256265 auto trackPi1 = hfCandXic.pi1_as <TracksPidWithSel>();
257266 auto trackV0PosDau = hfCandXic.posTrack_as <TracksPidWithSel>();
@@ -264,14 +273,22 @@ struct HfCandidateSelectorXicToXiPiPi {
264273 trackPr = trackV0NegDau;
265274 trackPiFromLam = trackV0PosDau;
266275 }
267- // PID info
268- TrackSelectorPID::Status pidTrackPi0 = selectorPion.statusTpcAndTof (trackPi0);
269- TrackSelectorPID::Status pidTrackPi1 = selectorPion.statusTpcAndTof (trackPi1);
270- TrackSelectorPID::Status pidTrackPr = selectorProton.statusTpcAndTof (trackPr);
271- TrackSelectorPID::Status pidTrackPiLam = selectorPion.statusTpcAndTof (trackPiFromLam);
272- TrackSelectorPID::Status pidTrackPiXi = selectorPion.statusTpcAndTof (trackPiFromXi);
273-
274- if (!selectionPid (pidTrackPi0, pidTrackPi1, pidTrackPr, pidTrackPiLam, pidTrackPiXi, acceptPIDNotApplicable.value )) {
276+
277+ if (useTpcPidOnly) {
278+ TrackSelectorPID::Status statusPidPi0 = selectorPion.statusTpc (trackPi0);
279+ TrackSelectorPID::Status statusPidPi1 = selectorPion.statusTpc (trackPi1);
280+ TrackSelectorPID::Status statusPidPiXi = selectorPion.statusTpc (trackPiFromXi);
281+ TrackSelectorPID::Status statusPidPrLam = selectorProton.statusTpc (trackPr);
282+ TrackSelectorPID::Status statusPidPiLam = selectorPion.statusTpc (trackPiFromLam);
283+ } else {
284+ TrackSelectorPID::Status statusPidPi0 = selectorPion.statusTpcOrTof (trackPi0);
285+ TrackSelectorPID::Status statusPidPi1 = selectorPion.statusTpcOrTof (trackPi1);
286+ TrackSelectorPID::Status statusPidPiXi = selectorPion.statusTpcOrTof (trackPiFromXi);
287+ TrackSelectorPID::Status statusPidPrLam = selectorProton.statusTpcOrTof (trackPr);
288+ TrackSelectorPID::Status statusPidPiLam = selectorPion.statusTpcOrTof (trackPiFromLam);
289+ }
290+
291+ if (!selectionPid (statusPidPi0, statusPidPi1, statusPidPiXi, statusPidPrLam, statusPidPiLam, useTpcPidOnly.value )) {
275292 hfSelXicToXiPiPiCandidate (statusXicToXiPiPi);
276293 if (applyMl) {
277294 hfMlXicToXiPiPiCandidate (outputMlXicToXiPiPi);
0 commit comments