80 for (
int i = 0; i < nLayers; i++)
100 std::copy(
m_fOvU->begin(),
m_fOvU->end(), obj.m_fOvU->begin());
101 std::copy(
m_fOvV->begin(),
m_fOvV->end(), obj.m_fOvV->begin());
102 std::copy(
m_iNU->begin(),
m_iNU->end(), obj.m_iNU->begin());
103 std::copy(
m_iNV->begin(),
m_iNV->end(), obj.m_iNV->begin());
105 for (
int iLayer = 0; iLayer < nLayers; iLayer++)
108 m_iFibSel[iLayer] =
new std::vector<Int_t>();
109 std::copy(
m_iFibSel[iLayer]->begin(),
m_iFibSel[iLayer]->end(), obj.m_iFibSel[iLayer]->begin());
174 std::list<MDHIT>::const_iterator iter;
175 for (iter=ListMDHits.begin(); iter!=ListMDHits.end(); ++iter)
182 m_MapLayers.insert(std::pair<int, FIBERS>((*iter).iPlate, structFibers));
183 m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
185 else m_MapLayers[(*iter).iPlate].ListFibers.push_back((*iter).iFiber);
190 std::vector<double> b_p, b_n;
191 std::vector<double> Ov_p, Ov_n;
192 std::vector<int> Num_p, Num_n;
194 std::vector<int> iTrackMatch[2];
215 Reco_Track(b_p, b_n, Ov_p, Ov_n, Num_p, Num_n, FSel_n, FSel_p, iTrackMatch);
220 std::vector<Int_t> MaxTrackID;
221 Int_t iTmpMaxTrackID = -1;
224 while (iCntSort<(Int_t)b_p.size())
227 for (Int_t i=0; i<(Int_t)b_p.size(); i++)
230 Bool_t MaxUsed=
false;
232 for (
int j : MaxTrackID)
234 if (i==j) {MaxUsed =
true;
break;}
237 if (((Num_p[i]+Num_n[i])>iMaxSum) && (!MaxUsed))
239 iMaxSum = Num_p[i]+Num_n[i];
243 MaxTrackID.push_back(iTmpMaxTrackID);
250 for (
int i : MaxTrackID)
258 m_fOvU->push_back(Ov_p[i]);
259 m_fOvV->push_back(Ov_n[i]);
260 m_iNU->push_back(Num_p[i]);
261 m_iNV->push_back(Num_n[i]);
278 m_iFibSel[2*iPlate]->push_back(FSel_p[iPlate][i]);
279 m_iFibSel[2*iPlate+1]->push_back(FSel_n[iPlate][i]);
324 return StatusCode::SUCCESS;
355 Float_t fXInter, fYInter;
361 for (
int & iBin : iOver)
390 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
391 const unsigned int thisLayer = 2*iLayer+iFiberSide;
392 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
393 for (
const auto & thisFiber:thisFiberContainer)
400 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
403 for (Int_t iBin=0; iBin<480; iBin++)
405 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
420 Float_t fXInter, fYInter;
426 for (
int & iBin : iOver)
434 for (UInt_t j=0; j<FiberHit[iLayer].size(); j++)
436 iHit = FiberHit[iLayer][j];
442 FibCen = (fYInter-fSign*fXInter)/sqrt(2.0);
445 for (Int_t iBin=0; iBin<480; iBin++)
447 iOver[(int)((FibCen-0.24)*1000)+iBin+36000]++;
461 std::vector<int> iSizePlateau;
469 for (Int_t i=0;i<72000;i++)
471 if (iOver[i]>iNumFib) iNumFib=iOver[i];
477 for (Int_t i=0;i<72000;i++)
479 if (iOver[i]==iNumFib)
481 iSizePlateau.push_back(i);
486 p_min = -36.0 + double(iSizePlateau.front())*1e-3;
487 p_tmp_min = iSizePlateau.front();
489 p_max = -36.0 + double(iSizePlateau.back())*1e-3;
493 Int_t full_width = iSizePlateau.size();
495 for (Int_t i=0; i<full_width; i++)
497 if (iSizePlateau[full_width-i-1]-p_tmp_min < 500)
500 p_max = -36.0 + double(iSizePlateau[full_width-i-1])*1e-3;
509 fb = fbRef+(p_min+p_max)/sqrt(2.0);
527 Float_t b_pos, b_neg;
528 Float_t
x,
y, x_tmp, y_tmp;
530 Float_t dist_x, dist_y;
546 x= (b_pos-b_neg)/2.0;
547 y= (b_neg+b_pos)/2.0;
549 for (
int & iLayer : iFSel) iLayer = 9999;
552 std::list<int>::iterator intIter;
581 const unsigned int thisSideLayer = iLayer*2+iSideFlag;
582 const unsigned int thisLayer = 2*iLayer+iFiberSide;
583 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
584 for (
const auto & thisFiber:thisFiberContainer)
586 if (thisFiber != 9999)
591 dist_x = TMath::Abs(
x-x_tmp);
592 dist_y = TMath::Abs(
y-y_tmp);
594 dist_full = sqrt(dist_x*dist_x+dist_y*dist_y);
595 fib_dist = sqrt(TMath::Power((dist_x+dist_y)/2.0,2)-TMath::Power(dist_full/2.0,2));
597 if (fib_dist <= min_dist)
600 iFSel[iLayer] = thisFiber;
642 std::vector<double> &Ov_p, std::vector<double> &Ov_n,
643 std::vector<int> &Num_p, std::vector<int> &Num_n,
645 std::vector<int> (&iTrackMatch)[2])
665 std::list<int>::iterator intIter;
681 int iNumUFiberHits = 0;
682 int iNumVFiberHits = 0;
701 Fiber_MB_n[iLayer].clear();
702 const unsigned int thisLayer=2*iLayer+1;
703 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
704 for (
const auto & thisFiber:thisFiberContainer)
707 Fiber_MB_n[iLayer].push_back(thisFiber);
723 Find_Proj(Over_p, b_ref_n, b_pos, OvU, NumU);
730 Fiber_MB_tmp[i].clear();
731 Fiber_MB_tmp[i].push_back(FSel_pos_tmp[i]);
747 for (
unsigned int i=0; i<Fiber_MB_n[iLayer].size(); i++)
749 m_MapLayers[2*iLayer+1].ListFibers.push_back(Fiber_MB_n[iLayer][i]);
783 Find_Proj(Over_n, b_ref_p, b_neg, OvV, NumV);
796 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
802 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
811 Find_Proj(Over_p, b_neg, b_pos, OvU, NumU);
817 Find_Proj(Over_n, b_pos, b_neg, OvV, NumV);
820 b_p.push_back(b_pos);
822 Num_p.push_back(NumU);
824 b_n.push_back(b_neg);
826 Num_n.push_back(NumV);
828 iTrackMatch[0].push_back(cnt_step_U);
829 iTrackMatch[1].push_back(cnt_step_V);
842 FSel_n[iLayer].push_back(FSel_neg[iLayer]);
844 FSel_p[iLayer].push_back(FSel_pos_tmp[iLayer]);
876 const unsigned int thisLayer=2*iLayer+1;
877 const std::list<int> & thisFiberContainer =
m_MapLayers[thisLayer].ListFibers;
878 for (
const auto & thisFiber:thisFiberContainer)
880 if (thisFiber == (
int)FSel_neg[iLayer])
882 auto it = std::find(begin(thisFiberContainer), end(thisFiberContainer), thisFiber);
919 std::list<int>::iterator itBeg =
m_MapLayers[2*iLayer].ListFibers.begin();
920 std::list<int>::iterator itEnd =
m_MapLayers[2*iLayer].ListFibers.end();
921 for (; itBeg != itEnd; ++itBeg)
923 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
956 std::list<int>::iterator itBeg =
m_MapLayers[2*iLayer].ListFibers.begin();
957 std::list<int>::iterator itEnd =
m_MapLayers[2*iLayer].ListFibers.end();
958 for (; itBeg != itEnd; ++itBeg)
960 if (*itBeg == (
int)FSel_pos_tmp[iLayer])