From 96fdab29cf1cf500246d6ac84f1334bf7fa93bd4 Mon Sep 17 00:00:00 2001 From: Calvin Morrison Date: Fri, 17 Jan 2014 13:42:09 -0500 Subject: add melting_range c code, update python, update makefile --- Makefile | 8 ++++-- below_melting_temperature.py | 23 ++++++------------ melting_range.c | 58 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 17 deletions(-) create mode 100644 melting_range.c diff --git a/Makefile b/Makefile index 1f8d839..0a9e43f 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,14 @@ VERSION=\"v0.0.1\" CC = gcc CFLAGS = -O3 -s -mtune=native -Wall -DVERSION=$(VERSION) -Wextra -all: strstream +all: strstream melting_range strstreamone strstream: strstream.c $(CC) strstream.c -o strstream $(CLIBS) $(CFLAGS) +strstreamone: strstreamone.c + $(CC) strstreamone.c -o strstreamone $(CLIBS) $(CFLAGS) +melting_range: melting_range.c + $(CC) melting_range.c -o melting_range $(CLIBS) $(CFLAGS) clean: - rm -vf kmer_total_count kmer_counts_per_sequence libkmer.so libkmer.a libkmer.o + rm -vf strstream melting_range diff --git a/below_melting_temperature.py b/below_melting_temperature.py index bc4157e..e2521db 100644 --- a/below_melting_temperature.py +++ b/below_melting_temperature.py @@ -1,8 +1,6 @@ import sys -from multiprocessing import Pool -def above_melting_temperature(kmer_with_count): - kmer = kmer_with_count.split("\t")[0] +def in_temp_range(kmer): A = kmer.count('A') C = kmer.count('C') @@ -16,18 +14,13 @@ def above_melting_temperature(kmer_with_count): else: melt_temp = 64.9 + 41*(G+C-16.4)/(A+T+G+C) - if melt_temp < max_melting_temp: - return kmer_with_count - else: - return 0 - + return min_melting_temp < melt_temp < max_melting_temp -lines = sys.stdin.readlines() -max_melting_temp = float(sys.argv[1]) +min_melting_temp = float(sys.argv[1]) +max_melting_temp = float(sys.argv[2]) -p = Pool() -output = p.map(above_melting_temperature, lines) -for line in output: - if line != 0: - sys.stdout.write(line) +output = [] +for line in sys.stdin: + if in_temp_range(line.split("\t")[0]): + sys.stdout.write(line) \ No newline at end of file diff --git a/melting_range.c b/melting_range.c new file mode 100644 index 0000000..2c89195 --- /dev/null +++ b/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