annotate clustalomega/clustal-omega-1.0.2/src/squid/revcomp.c @ 1:bc707542e5de

Uploaded
author clustalomega
date Thu, 21 Jul 2011 13:35:08 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
1 /*****************************************************************
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
2 * SQUID - a library of functions for biological sequence analysis
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
3 * Copyright (C) 1992-2002 Washington University School of Medicine
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
4 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
5 * This source code is freely distributed under the terms of the
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
6 * GNU General Public License. See the files COPYRIGHT and LICENSE
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
7 * for details.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
8 *****************************************************************/
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
9
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
10 /* revcomp.c
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
11 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
12 * Reverse complement of a IUPAC character string
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
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)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
14 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
15
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
16 #include <stdio.h>
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
17 #include <string.h>
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
18 #include <ctype.h>
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
19 #include "squid.h"
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
20
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
21 /* Function: revcomp()
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
22 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
23 * Purpose: Reverse complement seq; store in comp.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
24 * Can revcomp "in place" (revcomp(seq, seq)).
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
25 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
26 * Args: comp - destination for reverse complement of seq
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
27 * seq - sequence to reverse complement
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
28 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
29 * Returns: NULL on failure; or a (useless) pointer to comp.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
30 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
31 char *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
32 revcomp(char *comp, char *seq)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
33 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
34 char *s;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
35 char c;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
36
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
37 if (comp == NULL) return NULL;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
38 if (seq == NULL) return NULL;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
39
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
40 StrReverse(comp, seq);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
41 for (s = comp; *s != '\0'; s++)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
42 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
43 c = *s;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
44 c = sre_toupper(c);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
45 switch (c) {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
46 case 'A': c = 'T'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
47 case 'C': c = 'G'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
48 case 'G': c = 'C'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
49 case 'T': c = 'A'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
50 case 'U': c = 'A'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
51 case 'R': c = 'Y'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
52 case 'Y': c = 'R'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
53 case 'M': c = 'K'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
54 case 'K': c = 'M'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
55 case 'S': c = 'S'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
56 case 'W': c = 'W'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
57 case 'H': c = 'D'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
58 case 'D': c = 'H'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
59 case 'B': c = 'V'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
60 case 'V': c = 'B'; break;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
61 default: break; /* anything else? leave it; it's prob a gap or an X */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
62 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
63 if (islower((int) *s)) c = (char) sre_tolower((int) c);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
64 *s = c;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
65 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
66 return comp;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
67 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
68
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
69 #ifdef REVCOMP_TESTDRIVER
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
70 /* gcc -g -DREVCOMP_TESTDRIVER revcomp.c sre_string.c shuffle.c sre_math.c sre_ctype.c sqerror.c -lm
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
71 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
72 int
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
73 main(void)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
74 {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
75 float p[4] = {0.25, 0.25, 0.25, 0.25};
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
76 char *alphabet = "ACGT";
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
77 int len = 10;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
78 char *seq;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
79
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
80 seq = RandomSequence(alphabet, p, 4, len);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
81 printf("%s\n", seq);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
82 revcomp(seq, seq);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
83 printf("%s\n", seq);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
84 free(seq);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
85 exit(0);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
86 }
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
87 #endif