29 #include "../../exception/exceptionnotrecognized.h"
34 const QString &strBuildParams)
36 buildFilterFromString(strBuildParams);
42 : m_precisionPtrZ1(precision_ptr)
57 : m_precisionPtrZ1(other.m_precisionPtrZ1),
58 m_precisionPtrZ2(other.m_precisionPtrZ2)
66 qDebug() <<
"ChargeDeconvolution destroyed";
72 const QString &strBuildParams)
76 if(strBuildParams.startsWith(
"chargeDeconvolution|"))
79 strBuildParams.split(
"|").back().split(
";", Qt::SkipEmptyParts);
81 QString precision = params.at(0);
84 .replace(
"ppm",
" ppm")
85 .replace(
"res",
" res"));
89 m_precisionPtrZ1, 0.5);
98 QString(
"building chargeDeconvolution from string %1 is not possible")
99 .arg(strBuildParams));
108 return "chargeDeconvolution";
116 QString(
"%1|%2").arg(name()).arg(m_precisionPtrZ1->toString());
118 strCode.replace(
" ",
"");
127 std::vector<FilterChargeDeconvolution::DataPointInfoSp> data_points_info;
129 qDebug() << data_points.size();
132 for(
auto &data_point : data_points)
145 new_trace.push_back(dpi->new_mono_charge_data_point);
149 data_points = std::move(new_trace);
150 qDebug() << data_points.size();
157 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &points,
162 new_dpi->data_point = data_point;
163 MzRange range1(data_point.
x + m_diffC12C13_z1, m_precisionPtrZ1);
164 new_dpi->z1_range = std::pair<double, double>(range1.
lower(), range1.
upper());
165 MzRange range2(data_point.
x + m_diffC12C13_z2, m_precisionPtrZ2);
166 new_dpi->z2_range = std::pair<double, double>(range2.
lower(), range2.
upper());
167 addDataPointRefByExclusion(points, new_dpi);
168 points.push_back(new_dpi);
173 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &points,
177 auto i_z1 = points.begin(), end = points.end();
182 return (new_dpi->data_point.x >= dpi->z1_range.first &&
183 new_dpi->data_point.x <= dpi->z1_range.second);
188 i_z1->get()->z1_vect.push_back(new_dpi);
189 new_dpi->parent = *i_z1;
191 while(parent_z1 !=
nullptr)
193 parent_z1.get()->z1_vect.push_back(new_dpi);
194 parent_z1 = parent_z1->parent.lock();
201 auto i_z2 = points.begin();
206 return (new_dpi->data_point.x >= dpi->z2_range.first &&
207 new_dpi->data_point.x <= dpi->z2_range.second);
212 i_z2->get()->z2_vect.push_back(new_dpi);
213 new_dpi->parent = *i_z2;
215 while(parent_z2 !=
nullptr)
217 parent_z2.get()->z2_vect.push_back(new_dpi);
218 parent_z2 = parent_z2->parent.lock();
227 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
232 if(data_point_info.get()->z1_vect.size() >= 1 &&
233 data_point_info.get()->z2_vect.size() == 0)
235 for(std::weak_ptr<DataPointInfo> other :
236 data_point_info.get()->z1_vect)
238 other.lock()->z_charge = 1;
240 data_point_info.get()->z_charge = 1;
242 else if(data_point_info.get()->z1_vect.size() == 0 &&
243 data_point_info.get()->z2_vect.size() >= 1)
245 for(std::weak_ptr<DataPointInfo> other :
246 data_point_info.get()->z2_vect)
248 other.lock()->z_charge = 2;
250 data_point_info.get()->z_charge = 2;
252 else if(data_point_info.get()->z1_vect.size() >= 1 &&
253 data_point_info.get()->z2_vect.size() >= 1)
255 for(std::weak_ptr<DataPointInfo> other :
256 data_point_info.get()->z2_vect)
258 other.lock()->z_charge = 2;
260 data_point_info.get()->z_charge = 2;
264 if(data_point_info.get()->z_charge == -1)
266 data_point_info.get()->z_charge = 0;
274 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
277 std::vector<FilterChargeDeconvolution::DataPointInfoSp>
278 deconvoluted_points_info;
282 if(data_point_info->parent.lock() ==
nullptr)
286 deconvoluted_point->z_charge = data_point_info->z_charge;
287 deconvoluted_point->new_mono_charge_data_point =
288 data_point_info->data_point;
290 if(data_point_info->z_charge == 1)
293 for(std::weak_ptr<DataPointInfo> data : data_point_info->z1_vect)
295 deconvoluted_point->new_mono_charge_data_point.y +=
296 data.lock()->data_point.y;
299 else if(data_point_info->z_charge == 2)
301 for(std::weak_ptr<DataPointInfo> data : data_point_info->z2_vect)
303 deconvoluted_point->new_mono_charge_data_point.y +=
304 data.lock()->data_point.y;
309 deconvoluted_point->new_mono_charge_data_point =
310 data_point_info->data_point;
312 deconvoluted_points_info.push_back(deconvoluted_point);
315 data_points_info = deconvoluted_points_info;
320 std::vector<FilterChargeDeconvolution::DataPointInfoSp> &data_points_info)
325 if(dpi->z_charge == 2)
327 dpi->new_mono_charge_data_point.x +=
328 dpi->new_mono_charge_data_point.x -
MHPLUS;
excetion to use when an item type is not recognized
void addDataPointRefByExclusion(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &points, FilterChargeDeconvolution::DataPointInfoSp &new_dpi) const
For each datapointInfo add the datapoint to the lists by their exclusion range.
void buildFilterFromString(const QString &strBuildParams) override
build this filter using a string
virtual QString name() const override
QString toString() const override
std::shared_ptr< DataPointInfo > DataPointInfoSp
void computeBestChargeOfDataPoint(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &data_points_info) const
Compare both list (z1 and z2) and add the right level of charge.
FilterChargeDeconvolution(PrecisionPtr precision_ptr)
PrecisionPtr m_precisionPtrZ2
void transformToMonoChargedForAllDataPoint(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &data_points_info) const
For eache datapointInfo with a charge = 2 transform the peak to a charge = 1 by multiplying the mz by...
void addDataPointToList(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &points, DataPoint &data_point) const
Add each datapoint to a vector of structure describe above.
PrecisionPtr m_precisionPtrZ1
Trace & filter(Trace &data_points) const override
get all the datapoints and remove different isotope and add their intensity and change to charge = 1 ...
void computeIsotopeDeconvolution(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &data_points_info) const
For eache datapointInfo whith no parent copy info in new vector with the intensity of the monoistipic...
virtual ~FilterChargeDeconvolution()
pappso_double lower() const
pappso_double upper() const
static PrecisionPtr fromString(const QString &str)
get a precision pointer from a string
static PrecisionPtr getPrecisionPtrFractionInstance(PrecisionPtr origin, double fraction)
get the fraction of an existing precision pointer
A simple container of DataPoint instances.
Sum peaks and transform mz to fit charge = 1.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
const pappso_double MHPLUS(1.007276466879)
const pappso_double DIFFC12C13(1.0033548378)