From 94d04a1e503121a98b403f882c18a4f0799267d7 Mon Sep 17 00:00:00 2001 From: Calvin Morrison Date: Wed, 29 Jan 2014 11:53:30 -0500 Subject: add filtering based on consecutive mer lengths --- src/filter_melting_range.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/filter_melting_range.c (limited to 'src/filter_melting_range.c') diff --git a/src/filter_melting_range.c b/src/filter_melting_range.c new file mode 100644 index 0000000..2c89195 --- /dev/null +++ b/src/filter_melting_range.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +float melting_temperature(char *mer) { + + float a = 0; + float c = 0; + float g = 0; + float t = 0; + int i = 0; + + for(i = 0; i < strlen(mer); i++) { + switch(mer[i]) { + case 'A': + a++; + break; + case 'C': + c++; + break; + case 'G': + g++; + break; + case 'T': + t++; + break; + default: + break; + } + } + + if(strlen(mer) < 13) + return ((a+t) * 2) + ((c+g) * 4); + else + return 64.9 + 41.0*(g+c-16.4)/(a+t+g+c); +} + +int main(int argc, char **argv){ + + if(argc < 3) { + printf("please supply the min and max as stdargs"); + exit(EXIT_FAILURE); + } + float min = atof(argv[1]); + float max = atof(argv[2]); + + char mer[24] = { 0 }; + int count = 0; + + while(fscanf(stdin, "%s\t%d\n", &mer, &count) == 2) { + float temp = melting_temperature(mer); + if( (temp > min) && (temp < max) ) + printf("%s\t%d\n", mer, count); + } + + exit(EXIT_SUCCESS); +} -- cgit v1.2.3