X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=binaries%2Fsrc%2FViennaRNA%2FH%2Fpair_mat.h;fp=binaries%2Fsrc%2FViennaRNA%2FH%2Fpair_mat.h;h=867862d8f571ce9eee115c7cecdd2d66e4ec4e0a;hb=7522ace91fc0804a9719dbac9f68bc8154da3132;hp=0000000000000000000000000000000000000000;hpb=8116c0444fe98e8eb21bcdd8ded06e1429085823;p=jabaws.git diff --git a/binaries/src/ViennaRNA/H/pair_mat.h b/binaries/src/ViennaRNA/H/pair_mat.h new file mode 100644 index 0000000..867862d --- /dev/null +++ b/binaries/src/ViennaRNA/H/pair_mat.h @@ -0,0 +1,148 @@ +#include +#include "utils.h" +#include "fold_vars.h" + +#define NBASES 8 +/*@notnull@*/ + +static const char Law_and_Order[] = "_ACGUTXKI"; +static int BP_pair[NBASES][NBASES]= +/* _ A C G U X K I */ +{{ 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 5, 0, 0, 5}, + { 0, 0, 0, 1, 0, 0, 0, 0}, + { 0, 0, 2, 0, 3, 0, 0, 0}, + { 0, 6, 0, 4, 0, 0, 0, 6}, + { 0, 0, 0, 0, 0, 0, 2, 0}, + { 0, 0, 0, 0, 0, 1, 0, 0}, + { 0, 6, 0, 0, 5, 0, 0, 0}}; + +#define MAXALPHA 20 /* maximal length of alphabet */ + +static short alias[MAXALPHA+1]; +static int pair[MAXALPHA+1][MAXALPHA+1]; +/* rtype[pair[i][j]]:=pair[j][i] */ +static int rtype[8] = {0, 2, 1, 4, 3, 6, 5, 7}; + +#ifdef _OPENMP +#pragma omp threadprivate(Law_and_Order, BP_pair, alias, pair, rtype) +#endif + +/* for backward compatibility */ +#define ENCODE(c) encode_char(c) + +static int encode_char(char c) { + /* return numerical representation of base used e.g. in pair[][] */ + int code; + if (energy_set>0) code = (int) (c-'A')+1; + else { + const char *pos; + pos = strchr(Law_and_Order, c); + if (pos==NULL) code=0; + else code = (int) (pos-Law_and_Order); + if (code>5) code = 0; + if (code>4) code--; /* make T and U equivalent */ + } + return code; +} + +/*@+boolint +charint@*/ +/*@null@*/ +extern char *nonstandards; +extern void nrerror(const char message[]); +static void make_pair_matrix(void) +{ + int i,j; + + if (energy_set==0) { + for (i=0; i<5; i++) alias[i] = (short) i; + alias[5] = 3; /* X <-> G */ + alias[6] = 2; /* K <-> C */ + alias[7] = 0; /* I <-> default base '@' */ + for (i=0; i G */ + alias[i++] = 2; /* B <-> C */ + } + for (i=1; i GC */ + i++; + pair[i][i-1] = 1; /* BA <-> CG */ + } + } + else if (energy_set==2) { + for (i=1; i A*/ + alias[i++] = 4; /* B <-> U */ + } + for (i=1; i AU */ + i++; + pair[i][i-1] = 6; /* BA <-> UA */ + } + } + else if (energy_set==3) { + for (i=1; i G */ + alias[i++] = 2; /* B <-> C */ + alias[i++] = 1; /* C <-> A */ + alias[i++] = 4; /* D <-> U */ + } + for (i=1; i GC */ + i++; + pair[i][i-1] = 1; /* BA <-> CG */ + i++; + pair[i][i+1] = 5; /* CD <-> AU */ + i++; + pair[i][i-1] = 6; /* DC <-> UA */ + } + } + else nrerror("What energy_set are YOU using??"); + for (i=0; i<=MAXALPHA; i++) { + for (j=0; j<=MAXALPHA; j++) + rtype[pair[i][j]] = pair[j][i]; + } + } +} + +static short *encode_sequence(const char *sequence, short how){ + unsigned int i,l = (unsigned int)strlen(sequence); + short *S = (short *) space(sizeof(short)*(l+2)); + + switch(how){ + /* standard encoding as always used for S */ + case 0: for(i=1; i<=l; i++) /* make numerical encoding of sequence */ + S[i]= (short) encode_char(toupper(sequence[i-1])); + S[l+1] = S[1]; + S[0] = (short) l; + break; + /* encoding for mismatches of nostandard bases (normally used for S1) */ + case 1: for(i=1; i<=l; i++) + S[i] = alias[(short) encode_char(toupper(sequence[i-1]))]; + S[l+1] = S[1]; + S[0] = S[l]; + break; + } + + return S; +}