Repository 'anndata_ops'
hg clone https://toolshed.g2.bx.psu.edu/repos/ebi-gxa/anndata_ops

Changeset 19:53a251c6d991 (2021-05-05)
Previous changeset 18:e4bb4666449e (2021-04-12) Next changeset 20:890fb06a2893 (2021-07-22)
Commit message:
"planemo upload for repository https://github.com/ebi-gene-expression-group/container-galaxy-sc-tertiary/tree/develop/tools/tertiary-analysis/scanpy commit ebe77c8718ec65277f4dc0d71fa5f4c5677df62d-dirty"
modified:
anndata_operations.xml
scanpy_macros2.xml
b
diff -r e4bb4666449e -r 53a251c6d991 anndata_operations.xml
--- a/anndata_operations.xml Mon Apr 12 14:40:23 2021 +0000
+++ b/anndata_operations.xml Wed May 05 12:15:47 2021 +0000
[
b'@@ -8,6 +8,22 @@\n   <command detect_errors="exit_code"><![CDATA[\n ln -s \'${input_obj_file}\' input.h5 &&\n \n+#if $copy_r.default:\n+ln -s \'${copy_r.r_source}\' r_source.h5 &&\n+#end if\n+\n+#if $copy_x.default:\n+#for $i, $xs in enumerate($copy_x.xlayers):\n+  ln -s \'${xs.x_source}\' x_source_${i}.h5 &&\n+#end for\n+#end if\n+\n+#if $copy_l.default:\n+#for $i, $ls in enumerate($copy_l.layer_sources):\n+  ln -s \'${ls}\' layer_source_${i}.h5 &&\n+#end for\n+#end if\n+\n #if $copy_o.default:\n #for $i, $os in enumerate($copy_o.obs_sources):\n   ln -s \'${os}\' obs_source_${i}.h5 &&\n@@ -61,6 +77,52 @@\n     logging.warning(\'No genes starting with {} found, skip calculating expression of {} genes\'.format(\'${flag.startswith}\', \'${flag.flag}\'))\n #end for\n \n+#if $copy_r.default and $copy_r.r_source:\n+ad_s = sc.read(\'r_source.h5\')\n+if not all(adata.obs.index.isin(ad_s.obs.index)):\n+  logging.error("Specified object for .raw must contain all .obs from main object.")\n+  sys.exit(1)\n+else:\n+  adata.raw = ad_s[adata.obs.index]\n+del ad_s\n+#end if\n+\n+#if $copy_x.default and len($copy_x.xlayers) > 0:\n+#for $i, $x_s in enumerate($copy_x.xlayers):\n+ad_s = sc.read(\'x_source_${i}.h5\')\n+if adata.n_obs == ad_s.n_obs and all(adata.obs_names == ad_s.obs_names):\n+  #set xs=$copy_x.xlayers[$i]\n+  if "${xs.dest}" == \'\': \n+    logging.error("%sth destination layer for %sth X source not specified" % ("${i}", "${i}"))\n+    sys.exit(1)\n+  adata.layers["${xs.dest}"] = ad_s.X\n+else:\n+  logging.error("X source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  sys.exit(1)\n+del ad_s\n+#end for\n+#end if\n+\n+#if $copy_l.default and len($copy_l.layers) > 0:\n+#for $i, $layer_s in enumerate($copy_l.layer_sources):\n+ad_s = sc.read(\'layer_source_${i}.h5\')\n+if adata.n_obs == ad_s.n_obs and all(adata.obs_names == ad_s.obs_names):\n+  #for $j, $l_key in enumerate($copy_l.layers):\n+  layers_to_copy = (k for k in ad_s.layers.keys() if "${l_key.contains}" in k)\n+  for l_to_copy in layers_to_copy:\n+    suffix=\'\'\n+    if l_to_copy in adata.layers:\n+        suffix = "_${i}" \n+    \n+    adata.layers[l_to_copy+suffix] = ad_s.layers[l_to_copy]\n+  #end for\n+else:\n+  logging.error("Layer source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  sys.exit(1)\n+del ad_s\n+#end for\n+#end if\n+\n #if $copy_o.default and len($copy_o.obs_keys) > 0:\n #for $i, $obs_s in enumerate($copy_o.obs_sources):\n ad_s = sc.read(\'obs_source_${i}.h5\')\n@@ -77,7 +139,9 @@\n       adata.uns[k_to_copy+suffix] = ad_s.uns[k_to_copy]\n   #end for\n else:\n-  logging.warning("Observation source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  logging.error("Observation source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  sys.exit(1)\n+del ad_s\n #end for\n #end if\n \n@@ -95,7 +159,9 @@\n     adata.obsm[k_to_copy+suffix] = ad_s.obsm[k_to_copy]\n   #end for\n else:\n-  logging.warning("Embedding source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  logging.error("Embedding source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  sys.exit(1)\n+del ad_s\n #end for\n #end if\n \n@@ -112,7 +178,9 @@\n     adata.uns[k_to_copy+suffix] = ad_s.uns[k_to_copy]\n   #end for\n else:\n-  logging.warning("Uns source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  logging.error("Uns source ${i} AnnData file is not compatible to be merged to main AnnData file, different cell names.")\n+  sys.exit(1)\n+del ad_s\n #end for\n #end if\n \n@@ -158,6 +226,33 @@\n       <param name="flag" type="text" label="Var name" help="Name of the column in var.names where this boolean flag is stored, for example \'mito\' for mitochondrial genes."/>\n     </repeat>\n     <param name="top_genes" label="Number of top genes" value=\'50\' help="to calculate percentage of the flag'..b'Make sure to use an AnnData object containing all .obs in the main input." format="h5,h5ad" />\n+      </when>\n+      <when value="false"/>\n+    </conditional>\n+    <conditional name="copy_x">\n+      <param name="default" type="boolean" checked="false" label="Copy .X to layers"/>\n+      <when value="true">\n+        <repeat name="xlayers" title="Source objects for .X and paired destination layers in the main AnnData object" help="make sure to use AnnData objects that are compatible in terms of genes, cells and expression data." min="1">\n+          <param name="x_source" type="data" label="AnnData objects with .X to copy" help="Extracts .X from these AnnData objects and merges them into the main input as layers. Make sure to use AnnData objects that are compatible in terms of genes, cells and expression data." format="h5,h5ad" />\n+          <param name="dest" type="text" label="Destination layer" />\n+        </repeat>\n+      </when>\n+      <when value="false"/>\n+    </conditional>\n+    <conditional name="copy_l">\n+      <param name="default" type="boolean" checked="false" label="Copy layers"/>\n+      <when value="true">\n+        <repeat name="layers" title="Layers from which matrices will be copied" help="will copy all layers in the given AnnData object to the main AnnData object. Make sure to use AnnData objects that are compatible in terms of genes, cells and expression data." min="1">\n+          <param name="contains" type="text" label="Key contains" help="Keys to be copied need to contain the text set here."/>\n+        </repeat>\n+        <param name="layer_sources" type="data" label="AnnData objects with layers to copy" help="Extracts layers from these AnnData objects and merges them into the main input. Make sure to use AnnData objects that are compatible in terms of genes, cells and expression data." format="h5,h5ad" multiple="true"/>\n+      </when>\n+      <when value="false"/>\n+    </conditional>\n     <conditional name="copy_o">\n       <param name="default" type="boolean" checked="false" label="Copy observations (such as clusters)"/>\n       <when value="true">\n@@ -203,6 +298,51 @@\n       <param name="color_by" value="louvain"/>\n       <output name="output_h5ad" file="anndata_ops.h5" ftype="h5ad" compare="sim_size"/>\n     </test>\n+    <test>\n+      <param name="input_obj_file" value="find_cluster.h5"/>\n+      <param name="input_format" value="anndata"/>\n+      <conditional name="copy_r">\n+        <param name="default" value="true"/>\n+        <param name="r_source" value="read_10x.h5"/>\n+      </conditional>\n+      <output name="output_h5ad" file="anndata_ops_raw.h5" ftype="h5ad" compare="sim_size">\n+        <assert_contents>\n+          <has_h5_keys keys="raw/X" />\n+\t</assert_contents>\n+      </output>\n+    </test>\n+    <test>\n+      <param name="input_obj_file" value="normalise_data.h5"/>\n+      <param name="input_format" value="anndata"/>\n+      <conditional name="copy_x">\n+        <param name="default" value="true"/>\n+        <repeat name="xlayers">\n+\t  <param name="x_source" value=\'filter_genes.h5\'/>\n+\t  <param name="dest" value=\'filtered\'/>\n+\t</repeat>\n+      </conditional>\n+      <output name="output_h5ad" file="anndata_ops_xlayer.h5" ftype="h5ad" compare="sim_size">\n+        <assert_contents>\n+          <has_h5_keys keys="layers/filtered" />\n+\t</assert_contents>\n+      </output>\n+    </test>\n+    <test>\n+      <param name="input_obj_file" value="find_cluster.h5"/>\n+      <param name="input_format" value="anndata"/>\n+      <conditional name="copy_l">\n+        <param name="default" value="true"/>\n+        <repeat name="layers">\n+\t  <param name="contains" value=\'filtered\'/>\n+\t</repeat>\n+\t<param name="layer_sources" value=\'anndata_ops_xlayer.h5\'/>\n+      </conditional>\n+      <output name="output_h5ad" file="anndata_ops_layer.h5" ftype="h5ad" compare="sim_size">\n+        <assert_contents>\n+          <has_h5_keys keys="layers/filtered" />\n+\t</assert_contents>\n+      </output>\n+    </test>\n   </tests>\n \n   <help><![CDATA[\n'
b
diff -r e4bb4666449e -r 53a251c6d991 scanpy_macros2.xml
--- a/scanpy_macros2.xml Mon Apr 12 14:40:23 2021 +0000
+++ b/scanpy_macros2.xml Wed May 05 12:15:47 2021 +0000
b
@@ -30,6 +30,14 @@
   <token name="@INPUT_OPTS@">
     --input-format '${input_format}' input.h5
   </token>
+  <token name="@SAVE_MATRIX_OPTS@">
+    #if $save_raw
+      --save-raw
+    #end if
+    #if $save_layer
+      --save-layer ${settings.save_layer}
+    #end if
+  </token>
   <token name="@OUTPUT_OPTS@">
 #if str($output_format).startswith('anndata')
     --show-obj stdout --output-format anndata output.h5
@@ -51,7 +59,7 @@
 
   <xml name="requirements">
     <requirements>
-      <requirement type="package" version="0.3.3">scanpy-scripts</requirement>
+      <requirement type="package" version="0.4.0">scanpy-scripts</requirement>
       <yield/>
     </requirements>
   </xml>
@@ -122,6 +130,13 @@
     </data>
   </xml>
 
+  <xml name="save_matrix_params">
+    <param name="save_raw" argument="--save-raw" type="boolean" truevalue="yes" falsevalue="no" checked="false"
+      label="Save adata to adata.raw before processing?" />
+    <param name="save_layer" argument="--save-layer" type="text" optional="true"
+      label="Save adata.X to the specified layer before processing."/>
+  </xml>  
+
   <xml name="output_plot_params">
     <param name="fig_title" argument="--title" type="text" label="Figure title"/>
     <param name="fig_size" argument="--fig-size" type="text" value="4,4" label="Figure size as 'width,height', e.g, '7,7'"/>