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 
15 namespace pappso
16 {
17 
18 
19 class Trace;
20 QDataStream &operator<<(QDataStream &out, const Trace &trace);
21 QDataStream &operator>>(QDataStream &out, Trace &trace);
22 
23 /** @brief find the first element in which X is equal or greater than the value
24  * searched important : it implies that Trace is sorted by X
25  * */
26 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
27 findFirstEqualOrGreaterX(std::vector<DataPoint>::iterator begin,
28  std::vector<DataPoint>::iterator end,
29  const double &value);
30 
31 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
32 findFirstEqualOrGreaterX(std::vector<DataPoint>::const_iterator begin,
33  std::vector<DataPoint>::const_iterator end,
34  const double &value);
35 
36 /** @brief find the first element in which Y is different of value
37  * */
38 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
39 findDifferentYvalue(std::vector<DataPoint>::iterator begin,
40  std::vector<DataPoint>::iterator end,
41  const double &y_value);
42 
43 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
44 findDifferentYvalue(std::vector<DataPoint>::const_iterator begin,
45  std::vector<DataPoint>::const_iterator end,
46  const double &y_value);
47 
48 /** @brief find the first element in which X is greater than the value
49  * searched important : it implies that Trace is sorted by X
50  * */
51 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
52 findFirstGreaterX(std::vector<DataPoint>::iterator begin,
53  std::vector<DataPoint>::iterator end,
54  const double &value);
55 
56 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
57 findFirstGreaterX(std::vector<DataPoint>::const_iterator begin,
58  std::vector<DataPoint>::const_iterator end,
59  const double &value);
60 
61 /** @brief find the element with the smallest Y value (intensity)
62  * */
63 
64 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
65 minYDataPoint(std::vector<DataPoint>::iterator begin,
66  std::vector<DataPoint>::iterator end);
67 
68 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
69 minYDataPoint(std::vector<DataPoint>::const_iterator begin,
70  std::vector<DataPoint>::const_iterator end);
71 
72 /** @brief find the element with the greatest Y value (intensity)
73  * */
74 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
75 maxYDataPoint(std::vector<DataPoint>::iterator begin,
76  std::vector<DataPoint>::iterator end);
77 
78 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
79 maxYDataPoint(std::vector<DataPoint>::const_iterator begin,
80  std::vector<DataPoint>::const_iterator end);
81 
82 /** @brief Move right to the lower value
83  * */
84 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
85 moveLowerYRigthDataPoint(const Trace &trace,
86  std::vector<DataPoint>::const_iterator begin);
87 /** @brief Move left to the lower value
88  * */
89 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
90 moveLowerYLeftDataPoint(const Trace &trace,
91  std::vector<DataPoint>::const_iterator begin);
92 
93 /** @brief calculate the sum of y value of a trace
94  * */
95 PMSPP_LIB_DECL double sumYTrace(std::vector<DataPoint>::const_iterator begin,
96  std::vector<DataPoint>::const_iterator end,
97  double init);
98 
99 /** @brief calculate the mean of y value of a trace
100  * */
101 PMSPP_LIB_DECL double meanYTrace(std::vector<DataPoint>::const_iterator begin,
102  std::vector<DataPoint>::const_iterator end);
103 
104 /** @brief calculate the median of y value of a trace
105  * */
106 PMSPP_LIB_DECL double medianYTrace(std::vector<DataPoint>::const_iterator begin,
107  std::vector<DataPoint>::const_iterator end);
108 
109 /** @brief calculate the area of a trace
110  * */
111 PMSPP_LIB_DECL double areaTrace(std::vector<DataPoint>::const_iterator begin,
112  std::vector<DataPoint>::const_iterator end);
113 
114 PMSPP_LIB_DECL Trace
115 flooredLocalMaxima(std::vector<DataPoint>::const_iterator begin,
116  std::vector<DataPoint>::const_iterator end,
117  double y_floor);
118 
119 typedef std::shared_ptr<Trace> TraceSPtr;
120 typedef std::shared_ptr<const Trace> TraceCstSPtr;
121 
122 class MapTrace;
123 class TraceCombiner;
124 class TracePlusCombiner;
125 class TraceMinusCombiner;
126 
127 /**
128  * \class Trace
129  * \brief A simple container of DataPoint instances
130  */
131 class PMSPP_LIB_DECL Trace : public std::vector<DataPoint>
132 {
133 
134  friend class TraceCombiner;
135  friend class TraceMinusCombiner;
136  friend class TracePlusCombiner;
137 
138  friend class MassSpectrumCombinerInterface;
139 
140  public:
141  Trace();
142  Trace(const std::vector<pappso_double> &xVector,
143  const std::vector<pappso_double> &yVector);
144  Trace(const std::vector<std::pair<pappso_double, pappso_double>> &dataPoints);
145  Trace(const std::vector<DataPoint> &dataPoints);
146  Trace(const std::vector<DataPoint> &&dataPoints);
147  explicit Trace(const MapTrace &map_trace);
148  Trace(const Trace &other);
149  Trace(const Trace &&other); // move constructor
150  virtual ~Trace();
151 
152  size_t initialize(const std::vector<pappso_double> &xVector,
153  const std::vector<pappso_double> &yVector);
154 
155  size_t initialize(const Trace &other);
156 
157  size_t initialize(const std::map<pappso_double, pappso_double> &map);
158 
159  virtual Trace &operator=(const Trace &x);
160  virtual Trace &operator=(Trace &&x);
161 
162  TraceSPtr makeTraceSPtr() const;
163  TraceCstSPtr makeTraceCstSPtr() const;
164 
165  std::vector<pappso_double> xValues() const;
166  std::vector<pappso_double> yValues() const;
167 
168  std::map<pappso_double, pappso_double> toMap() const;
169 
170  DataPoint containsX(pappso_double value,
171  PrecisionPtr precision_p = nullptr) const;
172 
173  // const Peak & Spectrum::getLowestIntensity() const;
174  const DataPoint &minYDataPoint() const;
175 
176  // was const Peak & Spectrum::getMaxIntensity() const;
177  const DataPoint &maxYDataPoint() const;
178 
179  pappso_double minY() const;
180  pappso_double maxY() const;
181  pappso_double maxY(double mzStart, double mzEnd) const;
182  pappso_double sumY() const;
183  pappso_double sumY(double mzStart, double mzEnd) const;
184 
185  // was void Spectrum::sortByMz();
186  void sortX();
187  void unique();
188 
189  /** @brief apply a filter on this trace
190  * @param filter to process the signal
191  * @return reference on the modified Trace
192  */
193  virtual Trace &filter(const FilterInterface &filter) final;
194  QString toString() const;
195 
196  protected:
197  //! Return a reference to the DataPoint instance that has its y member equal
198  //! to \p value.
199  // const DataPoint &dataPointWithX(pappso_double value) const;
200  std::size_t dataPointIndexWithX(pappso_double value) const;
201  std::vector<DataPoint>::iterator dataPointIteratorWithX(pappso_double value);
202  std::vector<DataPoint>::const_iterator
203  dataPointCstIteratorWithX(pappso_double value) const;
204 };
205 
206 
207 } // namespace pappso
208 
211 
212 extern int traceMetaTypeId;
213 extern int tracePtrMetaTypeId;
pappso::moveLowerYLeftDataPoint
std::vector< DataPoint >::const_iterator moveLowerYLeftDataPoint(const Trace &trace, std::vector< DataPoint >::const_iterator begin)
Move left to the lower value.
Definition: trace.cpp:181
pappso::pappso_double
double pappso_double
A type definition for doubles.
Definition: types.h:48
pappso::moveLowerYRigthDataPoint
std::vector< DataPoint >::const_iterator moveLowerYRigthDataPoint(const Trace &trace, std::vector< DataPoint >::const_iterator begin)
Move right to the lower value.
Definition: trace.cpp:163
PMSPP_LIB_DECL
#define PMSPP_LIB_DECL
Definition: exportinmportconfig.h:14
pappso
tries to keep as much as possible monoisotopes, removing any possible C13 peaks
Definition: aa.cpp:39
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(pappso::Trace)
pappso::DataPoint
Definition: datapoint.h:21
pappso::MapTrace
Definition: maptrace.h:33
pappso::FilterInterface
generic interface to apply a filter on a trace
Definition: filterinterface.h:40
pappso::flooredLocalMaxima
Trace flooredLocalMaxima(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double y_floor)
Definition: trace.cpp:260
pappso::Trace
A simple container of DataPoint instances.
Definition: trace.h:132
pappso::areaTrace
double areaTrace(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
calculate the area of a trace
Definition: trace.cpp:240
pappso::sumYTrace
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:202
tracePtrMetaTypeId
int tracePtrMetaTypeId
Definition: trace.cpp:24
pappso::operator>>
QDataStream & operator>>(QDataStream &instream, MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:357
pappso::TraceSPtr
std::shared_ptr< Trace > TraceSPtr
Definition: trace.h:119
pappso::maxYDataPoint
std::vector< DataPoint >::const_iterator maxYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:138
pappso::operator<<
QDataStream & operator<<(QDataStream &outstream, const MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:343
pappso::TraceMinusCombiner
Definition: traceminuscombiner.h:27
pappso::findDifferentYvalue
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:87
pappso::PrecisionBase
Definition: precision.h:44
pappso::TraceCombiner
Definition: tracecombiner.h:28
pappso::findFirstEqualOrGreaterX
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:31
pappso::medianYTrace
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:222
traceMetaTypeId
int traceMetaTypeId
Definition: trace.cpp:23
pappso::TraceCstSPtr
std::shared_ptr< const Trace > TraceCstSPtr
Definition: trace.h:120
datapoint.h
pappso::meanYTrace
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:211
pappso::minYDataPoint
std::vector< DataPoint >::const_iterator minYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:116
pappso::TracePlusCombiner
Definition: tracepluscombiner.h:27
pappso::findFirstGreaterX
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:59