diff points2label.xml @ 5:dc91192a7150 draft default tip

planemo upload for repository https://github.com/BMCV/galaxy-image-analysis/tree/master/tools/points2labelimage/ commit edac062b00490276ef00d094e0594abdb3a3f23c
author imgteam
date Thu, 06 Nov 2025 09:59:19 +0000
parents 64c155acb864
children
line wrap: on
line diff
--- a/points2label.xml	Mon May 12 14:01:09 2025 +0000
+++ b/points2label.xml	Thu Nov 06 09:59:19 2025 +0000
@@ -1,10 +1,9 @@
-<tool id="ip_points_to_label" name="Convert coordinates to label map" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="20.05">
+<tool id="ip_points_to_label" name="Convert coordinates to label map" version="@TOOL_VERSION@" profile="20.05">
     <description></description>
     <macros>
         <import>creators.xml</import>
         <import>tests.xml</import>
-        <token name="@TOOL_VERSION@">0.4.1</token>
-        <token name="@VERSION_SUFFIX@">1</token>
+        <token name="@TOOL_VERSION@">0.5.0</token>
     </macros>
     <creator>
         <expand macro="creators/bmcv" />
@@ -16,15 +15,16 @@
         <xref type="bio.tools">galaxy_image_analysis</xref>
     </xrefs>
     <requirements>
-        <requirement type="package" version="0.21">scikit-image</requirement>
-        <requirement type="package" version="1.26.4">numpy</requirement>
-        <requirement type="package" version="1.2.4">pandas</requirement>
-        <requirement type="package" version="2024.6.18">tifffile</requirement>
+        <requirement type="package" version="0.25.2">scikit-image</requirement>
+        <requirement type="package" version="2.3.4">numpy</requirement>
+        <requirement type="package" version="2.3.3">pandas</requirement>
+        <requirement type="package" version="2025.10.16">tifffile</requirement>
         <requirement type="package" version="0.3.1">giatools</requirement>
     </requirements>
     <command detect_errors="aggressive"><![CDATA[
 
         python '$__tool_directory__/points2label.py'
+        '$input.file_ext'
         '$input'
         '$output'
         $shapex
@@ -35,12 +35,12 @@
 
     ]]></command>
     <inputs>
-        <param name="input" type="data" format="tabular,geojson" label="List of points in tabular or geojson format"/>
-        <param name="shapex" type="integer" value="500" min="1" label="Width of output image" />
-        <param name="shapey" type="integer" value="500" min="1" label="Height of output image" />
-        <param name="has_header" type="boolean" checked="true" truevalue="--has_header True" falsevalue="" optional="true" label="Tabular list of points has header" help="Turning this off will ignore the first row and assume that the X and Y coordinates correspond to the first and second column, respectively. Ignored, if GeoJSON is used for input." />
-        <param name="swap_xy" type="boolean" checked="false" falsevalue="" truevalue="--swap_xy True" optional="true" label="Swap X and Y coordinates" help="Swap the X and Y coordinates, regardless of whether the tabular list has a header or not." />
-        <param name="binary" type="boolean" checked="false" truevalue="--binary True" falsevalue="" optional="true" label="Produce binary image" help="Use the same label for all points (65535)." />
+        <param name="input" type="data" format="tabular,geojson" label="Shapes to be rasterized"/>
+        <param name="shapex" type="integer" value="500" min="1" label="Width of the output image" />
+        <param name="shapey" type="integer" value="500" min="1" label="Height of the output image" />
+        <param name="has_header" type="boolean" checked="true" truevalue="--has_header True" falsevalue="" optional="true" label="Tabular list of shapes has header" help="Only used if the input is a tabular file (ignored for GeoJSON). Turning this off will interpret the tabular file as a list of points, where the X and Y coordinates correspond to the first and second column, respectively." />
+        <param name="swap_xy" type="boolean" checked="false" falsevalue="" truevalue="--swap_xy True" optional="true" label="Swap X and Y coordinates" help="Swap the X and Y coordinates before rasterization. The width and height of the output image is not affected." />
+        <param name="binary" type="boolean" checked="false" truevalue="--binary True" falsevalue="" optional="true" label="Produce binary image" help="Use the same label for all shapes (65535)." />
     </inputs>
     <outputs>
         <data name="output" format="tiff" />
@@ -106,7 +106,29 @@
             <param name="binary" value="false" />
             <expand macro="tests/label_image_diff" name="output" value="output4.tiff" ftype="tiff" />
         </test>
-        <!-- Labeled / ROI / Rectangles -->
+        <!-- Labeled / TSV with header / TSV with labels / Circles + Rectangles -->
+        <test>
+            <param name="input" value="input5.tsv" />
+            <param name="shapex" value="200" />
+            <param name="shapey" value="100" />
+            <param name="has_header" value="true" />
+            <param name="swap_xy" value="false" />
+            <param name="binary" value="false" />
+            <expand macro="tests/label_image_diff" name="output" value="output8.tiff" ftype="tiff" />
+        </test>
+        <test expect_failure="true">
+            <!-- The test should fail because simultaneous usage of radius and width/height on a row is forbidden -->
+            <param name="input" value="input6.tsv" />
+            <param name="shapex" value="200" />
+            <param name="shapey" value="100" />
+            <param name="has_header" value="true" />
+            <param name="swap_xy" value="false" />
+            <param name="binary" value="false" />
+            <assert_stderr>
+                <has_text text="Ambiguous shape type (circle or rectangle)" />
+            </assert_stderr>
+        </test>
+        <!-- Labeled / GeoJSON / mixed name and no-name -->
         <test>
             <param name="input" value="rois.geojson" />
             <param name="shapex" value="300" />
