libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
pappso::specpeptidoms::SpOMSSpectrum Class Reference

#include <spomsspectrum.h>

Inheritance diagram for pappso::specpeptidoms::SpOMSSpectrum:

Public Member Functions

 SpOMSSpectrum (pappso::QualifiedMassSpectrum &qmass_spectrum, pappso::PrecisionPtr precision_ptr, const pappso::AaCode &aaCode)
 
 SpOMSSpectrum (const SpOMSSpectrum &other)
 
 SpOMSSpectrum (const SpOMSSpectrum &other, double precursor_mass_error)
 Returns a copy of the provided spectrum accounting for the provided precursor mass error.
 
virtual ~SpOMSSpectrum ()
 
void addAaPosition (uint8_t aa, const std::size_t r_peak, const std::size_t l_peak, const std::size_t next_l_peak, bool l_support)
 Adds an amino acid position to the data structure.
 
const std::vector< AaPosition > & getAaPositions (std::uint8_t aa_code) const
 Returns the list of aa_positions for a given amino acid code.
 
std::vector< AaPositiongetAaPositions (std::uint8_t aa_code, std::vector< std::size_t > &peaks_to_remove) const
 Returns the list of aa_positions for a given amino acid, except those relying on provided peaks.
 
std::vector< double > getMassList () const
 Returns the spectrum's list of masses.
 
specglob::ExperimentalSpectrumDataPointType peakType (std::size_t indice) const
 Returns the type of one of the spectrum's peaks.
 
uint getPrecursorCharge () const
 Returns the spectrum's precursor's charge.
 
double getPrecursorMass () const
 
double getMissingMass (std::size_t peak) const
 Returns the missing mass between a peak and the precursor's mass (shift at the end).
 
double getMZShift (std::size_t l_peak, std::size_t r_peak) const
 Returns the mz difference between two peaks.
 
std::size_t getComplementaryPeak (std::size_t peak) const
 

Private Member Functions

void preprocessSpectrum ()
 Preprocess the spectrum.
 
void removeUnsupportedMasses ()
 Removes the unsupported peaks (without an amino acid to the left) from the spectrum.
 
uint32_t computeCondition (const std::size_t l_peak, bool l_support) const
 Computes the "condition" integer, used to apply the three peaks rule.
 
void addSupportedPeak (std::size_t peak)
 Add a peak to the supported peaks list.
 
void correctPeakIndexes ()
 Reindexes the peaks after removal of the unsupported peaks.
 
void fillComplementaryPeakIndexes ()
 For each point of the spectrum, indicate the index of its complementary peak;.
 

Private Attributes

pappso::QualifiedMassSpectrum m_qualifiedMassSpectrum
 
std::vector< std::shared_ptr< std::vector< AaPosition > > > m_aapositions
 
pappso::PrecisionPtr m_precision_ptr
 
std::vector< std::shared_ptr< std::vector< uint8_t > > > m_supported_peaks
 
std::vector< int > m_reindexed_peaks
 
const pappso::AaCodem_aaCode
 
std::vector< std::size_t > m_complementary_peak_indexes
 
double m_precursor_mass_error
 

Detailed Description

Definition at line 67 of file spomsspectrum.h.

Constructor & Destructor Documentation

◆ SpOMSSpectrum() [1/3]

pappso::specpeptidoms::SpOMSSpectrum::SpOMSSpectrum ( pappso::QualifiedMassSpectrum qmass_spectrum,
pappso::PrecisionPtr  precision_ptr,
const pappso::AaCode aaCode 
)

Default constructor

Parameters
exp_spectrumExperimentalSpectrum to preprocess
precision_ptrPrecision to use for preprocessing

Definition at line 45 of file spomsspectrum.cpp.

