libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
qualifiedmassspectrum.cpp
Go to the documentation of this file.
1/*******************************************************************************
2 * Copyright (c) 2015 Olivier Langella <olivier.langella@u-psud.fr>.
3 *
4 * This file is part of the PAPPSOms++ library.
5 *
6 * PAPPSOms++ is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * PAPPSOms++ is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
18 *
19 ******************************************************************************/
20
21/////////////////////// StdLib includes
22#include <cmath>
23
24
25/////////////////////// Qt includes
26#include <QDebug>
27
28
29/////////////////////// Local includes
33
34
35namespace pappso
36{
37
38//! Construct an uninitialized QualifiedMassSpectrum.
42
43
44//! Construct a QualifiedMassSpectrum using a MassSpectrumId;
48
49
51 : msp_massSpectrum{mass_spectrum_SPtr}
52{
53}
54
55
56//! Construct a QualifiedMassSpectrum as a copy of \p other.
71
72
73//! Destruct this QualifiedMassSpectrum.
75{
76 // qDebug() << __FILE__ << "@" << __LINE__ << __FUNCTION__ << " ()";
77}
78
79
96
97
100{
101 this->msp_massSpectrum = std::make_shared<MassSpectrum>(*this->msp_massSpectrum.get());
102 return *this;
103}
104
105
108{
109 return std::make_shared<QualifiedMassSpectrum>(*this);
110}
111
112
115{
116 return std::make_shared<const QualifiedMassSpectrum>(*this);
117}
118
119
120//! Set the MassSpectrumSPtr.
121void
126
127
128//! Get the MassSpectrumSPtr.
134
135
136//! Get the MassSpectrumCstSPtr.
142
143
144//! Set the MassSpectrumId.
145void
150
151
152//! Get the MassSpectrumId.
153const MassSpectrumId &
158
164
165void
167{
168 m_isEmptyMassSpectrum = is_empty_mass_spectrum;
169}
170
171
172bool
177
178
179//! Set the mass spectrum level.
180void
182{
183 m_msLevel = level;
184}
185
186
187//! Get the mass spectrum level.
188unsigned int
190{
191 return m_msLevel;
192}
193
194
195//! Set the retention time in seconds.
196void
198{
199 m_rt = rt_in_seconds;
200}
201
202
203//! Get the retention time in seconds.
206{
207 return m_rt;
208}
209
210
211//! Get the retention time in minutes.
214{
215 return m_rt / 60;
216}
217
218
219//! Set the drift time in milliseconds.
220void
222{
223 if(std::isinf(dt_in_milli_seconds))
224 m_dt = -1;
225 else
226 m_dt = dt_in_milli_seconds;
227}
228
229
230//! Get the drift time in milliseconds.
236
237
238//! Get the precursor m/z ratio.
241{
242 if(!m_precursorIonData.size())
243 {
244 if(ok_p != nullptr)
245 *ok_p = false;
246
247 return std::numeric_limits<double>::max();
248 }
249
250 if(ok_p != nullptr)
251 *ok_p = true;
252
253 // qDebug() << "Returning precursor mz value: " <<
254 // m_precursorIonData.front().mz;
255 return m_precursorIonData.front().mz;
256}
257
258//! Get the precursor mass ratio.
259double
261{
262 if(ok_p != nullptr)
263 *ok_p = false;
264 bool ok_precmz = false;
265 double mz_prec = getPrecursorMz(&ok_precmz);
266 if(ok_precmz)
267 {
268 uint charge = getPrecursorCharge(&ok_precmz);
269 if(ok_precmz)
270 {
271 // compute precursor mass given the charge state
272 mz_prec = mz_prec * (double)charge;
273 mz_prec -= (MHPLUS * (double)charge);
274 if(ok_p != nullptr)
275 *ok_p = true;
276 return mz_prec;
277 }
278 }
279 return std::numeric_limits<double>::max();
280}
281
282QString
284 const std::vector<PrecursorIonData> &precursor_ion_data_vector, const QString &separator) const
285{
286 QString text;
287
288 // We do not want to use the separator if there is only one precursor in the
289 // vector.
290
291 if(precursor_ion_data_vector.size() == 1)
292 return QString("%1").arg(precursor_ion_data_vector.front().mz, 0, 'f', 6);
293
294 // If there are more than one precursor, then we should list them joined with
295 // the separator.
296
297 using iterator = std::vector<pappso::PrecursorIonData>::const_iterator;
298
299 iterator begin_iterator = precursor_ion_data_vector.begin();
300 iterator pre_end_iterator = std::prev(precursor_ion_data_vector.end());
301
302 for(; begin_iterator != precursor_ion_data_vector.end(); ++begin_iterator)
303 {
304 if(begin_iterator == pre_end_iterator)
305 // No separator at the end of the string
306 text += QString("%1").arg(begin_iterator->mz, 0, 'f', 6);
307 else
308 text += QString("%1%2").arg(begin_iterator->mz, 0, 'f', 6).arg(separator);
309 }
310
311 return text;
312}
313
314
315QString
320
321
322QString
324{
325 // Sort the PrecursorIonData instances by increasing mz values.
326 // Then craft the string using the mz values.
327
328 std::vector<PrecursorIonData> sorted_vector = getPrecursorIonDataSortedWithMz();
329
330 return getPrecursorDataMzValuesAsString(sorted_vector, separator);
331}
332
333
334//! Get the precursor charge.
335unsigned int
337{
338 if(!m_precursorIonData.size())
339 {
340 if(ok_p != nullptr)
341 *ok_p = false;
342 return std::numeric_limits<unsigned int>::max();
343 }
344
345 if(ok_p != nullptr)
346 *ok_p = true;
347
348 return m_precursorIonData.front().charge;
349}
350
351
352QString
354 const std::vector<PrecursorIonData> &precursor_ion_data_vector, const QString &separator) const
355{
356 QString text;
357
358 // We do not want to use the separator if there is only one precursor in the
359 // vector.
360
361 if(precursor_ion_data_vector.size() == 1)
362 return QString("%1").arg(precursor_ion_data_vector.front().charge);
363
364 // If there are more than one precursor, then we should list them joined with
365 // the separator.
366 for(auto item : precursor_ion_data_vector)
367 {
368 text += QString("%1%2").arg(item.charge).arg(separator);
369 }
370
371 return text;
372}
373
374
375QString
380
381
382QString
384{
385 // Sort the PrecursorIonData instances by increasing mz values.
386 // Then craft the string using the mz values.
387
388 std::vector<PrecursorIonData> sorted_vector = getPrecursorIonDataSortedWithMz();
389
390 return getPrecursorDataChargeValuesAsString(sorted_vector, separator);
391}
392
393
394//! Get the intensity of the precursor ion.
397{
398 if(!m_precursorIonData.size())
399 {
400 if(ok_p != nullptr)
401 *ok_p = false;
402 return std::numeric_limits<double>::max();
403 }
404
405 if(ok_p != nullptr)
406 *ok_p = true;
407
408 return m_precursorIonData.front().intensity;
409}
410
411
412//! Set the scan number of the precursor ion.
413void
414QualifiedMassSpectrum::setPrecursorSpectrumIndex(std::size_t precursor_spectrum_index)
415{
416 m_precursorSpectrumIndex = precursor_spectrum_index;
417}
418
419
420//! Get the scan number of the precursor ion.
421std::size_t
426
427
428//! Set the scan native id of the precursor ion.
429void
431{
432 m_precursorNativeId = native_id;
433}
434
435const QString &
440
441
442void
444{
445 m_precursorIonData.push_back(precursor_ion_data);
446}
447
448
449const std::vector<PrecursorIonData> &
454
455
456std::vector<PrecursorIonData>
458{
459 std::vector<PrecursorIonData> new_vector;
460 new_vector.assign(m_precursorIonData.begin(), m_precursorIonData.end());
461
462 std::sort(
463 new_vector.begin(),
464 new_vector.end(),
465 [](const PrecursorIonData &a, const PrecursorIonData &b) -> bool { return a.mz < b.mz; });
466
467 return new_vector;
468}
469
470
471void
473 const QVariant &value)
474{
475
476 auto ret =
477 m_paramsMap.insert(std::pair<QualifiedMassSpectrumParameter, QVariant>(parameter, value));
478
479 if(ret.second == false)
480 {
481 ret.first->second = value;
482 }
483}
484
485
486const QVariant
488{
489 auto it = m_paramsMap.find(parameter);
490 if(it == m_paramsMap.end())
491 {
492 return QVariant();
493 }
494 else
495 {
496 return it->second;
497 }
498}
499
500
501std::size_t
503{
504 if(msp_massSpectrum == nullptr)
505 {
506 throw pappso::PappsoException(QObject::tr("msp_massSpectrum == nullptr"));
507 }
508 return msp_massSpectrum.get()->size();
509}
510
511
512QString
514{
515 QString text;
516
517 if(msp_massSpectrum != nullptr && msp_massSpectrum.get() != nullptr)
518 {
519 QString pointer_string = QString("msp_massSpectrum.get(): %1 ")
521 static_cast<void *>(msp_massSpectrum.get())));
522
523 text += pointer_string;
524 }
525 else
526 text += QString("msp_massSpectrum is nullptr ");
527
528 // qDebug() << text;
529
530 QString precursor_mz_values_string;
531
532 if(m_precursorIonData.size())
533 precursor_mz_values_string += "Precursor mz values: ";
534
535 precursor_mz_values_string += getMzSortedPrecursorDataMzValuesAsString();
536
537 precursor_mz_values_string += "\n";
538
539 text += QString(
540 "; m_massSpectrumId : %1 \n"
541 "m_msLevel: %2 ; m_rt (min): %3 ; m_dt (ms): %4 ; prec. spec. "
542 "index: %5 ; %6")
543 .arg(m_massSpectrumId.toString())
544 .arg(m_msLevel)
545 .arg(getRtInMinutes(), 0, 'f', 2)
546 .arg(m_dt, 0, 'f', 5)
547 .arg(m_precursorSpectrumIndex != std::numeric_limits<std::size_t>::max()
549 : -1)
550 .arg(precursor_mz_values_string);
551
552 if(with_data)
553 {
554 text += msp_massSpectrum->toString();
555 }
556
557 return text;
558}
559
560
561} // namespace pappso
Class representing a fully specified mass spectrum.
uint getMsLevel() const
Get the mass spectrum level.
QualifiedMassSpectrum & operator=(const QualifiedMassSpectrum &other)
MassSpectrumCstSPtr getMassSpectrumCstSPtr() const
Get the MassSpectrumCstSPtr.
std::vector< PrecursorIonData > m_precursorIonData
vector of precursor ion data of the precursors that were fragmented to yield this mass spectrum.
std::vector< PrecursorIonData > getPrecursorIonDataSortedWithMz() const
void setPrecursorNativeId(const QString &native_id)
Set the scan native id of the precursor ion.
std::size_t m_precursorSpectrumIndex
Index of the spectrum of the precusor ion that was fragmented to yield.
pappso_double getDtInMilliSeconds() const
Get the drift time in milliseconds.
const std::vector< PrecursorIonData > & getPrecursorIonData() const
uint getPrecursorCharge(bool *ok=nullptr) const
get precursor charge
pappso_double getRtInMinutes() const
Get the retention time in minutes.
unsigned int m_msLevel
Mass spectrometry level of this mass spectrum.
void setDtInMilliSeconds(pappso_double rt)
Set the drift time in milliseconds.
~QualifiedMassSpectrum()
Destruct this QualifiedMassSpectrum.
const QString & getPrecursorNativeId() const
pappso_double m_rt
Retention time (in seconds) at which this mass spectrum was acquired.
pappso_double m_dt
Drift time (in milliseconds) at which this mass spectrum was acquired.
pappso_double getPrecursorIntensity(bool *ok=nullptr) const
get precursor intensity
double getPrecursorMass(bool *ok_p=nullptr) const
get precursor mass given the charge stats and precursor mz
QString toString(bool with_data=false) const
void appendPrecursorIonData(const PrecursorIonData &precursor_ion_data)
std::map< QualifiedMassSpectrumParameter, QVariant > m_paramsMap
map containing any parameter value for this spectrum
MassSpectrumSPtr msp_massSpectrum
Shared pointer to the mass spectrum.
const MassSpectrumId & getMassSpectrumId() const
Get the MassSpectrumId.
QString getPrecursorDataChargeValuesAsString(const std::vector< PrecursorIonData > &precursor_ion_data_vector, const QString &separator="\n") const
void setMassSpectrumId(const MassSpectrumId &iD)
Set the MassSpectrumId.
void setMsLevel(uint ms_level)
Set the mass spectrum level.
void setPrecursorSpectrumIndex(std::size_t precursor_scan_num)
Set the scan number of the precursor ion.
QString getPrecursorDataMzValuesAsString(const std::vector< PrecursorIonData > &precursor_ion_data_vector, const QString &separator="\n") const
QualifiedMassSpectrumCstSPtr makeQualifiedMassSpectrumCstSPtr() const
pappso_double getPrecursorMz(bool *ok=nullptr) const
get precursor mz
const QualifiedMassSpectrum & cloneMassSpectrumSPtr()
clone the mass spectrum contained in Qualified Mass Spectrum
QString getMzSortedPrecursorDataMzValuesAsString(const QString &separator="\n") const
MassSpectrumSPtr getMassSpectrumSPtr() const
Get the MassSpectrumSPtr.
QString getMzSortedPrecursorDataChargeValuesAsString(const QString &separator="\n") const
QString m_precursorNativeId
Native XML id of the spectrum relative to the mz data native file.
QualifiedMassSpectrumSPtr makeQualifiedMassSpectrumSPtr() const
MassSpectrumId m_massSpectrumId
Id of the mass spectrum.
void setParameterValue(QualifiedMassSpectrumParameter parameter, const QVariant &value)
QualifiedMassSpectrum()
Construct an uninitialized QualifiedMassSpectrum.
void setMassSpectrumSPtr(MassSpectrumSPtr massSpectrum)
Set the MassSpectrumSPtr.
std::size_t getPrecursorSpectrumIndex() const
Get the scan number of the precursor ion.
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
pappso_double getRtInSeconds() const
Get the retention time in seconds.
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
const QVariant getParameterValue(QualifiedMassSpectrumParameter parameter) const
static QString pointerToString(const void *const pointer)
Definition utils.cpp:317
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
std::shared_ptr< QualifiedMassSpectrum > QualifiedMassSpectrumSPtr
const pappso_double MHPLUS(1.007276466879)
double pappso_double
A type definition for doubles.
Definition types.h:60
std::shared_ptr< const QualifiedMassSpectrum > QualifiedMassSpectrumCstSPtr
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
unsigned int uint
Definition types.h:67
std::shared_ptr< MassSpectrum > MassSpectrumSPtr