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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: sequtil_tables.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 16:03:19  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL_SEQUTIL___SEQUTIL_TABLES__HPP
  10. #define UTIL_SEQUTIL___SEQUTIL_TABLES__HPP
  11. /*  $Id: sequtil_tables.hpp,v 1000.0 2003/10/29 16:03:19 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Mati Shomrat
  37.  *
  38.  * File Description:
  39.  *   Conversion tables
  40.  */   
  41. #include <corelib/ncbistd.hpp>
  42. BEGIN_NCBI_SCOPE
  43. /////////////////////////////////////////////////////////////////////////////
  44. //
  45. // Conversion Tables
  46. // IUPACna -> ....
  47. //===========================================================================
  48. // IUPACna to IUPACna
  49. // Size: 256 (1 column)
  50. // each IUPACna is mapped to itself, lower case letters are mapped
  51. // to upper case, U / u are mapped to T
  52. class CIupacnaToIupacna
  53. {
  54. public:
  55.     static const Uint1* GetTable(void) { return scm_Table; }
  56. private:
  57.     CIupacnaToIupacna(void);
  58.     static const Uint1 scm_Table[256];
  59. };
  60. // IUPACna to NCBI2na
  61. // Size: 1024 (256 rows * 4 columns)
  62. class CIupacnaTo2na
  63. {
  64. public:
  65.     static const Uint1* GetTable(void) { return scm_Table; }
  66. private:
  67.     CIupacnaTo2na(void);
  68.     static const Uint1 scm_Table[1024];
  69. };
  70. // IUPACna to NCBI2na_expand
  71. // Size: 256
  72. class CIupacnaTo2naExpand
  73. {
  74. public:
  75.     static const Uint1* GetTable(void) { return scm_Table; }
  76. private:
  77.     CIupacnaTo2naExpand(void);
  78.     static const Uint1 scm_Table[256];
  79. };
  80. // IUPACna to NCBI4na
  81. // Size: 512 (256 rown * 2 columns)
  82. class CIupacnaTo4na
  83. {
  84. public:
  85.     static const Uint1* GetTable(void) { return scm_Table; }
  86. private:
  87.     CIupacnaTo4na(void);
  88.     static void Init(void);
  89.     static const Uint1 scm_Table[512];
  90. };
  91. // IUPACna to NCBI8na
  92. // Size: 256
  93. class CIupacnaTo8na
  94. {
  95. public:
  96.     static const Uint1* GetTable(void) { return scm_Table; }
  97. private:
  98.     CIupacnaTo8na(void);
  99.     static const Uint1 scm_Table[256];
  100. };
  101. // NCBI2na -> ....
  102. //===========================================================================
  103. // NCBI2na to IUPACna
  104. // Size: 1024 (256 rows * 4 columns)
  105. class C2naToIupacna
  106. {
  107. public:
  108.     static const Uint1* GetTable(void) { return scm_Table; }
  109. private:
  110.     C2naToIupacna(void);
  111.     static const Uint1    scm_Table[1024];
  112. };
  113. // NCBI2na to NCBI2na_expand
  114. // Size: 1024 (256 rows * 4 columns)
  115. class C2naTo2naExpand
  116. {
  117. public:
  118.     static const Uint1* GetTable(void) { return scm_Table; }
  119. private:
  120.     C2naTo2naExpand(void);
  121.     static const Uint1    scm_Table[1024];
  122. };
  123. // NCBI2na to NCBI4na
  124. // We use 2 tables for this conversion; a straight forward table in 
  125. // the case when the starting position of the conversion (within a 
  126. // ncbi2na byte) is 0 or 2. this table maps a single ncbi2na byte to
  127. // 2 ncbi4na bytes.
  128. // a second table is used when the offset is 1 or 3. this table consist 
  129. // of 3 columns. for a given ncbi2na byte the first column is the mapping of
  130. // the lower 2 bits (1st base) in the ncbi2na byte, the second is the 
  131. // mapping of bases 2 and 3 and the 3rd column is the mapping of the 4th base.
  132. class C2naTo4na
  133. {
  134. public:
  135.     static const Uint1* GetTable(bool boundry) { 
  136.         return boundry ? scm_Table0 : scm_Table1;
  137.     }
  138. private:
  139.     C2naTo4na(void);
  140.     static const Uint1    scm_Table0[512];
  141.     static const Uint1    scm_Table1[768];
  142. };
  143. // NCBI2na to NCBI8na (NCBI4na_expand)
  144. // each ncbi2na byte is mapped to 4 ncbi8na bytes
  145. class C2naTo8na
  146. {
  147. public:
  148.     static const Uint1* GetTable(void) { return scm_Table; }
  149. private:
  150.     C2naTo8na(void);
  151.     static const Uint1    scm_Table[1024];
  152. };
  153. // NCBI2na_expand -> ....
  154. //===========================================================================
  155. // NCBI2na_expand to IUPACna
  156. // 0 -> A
  157. // 1 -> C
  158. // 2 -> G
  159. // 3 -> T
  160. class C2naExpandToIupacna
  161. {
  162. public:
  163.     static const Uint1* GetTable(void) { return scm_Table; }
  164. private:
  165.     C2naExpandToIupacna(void);
  166.     static const Uint1    scm_Table[256];
  167. };
  168. // NCBI4na -> ....
  169. //===========================================================================
  170. // NCBI4na to IUPACna
  171. // each ncbi4na byte maps to 2 iupacna bytes
  172. class C4naToIupacna
  173. {
  174. public:
  175.     static const Uint1* GetTable(void) { return scm_Table; }
  176. private:
  177.     C4naToIupacna(void);
  178.     static const Uint1    scm_Table[512];
  179. };
  180. // NCBI4na to NCBI2na
  181. // depending on the initial offset 4 bases that are packed in
  182. // a single ncbi2na byte might come from either 2 or 3 ncbi4na bytes.
  183. // we use 2 different tables to accomodate to 2 cases.
  184. // 0  -> 3  (gap -> T)
  185. // 1  -> 0  (A -> A)
  186. // 2  -> 1  (C -> C)
  187. // 3  -> 1  (M -> C)
  188. // 4  -> 2  (G -> G)
  189. // 5  -> 2  (R -> G)
  190. // 6  -> 1  (S -> C)
  191. // 7  -> 0  (V -> A)
  192. // 8  -> 3  (T -> T)
  193. // 9  -> 3  (W -> T)
  194. // 10 -> 3  (Y -> T)
  195. // 11 -> 0  (H -> A)
  196. // 12 -> 2  (K -> G)
  197. // 13 -> 2  (D -> G)
  198. // 14 -> 1  (B -> C)
  199. // 15 -> 0  (N -> A)
  200. class C4naTo2na
  201. {
  202. public:
  203.     static const Uint1* GetTable(size_t offset) {
  204.         return (offset == 0) ? scm_Table0 : scm_Table1;
  205.     }
  206. private:
  207.     C4naTo2na(void);
  208.     static const Uint1    scm_Table0[512];
  209.     static const Uint1    scm_Table1[768];
  210. };
  211. // NCBI4na to NCBI2na_expand
  212. // each ncbi4na byte maps to 2 iupacna bytes
  213. // gap -> 3 T
  214. // A   -> 0 A
  215. // C   -> 1 C
  216. // M   -> 1 C
  217. // G   -> 2 G
  218. // R   -> 2 G
  219. // S   -> 1 C
  220. // V   -> 0 A
  221. // T   -> 3 T
  222. // W   -> 3 T
  223. // Y   -> 3 T
  224. // H   -> 0 A
  225. // K   -> 2 G
  226. // D   -> 2 G
  227. // B   -> 1 C
  228. // N   -> 0 A
  229. class C4naTo2naExpand
  230. {
  231. public:
  232.     static const Uint1* GetTable(void) { return scm_Table; }
  233. private:
  234.     C4naTo2naExpand(void);
  235.     static const Uint1    scm_Table[512];
  236. };
  237. // NCBI4na to NCBI8na (NCBI4na_expand)
  238. // expand a single ncbi4na byte to 2 ncbi8na bytes
  239. class C4naTo8na
  240. {
  241. public:
  242.     static const Uint1* GetTable(void) { return scm_Table; }
  243. private:
  244.     C4naTo8na(void);
  245.     static const Uint1    scm_Table[512];
  246. };
  247. // NCBI8na -> ....
  248. //===========================================================================
  249. // NCBI8na to IUPACna
  250. // map ncbi8na byte to an iupacna one.
  251. class C8naToIupacna
  252. {
  253. public:
  254.     static const Uint1* GetTable(void) { return scm_Table; }
  255. private:
  256.     C8naToIupacna(void);
  257.     static const Uint1    scm_Table[256];
  258. };
  259. // NCBI8na to NCBI2na
  260. // map ncbi8na byte to the corresponding ncbi2na 2 bits based on the offset
  261. // of the byte in the 4 bytes comprising the single ncbi2na byte.
  262. class C8naTo2na
  263. {
  264. public:
  265.     static const Uint1* GetTable(void) { return scm_Table; }
  266. private:
  267.     C8naTo2na(void);
  268.     static const Uint1    scm_Table[1024];
  269. };
  270. // IUPACaa to NCBIstdaa
  271. class CIupacaaToStdaa
  272. {
  273. public:
  274.     static const Uint1* GetTable(void) { return scm_Table; }
  275. private:
  276.     CIupacaaToStdaa(void);
  277.     static const Uint1    scm_Table[256];
  278. };
  279. // NCBIeaa to IUPACaa
  280. class CEaaToIupacaa
  281. {
  282. public:
  283.     static const Uint1* GetTable(void) { return scm_Table; }
  284. private:
  285.     CEaaToIupacaa(void);
  286.     static const Uint1    scm_Table[256];
  287. };
  288. // NCBIeaa to NCBIstdaa
  289. class CEaaToStdaa
  290. {
  291. public:
  292.     static const Uint1* GetTable(void) { return scm_Table; }
  293. private:
  294.     CEaaToStdaa(void);
  295.     static const Uint1    scm_Table[256];
  296. };
  297. // NCBIstdaa to IUPACaa
  298. class CStdaaToIupacaa
  299. {
  300. public:
  301.     static const Uint1* GetTable(void) { return scm_Table; }
  302. private:
  303.     CStdaaToIupacaa(void);
  304.     static const Uint1    scm_Table[256];
  305. };
  306. // NCBIstdaa to NCBIeaa
  307. class CStdaaToEaa
  308. {
  309. public:
  310.     static const Uint1* GetTable(void) { return scm_Table; }
  311. private:
  312.     CStdaaToEaa(void);
  313.     static const Uint1    scm_Table[256];
  314. };
  315. /////////////////////////////////////////////////////////////////////////////
  316. //
  317. // Reverse Tables
  318. // NCBI2na
  319. class C2naReverse
  320. {
  321. public:
  322.     static const Uint1* GetTable(size_t offset) { return scm_Tables[offset]; }
  323. private:
  324.     C2naReverse(void);
  325.     static const Uint1    scm_Table3[256];  // offset 3 - byte boundry
  326.     static const Uint1    scm_Table2[512];  // offset 2
  327.     static const Uint1    scm_Table1[512];  // offset 1
  328.     static const Uint1    scm_Table0[512];  // offset 0
  329.     static const Uint1*   scm_Tables[4];
  330. };
  331. // NCBI4na
  332. class C4naReverse
  333. {
  334. public:
  335.     static const Uint1* GetTable(void) { return scm_Table; }
  336. private:
  337.     C4naReverse(void);
  338.     static const Uint1    scm_Table[256];
  339. };
  340. /////////////////////////////////////////////////////////////////////////////
  341. //
  342. // Complement Tables
  343. // IUPACna
  344. class CIupacnaCmp
  345. {
  346. public:
  347.     static const Uint1* GetTable(void) { return scm_Table; }
  348. private:
  349.     CIupacnaCmp(void);
  350.     static const Uint1    scm_Table[256];
  351. };
  352. // NCBI2na
  353. class C2naCmp
  354. {
  355. public:
  356.     static const Uint1* GetTable(size_t offset) { return scm_Tables[offset]; }
  357. private:
  358.     C2naCmp(void);
  359.     static const Uint1    scm_Table1[512];
  360.     static const Uint1    scm_Table2[512];
  361.     static const Uint1    scm_Table3[512];
  362.     static const Uint1*   scm_Tables[4];
  363. };
  364. // NCBI4na
  365. // 0  -> 0
  366. // 1  -> 8
  367. // 2  -> 4
  368. // 3  -> 12
  369. // 4  -> 2
  370. // 5  -> 10
  371. // 6  -> 9
  372. // 7  -> 14
  373. // 8  -> 1
  374. // 9  -> 6
  375. // 10 -> 5
  376. // 11 -> 13
  377. // 12 -> 3
  378. // 13 -> 11
  379. // 14 -> 7
  380. // 15 -> 15
  381. class C4naCmp
  382. {
  383. public:
  384.     static const Uint1* GetTable(size_t offset) {
  385.         return (offset == 0) ? scm_Table0 : scm_Table1;
  386.     }
  387. private:
  388.     C4naCmp(void);
  389.     static const Uint1    scm_Table0[256];
  390.     static const Uint1    scm_Table1[512];
  391. };
  392. // NCBI8na
  393. class C8naCmp
  394. {
  395. public:
  396.     static const Uint1* GetTable(void) { return scm_Table; }
  397. private:
  398.     C8naCmp(void);
  399.     static const Uint1    scm_Table[256];
  400. };
  401. /////////////////////////////////////////////////////////////////////////////
  402. //
  403. // ReverseComplement Tables
  404. // NCBI2na
  405. class C2naRevCmp
  406. {
  407. public:
  408.     static const Uint1* GetTable(size_t offset) { return scm_Tables[offset]; }
  409. private:
  410.     C2naRevCmp(void);
  411.     static const Uint1*   scm_Tables[4];
  412.     static const Uint1    scm_Table0[512];
  413.     static const Uint1    scm_Table1[512];
  414.     static const Uint1    scm_Table2[512];
  415.     static const Uint1    scm_Table3[256];
  416. };
  417. class C4naRevCmp
  418. {
  419. public:
  420.     static const Uint1* GetTable(size_t offset) { 
  421.         return (offset == 0) ? scm_Table0 : scm_Table1; 
  422.     }
  423. private:
  424.     C4naRevCmp(void);
  425.     static const Uint1*   scm_Tables[4];
  426.     static const Uint1    scm_Table0[512];
  427.     static const Uint1    scm_Table1[256];
  428. };
  429. /////////////////////////////////////////////////////////////////////////////
  430. //
  431. // Ambiguity Tables
  432. // IUPACna
  433. class CIupacnaAmbig
  434. {
  435. public:
  436.     static const bool* GetTable(void) { return scm_Table; }
  437. private:
  438.     CIupacnaAmbig(void);
  439.     static const bool    scm_Table[256];
  440. };
  441. // NCBI4na
  442. class CNcbi4naAmbig
  443. {
  444. public:
  445.     static const bool* GetTable(void) { return scm_Table; }
  446. private:
  447.     CNcbi4naAmbig(void);
  448.     static const bool    scm_Table[256];
  449. };
  450. // NCBI8na
  451. class CNcbi8naAmbig
  452. {
  453. public:
  454.     static const bool* GetTable(void) { return scm_Table; }
  455. private:
  456.     CNcbi8naAmbig(void);
  457.     static const bool    scm_Table[256];
  458. };
  459. END_NCBI_SCOPE
  460. #endif  /* UTIL_SEQUTIL___SEQUTIL_TABLES__HPP */
  461.  /*
  462. * ===========================================================================
  463. *
  464. * $Log: sequtil_tables.hpp,v $
  465. * Revision 1000.0  2003/10/29 16:03:19  gouriano
  466. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  467. *
  468. * Revision 1.1  2003/10/08 13:36:41  shomrat
  469. * Initial version
  470. *
  471. *
  472. * ===========================================================================
  473. */