libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
filtercomplementionenhancer.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/processing/filters/filtercomplementionenhancer.cpp
3 * \date 21/08/2020
4 * \author Olivier Langella
5 * \brief enhance ion intensity of ion fragment complement
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2020 Olivier Langella <Olivier.Langella@u-psud.fr>.
10 *
11 * This file is part of the PAPPSOms++ library.
12 *
13 * PAPPSOms++ is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * PAPPSOms++ is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
25 *
26 ******************************************************************************/
27
30
31using namespace pappso;
32
34 double target_mz, PrecisionPtr precision_ptr)
35 : m_targetMzSum(target_mz), m_precisionPtr(precision_ptr)
36{
37}
38
40 const FilterComplementIonEnhancer &other)
41 : m_targetMzSum(other.m_targetMzSum), m_precisionPtr(other.m_precisionPtr)
42{
43}
44
46 const pappso::QualifiedMassSpectrum &qmass_spectrum,
47 pappso::PrecisionPtr precision_ptr)
48 : m_targetMzSum(((qmass_spectrum.getPrecursorMz() -
49 (qmass_spectrum.getPrecursorCharge() * MHPLUS /
50 qmass_spectrum.getPrecursorCharge())) *
51 qmass_spectrum.getPrecursorCharge() +
52 (MHPLUS + MHPLUS))),
53 m_precisionPtr(precision_ptr)
54{
55}
56
58 const QString &strBuildParams)
59{
60 buildFilterFromString(strBuildParams);
61}
62
63void
65 const QString &strBuildParams)
66{
67 //"complementIonEnhancer|456.567;0.02dalton"
68 if(strBuildParams.startsWith("complementIonEnhancer|"))
69 {
70 QStringList params = strBuildParams.split("|").back().split(";");
71
72 m_targetMzSum = params.at(0).toDouble();
73 QString precision = params.at(1);
74 m_precisionPtr =
75 PrecisionFactory::fromString(precision.replace("dalton", " dalton")
76 .replace("ppm", " ppm")
77 .replace("res", " res"));
78 }
79 else
80 {
82 QString(
83 "building FilterComplementIonEnhancer from string %1 is not possible")
84 .arg(strBuildParams));
85 }
86}
87
88
89QString
91{
92 return "complementIonEnhancer";
93}
94
95
96QString
98{
99 QString strCode = QString("%1|%2;%3")
100 .arg(name())
101 .arg(QString::number(m_targetMzSum, 'g', 15))
102 .arg(m_precisionPtr->toString());
103 strCode.replace(" ", "");
104
105 return strCode;
106}
107
111
114{
115
116 auto it_end = data_points.end();
117 std::sort(data_points.begin(),
118 it_end,
119 [](const DataPoint &a, const DataPoint &b) { return (a.y > b.y); });
120
121 for(auto it = data_points.begin(); it != it_end; it++)
122 {
123 double mz_complement = m_targetMzSum - it->x;
124 if(mz_complement > 0)
125 {
126 MzRange mz_range(mz_complement, m_precisionPtr);
127 enhanceComplementMassInRange(
128 it->y, mz_range.lower(), mz_range.upper(), it, it_end);
129 }
130 }
131
132 data_points.sortX();
133 return data_points;
134}
135
136
137void
139 double new_intensity,
140 double mz_lower_bound,
141 double mz_upper_bound,
142 std::vector<DataPoint>::iterator it_begin,
143 std::vector<DataPoint>::iterator it_end) const
144{
145 for(std::vector<DataPoint>::iterator it = it_begin; it != it_end; it++)
146 {
147 if((it->x >= mz_lower_bound) && (it->x <= mz_upper_bound))
148 {
149 if(it->y < new_intensity)
150 {
151 it->y = new_intensity;
152 }
153 }
154 }
155}
excetion to use when an item type is not recognized
try to detect complementary ions and assign maximum intensity of both elements
void buildFilterFromString(const QString &strBuildParams) override
build this filter using a string
Trace & filter(Trace &data_points) const override
FilterComplementIonEnhancer(double target_mz, PrecisionPtr precision_ptr)
void enhanceComplementMassInRange(double new_intensity, double mz_lower_bound, double mz_upper_bound, std::vector< DataPoint >::iterator it_begin, std::vector< DataPoint >::iterator it_end) const
pappso_double lower() const
Definition mzrange.h:71
pappso_double upper() const
Definition mzrange.h:77
static PrecisionPtr fromString(const QString &str)
get a precision pointer from a string
Definition precision.cpp:72
Class representing a fully specified mass spectrum.
A simple container of DataPoint instances.
Definition trace.h:148
void sortX(SortOrder sort_order=SortOrder::ascending)
Definition trace.cpp:1086
excetion to use when an item type is not recognized (file format, object type...)
enhance ion intensity of ion fragment complement
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
const pappso_double MHPLUS(1.007276466879)