48 : std::vector<pappso::specglob::ExperimentalSpectrumDataPoint>(
49 specglob::ExperimentalSpectrum(qmass_spectrum, precision_ptr)),
50 m_qualifiedMassSpectrum(qmass_spectrum),
51 m_precision_ptr(precision_ptr),
52 m_aaCode(aaCode),
54{
56 for(std::size_t iter = 0; iter < m_aaCode.getSize(); iter++)
57 {
58 m_aapositions.push_back(std::make_shared<std::vector<AaPosition>>());
59 m_aapositions.back()->reserve(this->size() - 1);
60 }
61 m_supported_peaks.reserve(this->size());
62 m_supported_peaks.push_back(std::make_shared<std::vector<uint8_t>>());
63 m_reindexed_peaks.push_back(0);
64 for(std::size_t iter = 1; iter < this->size(); iter++)
65 {
66 m_supported_peaks.push_back(std::make_shared<std::vector<uint8_t>>());
67 m_reindexed_peaks.push_back(-1);
68 }
69 this->at(0).peak_mz = pappso::MHPLUS + 2 * pappso::MPROTIUM + pappso::MASSOXYGEN;
72}
std::size_t getSize() const
Definition aacode.cpp:74
double getPrecursorMass(bool *ok_p=nullptr) const
get precursor mass given the charge stats and precursor mz
void preprocessSpectrum()
Preprocess the spectrum.
std::vector< std::shared_ptr< std::vector< uint8_t > > > m_supported_peaks
pappso::QualifiedMassSpectrum m_qualifiedMassSpectrum
std::vector< std::shared_ptr< std::vector< AaPosition > > > m_aapositions
const pappso_double MHPLUS(1.007276466879)
const pappso_double MPROTIUM(1.007825032241)
const pappso_double MASSOXYGEN(15.99491461956)

References pappso::QualifiedMassSpectrum::getPrecursorMass(), pappso::AaCode::getSize(), m_aaCode, m_aapositions, m_qualifiedMassSpectrum, m_reindexed_peaks, m_supported_peaks, pappso::MASSOXYGEN(), pappso::MHPLUS(), pappso::MPROTIUM(), and preprocessSpectrum().

◆ SpOMSSpectrum() [2/3]

pappso::specpeptidoms::SpOMSSpectrum::SpOMSSpectrum ( const SpOMSSpectrum other)

Copy constructor

Parameters
otherSpOMSSpectrum to copy

Definition at line 74 of file spomsspectrum.cpp.

75 : std::vector<pappso::specglob::ExperimentalSpectrumDataPoint>(
76 pappso::specglob::ExperimentalSpectrum(other.m_qualifiedMassSpectrum, other.m_precision_ptr)),
77 m_qualifiedMassSpectrum(other.m_qualifiedMassSpectrum),
78 m_aapositions(other.m_aapositions),
79 m_precision_ptr(other.m_precision_ptr),
80 m_supported_peaks(other.m_supported_peaks),
81 m_reindexed_peaks(other.m_reindexed_peaks),
82 m_aaCode(other.m_aaCode),
83 m_complementary_peak_indexes(other.m_complementary_peak_indexes),
84 m_precursor_mass_error(other.m_precursor_mass_error)
85{
86}
std::vector< std::size_t > m_complementary_peak_indexes

◆ SpOMSSpectrum() [3/3]

pappso::specpeptidoms::SpOMSSpectrum::SpOMSSpectrum ( const SpOMSSpectrum other,
double  precursor_mass_error 
)

Returns a copy of the provided spectrum accounting for the provided precursor mass error.

Post-processing constructor

Parameters
otherSpOMSSpectrum to copy
precursor_mass_errorprecursor mass error to account for

Definition at line 88 of file spomsspectrum.cpp.

90 : std::vector<pappso::specglob::ExperimentalSpectrumDataPoint>(
92 other.m_qualifiedMassSpectrum, other.m_precision_ptr, precursor_mass_error)),
93 m_qualifiedMassSpectrum(other.m_qualifiedMassSpectrum),
94 m_precision_ptr(other.m_precision_ptr),
95 m_aaCode(other.m_aaCode),
96 m_precursor_mass_error(precursor_mass_error)
97{
99 for(std::size_t iter = 0; iter < m_aaCode.getSize(); iter++)
100 {
101 m_aapositions.push_back(std::make_shared<std::vector<AaPosition>>());
102 m_aapositions.back()->reserve(this->size() - 1);
103 }
104 m_supported_peaks.reserve(this->size());
105 m_supported_peaks.push_back(std::make_shared<std::vector<uint8_t>>());
106 m_reindexed_peaks.push_back(0);
107 for(std::size_t iter = 1; iter < this->size(); iter++)
108 {
109 m_supported_peaks.push_back(std::make_shared<std::vector<uint8_t>>());
110 m_reindexed_peaks.push_back(-1);
111 }
112 this->at(0).peak_mz = pappso::MHPLUS + 2 * pappso::MPROTIUM + pappso::MASSOXYGEN;
113 this->back().peak_mz =
116}

