classic Classic list List threaded Threaded
1 message Options
| Threaded
Open this post in threaded view


I see from the parameters code that dynamic_options are to be replaced
with options as part of workflow buildout.

I'm finding lots of use cases where the dynamic_options returned by
code from an included module makes some complicated things really easy
for users. For example. In the new gene expression tools, each
expression experiment is stored as a new Galaxy datatype based on the
Bioconductor representation (affybatch, eset etc). Each of those
structures has (optional!) accompanying experimental metadata
(phenodata) which at the time the affybatch is being created, is in
the form of a tab delimited file with a header row. For constructing
design and contrast matrices for analyses, the user has to choose one
or more of those phenodata columns for that experiment - and the
choice typically might be limited to those columns containing
*exactly* two values - ie dichotomous contrasts.

I have code working that allows the user to choose an input (eg
affybatch) experiment file from their history, then to choose from
among *only* the dichotomous phenotype columns, and run the analysis -
you cannot imagine what a big deal this is compared with trying to
teach people to generate design and contrast matrices interactively in

But of course, these miracles all rely on dynamic_options calling some
code included with the tool.

What's the best way forward for a situation where we need to obtain
this kind of drop down list for a tool, that depends on the choice on
a previous page, that will be compatible with workflows in the

I guess one approach is that when generating the (eg affybatch)
metadata, I guess I could create all the option lists I'm going to
ever need as additional metadata datastructures that could be used
like the options from files are used elsewhere - the catch is that
they'd all have to be precomputed rather than being computed on the
fly by the tool - is that reasonable or is there some way to allow
dynamic computing on the metadata (and it's a little complex,
involving parsing the phenodata and constructing a concordance of the
values in each column and eg returning only the columns with exactly
two values)

python -c "foo = map(None,'[hidden email]'); foo.reverse();
print ''.join(foo)"