35 return StatusCode::SUCCESS;
42 std::map<int, FIBERS> MapLayers;
44 std::list<ODHIT>::const_iterator
iter;
45 for (
iter=ListODHits.begin();
iter!=ListODHits.end(); ++
iter)
47 if (iRPot == (*iter).iRPot)
49 iLayer = 2*(*iter).iPlate + (*iter).iSide;
50 if(MapLayers.find(iLayer)==MapLayers.end())
53 MapLayers.insert(std::pair<int, FIBERS>(iLayer, structFibers));
54 MapLayers[iLayer].ListFibers.push_back((*iter).iFiber);
58 MapLayers[iLayer].ListFibers.push_back((*iter).iFiber);
67 for (Int_t iLayer=0; iLayer<iMaxLay; iLayer++)
71 m_iMulti[iSide][iPlate] = MapLayers[iLayer].ListFibers.size();
77 return StatusCode::SUCCESS;
84 return StatusCode::SUCCESS;
89 const Int_t NBINTOT = 17000;
93 Float_t fFiberXPos = 23;
97 std::list<int>::const_iterator iIter;
101 for (Int_t iSide=0; iSide<
ODSIDESCNT; iSide++)
108 iSign = (iSide==0)? -1 : 1;
110 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
112 iHitLayer[iSide][iBin] = 0;
118 if (MapLayers[2*iPlate+iSide].ListFibers.size()<=(UInt_t)
m_iMultiplicityCut && !MapLayers[2*iPlate+iSide].ListFibers.empty())
121 for (iIter=MapLayers[2*iPlate+iSide].ListFibers.begin(); iIter!=MapLayers[2*iPlate+iSide].ListFibers.end(); ++iIter)
124 fPosition = -1*(iSign*fFiberXPos*faOD[iRPot][iPlate][iSide][*iIter] + fbOD[iRPot][iPlate][iSide][*iIter]);
125 for (Int_t iBin=0; iBin<480; iBin++)
127 iHitLayer[iSide][(
int)(((fPosition-0.24)*1000)+iBin-128000)]++;
134 std::vector<int> *vecMaxHit =
new std::vector<int>;
137 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
139 if (iHitLayer[iSide][iBin]>iNum) iNum = iHitLayer[iSide][iBin];
146 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
148 if (iHitLayer[iSide][iBin]==iNum)
150 vecMaxHit->push_back(iBin);
154 Float_t fHitMinPos, fHitMaxPos;
158 fHitMinPos = -128.0 - (
double)(vecMaxHit->front())*1
e-3;
159 fHitMaxPos = -128.0 - (
double)(vecMaxHit->back())*1
e-3;
179 fPosition = (fHitMinPos + fHitMaxPos)/2.0;
182 Results.fOverY = fHitMinPos-fHitMaxPos;
190 Int_t iFibSel = 9999;
197 fMin = 0.24/
cos(TMath::Pi()/4.0);
199 for (iIter=MapLayers[2*iPlate+iSide].ListFibers.begin(); iIter!=MapLayers[2*iPlate+iSide].ListFibers.end(); ++iIter)
201 fPosition = iSign*fFiberXPos*faOD[iRPot][iPlate][iSide][*iIter] + fbOD[iRPot][iPlate][iSide][*iIter];
202 fDist = TMath::Abs(
Results.fRecPos-fPosition);
229 Float_t fFiberXPos = 23;
238 std::list<int>::const_iterator intIter0;
239 std::list<int>::const_iterator intIter1;
240 std::list<int>::const_iterator intIter2;
242 for (Int_t iSide=0; iSide<
ODSIDESCNT; iSide++)
244 iSign = (iSide==0) ? -1 : 1;
248 if (!MapLayers[0+iSide].ListFibers.empty())
250 for (intIter0=MapLayers[0+iSide].ListFibers.begin(); intIter0!=MapLayers[0+iSide].ListFibers.end(); ++intIter0)
252 if (!MapLayers[2+iSide].ListFibers.empty())
254 for (intIter1=MapLayers[2+iSide].ListFibers.begin(); intIter1!=MapLayers[2+iSide].ListFibers.end(); ++intIter1)
256 if (!MapLayers[4+iSide].ListFibers.empty())
258 for (intIter2=MapLayers[4+iSide].ListFibers.begin(); intIter2!=MapLayers[4+iSide].ListFibers.end(); ++intIter2)
260 fDistanceA = TMath::Abs(iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0] + fbOD[iRPot][0][iSide][*intIter0] - iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1] - fbOD[iRPot][1][iSide][*intIter1]);
261 fDistanceB = TMath::Abs(iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1] + fbOD[iRPot][1][iSide][*intIter1] - iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2] - fbOD[iRPot][2][iSide][*intIter2]);
265 fPosition = (iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0]+fbOD[iRPot][0][iSide][*intIter0] + iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1]+fbOD[iRPot][1][iSide][*intIter1] + iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2]+fbOD[iRPot][2][iSide][*intIter2])/3.0;
274 fDistanceA = TMath::Abs(iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0]+fbOD[iRPot][0][iSide][*intIter0] - iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1]-fbOD[iRPot][1][iSide][*intIter1]);
277 fPosition = (iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0]+fbOD[iRPot][0][iSide][*intIter0] + iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1]+fbOD[iRPot][1][iSide][*intIter1])/2.0;
287 if (!MapLayers[4+iSide].ListFibers.empty())
289 for (intIter2=MapLayers[2*2+iSide].ListFibers.begin(); intIter2!=MapLayers[2*2+iSide].ListFibers.end(); ++intIter2)
291 fDistanceA = TMath::Abs(iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0]+fbOD[iRPot][0][iSide][*intIter0] - iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2]-fbOD[iRPot][2][iSide][*intIter2]);
294 fPosition = (iSign*fFiberXPos*faOD[iRPot][0][iSide][*intIter0]+fbOD[iRPot][0][iSide][*intIter0] + iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2]+fbOD[iRPot][2][iSide][*intIter2])/2.0;
306 if (!MapLayers[2+iSide].ListFibers.empty())
308 for (intIter1=MapLayers[2*1+iSide].ListFibers.begin(); intIter1!=MapLayers[2*1+iSide].ListFibers.end(); ++intIter1)
310 if (!MapLayers[4+iSide].ListFibers.empty())
312 for (intIter2=MapLayers[2*2+iSide].ListFibers.begin(); intIter2!=MapLayers[2*2+iSide].ListFibers.end(); ++intIter2)
314 fDistanceB = TMath::Abs(iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1]+fbOD[iRPot][1][iSide][*intIter1] - iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2]-fbOD[iRPot][2][iSide][*intIter2]);
317 fPosition = (iSign*fFiberXPos*faOD[iRPot][1][iSide][*intIter1]+fbOD[iRPot][1][iSide][*intIter1] + iSign*fFiberXPos*faOD[iRPot][2][iSide][*intIter2]+fbOD[iRPot][2][iSide][*intIter2])/2.0;
340 iFibSel[iSide][iPlate] =
m_iFibSel[iSide][iPlate];