32d7f059cbf363cf6b98a6139ad1e7975b59e116 larrym Mon Jul 5 20:12:09 2010 -0700 add dnaMotifBitScoreWithMarkovBg diff --git src/lib/dnaMarkov.c src/lib/dnaMarkov.c index 8ae47f4..f39bc58 100644 --- src/lib/dnaMarkov.c +++ src/lib/dnaMarkov.c @@ -175,3 +175,66 @@ mark2, slogMark2, 0, 1, 0); } +#define SIG 10 + +char *dnaMark2Serialize(double mark2[5][5][5]) +// serialize a 2nd order markov model +{ +int i, j, k; +int offset = 0; +char *buf = NULL; +int bufLen = 5*5*5 * (SIG + 3) + 1; +buf = needMem(bufLen); +for(i = 0; i < 5; i++) + for(j = 0; j < 5; j++) + for(k = 0; k < 5; k++) + { + if(offset) + { + sprintf(buf + offset, ";%1.*f", SIG, mark2[i][j][k]); + offset += (SIG + 3); + } + else + { + sprintf(buf + offset, "%1.*f", SIG, mark2[i][j][k]); + offset += (SIG + 2); + } + } +buf[offset] = 0; +return buf; +} + +void dnaMark2Deserialize(char *buf, double mark2[5][5][5]) +// deserialize a 2nd order markov model +{ +int i, j, k; +int offset = 0; +for(i = 0; i < 5; i++) + for(j = 0; j < 5; j++) + for(k = 0; k < 5; k++) + { + float f; + if(offset) + { + sscanf(buf + offset, ";%f", &f); + mark2[i][j][k] = f; + offset += (SIG + 3); + } + else + { + sscanf(buf + offset, "%f", &f); + mark2[i][j][k] = f; + offset += (SIG + 2); + } + } +} + +void dnaMarkMakeLog2(double mark2[5][5][5]) +// convert a 2nd-order markov array to log2 +{ +int i, j, k; +for(i = 0; i < 5; i++) + for(j = 0; j < 5; j++) + for(k = 0; k < 5; k++) + mark2[i][j][k] = logBase2(mark2[i][j][k]); +}