libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
pappso::FilterChargeDeconvolution Class Reference

#include <filterchargedeconvolution.h>

Inheritance diagram for pappso::FilterChargeDeconvolution:
pappso::FilterNameInterface pappso::FilterInterface

Classes

struct  DataPointInfo

Public Member Functions

 FilterChargeDeconvolution (PrecisionPtr precision_ptr)
 FilterChargeDeconvolution (const QString &strBuildParams)
 FilterChargeDeconvolution (const FilterChargeDeconvolution &other)
virtual ~FilterChargeDeconvolution ()
Tracefilter (Trace &data_points) const override
 get all the datapoints and remove different isotope and add their intensity and change to charge = 1 when the charge is known
virtual QString name () const override
QString toString () const override
Public Member Functions inherited from pappso::FilterNameInterface
virtual ~FilterNameInterface ()
Public Member Functions inherited from pappso::FilterInterface
virtual ~FilterInterface ()

Protected Member Functions

void buildFilterFromString (const QString &strBuildParams) override
 build this filter using a string

Private Types

typedef std::shared_ptr< DataPointInfoDataPointInfoSp

Private Member Functions

void addDataPointToList (std::vector< FilterChargeDeconvolution::DataPointInfoSp > &points, DataPoint &data_point) const
 Add each datapoint to a vector of structure describe above.
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 computeBestChargeOfDataPoint (std::vector< FilterChargeDeconvolution::DataPointInfoSp > &data_points_info) const
 Compare both list (z1 and z2) and add the right level of charge.
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 monoistipics peaks added.
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 2 and remove 1 H.

Private Attributes

double m_diffC12C13_z1
double m_diffC12C13_z2
PrecisionPtr m_precisionPtrZ1
PrecisionPtr m_precisionPtrZ2

Detailed Description

Definition at line 42 of file filterchargedeconvolution.h.

Member Typedef Documentation

◆ DataPointInfoSp

Definition at line 46 of file filterchargedeconvolution.h.

Constructor & Destructor Documentation

◆ FilterChargeDeconvolution() [1/3]

FilterChargeDeconvolution::FilterChargeDeconvolution ( PrecisionPtr precision_ptr)

Default constructor

Definition at line 41 of file filterchargedeconvolution.cpp.

42 : m_precisionPtrZ1(precision_ptr)
43{
46 m_precisionPtrZ1 = precision_ptr;
49
50 // pappso::PrecisionFactory::getPrecisionDividedBy(m_precisionPtrZ1, 2):
51
52 // qInfo() << m_precisionPtrZ2->getNominal();
53}
static PrecisionPtr getPrecisionPtrFractionInstance(PrecisionPtr origin, double fraction)
get the fraction of an existing precision pointer
const pappso_double DIFFC12C13(1.0033548378)

References pappso::DIFFC12C13(), pappso::PrecisionFactory::getPrecisionPtrFractionInstance(), m_diffC12C13_z1, m_diffC12C13_z2, m_precisionPtrZ1, and m_precisionPtrZ2.

Referenced by FilterChargeDeconvolution().

◆ FilterChargeDeconvolution() [2/3]

pappso::FilterChargeDeconvolution::FilterChargeDeconvolution ( const QString & strBuildParams)
Parameters
strBuildParamsstring to build the filter "chargeDeconvolution|0.02dalton"

Definition at line 34 of file filterchargedeconvolution.cpp.

35{
36 buildFilterFromString(strBuildParams);
37 // qInfo() << "ChargeDeconvolution created";
38}
void buildFilterFromString(const QString &strBuildParams) override
build this filter using a string

References buildFilterFromString().

◆ FilterChargeDeconvolution() [3/3]

FilterChargeDeconvolution::FilterChargeDeconvolution ( const FilterChargeDeconvolution & other)

◆ ~FilterChargeDeconvolution()

FilterChargeDeconvolution::~FilterChargeDeconvolution ( )
virtual

Destructor

Definition at line 62 of file filterchargedeconvolution.cpp.

63{
64 qDebug() << "ChargeDeconvolution destroyed";
65}

Member Function Documentation

◆ addDataPointRefByExclusion()

