diff options
-rw-r--r-- | Makefile | 22 | ||||
-rw-r--r-- | README.md | 6 | ||||
-rwxr-xr-x | SelectiveGenomeAmplification | 16 | ||||
-rwxr-xr-x | SelectiveGenomeAmplificationUI | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | src/filter_max_consecutive_binding.py (renamed from src/max_consecutive_bindings.py) | 24 | ||||
-rw-r--r-- | src/filter_melting_range.c (renamed from src/melting_range.c) | 0 | ||||
-rwxr-xr-x | src/score_mers.py (renamed from score_mers.py) | 0 | ||||
-rwxr-xr-x | src/select_mers.py (renamed from select_mers.py) | 0 |
8 files changed, 46 insertions, 25 deletions
@@ -1,24 +1,22 @@ VERSION=\"v0.0.1\" CC = gcc CFLAGS = -O3 -s -mtune=native -Wall -DVERSION=$(VERSION) -Wextra -SRC = src -BIN = bin DEST = /usr/local/bin/ -all: output_dir $(BIN)/strstream $(BIN)/melting_range $(BIN)/strstreamone +all: output_dir bin/strstream bin/filter_melting_range bin/strstreamone output_dir: - mkdir -p $(BIN) -$(BIN)/strstream: $(SRC)/strstream.c - $(CC) $(SRC)/strstream.c -o $(BIN)/strstream $(CLIBS) $(CFLAGS) -$(BIN)/strstreamone: $(SRC)/strstreamone.c - $(CC) $(SRC)/strstreamone.c -o $(BIN)/strstreamone $(CLIBS) $(CFLAGS) -$(BIN)/melting_range: $(SRC)/melting_range.c - $(CC) $(SRC)/melting_range.c -o $(BIN)/melting_range $(CLIBS) $(CFLAGS) + mkdir -p bin +bin/strstream: src/strstream.c + $(CC) src/strstream.c -o bin/strstream $(CLIBS) $(CFLAGS) +bin/strstreamone: src/strstreamone.c + $(CC) src/strstreamone.c -o bin/strstreamone $(CLIBS) $(CFLAGS) +bin/filter_melting_range: src/filter_melting_range.c + $(CC) src/filter_melting_range.c -o bin/filter_melting_range $(CLIBS) $(CFLAGS) clean: - rm -vf $(BIN)/strstream $(BIN)/melting_range $(BIN)/strstreamone + rm -vf bin/* -Rv install: all - install -c $(BIN)/strstream $(BIN)/melting_range $(BIN)/strstreamone SelectiveGenomeAmplification select_mers.py score_mers.py $(DEST) + install -c bin/strstream bin/filter_melting_range bin/strstreamone SelectiveGenomeAmplification src/select_mers.py src/score_mers.py src/filter_max_consecutive_binding.py $(DEST) @@ -42,7 +42,9 @@ Y | tmp_directory=$output_directory/.tmp | temporary files directory Y | max_melting_temp | 30° | maximum melting temp of mers Y | min_melting_temp | 0° | minimum melting temp of mers Y | min_mer_count | Not Enabled (0) | only select mers that occur more frequently than this number -Y | max_select | maximum number of mers to pick -Y | ignore_mers | Not Enabled | mers to explicitly ignore, space seperated ex. ignore_mers="ACAGTA ACCATAA ATATATAT" +Y | max\_select | maximum number of mers to pick +Y | ignore\_mers | Not Enabled | mers to explicitly ignore, space seperated ex. ignore\_mers="ACAGTA ACCATAA ATATATAT" Y | foreground | Not Enabled | path of foreground file Y | background | Not Enabled | path of background file +Y | max\_consecutive\_binding | 4 | The maxium number of consecutive binding nucleotides in homodimer and heterodimers + diff --git a/SelectiveGenomeAmplification b/SelectiveGenomeAmplification index 543f90b..fcbd5dd 100755 --- a/SelectiveGenomeAmplification +++ b/SelectiveGenomeAmplification @@ -41,6 +41,8 @@ fi : ${max_select=15} # mers to specifically IGNORE, space delimited : ${ignore_mers=''} +# maximum number of mers that are consecutively binding +: ${max_consecutive_binding=4} export ignore_mers export min_mer_range @@ -124,16 +126,16 @@ for var in ignore_mers min_mer_range max_mer_range max_select min_mer_count max_ echo $var "${!var}" >> $output_directory/$current_run/parameters done; -echo "checking if mers are below melting temperature in the foreground" -rm $fg_counts-non-melting -melting_range $min_melting_temp $max_melting_temp < $fg_counts > $fg_counts-non-melting +echo "checking if mers are within the melting range $min_melting_temp $max_melting_temp" +cat $fg_counts | filter_melting_range $min_melting_temp $max_melting_temp > $fg_counts-non-melting +cat $bg_counts | filter_melting_range $min_melting_temp $max_melting_temp > $bg_counts-non-melting -echo "checking if mers are below melting temperature in the background" -rm $bg_counts-non-melting -melting_range $min_melting_temp $max_melting_temp < $bg_counts > $bg_counts-non-melting +echo "filtering out elements that have more consecutive binding mers than allowed by default $max_consecutive_binding" +cat $fg_counts-non-melting | filter_max_consecutive_binding.py $max_consecutive_binding > $fg_counts-filtered-binding +cat $bg_counts-non-melting | filter_max_consecutive_binding.py $max_consecutive_binding > $bg_counts-filtered-binding echo "scoring mer selectivity" -select_mers.py $fg_counts-non-melting $fg_tmp $bg_counts-non-melting $bg_tmp > $selected +select_mers.py $fg_counts-filtered-binding $fg_tmp $bg_counts-filtered-binding $bg_tmp > $selected echo "scoring top mers based on selectivity" score_mers.py $selected $fg_tmp $bg_tmp $output_directory/$current_run/scores-output diff --git a/SelectiveGenomeAmplificationUI b/SelectiveGenomeAmplificationUI index 79f5b9c..d6a6bb5 100755 --- a/SelectiveGenomeAmplificationUI +++ b/SelectiveGenomeAmplificationUI @@ -35,7 +35,8 @@ questions = [ 'default_str': "5000 bases", 'variable': 'max_mer_distance' }, { 'question': 'maximum melting temperature for mers?', 'default_str': '30c', 'variable': 'max_melting_temp' }, - { 'question': 'minimum melting temperature for mers?', 'default_str': '0c', 'variable': 'min_melting_temp' } + { 'question': 'minimum melting temperature for mers?', 'default_str': '0c', 'variable': 'min_melting_temp' }, + { 'question': 'maximum number of consecutively binding mers in hetero and homodimers?', 'default_str': '4', 'variable': 'max_consecutive_binding' } ] diff --git a/src/max_consecutive_bindings.py b/src/filter_max_consecutive_binding.py index a2e6c8d..daebee4 100644..100755 --- a/src/max_consecutive_bindings.py +++ b/src/filter_max_consecutive_binding.py @@ -1,14 +1,16 @@ -import sys +#!/usr/bin/env python +import sys, os binding = { 'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C', '_': False } -def max_consecutive_bindings(mer1, mer2): +def max_consecutive_binding(mer1, mer2): if len(mer2) > len(mer1): mer1, mer2 = mer2, mer1 # reverse mer2, mer2 = mer2[::-1] + # pad mer one to avoid errors mer1 = mer1.ljust(len(mer1) + len(mer1), "_") max_bind = 0; @@ -42,7 +44,7 @@ def test(): print 'pass\tmer1\tmer2\tres\tcorr' for mer_combination in arr: response = [] - ans = max_consecutive_bindings(mer_combination[0], mer_combination[1]) + ans = max_consecutive_binding(mer_combination[0], mer_combination[1]) response.append(str(ans == mer_combination[2])) response.append(mer_combination[0]) @@ -52,3 +54,19 @@ def test(): print '\t'.join(response) +def main(): + + if(len(sys.argv) < 2): + print "cutoff is expected as an argument" + exit() + else: + cutoff = int(sys.argv[1]) + + for line in sys.stdin: + mer = line.split()[0] + if max_consecutive_binding(mer, mer) < cutoff: + sys.stdout.write(line) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/melting_range.c b/src/filter_melting_range.c index 2c89195..2c89195 100644 --- a/src/melting_range.c +++ b/src/filter_melting_range.c diff --git a/score_mers.py b/src/score_mers.py index 0a73cfb..0a73cfb 100755 --- a/score_mers.py +++ b/src/score_mers.py diff --git a/select_mers.py b/src/select_mers.py index 21306cc..21306cc 100755 --- a/select_mers.py +++ b/src/select_mers.py |