Genetic_code_table.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:26k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Genetic_code_table.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:33:54  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.17
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: Genetic_code_table.cpp,v 1000.2 2004/06/01 19:33:54 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  .......
  35.  *
  36.  * File Description:
  37.  *   .......
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the ASN data definition file
  42.  *   'seqfeat.asn'.
  43.  */
  44. // standard includes
  45. #include <ncbi_pch.hpp>
  46. #include <serial/serial.hpp>
  47. #include <serial/objistr.hpp>
  48. #include <corelib/ncbithr.hpp>
  49. // generated includes
  50. #include <objects/seqfeat/Genetic_code_table.hpp>
  51. // generated classes
  52. BEGIN_NCBI_SCOPE
  53. BEGIN_objects_SCOPE // namespace ncbi::objects::
  54. // destructor
  55. CGenetic_code_table::~CGenetic_code_table(void)
  56. {
  57. }
  58. // genetic code translation tables
  59. // destructor
  60. CTrans_table::~CTrans_table(void)
  61. {
  62. }
  63. // translation finite state machine base codes - ncbi4na
  64. enum EBaseCode {
  65.     eBase_gap = 0,
  66.     eBase_A,      /* A    */
  67.     eBase_C,      /* C    */
  68.     eBase_M,      /* AC   */
  69.     eBase_G,      /* G    */
  70.     eBase_R,      /* AG   */
  71.     eBase_S,      /* CG   */
  72.     eBase_V,      /* ACG  */
  73.     eBase_T,      /* T    */
  74.     eBase_W,      /* AT   */
  75.     eBase_Y,      /* CT   */
  76.     eBase_H,      /* ACT  */
  77.     eBase_K,      /* GT   */
  78.     eBase_D,      /* AGT  */
  79.     eBase_B,      /* CGT  */
  80.     eBase_N       /* ACGT */
  81. };
  82. // static instances of single copy translation tables common to all genetic codes
  83. int   CTrans_table::sm_NextState  [4097];
  84. int   CTrans_table::sm_RvCmpState [4097];
  85. int   CTrans_table::sm_BaseToIdx  [256];
  86. // initialize base conversion, next state, and reverse complement state tables
  87. void CTrans_table::x_InitFsaTable (void)
  88. {
  89.     char         ch;
  90.     int          i, j, k, p, q, r, nx, st;
  91.     static char  charToBase [17] = "-ACMGRSVTWYHKDBN";
  92.     static char  baseToComp [17] = "-TGKCYSBAWRDMHVN";
  93.     // illegal characters map to 0
  94.     for (i = 0; i < 256; i++) {
  95.         sm_BaseToIdx [i] = 0;
  96.     }
  97.     // map iupacna alphabet to EBaseCode
  98.     for (i = eBase_gap; i <= eBase_N; i++) {
  99.         ch = charToBase [i];
  100.         sm_BaseToIdx [(int) ch] = i;
  101.         ch = tolower (ch);
  102.         sm_BaseToIdx [(int) ch] = i;
  103.     }
  104.     sm_BaseToIdx [(int) 'U'] = eBase_T;
  105.     sm_BaseToIdx [(int) 'u'] = eBase_T;
  106.     sm_BaseToIdx [(int) 'X'] = eBase_N;
  107.     sm_BaseToIdx [(int) 'x'] = eBase_N;
  108.     // also map ncbi4na alphabet to EBaseCode
  109.     for (i = eBase_gap; i <= eBase_N; i++) {
  110.         sm_BaseToIdx [(int) i] = i;
  111.     }
  112.     // treat state 0 as already having seen NN,
  113.     // avoiding single and double letter states
  114.     sm_NextState [0] = 4081;
  115.     sm_RvCmpState [0] = 4096;
  116.     // states 1 through 4096 are triple letter states (---, --A, ..., NNT, NNN)
  117.     for (i = eBase_gap, st = 1; i <= eBase_N; i++) {
  118.         for (j = eBase_gap, nx = 1; j <= eBase_N; j++) {
  119.             for (k = eBase_gap; k <= eBase_N; k++, st++, nx += 16) {
  120.                 sm_NextState [st] = nx;
  121.                 p = sm_BaseToIdx [(int) (Uint1) baseToComp [k]];
  122.                 q = sm_BaseToIdx [(int) (Uint1) baseToComp [j]];
  123.                 r = sm_BaseToIdx [(int) (Uint1) baseToComp [i]];
  124.                 sm_RvCmpState [st] = 256 * p + 16 * q + r + 1;
  125.             }
  126.         }
  127.     }
  128. }
  129. // initialize genetic code specific translation tables
  130. void CTrans_table::x_InitFsaTransl (const string *ncbieaa,
  131.                                     const string *sncbieaa) const
  132. {
  133.     char        ch, aa, orf;
  134.     bool        go_on;
  135.     int         i, j, k, p, q, r, x, y, z, st, cd;
  136.     static int  expansions [4] = {eBase_A, eBase_C, eBase_G, eBase_T};
  137.                                 // T = 0, C = 1, A = 2, G = 3
  138.     static int  codonIdx [9] = {0, 2, 1, 0, 3, 0, 0, 0, 0};
  139.     // return if unable to find ncbieaa and sncbieaa strings
  140.     if (ncbieaa == 0 || sncbieaa == 0) return;
  141.     // also check length of ncbieaa and sncbieaa strings
  142.     if (ncbieaa->size () != 64 || sncbieaa->size () != 64) return;
  143.     // ambiguous codons map to unknown amino acid or not start
  144.     for (i = 0; i <= 4096; i++) {
  145.         m_AminoAcid [i] = 'X';
  146.         m_OrfStart [i] = '-';
  147.     }
  148.     // lookup amino acid for each codon in genetic code table
  149.     for (i = eBase_gap, st = 1; i <= eBase_N; i++) {
  150.         for (j = eBase_gap; j <= eBase_N; j++) {
  151.             for (k = eBase_gap; k <= eBase_N; k++, st++) {
  152.                 aa = '';
  153.                 orf = '';
  154.                 go_on = true;
  155.                 // expand ambiguous IJK nucleotide symbols into component bases XYZ
  156.                 for (p = 0; p < 4 && go_on; p++) {
  157.                     x = expansions [p];
  158.                     if ((x & i) != 0) {
  159.                         for (q = 0; q < 4 && go_on; q++) {
  160.                             y = expansions [q];
  161.                             if ((y & j) != 0) {
  162.                                 for (r = 0; r < 4 && go_on; r++) {
  163.                                     z = expansions [r];
  164.                                     if ((z & k) != 0) {
  165.                                         // calculate offset in genetic code string
  166.                                         // the T = 0, C = 1, A = 2, G = 3 order is
  167.                                         // necessary because the genetic code strings
  168.                                         // are presented in TCAG order in printed tables
  169.                                         // and in the genetic code strings
  170.                                         cd = 16 * codonIdx [x] + 4 * codonIdx [y] + codonIdx [z];
  171.                                         // lookup amino acid for codon XYZ
  172.                                         ch = (*ncbieaa) [cd];
  173.                                         if (aa == '') {
  174.                                             aa = ch;
  175.                                         } else if (aa != ch) {
  176.                                             // allow Asx (Asp or Asn) and Glx (Glu or Gln)
  177.                                             if ((aa == 'B' || aa == 'D' || aa == 'N') &&
  178.                                                 (ch == 'D' || ch == 'N')) {
  179.                                                 aa = 'B';
  180.                                             } else if ((aa == 'Z' || aa == 'E' || aa == 'Q') &&
  181.                                                        (ch == 'E' || ch == 'Q')) {
  182.                                                 aa = 'Z';
  183.                                             } else {
  184.                                                 aa = 'X';
  185.                                             }
  186.                                         }
  187.                                         // lookup translation start flag
  188.                                         ch = (*sncbieaa) [cd];
  189.                                         if (orf == '') {
  190.                                             orf = ch;
  191.                                         } else if (orf != ch) {
  192.                                             orf = 'X';
  193.                                         }
  194.                                         // drop out of loop as soon as answer is known
  195.                                         if (aa == 'X' && orf == 'X') {
  196.                                             go_on = false;
  197.                                         }
  198.                                     }
  199.                                 }
  200.                             }
  201.                         }
  202.                     }
  203.                 }
  204.                 // assign amino acid and orf start
  205.                 if (aa != '') {
  206.                     m_AminoAcid [st] = aa;
  207.                 }
  208.                 if (orf != '') {
  209.                     m_OrfStart [st] = orf;
  210.                 }
  211.             }
  212.         }
  213.     }
  214. }
  215. // implementation class for genetic code table and translation tables
  216. class CGen_code_table_imp : public CObject
  217. {
  218. public:
  219.     // constructor
  220.     CGen_code_table_imp(void);
  221.     // destructor
  222.     ~CGen_code_table_imp(void);
  223.     // return initialized translation table given genetic code
  224.     const CTrans_table& GetTransTable (int  gc);
  225.     const CTrans_table& GetTransTable (const CGenetic_code& gc);
  226.     // return single copy loaded genetic code table for iteration
  227.     const CGenetic_code_table& GetCodeTable (void);
  228.     const string& GetNcbieaa(int id) const;
  229.     const string& GetNcbieaa(const CGenetic_code& gc) const;
  230.     
  231.     const string& GetSncbieaa(int id) const;
  232.     const string& GetSncbieaa(const CGenetic_code& gc) const;
  233. private:
  234.     // genetic code table data
  235.     CRef <CGenetic_code_table> m_GcTable;
  236.     // typedefs
  237.     typedef vector< CRef< CTrans_table > > TTransTablesById;
  238.     // translation tables
  239.     TTransTablesById  m_TransTablesById;
  240.     // local copy of genetic code table ASN.1
  241.     static const char * sm_GenCodeTblMemStr [];
  242. };
  243. // single instance of implementation class is initialized before Main
  244. auto_ptr<CGen_code_table_imp> CGen_code_table::sm_Implementation;
  245. void CGen_code_table::x_InitImplementation()
  246. {
  247.     DEFINE_STATIC_FAST_MUTEX(s_Implementation_mutex);
  248.     CFastMutexGuard   LOCK(s_Implementation_mutex);
  249.     if ( !sm_Implementation.get() ) {
  250.         sm_Implementation.reset(new CGen_code_table_imp());
  251.     }
  252. }
  253. // public access functions
  254. const CTrans_table& CGen_code_table::GetTransTable (int id)
  255. {
  256.     return x_GetImplementation().GetTransTable (id);
  257. }
  258. const CTrans_table& CGen_code_table::GetTransTable(const CGenetic_code& gc)
  259. {
  260.     return x_GetImplementation().GetTransTable(gc);
  261. }
  262. const CGenetic_code_table& CGen_code_table::GetCodeTable(void)
  263. {
  264.     return x_GetImplementation().GetCodeTable();
  265. }
  266. const string& CGen_code_table::GetNcbieaa(int id)
  267. {
  268.     return x_GetImplementation().GetNcbieaa(id);
  269. }
  270. const string& CGen_code_table::GetNcbieaa(const CGenetic_code& gc)
  271. {
  272.     return x_GetImplementation().GetNcbieaa(gc);
  273. }
  274. const string& CGen_code_table::GetSncbieaa(int id) 
  275. {
  276.     return x_GetImplementation().GetSncbieaa(id);
  277. }
  278. const string& CGen_code_table::GetSncbieaa(const CGenetic_code& gc)
  279. {
  280.     return x_GetImplementation().GetSncbieaa(gc);
  281. }
  282. string CGen_code_table::IndexToCodon(int index)
  283. {
  284.     if ( index < 0 || index > 63 ) return CNcbiEmptyString::Get();
  285.     static char na[4] = { 'T', 'C', 'A', 'G' };    
  286.     string codon;
  287.     codon.resize(3);
  288.     int total = index;
  289.     int div = 16;
  290.     for ( int i = 0; i < 3; ++i ) {
  291.         int j = total / div;
  292.         codon[i] = na[j];
  293.         total -= div * j;
  294.         div /= 4;
  295.     }
  296.     return codon;
  297. }
  298. int CGen_code_table::CodonToIndex(char base1, char base2, char base3)
  299. {
  300.     string codon;
  301.     codon.insert(codon.end(), base1);
  302.     codon.insert(codon.end(), base2);
  303.     codon.insert(codon.end(), base3);
  304.     return CodonToIndex(codon);
  305. }
  306. static bool s_ValidCodon(const string& codon) 
  307. {
  308.     if ( codon.length() != 3 ) return false;
  309.     
  310.     for ( int i = 0; i < 3; ++i ) {
  311.         char ch = toupper(codon[i]);
  312.         if ( ch != 'A' && ch != 'G' && ch != 'C' && ch != 'T'  && ch != 'U' ) {
  313.             return false;
  314.         }
  315.     }
  316.     return true;
  317. }
  318. int CGen_code_table::CodonToIndex(const string& codon)
  319. {
  320.     if ( !s_ValidCodon(codon) ) return -1;
  321.     
  322.     int weight = 0;
  323.     int index = 0;
  324.     int mul = 16;
  325.     for ( int i = 0; i < 3; ++i ) {
  326.         switch ( toupper(codon[i]) ) {
  327.         case 'A' :
  328.             weight = 2;
  329.             break;
  330.         case 'C' :
  331.             weight = 1;
  332.             break;
  333.         case 'G' :
  334.             weight = 3;
  335.             break;
  336.         case 'T' :
  337.         case 'U' :
  338.             weight = 0;
  339.             break;
  340.         }
  341.         index += mul * weight;
  342.         mul /= 4;
  343.     }
  344.     return index;
  345. }
  346. // constructor
  347. CGen_code_table_imp::CGen_code_table_imp(void)
  348. {
  349.     // initialize common CTrans_table tables
  350.     CTrans_table::x_InitFsaTable ();
  351.     // Compose a long-long string
  352.     string str;
  353.     for (size_t i = 0;  sm_GenCodeTblMemStr [i];  i++) {
  354.         str += sm_GenCodeTblMemStr [i];
  355.     }
  356.     // create an in memory stream on sm_GenCodeTblMemStr
  357.     CNcbiIstrstream is(str.c_str(), str.length());
  358.     auto_ptr<CObjectIStream>
  359.         asn_codes_in(CObjectIStream::Open(eSerial_AsnText, is));
  360.     // read single copy of genetic-code table
  361.     m_GcTable = new CGenetic_code_table;
  362.     *asn_codes_in >> *m_GcTable;
  363. }
  364. // destructor
  365. CGen_code_table_imp::~CGen_code_table_imp(void)
  366. {
  367. }
  368. // constructor
  369. CTrans_table::CTrans_table(const CGenetic_code& gc)
  370. {
  371.     const string * ncbieaa  = 0;
  372.     const string * sncbieaa = 0;
  373.     // find amino acid and orf start strings given genetic code instance
  374.     ITERATE (CGenetic_code::Tdata, gcd, gc.Get ()) {
  375.         switch ((*gcd)->Which ()) {
  376.             case CGenetic_code::C_E::e_Ncbieaa :
  377.                 ncbieaa = & (*gcd)->GetNcbieaa ();
  378.                 break;
  379.             case CGenetic_code::C_E::e_Sncbieaa :
  380.                 sncbieaa = & (*gcd)->GetSncbieaa ();
  381.                 break;
  382.             default:
  383.                 break;
  384.         }
  385.     }
  386.     // throw exception if unable to find ncbieaa and sncbieaa strings
  387.     if (ncbieaa == 0 || sncbieaa == 0) {
  388.         NCBI_THROW (CException, eUnknown,
  389.                     "Could not find ncbieaa and sncbieaa");
  390.     }
  391.     // initialize translation table for this genetic code instance
  392.     x_InitFsaTransl (ncbieaa, sncbieaa);
  393. }
  394. const CTrans_table& CGen_code_table_imp::GetTransTable (int id)
  395. {
  396.     _ASSERT(id >= 0);
  397.     // look for already created translation table
  398.     if ( size_t(id) < m_TransTablesById.size ()) {
  399.         CRef< CTrans_table> tbl = m_TransTablesById [id];
  400.         if (tbl != 0) {
  401.          // already in list, already initialized, so return
  402.             return *tbl;
  403.         }
  404.     }
  405.     // this mutex is automatically freed when the function exits
  406.     DEFINE_STATIC_FAST_MUTEX(mtx);
  407.     CFastMutexGuard   LOCK (mtx);
  408.     // test again within mutex lock to see if another thread was just adding it
  409.     if ( size_t(id) < m_TransTablesById.size ()) {
  410.         CRef< CTrans_table> tbl = m_TransTablesById [id];
  411.         if (tbl != 0) {
  412.          // already in list, already initialized, so return
  413.             return *tbl;
  414.         }
  415.     }
  416.     // now look for the genetic code and initialize the translation table
  417.     ITERATE (CGenetic_code_table::Tdata, gcl, m_GcTable->Get ()) {
  418.         ITERATE (CGenetic_code::Tdata, gcd, (*gcl)->Get ()) {
  419.             if ((*gcd)->IsId ()  &&  (*gcd)->GetId () == id) {
  420.              // found proper genetic code, so create new trans table
  421.              CRef< CTrans_table> tbl(new CTrans_table (**gcl));
  422.              // extend size of translation table list, if necessary
  423.              if ( size_t(id) >= m_TransTablesById.size ()) {
  424.                  m_TransTablesById.resize (id + 1);
  425.              }
  426.              // add new table to list of translation tables
  427.              m_TransTablesById [id] = tbl;
  428.              return *tbl;
  429.             }
  430.         }
  431.     }
  432.     // throw exception if failure
  433.     NCBI_THROW (CException, eUnknown,
  434.                 "Unable to find genetic code number " +
  435.                 NStr::IntToString (id));
  436. }
  437. const CTrans_table& CGen_code_table_imp::GetTransTable (const CGenetic_code& gc)
  438. {
  439.     const string * ncbieaa  = 0;
  440.     const string * sncbieaa = 0;
  441.     ITERATE (CGenetic_code::Tdata, gcd, gc.Get ()) {
  442.         switch ((*gcd)->Which ()) {
  443.             case CGenetic_code::C_E::e_Id :
  444.             {
  445.                 // lookup table by ID
  446.                 int id = (*gcd)->GetId ();
  447.                 return GetTransTable (id);
  448.             }
  449.             case CGenetic_code::C_E::e_Ncbieaa :
  450.                 ncbieaa = & (*gcd)->GetNcbieaa ();
  451.                 break;
  452.             case CGenetic_code::C_E::e_Sncbieaa :
  453.                 sncbieaa = & (*gcd)->GetSncbieaa ();
  454.                 break;
  455.             default:
  456.                 break;
  457.         }
  458.     }
  459.     if (ncbieaa != 0  &&  sncbieaa != 0) {
  460.       // return * new CTrans_table (gc);
  461.       NCBI_THROW (CException, eUnknown,
  462.                   "GetTransTable without ID not yet supported");
  463.     }
  464.     NCBI_THROW (CException, eUnknown,
  465.                 "GetTransTable does not have sufficient information");
  466. }
  467. const CGenetic_code_table & CGen_code_table_imp::GetCodeTable (void)
  468. {
  469.     return *m_GcTable;
  470. }
  471. const string& CGen_code_table_imp::GetNcbieaa(int id) const
  472. {
  473.     ITERATE (CGenetic_code_table::Tdata, gcl, m_GcTable->Get ()) {
  474.         if ( (*gcl)->GetId() == id ) {
  475.             return (*gcl)->GetNcbieaa();
  476.         }
  477.     }
  478.     return CNcbiEmptyString::Get();
  479. }
  480. const string& CGen_code_table_imp::GetNcbieaa(const CGenetic_code& gc) const
  481. {
  482.     return gc.GetNcbieaa();
  483. }
  484. const string& CGen_code_table_imp::GetSncbieaa(int id) const
  485. {
  486.     ITERATE (CGenetic_code_table::Tdata, gcl, m_GcTable->Get ()) {
  487.         if ( (*gcl)->GetId() == id ) {
  488.             return (*gcl)->GetSncbieaa();
  489.         }
  490.     }
  491.     
  492.     return CNcbiEmptyString::Get();
  493. }
  494. const string& CGen_code_table_imp::GetSncbieaa(const CGenetic_code& gc) const
  495. {
  496.     return gc.GetSncbieaa();
  497. }
  498. // standard genetic code
  499. //
  500. // ncbieaa  "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG"
  501. // sncbieaa "---M---------------M---------------M----------------------------"
  502. //
  503. // -- Base1  TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
  504. // -- Base2  TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
  505. // -- Base3  TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
  506. /*
  507.                          Second Position
  508. First      T             C             A             G      Third
  509. -----------------------------------------------------------------
  510.   T   TTT Phe [F]   TCT Ser [S]   TAT Tyr [Y]   TGT Cys [C]   T
  511.       TTC Phe [F]   TCC Ser [S]   TAC Tyr [Y]   TGC Cys [C]   C
  512.       TTA Leu [L]   TCA Ser [S]   TAA Ter [*]   TGA Ter [*]   A
  513.       TTG Leu [L]   TCG Ser [S]   TAG Ter [*]   TGG Trp [W]   G
  514. -----------------------------------------------------------------
  515.   C   CTT Leu [L]   CCT Pro [P]   CAT His [H]   CGT Arg [R]   T
  516.       CTC Leu [L]   CCC Pro [P]   CAC His [H]   CGC Arg [R]   C
  517.       CTA Leu [L]   CCA Pro [P]   CAA Gln [Q]   CGA Arg [R]   A
  518.       CTG Leu [L]   CCG Pro [P]   CAG Gln [Q]   CGG Arg [R]   G
  519. -----------------------------------------------------------------
  520.   A   ATT Ile [I]   ACT Thr [T]   AAT Asn [N]   AGT Ser [S]   T
  521.       ATC Ile [I]   ACC Thr [T]   AAC Asn [N]   AGC Ser [S]   C
  522.       ATA Ile [I]   ACA Thr [T]   AAA Lys [K]   AGA Arg [R]   A
  523.       ATG Met [M]   ACG Thr [T]   AAG Lys [K]   AGG Arg [R]   G
  524. -----------------------------------------------------------------
  525.   G   GTT Val [V]   GCT Ala [A]   GAT Asp [D]   GGT Gly [G]   T
  526.       GTC Val [V]   GCC Ala [A]   GAC Asp [D]   GGC Gly [G]   C
  527.       GTA Val [V]   GCA Ala [A]   GAA Glu [E]   GGA Gly [G]   A
  528.       GTG Val [V]   GCG Ala [A]   GAG Glu [E]   GGG Gly [G]   G
  529. -----------------------------------------------------------------
  530. */
  531. // local copy of gc.prt genetic code table ASN.1
  532. const char * CGen_code_table_imp::sm_GenCodeTblMemStr [] =
  533. {
  534.     "Genetic-code-table ::= {n",
  535.     "{ name "Standard" , name "SGC0" , id 1 ,n",
  536.     "ncbieaa  "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  537.     "sncbieaa "---M---------------M---------------M----------------------------" } ,n",
  538.     "{ name "Vertebrate Mitochondrial" , name "SGC1" , id 2 ,n",
  539.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG",n",
  540.     "sncbieaa "--------------------------------MMMM---------------M------------" } ,n",
  541.     "{ name "Yeast Mitochondrial" , name "SGC2" , id 3 ,n",
  542.     "ncbieaa  "FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  543.     "sncbieaa "----------------------------------MM----------------------------" } ,n",
  544.     "{ name "Mold Mitochondrial; Protozoan Mitochondrial; Coelenteraten",
  545.     "Mitochondrial; Mycoplasma; Spiroplasma" ,n",
  546.     "name "SGC3" , id 4 ,n",
  547.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  548.     "sncbieaa "--MM---------------M------------MMMM---------------M------------" } ,n",
  549.     "{ name "Invertebrate Mitochondrial" , name "SGC4" , id 5 ,n",
  550.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG",n",
  551.     "sncbieaa "---M----------------------------MMMM---------------M------------" } ,n",
  552.     "{ name "Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear" ,n",
  553.     "name "SGC5" , id 6 ,n",
  554.     "ncbieaa  "FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  555.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  556.     "{ name "Echinoderm Mitochondrial; Flatworm Mitochondrial" , name "SGC8" , id 9 ,n",
  557.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG",n",
  558.     "sncbieaa "-----------------------------------M---------------M------------" } ,n",
  559.     "{ name "Euplotid Nuclear" , name "SGC9" , id 10 ,n",
  560.     "ncbieaa  "FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  561.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  562.     "{ name "Bacterial and Plant Plastid" , id 11 ,n",
  563.     "ncbieaa  "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  564.     "sncbieaa "---M---------------M------------MMMM---------------M------------" } ,n",
  565.     "{ name "Alternative Yeast Nuclear" , id 12 ,n",
  566.     "ncbieaa  "FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  567.     "sncbieaa "-------------------M---------------M----------------------------" } ,n",
  568.     "{ name "Ascidian Mitochondrial" , id 13 ,n",
  569.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG",n",
  570.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  571.     "{ name "Alternative Flatworm Mitochondrial" , id 14 ,n",
  572.     "ncbieaa  "FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG",n",
  573.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  574.     "{ name "Blepharisma Macronuclear" , id 15 ,n",
  575.     "ncbieaa  "FFLLSSSSYY*QCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  576.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  577.     "{ name "Chlorophycean Mitochondrial" , id 16 ,n",
  578.     "ncbieaa  "FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  579.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  580.     "{ name "Trematode Mitochondrial" , id 21 ,n",
  581.     "ncbieaa  "FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG",n",
  582.     "sncbieaa "-----------------------------------M---------------M------------" } ,n",
  583.     "{ name "Scenedesmus obliquus mitochondrial" , id 22 ,n",
  584.     "ncbieaa  "FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  585.     "sncbieaa "-----------------------------------M----------------------------" } ,n",
  586.     "{ name "Thraustochytrium mitochondrial code" , id 23 ,n",
  587.     "ncbieaa  "FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG",n",
  588.     "sncbieaa "--------------------------------M--M---------------M------------" } };n",
  589.     0  // to indicate that there is no more data
  590. };
  591. END_objects_SCOPE // namespace ncbi::objects::
  592. END_NCBI_SCOPE
  593. /*
  594. * ===========================================================================
  595. *
  596. * $Log: Genetic_code_table.cpp,v $
  597. * Revision 1000.2  2004/06/01 19:33:54  gouriano
  598. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.17
  599. *
  600. * Revision 6.17  2004/05/19 17:26:04  gorelenk
  601. * Added include of PCH - ncbi_pch.hpp
  602. *
  603. * Revision 6.16  2004/03/24 13:58:59  friedman
  604. * Fixed mutex comments
  605. *
  606. * Revision 6.15  2004/03/23 20:08:10  friedman
  607. * Replaced 'static CFastMutex' with DEFINE_STATIC_FAST_MUTEX
  608. *
  609. * Revision 6.14  2003/08/19 19:23:00  kans
  610. * s_ValidCodon test should use && instead of || (AU)
  611. *
  612. * Revision 6.13  2003/04/29 22:12:35  tolstoy
  613. * Comments for two previous commit from Tolstoy : 2 bugs fixed in function IndexToCodon
  614. * 1) incorrect order of letters in the table na - was TCGA
  615. * 2) incorrect operation for bit counting - was total % div
  616. * cofirmation from Johnatan Kans
  617. *
  618. * Revision 6.12  2003/04/29 14:35:16  tolstoy
  619. * *** empty log message ***
  620. *
  621. * Revision 6.11  2003/04/28 20:05:22  tolstoy
  622. * *** empty log message ***
  623. *
  624. * Revision 6.10  2003/04/18 19:40:38  kans
  625. * changed iterate to ITERATE
  626. *
  627. * Revision 6.9  2003/02/24 18:52:57  vasilche
  628. * Added optional mapped locations arguments to feature comparison.
  629. *
  630. * Revision 6.8  2002/11/26 18:50:31  shomrat
  631. * Add GetGenCode
  632. *
  633. * Revision 6.7  2002/11/04 21:29:16  grichenk
  634. * Fixed usage of const CRef<> and CRef<> constructor
  635. *
  636. * Revision 6.6  2002/09/19 18:07:05  kans
  637. * code 9 is echinoderm and flatworm mito, code 14 is alternative flatworm mito
  638. *
  639. * Revision 6.5  2002/09/13 18:33:57  kans
  640. * sm_GenCodeTblMemStr returned to an array of strings for consistency with sm_StrAsnData in sequence.cpp
  641. *
  642. * Revision 6.4  2002/09/12 19:59:12  kans
  643. * CGen_code_table_imp instantiated after type info system (diccucio)
  644. *
  645. * Revision 6.3  2002/09/10 15:19:55  kans
  646. * added GetCodeTable method, moved sm_GenCodeTblMemStr into implementation class
  647. *
  648. * Revision 6.2  2002/09/09 21:12:05  ucko
  649. * Add braces around e_Id case to avoid scoping error.
  650. * Add default cases to make GCC happy.
  651. * Make sure id >= 0.
  652. *
  653. * Revision 6.1  2002/09/09 20:58:21  kans
  654. * added CTrans_table and CGen_code_table classes
  655. *
  656. *
  657. * ===========================================================================
  658. */
  659. /* Original file checksum: lines: 64, chars: 1914, CRC32: 6d579336 */