References pappso::QualifiedMassSpectrum::getPrecursorMass(), pappso::AaCode::getSize(), m_aaCode, m_aapositions, m_qualifiedMassSpectrum, m_reindexed_peaks, m_supported_peaks, pappso::MASSOXYGEN(), pappso::MHPLUS(), pappso::MPROTIUM(), and preprocessSpectrum().

◆ ~SpOMSSpectrum()

pappso::specpeptidoms::SpOMSSpectrum::~SpOMSSpectrum ( )
virtual

Destructor

Definition at line 118 of file spomsspectrum.cpp.

119{
120}

Member Function Documentation

◆ addAaPosition()

void pappso::specpeptidoms::SpOMSSpectrum::addAaPosition ( uint8_t  aa,
const std::size_t  r_peak,
const std::size_t  l_peak,
const std::size_t  next_l_peak,
bool  l_support 
)

Adds an amino acid position to the data structure.

Parameters
aaAmino acid to add to the data structure
r_peakindex of the amino acid's right support peak
l_peakindex of the amino acid's left support peak, if it is supported by an amino acid, otherwise see next_l_peak
next_l_peakindex of the first supported peak to the left of the amino acid's left support peak
l_supportindicates whether the amino acid's left support peak if supported by an amino acid

Definition at line 237 of file spomsspectrum.cpp.

242{
243 // aa=0 corresponds to no amino acid identified, thus aa is always >=1. We substract 1 to aa to
244 // avoid keeping an empty, useless vector.
245 if(l_support)
246 {
247 m_aapositions.at(aa - 1)->push_back(
248 {r_peak, l_peak, next_l_peak, computeCondition(l_peak, l_support), l_support});
249 }
250 else
251 {
252 m_aapositions.at(aa - 1)->push_back(
253 {r_peak, next_l_peak, next_l_peak, computeCondition(l_peak, l_support), l_support});
254 }
255}
uint32_t computeCondition(const std::size_t l_peak, bool l_support) const
Computes the "condition" integer, used to apply the three peaks rule.

◆ addSupportedPeak()

void pappso::specpeptidoms::SpOMSSpectrum::addSupportedPeak ( std::size_t  peak)
private

Add a peak to the supported peaks list.

Definition at line 363 of file spomsspectrum.cpp.

364{
365 std::size_t counter = 0;
366 for(std::size_t iter = 0; iter < peak; iter++)
367 {
368 if(m_reindexed_peaks.at(iter) >= 0)
369 {
370 counter++;
371 }
372 }
373 m_reindexed_peaks.at(peak) = counter;
374 for(std::size_t iter = peak + 1; iter < m_reindexed_peaks.size(); iter++)
375 {
376 if(m_reindexed_peaks.at(iter) >= 0)
377 {
378 m_reindexed_peaks.at(iter)++;
379 }
380 }
381}

◆ computeCondition()

uint32_t pappso::specpeptidoms::SpOMSSpectrum::computeCondition ( const std::size_t  l_peak,
bool  l_support 
) const
private

Computes the "condition" integer, used to apply the three peaks rule.

Definition at line 258 of file spomsspectrum.cpp.

260{
261 uint32_t condition;
262 if(l_peak == 0)
263 {
264 condition = 2;
265 }
266 else if(!l_support)
267 {
268 condition = 1;
269 }
270 else
271 {
272 condition = 0;
273 for(std::vector<uint8_t>::iterator aa = m_supported_peaks.at(l_peak)->begin();
274 aa != m_supported_peaks.at(l_peak)->end();
275 aa++)
276 {
277 condition += 2 << *(aa);
278 }
279 }
280 return condition;
281}
@ aa
best possible : more than one direct MS2 fragmentation in same MSRUN

◆ correctPeakIndexes()