void pappso::FilterChargeDeconvolution::addDataPointRefByExclusion ( std::vector< FilterChargeDeconvolution::DataPointInfoSp > & points,
FilterChargeDeconvolution::DataPointInfoSp & new_dpi ) const
private

For each datapointInfo add the datapoint to the lists by their exclusion range.

Returns
the vecotr of datapointInfo with their lists of isotopics peaks

Definition at line 163 of file filterchargedeconvolution.cpp.

166{
167 // add datapoint which match the mz_range = 1 to z1_list
168 auto i_z1 = points.begin(), end = points.end();
169 while(i_z1 != end)
170 {
171 // get the datapoint which match the range
172 i_z1 = std::find_if(i_z1, end, [&new_dpi](DataPointInfoSp dpi) {
173 return (new_dpi->data_point.x >= dpi->z1_range.first &&
174 new_dpi->data_point.x <= dpi->z1_range.second);
175 });
176 if(i_z1 != end)
177 {
178 // add the datapoint to the list and add the parent pointer
179 i_z1->get()->z1_vect.push_back(new_dpi);
180 new_dpi->parent = *i_z1;
181 DataPointInfoSp parent_z1 = i_z1->get()->parent.lock();
182 while(parent_z1 != nullptr)
183 {
184 parent_z1.get()->z1_vect.push_back(new_dpi);
185 parent_z1 = parent_z1->parent.lock();
186 }
187 i_z1++;
188 }
189 }
190
191 // add datapoint which match the mz_range = 2 to z2_list
192 auto i_z2 = points.begin();
193 while(i_z2 != end)
194 {
195 // get the datapoint which match the range
196 i_z2 = std::find_if(i_z2, end, [&new_dpi](DataPointInfoSp dpi) {
197 return (new_dpi->data_point.x >= dpi->z2_range.first &&
198 new_dpi->data_point.x <= dpi->z2_range.second);
199 });
200 if(i_z2 != end)
201 {
202 // add the datapoint to the list and add the parent pointer
203 i_z2->get()->z2_vect.push_back(new_dpi);
204 new_dpi->parent = *i_z2;
205 DataPointInfoSp parent_z2 = i_z2->get()->parent.lock();
206 while(parent_z2 != nullptr)
207 {
208 parent_z2.get()->z2_vect.push_back(new_dpi);
209 parent_z2 = parent_z2->parent.lock();
210 }
211 i_z2++;
212 }
213 }
214}
std::shared_ptr< DataPointInfo > DataPointInfoSp
pappso_double x
Definition datapoint.h:24

Referenced by addDataPointToList().

◆ addDataPointToList()

void pappso::FilterChargeDeconvolution::addDataPointToList ( std::vector< FilterChargeDeconvolution::DataPointInfoSp > & points,
pappso::DataPoint & data_point ) const
private

Add each datapoint to a vector of structure describe above.

Returns
the vecotr of datapointInfo with their datapoint and their exclusion mass range

Definition at line 147 of file filterchargedeconvolution.cpp.

150{
151 DataPointInfoSp new_dpi(std::make_shared<DataPointInfo>());
152
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);
160}
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.

References addDataPointRefByExclusion(), pappso::MzRange::lower(), m_diffC12C13_z1, m_diffC12C13_z2, m_precisionPtrZ1, m_precisionPtrZ2, pappso::MzRange::upper(), and pappso::DataPoint::x.

Referenced by filter().

◆ buildFilterFromString()

void pappso::FilterChargeDeconvolution::buildFilterFromString ( const QString & strBuildParams)
overrideprotectedvirtual

build this filter using a string

Parameters
strBuildParamsa string coding the filter and its parameters "filterName|param1;param2;param3"

Implements pappso::FilterNameInterface.

Definition at line 69 of file filterchargedeconvolution.cpp.

70{
71 //"chargeDeconvolution|0.02dalton"
72 qDebug();
73 if(strBuildParams.startsWith("chargeDeconvolution|"))
74 {
75 QStringList params = strBuildParams.split("|").back().split(";", Qt::SkipEmptyParts);
76
77 QString precision = params.at(0);
79 precision.replace("dalton", " dalton").replace("ppm", " ppm").replace("res", " res"));
80 qDebug();
83
84
87 }
88 else
89 {
90 throw pappso::ExceptionNotRecognized(
91 QString("building chargeDeconvolution from string %1 is not possible").arg(strBuildParams));
92 }
93 qDebug();
94}
static PrecisionPtr fromString(const QString &str)
get a precision pointer from a string
Definition precision.cpp:80

