68     template <
typename PeakConstIterator>
 
   71       typedef typename PeakConstIterator::value_type PeakT;
 
   78       const int max_peaks = 5; 
 
   79       int profile_evidence = 0; 
 
   80       int centroid_evidence = 0; 
 
   83       std::vector<PeakT> data(begin, end);
 
   85       double total_int = std::accumulate(begin, end, 0.0, [](
double int_, 
const PeakT& p) { 
return int_ + p.getIntensity(); } );
 
   86       double explained_int = 0;
 
   88       for (
int i = 0; i < max_peaks; ++i)
 
   92         if (explained_int > 0.5 * total_int) 
break;
 
   95         Size idx = std::numeric_limits<Size>::max();
 
   97         for (
Size i = 0; i < data.size(); ++i)
 
   99           if (data[i].getIntensity() > int_max)
 
  101             int_max = data[i].getIntensity();
 
  106         if (idx == std::numeric_limits<Size>::max()) 
break;
 
  109         typedef typename std::vector<PeakT>::iterator 
PeakIterator; 
 
  112         double int_last = int_max;
 
  113         while (it != data.begin() 
 
  114                && it->getIntensity() <= int_last        
 
  115                && it->getIntensity() > 0 
 
  116                && (it->getIntensity() / int_last) > 0.1 
 
  117                && it->getMZ() + 1 > it_max->getMZ())    
 
  119           int_last = it->getIntensity();
 
  120           explained_int += int_last;
 
  127         if (it->getIntensity() > int_last) (it+1)->setIntensity(int_last);
 
  130         bool break_left = 
false;
 
  131         if (it_max - it < 2+1)  
 
  137         it_max->setIntensity(int_max); 
 
  138         explained_int -= int_max;
 
  141         while (it != data.end() 
 
  142                && it->getIntensity() <= int_last        
 
  143                && it->getIntensity() > 0 
 
  144                && (it->getIntensity() / int_last) > 0.1 
 
  145                && it->getMZ() - 1 < it_max->getMZ())    
 
  147           int_last = it->getIntensity();
 
  148           explained_int += int_last;
 
  156         if (it != data.end() && it->getIntensity() > int_last) (it-1)->setIntensity(int_last);
 
  158         if (break_left || it - it_max < 2+1)  
 
  170       float evidence_ratio = profile_evidence / 
float(profile_evidence + centroid_evidence);
 
  173       if (evidence_ratio > 0.75)