libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
trace.h
Go to the documentation of this file.
1#pragma once
2
3#include <qjsonobject.h>
4#include <vector>
5#include <memory>
6
7#include <QDataStream>
8
9
15
16namespace pappso
17{
18
19
20class Trace;
21// @TODO function is not implemented :
22PMSPP_LIB_DECL QDataStream &operator<<(QDataStream &out, const Trace &trace);
23// @TODO function is not implemented :
24PMSPP_LIB_DECL QDataStream &operator>>(QDataStream &out, Trace &trace);
25
26/** @brief find the first element in which X is equal or greater than the value
27 * searched important : it implies that Trace is sorted by X
28 * */
29PMSPP_LIB_DECL std::vector<DataPoint>::iterator
30findFirstEqualOrGreaterX(std::vector<DataPoint>::iterator begin,
31 std::vector<DataPoint>::iterator end,
32 const double &value);
33
34PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
35findFirstEqualOrGreaterX(std::vector<DataPoint>::const_iterator begin,
36 std::vector<DataPoint>::const_iterator end,
37 const double &value);
38
39/** @brief find the first element in which Y is different of value
40 * */
41PMSPP_LIB_DECL std::vector<DataPoint>::iterator
42findDifferentYvalue(std::vector<DataPoint>::iterator begin,
43 std::vector<DataPoint>::iterator end,
44 const double &y_value);
45
46PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
47findDifferentYvalue(std::vector<DataPoint>::const_iterator begin,
48 std::vector<DataPoint>::const_iterator end,
49 const double &y_value);
50
51/** @brief find the first element in which X is greater than the value
52 * searched important : it implies that Trace is sorted by X
53 * */
54PMSPP_LIB_DECL std::vector<DataPoint>::iterator
55findFirstGreaterX(std::vector<DataPoint>::iterator begin,
56 std::vector<DataPoint>::iterator end,
57 const double &value);
58
59PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
60findFirstGreaterX(std::vector<DataPoint>::const_iterator begin,
61 std::vector<DataPoint>::const_iterator end,
62 const double &value);
63
64/** @brief find the element with the smallest Y value (intensity)
65 * */
66
67PMSPP_LIB_DECL std::vector<DataPoint>::iterator
68minYDataPoint(std::vector<DataPoint>::iterator begin, std::vector<DataPoint>::iterator end);
69
70PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
71minYDataPoint(std::vector<DataPoint>::const_iterator begin,
72 std::vector<DataPoint>::const_iterator end);
73
74/** @brief find the element with the greatest Y value (intensity)
75 * */
76PMSPP_LIB_DECL std::vector<DataPoint>::iterator
77maxYDataPoint(std::vector<DataPoint>::iterator begin, std::vector<DataPoint>::iterator end);
78
79PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
80maxYDataPoint(std::vector<DataPoint>::const_iterator begin,
81 std::vector<DataPoint>::const_iterator end);
82
83/** @brief Move right to the lower value
84 * */
85PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
86moveLowerYRigthDataPoint(const Trace &trace, std::vector<DataPoint>::const_iterator begin);
87/** @brief Move left to the lower value
88 * */
89PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
90moveLowerYLeftDataPoint(const Trace &trace, std::vector<DataPoint>::const_iterator begin);
91
92/** @brief calculate the sum of y value of a trace
93 * */
94PMSPP_LIB_DECL double sumYTrace(std::vector<DataPoint>::const_iterator begin,
95 std::vector<DataPoint>::const_iterator end,
96 double init);
97
98/** @brief calculate the mean of y value of a trace
99 * */
100PMSPP_LIB_DECL double meanYTrace(std::vector<DataPoint>::const_iterator begin,
101 std::vector<DataPoint>::const_iterator end);
102
103/** @brief calculate the median of y value of a trace
104 * */
105PMSPP_LIB_DECL double medianYTrace(std::vector<DataPoint>::const_iterator begin,
106 std::vector<DataPoint>::const_iterator end);
107
108
109/** @brief calculate the quantile of y value of a trace
110 * @param begin begin iterator
111 * @param end end iterator
112 * @param quantile the quantile value between 0 and 1
113 * @return Y value at the quantile
114 * */
115PMSPP_LIB_DECL double quantileYTrace(std::vector<DataPoint>::const_iterator begin,
116 std::vector<DataPoint>::const_iterator end,
117 double quantile);
118
119
120/** @brief calculate the area of a trace
121 * */
122PMSPP_LIB_DECL double areaTrace(std::vector<DataPoint>::const_iterator begin,
123 std::vector<DataPoint>::const_iterator end);
124
125
126PMSPP_LIB_DECL Trace flooredLocalMaxima(std::vector<DataPoint>::const_iterator begin,
127 std::vector<DataPoint>::const_iterator end,
128 double y_floor);
129
130PMSPP_LIB_DECL Trace incrementByValueX(std::vector<DataPoint>::const_iterator begin,
131 std::vector<DataPoint>::const_iterator end,
132 double increment);
133
134PMSPP_LIB_DECL Trace incrementByValueY(std::vector<DataPoint>::const_iterator begin,
135 std::vector<DataPoint>::const_iterator end,
136 double increment);
137
138
139typedef std::shared_ptr<Trace> TraceSPtr;
140typedef std::shared_ptr<const Trace> TraceCstSPtr;
141
142class MapTrace;
143class TraceCombiner;
146
147/**
148 * \class Trace
149 * \brief A simple container of DataPoint instances
150 */
151class PMSPP_LIB_DECL Trace : public std::vector<DataPoint>
152{
153
154 friend class TraceCombiner;
155 friend class TraceMinusCombiner;
156 friend class TracePlusCombiner;
157
159
160 public:
161 Trace();
162 Trace(const QString &text);
163 Trace(const std::vector<pappso_double> &xVector, const std::vector<pappso_double> &yVector);
164 Trace(const std::vector<std::pair<pappso_double, pappso_double>> &dataPoints);
165 Trace(const std::vector<DataPoint> &dataPoints);
166 Trace(const std::vector<DataPoint> &&dataPoints);
167 explicit Trace(const MapTrace &map_trace);
168 Trace(const Trace &other);
169 Trace(const Trace &&other); // move constructor
170 virtual ~Trace();
171
172 size_t initialize(const std::vector<pappso_double> &xVector,
173 const std::vector<pappso_double> &yVector);
174
175 size_t initialize(const QString &x_text, const QString &y_text);
176 size_t initialize(const QString &space_sep_text);
177
178 size_t initialize(const Trace &other);
179
180 size_t initialize(const std::map<pappso_double, pappso_double> &map);
181
182 virtual Trace &operator=(const Trace &x);
183 virtual Trace &operator=(Trace &&x);
184
185 TraceSPtr makeTraceSPtr() const;
187
188 /** @brief appends a datapoint and return new size
189 */
190 size_t append(const DataPoint &data_point);
191
192 std::vector<pappso_double> xValues() const;
193 std::vector<pappso_double> yValues() const;
194
195 std::map<pappso_double, pappso_double> toMap() const;
196
197 DataPoint containsX(pappso_double value, PrecisionPtr precision_p = nullptr) const;
198
199 // const Peak & Spectrum::getLowestIntensity() const;
200 const DataPoint &minXDataPoint() const;
201 // was const Peak & Spectrum::getMaxIntensity() const;
202 const DataPoint &maxXDataPoint() const;
203
204 // const Peak & Spectrum::getLowestIntensity() const;
205 const DataPoint &minYDataPoint() const;
206 // was const Peak & Spectrum::getMaxIntensity() const;
207 const DataPoint &maxYDataPoint() const;
208
209 pappso_double minX() const;
210 pappso_double maxX() const;
211 pappso_double minY() const;
212
213 pappso_double maxY() const;
214 pappso_double maxY(double mzStart, double mzEnd) const;
215
216 pappso_double sumY() const;
217 pappso_double sumY(double mzStart, double mzEnd) const;
218
219 // was void Spectrum::sortByMz();
223 void unique();
224 std::size_t removeZeroYDataPoints();
225
226 /** @brief apply a filter on this trace
227 * @param filter to process the signal
228 * @return reference on the modified Trace.
229 */
230 virtual Trace &filter(const FilterInterface &filter) final;
231 QString toString() const;
232
233
234 /** @brief serialize a PAPPSO trace object to JSON
235 * @param x_label label for first dimension (x by default)
236 * @param y_label label for second dimension (y by default)
237 * @return a JSON object
238 */
239 QJsonObject toJsonObject(const QString &x_label = "x", const QString &y_label = "y") const;
240
241 QByteArray xAsBase64Encoded() const;
242 QByteArray yAsBase64Encoded() const;
243
244 /** @brief find datapoint with exactly x value
245 */
246 std::vector<DataPoint>::const_iterator dataPointCstIteratorWithX(pappso_double value) const;
247
248 protected:
249 //! Return a reference to the DataPoint instance that has its x member equal
250 //! to \p value.
251 // const DataPoint &dataPointWithX(pappso_double value) const;
252 std::size_t dataPointIndexWithX(pappso_double value) const;
253 std::vector<DataPoint>::iterator dataPointIteratorWithX(pappso_double value);
254};
255
256
257} // namespace pappso
258
261
262extern int traceMetaTypeId;
263extern int tracePtrMetaTypeId;
generic interface to apply a filter on a trace
A simple container of DataPoint instances.
Definition trace.h:152
virtual Trace & operator=(const Trace &x)
Definition trace.cpp:666
void unique()
Definition trace.cpp:1091
pappso_double maxY() const
Definition trace.cpp:1003
pappso_double sumY() const
Definition trace.cpp:1010
const DataPoint & maxYDataPoint() const
Definition trace.cpp:966
std::map< pappso_double, pappso_double > toMap() const
Definition trace.cpp:725
std::vector< pappso_double > xValues() const
Definition trace.cpp:697
const DataPoint & maxXDataPoint() const
Definition trace.cpp:934
pappso_double minX() const
Definition trace.cpp:982
friend class TraceCombiner
Definition trace.h:154
QByteArray yAsBase64Encoded() const
Definition trace.cpp:1164
friend class TracePlusCombiner
Definition trace.h:156
pappso_double maxX() const
Definition trace.cpp:989
void sort(Enums::SortType sort_type, Enums::SortOrder sort_order=Enums::SortOrder::ascending)
Definition trace.cpp:1058
QByteArray xAsBase64Encoded() const
Definition trace.cpp:1143
void sortY(Enums::SortOrder sort_order=Enums::SortOrder::ascending)
Definition trace.cpp:1081
TraceCstSPtr makeTraceCstSPtr() const
Definition trace.cpp:690
virtual Trace & filter(const FilterInterface &filter) final
apply a filter on this trace
Definition trace.cpp:1185
QJsonObject toJsonObject(const QString &x_label="x", const QString &y_label="y") const
serialize a PAPPSO trace object to JSON
Definition trace.cpp:1191
DataPoint containsX(pappso_double value, PrecisionPtr precision_p=nullptr) const
Definition trace.cpp:802
std::vector< pappso_double > yValues() const
Definition trace.cpp:711
pappso_double minY() const
Definition trace.cpp:996
friend class TraceMinusCombiner
Definition trace.h:155
size_t initialize(const std::vector< pappso_double > &xVector, const std::vector< pappso_double > &yVector)
Definition trace.cpp:597
void sortX(Enums::SortOrder sort_order=Enums::SortOrder::ascending)
Definition trace.cpp:1071
size_t append(const DataPoint &data_point)
appends a datapoint and return new size
Definition trace.cpp:657
std::size_t dataPointIndexWithX(pappso_double value) const
Return a reference to the DataPoint instance that has its x member equal to value.
Definition trace.cpp:790
const DataPoint & minXDataPoint() const
Definition trace.cpp:918
std::vector< DataPoint >::const_iterator dataPointCstIteratorWithX(pappso_double value) const
find datapoint with exactly x value
Definition trace.cpp:780
std::vector< DataPoint >::iterator dataPointIteratorWithX(pappso_double value)
Definition trace.cpp:770
const DataPoint & minYDataPoint() const
Definition trace.cpp:950
friend class MassSpectrumCombinerInterface
Definition trace.h:158
TraceSPtr makeTraceSPtr() const
Definition trace.cpp:683
std::size_t removeZeroYDataPoints()
Definition trace.cpp:1101
QString toString() const
Definition trace.cpp:1128
#define PMSPP_LIB_DECL
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
std::shared_ptr< const Trace > TraceCstSPtr
Definition trace.h:140
std::vector< DataPoint >::iterator findDifferentYvalue(std::vector< DataPoint >::iterator begin, std::vector< DataPoint >::iterator end, const double &y_value)
find the first element in which Y is different of value
Definition trace.cpp:121
std::vector< DataPoint >::iterator findFirstEqualOrGreaterX(std::vector< DataPoint >::iterator begin, std::vector< DataPoint >::iterator end, const double &value)
find the first element in which X is equal or greater than the value searched important : it implies ...
Definition trace.cpp:65
std::vector< DataPoint >::iterator findFirstGreaterX(std::vector< DataPoint >::iterator begin, std::vector< DataPoint >::iterator end, const double &value)
find the first element in which X is greater than the value searched important : it implies that Trac...
Definition trace.cpp:93
QDataStream & operator<<(QDataStream &outstream, const MassSpectrum &massSpectrum)
QDataStream & operator>>(QDataStream &instream, MassSpectrum &massSpectrum)
std::vector< DataPoint >::const_iterator moveLowerYLeftDataPoint(const Trace &trace, std::vector< DataPoint >::const_iterator begin)
Move left to the lower value.
Definition trace.cpp:206
std::vector< DataPoint >::const_iterator maxYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition trace.cpp:169
Trace incrementByValueX(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double increment)
Definition trace.cpp:418
double medianYTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
calculate the median of y value of a trace
Definition trace.cpp:267
Trace incrementByValueY(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double increment)
Definition trace.cpp:437
double areaTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
calculate the area of a trace
Definition trace.cpp:283
std::shared_ptr< Trace > TraceSPtr
Definition trace.h:139
double pappso_double
A type definition for doubles.
Definition types.h:60
double meanYTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
calculate the mean of y value of a trace
Definition trace.cpp:234
const PrecisionBase * PrecisionPtr
Definition precision.h:122
std::vector< DataPoint >::const_iterator moveLowerYRigthDataPoint(const Trace &trace, std::vector< DataPoint >::const_iterator begin)
Move right to the lower value.
Definition trace.cpp:189
double sumYTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double init)
calculate the sum of y value of a trace
Definition trace.cpp:226
std::vector< DataPoint >::const_iterator minYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition trace.cpp:152
double quantileYTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double quantile)
calculate the quantile of y value of a trace
Definition trace.cpp:244
Trace flooredLocalMaxima(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double y_floor)
Definition trace.cpp:302
int traceMetaTypeId
Definition trace.cpp:22
int tracePtrMetaTypeId
Definition trace.cpp:23
Q_DECLARE_METATYPE(pappso::Trace)