libpappsomspp
Library for mass spectrometry
trace.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <memory>
5
6#include <QDataStream>
7
8
9#include "../exportinmportconfig.h"
10#include "../types.h"
11#include "datapoint.h"
12#include "../mzrange.h"
13#include "../processing/filters/filterinterface.h"
14
15namespace pappso
16{
17
18
19class Trace;
20// @TODO function is not implemented :
21PMSPP_LIB_DECL QDataStream &operator<<(QDataStream &out, const Trace &trace);
22// @TODO function is not implemented :
23PMSPP_LIB_DECL QDataStream &operator>>(QDataStream &out, Trace &trace);
24
25/** @brief find the first element in which X is equal or greater than the value
26 * searched important : it implies that Trace is sorted by X
27 * */
28PMSPP_LIB_DECL std::vector<DataPoint>::iterator
29findFirstEqualOrGreaterX(std::vector<DataPoint>::iterator begin,
30 std::vector<DataPoint>::iterator end,
31 const double &value);
32
33PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
34findFirstEqualOrGreaterX(std::vector<DataPoint>::const_iterator begin,
35 std::vector<DataPoint>::const_iterator end,
36 const double &value);
37
38/** @brief find the first element in which Y is different of value
39 * */
40PMSPP_LIB_DECL std::vector<DataPoint>::iterator
41findDifferentYvalue(std::vector<DataPoint>::iterator begin,
42 std::vector<DataPoint>::iterator end,
43 const double &y_value);
44
45PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
46findDifferentYvalue(std::vector<DataPoint>::const_iterator begin,
47 std::vector<DataPoint>::const_iterator end,
48 const double &y_value);
49
50/** @brief find the first element in which X is greater than the value
51 * searched important : it implies that Trace is sorted by X
52 * */
53PMSPP_LIB_DECL std::vector<DataPoint>::iterator
54findFirstGreaterX(std::vector<DataPoint>::iterator begin,
55 std::vector<DataPoint>::iterator end,
56 const double &value);
57
58PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
59findFirstGreaterX(std::vector<DataPoint>::const_iterator begin,
60 std::vector<DataPoint>::const_iterator end,
61 const double &value);
62
63/** @brief find the element with the smallest Y value (intensity)
64 * */
65
66PMSPP_LIB_DECL std::vector<DataPoint>::iterator
67minYDataPoint(std::vector<DataPoint>::iterator begin,
68 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,
78 std::vector<DataPoint>::iterator end);
79
80PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
81maxYDataPoint(std::vector<DataPoint>::const_iterator begin,
82 std::vector<DataPoint>::const_iterator end);
83
84/** @brief Move right to the lower value
85 * */
86PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
87moveLowerYRigthDataPoint(const Trace &trace,
88 std::vector<DataPoint>::const_iterator begin);
89/** @brief Move left to the lower value
90 * */
91PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
92moveLowerYLeftDataPoint(const Trace &trace,
93 std::vector<DataPoint>::const_iterator begin);
94
95/** @brief calculate the sum of y value of a trace
96 * */
97PMSPP_LIB_DECL double sumYTrace(std::vector<DataPoint>::const_iterator begin,
98 std::vector<DataPoint>::const_iterator end,
99 double init);
100
101/** @brief calculate the mean of y value of a trace
102 * */
103PMSPP_LIB_DECL double meanYTrace(std::vector<DataPoint>::const_iterator begin,
104 std::vector<DataPoint>::const_iterator end);
105
106/** @brief calculate the median of y value of a trace
107 * */
108PMSPP_LIB_DECL double medianYTrace(std::vector<DataPoint>::const_iterator begin,
109 std::vector<DataPoint>::const_iterator end);
110
111
112/** @brief calculate the quantile of y value of a trace
113 * @param begin begin iterator
114 * @param end end iterator
115 * @param quantile the quantile value between 0 and 1
116 * @return Y value at the quantile
117 * */
118PMSPP_LIB_DECL double
119quantileYTrace(std::vector<DataPoint>::const_iterator begin,
120 std::vector<DataPoint>::const_iterator end,
121 double quantile);
122
123
124/** @brief calculate the area of a trace
125 * */
126PMSPP_LIB_DECL double areaTrace(std::vector<DataPoint>::const_iterator begin,
127 std::vector<DataPoint>::const_iterator end);
128
129
130PMSPP_LIB_DECL Trace
131flooredLocalMaxima(std::vector<DataPoint>::const_iterator begin,
132 std::vector<DataPoint>::const_iterator end,
133 double y_floor);
134
135typedef std::shared_ptr<Trace> TraceSPtr;
136typedef std::shared_ptr<const Trace> TraceCstSPtr;
137
138class MapTrace;
139class TraceCombiner;
142
143/**
144 * \class Trace
145 * \brief A simple container of DataPoint instances
146 */
147class PMSPP_LIB_DECL Trace : public std::vector<DataPoint>
148{
149
150 friend class TraceCombiner;
151 friend class TraceMinusCombiner;
152 friend class TracePlusCombiner;
153
154 friend class MassSpectrumCombinerInterface;
155
156 public:
157 Trace();
158 Trace(const QString &text);
159 Trace(const std::vector<pappso_double> &xVector,
160 const std::vector<pappso_double> &yVector);
161 Trace(const std::vector<std::pair<pappso_double, pappso_double>> &dataPoints);
162 Trace(const std::vector<DataPoint> &dataPoints);
163 Trace(const std::vector<DataPoint> &&dataPoints);
164 explicit Trace(const MapTrace &map_trace);
165 Trace(const Trace &other);
166 Trace(const Trace &&other); // move constructor
167 virtual ~Trace();
168
169 size_t initialize(const std::vector<pappso_double> &xVector,
170 const std::vector<pappso_double> &yVector);
171
172 size_t initialize(const QString &x_text, const QString &y_text);
173 size_t initialize(const QString &space_sep_text);
174
175 size_t initialize(const Trace &other);
176
177 size_t initialize(const std::map<pappso_double, pappso_double> &map);
178
179 virtual Trace &operator=(const Trace &x);
180 virtual Trace &operator=(Trace &&x);
181
182 TraceSPtr makeTraceSPtr() const;
183 TraceCstSPtr makeTraceCstSPtr() const;
184
185 /** @brief appends a datapoint and return new size
186 */
187 size_t append(const DataPoint &data_point);
188
189 std::vector<pappso_double> xValues() const;
190 std::vector<pappso_double> yValues() const;
191
192 std::map<pappso_double, pappso_double> toMap() const;
193
194 DataPoint containsX(pappso_double value,
195 PrecisionPtr precision_p = nullptr) const;
196
197 // const Peak & Spectrum::getLowestIntensity() const;
198 const DataPoint &minXDataPoint() const;
199 // was const Peak & Spectrum::getMaxIntensity() const;
200 const DataPoint &maxXDataPoint() const;
201
202 // const Peak & Spectrum::getLowestIntensity() const;
203 const DataPoint &minYDataPoint() const;
204 // was const Peak & Spectrum::getMaxIntensity() const;
205 const DataPoint &maxYDataPoint() const;
206
207 pappso_double minX() const;
208 pappso_double maxX() const;
209 pappso_double minY() const;
210
211 pappso_double maxY() const;
212 pappso_double maxY(double mzStart, double mzEnd) const;
213
214 pappso_double sumY() const;
215 pappso_double sumY(double mzStart, double mzEnd) const;
216
217 // was void Spectrum::sortByMz();
218 void sort(SortType sort_type, SortOrder sort_order = SortOrder::ascending);
219 void sortX(SortOrder sort_order = SortOrder::ascending);
220 void sortY(SortOrder sort_order = SortOrder::ascending);
221 void unique();
222 std::size_t removeZeroYDataPoints();
223
224 /** @brief apply a filter on this trace
225 * @param filter to process the signal
226 * @return reference on the modified Trace
227 */
228 virtual Trace &filter(const FilterInterface &filter) final;
229 QString toString() const;
230
231 QByteArray xAsBase64Encoded() const;
232 QByteArray yAsBase64Encoded() const;
233
234 /** @brief find datapoint with exactly x value
235 */
236 std::vector<DataPoint>::const_iterator
237 dataPointCstIteratorWithX(pappso_double value) const;
238
239 protected:
240 //! Return a reference to the DataPoint instance that has its y member equal
241 //! to \p value.
242 // const DataPoint &dataPointWithX(pappso_double value) const;
243 std::size_t dataPointIndexWithX(pappso_double value) const;
244 std::vector<DataPoint>::iterator dataPointIteratorWithX(pappso_double value);
245};
246
247
248} // namespace pappso
249
252
253extern int traceMetaTypeId;
254extern int tracePtrMetaTypeId;
generic interface to apply a filter on a trace
A simple container of DataPoint instances.
Definition: trace.h:148
#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:136
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:127
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:71
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:99
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:223
std::vector< DataPoint >::const_iterator maxYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:180
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:291
double areaTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
calculate the area of a trace
Definition: trace.cpp:309
std::shared_ptr< Trace > TraceSPtr
Definition: trace.h:135
double pappso_double
A type definition for doubles.
Definition: types.h:49
SortType
Definition: types.h:161
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:253
std::vector< DataPoint >::const_iterator moveLowerYRigthDataPoint(const Trace &trace, std::vector< DataPoint >::const_iterator begin)
Move right to the lower value.
Definition: trace.cpp:205
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:244
std::vector< DataPoint >::const_iterator minYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:158
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:265
SortOrder
Definition: types.h:169
Trace flooredLocalMaxima(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double y_floor)
Definition: trace.cpp:329
int traceMetaTypeId
Definition: trace.cpp:27
int tracePtrMetaTypeId
Definition: trace.cpp:28
Q_DECLARE_METATYPE(pappso::Trace)