Mercurial > repos > yufei-luo > s_mart
comparison commons/launcher/LaunchLastZ.py @ 31:0ab839023fe4
Uploaded
author | m-zytnicki |
---|---|
date | Tue, 30 Apr 2013 14:33:21 -0400 |
parents | 94ab73e8a190 |
children |
comparison
equal
deleted
inserted
replaced
30:5677346472b5 | 31:0ab839023fe4 |
---|---|
1 #! /usr/bin/env python | |
2 | |
3 # Copyright INRA (Institut National de la Recherche Agronomique) | |
4 # http://www.inra.fr | |
5 # http://urgi.versailles.inra.fr | |
6 # | |
7 # This software is governed by the CeCILL license under French law and | |
8 # abiding by the rules of distribution of free software. You can use, | |
9 # modify and/ or redistribute the software under the terms of the CeCILL | |
10 # license as circulated by CEA, CNRS and INRIA at the following URL | |
11 # "http://www.cecill.info". | |
12 # | |
13 # As a counterpart to the access to the source code and rights to copy, | |
14 # modify and redistribute granted by the license, users are provided only | |
15 # with a limited warranty and the software's author, the holder of the | |
16 # economic rights, and the successive licensors have only limited | |
17 # liability. | |
18 # | |
19 # In this respect, the user's attention is drawn to the risks associated | |
20 # with loading, using, modifying and/or developing or reproducing the | |
21 # software by the user in light of its specific status of free software, | |
22 # that may mean that it is complicated to manipulate, and that also | |
23 # therefore means that it is reserved for developers and experienced | |
24 # professionals having in-depth computer knowledge. Users are therefore | |
25 # encouraged to load and test the software's suitability as regards their | |
26 # requirements in conditions enabling the security of their systems and/or | |
27 # data to be ensured and, more generally, to use and operate it in the | |
28 # same conditions as regards security. | |
29 # | |
30 # The fact that you are presently reading this means that you have had | |
31 # knowledge of the CeCILL license and that you accept its terms. | |
32 | |
33 import sys | |
34 import os | |
35 import optparse | |
36 from commons.core.checker.CheckerUtils import CheckerUtils | |
37 from commons.core.utils.FileUtils import FileUtils | |
38 from subprocess import Popen | |
39 from commons.core.utils.RepetOptionParser import RepetOptionParser | |
40 import subprocess | |
41 import tempfile | |
42 | |
43 class LaunchLastZ(object): | |
44 | |
45 def __init__(self,queryFileName="", refFileName ="", outputFileName=None,outputFileFormat="axt",noTransition=True, ambiguous=None, step=1,gfextend=False, chain=False, verbosity=1 ): | |
46 self.queryFileName = queryFileName | |
47 self.refFileName = refFileName | |
48 self.outputFileName = outputFileName | |
49 self.outputFileFormat = outputFileFormat | |
50 self.noTransition = noTransition | |
51 self.step = step | |
52 self.ambiguous = ambiguous | |
53 self.gfextend = gfextend | |
54 self.chain = chain | |
55 self.verbosity = verbosity | |
56 | |
57 def setAttributesFromCmdLine(self): | |
58 description = "LaunchLastZ runs the LastZ program ." | |
59 parser = RepetOptionParser(description = description) | |
60 parser.add_option("-q", "--query", dest="queryFileName", default = None, action="store", type="string", help="input query file [compulsory] [format: fasta]") | |
61 parser.add_option("-r", "--ref", dest="refFileName", default = None, action="store", type="string", help="input ref file [compulsory] [format: fasta]") | |
62 parser.add_option("-o", "--output", dest="outputFileName", default = None, action="store", type="string", help="output file [compulsory] ") | |
63 parser.add_option("-f", "--format", dest="outputFileFormat", default = "axt", action="store", type="string", help="output file format[optional] ") | |
64 parser.add_option("-n", "--notransition", dest="noTransition", action="store_false", default=True, help="noTransition (default True) [optional] ") | |
65 parser.add_option("-a", "--ambiguous", dest="ambiguous", action="store", type="string", help="ambiguous [optional] ") | |
66 parser.add_option("-s", "--step", dest="step", default = 1, action="store", type="int", help="stepsize (default 1) [optional] ") | |
67 parser.add_option("-g", "--gfextend", dest="gfextend", action="store_true", help="extend gf (default false)[optional] ") | |
68 parser.add_option("-c", "--chain", dest="chain", action="store_true", help="chain (default false)[optional] ") | |
69 parser.add_option("-v", "--verbosity", dest="verbosity", default = 1, action="store", type="int", help="verbosity [optional] ") | |
70 (self._options, args) = parser.parse_args() | |
71 self._setAttributesFromOptions(self._options) | |
72 | |
73 def _setAttributesFromOptions(self, options): | |
74 self.queryFileName = options.queryFileName | |
75 self.refFileName = options.refFileName | |
76 self.outputFileName = options.outputFileName | |
77 self.outputFileFormat = options.outputFileFormat | |
78 self.ambiguous = options.ambiguous | |
79 self.noTransition = options.noTransition | |
80 self.step = options.step | |
81 self.gfextend = options.gfextend | |
82 self.chain = options.chain | |
83 self.verbosity = options.verbosity | |
84 | |
85 def checkOptions(self): | |
86 if self.queryFileName != "": | |
87 if not FileUtils.isRessourceExists(self.queryFileName): | |
88 raise Exception("ERROR: Query file does not exist!") | |
89 else: | |
90 raise Exception("ERROR: No specified --query option!") | |
91 if self.refFileName != "": | |
92 if not FileUtils.isRessourceExists(self.refFileName): | |
93 raise Exception("ERROR: Ref file does not exist!") | |
94 else: | |
95 raise Exception("ERROR: No specified --ref option!") | |
96 if self.outputFileName == None: | |
97 self.outputFileName = "%s_%s.axt" % (os.path.basename(self.queryFileName), os.path.basename(self.refFileName)) | |
98 | |
99 def run(self): | |
100 if not CheckerUtils.isExecutableInUserPath("lastz") : | |
101 print ("ERROR: LastZ must be in your path") | |
102 else: | |
103 self.checkOptions() | |
104 | |
105 transition = "" | |
106 if self.noTransition: | |
107 transition = "--notransition" | |
108 ambiguous = "" | |
109 if self.ambiguous is not None: | |
110 ambiguous = "--ambiguous=%s" % self.ambiguous | |
111 | |
112 gfextend = "" | |
113 if self.gfextend: | |
114 gfextend = "--gfextend" | |
115 | |
116 chain = "" | |
117 if self.chain: | |
118 chain = "--chain" | |
119 | |
120 cmd = "lastz %s[format=fasta] %s[format=fasta] --output=%s --format=%s %s %s --step=%i %s %s" % (self.refFileName, self.queryFileName, self.outputFileName | |
121 , self.outputFileFormat, ambiguous, transition,self.step, gfextend, chain) | |
122 if self.verbosity>0: | |
123 print("Running LastZ with following commands : %s" %cmd) | |
124 sys.stdout.flush() | |
125 cmd = cmd.split() | |
126 process = subprocess.Popen(cmd) | |
127 process.wait() | |
128 return process.returncode | |
129 | |
130 if __name__ == "__main__": | |
131 iLaunchLastZ = LaunchLastZ() | |
132 iLaunchLastZ.setAttributesFromCmdLine() | |
133 iLaunchLastZ.run() |