185 const ACDCHitCollection* ptrHits)
const
189 if (firstInTrackId == TrackingUtilities::c_InvalidIndex or lastInTrackId == TrackingUtilities::c_InvalidIndex) {
190 return TrackingUtilities::EForwardBackward::c_Invalid;
191 }
else if (firstInTrackId < lastInTrackId) {
192 return TrackingUtilities::EForwardBackward::c_Forward;
193 }
else if (firstInTrackId > lastInTrackId) {
194 return TrackingUtilities::EForwardBackward::c_Backward;
195 }
else if (firstInTrackId == lastInTrackId) {
196 return TrackingUtilities::EForwardBackward::c_Unknown;
198 return TrackingUtilities::EForwardBackward::c_Invalid;
203 const ACDCHitCollection* ptrFromHits,
204 const ACDCHitCollection* ptrToHits)
const
208 if (fromMCTrackId == INVALID_ITRACK)
return TrackingUtilities::EForwardBackward::c_Invalid;
211 if (toMCTrackId == INVALID_ITRACK)
return TrackingUtilities::EForwardBackward::c_Invalid;
213 if (fromMCTrackId != toMCTrackId)
return TrackingUtilities::EForwardBackward::c_Invalid;
217 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Invalid)
return TrackingUtilities::EForwardBackward::c_Invalid;
220 if (toFBInfo == TrackingUtilities::EForwardBackward::c_Invalid)
return TrackingUtilities::EForwardBackward::c_Invalid;
222 if (fromFBInfo != toFBInfo)
return TrackingUtilities::EForwardBackward::c_Invalid;
230 if (lastNPassedSuperLayersOfFromHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
234 if (firstNPassedSuperLayersOfToHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
237 if (lastNPassedSuperLayersOfFromHits < firstNPassedSuperLayersOfToHits) {
238 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Forward and
239 toFBInfo == TrackingUtilities::EForwardBackward::c_Forward) {
240 return TrackingUtilities::EForwardBackward::c_Forward;
242 return TrackingUtilities::EForwardBackward::c_Invalid;
244 }
else if (firstNPassedSuperLayersOfToHits < lastNPassedSuperLayersOfFromHits) {
245 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Backward and
246 toFBInfo == TrackingUtilities::EForwardBackward::c_Backward) {
247 return TrackingUtilities::EForwardBackward::c_Backward;
249 return TrackingUtilities::EForwardBackward::c_Invalid;
260 if (lastInTrackSegmentIdOfFromHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
264 if (firstInTrackSegmentIdOfToHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
267 if (lastInTrackSegmentIdOfFromHits < firstInTrackSegmentIdOfToHits) {
268 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Forward and
269 toFBInfo == TrackingUtilities::EForwardBackward::c_Forward) {
270 return TrackingUtilities::EForwardBackward::c_Forward;
272 return TrackingUtilities::EForwardBackward::c_Invalid;
274 }
else if (firstInTrackSegmentIdOfToHits < lastInTrackSegmentIdOfFromHits) {
277 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Backward and
278 toFBInfo == TrackingUtilities::EForwardBackward::c_Backward) {
279 return TrackingUtilities::EForwardBackward::c_Backward;
281 return TrackingUtilities::EForwardBackward::c_Invalid;
289 TrackingUtilities::Index lastInTrackIdOfFromHits =
getLastInTrackId(ptrFromHits);
291 if (lastInTrackIdOfFromHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
295 if (firstInTrackIdOfToHits == TrackingUtilities::c_InvalidIndex)
return TrackingUtilities::EForwardBackward::c_Invalid;
300 if (lastInTrackIdOfFromHits - 1 < firstInTrackIdOfToHits + 1) {
301 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Forward and
302 toFBInfo == TrackingUtilities::EForwardBackward::c_Forward) {
303 return TrackingUtilities::EForwardBackward::c_Forward;
307 if (firstInTrackIdOfToHits - 1 < lastInTrackIdOfFromHits + 1) {
308 if (fromFBInfo == TrackingUtilities::EForwardBackward::c_Backward and
309 toFBInfo == TrackingUtilities::EForwardBackward::c_Backward) {
310 return TrackingUtilities::EForwardBackward::c_Backward;
315 return TrackingUtilities::EForwardBackward::c_Invalid;
320 const ACDCHitCollection* ptrFromHits,
321 const ACDCHitCollection* ptrToHits)
const
324 if (result == TrackingUtilities::EForwardBackward::c_Invalid)
return result;
329 if (result == TrackingUtilities::EForwardBackward::c_Backward) {
330 fromCorrectRLVote = -fromCorrectRLVote;
331 toCorrectRLVote = -toCorrectRLVote;
334 int fromNCorrectRL = (fromCorrectRLVote + ptrFromHits->size()) / 2;
335 int toNCorrectRL = (toCorrectRLVote + ptrToHits->size()) / 2;
337 float fromRLPurity = 1.0 * fromNCorrectRL / ptrFromHits->size();
338 float toRLPurity = 1.0 * toNCorrectRL / ptrToHits->size();
343 fromNCorrectRL > 2.5 and toNCorrectRL > 2.5) {
347 return TrackingUtilities::EForwardBackward::c_Invalid;