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 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
64 minYDataPoint(std::vector<DataPoint>::const_iterator begin,
65  std::vector<DataPoint>::const_iterator end);
66 
67 /** @brief find the element with the greatest Y value (intensity)
68  * */
69 PMSPP_LIB_DECL std::vector<DataPoint>::iterator
70 maxYDataPoint(std::vector<DataPoint>::iterator begin,
71  std::vector<DataPoint>::iterator end);
72 
73 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
74 maxYDataPoint(std::vector<DataPoint>::const_iterator begin,
75  std::vector<DataPoint>::const_iterator end);
76 
77 /** @brief Move right to the lower value
78  * */
79 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
80 moveLowerYRigthDataPoint(const Trace &trace,
81  std::vector<DataPoint>::const_iterator begin);
82 /** @brief Move left to the lower value
83  * */
84 PMSPP_LIB_DECL std::vector<DataPoint>::const_iterator
85 moveLowerYLeftDataPoint(const Trace &trace,
86  std::vector<DataPoint>::const_iterator begin);
87 
88 /** @brief calculate the sum of y value of a trace
89  * */
90 PMSPP_LIB_DECL double sumYTrace(std::vector<DataPoint>::const_iterator begin,
91  std::vector<DataPoint>::const_iterator end,
92  double init);
93 
94 /** @brief calculate the mean of y value of a trace
95  * */
96 PMSPP_LIB_DECL double meanYTrace(std::vector<DataPoint>::const_iterator begin,
97  std::vector<DataPoint>::const_iterator end);
98 
99 /** @brief calculate the median of y value of a trace
100  * */
101 PMSPP_LIB_DECL double medianYTrace(std::vector<DataPoint>::const_iterator begin,
102  std::vector<DataPoint>::const_iterator end);
103 
104 /** @brief calculate the area of a trace
105  * */
106 PMSPP_LIB_DECL double areaTrace(std::vector<DataPoint>::const_iterator begin,
107  std::vector<DataPoint>::const_iterator end);
108 
109 PMSPP_LIB_DECL Trace
110 flooredLocalMaxima(std::vector<DataPoint>::const_iterator begin,
111  std::vector<DataPoint>::const_iterator end,
112  double y_floor);
113 
114 typedef std::shared_ptr<Trace> TraceSPtr;
115 typedef std::shared_ptr<const Trace> TraceCstSPtr;
116 
117 class MapTrace;
118 class TraceCombiner;
119 class TracePlusCombiner;
120 class TraceMinusCombiner;
121 
122 /**
123  * \class Trace
124  * \brief A simple container of DataPoint instances
125  */
126 class PMSPP_LIB_DECL Trace : public std::vector<DataPoint>
127 {
128 
129  friend class TraceCombiner;
130  friend class TraceMinusCombiner;
131  friend class TracePlusCombiner;
132 
133  friend class MassSpectrumCombinerInterface;
134 
135  public:
136  Trace();
137  Trace(const std::vector<std::pair<pappso_double, pappso_double>> &dataPoints);
138  Trace(const std::vector<DataPoint> &dataPoints);
139  Trace(const std::vector<DataPoint> &&dataPoints);
140  explicit Trace(const MapTrace &map_trace);
141  Trace(const Trace &other);
142  Trace(const Trace &&other); // move constructor
143  virtual ~Trace();
144 
145  size_t initialize(const std::vector<pappso_double> &xVector,
146  const std::vector<pappso_double> &yVector);
147 
148  size_t initialize(const Trace &other);
149 
150  size_t initialize(const std::map<pappso_double, pappso_double> &map);
151 
152  virtual Trace &operator=(const Trace &x);
153  virtual Trace &operator=(Trace &&x);
154 
155  TraceSPtr makeTraceSPtr() const;
156  TraceCstSPtr makeTraceCstSPtr() const;
157 
158  std::vector<pappso_double> xToVector() const;
159  std::vector<pappso_double> yToVector() const;
160  std::map<pappso_double, pappso_double> toMap() const;
161 
162  DataPoint containsX(pappso_double value,
163  PrecisionPtr precision_p = nullptr) const;
164 
165  // const Peak & Spectrum::getLowestIntensity() const;
166  const DataPoint &minYDataPoint() const;
167 
168  // was const Peak & Spectrum::getMaxIntensity() const;
169  const DataPoint &maxYDataPoint() const;
170 
171  pappso_double minY() const;
172  pappso_double maxY() const;
173  pappso_double maxY(double mzStart, double mzEnd) const;
174  pappso_double sumY() const;
175  pappso_double sumY(double mzStart, double mzEnd) const;
176 
177  // was void Spectrum::sortByMz();
178  void sortX();
179  void unique();
180 
181 
182  std::vector<pappso_double> xValues();
183  std::vector<pappso_double> yValues();
184 
185  /** @brief apply a filter on this trace
186  * @param filter to process the signal
187  * @return reference on the modified Trace
188  */
189  virtual Trace &filter(const FilterInterface &filter) final;
190  QString toString() const;
191 
192  protected:
193  //! Return a reference to the DataPoint instance that has its y member equal
194  //! to \p value.
195  // const DataPoint &dataPointWithX(pappso_double value) const;
196  std::size_t dataPointIndexWithX(pappso_double value) const;
197  std::vector<DataPoint>::iterator dataPointIteratorxWithX(pappso_double value);
198  std::vector<DataPoint>::const_iterator
199  dataPointCstIteratorxWithX(pappso_double value) const;
200 };
201 
202 
203 } // namespace pappso
204 
207 
208 extern int traceMetaTypeId;
209 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:165
pappso::pappso_double
double pappso_double
A type definition for doubles.
Definition: types.h:69
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:149
PMSPP_LIB_DECL
#define PMSPP_LIB_DECL
Definition: exportinmportconfig.h:14
pappso
Definition: aa.cpp:38
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(pappso::Trace)
pappso::DataPoint
Definition: datapoint.h:20
pappso::MapTrace
Definition: maptrace.h:32
pappso::FilterInterface
generic interface to apply a filter on a trace
Definition: filterinterface.h:57
pappso::flooredLocalMaxima
Trace flooredLocalMaxima(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double y_floor)
Definition: trace.cpp:240
pappso::Trace
A simple container of DataPoint instances.
Definition: trace.h:126
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:220
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:182
tracePtrMetaTypeId
int tracePtrMetaTypeId
Definition: trace.cpp:23
pappso::operator>>
QDataStream & operator>>(QDataStream &instream, MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:373
pappso::TraceSPtr
std::shared_ptr< Trace > TraceSPtr
Definition: trace.h:114
pappso::maxYDataPoint
std::vector< DataPoint >::const_iterator maxYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:127
pappso::operator<<
QDataStream & operator<<(QDataStream &outstream, const MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:359
pappso::TraceMinusCombiner
Definition: traceminuscombiner.h:26
pappso::PrecisionPtr
const typedef PrecisionBase * PrecisionPtr
Definition: precision.h:143
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::TraceCombiner
Definition: tracecombiner.h:27
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:30
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:202
traceMetaTypeId
int traceMetaTypeId
Definition: trace.cpp:22
pappso::TraceCstSPtr
std::shared_ptr< const Trace > TraceCstSPtr
Definition: trace.h:115
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:191
pappso::minYDataPoint
std::vector< DataPoint >::const_iterator minYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
find the element with the smallest Y value (intensity)
Definition: trace.cpp:116
pappso::TracePlusCombiner
Definition: tracepluscombiner.h:26
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:58