view measure_granularity.xml @ 5:ac5bea85a391 draft

"planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools commit 7d7a519c3a2cc612d38695b335d0f6c75a099de3"
author bgruening
date Fri, 26 Feb 2021 14:13:40 +0000
parents 382413f8ec1d
children 2564f461de62
line wrap: on
line source

<tool id="cp_measure_granularity" name="MeasureGranularity" version="@CP_VERSION@+galaxy@VERSION_SUFFIX@">
    <description>output spectra of size measurements of the textures</description>

    <macros>
        <import>macros.xml</import>
        <token name="@VERSION_SUFFIX@">0</token>
    </macros>

    <expand macro="py_requirements"/>
    <expand macro="cmd_modules" />

    <configfiles>
        <inputs name="inputs" />
        <configfile name="script_file">
import json
import sys
import os

FOURSPACES=@SPACES@

input_json_path = sys.argv[1]
input_pipeline= sys.argv[2]

params = json.load(open(input_json_path, "r"))

def writemg():
    _str = "\nMeasureGranularity:[module_num:%d|svn_version:\\'Unknown\\'|variable_revision_number:3|show_window:False|notes:\\x5B\\'PARAMS\\x3A\\', \\'- Radius\\', \'- Range\\'\\x5D|batch_state:array(\\x5B\\x5D, dtype=uint8)|enabled:True|wants_pause:False]\n" % new_count

    image_count = len(params['rpt_image'])

    _str += FOURSPACES + "Image count:%d\n" % image_count

    for img in params['rpt_image']:
        obj_count = len(img['rpt_object'])

        _str += FOURSPACES + "Object count:%d\n" % obj_count

        _str += FOURSPACES + "Select an image to measure:%s\n" % img['image_to_measure']

        _str += FOURSPACES + "Subsampling factor for granularity measurements:%s\n" % img['subsampling_factor_granularity']

        _str += FOURSPACES + "Subsampling factor for background reduction:%.2f\n" % img['subsampling_factor_background_reduction']

        _str += FOURSPACES + "Radius of structuring element:%d\n" % img['radius']
        _str += FOURSPACES + "Range of the granular spectrum:%d\n" % img['range_granular_spectrum']

        for obj in img['rpt_object']:
            _str += FOURSPACES + "Select objects to meausre:%s\n" % obj['object_to_measure']

    return _str

with open(input_pipeline) as fin:
    lines = fin.readlines()

    k, v = lines[4].strip().split(':')

    module_count = int(v)
    new_count = module_count + 1
    lines[4] = k + ":%d\n" % new_count
    with open("output.cppipe", "w") as f:
        f.writelines(lines)
        f.write(writemg())

    f.close()
        </configfile>
    </configfiles>

    <inputs>
        <expand macro="input_pipeline_param" />
        <repeat name="rpt_image" title="new image" min="1">
            <param name="image_to_measure" type="text" label="Enter the name of a greyscale image to measure">
                <expand macro="text_validator" />
            </param>

            <param name="subsampling_factor_granularity" type="float" value="0.25" label="Subsampling factor for granularity measurements" help="A factor lower than 1 if the textures of interest are larger than a few pixels. A factor greater than 1 might increase the accuracy but also require more processing time. Images are typically of higher resolution than is required for granularity measurements, so the default value is 0.25."/>

            <param name="subsampling_factor_background_reduction" type="float" value="0.25" min="0.125" max="0.25" label="Subsampling factor for background reduction" help="A small factor should be used if the structures of interest are large." />

            <param name="radius" type="integer" value="10" label="Radius of structuring element" help="This radius should correspond to the radius of the textures of interest after subsampling." />

            <param name="range_granular_spectrum" type="integer" value="16" label="Range of the granular spectrum" help="You may need a trial run to see which granular spectrum range yields informative measurements. Start by using a wide spectrum and narrow it down to the informative range to save time." />

            <repeat name="rpt_object" title="new object">
                <param name="object_to_measure" type="text" label="Enter the name of the object whose granularity will be measured" help="You can select objects from prior modules that identify objects, such as IdentifyPrimaryObjects. If you only want to measure the granularity for the image overall, you can remove all objects.">
                    <expand macro="text_validator" />
                </param>
            </repeat>
        </repeat>
    </inputs>

    <outputs>
        <expand macro="output_pipeline_param" />
    </outputs>

    <tests>
        <test>
            <expand macro="test_input_pipeline_param" />
            <repeat name="rpt_image">
                <param name="image_to_measure" value="DNA" />
                <param name="subsampling_factor_granularity" value="0.25" />
                <param name="subsampling_factor_background_reduction" value="0.25" />
                <param name="radius" value="10" />
                <param name="range_granular_spectrum" value="16" />
            </repeat>
            <expand macro="test_out_file" file="measure_granularity.cppipe" />
        </test>
    </tests>

    <help>
        <![CDATA[

            .. class:: infomark

            **What it does**

            Image granularity is a texture measurement that tries to fit a series of structure elements of increasing size into the texture of the image and outputs a spectrum of measures based on how well they fit. Granularity is measured as described by Ilya Ravkin (in the paper *Bit representation techniques and image processing*). The size of the starting structure element as well as the range of the spectrum is given as input.

            @COMMON_HELP@
            ]]>
    </help>
    <expand macro="citations" />
</tool>