void pappso::specpeptidoms::SpOMSSpectrum::correctPeakIndexes ( )
private

Reindexes the peaks after removal of the unsupported peaks.

Definition at line 384 of file spomsspectrum.cpp.

385{
386 for(auto aa = m_aapositions.begin(); aa != m_aapositions.end(); aa++)
387 {
388 for(auto aap = aa->get()->begin(); aap != aa->get()->end(); aap++)
389 {
390 aap->l_peak = m_reindexed_peaks.at(aap->l_peak);
391 aap->r_peak = m_reindexed_peaks.at(aap->r_peak);
392 aap->next_l_peak = m_reindexed_peaks.at(aap->next_l_peak);
393 }
394 }
395}

◆ fillComplementaryPeakIndexes()

void pappso::specpeptidoms::SpOMSSpectrum::fillComplementaryPeakIndexes ( )
private

For each point of the spectrum, indicate the index of its complementary peak;.

Definition at line 398 of file spomsspectrum.cpp.

399{
400 std::size_t left_index, right_index;
401
402 m_complementary_peak_indexes.reserve(this->size());
403 while(m_complementary_peak_indexes.size() < this->size())
404 {
405 m_complementary_peak_indexes.push_back(0);
406 }
407 left_index = 0;
408 right_index = this->size() - 1;
409 double comp_mass = m_qualifiedMassSpectrum.getPrecursorMass() + 2 * MHPLUS;
410
411 while(left_index < right_index)
412 {
413 pappso::MzRange mz_range(comp_mass - this->at(left_index).peak_mz, m_precision_ptr);
414 if(mz_range.contains(this->at(right_index).peak_mz))
415 {
416 m_complementary_peak_indexes.at(left_index) = right_index;
417 m_complementary_peak_indexes.at(right_index) = left_index;
418 qDebug() << left_index << right_index;
419 }
420 if(comp_mass - this->at(left_index).peak_mz - this->at(right_index).peak_mz >= 0)
421 {
422 left_index++;
423 }
424 else
425 {
426 right_index--;
427 }
428 }
429}

References pappso::MzRange::contains(), and pappso::MHPLUS().

◆ getAaPositions() [1/2]

const std::vector< pappso::specpeptidoms::AaPosition > & pappso::specpeptidoms::SpOMSSpectrum::getAaPositions ( std::uint8_t  aa_code) const

Returns the list of aa_positions for a given amino acid code.

Parameters
aa_codeAmino acid code for which to retrieve positions

Definition at line 285 of file spomsspectrum.cpp.

286{
287
288 return *m_aapositions.at(aa_code - 1);
289}

Referenced by pappso::specpeptidoms::SemiGlobalAlignment::correctAlign(), pappso::specpeptidoms::SemiGlobalAlignment::fastAlign(), and pappso::specpeptidoms::SemiGlobalAlignment::preciseAlign().

◆ getAaPositions() [2/2]

std::vector< pappso::specpeptidoms::AaPosition > pappso::specpeptidoms::SpOMSSpectrum::getAaPositions ( std::uint8_t  aa_code,
std::vector< std::size_t > &  peaks_to_remove 
) const

Returns the list of aa_positions for a given amino acid, except those relying on provided peaks.

Definition at line 292 of file spomsspectrum.cpp.

294{
295 std::vector<AaPosition> aa_positions;
296 for(auto aap : *m_aapositions.at(aa_code - 1))
297 {
298 if(std::find(peaks_to_remove.begin(), peaks_to_remove.end(), aap.r_peak) ==
299 peaks_to_remove.end())
300 {
301 aa_positions.push_back(aap);
302 }
303 }
304 return aa_positions;
305}

◆ getComplementaryPeak()

std::size_t pappso::specpeptidoms::SpOMSSpectrum::getComplementaryPeak ( std::size_t  peak) const

◆ getMassList()

std::vector< double > pappso::specpeptidoms::SpOMSSpectrum::getMassList ( ) const

Returns the spectrum's list of masses.

Definition at line 308 of file spomsspectrum.cpp.

309{
310 std::vector<double> mass_list;
311 for(const specglob::ExperimentalSpectrumDataPoint &n : *this)
312 {
313 mass_list.push_back(n.peak_mz);
314 }
315 return mass_list;
316}

