aboutsummaryrefslogtreecommitdiff
path: root/SelectiveWholeGenomeAmplificationUI
blob: decf5a182b43b502120bcb80d149c82a495471bc (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
#!/usr/bin/env python
foreground = ""
background = ""

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

variables = {}

questions = [
	{ 'question' : "Where would you like your output directory to be?", 
	  'default_str': 'current directory/foreground_background/',
	  'variable': 'output_directory' },

	{'question': "Where would you like to temporary files to be stored?",
	 'default_str': '$output_directory/.tmp',
	 'variable': "temp_directory" },

	{'question': "Where would you like to count files to be stored?",
	 'default_str': '$output_directory/.tmp',
	 'variable': "counts_directory" },

	{ 'question': 'maximum mer size you would like to pick?',
	  'default_str': '12',
	  'variable': 'max_mer_range' },

	{ 'question': 'minimum mer size you would like to pick?',
	  'default_str': '6',
	  'variable': 'min_mer_range' },

	{ 'question': 'eliminate mers that appear less frequently on average than this number ?',
	  'default_str': '50000',
	  'variable': 'min_foreground_binding_average' },

	{ 'question': 'maximum size of mer combinations you want to search and select?',
	  'default_str': '15',
	  'variable': 'max_select' },

	{ 'question': 'maximum number of mers you want to use as possible primers?',
	  'default_str': '35',
	  'variable': 'max_check' },

	{'question': 'enter mers to ignore? (space seperated)',
	 'default_str': "None",
	 'variable': 'ignore_mers'},

	{'question': 'enter files to ignore all mers from? (space seperated)',
	 'default_str': "None",
	 'variable': 'ignore_all_mers_from_files'},

	{ 'question': 'maximum distance between mers in the final selection?',
	  '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': 'maximum number of consecutively binding mers in hetero and homodimers?', 'default_str': '4', 'variable': 'max_consecutive_binding' },
	{ 'question': 'what extra weight do you want for highgly binding primers? (0-1)', 'default_str': '0', 'variable': 'fg_weight' },
  { 'question': 'what extra weight do you want for sets with a higher number of primers? (0-1)', 'default_str': '0', 'variable': 'primer_weight'},
	{ 'question': 'how many scored sets would you like in the top_scored_sets output file?', 'default_str':'10000', 'variable': 'output_top_nb'},
	{ 'question': 'would you like to use a custom scoring function? see README.md for details', 'default_str':'', 'variable': '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['question']
	default_str = question_dict['default_str']

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

	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


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['question'], q['default'])
		else:
			res = ask(q)

		variables[q['variable']] = res 

	foreground = raw_input("Input the path to your foreground file:")
	background = raw_input("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))