annotate commons/launcher/NWalignProgramLauncher.py @ 18:94ab73e8a190

Uploaded
author m-zytnicki
date Mon, 29 Apr 2013 03:20:15 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
1 #!/usr/bin/env python
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
2
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
3 ##@file
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
4 # Launch NWalign (pairwise alignment).
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
5 #
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
6 # options:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
7 # -h: this help
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
8 # -i: name of the input file (queries, format='fasta')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
9 # -s: name of the subject file (format='fasta')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
10 # -p: parameters for 'NWalign' (default='-d 2')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
11 # -o: name of the output file (format='align', default=inFile+'.align')
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
12 # -c: clean
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
13 # -v: verbosity level (default=0/1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
14
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
15
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
16 import os
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
17 import sys
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
19 from pyRepet.launcher.AbstractProgramLauncher import AbstractProgramLauncher
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
20 from commons.core.seq.AlignedBioseqDB import AlignedBioseqDB
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
21 from commons.core.coord.AlignUtils import AlignUtils
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
22
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
23
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
24 class NWalignProgramLauncher( AbstractProgramLauncher ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
25 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
26 Launch NWalign (pairwise alignment).
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
27 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
28
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
29 def __init__( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
30 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
31 Constructor.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
32 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
33 AbstractProgramLauncher.__init__( self )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
34 self._prgName = "NWalign"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
35 self._formatInFile = "fasta"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
36 self._sbjFile = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
37 self._prgParam = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
38 self._cmdLineSpecificOptions = "s:p:o:"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
39
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
40
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
41 def getSpecificHelpAsString( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
42 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
43 Return the specific help as a string.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
44 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
45 string = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
46 string += "\nspecific options:"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
47 string += "\n -s: name of the subject file (format='fasta')"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
48 string += "\n -p: parameters for '%s'" % ( self.getProgramName() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
49 string += "\n -o: name of the output file (format='align', default=inFile+'.align')"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
50 return string
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
51
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
52
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
53 def setASpecificAttributeFromCmdLine( self, o, a="" ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
54 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
55 Set a specific attribute from the command-line arguments.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
56 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
57 if o =="-s":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
58 self.setSubjectFile( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
59 elif o == "-p":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
60 self.setProgramParameters( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
61 elif o == "-o":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
62 self.setOutputFile( a )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
63
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
64
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
65 def setSubjectFile( self, arg ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
66 self._sbjFile = arg
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
67
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
68
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
69 def getSubjectFile( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
70 return self._sbjFile
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
71
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
72
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
73 def checkSpecificAttributes( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
74 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
75 Check the specific attributes before running the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
76 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
77 if self._sbjFile == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
78 string = "ERROR: missing subject file (-s)"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
79 print string
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
80 print self.getHelpAsString()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
81 sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
82 if self.getOutputFile() == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
83 self.setOutputFile( "%s.align" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
84
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
85
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
86 def setWrapperCommandLine( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
87 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
88 Set the command-line of the wrapper.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
89 Required for NWalignClusterLauncher.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
90 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
91 self._wrpCmdLine = self.getWrapperName()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
92 self._wrpCmdLine += " -i %s" % ( self.getInputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
93 self._wrpCmdLine += " -s %s" % ( self.getSubjectFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
94 if self.getProgramParameters() != "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
95 self._wrpCmdLine += " -p '%s'" % ( self.getProgramParameters() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
96 if self.getOutputFile() == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
97 self.setOutputFile( "%s.align" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
98 self._wrpCmdLine += " -o %s" % ( self.getOutputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
99 if self.getClean():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
100 self._wrpCmdLine += " -c"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
101 self._wrpCmdLine += " -v %i" % ( self.getVerbosityLevel() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
102
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
103
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
104 def setProgramCommandLine( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
105 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
106 Set the command-line of the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
107 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
108 self._prgCmdLine = self.getProgramName()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
109 if self.getProgramParameters() != "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
110 self._prgCmdLine += " %s" % ( self.getProgramParameters() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
111 self._prgCmdLine += " -o %s.afa" % ( self.getInputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
112 self._prgCmdLine += " -v %i" % ( self.getVerbosityLevel() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
113 self._prgCmdLine += " %s" % ( self.getSubjectFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
114 self._prgCmdLine += " %s" % ( self.getInputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
115
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
116
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
117 def setListFilesToKeep( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
118 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
119 Set the list of files to keep.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
120 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
121 if self.getOutputFile() == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
122 self.setOutputFile( "%s.afa" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
123 self.appendFileToKeep( self.getOutputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
124
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
125
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
126 def postprocess( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
127 absDB = AlignedBioseqDB( "%s.afa" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
128 lHeaders = absDB.getHeaderList()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
129 queryHeader = lHeaders[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
130 subjectHeader = lHeaders[1]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
131 queryLength = absDB.fetch( queryHeader ).getLength()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
132 subjectLength = absDB.fetch( subjectHeader ).getLength()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
133 lAligns = absDB.getAlignList( queryHeader, subjectHeader )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
134 for i in lAligns:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
135 if "re-oriented" in i.getQueryName():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
136 i.setQueryName( queryHeader.replace(" re-oriented","") )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
137 start = i.getQueryStart()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
138 end = i.getQueryEnd()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
139 i.setQueryStart( queryLength - end + 1 )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
140 i.setQueryEnd( queryLength - start + 1 )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
141 if "re-oriented" in i.getSubjectName():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
142 i.setSubjectName( subjectHeader.replace(" re-oriented","") )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
143 start = i.getSubjectStart()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
144 end = i.getSubjectEnd()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
145 i.setSubjectEnd( subjectLength - end + 1 )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
146 i.setSubjectStart( subjectLength - start + 1 )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
147 if not i.isQueryOnDirectStrand():
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
148 i.reverse()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
149 AlignUtils.writeListInFile( lAligns, self.getOutputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
150 os.remove( "%s.afa" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
151
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
152
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
153 def setSummary( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
154 self._summary = "input file: %s" % ( self.getInputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
155 self._summary += "\nsubject file: %s" % ( self.getSubjectFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
156 self._summary += "\nparameters: %s" % ( self.getProgramParameters() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
157 if self.getOutputFile() == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
158 self.setOutputFile( "%s.align" % ( self.getInputFile() ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
159 self._summary += "\noutput file: %s" % ( self.getOutputFile() )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
160
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
161
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
162 def run( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
163 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
164 Run the program.
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
165 """
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
166 self.start()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
167
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
168 self.setProgramCommandLine()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
169 cmd = self.getProgramCommandLine()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
170 if self.getVerbosityLevel() > 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
171 print "LAUNCH: %s" % ( cmd )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
172 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
173 exitStatus = os.system( cmd )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
174 if exitStatus != 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
175 string = "ERROR: program '%s' returned exit status '%i'" % ( self.getProgramName(), exitStatus )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
176 print string
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
177 sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
178
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
179 self.postprocess()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
180
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
181 self.end()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
182
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
183
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
184 if __name__ == "__main__":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
185 i = NWalignProgramLauncher()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
186 i.setAttributesFromCmdLine()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
187 i.run()