53 std::list<MDHIT>::const_iterator iter;
54 for (iter=ListMDHits.begin(); iter!=ListMDHits.end(); ++iter)
58 mapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
63 std::vector<double> b_p, b_n;
64 std::vector<double> Ov_p, Ov_n;
65 std::vector<int> Num_p, Num_n;
67 std::vector<int> iTrackMatch[2];
74 Reco_Track(mapLayers, b_p, b_n, Ov_p, Ov_n, Num_p, Num_n, FSel_n, FSel_p, iTrackMatch);
79 std::vector<Int_t> MaxTrackID;
80 Int_t iTmpMaxTrackID = -1;
83 while (iCntSort<(Int_t)b_p.size())
86 for (Int_t i=0; i<(Int_t)b_p.size(); i++)
91 for (
int j : MaxTrackID)
93 if (i==j) {MaxUsed =
true;
break;}
96 if (((Num_p[i]+Num_n[i])>iMaxSum) && (!MaxUsed))
98 iMaxSum = Num_p[i]+Num_n[i];
102 MaxTrackID.push_back(iTmpMaxTrackID);
107 for (
int i : MaxTrackID)
112 m_fOvU.push_back(Ov_p[i]);
113 m_fOvV.push_back(Ov_n[i]);
114 m_iNU.push_back(Num_p[i]);
115 m_iNV.push_back(Num_n[i]);
122 m_iFibSel[2*iPlate].push_back(FSel_p[iPlate][i]);
123 m_iFibSel[2*iPlate+1].push_back(FSel_n[iPlate][i]);
129 return StatusCode::SUCCESS;
149 Int_t iFiberSide, std::span<Int_t> iOver, Float_t fbRef, Int_t iSideFlag)
154 Float_t fXInter, fYInter;
160 for (
int & iBin : iOver)
167 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
168 const unsigned int thisLayer = 2*iLayer+iFiberSide;
169 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
170 for (
const auto & thisFiber:thisFiberContainer)
177 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
180 for (Int_t iBin=0; iBin<480; iBin++)
182 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
197 Float_t fXInter, fYInter;
203 for (
int & iBin : iOver)
211 for (UInt_t j=0; j<FiberHit[iLayer].size(); j++)
213 iHit = FiberHit[iLayer][j];
219 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
222 for (Int_t iBin=0; iBin<480; iBin++)
224 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
238 std::vector<int> iSizePlateau;
246 for (Int_t i=0;i<72000;i++)
248 if (iOver[i]>iNumFib) iNumFib=iOver[i];
254 for (Int_t i=0;i<72000;i++)
256 if (iOver[i]==iNumFib)
258 iSizePlateau.push_back(i);
263 p_min = -36.0 + double(iSizePlateau.front())*1e-3;
264 p_tmp_min = iSizePlateau.front();
266 p_max = -36.0 + double(iSizePlateau.back())*1e-3;
270 Int_t full_width = iSizePlateau.size();
272 for (Int_t i=0; i<full_width; i++)
274 if (iSizePlateau[full_width-i-1]-p_tmp_min < 500)
277 p_max = -36.0 + double(iSizePlateau[full_width-i-1])*1e-3;
286 fb = fbRef+(p_min+p_max)/sqrt(2.0);
301 Int_t iFiberSide, Float_t fbRef, Float_t fbRec, Int_t (&iFSel)[10], Int_t iSideFlag)
305 Float_t b_pos, b_neg;
306 Float_t
x,
y, x_tmp, y_tmp;
308 Float_t dist_x, dist_y;
323 x= (b_pos-b_neg)/2.0;
324 y= (b_neg+b_pos)/2.0;
326 for (
int & iLayer : iFSel) iLayer = 9999;
329 std::list<int>::iterator intIter;
334 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
335 const unsigned int thisLayer = 2*iLayer+iFiberSide;
336 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
337 for (
const auto & thisFiber:thisFiberContainer)
339 if (thisFiber != 9999)
344 dist_x = TMath::Abs(
x-x_tmp);
345 dist_y = TMath::Abs(
y-y_tmp);
347 dist_full = sqrt(dist_x*dist_x+dist_y*dist_y);
348 fib_dist = sqrt(TMath::Power((dist_x+dist_y)/2.0,2)-TMath::Power(dist_full/2.0,2));
350 if (fib_dist <= min_dist)
353 iFSel[iLayer] = thisFiber;
366 std::vector<double> &b_p, std::vector<double> &b_n,
367 std::vector<double> &Ov_p, std::vector<double> &Ov_n,
368 std::vector<int> &Num_p, std::vector<int> &Num_n,
370 std::vector<int> (&iTrackMatch)[2])
376 std::vector<Int_t> Over_p(72000);
377 std::vector<Int_t> Over_n(72000);
389 std::list<int>::iterator intIter;
405 int iNumUFiberHits = 0;
406 int iNumVFiberHits = 0;
413 Fiber_MB_n[iLayer].clear();
414 const unsigned int thisLayer=2*iLayer+1;
415 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
416 for (
const auto & thisFiber:thisFiberContainer)
419 Fiber_MB_n[iLayer].push_back(thisFiber);
433 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
435 Finding_Fib(mapLayers, 0, b_ref_n, b_pos, FSel_pos_tmp, 0);
438 Fiber_MB_tmp[i].clear();
439 Fiber_MB_tmp[i].push_back(FSel_pos_tmp[i]);
445 FIBERS& fibers = mapLayers[2*iLayer+1];
447 for (
unsigned int i=0; i<Fiber_MB_n[iLayer].size(); i++)
449 fibers.
ListFibers.push_back(Fiber_MB_n[iLayer][i]);
464 Int_t sz0 = mapLayers[2*iLayer].ListFibers.size();
466 Int_t sz1 = mapLayers[2*iLayer].ListFibers.size();
476 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
484 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
488 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
494 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
498 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
501 b_p.push_back(b_pos);
503 Num_p.push_back(NumU);
505 b_n.push_back(b_neg);
507 Num_n.push_back(NumV);
509 iTrackMatch[0].push_back(cnt_step_U);
510 iTrackMatch[1].push_back(cnt_step_V);
514 Finding_Fib(mapLayers, 1,b_pos, b_neg, FSel_neg, 1);
518 FSel_n[iLayer].push_back(FSel_neg[iLayer]);
520 FSel_p[iLayer].push_back(FSel_pos_tmp[iLayer]);
526 const unsigned int thisLayer=2*iLayer+1;
527 const std::list<int> & thisFiberContainer = mapLayers[thisLayer].ListFibers;
528 for (
const auto & thisFiber:thisFiberContainer)
530 if (thisFiber == (
int)FSel_neg[iLayer])
532 auto it = std::find(begin(thisFiberContainer), end(thisFiberContainer), thisFiber);
533 mapLayers[2*iLayer+1].ListFibers.erase(it);
554 FIBERS& fiber = mapLayers[2*iLayer];
555 std::list<int>::iterator itBeg = fiber.
ListFibers.begin();
556 std::list<int>::iterator itEnd = fiber.
ListFibers.end();
557 for (; itBeg != itEnd; ++itBeg)
559 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
576 FIBERS& fiber = mapLayers[2*iLayer];
577 std::list<int>::iterator itBeg = fiber.
ListFibers.begin();
578 std::list<int>::iterator itEnd = fiber.
ListFibers.end();
579 for (; itBeg != itEnd; ++itBeg)
581 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
606 for (
size_t iTrack=0; iTrack<iTrackNum; iTrack++)
607 iFibSel[iTrack][iLayer] =
m_iFibSel[iLayer].at(iTrack);
608 for (
size_t iTrack=iTrackNum; iTrack<
MAXTRACKNUM; iTrack++)
609 iFibSel[iTrack][iLayer] = -9999;
614 std::copy_n (
m_fOvU.begin(), iTrackNum, fOvU);
615 std::copy_n (
m_fOvV.begin(), iTrackNum, fOvV);
616 std::fill_n (fOvU+iTrackNum,
MAXTRACKNUM-iTrackNum, -9999.0);
617 std::fill_n (fOvV+iTrackNum,
MAXTRACKNUM-iTrackNum, -9999.0);
622 std::copy_n (
m_iNU.begin(), iTrackNum, iNumU);
623 std::copy_n (
m_iNV.begin(), iTrackNum, iNumV);
624 std::fill_n (iNumU+iTrackNum,
MAXTRACKNUM-iTrackNum, -9999);
625 std::fill_n (iNumV+iTrackNum,
MAXTRACKNUM-iTrackNum, -9999);