1
/*****************************************************************
2
* SQUID - a library of functions for biological sequence analysis
3
* Copyright (C) 1992-2002 Washington University School of Medicine
5
* This source code is freely distributed under the terms of the
6
* GNU General Public License. See the files COPYRIGHT and LICENSE
8
*****************************************************************/
12
* Reverse complement of a IUPAC character string
13
* RCS $Id: revcomp.c 217 2011-03-19 10:27:10Z andreas $ (Original squid RCS Id: revcomp.c,v 1.5 2002/06/25 20:06:06 eddy Exp)
21
/* Function: revcomp()
23
* Purpose: Reverse complement seq; store in comp.
24
* Can revcomp "in place" (revcomp(seq, seq)).
26
* Args: comp - destination for reverse complement of seq
27
* seq - sequence to reverse complement
29
* Returns: NULL on failure; or a (useless) pointer to comp.
32
revcomp(char *comp, char *seq)
37
if (comp == NULL) return NULL;
38
if (seq == NULL) return NULL;
40
StrReverse(comp, seq);
41
for (s = comp; *s != '\0'; s++)
46
case 'A': c = 'T'; break;
47
case 'C': c = 'G'; break;
48
case 'G': c = 'C'; break;
49
case 'T': c = 'A'; break;
50
case 'U': c = 'A'; break;
51
case 'R': c = 'Y'; break;
52
case 'Y': c = 'R'; break;
53
case 'M': c = 'K'; break;
54
case 'K': c = 'M'; break;
55
case 'S': c = 'S'; break;
56
case 'W': c = 'W'; break;
57
case 'H': c = 'D'; break;
58
case 'D': c = 'H'; break;
59
case 'B': c = 'V'; break;
60
case 'V': c = 'B'; break;
61
default: break; /* anything else? leave it; it's prob a gap or an X */
63
if (islower((int) *s)) c = (char) sre_tolower((int) c);
69
#ifdef REVCOMP_TESTDRIVER
70
/* gcc -g -DREVCOMP_TESTDRIVER revcomp.c sre_string.c shuffle.c sre_math.c sre_ctype.c sqerror.c -lm
75
float p[4] = {0.25, 0.25, 0.25, 0.25};
76
char *alphabet = "ACGT";
80
seq = RandomSequence(alphabet, p, 4, len);