44 template <
typename Container = MSSpectrum>
68 this->
setName(
"SignalToNoiseEstimatorMeanIterative");
70 defaults_.
setValue(
"max_intensity", -1,
"maximal intensity considered for histogram construction. By default, it will be calculated automatically (see auto_mode)." \
71 " Only provide this parameter if you know what you are doing (and change 'auto_mode' to '-1')!" \
72 " All intensities EQUAL/ABOVE 'max_intensity' will not be added to the histogram." \
73 " If you choose 'max_intensity' too small, the noise estimate might be too small as well." \
74 " If chosen too big, the bins become quite large (which you could counter by increasing 'bin_count', which increases runtime).", {
"advanced"});
77 defaults_.
setValue(
"auto_max_stdev_factor", 3.0,
"parameter for 'max_intensity' estimation (if 'auto_mode' == 0): mean + 'auto_max_stdev_factor' * stdev", {
"advanced"});
82 defaults_.
setValue(
"auto_max_percentile", 95,
"parameter for 'max_intensity' estimation (if 'auto_mode' == 1): auto_max_percentile th percentile", {
"advanced"});
86 defaults_.
setValue(
"auto_mode", 0,
"method to use to determine maximal intensity: -1 --> use 'max_intensity'; 0 --> 'auto_max_stdev_factor' method (default); 1 --> 'auto_max_percentile' method", {
"advanced"});
100 defaults_.
setValue(
"min_required_elements", 10,
"minimum number of elements required in a window (otherwise it is considered sparse)");
103 defaults_.
setValue(
"noise_for_empty_window", std::pow(10.0, 20),
"noise value used for sparse windows", {
"advanced"});
121 if (&source ==
this)
return *
this;
151 double sparse_window_percent = 0;
173 OPENMS_PRETTY_FUNCTION,
174 "auto_mode is on AUTOMAXBYPERCENT! auto_max_percentile is not in [0,100]. Use setAutoMaxPercentile(<value>) to change it!",
178 std::vector<int> histogram_auto(100, 0);
181 auto maxIt = std::max_element(c.begin(), c.end() ,[](
const PeakType& a,
const PeakType& b){ return a.getIntensity() > b.getIntensity();});
184 double bin_size = maxInt / 100;
189 ++histogram_auto[(int) (((run).getIntensity() - 1) / bin_size)];
194 int elements_seen = 0;
198 while (run != scan_last_ && elements_seen < elements_below_percentile)
201 elements_seen += histogram_auto[i];
214 OPENMS_PRETTY_FUNCTION,
215 "auto_mode is on MANUAL! max_intensity is <=0. Needs to be positive! Use setMaxIntensity(<value>) or enable auto_mode!",
230 double window_half_size =
win_len_ / 2;
239 bin_value[bin] = (bin + 0.5) * bin_size;
242 int hist_rightmost_bin;
250 int elements_in_window = 0;
251 int window_count = 0;
259 while (window_pos_center != scan_last_)
262 while ((*window_pos_borderleft).getMZ() < (*window_pos_center).getMZ() - window_half_size)
265 to_bin = (int) ((std::max((*window_pos_borderleft).getIntensity(), 0.0f)) / bin_size);
269 --elements_in_window;
271 ++window_pos_borderleft;
278 while ((window_pos_borderright != scan_last_)
279 && ((*window_pos_borderright).getMZ() < (*window_pos_center).getMZ() + window_half_size))
283 to_bin = (int) ((std::max((*window_pos_borderright).getIntensity(), 0.0f)) / bin_size);
287 ++elements_in_window;
289 ++window_pos_borderright;
295 ++sparse_window_percent;
303 for (
int i = 0; i < 3; ++i)
307 for (
int bin = 0; bin < hist_rightmost_bin; ++bin)
311 hist_mean += histogram[bin] / (double) elements_in_window * bin_value[bin];
317 for (
int bin = 0; bin < hist_rightmost_bin; ++bin)
319 double tmp(bin_value[bin] - hist_mean);
320 hist_stdev += histogram[bin] / (double) elements_in_window * tmp * tmp;
322 hist_stdev = std::sqrt(hist_stdev);
325 int estimate = (int) ((hist_mean + hist_stdev *
stdev_ - 1) / bin_size + 1);
327 hist_rightmost_bin = std::min(estimate,
bin_count_);
331 noise = std::max(1.0, hist_mean);
335 stn_estimates_[window_count] = (*window_pos_center).getIntensity() / noise;
349 sparse_window_percent = sparse_window_percent * 100 / window_count;
351 if (sparse_window_percent > 20)
354 << sparse_window_percent
355 <<
"% of all windows were sparse. You should consider increasing 'win_len' or increasing 'min_required_elements'"
356 <<
" You should also check the MaximalIntensity value (or the parameters for its heuristic estimation)"
357 <<
" If it is too low, then too many high intensity peaks will be discarded, which leads to a sparse window!"
#define OPENMS_LOG_WARN
Macro for warnings.
Definition LogStream.h:550
void defaultsToParam_()
Updates the parameters after the defaults have been set in the constructor.
Param param_
Container for current parameters.
Definition DefaultParamHandler.h:139
Param defaults_
Container for default parameters. This member should be filled in the constructor of derived classes!
Definition DefaultParamHandler.h:146
void setName(const String &name)
Mutable access to the name.
Invalid value exception.
Definition Exception.h:306
const ParamValue & getValue(const std::string &key) const
Returns a value of a parameter.
void setMaxFloat(const std::string &key, double max)
Sets the maximum value for the floating point or floating point list parameter key.
void setMaxInt(const std::string &key, int max)
Sets the maximum value for the integer or integer list parameter key.
void setMinInt(const std::string &key, int min)
Sets the minimum value for the integer or integer list parameter key.
void setValue(const std::string &key, const ParamValue &value, const std::string &description="", const std::vector< std::string > &tags=std::vector< std::string >())
Sets a value.
void setMinFloat(const std::string &key, double min)
Sets the minimum value for the floating point or floating point list parameter key.
float IntensityType
Intensity type.
Definition Peak2D.h:37
void setProgress(SignedSize value) const
Sets the current progress.
void startProgress(SignedSize begin, SignedSize end, const String &label) const
Initializes the progress display.
void endProgress(UInt64 bytes_processed=0) const
Estimates the signal/noise (S/N) ratio of each data point in a scan based on an iterative scheme whic...
Definition SignalToNoiseEstimatorMeanIterative.h:47
SignalToNoiseEstimator< Container >::PeakIterator PeakIterator
Definition SignalToNoiseEstimatorMeanIterative.h:58
SignalToNoiseEstimatorMeanIterative()
default constructor
Definition SignalToNoiseEstimatorMeanIterative.h:65
double win_len_
range of data points which belong to a window in Thomson
Definition SignalToNoiseEstimatorMeanIterative.h:389
double stdev_
multiplier for the stdev of intensities
Definition SignalToNoiseEstimatorMeanIterative.h:393
double noise_for_empty_window_
Definition SignalToNoiseEstimatorMeanIterative.h:398
~SignalToNoiseEstimatorMeanIterative() override
Destructor.
Definition SignalToNoiseEstimatorMeanIterative.h:132
SignalToNoiseEstimatorMeanIterative(const SignalToNoiseEstimatorMeanIterative &source)
Copy Constructor.
Definition SignalToNoiseEstimatorMeanIterative.h:109
double max_intensity_
maximal intensity considered during binning (values above get discarded)
Definition SignalToNoiseEstimatorMeanIterative.h:381
double auto_max_percentile_
parameter for initial automatic estimation of "max_intensity_" percentile or a stdev
Definition SignalToNoiseEstimatorMeanIterative.h:385
void computeSTN_(const Container &c) override
Definition SignalToNoiseEstimatorMeanIterative.h:143
void updateMembers_() override
overridden function from DefaultParamHandler to keep members up to date, when a parameter is changed
Definition SignalToNoiseEstimatorMeanIterative.h:366
int min_required_elements_
minimal number of elements a window needs to cover to be used
Definition SignalToNoiseEstimatorMeanIterative.h:395
SignalToNoiseEstimator< Container >::PeakType PeakType
Definition SignalToNoiseEstimatorMeanIterative.h:59
SignalToNoiseEstimator< Container >::GaussianEstimate GaussianEstimate
Definition SignalToNoiseEstimatorMeanIterative.h:61
int auto_mode_
determines which method shall be used for estimating "max_intensity_". valid are MANUAL=-1,...
Definition SignalToNoiseEstimatorMeanIterative.h:387
IntensityThresholdCalculation
method to use for estimating the maximal intensity that is used for histogram calculation
Definition SignalToNoiseEstimatorMeanIterative.h:52
@ MANUAL
Definition SignalToNoiseEstimatorMeanIterative.h:52
@ AUTOMAXBYSTDEV
Definition SignalToNoiseEstimatorMeanIterative.h:52
@ AUTOMAXBYPERCENT
Definition SignalToNoiseEstimatorMeanIterative.h:52
SignalToNoiseEstimatorMeanIterative & operator=(const SignalToNoiseEstimatorMeanIterative &source)
Definition SignalToNoiseEstimatorMeanIterative.h:119
int bin_count_
number of bins in the histogram
Definition SignalToNoiseEstimatorMeanIterative.h:391
double auto_max_stdev_Factor_
parameter for initial automatic estimation of "max_intensity_": a stdev multiplier
Definition SignalToNoiseEstimatorMeanIterative.h:383
This class represents the abstract base class of a signal to noise estimator.
Definition SignalToNoiseEstimator.h:33
double variance
variance of estimated Gaussian
Definition SignalToNoiseEstimator.h:108
PeakIterator::value_type PeakType
Definition SignalToNoiseEstimator.h:40
SignalToNoiseEstimator & operator=(const SignalToNoiseEstimator &source)
Assignment operator.
Definition SignalToNoiseEstimator.h:60
GaussianEstimate estimate_(const PeakIterator &scan_first_, const PeakIterator &scan_last_) const
calculate mean & stdev of intensities of a spectrum
Definition SignalToNoiseEstimator.h:113
double mean
mean of estimated Gaussian
Definition SignalToNoiseEstimator.h:107
std::vector< double > stn_estimates_
stores the noise estimate for each peak
Definition SignalToNoiseEstimator.h:146
Container::const_iterator PeakIterator
Definition SignalToNoiseEstimator.h:39
protected struct to store parameters my, sigma for a Gaussian distribution
Definition SignalToNoiseEstimator.h:106
A more convenient string class.
Definition String.h:34
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19