Victor
 All Data Structures Functions Variables Friends Pages
AminoAcidCode.h
1 /* This file is part of Victor.
2 
3  Victor is free software: you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation, either version 3 of the License, or
6  (at your option) any later version.
7 
8  Victor is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with Victor. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 
18 #ifndef __AminoAcid_CODE_H__
19 #define __AminoAcid_CODE_H__
20 
21 // Includes
22 
23 #include <string>
24 #include <Debug.h>
25 
26 
37 enum AminoAcidCode {
38  ALA = 0,
39  CYS,
40  ASP,
41  GLU,
42  PHE,
43  GLY,
44  HIS,
45  ILE,
46  LYS,
47  LEU,
48  MET,
49  ASN,
50  PRO,
51  GLN,
52  ARG,
53  SER,
54  THR,
55  VAL,
56  TRP,
57  TYR,
58  XXX, // Corresponds to unknown AminoAcid type
59  AminoAcid_CODE_SIZE // number of AminoAcid types
60 };
61 
66 inline
67 bool
68 isKnownAminoAcid(AminoAcidCode code) {
69  return !(code == XXX);
70 }
71 
73 inline
74 AminoAcidCode
75 aminoAcidOneLetterTranslator(char name) {
76  DUMP(name);
77  if (name == ' ') {
78  return XXX;
79  }
80  if (name == 'X') {
81  return XXX;
82  }
83  if (name == 'A') {
84  return ALA;
85  } else if (name == 'C') {
86  return CYS;
87  } else if (name == 'D') {
88  return ASP;
89  } else if (name == 'E') {
90  return GLU;
91  } else if (name == 'F') {
92  return PHE;
93  } else if (name == 'G') {
94  return GLY;
95  } else if (name == 'H') {
96  return HIS;
97  } else if (name == 'I') {
98  return ILE;
99  } else if (name == 'K') {
100  return LYS;
101  } else if (name == 'L') {
102  return LEU;
103  } else if (name == 'M') {
104  return MET;
105  } else if (name == 'N') {
106  return ASN;
107  } else if (name == 'P') {
108  return PRO;
109  } else if (name == 'Q') {
110  return GLN;
111  } else if (name == 'R') {
112  return ARG;
113  } else if (name == 'S') {
114  return SER;
115  } else if (name == 'T') {
116  return THR;
117  } else if (name == 'V') {
118  return VAL;
119  } else if (name == 'W') {
120  return TRP;
121  } else if (name == 'Y') {
122  return TYR;
123  }
124 
125  return XXX; // AminoAcid type name is unknown
126 }
127 
129 inline
130 AminoAcidCode
131 aminoAcidThreeLetterTranslator(const string& name) {
132  DUMP(name);
133  if (name == "") {
134  return XXX;
135  }
136  if (name == "XXX") {
137  return XXX;
138  }
139  if (name == "ALA") {
140  return ALA;
141  } else if (name == "CYS") {
142  return CYS;
143  } else if (name == "ASP") {
144  return ASP;
145  } else if (name == "GLU") {
146  return GLU;
147  } else if (name == "PHE") {
148  return PHE;
149  } else if (name == "GLY") {
150  return GLY;
151  } else if (name == "HIS") {
152  return HIS;
153  } else if (name == "ILE") {
154  return ILE;
155  } else if (name == "LYS") {
156  return LYS;
157  } else if (name == "LEU") {
158  return LEU;
159  } else if (name == "MET") {
160  return MET;
161  } else if (name == "ASN") {
162  return ASN;
163  } else if (name == "PRO") {
164  return PRO;
165  } else if (name == "GLN") {
166  return GLN;
167  } else if (name == "ARG") {
168  return ARG;
169  } else if (name == "SER") {
170  return SER;
171  } else if (name == "THR") {
172  return THR;
173  } else if (name == "VAL") {
174  return VAL;
175  } else if (name == "TRP") {
176  return TRP;
177  } else if (name == "TYR") {
178  return TYR;
179  }
180 
181  return XXX; // AminoAcid type name is unknown
182 }
183 
189 inline string aminoAcidThreeLetterTranslator(AminoAcidCode code) {
190  switch (code) {
191  case XXX:
192  return "XXX";
193  case ALA:
194  return "ALA";
195  case CYS:
196  return "CYS";
197  case ASP:
198  return "ASP";
199  case GLU:
200  return "GLU";
201  case PHE:
202  return "PHE";
203  case GLY:
204  return "GLY";
205  case HIS:
206  return "HIS";
207  case ILE:
208  return "ILE";
209  case LYS:
210  return "LYS";
211  case LEU:
212  return "LEU";
213  case MET:
214  return "MET";
215  case ASN:
216  return "ASN";
217  case PRO:
218  return "PRO";
219  case GLN:
220  return "GLN";
221  case ARG:
222  return "ARG";
223  case SER:
224  return "SER";
225  case THR:
226  return "THR";
227  case VAL:
228  return "VAL";
229  case TRP:
230  return "TRP";
231  case TYR:
232  return "TYR";
233 
234  case AminoAcid_CODE_SIZE:
235  ERROR("AminoAcidTranslator(AminoAcidCode code): unknown code", exception);
236  }
237 
238  ERROR("AminoAcidTranslator(AminoAcidCode code): unknown code", eXXXception);
239 
240  return "X";
241 }
242 
248 inline char aminoAcidOneLetterTranslator(AminoAcidCode code) {
249  switch (code) {
250  case XXX:
251  return 'X';
252  case ALA:
253  return 'A';
254  case CYS:
255  return 'C';
256  case ASP:
257  return 'D';
258  case GLU:
259  return 'E';
260  case PHE:
261  return 'F';
262  case GLY:
263  return 'G';
264  case HIS:
265  return 'H';
266  case ILE:
267  return 'I';
268  case LYS:
269  return 'K';
270  case LEU:
271  return 'L';
272  case MET:
273  return 'M';
274  case ASN:
275  return 'N';
276  case PRO:
277  return 'P';
278  case GLN:
279  return 'Q';
280  case ARG:
281  return 'R';
282  case SER:
283  return 'S';
284  case THR:
285  return 'T';
286  case VAL:
287  return 'V';
288  case TRP:
289  return 'W';
290  case TYR:
291  return 'Y';
292 
293  case AminoAcid_CODE_SIZE:
294  ERROR("AminoAcidTranslator(AminoAcidCode code): unknown code", exception);
295  }
296 
297 
298  ERROR("AminoAcidTranslator(AminoAcidCode code): unknown code", exception);
299 
300  return 'X';
301 }
302 
309 inline string aminoAcidFullTranslator(AminoAcidCode code) {
310  switch (code) {
311  case XXX:
312  return "Unknown";
313  case ALA:
314  return "Alanine";
315  case CYS:
316  return "Cysteine";
317  case ASP:
318  return "Aspartate";
319  case GLU:
320  return "Glutamate";
321  case PHE:
322  return "Phenylalanine";
323  case GLY:
324  return "Glycine";
325  case HIS:
326  return "Histidine";
327  case ILE:
328  return "Isoleucine";
329  case LYS:
330  return "Lysine";
331  case LEU:
332  return "Leucine";
333  case MET:
334  return "Methionine";
335  case ASN:
336  return "Asparagine";
337  case PRO:
338  return "Proline";
339  case GLN:
340  return "Glutamine";
341  case ARG:
342  return "Arginine";
343  case SER:
344  return "Serine";
345  case THR:
346  return "Threonine";
347  case VAL:
348  return "Valine";
349  case TRP:
350  return "Tryptophane";
351  case TYR:
352  return "Tyrosine";
353 
354  case AminoAcid_CODE_SIZE:
355  ERROR("AminoAcidFullTranslator(AminoAcidCode code): unknown code", exception);
356  }
357 
358  ERROR("AminoAcidFullTranslator(AminoAcidCode code): unknown code", exception);
359 
360  return "Unknown";
361 }
362 
368 inline string oneLetter2ThreeLetter(char oneLetter) {
369  AminoAcidCode code;
370  code = aminoAcidOneLetterTranslator(oneLetter);
371  return aminoAcidThreeLetterTranslator(code);
372 }
373 
379 inline char threeLetter2OneLetter(const string& threeLetter) {
380  AminoAcidCode code;
381  code = aminoAcidThreeLetterTranslator(threeLetter);
382  return aminoAcidOneLetterTranslator(code);
383 }
384 
390 inline AminoAcidCode& operator++(AminoAcidCode& ac, int) {
391  return ac = ((ac == XXX) ? ALA : AminoAcidCode(ac + 1));
392 }
393 
399 inline AminoAcidCode& operator--(AminoAcidCode& ac, int) {
400  return ac = ((ac == ALA) ? XXX : AminoAcidCode(ac - 1));
401 }
402 
408 inline bool isPolar(AminoAcidCode code) {
409  if ((code == CYS) ||
410  (code == ASP) ||
411  (code == GLU) ||
412  (code == HIS) ||
413  (code == LYS) ||
414  (code == ASN) ||
415  (code == GLN) ||
416  (code == ARG) ||
417  (code == SER) ||
418  (code == THR) ||
419  (code == TRP) ||
420  (code == TYR))
421  return true;
422 
423  return false;
424 }
425 
431 inline bool isHydrophobic(AminoAcidCode code) {
432  if ((code == ALA) ||
433  (code == PHE) ||
434  (code == GLY) ||
435  (code == ILE) ||
436  (code == LEU) ||
437  (code == MET) ||
438  (code == PRO) ||
439  (code == VAL))
440  return true;
441 
442  return false;
443 }
444 
445 enum StateCode {
446  HELIX,
447  STRAND,
448  TURN,
449  COIL,
450  YYY,
451  State_CODE_SIZE // number of State types
452 };
453 
459 inline StateCode stateCodeOneLetterTranslator(char name) {
460  DUMP(name);
461  if (name == ' ') {
462  return YYY;
463  }
464  if (name == 'Y') {
465  return YYY;
466  }
467  if (name == 'H') {
468  return HELIX;
469  } else if (name == 'E') {
470  return STRAND;
471  } else if (name == 'T') {
472  return TURN;
473  } else if (name == 'C') {
474  return COIL;
475  }
476 
477  return YYY; // StateCode type name is unknown
478 }
479 
485 inline char stateCodeOneLetterTranslator(StateCode code) {
486  switch (code) {
487  case YYY:
488  return 'Y';
489  case HELIX:
490  return 'H';
491  case STRAND:
492  return 'E';
493  case TURN:
494  return 'T';
495  case COIL:
496  return 'C';
497 
498  case State_CODE_SIZE:
499  ERROR("StateCodeTranslator(StateCode code): unknown code", exception);
500  }
501 
502 
503  ERROR("StateCodeTranslator(StateCode code): unknown code", exception);
504 
505  return 'X';
506 }
507 
513 inline StateCode& operator++(StateCode& sc, int) {
514  return sc = ((sc == YYY) ? HELIX : StateCode(sc + 1));
515 }
516 
517 #endif /* __AminoAcid_CODE_H__ */
518