◆ getMissingMass()

double pappso::specpeptidoms::SpOMSSpectrum::getMissingMass ( std::size_t  peak) const

Returns the missing mass between a peak and the precursor's mass (shift at the end).

Definition at line 351 of file spomsspectrum.cpp.

352{
353 if(peak > size())
354 {
356 QObject::tr("getMissingMass : peak %1 greater than size %2").arg(peak).arg(size()));
357 }
359 this->at(peak).peak_mz + MHPLUS;
360}

References pappso::MHPLUS().

Referenced by pappso::specpeptidoms::SemiGlobalAlignment::perfectShiftPossibleEnd(), pappso::specpeptidoms::SemiGlobalAlignment::saveBestAlignment(), and pappso::specpeptidoms::SemiGlobalAlignment::updateAlignmentMatrix().

◆ getMZShift()

double pappso::specpeptidoms::SpOMSSpectrum::getMZShift ( std::size_t  l_peak,
std::size_t  r_peak 
) const

Returns the mz difference between two peaks.

Parameters
l_peakleft peak
r_peakright peak

Definition at line 337 of file spomsspectrum.cpp.

338{
339 if(std::max(r_peak, l_peak) > size())
340 {
342 QObject::tr("getMZShift : l_peak %1 or r_peak %2 greater than size %3")
343 .arg(l_peak)
344 .arg(r_peak)
345 .arg(size()));
346 }
347 return this->at(r_peak).peak_mz - this->at(l_peak).peak_mz;
348}

Referenced by pappso::specpeptidoms::SemiGlobalAlignment::perfectShiftPossible(), pappso::specpeptidoms::SemiGlobalAlignment::perfectShiftPossibleFrom0(), pappso::specpeptidoms::SemiGlobalAlignment::saveBestAlignment(), and pappso::specpeptidoms::SemiGlobalAlignment::updateAlignmentMatrix().

◆ getPrecursorCharge()

uint pappso::specpeptidoms::SpOMSSpectrum::getPrecursorCharge ( ) const

Returns the spectrum's precursor's charge.

Definition at line 325 of file spomsspectrum.cpp.

326{
328}
uint getPrecursorCharge(bool *ok=nullptr) const
get precursor charge

Referenced by pappso::specpeptidoms::SemiGlobalAlignment::correctAlign().

◆ getPrecursorMass()

double pappso::specpeptidoms::SpOMSSpectrum::getPrecursorMass ( ) const

◆ peakType()

pappso::specglob::ExperimentalSpectrumDataPointType pappso::specpeptidoms::SpOMSSpectrum::peakType ( std::size_t  indice) const

Returns the type of one of the spectrum's peaks.

Parameters
indicePeak index to be identified

Definition at line 319 of file spomsspectrum.cpp.

320{
321 return this->at(indice).type;
322}

Referenced by pappso::specpeptidoms::SemiGlobalAlignment::updateAlignmentMatrix().

◆ preprocessSpectrum()

void pappso::specpeptidoms::SpOMSSpectrum::preprocessSpectrum ( )
private

Preprocess the spectrum.

Definition at line 124 of file spomsspectrum.cpp.

