29 const RandomAccessIterType& current_max_iterator,
30 const RandomAccessIterType& end_iterator,
31 const float level_height)
33 const int max_position =
static_cast<int>(current_max_iterator - begin_iterator + 1);
34 RandomAccessIterType current_iter = current_max_iterator;
35 while (current_iter != end_iterator && *current_iter > level_height)
37 if (current_iter == end_iterator)
39 warning(
"find_level_width: level extends beyond border."
40 "Cannot find the real level-width of this point source!");
46 float right_level_max = (*current_iter - level_height) / (*current_iter - *(current_iter - 1));
47 right_level_max = float(current_iter - (begin_iterator + max_position)) - right_level_max;
49 current_iter = current_max_iterator;
50 while (current_iter != begin_iterator && *current_iter > level_height)
52 if (current_iter == begin_iterator && *current_iter > level_height)
54 warning(
"find_level_width: level extends beyond border."
55 "Cannot find the real level-width of this point source!");
58 float left_level_max = (*current_iter - level_height) / (*current_iter - *(current_iter + 1));
59 left_level_max += float(current_iter - (begin_iterator + max_position));
61 return right_level_max - left_level_max;
66find_level_width(
const RandomAccessIterType& begin_iterator,
const RandomAccessIterType& end_iterator,
const float level_height)
68 return find_level_width(begin_iterator, std::max_element(begin_iterator, end_iterator), end_iterator, level_height);
void warning(const char *const s,...)
Print warning with format string a la printf.
Definition warning.cxx:41
float find_level_width(const RandomAccessIterType &begin_iterator, const RandomAccessIterType &max_iterator, const RandomAccessIterType &end_iterator, const float level_height)
find width at a level
Definition find_fwhm_in_image.inl:28