Mercurial > repos > jbrayet > rsat
comparison matrixScan_wrapper.py @ 30:24dd26f2918f draft
Uploaded
author | jbrayet |
---|---|
date | Tue, 22 Sep 2015 08:02:44 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
29:b34046b02556 | 30:24dd26f2918f |
---|---|
1 #! /usr/bin/python | |
2 # -*- coding: utf8 -*- | |
3 """#Matrix Scan - developed by Jocelyn Brayet <jocelyn.brayet@curie.fr> | |
4 #Copyright (C) 2015 Institut Curie | |
5 # | |
6 #This program is free software: you can redistribute it and/or modify | |
7 #it under the terms of the GNU General Public License as published by | |
8 #the Free Software Foundation, either version 3 of the License, or | |
9 #(at your option) any later version. | |
10 # | |
11 #This program is distributed in the hope that it will be useful, | |
12 #but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 #GNU General Public License for more details. | |
15 # | |
16 #You should have received a copy of the GNU General Public License | |
17 #along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 # | |
19 ###########################################################' | |
20 # | |
21 #Client to download matrix scan results from RSAT server. | |
22 # | |
23 # | |
24 #usage: matrixScan_wrapper.py [-h] -sequence <SEQUENCE> -matrix <MATRIX> | |
25 # -n_treatment <N_TREATMENT> -markov <MARKOV> | |
26 # -matrix_format <MATRIX_FORMAT> | |
27 # [-organism <ORGANISM>] [-background <BACKGROUND>] | |
28 # [-origin <ORIGIN>] [-return_param <RETURN_PARAM>] | |
29 # [-uth <UTH>] -server <SERVEUR> -outGalaxy | |
30 # <OUT_GALAXY> | |
31 # | |
32 #optional arguments: | |
33 # -h, --help show this help message and exit | |
34 # -sequence <SEQUENCE>, --sequence <SEQUENCE> | |
35 # Sequence(s) to scan - all the formats supported in | |
36 # RSAT can be used as input (default: fasta). | |
37 # -matrix <MATRIX>, --matrix <MATRIX> | |
38 # Matrix/ces to scan with. The matrix format is | |
39 # specified with the option "matrix_format" (see below) | |
40 # Default format: tab. | |
41 # -n_treatment <N_TREATMENT>, --n_treatment <N_TREATMENT> | |
42 # Treatment of N characters. These characters are often | |
43 # used in DNA sequences to represent undefined or masked | |
44 # nucleotides (skip or score). | |
45 # -markov <MARKOV>, --markov <MARKOV> | |
46 # Order of the markov chain for the background model. | |
47 # -matrix_format <MATRIX_FORMAT>, --matrix_format <MATRIX_FORMAT> | |
48 # Supported fields: tab, cb, transfac, jaspar, | |
49 # consensus, gibbs, meme, assembly. | |
50 # -organism <ORGANISM>, --organism <ORGANISM> | |
51 # To use a precalculated background model from RSAT, | |
52 # choose the organism corresponding to the background | |
53 # model. | |
54 # -background <BACKGROUND>, --background <BACKGROUND> | |
55 # Type of sequences used as background model for | |
56 # estimating expected oligonucleotide frequencies. | |
57 # Supported: upstream, upstream-noorf | |
58 # -origin <ORIGIN>, --origin <ORIGIN> | |
59 # Define the origin for the calculation of positions. | |
60 # -return_param <RETURN_PARAM>, --return_param <RETURN_PARAM> | |
61 # List of fields to return. | |
62 # -uth <UTH>, --uth <UTH> | |
63 # Lower threshold on some parameter. | |
64 # -server <SERVEUR>, --server <SERVEUR> | |
65 # -outGalaxy <OUT_GALAXY>, --outGalaxy <OUT_GALAXY> | |
66 # | |
67 #Version 0.1 - 10/03/2015 | |
68 # | |
69 ###########################################################""" | |
70 __author__ = 'Jocelyn Brayet' | |
71 matrixScanVersion = '0.1 - 10/03/2015' | |
72 | |
73 | |
74 ###########################################################' | |
75 ## Import | |
76 | |
77 import argparse | |
78 import os | |
79 import urllib | |
80 from suds.client import Client | |
81 import platform | |
82 | |
83 ###########################################################' | |
84 | |
85 ################################ functions ############################################################ | |
86 ## Define a function to make a service perform the desired request using provided arguments | |
87 def call_run_service(service, args): | |
88 """ | |
89 Run job in RSAT server. | |
90 service -> RSAT web service | |
91 args -> web service request | |
92 """ | |
93 | |
94 result = rsat_service.matrix_scan(args) | |
95 return result | |
96 | |
97 def testNone(argument): | |
98 """ | |
99 Test if argument is None or not. | |
100 argument -> argument give by user | |
101 """ | |
102 | |
103 if not argument is None: | |
104 variable = argument[0] | |
105 else: | |
106 variable = "" | |
107 return variable | |
108 | |
109 ###########################################################' | |
110 | |
111 ###########################################################' | |
112 # server dictionary | |
113 serverDict = { | |
114 | |
115 #http://protists.rsat.eu/ | |
116 "fr_ens":"http://rsat01.biologie.ens.fr/rsa-tools/web_services/RSATWS.wsdl", | |
117 "fr_mrs":"http://rsat-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | |
118 "fr_ro":"http://rsat.sb-roscoff.fr/web_services/RSATWS.wsdl", | |
119 "fr_mrs_2":"http://pedagogix-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | |
120 "es":"http://floresta.eead.csic.es/rsat/web_services/RSATWS.wsdl", | |
121 "mx":"http://embnet.ccg.unam.mx/rsa-tools/web_services/RSATWS.wsdl" | |
122 | |
123 } | |
124 | |
125 | |
126 if __name__ == '__main__': | |
127 | |
128 parser = argparse.ArgumentParser(description='Client to download matrix-scan results from RSAT server.', epilog='Version '+matrixScanVersion) | |
129 | |
130 | |
131 ########### convert matrix arguments #################### | |
132 | |
133 parser.add_argument('-sequence', '--sequence', metavar='<SEQUENCE>', type=argparse.FileType('r'), nargs=1, help='Sequence(s) to scan - all the formats supported in RSAT can be used as input (default: fasta).', required=True) | |
134 parser.add_argument('-matrix', '--matrix', metavar='<MATRIX>', type=argparse.FileType('r'), nargs=1, help='Matrix/ces to scan with. The matrix format is specified with the option "matrix_format" (see below) Default format: tab.', required=True) | |
135 parser.add_argument('-n_treatment', '--n_treatment', metavar='<N_TREATMENT>', type=str, nargs=1, help='Treatment of N characters. These characters are often used in DNA sequences to represent undefined or masked nucleotides (skip or score).', required=True) | |
136 parser.add_argument('-markov', '--markov', metavar='<MARKOV>', type=int, nargs=1, help='Order of the markov chain for the background model.', required=True) | |
137 parser.add_argument('-matrix_format', '--matrix_format', metavar='<MATRIX_FORMAT>', type=str, nargs=1, help='Supported fields: tab, cb, transfac, jaspar, consensus, gibbs, meme, assembly.', required=True) | |
138 | |
139 parser.add_argument('-organism', '--organism', metavar='<ORGANISM>', type=str, nargs=1, help='To use a precalculated background model from RSAT, choose the organism corresponding to the background model.', required=False) | |
140 parser.add_argument('-background', '--background', metavar='<BACKGROUND>', type=str, nargs=1, help='Type of sequences used as background model for estimating expected oligonucleotide frequencies. Supported: upstream, upstream-noorf', required=False) | |
141 #parser.add_argument('-background_model', '--background_model', metavar='<BACKGROUND_MODEL>', type=str, nargs=1, help='Background model is a tab-delimited specification of oligonucleotide frequencies.', required=True) | |
142 parser.add_argument('-origin', '--origin', metavar='<ORIGIN>', type=str, nargs=1, help='Define the origin for the calculation of positions.', required=False) | |
143 parser.add_argument('-return_param', '--return_param', metavar='<RETURN_PARAM>', type=str, nargs=1, help='List of fields to return.', required=False) | |
144 parser.add_argument('-uth', '--uth', metavar='<UTH>', type=str, nargs=1, help='Lower threshold on some parameter.', required=False) | |
145 | |
146 #parser.add_argument('-quick', '--quick', metavar='<QUICK>', type=str, help='Delegates scanning to the C program matrix-scan-quick.', required=True) | |
147 | |
148 | |
149 ########### galaxy arguments ############################## | |
150 parser.add_argument('-server', '--server', metavar='<SERVEUR>', type=str, nargs=1, required=True) | |
151 parser.add_argument('-outGalaxy', '--outGalaxy', metavar='<OUT_GALAXY>', type=str, nargs=1, required=True) | |
152 ########################################################### | |
153 | |
154 | |
155 args = parser.parse_args() | |
156 | |
157 | |
158 | |
159 | |
160 ###########################################################' | |
161 | |
162 sequence_file = args.sequence[0].read() | |
163 matrix_file = args.matrix[0].read() | |
164 serverValue = testNone(args.server) | |
165 matrixFormatValue = testNone(args.matrix_format) | |
166 n_treatmentValue = testNone(args.n_treatment) | |
167 outGalaxyValue = testNone(args.outGalaxy) | |
168 markovValue = testNone(args.markov) | |
169 organismValue = testNone(args.organism) | |
170 backgroundValue = testNone(args.background) | |
171 originValue = testNone(args.origin) | |
172 returnValue = testNone(args.return_param) | |
173 uthValue = testNone(args.uth) | |
174 | |
175 #backgroundModelValue = testNone(args.background_model) | |
176 #quickValue = testNone(args.quick) | |
177 | |
178 ###########################################################' | |
179 ## Create the SOAP client to request the RSAT service | |
180 | |
181 | |
182 # Load Client class from suds | |
183 | |
184 # Define URL for RSAT services | |
185 url = serverDict[serverValue] | |
186 # Create the client | |
187 client = Client(url) | |
188 | |
189 # Need service interface to perform requests | |
190 rsat_service = client.service | |
191 | |
192 | |
193 #print client | |
194 #print(client.factory.create('matrix_scan')) | |
195 | |
196 #request = | |
197 # (MatrixScanRequest){ | |
198 # output = None | |
199 # sequence = None | |
200 # tmp_sequence_infile = None | |
201 # matrix = None | |
202 # tmp_matrix_infile = None | |
203 # sequence_format = None | |
204 # matrix_format = None | |
205 # quick = None | |
206 # n_treatment = None | |
207 # consensus_name = None | |
208 # pseudo = None | |
209 # equi_pseudo = None | |
210 # top_matrices = None | |
211 # background_model = None | |
212 # tmp_background_infile = None | |
213 # organism = None | |
214 # background = None | |
215 # background_input = None | |
216 # background_window = None | |
217 # markov = None | |
218 # background_pseudo = None | |
219 # return_fields = None | |
220 # sort_distrib = None | |
221 # lth[] = <empty> | |
222 # uth[] = <empty> | |
223 # str = None | |
224 # verbosity = None | |
225 # origin = None | |
226 # decimals = None | |
227 # crer_ids = None | |
228 # } | |
229 #} | |
230 | |
231 # Define client header | |
232 | |
233 userAgent = 'RSAT-Client/v%s (%s; Python %s; %s)' % ( | |
234 matrixScanVersion, | |
235 os.path.basename( __file__ ), | |
236 platform.python_version(), | |
237 platform.system() | |
238 ) | |
239 | |
240 httpHeaders = {'User-agent': userAgent} | |
241 client.set_options(headers=httpHeaders) | |
242 client.set_options(timeout=300) | |
243 | |
244 | |
245 if not uthValue == "": | |
246 matrixScanRequest = { | |
247 | |
248 #'output' : "ticket", | |
249 'sequence' : sequence_file, | |
250 'matrix' : matrix_file, | |
251 'markov' : markovValue, | |
252 'n_treatment' : n_treatmentValue, | |
253 'matrix_format' : matrixFormatValue, | |
254 'background' : backgroundValue, | |
255 'organism' : organismValue, | |
256 | |
257 'origin' : originValue, | |
258 'return_fields' : returnValue, | |
259 'uth' : 'pval ' + uthValue, | |
260 | |
261 #'background_window' : 12, | |
262 #'background_input' : " ", | |
263 | |
264 'quick' : "-quick" | |
265 | |
266 } | |
267 | |
268 else: | |
269 matrixScanRequest = { | |
270 | |
271 #'output' : "ticket", | |
272 'sequence' : sequence_file, | |
273 'matrix' : matrix_file, | |
274 'markov' : markovValue, | |
275 'n_treatment' : n_treatmentValue, | |
276 'matrix_format' : matrixFormatValue, | |
277 'background' : backgroundValue, | |
278 'organism' : organismValue, | |
279 | |
280 'origin' : originValue, | |
281 'return_fields' : returnValue, | |
282 #'background_window' : 12, | |
283 #'background_input' : " ", | |
284 | |
285 'quick' : "-quick" | |
286 | |
287 } | |
288 | |
289 | |
290 | |
291 #print matrixScanRequest | |
292 | |
293 result = call_run_service(rsat_service, matrixScanRequest) | |
294 | |
295 print url | |
296 | |
297 print "###############################################" | |
298 print "Command performed on server" | |
299 print result.command | |
300 print "###############################################" | |
301 print "Result" | |
302 print result.server | |
303 | |
304 nameFile = "matrix-scan_results.txt" | |
305 | |
306 urlResult=result.server.replace("$RSAT/public_html/",url.replace("web_services/RSATWS.wsdl","")) | |
307 | |
308 | |
309 urllib.urlretrieve(urlResult, nameFile) | |
310 | |
311 | |
312 os.popen("cp "+nameFile+" "+outGalaxyValue) | |
313 | |
314 |