changeset 3:8229f7f69d08 draft default tip

planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/image_math commit cddd14dcfe71bb7a7e77aaf09bd2c5535e1dd643
author imgteam
date Fri, 06 Mar 2026 17:31:58 +0000
parents 48fa3ac55df2
children
files creators.xml image_math.py image_math.xml test-data/input1_times_2_uint8.tiff
diffstat 4 files changed, 121 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/creators.xml	Wed Apr 24 08:12:29 2024 +0000
+++ b/creators.xml	Fri Mar 06 17:31:58 2026 +0000
@@ -5,6 +5,16 @@
         <yield />
     </xml>
 
+    <xml name="creators/kostrykin">
+        <person givenName="Leonid" familyName="Kostrykin"/>
+        <yield/>
+    </xml>
+
+    <xml name="creators/rmassei">
+        <person givenName="Riccardo" familyName="Massei"/>
+        <yield/>
+    </xml>
+
     <xml name="creators/alliecreason">
         <person givenName="Allison" familyName="Creason"/>
         <yield/>
@@ -19,5 +29,15 @@
         <person givenName="Till" familyName="Korten"/>
         <yield/>
     </xml>
-    
+
+    <xml name="creators/pavanvidem">
+        <person givenName="Pavan" familyName="Videm"/>
+        <yield/>
+    </xml>
+
+    <xml name="creators/tuncK">
+        <person givenName="Tunc" familyName="Kayikcioglu"/>
+        <yield/>
+    </xml>
+
 </macros>
--- a/image_math.py	Wed Apr 24 08:12:29 2024 +0000
+++ b/image_math.py	Fri Mar 06 17:31:58 2026 +0000
@@ -2,9 +2,8 @@
 import ast
 import operator
 
-import giatools.io
+import giatools
 import numpy as np
