comparison imagej2_base_utils.py @ 0:66d9e595dff2 draft

planemo upload commit 98c34e070343a117019ffd25a3af117808159bf5-dirty
author iuc
date Tue, 04 Aug 2015 13:20:29 -0400
parents
children d26f11339f08
comparison
equal deleted inserted replaced
-1:000000000000 0:66d9e595dff2
1 import os
2 import shutil
3 import sys
4 import tempfile
5
6 FIJI_JAR_DIR = os.environ.get( 'FIJI_JAR_DIR', None )
7 FIJI_OSX_JAVA3D_DIR = os.environ.get( 'FIJI_OSX_JAVA3D_DIR', None )
8 FIJI_PLUGIN_DIR = os.environ.get( 'FIJI_PLUGIN_DIR', None )
9 FIJI_ROOT_DIR = os.environ.get( 'FIJI_ROOT_DIR', None )
10
11 BUFF_SIZE = 1048576
12
13 def cleanup_before_exit( tmp_dir ):
14 """
15 Remove temporary files and directories prior to tool exit.
16 """
17 if tmp_dir and os.path.exists( tmp_dir ):
18 shutil.rmtree( tmp_dir )
19
20 def get_base_cmd_bunwarpj( jvm_memory ):
21 if FIJI_JAR_DIR is not None and FIJI_PLUGIN_DIR is not None:
22 if jvm_memory in [ None, 'None' ]:
23 jvm_memory_str = ''
24 else:
25 jvm_memory_str = '-Xmx%s' % jvm_memory
26 bunwarpj_base_cmd = "java %s -cp %s/ij-1.49k.jar:%s/bUnwarpJ_-2.6.1.jar bunwarpj.bUnwarpJ_" % \
27 ( jvm_memory_str, FIJI_JAR_DIR, FIJI_PLUGIN_DIR )
28 return bunwarpj_base_cmd
29 return None
30
31 def get_base_command_imagej2( memory_size=None, macro=None, jython_script=None ):
32 imagej2_executable = get_imagej2_executable()
33 if imagej2_executable is None:
34 return None
35 cmd = '%s --ij2 --headless --debug' % imagej2_executable
36 if memory_size is not None:
37 memory_size_cmd = ' -DXms=%s -DXmx=%s' % ( memory_size, memory_size )
38 cmd += memory_size_cmd
39 if macro is not None:
40 cmd += ' --macro %s' % os.path.abspath( macro )
41 if jython_script is not None:
42 cmd += ' --jython %s' % os.path.abspath( jython_script )
43 return cmd
44
45 def get_file_extension( image_format ):
46 """
47 Return a valid bioformats file extension based on the received
48 value of image_format( e.g., "gif" is returned as ".gif".
49 """
50 return '.%s' % image_format
51
52 def get_file_name_without_extension( file_path ):
53 """
54 Eliminate the .ext from the received file name, assuming that
55 the file name consists of only a single '.'.
56 """
57 if os.path.exists( file_path ):
58 path, name = os.path.split( file_path )
59 name_items = name.split( '.' )
60 return name_items[ 0 ]
61 return None
62
63 def get_imagej2_executable():
64 """
65 Fiji names the ImageJ executable different names for different
66 architectures, so figure out which name we need.
67 """
68 platform_dict = get_platform_info_dict()
69 if platform_dict.get( 'architecture', None ) in [ 'x86_64' ]:
70 if platform_dict.get( 'os', None ) in [ 'darwin' ]:
71 return 'ImageJ-macosx'
72 if platform_dict.get( 'os', None ) in [ 'linux' ]:
73 return 'ImageJ-linux64'
74 return None
75
76 def get_input_image_path( tmp_dir, input_file, image_format ):
77 """
78 Bioformats uses file extensions (e.g., .job, .gif, etc)
79 when reading and writing image files, so the Galaxy dataset
80 naming convention of setting all file extensions as .dat
81 must be handled.
82 """
83 image_path = get_temporary_image_path( tmp_dir, image_format )
84 # Remove the file so we can create a symlink.
85 os.remove( image_path )
86 os.symlink( input_file, image_path )
87 return image_path
88
89 def get_max_heap_size_value( max_heap_size_type, max_heap_size ):
90 """
91 Return a string that can be used by the javabridge to set the size
92 of the memory allocation pool used by the JVM. The value must be
93 determined to be a multiple of 1024 or it will be ignored.
94 """
95 if max_heap_size_type == 'default':
96 return None
97 if max_heap_size_type == 'megabytes':
98 if int( max_heap_size ) % 1024 not in [ 0, 256, 512 ]:
99 return None
100 return '%sm' % str( max_heap_size )
101 if max_heap_size_type == 'gigabytes':
102 return '%sg' % str( max_heap_size )
103
104 def get_platform_info_dict():
105 '''Return a dict with information about the current platform.'''
106 platform_dict = {}
107 sysname, nodename, release, version, machine = os.uname()
108 platform_dict[ 'os' ] = sysname.lower()
109 platform_dict[ 'architecture' ] = machine.lower()
110 return platform_dict
111
112 def get_stderr_exception( tmp_err, tmp_stderr, tmp_out, tmp_stdout, include_stdout=False ):
113 tmp_stderr.close()
114 """
115 Return a stderr string of reasonable size.
116 """
117 # Get stderr, allowing for case where it's very large.
118 tmp_stderr = open( tmp_err, 'rb' )
119 stderr_str = ''
120 buffsize = BUFF_SIZE
121 try:
122 while True:
123 stderr_str += tmp_stderr.read( buffsize )
124 if not stderr_str or len( stderr_str ) % buffsize != 0:
125 break
126 except OverflowError:
127 pass
128 tmp_stderr.close()
129 if include_stdout:
130 tmp_stdout = open( tmp_out, 'rb' )
131 stdout_str = ''
132 buffsize = BUFF_SIZE
133 try:
134 while True:
135 stdout_str += tmp_stdout.read( buffsize )
136 if not stdout_str or len( stdout_str ) % buffsize != 0:
137 break
138 except OverflowError:
139 pass
140 tmp_stdout.close()
141 if include_stdout:
142 return 'STDOUT\n%s\n\nSTDERR\n%s\n' % ( stdout_str, stderr_str )
143 return stderr_str
144
145 def get_temp_dir( prefix='tmp-imagej-', dir=None ):
146 """
147 Return a temporary directory.
148 """
149 return tempfile.mkdtemp( prefix=prefix, dir=dir )
150
151 def get_tempfilename( dir=None, suffix=None ):
152 """
153 Return a temporary file name.
154 """
155 fd, name = tempfile.mkstemp( suffix=suffix, dir=dir )
156 os.close( fd )
157 return name
158
159 def get_temporary_image_path( tmp_dir, image_format ):
160 """
161 Return the path to a temporary file with a valid image format
162 file extension that can be used with bioformats.
163 """
164 file_extension = get_file_extension( image_format )
165 return get_tempfilename( tmp_dir, file_extension )
166
167 def handle_none_type( val, val_type='float' ):
168 if val is None:
169 return ' None'
170 else:
171 if val_type == 'float':
172 return ' %.1f' % val
173 elif val_type == 'int':
174 return ' %d' % val
175
176 def stop_err( msg ):
177 sys.stderr.write( msg )
178 sys.exit( 1 )