54 std::list<MDHIT>::const_iterator iter;
55 for (iter=ListMDHits.begin(); iter!=ListMDHits.end(); ++iter)
62 m_MapLayers.insert(std::pair<int, FIBERS>((*iter).iPlate, structFibers));
63 m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
65 else m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
70 std::vector<double> b_p, b_n;
71 std::vector<double> Ov_p, Ov_n;
72 std::vector<int> Num_p, Num_n;
74 std::vector<int> iTrackMatch[2];
81 Reco_Track(b_p, b_n, Ov_p, Ov_n, Num_p, Num_n, FSel_n, FSel_p, iTrackMatch);
86 std::vector<Int_t> MaxTrackID;
87 Int_t iTmpMaxTrackID = -1;
90 while (iCntSort<(Int_t)b_p.size())
93 for (Int_t i=0; i<(Int_t)b_p.size(); i++)
98 for (
int j : MaxTrackID)
100 if (i==j) {MaxUsed =
true;
break;}
103 if (((Num_p[i]+Num_n[i])>iMaxSum) && (!MaxUsed))
105 iMaxSum = Num_p[i]+Num_n[i];
109 MaxTrackID.push_back(iTmpMaxTrackID);
114 for (
int i : MaxTrackID)
119 m_fOvU.push_back(Ov_p[i]);
120 m_fOvV.push_back(Ov_n[i]);
121 m_iNU.push_back(Num_p[i]);
122 m_iNV.push_back(Num_n[i]);
129 m_iFibSel[2*iPlate].push_back(FSel_p[iPlate][i]);
130 m_iFibSel[2*iPlate+1].push_back(FSel_n[iPlate][i]);
136 return StatusCode::SUCCESS;
167 Float_t fXInter, fYInter;
173 for (
int & iBin : iOver)
180 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
181 const unsigned int thisLayer = 2*iLayer+iFiberSide;
182 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
183 for (
const auto & thisFiber:thisFiberContainer)
190 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
193 for (Int_t iBin=0; iBin<480; iBin++)
195 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
210 Float_t fXInter, fYInter;
216 for (
int & iBin : iOver)
224 for (UInt_t j=0; j<FiberHit[iLayer].size(); j++)
226 iHit = FiberHit[iLayer][j];
232 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
235 for (Int_t iBin=0; iBin<480; iBin++)
237 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
251 std::vector<int> iSizePlateau;
259 for (Int_t i=0;i<72000;i++)
261 if (iOver[i]>iNumFib) iNumFib=iOver[i];
267 for (Int_t i=0;i<72000;i++)
269 if (iOver[i]==iNumFib)
271 iSizePlateau.push_back(i);
276 p_min = -36.0 + double(iSizePlateau.front())*1e-3;
277 p_tmp_min = iSizePlateau.front();
279 p_max = -36.0 + double(iSizePlateau.back())*1e-3;
283 Int_t full_width = iSizePlateau.size();
285 for (Int_t i=0; i<full_width; i++)
287 if (iSizePlateau[full_width-i-1]-p_tmp_min < 500)
290 p_max = -36.0 + double(iSizePlateau[full_width-i-1])*1e-3;
299 fb = fbRef+(p_min+p_max)/sqrt(2.0);
317 Float_t b_pos, b_neg;
318 Float_t
x,
y, x_tmp, y_tmp;
320 Float_t dist_x, dist_y;
335 x= (b_pos-b_neg)/2.0;
336 y= (b_neg+b_pos)/2.0;
338 for (
int & iLayer : iFSel) iLayer = 9999;
341 std::list<int>::iterator intIter;
346 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
347 const unsigned int thisLayer = 2*iLayer+iFiberSide;
348 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
349 for (
const auto & thisFiber:thisFiberContainer)
351 if (thisFiber != 9999)
356 dist_x = TMath::Abs(
x-x_tmp);
357 dist_y = TMath::Abs(
y-y_tmp);
359 dist_full = sqrt(dist_x*dist_x+dist_y*dist_y);
360 fib_dist = sqrt(TMath::Power((dist_x+dist_y)/2.0,2)-TMath::Power(dist_full/2.0,2));
362 if (fib_dist <= min_dist)
365 iFSel[iLayer] = thisFiber;
378 std::vector<double> &Ov_p, std::vector<double> &Ov_n,
379 std::vector<int> &Num_p, std::vector<int> &Num_n,
381 std::vector<int> (&iTrackMatch)[2])
388 std::vector<Int_t> Over_p(72000);
389 std::vector<Int_t> Over_n(72000);
401 std::list<int>::iterator intIter;
417 int iNumUFiberHits = 0;
418 int iNumVFiberHits = 0;
425 Fiber_MB_n[iLayer].clear();
426 const unsigned int thisLayer=2*iLayer+1;
427 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
428 for (
const auto & thisFiber:thisFiberContainer)
431 Fiber_MB_n[iLayer].push_back(thisFiber);
447 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
454 Fiber_MB_tmp[i].clear();
455 Fiber_MB_tmp[i].push_back(FSel_pos_tmp[i]);
471 for (
unsigned int i=0; i<Fiber_MB_n[iLayer].size(); i++)
473 m_MapLayers[2*iLayer+1].ListFibers.push_back(Fiber_MB_n[iLayer][i]);
507 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
520 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
526 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
535 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
541 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
544 b_p.push_back(b_pos);
546 Num_p.push_back(NumU);
548 b_n.push_back(b_neg);
550 Num_n.push_back(NumV);
552 iTrackMatch[0].push_back(cnt_step_U);
553 iTrackMatch[1].push_back(cnt_step_V);
566 FSel_n[iLayer].push_back(FSel_neg[iLayer]);
568 FSel_p[iLayer].push_back(FSel_pos_tmp[iLayer]);
600 const unsigned int thisLayer=2*iLayer+1;
601 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
602 for (
const auto & thisFiber:thisFiberContainer)
604 if (thisFiber == (
int)FSel_neg[iLayer])
606 auto it = std::find(begin(thisFiberContainer), end(thisFiberContainer), thisFiber);
643 std::list<int>::iterator itBeg =
m_MapLayers[2*iLayer].ListFibers.begin();
644 std::list<int>::iterator itEnd =
m_MapLayers[2*iLayer].ListFibers.end();
645 for (; itBeg != itEnd; ++itBeg)
647 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
680 std::list<int>::iterator itBeg =
m_MapLayers[2*iLayer].ListFibers.begin();
681 std::list<int>::iterator itEnd =
m_MapLayers[2*iLayer].ListFibers.end();
682 for (; itBeg != itEnd; ++itBeg)
684 if (*itBeg == (
int)FSel_pos_tmp[iLayer])