Mass++ Common Libraries v2.7.5
 All Classes Namespaces Files Functions Variables Enumerations Macros
PeaksCluster2D.cpp
Go to the documentation of this file.
1 
12 #include "stdafx.h"
13 #include "PeaksCluster2D.h"
14 
15 #include "Peak2DElement.h"
16 
17 
18 using namespace kome::objects;
19 
20 
21 #include <crtdbg.h>
22 #ifdef _DEBUG
23  #define new new( _NORMAL_BLOCK, __FILE__, __LINE__ )
24  #define malloc( s ) _malloc_dbg( s, _NORMAL_BLOCK, __FILE__, __LINE__ )
25 #endif // _DEBUG
26 
27 
28 
29 // constructor
31  m_rt = 0.0;
32  m_rtFlg = false;
33 
34  m_startRt = 0.0;
35  m_endRt = 0.0;
36  m_rtRangeFlg = false;
37 
38  m_mz = 0.0;
39  m_mzFlg = false;
40 
41  m_startMz = 0.0;
42  m_endMz = 0.0;
43  m_mzRangeFlg = false;
44 
45  m_intensity = 0.0;
46  m_intFlg = false;
47 
48  m_charge = -1;
49 }
50 
51 // destructor
53  while( m_peaks.size() > 0 ) {
54  m_peaks.front()->setCluster( NULL );
55  }
56 }
57 
58 // set RT
59 void PeaksCluster2D::setRt( const double rt ) {
60  m_rt = rt;
61  m_rtFlg = true;
62 }
63 
64 // get RT
66  return m_rt;
67 }
68 
69 // set RT range
70 void PeaksCluster2D::setRtRange( const double startRt, const double endRt ) {
71  m_startRt = startRt;
72  m_endRt = endRt;
73  m_rtRangeFlg = true;
74 }
75 
76 // get start RT
78  return m_startRt;
79 }
80 
81 // get end RT
83  return m_endRt;
84 }
85 
86 // set m/z
87 void PeaksCluster2D::setMz( const double mz ) {
88  m_mz = mz;
89  m_mzFlg = true;
90 }
91 
92 // get m/z
94  return m_mz;
95 }
96 
97 // set m/z range
98 void PeaksCluster2D::setMzRange( const double startMz, const double endMz ) {
99  m_startMz = startMz;
100  m_endMz = endMz;
101  m_mzRangeFlg = true;
102 }
103 
104 // get start m/z
106  return m_startMz;
107 }
108 
109 // get end m/z
111  return m_endMz;
112 }
113 
114 // set intensity
115 void PeaksCluster2D::setIntensity( const double intensity ) {
116  m_intensity = intensity;
117  m_intFlg = true;
118 }
119 
120 // get intensity
122  return m_intensity;
123 }
124 
125 // set charge
126 void PeaksCluster2D::setCharge( const int charge ) {
127  m_charge = charge;
128 }
129 
130 // get charge
132  return m_charge;
133 }
134 
135 // add peak
137  // search peak
138  int idx = searchPeak( peak );
139  if( idx >= 0 || peak == NULL ) {
140  return;
141  }
142 
143  // add
144  m_peaks.push_back( peak );
145  peak->setCluster( this );
146 
147  // update
148  update();
149 }
150 
151 // remove peak
153  // index
154  int idx = searchPeak( peak );
155 
156  // remove
157  if( idx >= 0 ) {
158  removePeak( idx );
159  }
160 }
161 
162 // remove peak
163 void PeaksCluster2D::removePeak( const unsigned int idx ) {
164  // check the index
165  if( idx >= m_peaks.size() ) {
166  return;
167  }
168 
169  // peak
170  kome::objects::Peak2DElement* peak = m_peaks[ idx ];
171 
172  // remove
173  m_peaks.erase( m_peaks.begin() + idx );
174 
175  // set cluster
176  peak->setCluster( NULL );
177 
178  // update
179  update();
180 }
181 
182 // clear peaks
184  // clear
185  for( unsigned int i = 0; i < m_peaks.size(); i++ ) {
186  m_peaks[ i ]->setCluster( NULL );
187  }
188  m_peaks.clear();
189 
190  // update
191  update();
192 }
193 
194 // update member values
196  // initialize
197  double rt = 0.0;
198  double startRt = 0.0;
199  double endRt = 0.0;
200  double mz = 0.0;
201  double startMz = 0.0;
202  double endMz = 0.0;
203  double intensity = 0.0;
204 
205  // peaks
206  bool neg = true;
207  for( unsigned int i = 0; i < m_peaks.size(); i++ ) {
208  // peak
209  Peak2DElement* peak = m_peaks[ i ];
210  double peakInt = std::max( peak->getIntensity(), 0.0 );
211  if( peak->getIntensity() >= 0.0 ) {
212  neg = false;
213  }
214 
215  // RT
216  rt += peak->getRt() * peakInt;
217  if( i == 0 || peak->getStartRt() < startRt ) {
218  startRt = peak->getStartRt();
219  }
220  if( i == 0 || peak->getEndRt() > endRt ) {
221  endRt = peak->getEndRt();
222  }
223 
224  // m/z
225  mz += peak->getMz() * peakInt;
226  if( i == 0 || peak->getStartMz() < startMz ) {
227  startMz = peak->getStartMz();
228  }
229  if( i == 0 || peak->getEndMz() > endMz ) {
230  endMz = peak->getEndMz();
231  }
232 
233  // intensity
234  intensity += peakInt;
235  }
236 
237  // set
238  if( !m_rtFlg ) {
239  if( intensity > 0.0 ) {
240  m_rt = rt / intensity;
241  }
242  else {
243  for( unsigned int i = 0; i < m_peaks.size(); i++ ) {
244  rt += m_peaks[ i ]->getRt();
245  }
246  if( m_peaks.size() > 0 ) {
247  rt /= (double)m_peaks.size();
248  }
249  m_rt = rt;
250  }
251  }
252  if( !m_rtRangeFlg ) {
253  m_startRt = startRt;
254  m_endRt = endRt;
255  }
256  if( !m_mzFlg ) {
257  if( intensity > 0.0 ) {
258  m_mz = mz / intensity;
259  }
260  else {
261  for( unsigned int i = 0; i < m_peaks.size(); i++ ) {
262  mz += m_peaks[ i ]->getMz();
263  }
264  if( m_peaks.size() > 0 ) {
265  mz /= (double)m_peaks.size();
266  }
267  m_mz = mz;
268  }
269  }
270  if( !m_mzRangeFlg ) {
271  m_startMz = startMz;
272  m_endMz = endMz;
273  }
274  if( !m_intFlg ) {
275  m_intensity = neg ? -1.0 : intensity;
276  }
277 }
void setRt(const double rt)
sets RT
void setCluster(PeaksCluster2D *cluster)
sets peaks cluster
double getStartRt()
gets start RT
void addPeak(Peak2DElement *peak)
adds peak
void clearPeaks()
clears peaks
void removePeak(Peak2DElement *peak)
removes peak
double getIntensity()
gets intensity
void setMz(const double mz)
sets m/z
void setCharge(const int charge)
sets charge
interfaces of Peak2DElement class
#define NULL
Definition: CoreMacros.h:18
int searchPeak(Peak2DElement *peak)
searches peak
double getEndRt()
gets end RT
std::vector< Peak2DElement * > m_peaks
Definition: Peaks2DArray.h:44
double getEndMz()
gets end m/z
void setRtRange(const double startRt, const double endRt)
sets RT range
2-dimentional peak element
Definition: Peak2DElement.h:33
virtual ~PeaksCluster2D()
destructor
double getStartMz()
gets start m/z
double getEndRt()
gets end RT
double getStartRt()
gets start RT
double getEndMz()
gets end m/z
void setIntensity(const double intensity)
sets intensity
double getIntensity()
gets intensity
void setMzRange(const double startMz, const double endMz)
sets m/z range
void update()
updates member values
interfaces of PeaksCluster2D class
double getStartMz()
gets start m/z