23 #include "../../types.h"
24 #include "../../utils.h"
25 #include "../../pappsoexception.h"
26 #include "../../exception/exceptionoutofrange.h"
27 #include "../../exception/exceptionnotpossible.h"
72 const Trace &trace)
const
86 using TraceIter = std::vector<DataPoint>::const_iterator;
87 TraceIter trace_iter_begin = trace.begin();
88 TraceIter trace_iter = trace_iter_begin;
89 TraceIter trace_iter_end = trace.end();
98 using BinIter = std::vector<pappso_double>::const_iterator;
100 BinIter bin_iter =
m_bins.begin();
101 BinIter bin_end_iter =
m_bins.end();
124 auto bin_iter_for_mz = lower_bound(bin_iter, bin_end_iter, trace_iter->x);
126 if(bin_iter_for_mz != bin_end_iter)
131 if(bin_iter_for_mz !=
m_bins.begin())
132 bin_iter = --bin_iter_for_mz;
139 while(bin_iter != bin_end_iter)
141 current_bin_mz_value = *bin_iter;
157 bin_data_point.
x = current_bin_mz_value;
164 while(trace_iter != trace_iter_end)
166 bool trace_matched =
false;
185 trace_x = trace_iter->x;
186 trace_y = trace_iter->y;
192 if(trace_x <= current_bin_mz_value)
207 bin_data_point.
y -= trace_y;
212 trace_matched =
true;
243 trace_matched =
true;
274 std::pair<std::map<pappso_double, pappso_double>::iterator,
277 map_trace.insert(std::pair<pappso_double, pappso_double>(
278 bin_data_point.
x, -bin_data_point.
y));
298 result.first->second += bin_data_point.
y;
327 if(trace_iter == trace_iter_end)
336 std::pair<std::map<pappso_double, pappso_double>::iterator,
bool>
338 map_trace.insert(std::pair<pappso_double, pappso_double>(
339 bin_data_point.
x, -bin_data_point.
y));
360 result.first->second += bin_data_point.
y;