Question: Filter synthax for nested conditionals
1
gravatar for Rob
2.8 years ago by
Rob • 50
France
Rob • 50 wrote:

Hello,

I write a tool and I have a problem with the outputs generated :

My script is :

<tool id=Pl" name="Parallel">
<command interpreter="bash">
#if ($Step.Multithread.threads is True):
    script_multi-threads.sh $input $Step.Multithread.nb_threads $output
#else
    script_mono-thread.sh $input
#end if
</command>
<inputs>
    <param name="input" type="data" label="Input" />
    <conditional name="Step">
        <param name="step_select" type="select" label="Choose a step>
            <option value="step1" selected="true">Step 1</option>
            <option value="step2">Step 2</option>
        </param>
        <when value="step1">
            <param name="A" type="integer" label="A" value="1"/>
        </when>
        <when value="step2">
            <conditional name="Multithread">
                <param name="threads" type="boolean" checked="no" label="Multithreads" value="1"/>
                <when value="true">
                    <param name="nb_threads" type="integer" label="Number threads" value="32"/>
                    <!-- If it's yes, I want to return a file, if it's no, I don't.-->
                </when>
                <when value="false"></when>
            </conditional>
        </when>
    </conditional>
</inputs>

<outputs>
    <data name="output1" label="${input.name}_${Step.Multithread.nb_threads}.out">
            <!-- output name : input_32.out-->
            <filter>(Step['step_select'] == 'step2') and (Step.Multithread['threads'] is True)</filter>
    </data>
</outputs>
</tool>

In this case, Galaxy return an output every time, and doesn't care about which value in the boolean threads is selected.
I read the doc multiple time, and I don't see where the error come from (Is there a problem with the nested conditional ?).
Can you see what I am doing wrong ?

Thanks for your help,
Rob.

synthax conditional galaxy filter • 1.0k views
ADD COMMENT • link • modified 2.8 years ago • written 2.8 years ago by Rob • 50
2
gravatar for Rob
2.8 years ago by
Rob • 50
France
Rob • 50 wrote:

Hi,

After multiple tests, it appears that the problem was in the filter syntax.

The proper syntax is :

<filter>(Step['step_select'] == 'step2') and (Step['Multithread']['threads'] is True)</filter>

and not :

<filter>(Step['step_select'] == 'step2') and (Step.Multithread['threads'] is True)</filter>

So... for access to a boolean value contain in multiple conditional we are suppose to do :
- in <command> : $Step.Multithread.threads
- in <data> : ${Step.Multithread.threads}
- in <filter> : Step['Multithread']['threads']

In my opinion, this syntax doesn't have any sense. If a conditional is an object, the right way to access it should be :

Step.Multithreads.getvalue() or Step.Multithreads['threads'] if you code your getvalue() by ['threads'] but never Step['Multithread']['threads']. (This ['....'] syntax is strange btw, where does this come from ?)

But, it's my opinion, maybe there is some raison why it's like that (I'd be glad to know which one).

The main problem is in fact this information is not available on the documentation or somewhere else (or I just didn't find it) and imo it should be, because it's not obvious.

Thanks,
Rob.

ADD COMMENT • link written 2.8 years ago by Rob • 50
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 16.09
Traffic: 171 users visited in the last hour