CMS 3D CMS Logo

Functions
FindPeakFastPV.h File Reference

Go to the source code of this file.

Functions

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)
 

Function Documentation

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 
)

Definition at line 12 of file FindPeakFastPV.h.

References cuy::ii.

Referenced by FastPrimaryVertexWithWeightsProducer::produce().

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