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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Genetic_code_table.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 21:03:35  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: Genetic_code_table.hpp,v 1000.0 2003/10/29 21:03:35 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. #ifndef OBJECTS_SEQFEAT_GENETIC_CODE_TABLE_HPP
  45. #define OBJECTS_SEQFEAT_GENETIC_CODE_TABLE_HPP
  46. // generated includes
  47. #include <objects/seqfeat/Genetic_code_table_.hpp>
  48. #include <memory> // for auto_ptr<>
  49. // generated classes
  50. BEGIN_NCBI_SCOPE
  51. BEGIN_objects_SCOPE // namespace ncbi::objects::
  52. class CGen_code_table_imp;
  53. class NCBI_SEQFEAT_EXPORT CGenetic_code_table : public CGenetic_code_table_Base
  54. {
  55.     typedef CGenetic_code_table_Base Tparent;
  56. public:
  57.     // constructor
  58.     CGenetic_code_table(void);
  59.     // destructor
  60.     ~CGenetic_code_table(void);
  61. private:
  62.     // Prohibit copy constructor and assignment operator
  63.     CGenetic_code_table(const CGenetic_code_table& value);
  64.     CGenetic_code_table& operator=(const CGenetic_code_table& value);
  65. };
  66. /////////////////// CGenetic_code_table inline methods
  67. // constructor
  68. inline
  69. CGenetic_code_table::CGenetic_code_table(void)
  70. {
  71. }
  72. /////////////////// end of CGenetic_code_table inline methods
  73. // genetic code translation table class
  74. // the function CCdregion_translate::TranslateCdregion in
  75. // <objects/util/sequence.hpp> obtains the sequence under
  76. // a coding region feature location and uses CTrans_table
  77. // to do the translation
  78. class NCBI_SEQFEAT_EXPORT CTrans_table : public CObject
  79. {
  80. public:
  81.     // constructor
  82.     CTrans_table(const CGenetic_code&);
  83.     // destructor
  84.     ~CTrans_table(void);
  85.     // translation finite state machine methods
  86.     static int SetCodonState  (unsigned char ch1,
  87.                                unsigned char ch2,
  88.                                unsigned char ch3);
  89.     static int NextCodonState (int state,
  90.                                unsigned char ch);
  91.     static int RevCompState   (int state);
  92.     // lookup of amino acid translated for given codon (state)
  93.     char GetCodonResidue (int state) const;
  94.     char GetStartResidue (int state) const;
  95.     bool IsOrfStart   (int state) const;
  96.     bool IsAmbigStart (int state) const;
  97.     bool IsAnyStart   (int state) const;
  98.     bool IsOrfStop    (int state) const;
  99.     bool IsATGStart   (int state) const;
  100.     bool IsAltStart   (int state) const;
  101. private:
  102.     // translation tables common to all genetic codes (single copy)
  103.     static int  sm_NextState  [4097];
  104.     static int  sm_RvCmpState [4097];
  105.     static int  sm_BaseToIdx  [256];
  106.     // initialize single copy translation tables
  107.     static void x_InitFsaTable (void);
  108.     // translation tables specific to each genetic code instance
  109.     mutable char  m_AminoAcid [4097];
  110.     mutable char  m_OrfStart  [4097];
  111.     // initialize genetic code specific translation tables
  112.     void x_InitFsaTransl (const string *ncbieaa,
  113.                           const string *sncbieaa) const;
  114.     friend class CGen_code_table_imp;
  115. };
  116. // public interface for (single instance) genetic code and translation tables
  117. class NCBI_SEQFEAT_EXPORT CGen_code_table
  118. {
  119. public:
  120.     // return initialized translation table given genetic code
  121.     static const CTrans_table& GetTransTable (int id);
  122.     static const CTrans_table& GetTransTable (const CGenetic_code& gc);
  123.     // return table of loaded genetic codes for iteration
  124.     static const CGenetic_code_table& GetCodeTable (void);
  125.     // Get the ncbieaa string for a specific genetic code.
  126.     static const string& GetNcbieaa(int id);
  127.     static const string& GetNcbieaa(const CGenetic_code& gc);
  128.     // Get the sncbieaa string for a specific genetic code
  129.     static const string& GetSncbieaa(int id);
  130.     static const string& GetSncbieaa(const CGenetic_code& gc);
  131.     // Convert the numeric representation of a codon to a base one.
  132.     static string IndexToCodon(int index);
  133.     // Convert the base representation of a codon to a numeric one.
  134.     static int CodonToIndex(char base1, char base2, char base3);
  135.     static int CodonToIndex(const string& codon);
  136. private:
  137.     // this class uses a singleton internally to manage the specifics
  138.     // of the genetic code implementation
  139.     // these are the variables / functions that control the singleton
  140.     static auto_ptr<CGen_code_table_imp> sm_Implementation;
  141.     static void                 x_InitImplementation(void);
  142.     static CGen_code_table_imp& x_GetImplementation (void);
  143. };
  144. inline
  145. CGen_code_table_imp& CGen_code_table::x_GetImplementation(void)
  146. {
  147.     if ( !sm_Implementation.get() ) {
  148.         x_InitImplementation();
  149.     }
  150.     return *sm_Implementation;
  151. }
  152. /////////////////// CTrans_table inline methods
  153. inline
  154. int CTrans_table::SetCodonState (unsigned char ch1,
  155.                                  unsigned char ch2,
  156.                                  unsigned char ch3)
  157. {
  158.     return (256 * sm_BaseToIdx [(int) ch1] +
  159.             16 * sm_BaseToIdx [(int) ch2] +
  160.             sm_BaseToIdx [(int) ch3] + 1);
  161. }
  162. inline
  163. int CTrans_table::NextCodonState (int state,
  164.                                   unsigned char ch)
  165. {
  166.     if (state < 0 || state > 4096) return 0;
  167.     return (sm_NextState [state] + sm_BaseToIdx [(int) ch]);
  168. }
  169. inline
  170. int CTrans_table::RevCompState (int state)
  171. {
  172.     if (state < 0 || state > 4096) return 0;
  173.     return (sm_RvCmpState [state]);
  174. }
  175. inline
  176. char CTrans_table::GetCodonResidue (int state) const
  177. {
  178.     if (state < 0 || state > 4096) return 0;
  179.     return (m_AminoAcid [state]);
  180. }
  181. inline
  182. char CTrans_table::GetStartResidue (int state) const
  183. {
  184.     if (state < 0 || state > 4096) return 0;
  185.     return (m_OrfStart [state]);
  186. }
  187. inline
  188. bool CTrans_table::IsOrfStart (int state) const
  189. {
  190.     return (GetStartResidue (state) == 'M');
  191. }
  192. inline
  193. bool CTrans_table::IsAmbigStart (int state) const
  194. {
  195.     return (GetStartResidue (state) == 'X');
  196. }
  197. inline
  198. bool CTrans_table::IsAnyStart (int state) const
  199. {
  200.     return (GetStartResidue (state) != '-');
  201. }
  202. inline
  203. bool CTrans_table::IsOrfStop (int state) const
  204. {
  205.     return (GetCodonResidue (state) == '*');
  206. }
  207. inline
  208. bool CTrans_table::IsATGStart (int state) const
  209. {
  210.     static const int k_ATG_state = 389; // ATG initiation codon state
  211.     return (IsOrfStart (state) && state == k_ATG_state);
  212. }
  213. inline
  214. bool CTrans_table::IsAltStart (int state) const
  215. {
  216.     static const int k_ATG_state = 389; // ATG initiation codon state
  217.     return (IsOrfStart (state) && state != k_ATG_state);
  218. }
  219. /////////////////// end of CTrans_table inline methods
  220. END_objects_SCOPE // namespace ncbi::objects::
  221. END_NCBI_SCOPE
  222. /*
  223. * ===========================================================================
  224. *
  225. * $Log: Genetic_code_table.hpp,v $
  226. * Revision 1000.0  2003/10/29 21:03:35  gouriano
  227. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  228. *
  229. * Revision 1.10  2003/06/19 21:49:32  johnson
  230. * bug fix: IsOrfStop now calls GetCodonResidue instead of GetStartResidue
  231. *
  232. * Revision 1.9  2003/04/14 19:12:36  ivanov
  233. * Added export specifier for class CTrans_table
  234. *
  235. * Revision 1.8  2003/01/03 19:17:30  shomrat
  236. * Added Win32 export specifier
  237. *
  238. * Revision 1.7  2002/12/26 12:43:27  dicuccio
  239. * Added Win32 export specifiers
  240. *
  241. * Revision 1.6  2002/11/26 18:40:16  shomrat
  242. * Add convenience method for codon conversions and ncbieaa string retrieval
  243. *
  244. * Revision 1.5  2002/09/13 00:44:58  ucko
  245. * #include <memory> for auto_ptr<> template
  246. *
  247. * Revision 1.4  2002/09/12 19:58:09  kans
  248. * CGen_code_table_imp instantiated after type info system (diccucio)
  249. *
  250. * Revision 1.3  2002/09/10 21:30:09  kans
  251. * k_ATG_state into two inline functions because MSVC compiler will not allow
  252. * a constant inside a class
  253. *
  254. * Revision 1.2  2002/09/10 15:18:08  kans
  255. * added GetCodeTable method
  256. *
  257. * Revision 1.1  2002/09/09 20:58:06  kans
  258. * added CTrans_table and CGen_code_table classes
  259. *
  260. *
  261. * ===========================================================================
  262. */
  263. #endif // OBJECTS_SEQFEAT_GENETIC_CODE_TABLE_HPP
  264. /* Original file checksum: lines: 93, chars: 2557, CRC32: e1e5ca57 */