202 const ACDCHitCollection* ptrFromHits,
203 const ACDCHitCollection* ptrToHits)
const
207 if (fromMCTrackId == INVALID_ITRACK)
return EForwardBackward::c_Invalid;
210 if (toMCTrackId == INVALID_ITRACK)
return EForwardBackward::c_Invalid;
212 if (fromMCTrackId != toMCTrackId)
return EForwardBackward::c_Invalid;
216 if (fromFBInfo == EForwardBackward::c_Invalid)
return EForwardBackward::c_Invalid;
219 if (toFBInfo == EForwardBackward::c_Invalid)
return EForwardBackward::c_Invalid;
221 if (fromFBInfo != toFBInfo)
return EForwardBackward::c_Invalid;
229 if (lastNPassedSuperLayersOfFromHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
233 if (firstNPassedSuperLayersOfToHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
236 if (lastNPassedSuperLayersOfFromHits < firstNPassedSuperLayersOfToHits) {
237 if (fromFBInfo == EForwardBackward::c_Forward and
238 toFBInfo == EForwardBackward::c_Forward) {
239 return EForwardBackward::c_Forward;
241 return EForwardBackward::c_Invalid;
243 }
else if (firstNPassedSuperLayersOfToHits < lastNPassedSuperLayersOfFromHits) {
244 if (fromFBInfo == EForwardBackward::c_Backward and
245 toFBInfo == EForwardBackward::c_Backward) {
246 return EForwardBackward::c_Backward;
248 return EForwardBackward::c_Invalid;
259 if (lastInTrackSegmentIdOfFromHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
263 if (firstInTrackSegmentIdOfToHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
266 if (lastInTrackSegmentIdOfFromHits < firstInTrackSegmentIdOfToHits) {
267 if (fromFBInfo == EForwardBackward::c_Forward and
268 toFBInfo == EForwardBackward::c_Forward) {
269 return EForwardBackward::c_Forward;
271 return EForwardBackward::c_Invalid;
273 }
else if (firstInTrackSegmentIdOfToHits < lastInTrackSegmentIdOfFromHits) {
276 if (fromFBInfo == EForwardBackward::c_Backward and
277 toFBInfo == EForwardBackward::c_Backward) {
278 return EForwardBackward::c_Backward;
280 return EForwardBackward::c_Invalid;
290 if (lastInTrackIdOfFromHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
294 if (firstInTrackIdOfToHits == c_InvalidIndex)
return EForwardBackward::c_Invalid;
299 if (lastInTrackIdOfFromHits - 1 < firstInTrackIdOfToHits + 1) {
300 if (fromFBInfo == EForwardBackward::c_Forward and
301 toFBInfo == EForwardBackward::c_Forward) {
302 return EForwardBackward::c_Forward;
306 if (firstInTrackIdOfToHits - 1 < lastInTrackIdOfFromHits + 1) {
307 if (fromFBInfo == EForwardBackward::c_Backward and
308 toFBInfo == EForwardBackward::c_Backward) {
309 return EForwardBackward::c_Backward;
314 return EForwardBackward::c_Invalid;
319 const ACDCHitCollection* ptrFromHits,
320 const ACDCHitCollection* ptrToHits)
const
323 if (result == EForwardBackward::c_Invalid)
return result;
328 if (result == EForwardBackward::c_Backward) {
329 fromCorrectRLVote = -fromCorrectRLVote;
330 toCorrectRLVote = -toCorrectRLVote;
333 int fromNCorrectRL = (fromCorrectRLVote + ptrFromHits->size()) / 2;
334 int toNCorrectRL = (toCorrectRLVote + ptrToHits->size()) / 2;
336 float fromRLPurity = 1.0 * fromNCorrectRL / ptrFromHits->size();
337 float toRLPurity = 1.0 * toNCorrectRL / ptrToHits->size();
342 fromNCorrectRL > 2.5 and toNCorrectRL > 2.5) {
346 return EForwardBackward::c_Invalid;
351 const ACDCHitCollection* ptrHits)
const
354 B2WARNING(
"Segment is nullptr. Could not get fit.");
363 if (not ptrPrimarySimHit) {
365 ptrPrimarySimHit = mcHitLookUp.
getSimHit(ptrFirstHit);
366 if (not ptrPrimarySimHit) {
371 const CDCSimHit& primarySimHit = *ptrPrimarySimHit;
378 const TParticlePDG* ptrTPDGParticle = TDatabasePDG::Instance()->GetParticle(pdgCode);
380 if (not ptrTPDGParticle) {
381 B2WARNING(
"No particle for PDG code " << pdgCode <<
". Could not get fit");
385 const TParticlePDG& tPDGParticle = *ptrTPDGParticle;
387 double charge = tPDGParticle.Charge() / 3.0;
389 ESign chargeSign = sign(charge);
395 if (chargeSign != settedChargeSign) {
396 B2WARNING(
"Charge sign of mc particle is not the same as the one of the fit");