ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/gclib/gdna.cpp
Revision: 2
Committed: Mon Mar 22 22:03:27 2010 UTC (9 years, 5 months ago) by gpertea
File size: 1266 byte(s)
Log Message:
added my gclib source files

Line User Rev File contents
1 gpertea 2 #include "gdna.h"
2     #include <string.h>
3    
4     #define IUPAC_DEFS "AaCcTtGgUuMmRrWwSsYyKkVvHhDdBbNnXx-*"
5     #define IUPAC_COMP "TtGgAaCcAaKkYyWwSsRrMmBbDdHhVvNnXx-*"
6    
7     unsigned char ntCompTable[256];
8    
9     static bool gdna_ntCompTableReady=ntCompTableInit();
10    
11     char ntComplement(char c) {
12     return ntCompTable[(int)c];
13     }
14    
15     //in place reverse complement of nucleotide (sub)sequence
16     char* reverseComplement(char* seq, int slen) {
17     if (slen==0) slen=strlen(seq);
18     //reverseChars(seq,len);
19     int l=0;
20     int r=slen-1;
21     register char c;
22     while (l<r) {
23     c=seq[l];seq[l]=seq[r];
24     seq[r]=c; //this was: swap(str[l],str[r]);
25     l++;r--;
26     }
27     for (int i=0;i<slen;i++) seq[i]=ntComplement(seq[i]);
28     return seq;
29     }
30    
31     bool ntCompTableInit() {
32     //if (gdna_ntCompTableReady) return true;
33     char n[]=IUPAC_DEFS;
34     char c[]=IUPAC_COMP;
35     int l=strlen(IUPAC_DEFS);
36     ntCompTable[0]=0;
37     for (int ch=1;ch<256;ch++) {
38     ntCompTable[ch]=0;
39     for (int i=0;i<l;i++)
40     if (ch==n[i]) {
41     ntCompTable[ch]=c[i];
42     break;
43     }
44     if (ntCompTable[ch]==0)
45     ntCompTable[ch]='N';
46     }
47     //gdna_ntCompTableReady=true;
48     return true;
49     }