References pappso::DIFFC12C13(), pappso::PrecisionFactory::fromString(), pappso::PrecisionFactory::getPrecisionPtrFractionInstance(), m_diffC12C13_z1, m_diffC12C13_z2, m_precisionPtrZ1, and m_precisionPtrZ2.

Referenced by FilterChargeDeconvolution().

◆ computeBestChargeOfDataPoint()

void pappso::FilterChargeDeconvolution::computeBestChargeOfDataPoint ( std::vector< FilterChargeDeconvolution::DataPointInfoSp > & data_points_info) const
private

Compare both list (z1 and z2) and add the right level of charge.

Returns
the vecotr of datapointInfo with their charge

Definition at line 217 of file filterchargedeconvolution.cpp.

219{
220 for(DataPointInfoSp &data_point_info : data_points_info)
221 {
222 if(data_point_info.get()->z1_vect.size() >= 1 && data_point_info.get()->z2_vect.size() == 0)
223 {
224 for(std::weak_ptr<DataPointInfo> other : data_point_info.get()->z1_vect)
225 {
226 other.lock()->z_charge = 1;
227 }
228 data_point_info.get()->z_charge = 1;
229 }
230 else if(data_point_info.get()->z1_vect.size() == 0 &&
231 data_point_info.get()->z2_vect.size() >= 1)
232 {
233 for(std::weak_ptr<DataPointInfo> other : data_point_info.get()->z2_vect)
234 {
235 other.lock()->z_charge = 2;
236 }
237 data_point_info.get()->z_charge = 2;
238 }
239 else if(data_point_info.get()->z1_vect.size() >= 1 &&
240 data_point_info.get()->z2_vect.size() >= 1)
241 {
242 for(std::weak_ptr<DataPointInfo> other : data_point_info.get()->z2_vect)
243 {
244 other.lock()->z_charge = 2;
245 }
246 data_point_info.get()->z_charge = 2;
247 }
248 else
249 {
250 if(data_point_info.get()->z_charge == -1)
251 {
252 data_point_info.get()->z_charge = 0;
253 }
254 }
255 }
256}

Referenced by filter().

◆ computeIsotopeDeconvolution()

void pappso::FilterChargeDeconvolution::computeIsotopeDeconvolution ( std::vector< FilterChargeDeconvolution::DataPointInfoSp > & data_points_info) const
private

For eache datapointInfo whith no parent copy info in new vector with the intensity of the monoistipics peaks added.

Returns
the vecotr of datapointInfo with their intensity merged

Definition at line 259 of file filterchargedeconvolution.cpp.

261{
262 std::vector<FilterChargeDeconvolution::DataPointInfoSp> deconvoluted_points_info;
263
264 for(DataPointInfoSp &data_point_info : data_points_info)
265 {
266 if(data_point_info->parent.lock() == nullptr)
267 {
268 DataPointInfoSp deconvoluted_point(std::make_shared<DataPointInfo>());
269
270 deconvoluted_point->z_charge = data_point_info->z_charge;
271 deconvoluted_point->new_mono_charge_data_point = data_point_info->data_point;
272
273 if(data_point_info->z_charge == 1)
274 {
275
276 for(std::weak_ptr<DataPointInfo> data : data_point_info->z1_vect)
277 {
278 deconvoluted_point->new_mono_charge_data_point.y += data.lock()->data_point.y;
279 }
280 }
281 else if(data_point_info->z_charge == 2)
282 {
283 for(std::weak_ptr<DataPointInfo> data : data_point_info->z2_vect)
284 {
285 deconvoluted_point->new_mono_charge_data_point.y += data.lock()->data_point.y;
286 }
287 }
288 else // if z.charge == 0
289 {
290 deconvoluted_point->new_mono_charge_data_point = data_point_info->data_point;
291 }
292 deconvoluted_points_info.push_back(deconvoluted_point);
293 }
294 }
295 data_points_info = deconvoluted_points_info;
296}

Referenced by filter().

◆ filter()

Trace & FilterChargeDeconvolution::filter ( Trace & data_points) const
overridevirtual

