source: branches/stable/PRIMER_DESIGN/PRD_Globals.hxx

Last change on this file was 16766, checked in by westram, 6 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1#ifndef PRD_GLOBALS_HXX
2#define PRD_GLOBALS_HXX
3
4#ifndef _GLIBCXX_CLIMITS
5#include <climits>
6#endif
7#ifndef ARB_ASSERT_H
8#include <arb_assert.h>
9#endif
10#ifndef ARBTOOLS_H
11#include <arbtools.h>
12#endif
13
14#define prd_assert(cond) arb_assert(cond)
15
16#ifndef MAX_LONG
17#define MAX_LONG LONG_MAX
18#endif
19
20#define PRD_MAX_SEQUENCE_POS MAX_LONG
21typedef long int PRD_Sequence_Pos;
22
23
24//
25// BaseInverter is used to invert bases while matching sequence
26// backwards vs. the primertrees
27//
28struct BaseInverter {
29    char BASE[128];
30
31    BaseInverter() {
32        for (int i=0; i < 128; i++)
33            BASE[i] = '\x00';
34
35        BASE[(unsigned char)'A'] = 'T';
36        BASE[(unsigned char)'T'] = 'A';
37        BASE[(unsigned char)'U'] = 'A';
38        BASE[(unsigned char)'C'] = 'G';
39        BASE[(unsigned char)'G'] = 'C';
40
41        BASE[(unsigned char)'R'] = 'Y';
42        BASE[(unsigned char)'M'] = 'K';
43        BASE[(unsigned char)'S'] = 'S';
44        BASE[(unsigned char)'Y'] = 'R';
45        BASE[(unsigned char)'K'] = 'M';
46        BASE[(unsigned char)'W'] = 'W';
47        BASE[(unsigned char)'V'] = 'B';
48        BASE[(unsigned char)'B'] = 'V';
49        BASE[(unsigned char)'D'] = 'H';
50        BASE[(unsigned char)'H'] = 'D';
51        BASE[(unsigned char)'N'] = 'N';
52    }
53};
54
55static BaseInverter INVERT;
56
57
58struct ChildLookupTable {
59    int INDEX[128];
60
61    ChildLookupTable() {
62        for (int i=0; i < 128; i++) INDEX[i] = -1;
63
64        INDEX[(unsigned char)'C'] = 0;
65        INDEX[(unsigned char)'G'] = 1;
66        INDEX[(unsigned char)'A'] = 2;
67        INDEX[(unsigned char)'T'] = 3;
68        INDEX[(unsigned char)'U'] = 3;
69    }
70};
71
72static ChildLookupTable CHAR2CHILD;
73
74
75class BitField {
76    // Meaning of single bits:
77    //  2^0 = 1 = A
78    //  2^1 = 2 = T/U
79    //  2^2 = 4 = C
80    //  2^3 = 8 = G
81public:
82    unsigned int FIELD[128]; // bitoperations are done as unsigned int :(
83
84    BitField() {
85        for (int i=0; i < 128; i++)
86            FIELD[i] = 0;
87
88        FIELD[(unsigned char)'A'] =  1;
89        FIELD[(unsigned char)'T'] =  2;
90        FIELD[(unsigned char)'U'] =  2;
91        FIELD[(unsigned char)'C'] =  4;
92        FIELD[(unsigned char)'G'] =  8;
93
94        FIELD[(unsigned char)'R'] =  9; // A  G
95        FIELD[(unsigned char)'M'] =  5; // A C
96        FIELD[(unsigned char)'S'] = 12; //   CG
97        FIELD[(unsigned char)'Y'] =  6; //  TC
98        FIELD[(unsigned char)'K'] = 10; //  T G
99        FIELD[(unsigned char)'W'] =  3; // AT
100        FIELD[(unsigned char)'V'] = 13; // A CG
101        FIELD[(unsigned char)'B'] = 14; //  TCG
102        FIELD[(unsigned char)'D'] = 11; // AT G
103        FIELD[(unsigned char)'H'] =  7; // ATC
104        FIELD[(unsigned char)'N'] = 15; // ATCG
105    }
106};
107
108static BitField CHAR2BIT;
109
110#else
111#error PRD_Globals.hxx included twice
112#endif // PRD_GLOBALS_HXX
Note: See TracBrowser for help on using the repository browser.