37 qsizetype trace_size = trace.size();
55 for(qsizetype iter = 2; iter < trace_size - 2; ++iter)
60 qDebug() <<
"Now skipping low intensity peak at m/z:" << trace.at(iter).x
61 <<
"with intensity:" << trace.at(iter).y;
64 double center_data_point_mz = trace.at(iter).x;
65 double center_data_point_int = trace.at(iter).y;
66 double left_data_point_mz = trace.at(iter - 1).x;
67 double left_data_point_int = trace.at(iter - 1).y;
68 double right_data_point_mz = trace.at(iter + 1).x;
69 double right_data_point_int = trace.at(iter + 1).y;
72 if(std::fabs(left_data_point_int) <
73 std::numeric_limits<double>::epsilon())
77 if(std::fabs(right_data_point_int) <
78 std::numeric_limits<double>::epsilon())
83 double current_snt_estimate = 0.0;
84 double current_snt_estimate_left_1 = 0.0;
85 double current_snt_estimate_right_1 = 0.0;
89 current_snt_estimate =
97 current_snt_estimate_left_1 =
99 current_snt_estimate_right_1 =
108 if((center_data_point_int > left_data_point_int) &&
109 (center_data_point_int > right_data_point_int) &&
111 (current_snt_estimate_left_1 >=
m_parameters.signalToNoise) &&
112 (current_snt_estimate_right_1 >=
m_parameters.signalToNoise))
120 double current_snt_estimate_left_2 = 0.0;
121 double current_snt_estimate_right_2 = 0.0;
125 current_snt_estimate_left_2 =
127 current_snt_estimate_right_2 =
132 if((iter > 1) && (iter + 2 <
static_cast<qsizetype
>(trace.size())) &&
133 (left_data_point_int < trace.at(iter - 2).y) &&
134 (right_data_point_int < trace.at(iter + 2).y) &&
135 (current_snt_estimate_left_2 >=
m_parameters.signalToNoise) &&
136 (current_snt_estimate_right_2 >=
m_parameters.signalToNoise))
149 QMap<double, double> peak_raw_data;
151 peak_raw_data[center_data_point_mz] = center_data_point_int;
152 peak_raw_data[left_data_point_mz] = left_data_point_int;
153 peak_raw_data[right_data_point_mz] = right_data_point_int;
159 bool previous_zero_left =
false;
160 qsizetype missing_left_count = 0;
162 qsizetype left_boundary = iter - 1;
165 (iter - k + 1 > 0) && !previous_zero_left &&
166 (trace.at(iter - k).y <= peak_raw_data.begin().value()))
168 double current_snt_estimate_left_k = 0.0;
172 current_snt_estimate_left_k =
176 if(current_snt_estimate_left_k >=
m_parameters.signalToNoise)
178 peak_raw_data[trace.at(iter - k).x] = trace.at(iter - k).y;
181 ++missing_left_count;
184 peak_raw_data[trace.at(iter - k).x] = trace.at(iter - k).y;
188 previous_zero_left = (trace.at(iter - k).
y == 0);
189 left_boundary = iter - k;
197 bool previous_zero_right =
false;
198 qsizetype missing_right_count = 0;
200 qsizetype right_boundary(iter + 1);
202 while((iter + k <
static_cast<qsizetype
>(trace.size())) &&
203 !previous_zero_right &&
204 (trace.at(iter + k).y <= peak_raw_data.last()))
206 double current_snt_estimate_right_k = 0.0;
210 current_snt_estimate_right_k =
214 if(current_snt_estimate_right_k >=
m_parameters.signalToNoise)
216 peak_raw_data[trace.at(iter + k).x] = trace.at(iter + k).y;
220 ++missing_right_count;
221 if(missing_right_count <=
m_parameters.missingPeakCount)
223 peak_raw_data[trace.at(iter + k).x] =
224 trace.at(iter + k).y;
228 previous_zero_right = (trace.at(iter + k).
y == 0);
229 right_boundary = iter + k;
234 if(peak_raw_data.size() < 3)
250 double max_peak_mz = center_data_point_mz;
251 double max_peak_int = center_data_point_int;
252 double threshold = 1e-6;
265 data_point.
x = max_peak_mz;
266 data_point.
y = max_peak_int;
267 peak_range.
mz_start = trace.at(left_boundary).x;
268 peak_range.
mz_stop = trace.at(right_boundary).x;
273 picked_peaks.
append(data_point);
275 peak_ranges.push_back(peak_range);