pappsomspp
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 flooredLocalMaxima(std::vector<DataPoint>::const_iterator begin,
110  std::vector<DataPoint>::const_iterator end,
111  double y_floor);
112 
113 typedef std::shared_ptr<Trace> TraceSPtr;
114 typedef std::shared_ptr<const Trace> TraceCstSPtr;
115 
116 class MapTrace;
117 class TraceCombiner;
118 class TracePlusCombiner;
119 class TraceMinusCombiner;
120 
121 /**
122  * \class Trace
123  * \brief A simple container of DataPoint instances
124  */
125 class PMSPP_LIB_DECL Trace : public std::vector<DataPoint>
126 {
127 
128  friend class TraceCombiner;
129  friend class TraceMinusCombiner;
130  friend class TracePlusCombiner;
131 
132  friend class MassSpectrumCombinerInterface;
133 
134  public:
135  Trace();
136  Trace(const std::vector<std::pair<pappso_double, pappso_double>> &dataPoints);
137  Trace(const std::vector<DataPoint> &dataPoints);
138  Trace(const std::vector<DataPoint> &&dataPoints);
139  explicit Trace(const MapTrace &map_trace);
140  Trace(const Trace &other);
141  Trace(const Trace &&other); // move constructor
142  virtual ~Trace();
143 
144  size_t initialize(const std::vector<pappso_double> &xVector,
145  const std::vector<pappso_double> &yVector);
146 
147  size_t initialize(const Trace &other);
148 
149  size_t initialize(const std::map<pappso_double, pappso_double> &map);
150 
151  virtual Trace &operator=(const Trace &x);
152  virtual Trace &operator=(Trace &&x);
153 
154  TraceSPtr makeTraceSPtr() const;
155  TraceCstSPtr makeTraceCstSPtr() const;
156 
157  std::vector<pappso_double> xToVector() const;
158  std::vector<pappso_double> yToVector() const;
159  std::map<pappso_double, pappso_double> toMap() const;
160 
161  DataPoint containsX(pappso_double value,
162  PrecisionPtr precision_p = nullptr) const;
163 
164  // const Peak & Spectrum::getLowestIntensity() const;
165  const DataPoint &minYDataPoint() const;
166 
167  // was const Peak & Spectrum::getMaxIntensity() const;
168  const DataPoint &maxYDataPoint() const;
169 
170  pappso_double minY() const;
171  pappso_double maxY() const;
172  pappso_double maxY(double mzStart, double mzEnd) const;
173  pappso_double sumY() const;
174  pappso_double sumY(double mzStart, double mzEnd) const;
175 
176  // was void Spectrum::sortByMz();
177  void sortX();
178  void unique();
179 
180 
181  std::vector<pappso_double> xValues();
182  std::vector<pappso_double> yValues();
183 
184  /** @brief apply a filter on this trace
185  * @param filter to process the signal
186  * @return reference on the modified Trace
187  */
188  virtual Trace &filter(const FilterInterface &filter) final;
189  QString toString() const;
190 
191  protected:
192  //! Return a reference to the DataPoint instance that has its y member equal
193  //! to \p value.
194  // const DataPoint &dataPointWithX(pappso_double value) const;
195  std::size_t dataPointIndexWithX(pappso_double value) const;
196  std::vector<DataPoint>::iterator dataPointIteratorxWithX(pappso_double value);
197  std::vector<DataPoint>::const_iterator
198  dataPointCstIteratorxWithX(pappso_double value) const;
199 };
200 
201 
202 } // namespace pappso
203 
206 
207 extern int traceMetaTypeId;
208 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:164
pappso::pappso_double
double pappso_double
A type definition for doubles.
Definition: types.h:67
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:148
PMSPP_LIB_DECL
#define PMSPP_LIB_DECL
Definition: exportinmportconfig.h:12
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:55
pappso::PeptideIonCter::x
pappso::flooredLocalMaxima
Trace flooredLocalMaxima(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end, double y_floor)
Definition: trace.cpp:239
pappso::Trace
A simple container of DataPoint instances.
Definition: trace.h:125
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:219
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:181
tracePtrMetaTypeId
int tracePtrMetaTypeId
Definition: trace.cpp:22
pappso::operator>>
QDataStream & operator>>(QDataStream &instream, MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:372
pappso::TraceSPtr
std::shared_ptr< Trace > TraceSPtr
Definition: trace.h:113
pappso::maxYDataPoint
std::vector< DataPoint >::const_iterator maxYDataPoint(std::vector< DataPoint >::const_iterator begin, std::vector< DataPoint >::const_iterator end)
Definition: trace.cpp:126
pappso::operator<<
QDataStream & operator<<(QDataStream &outstream, const MassSpectrum &massSpectrum)
Definition: massspectrum.cpp:358
pappso::TraceMinusCombiner
Definition: traceminuscombiner.h:26
pappso::PrecisionPtr
const typedef PrecisionBase * PrecisionPtr
Definition: precision.h:141
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:86
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:29
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:201
traceMetaTypeId
int traceMetaTypeId
Definition: trace.cpp:21
pappso::TraceCstSPtr
std::shared_ptr< const Trace > TraceCstSPtr
Definition: trace.h:114
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:190
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:115
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:57