aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile22
-rw-r--r--README.md6
-rwxr-xr-xSelectiveGenomeAmplification16
-rwxr-xr-xSelectiveGenomeAmplificationUI3
-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-xsrc/score_mers.py (renamed from score_mers.py)0
-rwxr-xr-xsrc/select_mers.py (renamed from select_mers.py)0
8 files changed, 46 insertions, 25 deletions
diff --git a/Makefile b/Makefile
index 8837865..f33dd1a 100644
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/README.md b/README.md
index 303658e..98f76f7 100644
--- a/README.md
+++ b/README.md
@@ -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