aboutsummaryrefslogtreecommitdiff
path: root/SelectiveWholeGenomeAmplificationUI
blob: 5eb004995e1420a84cb95c8400a5b16ae85ba067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/env python2.7
import os.path

foreground = ""
background = ""

yes_no = {'Y': True, 'y': True,'n': False, 'N': False, 'yes': True, 'no': False, '': '' }

variables = {}

questions = [
	{ 'q' : "Where would you like your output directory to be?", 
	  'def': 'current directory/foreground_background/',
	  'v': 'output_directory' },

	{'q': "Where would you like to temporary files to be stored?",
	 'def': '$output_directory/.tmp',
	 'v': "temp_directory" },

	{'q': "Where would you like to count files to be stored?",
	 'def': '$output_directory/.tmp',
	 'v': "counts_directory" },

	{ 'q': 'maximum mer size you would like to pick?',
	  'def': '12',
	  'v': 'max_mer_range' },

	{ 'q': 'minimum mer size you would like to pick?',
	  'def': '6',
	  'v': 'min_mer_range' },

	{ 'q': 'eliminate mers that appear less frequently on average than this number ?',
	  'def': '50000',
	  'v': 'min_foreground_binding_average' },

	{ 'q': 'maximum size of mer combinations you want to search and select?',
	  'def': '15',
	  'v': 'max_select' },

	{ 'q': 'maximum number of mers you want to use as possible primers?',
	  'def': '35',
	  'v': 'max_check' },

	{'q': 'enter mers to ignore? (space seperated)',
	 'def': "None",
	 'v': 'ignore_mers'},

	{'q': 'enter files to ignore all mers from? (space seperated)',
	 'def': "None",
	 'v': 'ignore_all_mers_from_files'},

	{ 'q': 'maximum distance between mers in the final selection?',
	  'def': "5000 bases",
	  'v': 'max_mer_distance' },

	{ 'q': 'minimum background ratio?',
	  'def': "None",
	  'v': 'min_bg_ratio' },

	{ 'q': 'maximum melting temperature for mers?', 'def': '30c', 'v': 'max_melting_temp' },
	{ 'q': 'minimum melting temperature for mers?', 'def': '0c',  'v': 'min_melting_temp' },
	{ 'q': 'DNA Concentration (nM)?', 'def': '5000nM',  'v': 'dna_con' },
	{ 'q': 'Salt Concentration (mM) ?', 'def': '10mM',  'v': 'na_con' },
	{ 'q': 'Magnesium Concentration (mM)?', 'def': '20mM',  'v': 'mg_con' },
	{ 'q': 'dNTPs Concentration (mM) ?', 'def': '10mM',  'v': 'dntps_con' },
	{ 'q': 'maximum number of consecutively binding mers in hetero and homodimers?', 'def': '4', 'v': 'max_consecutive_binding' },
	{ 'q': 'what extra weight do you want for highgly binding primers? (0-1)', 'def': '0', 'v': 'fg_weight' },
  { 'q': 'what extra weight do you want for sets with a higher number of primers? (0-1)', 'def': '0', 'v': 'primer_weight'},
	{ 'q': 'how many scored sets would you like in the top_scored_sets output file?', 'def':'10000', 'v': 'output_top_nb'},
	{ 'q': 'would you like to use a custom scoring function? see README.md for details', 'def':'', 'v': 'score_func'}
]

def bool_ask(ask_string, default):
	ans = ""

	ask_string = ask_string + " (Y/N/Default=" + str(default) + ")" + ": "

	ans = raw_input(ask_string)
	while ans not in yes_no.keys():
		ans = raw_input(ask_string)
	if ans is '':
		ans = default

	return yes_no[ans]

def ask(question_dict):
	question = question_dict['q']
	default = question_dict['def']

	ask_string = question + " (Default=" + str(default) + ")" + ": "

	ans = raw_input(ask_string)
	return ans 

def variables_to_string(variables):
	ret = ""
	for variable in variables:
		if variables[variable] is not '':
			ret = ret + variable + "=\"" + variables[variable] + "\" "

	ret = ret + "foreground=\"" + foreground + "\" "
	ret = ret + "background=\"" + background + "\" "
	return ret

def run(variables_as_a_string):

	import subprocess
	try:
		subprocess.check_call(variables_as_a_string + " " + "SelectiveWholeGenomeAmplification " + foreground + " " + background, shell=True)
	except:
		pass

def file_ask(query):
	response = None
	while response is None:
		response = raw_input(query)
		if os.path.isfile(response) is not True:
			print "That file doesn't exist."
			response = None

	return response


if(bool_ask("would you like to input all your variables at once?", "n")):
	variables = raw_input("Please paste in your variables (space delimited) and Run:")
	run(variables)

	raw_input("Press Enter to exit...")

else:
	for q in questions:
		if 'bool' in q:
			res = ask_bool(q['q'], q['def'])
		else:
			res = ask(q)

		variables[q['v']] = res 

	foreground = file_ask("Input the path to your foreground file:")
	background = file_ask("Input the path to your background file:")

	if(bool_ask("Would you like to output your inserted variables to a string you can later paste?", "y")):
		print variables_to_string(variables)

	if(bool_ask("Run SelectiveWholeGenomeAmplification?", "y")):
		run(variables_to_string(variables))