get all the datapoints and remove different isotope and add their intensity and change to charge = 1 when the charge is known

Returns
a list of datapoint

Implements pappso::FilterInterface.

Definition at line 115 of file filterchargedeconvolution.cpp.

116{
117 qDebug();
118 std::vector<FilterChargeDeconvolution::DataPointInfoSp> data_points_info;
120 qDebug() << data_points.size();
121 Trace new_trace;
122
123 for(auto &data_point : data_points)
124 {
125 addDataPointToList(data_points_info, data_point);
126 }
127 computeBestChargeOfDataPoint(data_points_info);
128
129 // qDebug() << data_points_info.size();
130 computeIsotopeDeconvolution(data_points_info);
131 // qDebug() << data_points_info.size();
133 for(DataPointInfoSp &dpi : data_points_info)
134 {
135 // qDebug() << dpi->new_mono_charge_data_point.x << dpi->z_charge;
136 new_trace.push_back(dpi->new_mono_charge_data_point);
137 }
138
139 new_trace.sortX();
140 data_points = std::move(new_trace);
141 qDebug() << data_points.size();
142 qDebug();
143 return data_points;
144}
void computeBestChargeOfDataPoint(std::vector< FilterChargeDeconvolution::DataPointInfoSp > &data_points_info) const
Compare both list (z1 and z2) and add the right level of charge.
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.
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...
void sortY(Enums::SortOrder sort_order=Enums::SortOrder::ascending)
Definition trace.cpp:1081
void sortX(Enums::SortOrder sort_order=Enums::SortOrder::ascending)
Definition trace.cpp:1071

References addDataPointToList(), computeBestChargeOfDataPoint(), computeIsotopeDeconvolution(), pappso::Enums::descending, pappso::Trace::sortX(), pappso::Trace::sortY(), and transformToMonoChargedForAllDataPoint().

Referenced by pappso::cbor::psm::PsmSpecGlob::filterMassSpectrum(), and pappso::cbor::psm::PsmSpecPeptidOms::filterMassSpectrum().

◆ name()

QString pappso::FilterChargeDeconvolution::name ( ) const
overridevirtual

Implements pappso::FilterNameInterface.

Definition at line 98 of file filterchargedeconvolution.cpp.

99{
100 return "chargeDeconvolution";
101}

Referenced by toString().

◆ toString()

QString pappso::FilterChargeDeconvolution::toString ( ) const
overridevirtual

Implements pappso::FilterNameInterface.

Definition at line 105 of file filterchargedeconvolution.cpp.

106{
107 QString strCode = QString("%1|%2").arg(name()).arg(m_precisionPtrZ1->toString());
108
109 strCode.replace(" ", "");
110
111 return strCode;
112}
virtual QString name() const override

References m_precisionPtrZ1, and name().

◆ transformToMonoChargedForAllDataPoint()

void pappso::FilterChargeDeconvolution::transformToMonoChargedForAllDataPoint ( std::vector< FilterChargeDeconvolution::DataPointInfoSp > & data_points_info) const
private

For eache datapointInfo with a charge = 2 transform the peak to a charge = 1 by multiplying the mz by 2 and remove 1 H.

Returns
the vecotr of datapointInfo their z corrected

Definition at line 299 of file filterchargedeconvolution.cpp.

301{
302 for(DataPointInfoSp &dpi : data_points_info)
303 {
304 if(dpi->z_charge == 2)
305 {
306 dpi->new_mono_charge_data_point.x += dpi->new_mono_charge_data_point.x - MHPLUS;
307 }
308 }
309}
const pappso_double MHPLUS(1.007276466879)

References pappso::MHPLUS().

Referenced by filter().

Member Data Documentation

◆ m_diffC12C13_z1

double pappso::FilterChargeDeconvolution::m_diffC12C13_z1
private

◆ m_diffC12C13_z2

double pappso::FilterChargeDeconvolution::m_diffC12C13_z2
private

◆ m_precisionPtrZ1

PrecisionPtr pappso::FilterChargeDeconvolution::m_precisionPtrZ1
private

◆ m_precisionPtrZ2

PrecisionPtr pappso::FilterChargeDeconvolution::m_precisionPtrZ2
private

The documentation for this class was generated from the following files: