# HG changeset patch
# User iuc
# Date 1433866900 14400
# Node ID 312e8ce708b1173c90525d08e9dceedfcd437219
planemo upload commit 4bf97847c35c4dcf9638008b9b4b6c4e10015f19
diff -r 000000000000 -r 312e8ce708b1 imagej2_base_utils.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_base_utils.py Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,156 @@
+import os
+import shutil
+import sys
+import tempfile
+
+FIJI_JAR_DIR = os.environ.get( 'FIJI_JAR_DIR', None )
+FIJI_OSX_JAVA3D_DIR = os.environ.get( 'FIJI_OSX_JAVA3D_DIR', None )
+FIJI_PLUGIN_DIR = os.environ.get( 'FIJI_PLUGIN_DIR', None )
+FIJI_ROOT_DIR = os.environ.get( 'FIJI_ROOT_DIR', None )
+
+BUFF_SIZE = 1048576
+
+def cleanup_before_exit( tmp_dir ):
+ """
+ Remove temporary files and directories prior to tool exit.
+ """
+ if tmp_dir and os.path.exists( tmp_dir ):
+ shutil.rmtree( tmp_dir )
+
+def get_base_cmd_bunwarpj( jvm_memory ):
+ if FIJI_JAR_DIR is not None and FIJI_PLUGIN_DIR is not None:
+ if jvm_memory in [ None, 'None' ]:
+ jvm_memory_str = ''
+ else:
+ jvm_memory_str = '-Xmx%s' % jvm_memory
+ bunwarpj_base_cmd = "java %s -cp %s/ij-1.49k.jar:%s/bUnwarpJ_-2.6.1.jar bunwarpj.bUnwarpJ_" % \
+ ( jvm_memory_str, FIJI_JAR_DIR, FIJI_PLUGIN_DIR )
+ return bunwarpj_base_cmd
+ return None
+
+def get_base_command_imagej2( memory_size=None, macro=None, jython_script=None ):
+ imagej2_executable = get_imagej2_executable()
+ if imagej2_executable:
+ cmd = '%s --headless -DXincgc' % imagej2_executable
+ if memory_size is not None:
+ memory_size_cmd = ' -DXms=%s -DXmx=%s' % ( memory_size, memory_size )
+ cmd += memory_size_cmd
+ if macro is not None:
+ cmd += ' --macro %s' % os.path.abspath( macro )
+ if jython_script is not None:
+ cmd += ' --jython -u %s' % os.path.abspath( jython_script )
+ return cmd
+ return None
+
+def get_file_extension( image_format ):
+ """
+ Return a valid bioformats file extension based on the received
+ value of image_format( e.g., "gif" is returned as ".gif".
+ """
+ return '.%s' % image_format
+
+def get_file_name_without_extension( file_path ):
+ """
+ Eliminate the .ext from the received file name, assuming that
+ the file name consists of only a single '.'.
+ """
+ if os.path.exists( file_path ):
+ path, name = os.path.split( file_path )
+ name_items = name.split( '.' )
+ return name_items[ 0 ]
+ return None
+
+def get_imagej2_executable():
+ """
+ Fiji names the ImageJ executable different names for different
+ architectures, so figure out which name we need.
+ """
+ platform_dict = get_platform_info_dict()
+ if platform_dict.get( 'architecture', None ) in [ 'x86_64' ]:
+ if platform_dict.get( 'os', None ) in [ 'darwin' ]:
+ return 'ImageJ-macosx'
+ if platform_dict.get( 'os', None ) in [ 'linux' ]:
+ return 'ImageJ-linux64'
+ return None
+
+def get_input_image_path( tmp_dir, input_file, image_format ):
+ """
+ Bioformats uses file extensions (e.g., .job, .gif, etc)
+ when reading and writing image files, so the Galaxy dataset
+ naming convention of setting all file extensions as .dat
+ must be handled.
+ """
+ image_path = get_temporary_image_path( tmp_dir, image_format )
+ # Remove the file so we can create a symlink.
+ os.remove( image_path )
+ os.symlink( input_file, image_path )
+ return image_path
+
+def get_max_heap_size_value( max_heap_size_type, max_heap_size ):
+ """
+ Return a string that can be used by the javabridge to set the size
+ of the memory allocation pool used by the JVM. The value must be
+ determined to be a multiple of 1024 or it will be ignored.
+ """
+ if max_heap_size_type == 'default':
+ return None
+ if max_heap_size_type == 'megabytes':
+ if max_heap_size % 1024 not in [ 0, 256, 512 ]:
+ return None
+ return '%sm' % str( max_heap_size )
+ if max_heap_size_type == 'gigabytes':
+ return '%sg' % str( max_heap_size )
+
+def get_platform_info_dict():
+ '''Return a dict with information about the current platform.'''
+ platform_dict = {}
+ sysname, nodename, release, version, machine = os.uname()
+ platform_dict[ 'os' ] = sysname.lower()
+ platform_dict[ 'architecture' ] = machine.lower()
+ return platform_dict
+
+def get_stderr_exception( tmp_err, tmp_stderr, tmp_stdout ):
+ tmp_stderr.close()
+ """
+ Return a stderr string of reasonable size.
+ """
+ # Get stderr, allowing for case where it's very large.
+ tmp_stderr = open( tmp_err, 'rb' )
+ stderr_str = ''
+ buffsize = BUFF_SIZE
+ try:
+ while True:
+ stderr_str += tmp_stderr.read( buffsize )
+ if not stderr_str or len( stderr_str ) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
+ tmp_stderr.close()
+ tmp_stdout.close()
+ return str( stderr_str )
+
+def get_temp_dir( prefix='tmp-imagej-', dir=None ):
+ """
+ Return a temporary directory.
+ """
+ return tempfile.mkdtemp( prefix=prefix, dir=dir )
+
+def get_tempfilename( dir=None, suffix=None ):
+ """
+ Return a temporary file name.
+ """
+ fd, name = tempfile.mkstemp( suffix=suffix, dir=dir )
+ os.close( fd )
+ return name
+
+def get_temporary_image_path( tmp_dir, image_format ):
+ """
+ Return the path to a temporary file with a valid image format
+ file extension that can be used with bioformats.
+ """
+ file_extension = get_file_extension( image_format )
+ return get_tempfilename( tmp_dir, file_extension )
+
+def stop_err( msg ):
+ sys.stderr.write( msg )
+ sys.exit( 1 )
diff -r 000000000000 -r 312e8ce708b1 imagej2_convert_format.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_convert_format.py Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# Galaxy wrapper for use with Imagej2 via bioformats and javabridge by Greg Von Kuster
+"""
+A wrapper script for running ImageJ2 commands via bioformats and javabridge.
+"""
+import argparse
+import imagej2_base_utils
+import imagej2_utils
+
+if __name__=="__main__":
+ # Parse Command Line.
+ parser = argparse.ArgumentParser()
+ parser.add_argument( '--in_fname', dest='in_fname', help='Path to the input file' )
+ parser.add_argument( '--input_datatype', dest='input_datatype', help='Input image datatype' )
+ parser.add_argument( '--max_heap_size_type', dest='max_heap_size_type', help='Type (default or megabytes) of max_heap_size value' )
+ parser.add_argument( '--max_heap_size', dest='max_heap_size', help='Maximum size of the memory allocation pool used by the JVM.' )
+ parser.add_argument( '--output_datatype', dest='output_datatype', help='Output image datatype' )
+ parser.add_argument( '--out_fname', help='Path to the output file' )
+ args = parser.parse_args()
+ # Set the size of the memory allocation pool used by the JVM.
+ max_heap_size = imagej2_base_utils.get_max_heap_size_value( args.max_heap_size_type, args.max_heap_size )
+ # Start the JVM via the Javabridge.
+ imagej2_utils.start_vm( args=None, class_path=None, max_heap_size=max_heap_size, run_headless=True )
+ try:
+ tmp_dir = imagej2_base_utils.get_temp_dir()
+ in_image_path = imagej2_base_utils.get_input_image_path( tmp_dir, args.in_fname, args.input_datatype )
+ # Load the input image.
+ image, scale = imagej2_utils.load_image( in_image_path, rescale=False, wants_max_intensity=True )
+ # Write the output image.
+ out_image_path = imagej2_base_utils.get_temporary_image_path( tmp_dir, args.output_datatype )
+ imagej2_utils.write_image( image_path=out_image_path, pixels=image, pixel_type=str( image.dtype ), move_to=args.out_fname )
+ except Exception, e:
+ imagej2_base_utils.stop_err( str( e ) )
+ finally:
+ imagej2_utils.kill_vm()
+ imagej2_base_utils.cleanup_before_exit( tmp_dir )
diff -r 000000000000 -r 312e8ce708b1 imagej2_convert_format.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_convert_format.xml Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,71 @@
+
+
+ with bioformats
+
+ imagej2_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+**What it does**
+
+`_ for Bioformats image formats.
+]]>
+
+
+
+
diff -r 000000000000 -r 312e8ce708b1 imagej2_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_macros.xml Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,81 @@
+
+
+
+
+ fiji
+
+
+
+
+ fiji
+ javabridge
+ numpy
+ python_bioformats
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 10.1038/nmeth.2102
+
+
+
+
+ 10.1038/nmeth.2102
+ 10.1038/nmeth.2019
+ 10.1083/jcb.201004104
+
+
+
diff -r 000000000000 -r 312e8ce708b1 imagej2_utils.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_utils.py Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,107 @@
+import bioformats
+import javabridge
+import os
+import shutil
+
+FIJI_JAR_DIR = os.environ.get( 'FIJI_JAR_DIR', None )
+FIJI_OSX_JAVA3D_DIR = os.environ.get( 'FIJI_OSX_JAVA3D_DIR', None )
+FIJI_PLUGIN_DIR = os.environ.get( 'FIJI_PLUGIN_DIR', None )
+FIJI_ROOT_DIR = os.environ.get( 'FIJI_ROOT_DIR', None )
+
+def get_java_class_path():
+ """
+ Return the Java class path for use when starting the JVM via Javabridge.
+ This function expects the following environment variable settings:
+ FIJI_JAR_DIR, FIJI_PLUGIN_DIR, FIJI_OSX_JAVA3D_DIR.
+ """
+ class_path_list = []
+ # Handle javabridge.JARS setting.
+ for jar_file in javabridge.JARS:
+ class_path_list.append( jar_file )
+ if FIJI_JAR_DIR is not None and os.path.isdir( FIJI_JAR_DIR ):
+ for filename in os.listdir( FIJI_JAR_DIR ):
+ if filename.endswith( '.jar' ):
+ class_path_list.append( os.path.join( FIJI_JAR_DIR, filename ) )
+ fiji_bioformats_jar_dir = os.path.join( FIJI_JAR_DIR, 'bio-formats' )
+ if os.path.isdir( fiji_bioformats_jar_dir ):
+ for filename in os.listdir( fiji_bioformats_jar_dir ):
+ if filename.endswith( '.jar' ):
+ class_path_list.append( os.path.join( fiji_bioformats_jar_dir, filename ) )
+ if FIJI_PLUGIN_DIR is not None and os.path.isdir( FIJI_PLUGIN_DIR ):
+ for filename in os.listdir( FIJI_PLUGIN_DIR ):
+ if filename.endswith( '.jar' ):
+ class_path_list.append( os.path.join( FIJI_PLUGIN_DIR, filename ) )
+ if FIJI_OSX_JAVA3D_DIR is not None and os.path.isdir( FIJI_OSX_JAVA3D_DIR ):
+ for filename in os.listdir( FIJI_OSX_JAVA3D_DIR ):
+ if filename.endswith( '.jar' ):
+ class_path_list.append( os.path.join( FIJI_OSX_JAVA3D_DIR, filename ) )
+ return class_path_list
+
+def kill_vm():
+ javabridge.detach()
+ javabridge.kill_vm()
+
+def load_image( image_path, c=None, z=0, t=0, series=None, index=None,
+ rescale=True, wants_max_intensity=False, channel_names=None ):
+ """
+ Load in image from a file using bioformats, always returning a tuple of
+ (image, scale) where the image is a numpy.ndarray object, and the scale
+ is an integer or None.
+ """
+ result = bioformats.load_image( path=image_path,
+ c=c,
+ z=z,
+ t=t,
+ series=series,
+ index=index,
+ rescale=rescale,
+ wants_max_intensity=wants_max_intensity,
+ channel_names=channel_names )
+ if wants_max_intensity:
+ # The value of result is a tuple: ( image, scale )
+ image, scale = result
+ else:
+ image = result
+ scale = None
+ # The image is a numpy.ndarray object, and the scale is an integer or None.
+ return image, scale
+
+def start_vm( args=None, class_path=None, max_heap_size=None, run_headless=False ):
+ """
+ Start the JVM via Javabridge.
+ """
+ if class_path is None:
+ class_path = get_java_class_path()
+ # Start the JVM.
+ javabridge.start_vm( args=args, class_path=class_path, max_heap_size=max_heap_size, run_headless=run_headless )
+ # Suppress Java logging to stdout.
+ java_stack = javabridge.make_instance( 'java/io/ByteArrayOutputStream', "()V" )
+ java_stack_ps = javabridge.make_instance( 'java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_stack )
+ javabridge.static_call( 'Ljava/lang/System;', "setErr", '(Ljava/io/PrintStream;)V', java_stack_ps )
+ java_out = javabridge.make_instance( 'java/io/ByteArrayOutputStream', "()V" )
+ java_out_ps = javabridge.make_instance( 'java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_out )
+ javabridge.static_call( 'Ljava/lang/System;', "setOut", '(Ljava/io/PrintStream;)V', java_out_ps )
+ javabridge.attach()
+
+def write_image( image_path, pixels, pixel_type, c=0, z=0, t=0,
+ size_c=1, size_z=1, size_t=1, channel_names=None,
+ move_to=None ):
+ """
+ Write an image file using bioformats. Bioformats uses file extensions
+ (e.g., .job, .gif, etc) when reading and writing image files, so the
+ Galaxy dataset naming convention of setting all file extensions as .dat
+ is handled by setting the move_to parameter to the value of the Galaxy
+ dataset path.
+ """
+ bioformats.write_image( pathname=image_path,
+ pixels=pixels,
+ pixel_type=pixel_type,
+ c=c,
+ z=z,
+ t=t,
+ size_c=size_c,
+ size_z=size_z,
+ size_t=size_t,
+ channel_names=channel_names )
+ if move_to is not None and os.path.exists( move_to ):
+ shutil.move( image_path, os.path.abspath( move_to ) )
diff -r 000000000000 -r 312e8ce708b1 test-data/dot_blot.jpg
Binary file test-data/dot_blot.jpg has changed
diff -r 000000000000 -r 312e8ce708b1 test-data/dot_blot.png
Binary file test-data/dot_blot.png has changed
diff -r 000000000000 -r 312e8ce708b1 test-data/dot_blot.tiff
Binary file test-data/dot_blot.tiff has changed
diff -r 000000000000 -r 312e8ce708b1 tool_dependencies.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml Tue Jun 09 12:21:40 2015 -0400
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+