29 #include "../../exception/exceptionnotrecognized.h"
34 const QString &strBuildParams)
36 buildFilterFromString(strBuildParams);
41 : m_precisionPtrZ1(precision_ptr)
56 : m_precisionPtrZ1(other.m_precisionPtrZ1),
57 m_precisionPtrZ2(other.m_precisionPtrZ2)
70 const QString &strBuildParams)
74 if(strBuildParams.startsWith(
"chargeDeconvolution|"))
77 strBuildParams.split(
"|").back().split(
";", QString::SkipEmptyParts);
79 QString precision = params.at(0);
82 .replace(
"ppm",
" ppm")
83 .replace(
"res",
" res"));
88 m_precisionPtrZ1, 0.5);
97 QString(
"building chargeDeconvolution from string %1 is not possible")
98 .arg(strBuildParams));
108 QString(
"chargeDeconvolution|%1").arg(m_precisionPtrZ1->toString());
109 strCode.replace(
" ",
"");
118 std::vector<FilterChargeDeconvolution::DataPointInfoSp> data_points_info;
123 for(
auto &data_point : data_points)
129 qDebug() << data_points_info.size();
131 qDebug() << data_points_info.size();
135 qDebug() << dpi->new_mono_charge_data_point.x << dpi->z_charge;
136 new_trace.push_back(dpi->new_mono_charge_data_point);
140 data_points = std::move(new_trace);
148 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &points,
153 new_dpi->data_point = data_point;
154 MzRange range1(data_point.
x + m_diffC12C13_z1, m_precisionPtrZ1);
155 new_dpi->z1_range = std::pair<double, double>(range1.
lower(), range1.
upper());
156 MzRange range2(data_point.
x + m_diffC12C13_z2, m_precisionPtrZ2);
157 new_dpi->z2_range = std::pair<double, double>(range2.
lower(), range2.
upper());
158 addDataPointRefByExclusion(points, new_dpi);
159 points.push_back(new_dpi);
164 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &points,
168 auto i_z1 = points.begin(), end = points.end();
173 return (new_dpi->data_point.x >= dpi->z1_range.first &&
174 new_dpi->data_point.x <= dpi->z1_range.second);
179 i_z1->get()->z1_vect.push_back(new_dpi);
180 new_dpi->parent = *i_z1;
182 while(parent_z1 !=
nullptr)
184 parent_z1.get()->z1_vect.push_back(new_dpi);
185 parent_z1 = parent_z1->parent;
192 auto i_z2 = points.begin();
197 return (new_dpi->data_point.x >= dpi->z2_range.first &&
198 new_dpi->data_point.x <= dpi->z2_range.second);
203 i_z2->get()->z2_vect.push_back(new_dpi);
204 new_dpi->parent = *i_z2;
206 while(parent_z2 !=
nullptr)
208 parent_z2.get()->z2_vect.push_back(new_dpi);
209 parent_z2 = parent_z2->parent;
218 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
223 if(data_point_info.get()->z1_vect.size() >= 1 &&
224 data_point_info.get()->z2_vect.size() == 0)
230 data_point_info.get()->z_charge = 1;
232 else if(data_point_info.get()->z1_vect.size() == 0 &&
233 data_point_info.get()->z2_vect.size() >= 1)
239 data_point_info.get()->z_charge = 2;
241 else if(data_point_info.get()->z1_vect.size() >= 1 &&
242 data_point_info.get()->z2_vect.size() >= 1)
248 data_point_info.get()->z_charge = 2;
252 if(data_point_info.get()->z_charge == -1)
254 data_point_info.get()->z_charge = 0;
262 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
265 std::vector<FilterChargeDeconvolution::DataPointInfoSp>
266 deconvoluted_points_info;
270 if(data_point_info->parent ==
nullptr)
274 deconvoluted_point->z_charge = data_point_info->z_charge;
275 deconvoluted_point->new_mono_charge_data_point =
276 data_point_info->data_point;
278 if(data_point_info->z_charge == 1)
283 deconvoluted_point->new_mono_charge_data_point.y +=
287 else if(data_point_info->z_charge == 2)
291 deconvoluted_point->new_mono_charge_data_point.y +=
297 deconvoluted_point->new_mono_charge_data_point =
298 data_point_info->data_point;
300 deconvoluted_points_info.push_back(deconvoluted_point);
303 data_points_info = deconvoluted_points_info;
308 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
313 if(dpi->z_charge == 2)
315 dpi->new_mono_charge_data_point.x +=
316 dpi->new_mono_charge_data_point.x -
MHPLUS;