changeset 30:24dd26f2918f draft

Uploaded
author jbrayet
date Tue, 22 Sep 2015 08:02:44 -0400
parents b34046b02556
children 4f7cb568384f
files matrixScan_wrapper.py
diffstat 1 files changed, 314 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matrixScan_wrapper.py	Tue Sep 22 08:02:44 2015 -0400
@@ -0,0 +1,314 @@
+#! /usr/bin/python
+# -*- coding: utf8 -*-
+"""#Matrix Scan - developed by Jocelyn Brayet <jocelyn.brayet@curie.fr>
+#Copyright (C) 2015  Institut Curie
+#
+#This program is free software: you can redistribute it and/or modify
+#it under the terms of the GNU General Public License as published by
+#the Free Software Foundation, either version 3 of the License, or
+#(at your option) any later version.
+#
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#GNU General Public License for more details.
+#
+#You should have received a copy of the GNU General Public License
+#along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+###########################################################'
+# 
+#Client to download matrix scan results from RSAT server.
+#
+#
+#usage: matrixScan_wrapper.py [-h] -sequence <SEQUENCE> -matrix <MATRIX>
+#                             -n_treatment <N_TREATMENT> -markov <MARKOV>
+#                             -matrix_format <MATRIX_FORMAT>
+#                             [-organism <ORGANISM>] [-background <BACKGROUND>]
+#                             [-origin <ORIGIN>] [-return_param <RETURN_PARAM>]
+#                             [-uth <UTH>] -server <SERVEUR> -outGalaxy
+#                             <OUT_GALAXY>
+#
+#optional arguments:
+#  -h, --help            show this help message and exit
+#  -sequence <SEQUENCE>, --sequence <SEQUENCE>
+#                        Sequence(s) to scan - all the formats supported in
+#                        RSAT can be used as input (default: fasta).
+#  -matrix <MATRIX>, --matrix <MATRIX>
+#                        Matrix/ces to scan with. The matrix format is
+#                        specified with the option "matrix_format" (see below)
+#                        Default format: tab.
+#  -n_treatment <N_TREATMENT>, --n_treatment <N_TREATMENT>
+#                        Treatment of N characters. These characters are often
+#                        used in DNA sequences to represent undefined or masked
+#                        nucleotides (skip or score).
+#  -markov <MARKOV>, --markov <MARKOV>
+#                        Order of the markov chain for the background model.
+#  -matrix_format <MATRIX_FORMAT>, --matrix_format <MATRIX_FORMAT>
+#                        Supported fields: tab, cb, transfac, jaspar,
+#                        consensus, gibbs, meme, assembly.
+#  -organism <ORGANISM>, --organism <ORGANISM>
+#                        To use a precalculated background model from RSAT,
+#                        choose the organism corresponding to the background
+#                        model.
+#  -background <BACKGROUND>, --background <BACKGROUND>
+#                        Type of sequences used as background model for
+#                        estimating expected oligonucleotide frequencies.
+#                        Supported: upstream, upstream-noorf
+#  -origin <ORIGIN>, --origin <ORIGIN>
+#                        Define the origin for the calculation of positions.
+#  -return_param <RETURN_PARAM>, --return_param <RETURN_PARAM>
+#                        List of fields to return.
+#  -uth <UTH>, --uth <UTH>
+#                        Lower threshold on some parameter.
+#  -server <SERVEUR>, --server <SERVEUR>
+#  -outGalaxy <OUT_GALAXY>, --outGalaxy <OUT_GALAXY>
+#
+#Version 0.1 - 10/03/2015
+#
+###########################################################"""
+__author__ =  'Jocelyn Brayet'
+matrixScanVersion = '0.1 - 10/03/2015'
+
+
+###########################################################'
+## Import
+
+import argparse
+import os
+import urllib
+from suds.client import Client
+import platform
+
+###########################################################'
+
+################################ functions ############################################################
+## Define a function to make a service perform the desired request using provided arguments
+def call_run_service(service, args):
+	"""
+	Run job in RSAT server.
+		service -> RSAT web service
+		args -> web service request 	 
+	"""
+	
+	result = rsat_service.matrix_scan(args)
+	return result
+
+def testNone(argument):
+	"""
+	Test if argument is None or not.
+		argument -> argument give by user
+	"""
+
+	if not argument is None:
+		variable = argument[0]
+	else:
+		variable = ""
+	return variable
+
+###########################################################'
+
+###########################################################'
+# server dictionary
+serverDict = {
+    
+    #http://protists.rsat.eu/
+    "fr_ens":"http://rsat01.biologie.ens.fr/rsa-tools/web_services/RSATWS.wsdl",
+    "fr_mrs":"http://rsat-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl",
+    "fr_ro":"http://rsat.sb-roscoff.fr/web_services/RSATWS.wsdl",
+    "fr_mrs_2":"http://pedagogix-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl",
+    "es":"http://floresta.eead.csic.es/rsat/web_services/RSATWS.wsdl",
+    "mx":"http://embnet.ccg.unam.mx/rsa-tools/web_services/RSATWS.wsdl"
+    
+    }
+
+
+if __name__ == '__main__':
+
+    parser = argparse.ArgumentParser(description='Client to download matrix-scan results from RSAT server.', epilog='Version '+matrixScanVersion)
+
+
+    ########### convert matrix arguments ####################
+
+    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)
+    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)
+    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)
+    parser.add_argument('-markov', '--markov', metavar='<MARKOV>', type=int, nargs=1, help='Order of the markov chain for the background model.', required=True)
+    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)
+
+    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)
+    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)
+    #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)
+    parser.add_argument('-origin', '--origin', metavar='<ORIGIN>', type=str, nargs=1, help='Define the origin for the calculation of positions.', required=False)
+    parser.add_argument('-return_param', '--return_param', metavar='<RETURN_PARAM>', type=str, nargs=1, help='List of fields to return.', required=False)
+    parser.add_argument('-uth', '--uth', metavar='<UTH>', type=str, nargs=1, help='Lower threshold on some parameter.', required=False)
+
+    #parser.add_argument('-quick', '--quick', metavar='<QUICK>', type=str, help='Delegates scanning to the C program matrix-scan-quick.', required=True)
+
+
+    ########### galaxy arguments ##############################
+    parser.add_argument('-server', '--server', metavar='<SERVEUR>', type=str, nargs=1, required=True)
+    parser.add_argument('-outGalaxy', '--outGalaxy', metavar='<OUT_GALAXY>', type=str, nargs=1, required=True)
+    ###########################################################
+
+
+    args = parser.parse_args()
+
+
+
+
+    ###########################################################'
+
+    sequence_file = args.sequence[0].read()
+    matrix_file = args.matrix[0].read()
+    serverValue = testNone(args.server)
+    matrixFormatValue = testNone(args.matrix_format)
+    n_treatmentValue = testNone(args.n_treatment)
+    outGalaxyValue = testNone(args.outGalaxy)
+    markovValue = testNone(args.markov)
+    organismValue = testNone(args.organism)
+    backgroundValue = testNone(args.background)
+    originValue = testNone(args.origin)
+    returnValue = testNone(args.return_param)
+    uthValue = testNone(args.uth)
+    
+    #backgroundModelValue = testNone(args.background_model)
+    #quickValue = testNone(args.quick)
+    
+    ###########################################################'
+    ## Create the SOAP client to request the RSAT service
+    
+    
+    # Load Client class from suds
+    
+    # Define URL for RSAT services 
+    url =  serverDict[serverValue]
+    # Create the client
+    client = Client(url)
+    
+    # Need service interface to perform requests
+    rsat_service = client.service
+    
+    
+    #print client
+    #print(client.factory.create('matrix_scan'))
+    
+    #request = 
+    #   (MatrixScanRequest){
+    #       output = None
+    #       sequence = None
+    #       tmp_sequence_infile = None
+    #       matrix = None
+    #       tmp_matrix_infile = None
+    #       sequence_format = None
+    #       matrix_format = None
+    #       quick = None
+    #       n_treatment = None
+    #       consensus_name = None
+    #       pseudo = None
+    #       equi_pseudo = None
+    #       top_matrices = None
+    #       background_model = None
+    #       tmp_background_infile = None
+    #       organism = None
+    #       background = None
+    #       background_input = None
+    #       background_window = None
+    #       markov = None
+    #       background_pseudo = None
+    #       return_fields = None
+    #       sort_distrib = None
+    #       lth[] = <empty>
+    #       uth[] = <empty>
+    #       str = None
+    #       verbosity = None
+    #       origin = None
+    #       decimals = None
+    #       crer_ids = None
+    #   }
+    #}
+    
+    # Define client header
+    
+    userAgent = 'RSAT-Client/v%s (%s; Python %s; %s)' % (
+        matrixScanVersion, 
+        os.path.basename( __file__ ),
+        platform.python_version(), 
+        platform.system()
+    )
+    
+    httpHeaders = {'User-agent': userAgent}
+    client.set_options(headers=httpHeaders)
+    client.set_options(timeout=300)
+    
+    
+    if not uthValue == "":
+        matrixScanRequest = {
+        
+            #'output' : "ticket",
+            'sequence' : sequence_file, 
+            'matrix' : matrix_file,
+            'markov' : markovValue,
+            'n_treatment' : n_treatmentValue,
+            'matrix_format' : matrixFormatValue,
+            'background' : backgroundValue,
+            'organism' : organismValue,
+            
+            'origin' : originValue,
+            'return_fields' : returnValue,
+            'uth' : 'pval ' + uthValue,
+            
+            #'background_window' : 12,
+            #'background_input' : " ",
+            
+            'quick' : "-quick"
+        
+        }
+    
+    else:
+        matrixScanRequest = {
+        
+            #'output' : "ticket",
+            'sequence' : sequence_file, 
+            'matrix' : matrix_file,
+            'markov' : markovValue,
+            'n_treatment' : n_treatmentValue,
+            'matrix_format' : matrixFormatValue,
+            'background' : backgroundValue,
+            'organism' : organismValue,
+            
+            'origin' : originValue,
+            'return_fields' : returnValue,
+            #'background_window' : 12,
+            #'background_input' : " ",
+            
+            'quick' : "-quick"
+        
+        }
+        
+    
+    
+    #print matrixScanRequest
+    
+    result = call_run_service(rsat_service, matrixScanRequest)
+    
+    print url
+    
+    print "###############################################"
+    print "Command performed on server"
+    print result.command
+    print "###############################################"
+    print "Result"
+    print result.server
+    
+    nameFile = "matrix-scan_results.txt"
+    
+    urlResult=result.server.replace("$RSAT/public_html/",url.replace("web_services/RSATWS.wsdl",""))
+    
+    
+    urllib.urlretrieve(urlResult, nameFile)
+    
+    
+    os.popen("cp "+nameFile+" "+outGalaxyValue)
+    
+