28 m_fOvU =
new std::vector<Float_t>();
29 m_fOvV =
new std::vector<Float_t>();
30 m_iNU =
new std::vector<Int_t>();
31 m_iNV =
new std::vector<Int_t>();
36 iLayer =
new std::vector<Int_t>();
59 m_fOvU =
new std::vector<Float_t>(*
obj.m_fOvU);
60 m_fOvV =
new std::vector<Float_t>(*
obj.m_fOvV);
61 m_iNU =
new std::vector<Int_t>(*
obj.m_iNU);
62 m_iNV =
new std::vector<Int_t>(*
obj.m_iNV);
66 m_iFibSel[iLayer] =
new std::vector<Int_t>(*
obj.m_iFibSel[iLayer]);
80 for (
int i = 0;
i < nLayers;
i++)
105 for (
int iLayer = 0; iLayer < nLayers; iLayer++)
108 m_iFibSel[iLayer] =
new std::vector<Int_t>();
134 if (iLayer!=
nullptr) {
delete iLayer; iLayer=
nullptr;}
150 for (Int_t iPot=0; iPot<
RPOTSCNT; iPot++)
156 m_faMD[iPot][iLayer][iFiber] = faMD[iPot][iLayer][iFiber];
157 m_fbMD[iPot][iLayer][iFiber] = fbMD[iPot][iLayer][iFiber];
164 return StatusCode::SUCCESS;
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)
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;
331 Int_t iTrackNum=0, iSize=0;
332 std::fill_n(&fRecXPos[0],
sizeof(fRecXPos)/
sizeof(Float_t), -9999.0);
333 std::fill_n(&fRecYPos[0],
sizeof(fRecYPos)/
sizeof(Float_t), -9999.0);
338 for (Int_t
i=0;
i<iTrackNum;
i++)
344 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())*1
e-3;
487 p_tmp_min = iSizePlateau.front();
489 p_max = -36.0 +
double(iSizePlateau.back())*1
e-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])*1
e-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;
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])
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])
921 for (; itBeg != itEnd; ++itBeg)
923 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
958 for (; itBeg != itEnd; ++itBeg)
960 if (*itBeg == (
int)FSel_pos_tmp[iLayer])
998 std::fill_n(&fOvU[0],
sizeof(fOvU)/
sizeof(Float_t), -9999.0);
999 std::fill_n(&fOvV[0],
sizeof(fOvV)/
sizeof(Float_t), -9999.0);
1000 std::fill_n(&iNumU[0],
sizeof(iNumU)/
sizeof(Int_t), -9999);
1001 std::fill_n(&iNumV[0],
sizeof(iNumV)/
sizeof(Int_t), -9999);
1002 std::fill_n(&iFibSel[0][0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
1008 iSize = ((Int_t)iLayer->size() > iSize)? iLayer->size() : iSize;
1011 for (Int_t iTrack=0; iTrack<iTrackNum; iTrack++)
1015 iFibSel[iTrack][iLayer] =
m_iFibSel[iLayer]->at(iTrack);
1023 for (Int_t iTrack=0; iTrack<iTrackNum; iTrack++)
1025 fOvU[iTrack] =
m_fOvU->at(iTrack);
1026 fOvV[iTrack] =
m_fOvV->at(iTrack);
1033 for (Int_t iTrack=0; iTrack<iTrackNum; iTrack++)
1035 iNumU[iTrack] =
m_iNU->at(iTrack);
1036 iNumV[iTrack] =
m_iNV->at(iTrack);