# HG changeset patch
# User iuc
# Date 1433866923 14400
# Node ID dfe318d97378ce097f990b2a9faae5067be35e28
planemo upload commit 4bf97847c35c4dcf9638008b9b4b6c4e10015f19
diff -r 000000000000 -r dfe318d97378 imagej2_base_utils.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_base_utils.py Tue Jun 09 12:22:03 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 dfe318d97378 imagej2_create_image.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_create_image.py Tue Jun 09 12:22:03 2015 -0400
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+# Galaxy wrapper for use with Imagej2 by Greg Von Kuster
+"""
+A wrapper script for running ImageJ2 Jython scripts.
+"""
+import argparse
+import shutil
+import subprocess
+import tempfile
+import imagej2_base_utils
+
+if __name__=="__main__":
+ # Parse Command Line.
+ parser = argparse.ArgumentParser()
+ parser.add_argument( '--width', dest='width', type=int, help='Image width in pixels' )
+ parser.add_argument( '--height', dest='height', type=int, help='Image height in pixels' )
+ parser.add_argument( '--depth', dest='depth', type=int, help='Image depth (specifies the number of stack slices)' )
+ parser.add_argument( '--image_type', dest='image_type', help='Image type' )
+ parser.add_argument( '--image_title', dest='image_title', default='', help='Image title' )
+ 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 format' )
+ parser.add_argument( '--jython_script', dest='jython_script', help='Path to the Jython script' )
+ parser.add_argument( '--out_fname', help='Path to the output file' )
+ args = parser.parse_args()
+
+ tmp_dir = imagej2_base_utils.get_temp_dir()
+ tmp_image_path = imagej2_base_utils.get_temporary_image_path( tmp_dir, args.output_datatype )
+ # Set the size of the memory allocation pool used by the JVM.
+ memory_size = imagej2_base_utils.get_max_heap_size_value( args.max_heap_size_type, args.max_heap_size )
+
+ # Define command response buffers.
+ tmp_out = tempfile.NamedTemporaryFile().name
+ tmp_stdout = open( tmp_out, 'wb' )
+ tmp_err = tempfile.NamedTemporaryFile().name
+ tmp_stderr = open( tmp_err, 'wb' )
+ # Build the command line.
+ cmd = imagej2_base_utils.get_base_command_imagej2( memory_size, jython_script=args.jython_script )
+ if cmd is None:
+ imagej2_base_utils.stop_err( "ImageJ not found!" )
+ cmd += ' %s %d %d %d %s %s' % ( args.image_title, args.width, args.height, args.depth, args.image_type, tmp_image_path )
+ proc = subprocess.Popen( args=cmd, stderr=tmp_stderr, stdout=tmp_stdout, shell=True )
+ rc = proc.wait()
+ if rc != 0:
+ error_message = imagej2_base_utils.get_stderr_exception( tmp_err, tmp_stderr, tmp_stdout )
+ imagej2_base_utils.stop_err( error_message )
+ shutil.move( tmp_image_path, args.out_fname )
+ imagej2_base_utils.cleanup_before_exit( tmp_dir )
diff -r 000000000000 -r dfe318d97378 imagej2_create_image.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_create_image.xml Tue Jun 09 12:22:03 2015 -0400
@@ -0,0 +1,70 @@
+
+
+ with ImageJ2
+
+ imagej2_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+**What it does**
+
+
+
+
+
+
diff -r 000000000000 -r dfe318d97378 imagej2_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagej2_macros.xml Tue Jun 09 12:22:03 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 dfe318d97378 jython_script.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jython_script.py Tue Jun 09 12:22:03 2015 -0400
@@ -0,0 +1,14 @@
+import sys
+from ij import IJ
+
+# Fiji Jython interpreter implements Python 2.5 which does not
+# provide support for argparse.
+title = sys.argv[ -6 ]
+width = int( sys.argv[ -5 ] )
+height = int( sys.argv[ -4 ] )
+depth = int( sys.argv[ -3 ] )
+type = sys.argv[ -2 ].replace( '_', ' ' )
+tmp_image_path = sys.argv[ -1 ]
+
+imp = IJ.newImage( title, type, width, height, depth )
+IJ.save( imp, "%s" % tmp_image_path )
diff -r 000000000000 -r dfe318d97378 test-data/create_image1.jpg
Binary file test-data/create_image1.jpg has changed
diff -r 000000000000 -r dfe318d97378 tool_dependencies.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml Tue Jun 09 12:22:03 2015 -0400
@@ -0,0 +1,6 @@
+
+
+
+
+
+