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;
89 const Int_t NBINTOT = 17000;
94 iHitLayer[i].resize (NBINTOT);
98 Float_t fFiberXPos = 23;
102 std::list<int>::const_iterator iIter;
106 for (Int_t iSide=0; iSide<
ODSIDESCNT; iSide++)
113 iSign = (iSide==0)? -1 : 1;
115 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
117 iHitLayer[iSide][iBin] = 0;
123 if (MapLayers[2*iPlate+iSide].ListFibers.size()<=(UInt_t)
m_iMultiplicityCut && !MapLayers[2*iPlate+iSide].ListFibers.empty())
126 for (iIter=MapLayers[2*iPlate+iSide].ListFibers.begin(); iIter!=MapLayers[2*iPlate+iSide].ListFibers.end(); ++iIter)
129 fPosition = -1*(iSign*fFiberXPos*faOD[iRPot][iPlate][iSide][*iIter] + fbOD[iRPot][iPlate][iSide][*iIter]);
130 for (Int_t iBin=0; iBin<480; iBin++)
132 iHitLayer[iSide][(int)(((fPosition-0.24)*1000)+iBin-128000)]++;
139 std::vector<int> *vecMaxHit =
new std::vector<int>;
142 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
144 if (iHitLayer[iSide][iBin]>iNum) iNum = iHitLayer[iSide][iBin];
151 for (Int_t iBin=0; iBin<NBINTOT; iBin++)
153 if (iHitLayer[iSide][iBin]==iNum)
155 vecMaxHit->push_back(iBin);
159 Float_t fHitMinPos, fHitMaxPos;
163 fHitMinPos = -128.0 - (double)(vecMaxHit->front())*1e-3;
164 fHitMaxPos = -128.0 - (double)(vecMaxHit->back())*1e-3;
184 fPosition = (fHitMinPos + fHitMaxPos)/2.0;
187 Results.fOverY = fHitMinPos-fHitMaxPos;
195 Int_t iFibSel = 9999;
202 fMin = 0.24/cos(TMath::Pi()/4.0);
204 for (iIter=MapLayers[2*iPlate+iSide].ListFibers.begin(); iIter!=MapLayers[2*iPlate+iSide].ListFibers.end(); ++iIter)
206 fPosition = iSign*fFiberXPos*faOD[iRPot][iPlate][iSide][*iIter] + fbOD[iRPot][iPlate][iSide][*iIter];
207 fDist = TMath::Abs(
Results.fRecPos-fPosition);
234 Float_t fFiberXPos = 23;
243 std::list<int>::const_iterator intIter0;
244 std::list<int>::const_iterator intIter1;
245 std::list<int>::const_iterator intIter2;
247 for (Int_t iSide=0; iSide<
ODSIDESCNT; iSide++)
249 iSign = (iSide==0) ? -1 : 1;
253 if (!MapLayers[0+iSide].ListFibers.empty())
255 for (intIter0=MapLayers[0+iSide].ListFibers.begin(); intIter0!=MapLayers[0+iSide].ListFibers.end(); ++intIter0)
257 if (!MapLayers[2+iSide].ListFibers.empty())
259 for (intIter1=MapLayers[2+iSide].ListFibers.begin(); intIter1!=MapLayers[2+iSide].ListFibers.end(); ++intIter1)
261 if (!MapLayers[4+iSide].ListFibers.empty())
263 for (intIter2=MapLayers[4+iSide].ListFibers.begin(); intIter2!=MapLayers[4+iSide].ListFibers.end(); ++intIter2)
265 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]);
266 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]);
270 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;
279 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]);
282 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;
292 if (!MapLayers[4+iSide].ListFibers.empty())
294 for (intIter2=MapLayers[2*2+iSide].ListFibers.begin(); intIter2!=MapLayers[2*2+iSide].ListFibers.end(); ++intIter2)
296 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]);
299 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;
311 if (!MapLayers[2+iSide].ListFibers.empty())
313 for (intIter1=MapLayers[2*1+iSide].ListFibers.begin(); intIter1!=MapLayers[2*1+iSide].ListFibers.end(); ++intIter1)
315 if (!MapLayers[4+iSide].ListFibers.empty())
317 for (intIter2=MapLayers[2*2+iSide].ListFibers.begin(); intIter2!=MapLayers[2*2+iSide].ListFibers.end(); ++intIter2)
319 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]);
322 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;
void FindingPosition(Int_t iRPot, std::map< int, FIBERS > &MapLayers, Float_t faOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT], Float_t fbOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT])
StatusCode Execute(Int_t iRPot, const std::list< ODHIT > &ListODHits, Float_t faOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT], Float_t fbOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT])
void FiberProjection(Int_t iRPot, std::map< int, FIBERS > &MapLayers, Float_t faOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT], Float_t fbOD[RPOTSCNT][ODPLATESCNT][ODSIDESCNT][ODLAYERSCNT *ODFIBERSCNT])