125{
126 bool found;
127 uint8_t aa;
128 std::vector<double>::iterator iter1, iter2;
129 std::size_t peak1, peak2, next_l_peak;
130 std::vector<double> mass_list = getMassList();
131
132 peak1 = -1;
133 for(iter1 = mass_list.begin(); iter1 != mass_list.end(); iter1++)
134 {
135 peak1++;
136 peak2 = peak1;
137 for(iter2 = iter1 + 1; iter2 != mass_list.end(); iter2++)
138 {
139 peak2++;
140 aa = m_aaCode.getAaCodeByMass(*(iter2) - *(iter1), m_precision_ptr);
141 if(aa != 0)
142 {
143 next_l_peak = 0;
144 for(std::size_t iter = 1; iter < peak1;
145 iter++) // Search of the closer supported left peak.
146 // Possible optimization => search from the right
147 {
148 if(m_reindexed_peaks.at(iter) >= 0)
149 {
150 next_l_peak = iter;
151 }
152 }
153 if(m_reindexed_peaks.at(peak2) == -1)
154 {
155 addSupportedPeak(peak2);
156 m_supported_peaks.at(peak2)->push_back(aa);
157 }
158 if(m_reindexed_peaks.at(peak1) >= 0)
159 {
160 addAaPosition(aa, peak2, peak1, next_l_peak, true);
161 }
162 else
163 {
164 addAaPosition(aa, peak2, next_l_peak, next_l_peak, false);
165 }
166 }
167 }
168 }
169
172
173 // std::size_t i = 0;
174 // for(auto &data_point : *this)
175 // {
176 // data_point.indice = i;
177 // i++;
178 // }
179
181}
uint8_t getAaCodeByMass(double mass, PrecisionPtr precision) const
get the integer code of an amino acid given a mass and a precision
Definition aacode.cpp:244
void addAaPosition(uint8_t aa, const std::size_t r_peak, const std::size_t l_peak, const std::size_t next_l_peak, bool l_support)
Adds an amino acid position to the data structure.
void removeUnsupportedMasses()
Removes the unsupported peaks (without an amino acid to the left) from the spectrum.
void correctPeakIndexes()
Reindexes the peaks after removal of the unsupported peaks.
void addSupportedPeak(std::size_t peak)
Add a peak to the supported peaks list.
void fillComplementaryPeakIndexes()
For each point of the spectrum, indicate the index of its complementary peak;.
std::vector< double > getMassList() const
Returns the spectrum's list of masses.

References pappso::specpeptidoms::found.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().

◆ removeUnsupportedMasses()

void pappso::specpeptidoms::SpOMSSpectrum::removeUnsupportedMasses ( )
private

Removes the unsupported peaks (without an amino acid to the left) from the spectrum.

Definition at line 220 of file spomsspectrum.cpp.

221{
222 std::vector<specglob::ExperimentalSpectrumDataPoint> kept_peaks;
223 for(std::vector<specglob::ExperimentalSpectrumDataPoint>::iterator iter = this->begin();
224 iter != this->end();
225 iter++)
226 {
227 if(m_reindexed_peaks.at(iter->indice) >= 0)
228 {
229 kept_peaks.push_back(*iter);
230 }
231 }
232 this->clear();
233 this->assign(kept_peaks.begin(), kept_peaks.end());
234}

Member Data Documentation

◆ m_aaCode

const pappso::AaCode& pappso::specpeptidoms::SpOMSSpectrum::m_aaCode
private

Definition at line 167 of file spomsspectrum.h.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().

◆ m_aapositions

std::vector<std::shared_ptr<std::vector<AaPosition> > > pappso::specpeptidoms::SpOMSSpectrum::m_aapositions
private

Definition at line 162 of file spomsspectrum.h.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().

◆ m_complementary_peak_indexes

std::vector<std::size_t> pappso::specpeptidoms::SpOMSSpectrum::m_complementary_peak_indexes
private

Definition at line 168 of file spomsspectrum.h.

◆ m_precision_ptr

pappso::PrecisionPtr pappso::specpeptidoms::SpOMSSpectrum::m_precision_ptr
private

Definition at line 163 of file spomsspectrum.h.

◆ m_precursor_mass_error

double pappso::specpeptidoms::SpOMSSpectrum::m_precursor_mass_error
private

Definition at line 169 of file spomsspectrum.h.

◆ m_qualifiedMassSpectrum

pappso::QualifiedMassSpectrum pappso::specpeptidoms::SpOMSSpectrum::m_qualifiedMassSpectrum
private

Definition at line 161 of file spomsspectrum.h.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().

◆ m_reindexed_peaks

std::vector<int> pappso::specpeptidoms::SpOMSSpectrum::m_reindexed_peaks
private

Definition at line 165 of file spomsspectrum.h.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().

◆ m_supported_peaks

std::vector<std::shared_ptr<std::vector<uint8_t> > > pappso::specpeptidoms::SpOMSSpectrum::m_supported_peaks
private

Definition at line 164 of file spomsspectrum.h.

Referenced by SpOMSSpectrum(), and SpOMSSpectrum().


The documentation for this class was generated from the following files: