CMS 3D CMS Logo

FindPeakFastPV.h
Go to the documentation of this file.
1 #ifndef RecoPixelVertexing_FindPeakFastPV_h
2 #define RecoPixelVertexing_FindPeakFastPV_h
3 
11 #include <vector>
12 
13 float FindPeakFastPV(const std::vector<float> &zProjections, const std::vector<float> &zWeights, const float oldVertex, const float m_zClusterWidth, const float m_zClusterSearchArea, const float m_weightCut) {
14 float centerWMax = oldVertex;
15 if( m_zClusterWidth > 0 && m_zClusterSearchArea >0 )
16 {
17  std::vector<float>::const_iterator itCenter = zProjections.begin();
18  std::vector<float>::const_iterator itLeftSide = zProjections.begin();
19  std::vector<float>::const_iterator itRightSide = zProjections.begin();
20  const float zClusterWidth = m_zClusterWidth*0.5; //take half zCluster width
21  const float zLowerBound = oldVertex - zClusterWidth - m_zClusterSearchArea;
22  const float zUpperBound = oldVertex + zClusterWidth + m_zClusterSearchArea;
23  float maxW=0;
24  for(;itCenter!=zProjections.end(); itCenter++) {
25  //loop only on the zProjections within oldVertex +/- (zClusterWidth + m_zClusterSearchArea)
26  if( (*itCenter < zLowerBound) || (*itCenter > zUpperBound) ) continue;
27 
28  while(itLeftSide != zProjections.end() && (*itCenter - *itLeftSide) > zClusterWidth ) itLeftSide++;
29  while(itRightSide != zProjections.end() && (*itRightSide - *itCenter) < zClusterWidth ) itRightSide++;
30  float nWeighted = 0;
31  float centerW= 0;
32 
33  for(std::vector<float>::const_iterator ii = itLeftSide; ii != itRightSide; ii++) {
34  //loop inside the peak and calculate its weight
35  if(zWeights[ii-zProjections.begin()]<m_weightCut) continue;
36  nWeighted+=zWeights[ii-zProjections.begin()];
37  centerW+=(*ii)*zWeights[ii-zProjections.begin()];
38  }
39  centerW/=nWeighted; //calculate the weighted peak center
40  if(nWeighted > maxW) {
41  maxW=nWeighted;
42  centerWMax=centerW;
43  }
44  }
45 }
46 return centerWMax;
47 }
48 
49 #endif
ii
Definition: cuy.py:588
float FindPeakFastPV(const std::vector< float > &zProjections, const std::vector< float > &zWeights, const float oldVertex, const float m_zClusterWidth, const float m_zClusterSearchArea, const float m_weightCut)