yat/omic/Codon.h

Code
Comments
Other
Rev Date Author Line
2368 11 Dec 10 peter 1 #ifndef theplu_yat_omic_codon
2368 11 Dec 10 peter 2 #define theplu_yat_omic_codon
2368 11 Dec 10 peter 3
2993 03 Mar 13 peter 4 // $Id$
2993 03 Mar 13 peter 5
2368 11 Dec 10 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2010, 2011, 2013, 2016, 2023 Peter Johansson
2368 11 Dec 10 peter 8
2368 11 Dec 10 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
2368 11 Dec 10 peter 10
2368 11 Dec 10 peter 11   The yat library is free software; you can redistribute it and/or
2368 11 Dec 10 peter 12   modify it under the terms of the GNU General Public License as
2368 11 Dec 10 peter 13   published by the Free Software Foundation; either version 3 of the
2368 11 Dec 10 peter 14   License, or (at your option) any later version.
2368 11 Dec 10 peter 15
2368 11 Dec 10 peter 16   The yat library is distributed in the hope that it will be useful,
2368 11 Dec 10 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
2368 11 Dec 10 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2368 11 Dec 10 peter 19   General Public License for more details.
2368 11 Dec 10 peter 20
2368 11 Dec 10 peter 21   You should have received a copy of the GNU General Public License
2368 11 Dec 10 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
2368 11 Dec 10 peter 23 */
2368 11 Dec 10 peter 24
2368 11 Dec 10 peter 25 #include "DNA.h"
2368 11 Dec 10 peter 26
2368 11 Dec 10 peter 27 #include <functional>
2369 11 Dec 10 peter 28 #include <map>
2368 11 Dec 10 peter 29 #include <string>
2369 11 Dec 10 peter 30 #include <vector>
2368 11 Dec 10 peter 31
2368 11 Dec 10 peter 32 namespace theplu {
2368 11 Dec 10 peter 33 namespace yat {
2368 11 Dec 10 peter 34 namespace omic {
2368 11 Dec 10 peter 35
2368 11 Dec 10 peter 36   /**
2368 11 Dec 10 peter 37      Class holding a triplet of DNAs that are translated to an amino acid.
2368 11 Dec 10 peter 38
2368 11 Dec 10 peter 39      <table>
2368 11 Dec 10 peter 40      <tr><td>Ala</td><td>A</td><td>GCT,GCC,GCA,GCG</td></tr>
2368 11 Dec 10 peter 41      <tr><td>Leu</td><td>L</td><td>TTA,TTG,CTT,CTC,CTA,CTG</td></tr>
2368 11 Dec 10 peter 42      <tr><td>Arg</td><td>R</td><td>CGT,CGC,CGA,CGG,AGA,AGG</td></tr>
2368 11 Dec 10 peter 43      <tr><td>Lys</td><td>K</td><td>AAA,AAG</td></tr>
2368 11 Dec 10 peter 44      <tr><td>Asn</td><td>N</td><td>AAT,AAC</td></tr>
2368 11 Dec 10 peter 45      <tr><td>Met</td><td>M</td><td>ATG</td></tr>
2368 11 Dec 10 peter 46      <tr><td>Asp</td><td>D</td><td>GAT,GAC</td></tr>
2368 11 Dec 10 peter 47      <tr><td>Phe</td><td>F</td><td>TTT,TTC</td></tr>
2368 11 Dec 10 peter 48      <tr><td>Cys</td><td>C</td><td>TGT,TGC</td></tr>
2368 11 Dec 10 peter 49      <tr><td>Pro</td><td>P</td><td>CCT,CCC,CCA,CCG</td></tr>
2368 11 Dec 10 peter 50      <tr><td>Gln</td><td>Q</td><td>CAA,CAG</td></tr>
2368 11 Dec 10 peter 51      <tr><td>Ser</td><td>S</td><td>TCT,TCC,TCA,TCG,AGT,AGC</td></tr>
2368 11 Dec 10 peter 52      <tr><td>Glu</td><td>E</td><td>GAA,GAG</td></tr>
2368 11 Dec 10 peter 53      <tr><td>Thr</td><td>T</td><td>ACT,ACC,ACA,ACG</td></tr>
2368 11 Dec 10 peter 54      <tr><td>Gly</td><td>G</td><td>GGT,GGC,GGA,GGG</td></tr>
2368 11 Dec 10 peter 55      <tr><td>Trp</td><td>W</td><td>TGG</td></tr>
2368 11 Dec 10 peter 56      <tr><td>His</td><td>H</td><td>CAT,CAC</td></tr>
2368 11 Dec 10 peter 57      <tr><td>Tyr</td><td>Y</td><td>TAT,TAC</td></tr>
2368 11 Dec 10 peter 58      <tr><td>Ile</td><td>I</td><td>ATT,ATC,ATA</td></tr>
2368 11 Dec 10 peter 59      <tr><td>Val</td><td>V</td><td>GTT,GTC,GTA,GTG</td></tr>
2368 11 Dec 10 peter 60      <tr><td>START</td><td></td><td>ATG</td></tr>
2389 22 Dec 10 peter 61      <tr><td>STOP</td>*<td></td><td>TAA,TGA,TAG</td></tr>
2368 11 Dec 10 peter 62      </table>
2368 11 Dec 10 peter 63
2368 11 Dec 10 peter 64      \since New in yat 0.7
2368 11 Dec 10 peter 65    */
2368 11 Dec 10 peter 66   class Codon
2368 11 Dec 10 peter 67   {
2368 11 Dec 10 peter 68   public:
2368 11 Dec 10 peter 69     /**
2368 11 Dec 10 peter 70        \brief Defaulf constructor.
2368 11 Dec 10 peter 71
2368 11 Dec 10 peter 72        Value is undefined
2368 11 Dec 10 peter 73      */
2368 11 Dec 10 peter 74     Codon(void);
2368 11 Dec 10 peter 75
2368 11 Dec 10 peter 76     /**
2368 11 Dec 10 peter 77        \a str must be three characters long and each character must be
2368 11 Dec 10 peter 78        convertible to a DNA.
2368 11 Dec 10 peter 79
2368 11 Dec 10 peter 80        \see DNA
2368 11 Dec 10 peter 81      */
2368 11 Dec 10 peter 82     Codon(const std::string& str);
2368 11 Dec 10 peter 83
2368 11 Dec 10 peter 84     /**
2368 11 Dec 10 peter 85        Create Codon from three DNA
2368 11 Dec 10 peter 86      */
2368 11 Dec 10 peter 87     Codon(const DNA& first, const DNA& second, const DNA& third);
2368 11 Dec 10 peter 88
2368 11 Dec 10 peter 89     /**
2368 11 Dec 10 peter 90        \return one character describing which amino acid the Codon
2368 11 Dec 10 peter 91        translates to.
2368 11 Dec 10 peter 92      */
2368 11 Dec 10 peter 93     char amino_acid(void) const;
2368 11 Dec 10 peter 94
2368 11 Dec 10 peter 95     /**
3487 24 Mar 16 peter 96        \return three characters describing which amino acid the Codon
3487 24 Mar 16 peter 97        translates to.
3487 24 Mar 16 peter 98
3487 24 Mar 16 peter 99        \since New in yat 0.14
3487 24 Mar 16 peter 100      */
3487 24 Mar 16 peter 101     std::string amino_acid_long(void) const;
3487 24 Mar 16 peter 102
3487 24 Mar 16 peter 103     /**
2369 11 Dec 10 peter 104        \return \a i th DNA
2368 11 Dec 10 peter 105      */
2369 11 Dec 10 peter 106     const DNA& operator()(size_t i) const;
2368 11 Dec 10 peter 107
2368 11 Dec 10 peter 108     /**
2368 11 Dec 10 peter 109        \return \c true if Codon is a start Codon: "ATG"
2368 11 Dec 10 peter 110      */
2368 11 Dec 10 peter 111     bool start(void) const;
2368 11 Dec 10 peter 112
2368 11 Dec 10 peter 113     /**
2368 11 Dec 10 peter 114        \return \c true if Codon is a stop codon (see class docs).
2368 11 Dec 10 peter 115      */
2368 11 Dec 10 peter 116     bool stop(void) const;
2368 11 Dec 10 peter 117   private:
2368 11 Dec 10 peter 118     struct Compare_
2368 11 Dec 10 peter 119     {
2900 13 Dec 12 peter 120       bool operator()(const std::vector<DNA>& lhs,
2368 11 Dec 10 peter 121                       const std::vector<DNA>& rhs) const;
2368 11 Dec 10 peter 122     };
2900 13 Dec 12 peter 123     typedef std::map<std::vector<DNA>, char, Compare_> Map_;
2368 11 Dec 10 peter 124     static Map_ map_;
2368 11 Dec 10 peter 125
2368 11 Dec 10 peter 126     Map_::const_iterator iter_;
2900 13 Dec 12 peter 127
2900 13 Dec 12 peter 128     void add_to_map(char aa, const std::string& codons);
2900 13 Dec 12 peter 129
2368 11 Dec 10 peter 130     void init(const std::vector<DNA>& vec);
2368 11 Dec 10 peter 131     void create_map(void);
2368 11 Dec 10 peter 132
2368 11 Dec 10 peter 133     // using compiler generated copy
2368 11 Dec 10 peter 134     // Codon(const Codon&)
2368 11 Dec 10 peter 135     // Codon& operator=(const Codon&)
2900 13 Dec 12 peter 136   };
2900 13 Dec 12 peter 137
2368 11 Dec 10 peter 138   /**
2441 15 Mar 11 peter 139      \brief Functor comparing if two Codons translate to the same amino acid
2368 11 Dec 10 peter 140
2368 11 Dec 10 peter 141      \relates Codon
2389 22 Dec 10 peter 142
2389 22 Dec 10 peter 143      \since New in yat 0.7
2368 11 Dec 10 peter 144    */
4339 15 Apr 23 peter 145   struct AminoAcidEqual
2368 11 Dec 10 peter 146   {
4339 15 Apr 23 peter 147     /// \c first_argument_type is Codon
4339 15 Apr 23 peter 148     typedef Codon first_argument_type;
4339 15 Apr 23 peter 149     /// \c second_argument_type is Codon
4339 15 Apr 23 peter 150     typedef Codon second_argument_type;
4339 15 Apr 23 peter 151     /// \c result_type is \c bool
4339 15 Apr 23 peter 152     typedef bool result_type;
4339 15 Apr 23 peter 153
2368 11 Dec 10 peter 154     /// \return \c true \a lhs and \a rhs translates to same amino acid
2368 11 Dec 10 peter 155     bool operator()(const Codon& lhs, const Codon& rhs) const;
2368 11 Dec 10 peter 156   };
2368 11 Dec 10 peter 157
2368 11 Dec 10 peter 158 }}}
2368 11 Dec 10 peter 159 #endif