Mercurial > repos > iuc > sceasy_convert
view sceasy.xml @ 0:d70139524747 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/sceasy/ commit e83761e8057df5ce516fc6681636435078c81534
author | iuc |
---|---|
date | Fri, 10 Nov 2023 20:24:21 +0000 |
parents | |
children | 2062be7efc84 |
line wrap: on
line source
<tool id="sceasy_convert" name="SCEasy Converter" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="22.05"> <description> Convert between common single cell formats </description> <macros> <token name="@TOOL_VERSION@">0.0.7</token> <token name="@VERSION_SUFFIX@">1</token> <macro name="mac_input_form" token_format="@FORMAT@" > <param name="input_object_file" type="data" format="@FORMAT@" label="Input object in @FORMAT@ format"/> </macro> </macros> <requirements> <requirement type="package" version="0.0.7">r-sceasy</requirement> <requirement type="package" version="3.0.6" >loompy</requirement> <requirement type="package" version="0.10.0" >anndata</requirement> <requirement type="package" version="3.10" >python</requirement> <requirement type="package" version="0.7.5.4" >r-anndata</requirement> <requirement type="package" version="1.32.0" >r-reticulate</requirement> </requirements> <command detect_errors="exit_code"> Rscript '$script_file' </command> <configfiles> <configfile name="script_file"><![CDATA[ direction='$conversion.direction' tokens = unlist(strsplit(direction, split="2")) format.from = tokens[1] format.to = tokens[2] library(sceasy) library(reticulate) ## HACK: CI biocontainers do not contain a useable conda binary, just the env. ## see: https://github.com/galaxyproject/tools-iuc/issues/5585#issuecomment-1803773923 is_biocontainer = grepl("^# cmd: /opt/conda/bin/", paste0(reticulate:::python_info_condaenv_find("/usr/local/"), "-none")) if (is_biocontainer) { ## conda detection false positive assignInNamespace("is_conda_python", function(x) FALSE, ns="reticulate") use_python("/usr/local/bin/python") } else { conda_path = Sys.getenv("CONDA_PREFIX") if (conda_path != "") { ## Active conda env found use_python(file.path(conda_path, "bin", "python3")) } else { ## Not biocontainer or conda, assume system python use_python("/usr/bin/python3") } } loompy = reticulate::import('loompy') infile = '$input_object_file' outfile_ext_map=list( "anndata" = "h5ad", "seurat" = "rds", "sce" = "rds", "cds" = "rds", "loom" = "loom") ## this has to be a .loom ending for the export to work. outfile = paste0("outfile.", outfile_ext_map[format.to]) ## IDIOSYNCRACIES: ## Some input formats need be loaded first and then converted, ## and other formats need to be specified as filenames only, ## and even then as formats with specific extensions, ## and some formats need to be objects, or stripped down objects, ## and probably more issues will be discovered in time. do_infile_as_first_arg = as.logical(direction == "loom2sce") do_filename_as_first_arg = as.logical(direction %in% c("anndata2cds", "anndata2seurat", "loom2anndata")) do_dietseurat_in_first_arg = as.logical(direction == "seurat2sce") if (do_infile_as_first_arg) { if (format.from == "loom") { ## LoomExperiment::import only correctly imports when ext is set loom_file = tempfile(tmpdir="/tmp", fileext=".loom") file.copy(from=infile, to=loom_file) ## rename doesn't work in containers infile = loom_file } convertFormat(inFile = infile, from = format.from, to = format.to, outFile = outfile) } else if (do_filename_as_first_arg) { convertFormat(infile, from = format.from, to = format.to, outFile = outfile) } else { ## We need to physically load the object (either Seurat or SCE, both which should be ## of RDS input type) rds = readRDS(infile) if (do_dietseurat_in_first_arg){ library(Seurat) rds = DietSeurat(rds) } convertFormat(rds, from = format.from, to = format.to, outFile = outfile) } ]]></configfile> </configfiles> <inputs> <conditional name="conversion" > <param name="direction" type="select" label="Convert From / To" > <option value="anndata2cds" >AnnData to CellDataSet</option> <option value="anndata2seurat" >AnnData to Seurat</option> <option value="loom2anndata" >Loom to AnnData</option> <option value="loom2sce">Loom to SingleCellexperiment</option> <option value="sce2anndata" >SingleCellexperiment to AnnData</option> <option value="sce2loom" >SingleCellexperiment to Loom</option> <option value="seurat2anndata">Seurat to AnnData</option> <option value="seurat2sce" >Seurat to SingleCellexperiment</option> </param> <when value="anndata2cds" > <expand macro="mac_input_form" token_format="h5ad" /> </when> <when value="anndata2seurat" > <expand macro="mac_input_form" token_format="h5ad" /> </when> <when value="loom2anndata"> <expand macro="mac_input_form" token_format="h5" /> </when> <when value="loom2sce"> <expand macro="mac_input_form" token_format="h5" /> </when> <when value="sce2anndata"> <expand macro="mac_input_form" token_format="sce" /> </when> <when value="sce2loom"> <expand macro="mac_input_form" token_format="sce" /> </when> <when value="seurat2anndata"> <expand macro="mac_input_form" token_format="rds" /> </when> <when value="seurat2sce"> <expand macro="mac_input_form" token_format="rds" /> </when> </conditional> </inputs> <outputs> <data name="output_sce" format="rdata" from_work_dir="outfile.rds" label="${tool.name} on ${on_string}: SingleCellExperiment"> <filter> conversion['direction'].endswith('sce') </filter> </data> <data name="output_cds" format="rdata" from_work_dir="outfile.rds" label="${tool.name} on ${on_string}: CellDataSet"> <filter> conversion['direction'].endswith('cds') </filter> </data> <data name="output_loom" format="h5" from_work_dir="outfile.loom" label="${tool.name} on ${on_string}: Loom"> <filter> conversion['direction'].endswith('loom') </filter> </data> <data name="output_anndata" format="h5" from_work_dir="outfile.h5ad" label="${tool.name} on ${on_string}: AnnData"> <filter> conversion['direction'].endswith('anndata') </filter> </data> <data name="output_seurat" format="rdata" from_work_dir="outfile.rds" label="${tool.name} on ${on_string}: Seurat"> <filter> conversion['direction'].endswith('seurat') </filter> </data> </outputs> <tests> <test expect_num_outputs="1"> <param name="direction" value="anndata2cds"/> <param name="input_object_file" value="test_anndata.h5ad"/> <output name="output_cds" file="ad2cds.rds" ftype="rdata" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="anndata2seurat"/> <param name="input_object_file" value="test_anndata.h5ad"/> <output name="output_seurat" file="ad2seurat.rds" ftype="rdata" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="loom2anndata"/> <param name="input_object_file" value="sce2loom.rds"/> <output name="output_anndata" file="loom2anndata.h5ad" ftype="h5" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="loom2sce"/> <param name="input_object_file" value="sce2loom.rds"/> <output name="output_sce" file="loom2sce.rds" ftype="rdata" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="sce2anndata"/> <param name="input_object_file" value="test_sce.rds"/> <output name="output_anndata" file="sce2anndata.h5ad" ftype="h5" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="sce2loom"/> <param name="input_object_file" value="test_sce.rds"/> <output name="output_loom" file="sce2loom.rds" ftype="h5" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="seurat2anndata"/> <param name="input_object_file" value="test_seurat.rds"/> <output name="output_seurat" file="test_anndata.h5ad" ftype="h5" compare="sim_size"/> </test> <test expect_num_outputs="1"> <param name="direction" value="seurat2sce"/> <param name="input_object_file" value="test_seurat.rds"/> <output name="output_sce" file="test_sce.rds" ftype="rdata" compare="sim_size"/> </test> </tests> <help> SCeasy ====== Convert scRNA data object between formats `sceasy::convertFormat()` Supports the following conversion: .. image:: $PATH_TO_IMAGES/conv.png :width: 80 % :align: center </help> <citations> <citation type="doi"> doi:10.1093/nargab/lqaa052</citation> </citations> </tool>