1 #ifndef RecoPixelVertexing_FindPeakFastPV_h 2 #define RecoPixelVertexing_FindPeakFastPV_h 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 )
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;
21 const float zLowerBound = oldVertex - zClusterWidth - m_zClusterSearchArea;
22 const float zUpperBound = oldVertex + zClusterWidth + m_zClusterSearchArea;
24 for(;itCenter!=zProjections.end(); itCenter++) {
26 if( (*itCenter < zLowerBound) || (*itCenter > zUpperBound) )
continue;
28 while(itLeftSide != zProjections.end() && (*itCenter - *itLeftSide) > zClusterWidth ) itLeftSide++;
29 while(itRightSide != zProjections.end() && (*itRightSide - *itCenter) < zClusterWidth ) itRightSide++;
33 for(std::vector<float>::const_iterator
ii = itLeftSide;
ii != itRightSide;
ii++) {
35 if(zWeights[
ii-zProjections.begin()]<m_weightCut)
continue;
36 nWeighted+=zWeights[
ii-zProjections.begin()];
37 centerW+=(*ii)*zWeights[
ii-zProjections.begin()];
40 if(nWeighted > maxW) {
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)