23SignalToNoiseEstimatorMedian::SignalToNoiseEstimatorMedian()
27SignalToNoiseEstimatorMedian::~SignalToNoiseEstimatorMedian()
32SignalToNoiseEstimatorMedian::pick(
const Trace &trace,
34 QList<PeakRange> &peak_ranges)
38 qsizetype trace_size = trace.size();
43 for(qsizetype iter = 2; iter < trace_size - 2; ++iter)
45 double center_data_point_mz = trace.at(iter).x,
46 center_data_point_int = trace.at(iter).y;
47 double left_data_point_mz = trace.at(iter - 1).x,
48 left_data_point_int = trace.at(iter - 1).y;
49 double right_data_point_mz = trace.at(iter + 1).x,
50 right_data_point_int = trace.at(iter + 1).y;
53 if(std::fabs(left_data_point_int) <
54 std::numeric_limits<double>::epsilon())
58 if(std::fabs(right_data_point_int) <
59 std::numeric_limits<double>::epsilon())
64 double act_snt = 0.0, act_snt_l1 = 0.0, act_snt_r1 = 0.0;
66 if(m_signalToNoise > 0.0)
72 if((center_data_point_int > left_data_point_int) &&
73 (center_data_point_int > right_data_point_int) &&
74 (act_snt >= m_signalToNoise) && (act_snt_l1 >= m_signalToNoise) &&
75 (act_snt_r1 >= m_signalToNoise))
81 double act_snt_l2 = 0.0, act_snt_r2 = 0.0;
83 if(m_signalToNoise > 0.0)
89 if((iter > 1) && (iter + 2 <
static_cast<qsizetype
>(trace.size())) &&
90 (left_data_point_int < trace.at(iter - 2).y) &&
91 (right_data_point_int < trace.at(iter + 2).y) &&
92 (act_snt_l2 >= m_signalToNoise) && (act_snt_r2 >= m_signalToNoise))
98 QMap<double, double> peak_raw_data;
100 peak_raw_data[center_data_point_mz] = center_data_point_int;
101 peak_raw_data[left_data_point_mz] = left_data_point_int;
102 peak_raw_data[right_data_point_mz] = right_data_point_int;
109 bool previous_zero_left(
false);
112 qsizetype left_boundary(iter - 1);
115 (iter - k + 1 > 0) && !previous_zero_left &&
116 (trace.at(iter - k).y <= peak_raw_data.begin().value()))
118 double act_snt_lk = 0.0;
120 if(m_signalToNoise > 0.0)
125 if(act_snt_lk >= m_signalToNoise)
127 peak_raw_data[trace.at(iter - k).x] = trace.at(iter - k).y;
130 previous_zero_left = (trace.at(iter - k).
y == 0);
131 left_boundary = iter - k;
139 bool previous_zero_right(
false);
142 qsizetype right_boundary(iter + 1);
144 while((iter + k <
static_cast<qsizetype
>(trace.size())) &&
145 !previous_zero_right &&
146 (trace.at(iter + k).y <= peak_raw_data.last()))
148 double act_snt_rk = 0.0;
150 if(m_signalToNoise > 0.0)
155 if(act_snt_rk >= m_signalToNoise)
157 peak_raw_data[trace.at(iter + k).x] = trace.at(iter + k).y;
160 previous_zero_right = (trace.at(iter + k).
y == 0);
161 right_boundary = iter + k;
166 if(peak_raw_data.size() < 3)
182 double max_peak_mz = center_data_point_mz;
183 double max_peak_int = center_data_point_int;
184 double threshold = 1e-6;
195 PeakRange peak_range;
197 data_point.
x = max_peak_mz;
198 data_point.y = max_peak_int;
199 peak_range.mz_start = trace.at(left_boundary).x;
200 peak_range.mz_stop = trace.at(right_boundary).x;
205 picked_peaks.append(data_point);
207 peak_ranges.push_back(peak_range);
A simple container of DataPoint instances.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
void spline_bisection(const CubicSplineModel &spline_model, double const mz_at_left, double const mz_at_right, double ¢er_peak_mz, double ¢er_peak_intensity, double const threshold)