libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
peptidefragmention.cpp
Go to the documentation of this file.
1/**
2 * \file pappsomspp/peptide/peptidefragmention.cpp
3 * \date 10/3/2015
4 * \author Olivier Langella
5 * \brief peptide ion model
6 */
7
8/*******************************************************************************
9 * Copyright (c) 2015 Olivier Langella <Olivier.Langella@moulon.inra.fr>.
10 *
11 * This file is part of the PAPPSOms++ library.
12 *
13 * PAPPSOms++ is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation, either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * PAPPSOms++ is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
25 *
26 * Contributors:
27 * Olivier Langella <Olivier.Langella@moulon.inra.fr> - initial API and
28 *implementation
29 ******************************************************************************/
30
31#include <QDebug>
32#include "peptidefragmention.h"
36
37namespace pappso
38{
40 Enums::PeptideIon ion_type)
41 : PeptideFragmentIon(sp_fragment, ion_type, 0)
42{
43}
44
46 Enums::PeptideIon ion_type,
47 unsigned int number_of_neutral_phospho_loss)
48 : msp_fragment(sp_fragment), m_ionType(ion_type)
49{
50 m_mass = msp_fragment.get()->getMass();
53 {
54 throw PappsoException(QString("Enums::PeptideIon %1 is not an %2 fragment")
57 }
58 m_mass -= MASSH2O;
59 switch(m_ionType)
60 {
61 // -MASSH2O
63 m_neutralPhosphoLossNumber = number_of_neutral_phospho_loss;
65 ion_type = Enums::PeptideIon::y;
66 break;
68 m_neutralPhosphoLossNumber = number_of_neutral_phospho_loss;
70 ion_type = Enums::PeptideIon::b;
71 break;
72 default:
73 break;
74 }
76}
77
83
84
86 : msp_fragment(std::move(toCopy.msp_fragment)), m_ionType(toCopy.m_ionType), m_mass(toCopy.m_mass)
87{
88}
89
93
94
100
101
102const QString
104{
105
106 std::size_t size = msp_fragment.get()->size();
107 QString plusstr = "+";
108 plusstr = plusstr.repeated(charge);
110 {
111 return QString("y%1(-P%2)%3").arg(size).arg(m_neutralPhosphoLossNumber).arg(plusstr);
112 }
114 {
115 return QString("b%1(-P%2)%3").arg(size).arg(m_neutralPhosphoLossNumber).arg(plusstr);
116 }
117
118 return QString("%1%2%3").arg(getPeptideIonName(m_ionType)).arg(size).arg(plusstr);
119}
120
121const QString
130
131const QString
133{
134 switch(m_ionType)
135 {
137 return "y";
138 break;
140 return "yP";
141 break;
143 return "y*";
144 break;
146 return "yO";
147 break;
149 return "b*";
150 break;
152 return "bO";
153 break;
155 return "a";
156 break;
158 return "a*";
159 break;
161 return "aO";
162 break;
164 return "c";
165 break;
166 // SvgIon.moxygen - mN
168 return "z";
169 break;
171 return "b";
172 break;
174 return "bP";
175 break;
177 return "x";
178 break;
179 default:
180 throw PappsoException(QString("Enums::PeptideIon name not implemented"));
181 break;
182 }
183}
184
185const QColor
187{
188 switch(m_ionType)
189 {
191 return QColor("red");
192 break;
194 return QColor("red");
195 break;
197 return QColor("red");
198 break;
200 return QColor("orange");
201 break;
203 return QColor("orange");
204 break;
206 return QColor("blue");
207 break;
209 return QColor("#ff00ff");
210 break;
212 return QColor("green");
213 break;
215 return QColor("green");
216 break;
218 return QColor("green");
219 break;
221 return QColor("blue");
222 break;
223 // SvgIon.moxygen - mN
225 return QColor("red");
226 break;
228 return QColor("blue");
229 break;
231 return QColor("blue");
232 break;
233 default:
234 throw PappsoException(
235 QString("Enums::PeptideIon color not implemented %1").arg(getPeptideIonName(m_ionType)));
236 break;
237 }
238}
239
240int
242{
243 int number = msp_fragment.get()->getNumberOfAtom(atom);
244 int diff = 0;
245 switch(atom)
246 {
248 switch(m_ionType)
249 {
251 break;
253 // H 1 O 3 P 1 + H 2 0
254 break;
256 // m_mass -= MASSNH3;
257 break;
259 // m_mass -= MASSH2O;
260 break;
262 // m_mass -= MASSH2O;
263 // m_mass -= MASSNH3;
264 break;
266 // m_mass -= MASSH2O;
267 // m_mass -= MASSH2O;
268 break;
270 // m_mass -= MASSH2O;
271 // m_mass -= MASSCO;
272 diff = -1;
273 break;
275 // m_mass += MASSNH3;
276 break;
277 // SvgIon.moxygen - mN
279 // m_mass -= MASSH2O;
280 // m_mass += MASSOXYGEN - MASSNITROGEN - MPROTIUM;
281 break;
283 // m_mass -= MASSH2O;
284 break;
286 // H 1 O 3 P 1 + H 2 0
287 break;
288
290 // m_mass -= MASSH2O;
291 // m_mass = - MASSCO - MASSNH3;
292 diff = -1;
293 break;
295 // m_mass -= MASSH2O;
296 // m_mass = - MASSCO - MASSH2O;
297 diff = -1;
298 break;
300 // +MASSCO + MASSOXYGEN
301 diff = +1;
302 break;
303 default:
304 throw PappsoException(QString("Enums::PeptideIon name not implemented"));
305 break;
306 }
307 break;
309 switch(m_ionType)
310 {
312 break;
314 // H 1 O 3 P 1 + H 2 0
315 diff = -3 * m_neutralPhosphoLossNumber;
316 break;
318 // m_mass -= MASSNH3;
319 diff = -3;
320 break;
322 // m_mass -= MASSH2O;
323 diff = -2;
324 break;
326 // m_mass -= MASSH2O;
327 // m_mass -= MASSNH3;
328 diff = -5;
329 break;
331 // m_mass -= MASSH2O;
332 // m_mass -= MASSH2O;
333 diff = -4;
334 break;
336 // m_mass -= MASSH2O;
337 // m_mass -= MASSCO;
338 diff = -2;
339 break;
341 // m_mass += MASSNH3;
342 diff = -3;
343 break;
344 // SvgIon.moxygen - mN
346 // m_mass -= MASSH2O;
347 // m_mass += MASSOXYGEN - MASSNITROGEN - MPROTIUM;
348 diff = -3;
349 break;
351 // m_mass -= MASSH2O;
352 diff = -2;
353 break;
355 // H 1 O 3 P 1 + H 2 0
356 diff = -3 * m_neutralPhosphoLossNumber;
357 break;
358
359
361 // m_mass -= MASSH2O;
362 // m_mass = - MASSCO - MASSNH3;
363 diff = -5;
364 break;
366 // m_mass -= MASSH2O;
367 // m_mass = - MASSCO - MASSH2O;
368 diff = -4;
369 break;
371 // +MASSCO + MASSOXYGEN
372 diff = -2;
373 break;
374 default:
375 throw PappsoException(QString("Enums::PeptideIon name not implemented"));
376 break;
377 }
378 break;
380 switch(m_ionType)
381 {
383 break;
385 // H 1 O 3 P 1 + H 2 0
386 break;
387
389 // m_mass -= MASSNH3;
390 diff = -1;
391 break;
393 // m_mass -= MASSH2O;
394 break;
396 // m_mass -= MASSH2O;
397 // m_mass -= MASSNH3;
398 diff = -1;
399 break;
401 // m_mass -= MASSH2O;
402 // m_mass -= MASSH2O;
403 break;
405 // m_mass -= MASSH2O;
406 // m_mass -= MASSCO;
407 break;
409 // m_mass += MASSNH3;
410 diff = -1;
411 break;
412 // SvgIon.moxygen - mN
414 // m_mass -= MASSH2O;
415 // m_mass += MASSOXYGEN - MASSNITROGEN - MPROTIUM;
416 diff = -1;
417 break;
419 // m_mass -= MASSH2O;
420 break;
422 // H 1 O 3 P 1 + H 2 0
423 break;
424
425
427 // m_mass -= MASSH2O;
428 // m_mass = - MASSCO - MASSNH3;
429 diff = -1;
430 break;
432 // m_mass -= MASSH2O;
433 // m_mass = - MASSCO - MASSH2O;
434 break;
436 // +MASSCO + MASSOXYGEN
437 break;
438 default:
439 throw PappsoException(QString("Enums::PeptideIon name not implemented"));
440 break;
441 }
442 break;
444 switch(m_ionType)
445 {
447 break;
449 // H 1 O 3 P 1 + H 2 0
450 diff = -4 * m_neutralPhosphoLossNumber;
451 break;
452
454 // m_mass -= MASSNH3;
455 break;
457 // m_mass -= MASSH2O;
458 diff = -1;
459 break;
461 // m_mass -= MASSH2O;
462 // m_mass -= MASSNH3;
463 diff = -1;
464 break;
466 // m_mass -= MASSH2O;
467 // m_mass -= MASSH2O;
468 diff = -2;
469 break;
471 // m_mass -= MASSH2O;
472 // m_mass -= MASSCO;
473 diff = -2;
474 break;
476 // m_mass += MASSNH3;
477 break;
478 // SvgIon.moxygen - mN
480 // m_mass -= MASSH2O;
481 // m_mass += MASSOXYGEN - MASSNITROGEN - MPROTIUM;
482 diff = -2;
483 break;
485 // m_mass -= MASSH2O;
486 diff = -1;
487 break;
489 // H 1 O 3 P 1 + H 2 0
490 diff = -4 * m_neutralPhosphoLossNumber;
491 break;
492
493
495 // m_mass -= MASSH2O;
496 // m_mass = - MASSCO - MASSNH3;
497 diff = -2;
498 break;
500 // m_mass -= MASSH2O;
501 // m_mass = - MASSCO - MASSH2O;
502 diff = -3;
503 break;
505 // +MASSCO + MASSOXYGEN
506 diff = +1;
507 break;
508 default:
509 throw PappsoException(QObject::tr("Enums::PeptideIon name not implemented"));
510 break;
511 }
512 break;
514 break;
515 default:
516 qDebug() << "PeptideFragmentIon::getNumberOfAtom(Enums::AtomIsotopeSurvey "
517 "atom) NOT IMPLEMENTED";
518 }
519 return number + diff;
520}
521
522
523int
525{
526 int number = msp_fragment.get()->getNumberOfIsotope(isotope);
527 return number;
528}
529
532{
533 return std::make_shared<PeptideFragmentIon>(*this);
534}
535
536
537unsigned int
539{
540 return msp_fragment.get()->size();
541}
542
543const QString
545{
546 return msp_fragment.get()->getSequence();
547}
548
549const PeptideFragmentSp &
554
555const QString
557{
558 return QString("%1-%2").arg(getPeptideIonName(m_ionType)).arg(size());
559}
560
563{
564 return m_mass;
565}
566
574{
575 return msp_fragment.get()->getPeptideIonDirection();
576}
577unsigned int
582
583bool
585{
586 return msp_fragment.get()->isPalindrome();
587}
588
589
590} // namespace pappso
PeptideFragmentIonSp makePeptideFragmentIonSp() const
const Enums::PeptideIon m_ionType
Enums::PeptideIon getPeptideIonType() const
const QString getPeptideIonName() const
virtual int getNumberOfAtom(Enums::AtomIsotopeSurvey atom) const override
get the number of atom C, O, N, H in the molecule
virtual const PeptideFragmentSp & getPeptideFragmentSp() const
PeptideFragmentIon(const PeptideFragmentSp &sp_fragment, Enums::PeptideIon ion_type, unsigned int number_of_neutral_phospho_loss)
const PeptideFragmentSp msp_fragment
const QString getCompletePeptideIonName(unsigned int charge) const
get a complete ion name string
unsigned int getNumberOfNeutralPhosphoLoss() const
virtual const QString getSequence() const override
amino acid sequence without modification
virtual unsigned int size() const override
virtual int getNumberOfIsotope(Enums::Isotope isotope) const override
get the number of isotopes C13, H2, O17, O18, N15, S33, S34, S36 in the molecule
pappso_double getMass() const override
static const QColor getPeptideIonColor(Enums::PeptideIon ion_type)
PeptideDirection getPeptideIonDirection() const
virtual bool isPalindrome() const override
tells if the peptide sequence is a palindrome
virtual const QString getName() const override
static const QString getPeptideIonDirectionName(PeptideDirection direction)
static pappso_double getDeltaMass(Enums::PeptideIon ion_type)
PeptideIon
Enums::PeptideIon enum defines all types of ions (Nter or Cter).
Definition types.h:286
@ a
Nter aldimine ions.
Definition types.h:290
@ y
Cter amino ions.
Definition types.h:295
@ c
Nter amino ions.
Definition types.h:294
@ astar
Nter aldimine ions + NH3 loss.
Definition types.h:291
@ ystar
Cter amino ions + NH3 loss.
Definition types.h:296
@ yo
Cter amino ions + H2O loss.
Definition types.h:297
@ bstar
Nter acylium ions + NH3 loss.
Definition types.h:288
@ b
Nter acylium ions.
Definition types.h:287
@ x
Cter acylium ions.
Definition types.h:300
@ bo
Nter acylium ions + H2O loss.
Definition types.h:289
@ ao
Nter aldimine ions + H2O loss.
Definition types.h:292
@ z
Cter carbocations.
Definition types.h:298
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition aa.cpp:39
std::shared_ptr< const PeptideFragmentIon > PeptideFragmentIonSp
PeptideDirection
Definition peptide.h:47
double pappso_double
A type definition for doubles.
Definition types.h:60
PeptideDirection getPeptideIonDirection(Enums::PeptideIon ion_type)
get the direction of a peptide ion
Definition peptide.cpp:97
const pappso_double MASSH2O((MPROTIUM *2)+MASSOXYGEN)
const pappso_double MASSPHOSPHORYLATEDR(MPROTIUM+(MASSOXYGEN *3)+MASSPHOSPHORUS)
std::shared_ptr< const PeptideFragment > PeptideFragmentSp