-import skimage.io
 
 
 supported_operators = {
@@ -70,6 +69,7 @@
 
     parser = argparse.ArgumentParser()
     parser.add_argument('--expression', type=str, required=True)
+    parser.add_argument('--dtype', type=str, default=None)
     parser.add_argument('--output', type=str, required=True)
     parser.add_argument('--input', default=list(), action='append', required=True)
     args = parser.parse_args()
@@ -78,9 +78,9 @@
     im_shape = None
     for input in args.input:
         name, filepath = input.split(':')
-        im = giatools.io.imread(filepath)
+        im = giatools.Image.read(filepath)
         assert name not in inputs, 'Input name "{name}" is ambiguous.'
-        inputs[name] = im
+        inputs[name] = im.data
         if im_shape is None:
             im_shape = im.shape
         else:
@@ -88,4 +88,16 @@
 
     result = eval_expression(args.expression, inputs)
 
-    skimage.io.imsave(args.output, result)
+    # Perform explicit `dtype` conversion
+    if args.dtype:
+        if args.dtype.startswith('uint'):
+            result = result.clip(0, np.inf)
+        result = result.astype(args.dtype)
+
+    # Write result image (preserve metadata from last input image)
+    im.data = result
+    im.normalize_axes_like(
+        im.original_axes,
+    ).write(
+        args.output,
+    )
--- a/image_math.xml	Wed Apr 24 08:12:29 2024 +0000
+++ b/image_math.xml	Fri Mar 06 17:31:58 2026 +0000
@@ -3,26 +3,32 @@
     <macros>
         <import>creators.xml</import>
         <import>tests.xml</import>
-        <token name="@TOOL_VERSION@">1.26.4</token>
-        <token name="@VERSION_SUFFIX@">2</token>
+        <token name="@TOOL_VERSION@">2.3.5</token>
+        <token name="@VERSION_SUFFIX@">0</token>
     </macros>
     <creator>
         <expand macro="creators/bmcv"/>
+        <expand macro="creators/kostrykin"/>
     </creator>
     <edam_operations>
         <edam_operation>operation_3443</edam_operation>
     </edam_operations>
     <requirements>
         <requirement type="package" version="@TOOL_VERSION@">numpy</requirement>
-        <requirement type="package" version="0.22.0">scikit-image</requirement>
-        <requirement type="package" version="0.1">giatools</requirement>
+        <requirement type="package" version="0.7.3">giatools</requirement>
     </requirements>
+    <required_files>
+        <include type="glob" path="*.py"/>
+    </required_files>
     <command><![CDATA[
     
     ## Inputs
     
     python '$__tool_directory__/image_math.py'
     --expression='$expression'
+    #if '$dtype' != '':
+        --dtype='$dtype'
+    #end if
     #for $item in $inputs:
         --input='$item.name:$item.image'
     #end for
@@ -35,7 +41,19 @@
     </command>
     <inputs>
         <param argument="--expression" type="text" label="Expression" optional="false">
-            <validator type="regex">^[a-zA-Z0-9-_\*\+ \(\)/]+$</validator>
+            <validator type="regex">^[a-zA-Z0-9-_\*\+ \(\)/\.]+$</validator>
+        </param>
+        <param name="dtype" type="select" label="Data type of the produced TIFF image">
+            <option value="" selected="true">Determine automatically</option>
+            <option value="float16">16-bit floating point</option>
+            <option value="float32">32-bit floating point</option>
+            <option value="float64">64-bit floating point</option>
+            <option value="int8">8-bit signed integer</option>
+            <option value="int16">16-bit signed integer</option>
+            <option value="int32">32-bit signed integer</option>
+            <option value="uint8">8-bit unsigned integer</option>
+            <option value="uint16">16-bit unsigned integer</option>
+            <option value="uint32">32-bit unsigned integer</option>
         </param>
         <repeat name="inputs" title="Input images" min="1">
             <param name="image" type="data" format="png,tiff" label="Image" />
@@ -50,6 +68,14 @@
     <tests>
         <!-- Multiplication with a scalar -->
         <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='input1 * 2'
+                    ––dtype=''
+                    ––input='input1:input1.tiff'
+                    ––output='./result.tiff'
+            -->
             <param name="expression" value="input1 * 2" />
             <repeat name="inputs">
                 <param name="image" value="input1.tiff" />
@@ -59,6 +85,14 @@
         </test>
         <!-- Unary negation operator -->
         <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='-input1'
+                    ––dtype=''
+                    ––input='input1:input1.tiff'
+                    ––output='./result.tiff'
+            -->
             <param name="expression" value="-input1" />
             <repeat name="inputs">
                 <param name="image" value="input1.tiff" />
@@ -68,6 +102,15 @@
         </test>
         <!-- Binary addition, neutral element, addition with scalar -->
         <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='input1 + input2 + 1'
+                    ––dtype=''
+                    ––input='input1:input1.tiff'
+                    ––input='input2:minus_input1.tiff'
+                    ––output='./result.tiff'
+            -->
             <param name="expression" value="input1 + input2 + 1" />
             <repeat name="inputs">
                 <param name="image" value="input1.tiff" />
@@ -81,6 +124,15 @@
         </test>
         <!-- Parentheses -->
         <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='(input1 + input2) / 2'
+                    ––dtype=''
+                    ––input='input1:input1.tiff'
+                    ––input='input2:ones.tiff'
+                    ––output='./result.tiff'
+            -->
             <param name="expression" value="(input1 + input2) / 2" />
             <repeat name="inputs">
                 <param name="image" value="input1.tiff" />
@@ -94,6 +146,14 @@
         </test>
         <!-- Abs -->
         <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='abs(input)'
+                    ––dtype=''
+                    ––input='input:input1.tiff'
+                    ––output='./result.tiff'
+            -->
             <param name="expression" value="abs(input)" />
             <repeat name="inputs">
                 <param name="image" value="input1.tiff" />
@@ -101,6 +161,24 @@
             </repeat>
             <expand macro="tests/intensity_image_diff" name="result" value="input1_abs.tiff" ftype="tiff"/>
         </test>
+        <!-- Decimal, conversion to explicit `dtype` -->
+        <test>
+            <!--
+                GIA204: :relax_indent:
+                python '$__tool_directory__/image_math.py'
+                    ––expression='input1 / 0.5'
+                    ––dtype='uint8'
+                    ––input='input1:input1.tiff'
+                    ––output='./result.tiff'
+            -->
+            <param name="expression" value="input1 / 0.5" />
+            <param name="dtype" value="uint8" />
+            <repeat name="inputs">
+                <param name="image" value="input1.tiff" />
+                <param name="name" value="input1" />
+            </repeat>
+            <expand macro="tests/intensity_image_diff" name="result" value="input1_times_2_uint8.tiff" ftype="tiff"/>
+        </test>
     </tests>
     <help>
 
Binary file test-data/input1_times_2_uint8.tiff has changed