71 std::list<MDHIT>::const_iterator iter;
72 for (iter=ListMDHits.begin(); iter!=ListMDHits.end(); ++iter)
79 m_MapLayers.insert(std::pair<int, FIBERS>((*iter).iPlate, structFibers));
80 m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
82 else m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
87 std::vector<Float_t> b_p, b_n;
88 std::vector<Float_t> Ov_p, Ov_n;
89 std::vector<int> Num_p, Num_n;
93 std::vector<Int_t> GapsID;
100 Reco_Track(b_p, b_n, Ov_p, Ov_n, Num_p, Num_n, FSel_n, FSel_p, Gaps, GapsID, FGaps_p, FGaps_n, Gap_Fib_p, Gap_Fib_n);
103 for (UInt_t i=0;i< b_p.size();i++)
111 m_iNU[cnt_tr]= Num_p[i];
112 m_iNV[cnt_tr]= Num_n[i];
141 return StatusCode::SUCCESS;
161 Float_t fXInter, fYInter;
167 for (
int & iBin : iOver)
172 std::list<int>::iterator intIter;
176 iIndex = 2*iLayer+iFiberSide;
177 for (intIter=
m_MapLayers[iIndex].ListFibers.begin(); intIter!=
m_MapLayers[iIndex].ListFibers.end(); ++intIter)
184 fFibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
187 for (Int_t iBin=0; iBin<480; iBin++)
189 iOver[(int)((fFibCen-0.24)*1000)+iBin+36000]++;
265 Float_t b_pos, b_neg;
266 Float_t
x,
y, x_tmp, y_tmp;
268 Float_t dist_x, dist_y;
284 x= (b_pos-b_neg)/2.0;
285 y= (b_neg+b_pos)/2.0;
287 for (
int & iLayer : iFSel) iLayer = 9999;
290 std::list<int>::iterator intIter;
297 iIndex = 2*iLayer+iFiberSide;
298 for (intIter=
m_MapLayers[iIndex].ListFibers.begin(); intIter!=
m_MapLayers[iIndex].ListFibers.end(); ++intIter)
305 dist_x = TMath::Abs(
x-x_tmp);
306 dist_y = TMath::Abs(
y-y_tmp);
308 dist_full = sqrt(dist_x*dist_x+dist_y*dist_y);
309 fib_dist = sqrt(TMath::Power((dist_x+dist_y)/2.0,2)-TMath::Power(dist_full/2.0,2));
311 if (fib_dist <= min_dist)
316 iFSel[iLayer] = gFib;
328 std::vector<Float_t> &Ov_p, std::vector<Float_t> &Ov_n,
329 std::vector<int> &Num_p, std::vector<int> &Num_n,
334 std::vector<Int_t> Over_p(72000);
335 std::vector<Int_t> Over_n(72000);
336 std::vector<Int_t> Over_copy(72000);
339 Float_t b_ref_p = -127.0;
340 Float_t b_ref_n = -127.0;
349 Float_t b_pos_silent;
350 Float_t b_neg_silent;
351 Float_t b_pos_active;
352 Float_t b_neg_active;
355 memset(&FSel_n, 0,
sizeof(Int_t));
356 memset(&FSel_p, 0,
sizeof(Int_t));
357 memset(&FGaps_n,
false,
sizeof(Bool_t));
358 memset(&FGaps_p,
false,
sizeof(Bool_t));
359 memset(&Gap_Fib_n, 0,
sizeof(Int_t));
360 memset(&Gap_Fib_p, 0,
sizeof(Int_t));
361 std::fill_n(&Gap_Fib_n[0][0],
sizeof(Gap_Fib_n)/
sizeof(Int_t), 9999);
362 std::fill_n(&Gap_Fib_p[0][0],
sizeof(Gap_Fib_p)/
sizeof(Int_t), 9999);
380 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
389 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
397 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
401 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
407 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
411 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
414 b_p.push_back(b_pos);
416 Num_p.push_back(NumU);
418 b_n.push_back(b_neg);
420 Num_n.push_back(NumV);
433 Gaps[0][0] =
Silent_Gap(Over_copy, b_neg, b_pos, FSel_p, FGaps_p, Gap_Fib_p, OvU, (Int_t)0);
434 Find_Proj(Over_copy, b_neg, b_pos_silent, OvU, NumU);
437 Gaps[1][0] =
Silent_Gap(Over_copy, b_pos, b_neg, FSel_n, FGaps_n, Gap_Fib_n, OvV, 1);
438 Find_Proj(Over_copy, b_pos, b_neg_silent, OvV, NumV);
440 if (Gaps[0][0]>0 || Gaps[1][0]>0)
442 b_p.push_back(b_pos_silent);
444 Num_p.push_back(NumU);
446 b_n.push_back(b_neg_silent);
448 Num_n.push_back(NumV);
455 Gaps[0][1] =
Active_Gap(0,Over_copy, b_neg, b_pos, FSel_p, OvU, 0);
456 Find_Proj(Over_copy, b_neg, b_pos_active, OvU, NumU);
459 Gaps[1][1] =
Active_Gap(1,Over_copy, b_pos, b_neg, FSel_n, OvV, 1);
460 Find_Proj(Over_copy, b_pos, b_neg_active, OvV, NumV);
462 if (Gaps[0][1]>0 || Gaps[1][1]>0)
464 b_p.push_back(b_pos_active);
466 Num_p.push_back(NumU);
468 b_n.push_back(b_neg_active);
470 Num_n.push_back(NumV);
476 if ((Gaps[0][0]>0 || Gaps[1][0]>0) && (Gaps[0][1]>0 || Gaps[1][1]>0))
478 Over_copy = std::move(Over_p);
479 Silent_Gap(Over_copy, b_neg, b_pos, FSel_p, FG_p, G_F_p, OvU, 0);
480 Active_Gap(0,Over_copy, b_neg, b_pos, FSel_p, OvU, 0);
481 Find_Proj(Over_copy, b_neg, b_pos_active, OvU, NumU);
483 Over_copy = std::move(Over_n);
484 Silent_Gap(Over_copy, b_pos, b_neg, FSel_n, FG_n, G_F_n, OvV, 1);
485 Active_Gap(1,Over_copy, b_pos, b_neg, FSel_n, OvV, 1);
486 Find_Proj(Over_copy, b_pos, b_neg_active, OvV, NumV);
488 b_p.push_back(b_pos_active);
490 Num_p.push_back(NumU);
492 b_n.push_back(b_neg_active);
494 Num_n.push_back(NumV);
522 Float_t fXInter, fYInter;
523 Float_t fFibCen, fFibCen0, fFibCen1;
525 Float_t b_center, gap_size;
535 if (FSel[iLayer]==9999)
537 if (iSideFlag==0 || (iSideFlag==1 && iLayer!=4))
543 fFibCen0 = (fYInter-fSign*fXInter)/sqrt(2.);
547 fFibCen1 = (fYInter-fSign*fXInter)/sqrt(2.);
549 b_center = (fFibCen1+fFibCen0)/2.;
551 fXInter= fSign*(b_ref-b_rec)/2.;
552 fYInter= (b_ref+b_rec)/2.-b_ref;
553 fFibCen = (fYInter-fSign*fXInter)/sqrt(2.);
555 gap_size = TMath::Abs(fFibCen1-fFibCen0)-0.480;
556 Gap_Width = int(gap_size*1000.);
558 if (((b_center+gap_size/2.)<fFibCen+OverLap/2. && (b_center+gap_size/2.)> fFibCen-OverLap/2.) || ((b_center-gap_size/2.)>fFibCen-OverLap/2. && (b_center-gap_size/2.)<fFibCen+OverLap/2.))
563 Gap_Fib[iLayer][0] = iFiber;
564 Gap_Fib[iLayer][1] = iFiber+1;
568 Over[(Int_t)((b_center-gap_size/2.)*1000)+
bin+36000]++;
582 Float_t fXInter, fYInter;
583 Float_t fFibCen, fFibCen0, fFibCen1;
585 Float_t b_center, gap_size;
596 std::list<int>::iterator iHit;
600 iIndex = 2*iLayer+iFiberSide;
601 if (FSel[iLayer]!=9999)
608 if (*iHit==FSel[iLayer]+1) bHit[0]=
true;
609 if (*iHit==FSel[iLayer]-1) bHit[1]=
true;
612 for (UInt_t j=0;j<2;j++)
619 fXInter= fSign*(b_ref-
m_fbMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]])/(1+fSign*
m_faMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]]);
621 fFibCen0 = (fYInter-fSign*fXInter)/sqrt(2.);
623 fXInter= fSign*(b_ref-
m_fbMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]+shift])/(1+fSign*
m_faMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]+shift]);
624 fYInter= (fSign*
m_faMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]+shift]*b_ref+
m_fbMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]+shift])/(1+fSign*
m_faMD[
m_iRPot][iLayer*2+iSideFlag][FSel[iLayer]+shift])-b_ref;
625 fFibCen1 = (fYInter-fSign*fXInter)/sqrt(2.);
627 b_center = (fFibCen1+fFibCen0)/2.;
629 fXInter= fSign*(b_ref-b_rec)/2.;
630 fYInter= (b_ref+b_rec)/2.-b_ref;
631 fFibCen = (fYInter-fSign*fXInter)/sqrt(2.);
633 gap_size = TMath::Abs(fFibCen1-fFibCen0)-0.480;
634 Gap_Width = int(gap_size*1000.);
636 if (((b_center+gap_size/2.)<fFibCen+OverLap/2. && (b_center+gap_size/2.)> fFibCen-OverLap/2.) || ((b_center-gap_size/2.)>fFibCen-OverLap/2. && (b_center-gap_size/2.)<fFibCen+OverLap/2.))
642 Over[(Int_t)((b_center-gap_size/2.)*1000)+
bin+36000]++;