@@ -117,15 +139,6 @@
             <expand macro="tests/label_image_diff" name="output" value="output5.tiff" ftype="tiff" />
         </test>
         <test>
-            <param name="input" value="rois-noname.geojson" />
-            <param name="shapex" value="300" />
-            <param name="shapey" value="300" />
-            <param name="has_header" value="false" />
-            <param name="swap_xy" value="false" />
-            <param name="binary" value="false" />
-            <expand macro="tests/label_image_diff" name="output" value="output5.tiff" ftype="tiff" />
-        </test>
-        <test>
             <param name="input" value="rois.geojson" />
             <param name="shapex" value="300" />
             <param name="shapey" value="300" />
@@ -134,48 +147,57 @@
             <param name="binary" value="false" />
             <expand macro="tests/label_image_diff" name="output" value="output6.tiff" ftype="tiff" />
         </test>
-        <test expect_failure="true">
-            <!-- The test should fail because the GeoJSON is not rectangular -->
-            <param name="input" value="rois-illegal1.geojson" />
+        <!-- Labeled / GeoJSON / no-name -->
+        <test>
+            <param name="input" value="rois-noname.geojson" />
             <param name="shapex" value="300" />
             <param name="shapey" value="300" />
             <param name="has_header" value="false" />
             <param name="swap_xy" value="false" />
             <param name="binary" value="false" />
+            <expand macro="tests/label_image_diff" name="output" value="output7.tiff" ftype="tiff" />
         </test>
         <test expect_failure="true">
-            <!-- The test should fail because the GeoJSON is not of `Polygon` type -->
+            <!-- The test should fail because the GeoJSON uses the `LineString` primitive type that is not supported yet -->
             <param name="input" value="rois-illegal2.geojson" />
             <param name="shapex" value="300" />
             <param name="shapey" value="300" />
             <param name="has_header" value="false" />
             <param name="swap_xy" value="false" />
             <param name="binary" value="false" />
+            <assert_stderr>
+                <has_text text='Unsupported geometry type: "LineString"' />
+            </assert_stderr>
         </test>
     </tests>
     <help>
 
-        **Converts a list of points to a label map by rasterizing the coordinates.**
+        **Converts a list of shapes to a label map via rasterization.**
 
-        The created image is a single-channel image with 16 bits per pixel (unsigned integer). The points are
-        rasterized with unique labels, or the value 65535 (white) for binary image output. Pixels not corresponding to
-        any points in the tabular file are assigned the value 0 (black).
+        The created image is a single-channel image with 16 bits per pixel (unsigned integers). The shapes are
+        rasterized with unique labels, explicitly given labels (custom), or the value 65535 (white) for binary image
+        output. Pixels not corresponding to any shapes are assigned the value 0 (black).
 
-        **Using a tabular input file:** The tabular list of points can either be header-less. In this case, the first
-        and second columns are expected to be the X and Y coordinates, respectively. Otherwise, if a header is present,
-        it is searched for the following column names:
+        **Using a GeoJSON input file (recommended).** Only features (shape specifications) of `Polygon` and `Point`
+        type are supported. In conjunction with the `radius` property, a `Point` type feature can also be used to
+        represent circles. Custom labels can be encoded in the `name` property (must be numeric and integer), and
+        different features are allowed to use the same labels.
 
-        - ``pos_x`` or ``POS_X``: This column corresponds to the X coordinates.
-        - ``pos_y`` or ``POS_Y``: This column corresponds to the Y coordinates.
-        - If a ``radius`` or ``RADIUS`` column is present, then the points will be rasterized as circles of the
-          corresponding radii.
-        - If ``width`` or ``WIDTH`` and ``height`` or ``HEIGHT`` columns are present, then the points will be rasterized
-          as rectangles of the corresponding size.
+        **Using a tabular input file (deprecated).** The tabular list of points can either be header-less. In this
+        case, the first and second columns are expected to be the X and Y coordinates, respectively, and each row
+        corresponds to a single point. Otherwise, if a header is present, it is searched for the following column
+        names:
+
+        - Column ``pos_x`` or ``POS_X`` is mandatory and corresponds to the X coordinates.
+        - Column ``pos_y`` or ``POS_Y`` is mandatory and corresponds to the Y coordinates.
+        - If a ``radius`` or ``RADIUS`` column is present and the value in a row is positive, then the row will be
+          rasterized as a circle of the corresponding size, centered at the given X and Y coordinates.
+        - If ``width`` or ``WIDTH`` and ``height`` or ``HEIGHT`` columns are present and the values in a row are
+          positive, then the rows will be rasterized as rectangles of the corresponding size, with the upper-left
+          corner given by the X and Y coordinates.
         - If a ``label`` or ``LABEL`` column is present, then the corresponding labels will be used for rasterization
-          (unless "Produce binary image" is activated). Different points are allowed to use the same label. If used, the
-          label must be numeric and integer.
-
-        **Using a GeoJSON input file:** Only rectangular specifications of `Polygon` type geometry is supported.
+          (unless "Produce binary image" is activated). Different rows are allowed to use the same label. If used,
+          the label must be numeric and integer.
 
     </help>
     <citations>