view hicConvertFormat.xml @ 11:574f295b5ba4 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/hicexplorer commit 69bb60ab875c1c1769298678f0890d8b92f1899d
author iuc
date Thu, 05 Dec 2024 17:56:25 +0000
parents 2ba6cee8e4db
children
line wrap: on
line source

<tool id="hicexplorer_hicconvertformat" name="@BINARY@" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">
    <description>Convert between different file formats</description>
    <macros>
        <token name="@BINARY@">hicConvertFormat</token>
        <token name="@SINGLE_INPUT@">
            #if $xml_path.inputFormat_selector == 'optionCool':
                --matrices 'matrix.cool'
                --inputFormat cool
                #if $xml_path.correctionName:
                    --correction_name '$xml_path.correctionName'
                #end if

                #if $xml_path.correctionDivision:
                    --correction_division
                #end if

                #if $xml_path.chromosome:
                    #set $chromosome = ' '.join([ '\'%s\'' % $chrom for $chrom in str($xml_path.chromosome).split(' ') ])

                    --chromosome $chromosome
                #end if

                #if $xml_path.loadRawValues:
                    --load_raw_values
                #end if
            #end if
            #if $xml_path.inputFormat_selector == 'optionH5':
                --matrices "matrix.h5"
                --inputFormat h5

            #end if
            #if $xml_path.inputFormat_selector == 'optionHomer':
                --matrices "matrix.homer"
                --inputFormat homer

            #end if
            #if $xml_path.inputFormat_selector == 'optionHicpro':
                --matrices "matrix.hicpro"
                --bedFileHicpro "matrix.bed"
                --inputFormat hicpro
            #end if
            #if $xml_path.inputFormat_selector == 'option2Dtext':
                --matrices "matrix.2Dtext"
                #if $xml_path.resolutions:
                    #set $resolutions = ' '.join([ '"%s"' % $resolution for $resolution in str($xml_path.resolutions).split(" ") ])
                    --resolutions $resolutions
                #end if
                --chromosomeSizes "chromosomeSizes.txt"
                --inputFormat 2D-text
            #end if
            #if $xml_path.inputFormat_selector == 'optionHic':
                --matrices "matrix.hic"
                #if $xml_path.resolutions:
                    #set $resolutions = ' '.join([ '"%s"' % $resolution for $resolution in str($xml_path.resolutions).split(" ") ])

                    --resolutions $resolutions
                #end if
                --inputFormat hic
            #end if
        </token>
        <import>macros.xml</import>
    </macros>

    <expand macro="requirements" />
    <command detect_errors="exit_code"><![CDATA[

        ## single to single case

        #if $outputSingleMultiple_conditional.outputSingleMultiple_selector == 'singleMatrix':
            #set xml_path = $outputSingleMultiple_conditional.inputFormat_conditional

            #if $xml_path.inputFormat_selector == 'optionCool':
                ln -s '$xml_path.matrix_h5_cooler' "matrix.cool" &&

            #end if
            #if $xml_path.inputFormat_selector == 'optionH5':
                ln -s '$xml_path.matrix_h5_cooler' "matrix.h5" &&

            #end if
            #if $xml_path.inputFormat_selector == 'optionHomer':
               ln -s '$xml_path.matrixHomer' "matrix.homer" &&

            #end if

            #if $xml_path.inputFormat_selector == 'optionHicpro':
                ln -s '$xml_path.matrixHicpro' "matrix.hicpro" &&
                ln -s '$xml_path.bedHicpro' "matrix.bed" &&
            #end if
            #if $xml_path.inputFormat_selector == 'option2Dtext':
               ln -s '$xml_path.matrix2Dtext' "matrix.2Dtext" &&

               ln -s '$xml_path.chromosomeSizes' "chromosomeSizes.txt" &&

            #end if
            #if $xml_path.inputFormat_selector == 'optionHic':
                ln -s '$xml_path.matrixHic' "matrix.hic" &&
            #end if

            @BINARY@
            @SINGLE_INPUT@

            --outputFormat $outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector
            --outFileName 'matrix.$outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector'
            #if $outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector == 'hicpro':
                --bedFileHicpro intervalls.bed
            #end if

        ### Set up links to matrices to have correct ending
        #else if $outputSingleMultiple_conditional.outputSingleMultiple_selector == 'multipleMatrix':
            #if $outputSingleMultiple_conditional.resolutionOrManyToOne_conditional.resolutionOrManyToOne_selector == 'resolution_option':
                #set xml_path = $outputSingleMultiple_conditional.resolutionOrManyToOne_conditional.inputFormat_conditional
                #if $xml_path.inputFormat_selector == 'optionCool':
                    ln -s '$xml_path.matrix_h5_cooler' "matrix.cool" &&
                #end if

                #if $xml_path.inputFormat_selector == 'optionH5':
                    ln -s '$xml_path.matrix_h5_cooler' "matrix.h5" &&
                #end if

                #if $xml_path.inputFormat_selector == 'optionHomer':
                    ln -s '$xml_path.matrix_h5_cooler' "matrix.homer" &&
                #end if

                #if $xml_path.inputFormat_selector == 'optionHicpro':
                    ln -s '$xml_path.matrix_h5_cooler' "matrix.hicpro" &&
                    ln -s '$xml_path.bedHicpro' "matrix.bed" &&
                #end if
                #if $xml_path.inputFormat_selector == 'option2Dtext':
                    ln -s '$xml_path.chromosomeSizes' "chromosomeSizes.txt" &&

                #end if
                #if $xml_path.inputFormat_selector == 'optionHic':
                    ln -s '$xml_path.matrix_h5_cooler' "matrix.hic" &&
                #end if
            #else:
                #set xml_manyToOne = $outputSingleMultiple_conditional.resolutionOrManyToOne_conditional
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionCool':
                    #for $counter, $m in enumerate($xml_manyToOne.matrix_h5_cooler_multiple):
                        ln -s '$m' "${counter}_matrix.cool" &&
                    #end for
                    #set $m = ' '.join([ '"%s_matrix"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.matrix_h5_cooler_multiple) ])

                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionH5':
                    #for $counter, $m in enumerate($xml_manyToOne.matrix_h5_cooler_multiple):
                        ln -s '$m' "${counter}_matrix.h5" &&
                    #end for
                    #set $m = ' '.join([ '"%s_matrix"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.matrix_h5_cooler_multiple) ])
                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionHomer':
                    #for $counter, $m in enumerate($xml_manyToOne.matrixHomer):
                        ln -s '$m' "${counter}_matrix.homer" &&
                    #end for
                    #set $m = ' '.join([ '"%s_matrix.homer"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.matrixHomer) ])
                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'option2Dtext':
                    #for $counter, $m in enumerate($xml_manyToOne.matrix2Dtext):
                        ln -s '$m' "${counter}_matrix.matrix2Dtext" &&
                    #end for
                    #set $m = ' '.join([ '"%s_matrix.matrix2Dtext"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.matrix2Dtext) ])
                    #if $xml_manyToOne.resolutions:
                        #set $resolutions = ' '.join([ '"%s"' % $resolution for $resolution in str($xml_manyToOne.resolutions).split(" ") ])
                    --resolutions $resolutions
                    #end if
                    --chromosomeSizes "chromosomeSizes.txt"

                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionHicpro':
                    #for $counter, $m in enumerate($xml_manyToOne.matrixHicpro):
                        ln -s '$m' "${counter}_matrix.hicpro" &&
                    #end for
                    #set $m = ' '.join([ '"%s_matrix.hicpro"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.matrixHicpro) ])

                    #for $counter, $bed in enumerate($xml_manyToOne.bedHicpro):
                        ln -s '$bed' "${counter}_matrix.bed" &&
                    #end for
                    #set $bed = ' '.join([ '"%s_matrix.bed"' % $counter for $counter, $matrix in enumerate($xml_manyToOne.bedHicpro) ])
                    --bedFileHicpro '$bed'
                #end if
            #end if


        @BINARY@
            --outputFormat mcool

            #if $outputSingleMultiple_conditional.resolutionOrManyToOne_conditional.resolutionOrManyToOne_selector == 'resolution_option':
                #set $resolutions = ' '.join([ '"%s"' % $resolution for $resolution in str($outputSingleMultiple_conditional.resolutionOrManyToOne_conditional.resolutions).split(" ") ])

                --resolutions $resolutions
                 #if $xml_path.inputFormat_selector == 'optionCool':
                    --matrices "matrix.cool"
                    --inputFormat cool
                #end if
                #if $xml_path.inputFormat_selector == 'optionH5':
                    --matrices "matrix.h5"
                    --inputFormat h5
                #end if
                #if $xml_path.inputFormat_selector == 'optionHomer':
                    --matrices "matrix.homer"
                    --inputFormat homer
                #end if
                #if $xml_path.inputFormat_selector == 'optionHicpro':
                    --matrices "matrix.hicpro"
                    --bedFileHicpro "matrix.bed"
                    --inputFormat hicpro
                #end if
                #if $xml_path.inputFormat_selector == 'option2Dtext':
                    --matrices "matrix.2Dtext"
                    --chromosomeSizes "chromosomeSizes.txt"
                    --inputFormat 2D-text
                #end if
                #if $xml_path.inputFormat_selector == 'optionHic':
                    --matrices "matrix.hic"
                    --inputFormat hic
                #end if
            #end if

            #if $outputSingleMultiple_conditional.resolutionOrManyToOne_conditional.resolutionOrManyToOne_selector == 'manyToOne_option':
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionCool':
                    --inputFormat cool
                #end if

                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionH5':
                    --inputFormat h5
                #end if

                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionHomer':
                    --inputFormat homer
                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'option2Dtext':
                    
                    --inputFormat 2D-text
                #end if
                #if $xml_manyToOne.inputFormat_conditional.inputFormat_selector == 'optionHicpro':
                    --inputFormat hicpro
                    --bedFileHicpro '$bed'
                #end if

                --matrices $m
            #end if
            --outFileName matrix.mcool
        #end if
        $storeAppliedCorrection
        $enforceInteger

        #if $outputSingleMultiple_conditional.outputSingleMultiple_selector == 'singleMatrix':
            #if $outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector == 'ginteractions':
                && mv 'matrix.${outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector}.tsv' matrix_out
            #else if $outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector == 'hicpro':
                && mv matrix.hicpro matrix_out
            #else:
                && mv 'matrix.$outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector' matrix_out
            #end if
        #else if $outputSingleMultiple_conditional.outputSingleMultiple_selector == 'multipleMatrix':
            && mv matrix.mcool matrix_out
        #end if

]]>
    </command>
    <inputs>
        <conditional name="outputSingleMultiple_conditional">
            <param name="outputSingleMultiple_selector" type="select" label="Choose output matrix type">
                <option value="singleMatrix" selected="True">single matrix</option>
                <option value="multipleMatrix">multiple matrix</option>
            </param>
            <when value="singleMatrix">
                <expand macro="convertFormat_single_macro" />
                <expand macro="convertFormat_single_output_macro" />
            </when>
            <when value="multipleMatrix">
                <conditional name="resolutionOrManyToOne_conditional">
                    <param name="resolutionOrManyToOne_selector" type="select" label="Choose input file type">
                        <option value="resolution_option" >Create out of one matrix a multi matrix with diffrerent resolutions</option>
                        <option value="manyToOne_option">Create out of n matrices one multi matrix</option>
                    </param>
                    <when value="resolution_option">
                        <param name="resolutions" type="text" label="To be stored resolutions" help="Resolutions can be specified seperated with a space, e.g. '10000 20000 50000'">
                            <validator type="expression" message="Only numeric characters and a space as seperator are allowed.">value.replace(' ', '').isnumeric()</validator>
                        </param>
                        <expand macro="convertFormat_single_macro" />
                    </when>
                    <when value="manyToOne_option">
                        <expand macro="convertFormat_multiple_macro" />
                    </when>
                </conditional>
            </when>
        </conditional>
        <param name="storeAppliedCorrection" type="boolean" truevalue="--store_applied_correction" falsevalue="" label="Store applied correction factors in column count" help="Option only for cool input files" />
        <param name="enforceInteger" type="boolean" truevalue="--enforce_integer" falsevalue="" label="Enforce integer for count column" help="Option only for cool input files" />
    </inputs>
    <outputs>
        <data name="output_converted_matrix" from_work_dir="matrix_out" format="cool" label="Converted matrix in cool format">
            <filter>outputSingleMultiple_conditional['outputSingleMultiple_selector'] == 'singleMatrix'</filter>
            <change_format>
                <when input="outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector" value="h5" format="h5" />
                <when input="outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector" value="homer" format="zip" />
                <when input="outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector" value="ginteractions" format="tabular" />
                <when input="outputSingleMultiple_conditional.outputFormat_conditional.outputFormat_selector" value="hicpro" format="tabular" />
            </change_format>
        </data>
        <data name="output_converted_matrix_bed" from_work_dir="intervalls.bed" format="tabular" label="Converted matrix in tabular format">
            <filter>outputSingleMultiple_conditional['outputFormat_conditional']['outputFormat_selector'] == 'hicpro'</filter>
        </data>
        <data name="output_converted_matrix_multi" from_work_dir="matrix_out" format="mcool" label="Converted matrix in mcool format">
            <filter>outputSingleMultiple_conditional['outputSingleMultiple_selector'] == 'multipleMatrix'</filter>
        </data>
    </outputs>
    <tests>
        <test expect_num_outputs="1">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="optionCool" />
                    <param name="matrix_h5_cooler" value="small_test_matrix.cool" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="h5" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" ftype="h5">
                <assert_contents>
                    <has_h5_keys keys="intervals,matrix,nan_bins" />
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="1">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="option2Dtext" />
                    <param name="matrix2Dtext" value="hicConvertFormat/GSM1436265_RAD21_ENCFF002EMQ.txt" />
                    <param name="resolutions" value="10000" />
                    <param name="chromosomeSizes" value="hicConvertFormat/hg19.chrom.sizes" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="h5" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" ftype="h5">
                <assert_contents>
                    <has_h5_keys keys="intervals,matrix" />
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="1">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="optionH5" />
                    <param name="matrix_h5_cooler" value="small_test_matrix.h5" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="cool" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" ftype="cool">
                <assert_contents>
                    <has_h5_keys keys="bins,chroms,indexes,pixels" />
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="1">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="optionCool" />
                    <param name="matrix_h5_cooler" value="hicConvertFormat/small_test_matrix_chr4.cool" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="homer" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" file="hicConvertFormat/small_test_matrix_chr4.homer" ftype="zip" compare="sim_size" delta="40000" />
        </test>
        <test expect_num_outputs="1">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="optionCool" />
                    <param name="matrix_h5_cooler" value="hicConvertFormat/small_test_matrix_chr4.cool" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="ginteractions" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" file="hicConvertFormat/small_test_matrix_chr4.ginteractions.tsv" ftype="tabular" />
        </test>
        <test expect_num_outputs="2">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="singleMatrix" />
                <conditional name="inputFormat_conditional">
                    <param name="inputFormat_selector" value="optionCool" />
                    <param name="matrix_h5_cooler" value="hicConvertFormat/small_test_matrix_chr4.cool" />
                </conditional>

                <conditional name="outputFormat_conditional">
                    <param name="outputFormat_selector" value="hicpro" />
                </conditional>
            </conditional>
            <output name="output_converted_matrix" file="hicConvertFormat/small_test_matrix_chr4.hicpro" ftype="tabular" />
            <output name="output_converted_matrix_bed" file="hicConvertFormat/small_test_matrix_chr4.bed" ftype="tabular" />
        </test>
        <test expect_num_outputs="2">
            <conditional name="outputSingleMultiple_conditional">
                <param name="outputSingleMultiple_selector" value="multipleMatrix" />
                <conditional name="resolutionOrManyToOne_conditional">
                    <param name="resolutionOrManyToOne_selector" value="resolution_option" />
                    <param name="resolutions" value="5000 10000 20000" />
                    <conditional name="inputFormat_conditional">
                        <param name="inputFormat_selector" value="optionH5" />
                        <param name="matrix_h5_cooler" value="small_test_matrix.h5" />
                    </conditional>
                </conditional>
            </conditional>
            <output name="output_converted_matrix_multi" ftype="mcool">
                <assert_contents>
                    <has_h5_keys keys="resolutions" />
                </assert_contents>
            </output>
        </test>
    </tests>
    <help><![CDATA[
Converting between different Hi-C interaction formats
=====================================================

Conversion of Hi-C matrices of different file formats. We support the conversion of hic to cool format via hic2cool,
and homer, HicPro, h5 and cool format to h5, cool, homer or ginteractions format. Moreover, hicConvertFormat accepts multiple input files
from one format with different resolutions and creates a mcool file. Each original file is stored under a path, e.g. matrix.mcool::/resolutions/10000.
A batch computation is possible, the number of input files and output files needs to match, all input files need to be of the same format type and
all output files too.
For input and output of cooler files, special options are available, for all other formats they will be ignored.
HiCPro file format needs an additional bed file as input.

| For more information about HiCExplorer please consider our documentation on readthedocs.io_

.. _readthedocs.io: http://hicexplorer.readthedocs.io/en/latest/index.html
]]>    </help>
    <expand macro="citations" />
</tool>