35 QList<PeakRange> &peak_ranges)
39 qsizetype trace_size = trace.size();
55 for(qsizetype iter = 2; iter < trace_size - 2; ++iter)
57 double center_data_point_mz = trace.at(iter).x;
58 double center_data_point_int = trace.at(iter).y;
59 double left_data_point_mz = trace.at(iter - 1).x;
60 double left_data_point_int = trace.at(iter - 1).y;
61 double right_data_point_mz = trace.at(iter + 1).x;
62 double right_data_point_int = trace.at(iter + 1).y;
65 if(std::fabs(left_data_point_int) <
66 std::numeric_limits<double>::epsilon())
70 if(std::fabs(right_data_point_int) <
71 std::numeric_limits<double>::epsilon())
76 double current_snt_estimate = 0.0;
77 double current_snt_estimate_left_1 = 0.0;
78 double current_snt_estimate_right_1 = 0.0;
82 current_snt_estimate =
90 current_snt_estimate_left_1 =
92 current_snt_estimate_right_1 =
97 if((center_data_point_int > left_data_point_int) &&
98 (center_data_point_int > right_data_point_int) &&
100 (current_snt_estimate_left_1 >=
m_parameters.signalToNoise) &&
101 (current_snt_estimate_right_1 >=
m_parameters.signalToNoise))
109 double current_snt_estimate_left_2 = 0.0;
110 double current_snt_estimate_right_2 = 0.0;
114 current_snt_estimate_left_2 =
116 current_snt_estimate_right_2 =
121 if((iter > 1) && (iter + 2 <
static_cast<qsizetype
>(trace.size())) &&
122 (left_data_point_int < trace.at(iter - 2).y) &&
123 (right_data_point_int < trace.at(iter + 2).y) &&
124 (current_snt_estimate_left_2 >=
m_parameters.signalToNoise) &&
125 (current_snt_estimate_right_2 >=
m_parameters.signalToNoise))
138 QMap<double, double> peak_raw_data;
140 peak_raw_data[center_data_point_mz] = center_data_point_int;
141 peak_raw_data[left_data_point_mz] = left_data_point_int;
142 peak_raw_data[right_data_point_mz] = right_data_point_int;
149 bool previous_zero_left =
false;
150 qsizetype missing_left_count = 0;
152 qsizetype left_boundary = iter - 1;
155 (iter - k + 1 > 0) && !previous_zero_left &&
156 (trace.at(iter - k).y <= peak_raw_data.begin().value()))
158 double current_snt_estimate_left_k = 0.0;
162 current_snt_estimate_left_k =
166 if(current_snt_estimate_left_k >=
m_parameters.signalToNoise)
168 peak_raw_data[trace.at(iter - k).x] = trace.at(iter - k).y;
171 ++missing_left_count;
174 peak_raw_data[trace.at(iter - k).x] = trace.at(iter - k).y;
178 previous_zero_left = (trace.at(iter - k).
y == 0);
179 left_boundary = iter - k;
187 bool previous_zero_right =
false;
188 qsizetype missing_right_count = 0;
190 qsizetype right_boundary(iter + 1);
192 while((iter + k <
static_cast<qsizetype
>(trace.size())) &&
193 !previous_zero_right &&
194 (trace.at(iter + k).y <= peak_raw_data.last()))
196 double current_snt_estimate_right_k = 0.0;
200 current_snt_estimate_right_k =
204 if(current_snt_estimate_right_k >=
m_parameters.signalToNoise)
206 peak_raw_data[trace.at(iter + k).x] = trace.at(iter + k).y;
210 ++missing_right_count;
211 if(missing_right_count <=
m_parameters.missingPeakCount)
213 peak_raw_data[trace.at(iter + k).x] =
214 trace.at(iter + k).y;
218 previous_zero_right = (trace.at(iter + k).
y == 0);
219 right_boundary = iter + k;
224 if(peak_raw_data.size() < 3)
240 double max_peak_mz = center_data_point_mz;
241 double max_peak_int = center_data_point_int;
242 double threshold = 1e-6;
255 data_point.
x = max_peak_mz;
256 data_point.
y = max_peak_int;
257 peak_range.
mz_start = trace.at(left_boundary).x;
258 peak_range.
mz_stop = trace.at(right_boundary).x;
263 picked_peaks.
append(data_point);
265 peak_ranges.push_back(peak_range);