Repository 'xarray_select'
hg clone https://toolshed.g2.bx.psu.edu/repos/ecology/xarray_select

Changeset 3:bf595d613af4 (2022-01-20)
Previous changeset 2:123a9a629bef (2021-06-06) Next changeset 4:b393815e4cb7 (2022-07-31)
Commit message:
"planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/data_manipulation/xarray/ commit 2166974df82f97557b082a9e55135098e61640c4"
modified:
macros.xml
test-data/all.netcdf
test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0.png
test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time1.png
test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time50.png
test-data/info_file.txt
test-data/small.netcdf
test-data/version.tabular
xarray_mapplot.py
xarray_netcdf2netcdf.py
xarray_select.xml
xarray_tool.py
added:
macros_mapplot.xml
macros_netcdf2netcdf.xml
macros_tests_netcdf2netcdf.xml
test-data/chl_alltimes.nc
test-data/chl_nh4.netcdf
test-data/chl_phy_where.netcdf
test-data/chl_where_drop.netcdf
test-data/data_from_20040615.nc
test-data/data_to_20040615.nc
test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0_title.png
test-data/select_by_values.netcdf
test-data/small_all_variables.netcdf
test-data/where_condition.txt
test-data/where_condition_simple.txt
removed:
README.md
b
diff -r 123a9a629bef -r bf595d613af4 README.md
--- a/README.md Sun Jun 06 08:51:41 2021 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,8 +0,0 @@
-# Xarray tools for netCDF
-## netCDF metadata information
-
-The first tool `xarray_metadata_info ` uses xarray to provide users with general information about variable names, dimensions
-and attributes.
-Variables that can be extracted and dimensions available are printed in a tabular file.
-
-The tool also print a general information file. It's the result of the xarray method info().
b
diff -r 123a9a629bef -r bf595d613af4 macros.xml
--- a/macros.xml Sun Jun 06 08:51:41 2021 +0000
+++ b/macros.xml Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -1,185 +1,28 @@\n-<macros>\n-    <token name="@TOOL_VERSION@">0.18.2</token>\n-    <token name="@VERSION_SUFFIX@">0</token>\n-    <xml name="edam_ontology">\n-        <edam_topics>\n-            <edam_topic>topic_0610</edam_topic>\n-            <edam_topic>topic_3050</edam_topic>\n-        </edam_topics>\n-    </xml>\n-    <xml name="citations">\n-        <citations>\n-            <citation type="bibtex">\n-                @article{hoyer2017xarray,\n-                    title     = {xarray: {N-D} labeled arrays and datasets in {Python}},\n-                    author    = {Hoyer, S. and J. Hamman},\n-                    journal   = {Journal of Open Research Software},\n-                    volume    = {5},\n-                    number    = {1},\n-                    year      = {2017},\n-                    publisher = {Ubiquity Press},\n-                    doi       = {10.5334/jors.148},\n-                    url       = {http://doi.org/10.5334/jors.148}\n-                }\n-            </citation>\n-        </citations>\n-    </xml>\n-    <xml name="customize_appearance_plots">\n-        <param name="borders" type="float" optional="true" label="Add country borders with alpha value [0-1] (optional)" />\n-        <param name="coastline" type="float" optional="true" label="Add coastline with alpha value [0-1] (optional)" />\n-        <param name="ocean" type="float" optional="true" label="Add ocean with alpha value [0-1] (optional)" />\n-        <param name="land" type="float" optional="true" label="Add land with alpha value [0-1] (optional)" />\n-        <param name="title" type="text" optional="true" label="Specify plot title (optional)" />\n-        <param name="colorbar_label" type="text"  optional="true" label="Set a label for colormap (optional)" />\n-        <param name="cmap" type="select" optional="true" label="Specify which colormap to use for plotting (optional)">\n-            <option value="cm.batlow">batlow</option>\n-            <option value="cm.batlowW">batlowW</option>\n-            <option value="cm.batlowK">batlowK</option>\n-            <option value="cm.devon">devon</option>\n-            <option value="cm.davos">davos</option>\n-            <option value="cm.oslo">oslo</option>\n-            <option value="cm.lapaz">lapaz</option>\n-            <option value="cm.acton">acton</option>\n-            <option value="cm.lajolla">lajolla</option>\n-            <option value="cm.bilbao">bilbao</option>\n-            <option value="cm.grayC">grayC</option>\n-            <option value="cm.tokyo">tokyo</option>\n-            <option value="cm.turku">turku</option>\n-            <option value="cm.bamako">bamako</option>\n-            <option value="cm.nuuk">nuuk</option>\n-            <option value="cm.hawaii">hawaii</option>\n-            <option value="cm.buda">buda</option>\n-            <option value="cm.imola">imola</option>\n-            <option value="cm.broc">broc</option>\n-            <option value="cm.lisbon">lisbon</option>\n-            <option value="cm.roma">roma</option>\n-            <option value="cm.cork">cork</option>\n-            <option value="cm.tofino">tofino</option>\n-            <option value="cm.bam">bam</option>\n-            <option value="cm.vik">vik</option>\n-            <option value="cm.berlin">berlin</option>\n-            <option value="cm.vanimo">vanimo</option>\n-            <option value="cm.oleron">oleron</option>\n-            <option value="cm.bukavu">bukavu</option>\n-            <option value="cm.fes">fes</option>\n-            <option value="cm.romaO">romaO</option>\n-            <option value="cm.bamO">bamO</option>\n-            <option value="cm.brocO">brocO</option>\n-            <option value="cm.corkO">corkO</option>\n-            <option value="cm.vikO">vikO</option>\n-            <option value="cm.batlow_r">batlow_r</option>\n-            <option value="cm.batlowW_r">batlowW_r</option>\n-            <option value="cm.batlowK_r">batlowK_r</option>\n-            <option value="cm.devon_r">devon_r</option>\n-            <option valu'..b'tion value="RdGy">RdGy</option>\n-            <option value="RdPu">RdPu</option>\n-            <option value="RdBu_r">RdBu_r</option>\n-            <option value="RdGy_r">RdGy_r</option>\n-            <option value="RdPu_r">RdPu_r</option>\n-            <option value="RdYlBu">RdYlBu</option>\n-            <option value="RdYlGn">RdYlGn</option>\n-            <option value="Reds">Reds</option>\n-            <option value="Set1">Set1</option>\n-            <option value="Set2">Set2</option>\n-            <option value="Set3">Set3</option>\n-            <option value="Spectral">Spectral</option>\n-            <option value="Wistia">Wistia</option>\n-            <option value="YlGn">YlGn</option>\n-            <option value="YlGnBu">YlGnBu</option>\n-            <option value="YlOrBr">YlOrBr</option>\n-            <option value="YlOrRd">YlOrRd</option>\n-            <option value="afmhot">afmhot</option>\n-            <option value="autumn">autumn</option>\n-            <option value="binary">binary</option>\n-            <option value="bone">bone</option>\n-            <option value="brg">brg</option>\n-            <option value="bwr">bwr</option>\n-            <option value="cool">cool</option>\n-            <option value="coolwarm" selected="true">coolwarm</option>\n-            <option value="copper">copper</option>\n-            <option value="cubehelix">cubehelix</option>\n-            <option value="flag">flag</option>\n-            <option value="gist_earth">gist_earth</option>\n-            <option value="gist_gray">gist_gray</option>\n-            <option value="gist_heat">gist_heat</option>\n-            <option value="gist_ncar">gist_ncar</option>\n-            <option value="gist_rainbow">gist_rainbow</option>\n-            <option value="gist_stern">gist_stern</option>\n-            <option value="gist_yarg">gist_yarg</option>\n-            <option value="gnuplot">gnuplot</option>\n-            <option value="gnuplot2">gnuplot2</option>\n-            <option value="gray">gray</option>\n-            <option value="hot">hot</option>\n-            <option value="hsv">hsv</option>\n-            <option value="jet">jet</option>\n-            <option value="nipy_spectral">nipy_spectral</option>\n-            <option value="ocean">ocean</option>\n-            <option value="pink">pink</option>\n-            <option value="prism">prism</option>\n-            <option value="rainbow">rainbow</option>\n-            <option value="seismic">seismic</option>\n-            <option value="spring">spring</option>\n-            <option value="summer">summer</option>\n-            <option value="tab10">tab10</option>\n-            <option value="tab20">tab20</option>\n-            <option value="tab20b">tab20b</option>\n-            <option value="tab20c">tab20c</option>\n-            <option value="terrain">terrain</option>\n-            <option value="winter">winter</option>\n-        </param>\n-    </xml>\n-</macros>\n+<macros>\r\n+    <token name="@TOOL_VERSION@">0.20.2</token>\r\n+    <token name="@VERSION_SUFFIX@">0</token>\r\n+    <token name="@PROFILE@">20.05</token>\r\n+    <xml name="edam_ontology">\r\n+        <edam_topics>\r\n+            <edam_topic>topic_0610</edam_topic>\r\n+            <edam_topic>topic_3050</edam_topic>\r\n+        </edam_topics>\r\n+    </xml>\r\n+    <xml name="citations">\r\n+        <citations>\r\n+            <citation type="bibtex">\r\n+                @article{hoyer2017xarray,\r\n+                    title     = {xarray: {N-D} labeled arrays and datasets in {Python}},\r\n+                    author    = {Hoyer, S. and J. Hamman},\r\n+                    journal   = {Journal of Open Research Software},\r\n+                    volume    = {5},\r\n+                    number    = {1},\r\n+                    year      = {2017},\r\n+                    publisher = {Ubiquity Press},\r\n+                    doi       = {10.5334/jors.148},\r\n+                    url       = {http://doi.org/10.5334/jors.148}\r\n+                }\r\n+            </citation>\r\n+        </citations>\r\n+    </xml>\r\n+</macros>\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 macros_mapplot.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_mapplot.xml Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -0,0 +1,213 @@\n+<macros>\r\n+    <xml name="config_map">\r\n+        <configfiles>\r\n+            <configfile name="map_customization"><![CDATA[\r\n+{\r\n+#if $condi_datetime.datetime=="yes"\r\n+"time":"$condi_datetime.time_values",\r\n+#end if\r\n+"latitude":\'$lat_dim\',\r\n+"longitude":\'$lon_dim\',\r\n+#if $colorbar_label\r\n+"label":\'$colorbar_label\',\r\n+#end if\r\n+#if $title\r\n+"title":"$title",\r\n+#end if\r\n+#if $cmap\r\n+"cmap":\'$cmap\',\r\n+#end if\r\n+#if $land\r\n+"land":\'$land\',\r\n+#end if\r\n+#if $ocean\r\n+"ocean":\'$ocean\',\r\n+#end if\r\n+#if $coastline\r\n+"coastline":\'$coastline\',\r\n+#end if\r\n+#if $borders\r\n+"borders":\'$borders\',\r\n+#end if\r\n+#if $threshold\r\n+"threshold":\'$threshold\',\r\n+#end if\r\n+#if $range\r\n+"range":\'$range\',\r\n+#end if\r\n+#if $xlim\r\n+"xlim":\'$xlim\',\r\n+#end if\r\n+#if $ylim\r\n+"ylim":\'$ylim\',\r\n+#end if\r\n+}\r\n+            ]]>\r\n+            </configfile>\r\n+            <configfile name="map_projection"><![CDATA[\r\n+#if $proj\r\n+\'$proj\'\r\n+#end if \r\n+            ]]>\r\n+            </configfile>\r\n+        </configfiles>\r\n+    </xml>\r\n+    <xml name="customize_appearance_plots">\r\n+        <param name="borders" type="float" optional="true" label="Add country borders with alpha value [0-1] (optional)" />\r\n+        <param name="coastline" type="float" optional="true" label="Add coastline with alpha value [0-1] (optional)" />\r\n+        <param name="ocean" type="float" optional="true" label="Add ocean with alpha value [0-1] (optional)" />\r\n+        <param name="land" type="float" optional="true" label="Add land with alpha value [0-1] (optional)" />\r\n+        <param name="title" type="text" optional="true" label="Specify plot title (optional)" />\r\n+        <param name="colorbar_label" type="text" optional="true" label="Set a label for colormap (optional)" />\r\n+        <param name="cmap" type="select" optional="true" label="Specify which colormap to use for plotting (optional)">\r\n+            <option value="cm.batlow">batlow</option>\r\n+            <option value="cm.batlowW">batlowW</option>\r\n+            <option value="cm.batlowK">batlowK</option>\r\n+            <option value="cm.devon">devon</option>\r\n+            <option value="cm.davos">davos</option>\r\n+            <option value="cm.oslo">oslo</option>\r\n+            <option value="cm.lapaz">lapaz</option>\r\n+            <option value="cm.acton">acton</option>\r\n+            <option value="cm.lajolla">lajolla</option>\r\n+            <option value="cm.bilbao">bilbao</option>\r\n+            <option value="cm.grayC">grayC</option>\r\n+            <option value="cm.tokyo">tokyo</option>\r\n+            <option value="cm.turku">turku</option>\r\n+            <option value="cm.bamako">bamako</option>\r\n+            <option value="cm.nuuk">nuuk</option>\r\n+            <option value="cm.hawaii">hawaii</option>\r\n+            <option value="cm.buda">buda</option>\r\n+            <option value="cm.imola">imola</option>\r\n+            <option value="cm.broc">broc</option>\r\n+            <option value="cm.lisbon">lisbon</option>\r\n+            <option value="cm.roma">roma</option>\r\n+            <option value="cm.cork">cork</option>\r\n+            <option value="cm.tofino">tofino</option>\r\n+            <option value="cm.bam">bam</option>\r\n+            <option value="cm.vik">vik</option>\r\n+            <option value="cm.berlin">berlin</option>\r\n+            <option value="cm.vanimo">vanimo</option>\r\n+            <option value="cm.oleron">oleron</option>\r\n+            <option value="cm.bukavu">bukavu</option>\r\n+            <option value="cm.fes">fes</option>\r\n+            <option value="cm.romaO">romaO</option>\r\n+            <option value="cm.bamO">bamO</option>\r\n+            <option value="cm.brocO">brocO</option>\r\n+            <option value="cm.corkO">corkO</option>\r\n+            <option value="cm.vikO">vikO</option>\r\n+            <option value="cm.batlow_r">batlow_r</option>\r\n+            <option value="cm.batlowW_r">batlowW_r</option>\r\n+            <option value="cm.batlowK_r">batlowK_r</option>\r\n+            <option value="cm.devon_r">devon'..b'       <option value="BuGn">BuGn</option>\r\n+            <option value="BuPu">BuPu</option>\r\n+            <option value="CMRmap">CMRmap</option>\r\n+            <option value="Dark2">Dark2</option>\r\n+            <option value="GnBu">GnBu</option>\r\n+            <option value="Greens">Greens</option>\r\n+            <option value="Greys">Greys</option>\r\n+            <option value="OrRd">OrRd</option>\r\n+            <option value="Oranges">Oranges</option>\r\n+            <option value="PRGn">PRGn</option>\r\n+            <option value="Paired">Paired</option>\r\n+            <option value="Pastel1">Pastel1</option>\r\n+            <option value="Pastel2">Pastel2</option>\r\n+            <option value="PiYG">PiYG</option>\r\n+            <option value="PuBu">PuBu</option>\r\n+            <option value="PuBuGn">PuBuGn</option>\r\n+            <option value="PuOr">PuOr</option>\r\n+            <option value="PuRd">PuRd</option>\r\n+            <option value="Purples">Purples</option>\r\n+            <option value="RdBu">RdBu</option>\r\n+            <option value="RdGy">RdGy</option>\r\n+            <option value="RdPu">RdPu</option>\r\n+            <option value="RdBu_r">RdBu_r</option>\r\n+            <option value="RdGy_r">RdGy_r</option>\r\n+            <option value="RdPu_r">RdPu_r</option>\r\n+            <option value="RdYlBu">RdYlBu</option>\r\n+            <option value="RdYlGn">RdYlGn</option>\r\n+            <option value="Reds">Reds</option>\r\n+            <option value="Set1">Set1</option>\r\n+            <option value="Set2">Set2</option>\r\n+            <option value="Set3">Set3</option>\r\n+            <option value="Spectral">Spectral</option>\r\n+            <option value="Wistia">Wistia</option>\r\n+            <option value="YlGn">YlGn</option>\r\n+            <option value="YlGnBu">YlGnBu</option>\r\n+            <option value="YlOrBr">YlOrBr</option>\r\n+            <option value="YlOrRd">YlOrRd</option>\r\n+            <option value="afmhot">afmhot</option>\r\n+            <option value="autumn">autumn</option>\r\n+            <option value="binary">binary</option>\r\n+            <option value="bone">bone</option>\r\n+            <option value="brg">brg</option>\r\n+            <option value="bwr">bwr</option>\r\n+            <option value="cool">cool</option>\r\n+            <option value="coolwarm" selected="true">coolwarm</option>\r\n+            <option value="copper">copper</option>\r\n+            <option value="cubehelix">cubehelix</option>\r\n+            <option value="flag">flag</option>\r\n+            <option value="gist_earth">gist_earth</option>\r\n+            <option value="gist_gray">gist_gray</option>\r\n+            <option value="gist_heat">gist_heat</option>\r\n+            <option value="gist_ncar">gist_ncar</option>\r\n+            <option value="gist_rainbow">gist_rainbow</option>\r\n+            <option value="gist_stern">gist_stern</option>\r\n+            <option value="gist_yarg">gist_yarg</option>\r\n+            <option value="gnuplot">gnuplot</option>\r\n+            <option value="gnuplot2">gnuplot2</option>\r\n+            <option value="gray">gray</option>\r\n+            <option value="hot">hot</option>\r\n+            <option value="hsv">hsv</option>\r\n+            <option value="jet">jet</option>\r\n+            <option value="nipy_spectral">nipy_spectral</option>\r\n+            <option value="ocean">ocean</option>\r\n+            <option value="pink">pink</option>\r\n+            <option value="prism">prism</option>\r\n+            <option value="rainbow">rainbow</option>\r\n+            <option value="seismic">seismic</option>\r\n+            <option value="spring">spring</option>\r\n+            <option value="summer">summer</option>\r\n+            <option value="tab10">tab10</option>\r\n+            <option value="tab20">tab20</option>\r\n+            <option value="tab20b">tab20b</option>\r\n+            <option value="tab20c">tab20c</option>\r\n+            <option value="terrain">terrain</option>\r\n+            <option value="winter">winter</option>\r\n+        </param>\r\n+    </xml>\r\n+</macros>\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 macros_netcdf2netcdf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_netcdf2netcdf.xml Thu Jan 20 17:07:19 2022 +0000
b
b'@@ -0,0 +1,143 @@\n+<macros>\r\n+    <xml name="coord_range">\r\n+        <repeat name="user_choice" title="Filter by coordinate values" min="0" max="20" help="Use this option to filter on the values of the selected coordinate">\r\n+            <param name="dim" type="select" label="Dimensions">\r\n+                <options from_dataset="var_tab">\r\n+                    <column name="value" index="0"/>\r\n+                </options>\r\n+            </param>\r\n+            <conditional name="condi_between">\r\n+                <param name="comparator" type="select" label="Comparator">\r\n+                    <option value="is">is</option>\r\n+                    <option value="from">from</option>\r\n+                    <option value="to">to</option>\r\n+                    <option value="sl">slice(threshold1,threshold2)</option>\r\n+                </param>\r\n+                <when value="sl">\r\n+                    <param name="t1" type="text" value="" label="Choose the start value for slice"/>\r\n+                    <param name="t2" type="text" value="" label="Choose the end value for slice"/>\r\n+                </when>\r\n+                <when value="to">\r\n+                    <param name="value" type="text" value="" label="Choose the end value"/>\r\n+                </when>\r\n+                <when value="from">\r\n+                    <param name="value" type="text" value="" label="Choose the start value"/>\r\n+                </when>\r\n+                <when value="is">\r\n+                    <param name="value" type="text" value="" label="Choose the value to select"/>\r\n+                    <yield />\r\n+                </when>\r\n+            </conditional>\r\n+        </repeat>\r\n+    </xml>\r\n+    <xml name="section_variables">\r\n+        <section name="variable" title="Select variables">\r\n+            <param name="var" type="select" multiple="true" label="Choose variables to extract">\r\n+                <options from_dataset="var_tab">\r\n+                    <column name="name" index="0"/>\r\n+                    <column name="value" index="0"/>\r\n+                </options>\r\n+            </param>\r\n+            <param type="float" name="scale" optional="true" help="scale factor (float) to apply to the selected variable (optional and only if a variable is selected)"/>\r\n+            <param name="write_all" type="boolean" checked="false" label="Write all variables to new netCDF file (only if a variable is selected)"/>\r\n+            <param name="keep_attributes" type="boolean" checked="true" label="Keep all attributes (only if a variable is selected)"/>\r\n+        </section>\r\n+    </xml>\r\n+    <xml name="section_coords">\r\n+        <section name="subset_coords" title="Subset by coordinates">\r\n+            <conditional name="tsel">\r\n+                <param name="by_click" type="select" optional="true" label="Coordinate values">\r\n+                    <option value="sel">Coordinate values (sel)</option>\r\n+                    <option value="isel">Coordinate indices (isel)</option>\r\n+                    <option value="isel_list" selected="true">Coordinate values from list</option>\r\n+                </param>\r\n+                <when value="sel">\r\n+                    <expand macro="coord_range">\r\n+                        <param name="method" type="select" multiple="false" label="Choose selection method">\r\n+                            <option value="None">only exact matches</option>\r\n+                            <option value="nearest">use nearest valid index value</option>\r\n+                            <option value="pad">propagate last valid index value forward</option>\r\n+                            <option value="backfill">propagate next valid index value backward</option>\r\n+                        </param>\r\n+                    </expand>\r\n+                </when>\r\n+                <when value="isel">\r\n+                    <expand macro="coord_range"/>\r\n+                </when>\r\n+                <when value="isel_list">\r\n+                    <repeat name="user_choice" title="Filte'..b'>\r\n+                                <option value="is">is</option>\r\n+                                <option value="from">from</option>\r\n+                                <option value="to">to</option>\r\n+                                <option value="sl">slice(threshold1,threshold2)</option>\r\n+                            </param>\r\n+                            <when value="sl">\r\n+                                <param name="t1" type="select" multiple="false" label="Choose the start value for slice">\r\n+                                    <options from_dataset="dim_tab">\r\n+                                        <column name="name" index="1"/>\r\n+                                        <column name="value" index="0"/>\r\n+                                    </options>\r\n+                                </param>\r\n+                                <param name="t2" type="select" multiple="false" label="Choose the end value for slice">\r\n+                                    <options from_dataset="dim_tab">\r\n+                                        <column name="name" index="1"/>\r\n+                                        <column name="value" index="0"/>\r\n+                                    </options>\r\n+                                </param>\r\n+                            </when>\r\n+                            <when value="is">\r\n+                                <param name="value" type="select" multiple="false" label="Choose the value to select">\r\n+                                    <options from_dataset="dim_tab">\r\n+                                        <column name="name" index="1"/>\r\n+                                        <column name="value" index="0"/>\r\n+                                    </options>\r\n+                                </param>\r\n+                            </when>\r\n+                            <when value="to">\r\n+                                <param name="value" type="select" multiple="false" label="Choose the end value">\r\n+                                    <options from_dataset="dim_tab">\r\n+                                        <column name="name" index="1"/>\r\n+                                        <column name="value" index="0"/>\r\n+                                    </options>\r\n+                                </param>\r\n+                            </when>\r\n+                            <when value="from">\r\n+                                <param name="value" type="select" multiple="false" label="Choose the start value">\r\n+                                    <options from_dataset="dim_tab">\r\n+                                        <column name="name" index="1"/>\r\n+                                        <column name="value" index="0"/>\r\n+                                    </options>\r\n+                                </param>\r\n+                            </when>\r\n+                        </conditional>\r\n+                    </repeat>\r\n+                </when>\r\n+            </conditional>\r\n+        </section>\r\n+    </xml>\r\n+    <xml name="section_where">\r\n+        <section name="mask_values" title="Advanced options to mask by values">\r\n+            <conditional name="mask_condi">\r\n+                <param name="mask_option" type="select" multiple="false" label="Option for masked values">\r\n+                    <option value="keep" selected="true">Fill with NA</option>\r\n+                    <option value="drop">Drop values</option>\r\n+                    <option value="other">Set constant</option>\r\n+                </param>\r\n+                <when value="keep"/>\r\n+                <when value="drop"/>\r\n+                <when value="other">\r\n+                    <param name="set_other" type="float" value="0" label="Value to use for locations in this object where cond is False." />\r\n+                </when>\r\n+            </conditional>\r\n+            <param name="where_condition" type="data" optional="true" format="txt" label="file containing a where expression" />\r\n+        </section>\r\n+    </xml>\r\n+</macros>\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 macros_tests_netcdf2netcdf.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_tests_netcdf2netcdf.xml Thu Jan 20 17:07:19 2022 +0000
b
b'@@ -0,0 +1,263 @@\n+<macros>\r\n+    <xml name="section_tests">\r\n+        <tests>\r\n+            <test>\r\n+                <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+                <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+                <section name="variable">\r\n+                    <param name="var" value="chl"/>\r\n+                    <param name="scale" value="1000.5"/>\r\n+                </section>\r\n+                <section name="subset_coords">\r\n+                    <conditional name="tsel">\r\n+                        <param name="by_click" value="isel_list"/>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="time"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="10"/>\r\n+                                <param name="t2" value="12"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="latitude"/>\r\n+                            <param name="dim_tab" value="latitude.tabular"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="5"/>\r\n+                                <param name="t2" value="10"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="longitude"/>\r\n+                            <param name="dim_tab" value="longitude.tabular"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="4"/>\r\n+                                <param name="t2" value="10"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                    </conditional>\r\n+                </section>\r\n+                <output name="output_netcdf" file="small.netcdf" compare="sim_size" delta="1000"/>\r\n+            </test>\r\n+            <test>\r\n+                <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+                <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+                <section name="variable">\r\n+                    <param name="var" value="chl"/>\r\n+                    <param name="scale" value="1000.5"/>\r\n+                    <param name="write_all" value="true"/>\r\n+                    <param name="keep_attribute" value="false"/>\r\n+                </section>\r\n+                <section name="subset_coords">\r\n+                    <conditional name="tsel">\r\n+                        <param name="by_click" value="isel_list"/>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="time"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="10"/>\r\n+                                <param name="t2" value="12"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="latitude"/>\r\n+                            <param name="dim_tab" value="latitude.tabular"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="5"/>\r\n+                                <param name="t2" value="1'..b'ame="method" value="nearest"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                    </conditional>\r\n+                </section>\r\n+                <output name="output_netcdf" file="select_by_values.netcdf" compare="sim_size" delta="500"/>\r\n+            </test>\r\n+            <test>\r\n+                <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+                <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+                <section name="variable">\r\n+                    <param name="var" value="chl,phy"/>\r\n+                </section>\r\n+                <section name="mask_values">\r\n+                    <conditional name="mask_condi">\r\n+                        <param name="mask_option" value="other"/>\r\n+                        <param name="set_other" value="1000"/>\r\n+                    </conditional>\r\n+                    <param name="where_condition" ftype="txt" value="where_condition.txt"/>\r\n+                </section>\r\n+                <output name="output_netcdf" file="chl_phy_where.netcdf" compare="sim_size" delta="500"/>\r\n+            </test>\r\n+            <test>\r\n+                <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+                <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+                <section name="variable">\r\n+                    <param name="var" value="chl"/>\r\n+                    <param name="scale" value="1000.5"/>\r\n+                    <param name="write_all" value="true"/>\r\n+                    <param name="keep_attribute" value="true"/>\r\n+                </section>\r\n+                <section name="subset_coords">\r\n+                    <conditional name="tsel">\r\n+                        <param name="by_click" value="isel_list"/>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="time"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="10"/>\r\n+                                <param name="t2" value="12"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="latitude"/>\r\n+                            <param name="dim_tab" value="latitude.tabular"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="0"/>\r\n+                                <param name="t2" value="10"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                        <repeat name="user_choice">\r\n+                            <param name="dim" value="longitude"/>\r\n+                            <param name="dim_tab" value="longitude.tabular"/>\r\n+                            <conditional name="condi_between">\r\n+                                <param name="comparator" value="sl"/>\r\n+                                <param name="t1" value="1"/>\r\n+                                <param name="t2" value="20"/>\r\n+                            </conditional>\r\n+                        </repeat>\r\n+                    </conditional>\r\n+                </section>\r\n+                <section name="mask_values">\r\n+                    <conditional name="mask_condi">\r\n+                        <param name="mask_option" value="drop"/>\r\n+                    </conditional>\r\n+                    <param name="where_condition" ftype="txt" value="where_condition_simple.txt"/>\r\n+                </section>\r\n+                <output name="output_netcdf" file="chl_where_drop.netcdf" compare="sim_size" delta="500"/>\r\n+            </test>\r\n+        </tests>\r\n+    </xml>\r\n+</macros>\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 test-data/all.netcdf
b
Binary file test-data/all.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/chl_alltimes.nc
b
Binary file test-data/chl_alltimes.nc has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/chl_nh4.netcdf
b
Binary file test-data/chl_nh4.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/chl_phy_where.netcdf
b
Binary file test-data/chl_phy_where.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/chl_where_drop.netcdf
b
Binary file test-data/chl_where_drop.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/data_from_20040615.nc
b
Binary file test-data/data_from_20040615.nc has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/data_to_20040615.nc
b
Binary file test-data/data_to_20040615.nc has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0.png
b
Binary file test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0.png has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0_title.png
b
Binary file test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time0_title.png has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time1.png
b
Binary file test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time1.png has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time50.png
b
Binary file test-data/dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133_time50.png has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/info_file.txt
--- a/test-data/info_file.txt Sun Jun 06 08:51:41 2021 +0000
+++ b/test-data/info_file.txt Thu Jan 20 17:07:19 2022 +0000
b
@@ -1,9 +1,9 @@
 xarray.Dataset {
 dimensions:
+ time = 145 ;
  depth = 1 ;
  latitude = 97 ;
  longitude = 103 ;
- time = 145 ;
 
 variables:
  float32 phy(time, depth, latitude, longitude) ;
b
diff -r 123a9a629bef -r bf595d613af4 test-data/select_by_values.netcdf
b
Binary file test-data/select_by_values.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/small.netcdf
b
Binary file test-data/small.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/small_all_variables.netcdf
b
Binary file test-data/small_all_variables.netcdf has changed
b
diff -r 123a9a629bef -r bf595d613af4 test-data/version.tabular
--- a/test-data/version.tabular Sun Jun 06 08:51:41 2021 +0000
+++ b/test-data/version.tabular Thu Jan 20 17:07:19 2022 +0000
b
@@ -1,1 +1,1 @@
-Galaxy xarray version 0.18.2
+Galaxy xarray version 0.20.2
b
diff -r 123a9a629bef -r bf595d613af4 test-data/where_condition.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/where_condition.txt Thu Jan 20 17:07:19 2022 +0000
b
@@ -0,0 +1,1 @@
+((chl > 1) | (chl < 45)) & (nh4 > 1)
b
diff -r 123a9a629bef -r bf595d613af4 test-data/where_condition_simple.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/where_condition_simple.txt Thu Jan 20 17:07:19 2022 +0000
b
@@ -0,0 +1,1 @@
+nh4 > 5.15
b
diff -r 123a9a629bef -r bf595d613af4 xarray_mapplot.py
--- a/xarray_mapplot.py Sun Jun 06 08:51:41 2021 +0000
+++ b/xarray_mapplot.py Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -1,457 +1,411 @@\n-#!/usr/bin/env python3\n-#\n-#\n-# usage: xarray_mapplot.py [-h] [--proj PROJ]\n-#                               [--cmap CMAP]\n-#                               [--output OUTPUT]\n-#                               [--time TIMES]\n-#                               [--nrow NROW]\n-#                               [--ncol NCOL]\n-#                               [--title title]\n-#                               [--latitude LATITUDE]\n-#                               [--longitude LONGITUDE]\n-#                               [--land ALPHA-LAND]\n-#                               [--ocean ALPHA-OCEAN]\n-#                               [--coastline ALPHA-COASTLINE]\n-#                               [--borders ALPHA-BORDERS]\n-#                               [--xlim "x1,x2"]\n-#                               [--ylim "y1,y2"]\n-#                               [--range "valmin,valmax"]\n-#                               [--threshold VAL]\n-#                               [--label label-colorbar]\n-#                               [--shift]\n-#                               [-v]\n-#                               input varname\n-#\n-# positional arguments:\n-#  input            input filename with geographical coordinates (netCDF\n-#                   format)\n-#  varname          Specify which variable to plot (case sensitive)\n-#\n-# optional arguments:\n-#  -h, --help       show this help message and exit\n-#  --proj PROJ      Specify the projection on which we draw\n-#  --cmap CMAP      Specify which colormap to use for plotting\n-#  --output OUTPUT  output filename to store resulting image (png format)\n-#  --time TIMES     time index from the file for multiple plots ("0 1 2 3")\n-#  --title          plot or subplot title\n-#  --latitude        variable name for latitude\n-#  --longitude       variable name for longitude\n-#  --land            add land on plot with alpha value [0-1]\n-#  --ocean           add oceans on plot with alpha value [0-1]\n-#  --coastline       add coastline with alpha value [0-1]\n-#  --borders         add country borders with alpha value [0-1]\n-#  --xlim            limited geographical area longitudes "x1,x2"\n-#  --ylim            limited geographical area latitudes "y1,y2"\n-#  --range           "valmin,valmax" for plotting\n-#  --threshold       do not plot values below threshold\n-#  --label           set a label for colormap\n-#  --shift           shift longitudes if specified\n-#  -v, --verbose    switch on verbose mode\n-#\n-\n-import argparse\n-import ast\n-import warnings\n-from pathlib import Path\n-\n-import cartopy.crs as ccrs\n-import cartopy.feature as feature\n-\n-from cmcrameri import cm\n-\n-import matplotlib as mpl\n-mpl.use(\'Agg\')\n-from matplotlib import pyplot  # noqa: I202,E402\n-\n-import xarray as xr  # noqa: E402\n-\n-\n-class MapPlotXr ():\n-    def __init__(self, input, proj, varname, cmap, output, verbose=False,\n-                 time=[], title="", latitude="latitude",\n-                 longitude="longitude", land=0, ocean=0,\n-                 coastline=0, borders=0, xlim=[], ylim=[],\n-                 threshold="", label="", shift=False,\n-                 range_values=[]):\n-        self.input = input\n-        print("PROJ", proj)\n-        if proj != "" and proj is not None:\n-            self.proj = proj.replace(\'X\', \':\')\n-        else:\n-            self.proj = proj\n-        self.varname = varname\n-        self.get_cmap(cmap)\n-        self.time = time\n-        self.latitude = latitude\n-        self.longitude = longitude\n-        self.land = land\n-        self.ocean = ocean\n-        self.coastline = coastline\n-        self.borders = borders\n-        self.xlim = xlim\n-        self.ylim = ylim\n-        self.range = range_values\n-        self.threshold = threshold\n-        self.shift = shift\n-        self.xylim_supported = False\n-        self.colorbar = True\n-        self.title = title\n-        if output is None:\n-            self.output = Path(input).stem + \'.png\'\n-        else:\n-            self.output = output\n-        self.verbose = '..b'd)\r\n+\r\n+        if self.range == []:\r\n+            minval = self.dset[self.varname].min()\r\n+            maxval = self.dset[self.varname].max()\r\n+        else:\r\n+            minval = self.range[0]\r\n+            maxval = self.range[1]\r\n+\r\n+        if self.verbose:\r\n+            print("minval: ", minval)\r\n+            print("maxval: ", maxval)\r\n+\r\n+        # pass extent with vmin and vmax parameters\r\n+        proj_t = ccrs.PlateCarree()\r\n+        if ts is None:\r\n+            self.dset.where(\r\n+                 self.dset[self.varname] > threshold\r\n+                 )[self.varname].plot(ax=ax,\r\n+                                      vmin=minval,\r\n+                                      vmax=maxval,\r\n+                                      transform=proj_t,\r\n+                                      cmap=self.cmap,\r\n+                                      cbar_kwargs=self.label\r\n+                                      )\r\n+            if self.title != "" and self.title is not None:\r\n+                pyplot.title(self.title)\r\n+            pyplot.savefig(self.output)\r\n+        else:\r\n+            if self.colorbar:\r\n+                self.dset.where(\r\n+                     self.dset[self.varname] > threshold\r\n+                     )[self.varname].isel(time=ts).plot(ax=ax,\r\n+                                                        vmin=minval,\r\n+                                                        vmax=maxval,\r\n+                                                        transform=proj_t,\r\n+                                                        cmap=self.cmap,\r\n+                                                        cbar_kwargs=self.label\r\n+                                                        )\r\n+            else:\r\n+                self.dset.where(\r\n+                     self.dset[self.varname] > minval\r\n+                     )[self.varname].isel(time=ts).plot(ax=ax,\r\n+                                                        vmin=minval,\r\n+                                                        vmax=maxval,\r\n+                                                        transform=proj_t,\r\n+                                                        cmap=self.cmap,\r\n+                                                        add_colorbar=False)\r\n+            if self.title != "" and self.title is not None:\r\n+                pyplot.title(self.title + "(time = " + str(ts) + \')\')\r\n+            pyplot.savefig(self.output[:-4] + "_time" + str(ts) +\r\n+                           self.output[-4:])  # assume png format\r\n+\r\n+\r\n+if __name__ == \'__main__\':\r\n+    warnings.filterwarnings("ignore")\r\n+    parser = argparse.ArgumentParser()\r\n+    parser.add_argument(\r\n+        \'input\',\r\n+        help=\'input filename with geographical coordinates (netCDF format)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--proj\',\r\n+        help=\'Config file with the projection on which we draw\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'varname\',\r\n+        help=\'Specify which variable to plot (case sensitive)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--output\',\r\n+        help=\'output filename to store resulting image (png format)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--config\',\r\n+        help=\'pass plotting parameters via a config file\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--shift\',\r\n+        help=\'shift longitudes if specified\',\r\n+        action="store_true"\r\n+    )\r\n+    parser.add_argument(\r\n+        "-v", "--verbose",\r\n+        help="switch on verbose mode",\r\n+        action="store_true")\r\n+    args = parser.parse_args()\r\n+\r\n+    dset = MapPlotXr(input=args.input, varname=args.varname,\r\n+                     output=args.output, verbose=args.verbose,\r\n+                     config_file=args.config, proj=args.proj,\r\n+                     shift=args.shift)\r\n+\r\n+    if dset.time == []:\r\n+        dset.plot()\r\n+    else:\r\n+        for t in dset.time:\r\n+            dset.plot(t)\r\n+            dset.shift = False   # only shift once\r\n+            dset.colorbar = True\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 xarray_netcdf2netcdf.py
--- a/xarray_netcdf2netcdf.py Sun Jun 06 08:51:41 2021 +0000
+++ b/xarray_netcdf2netcdf.py Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -1,133 +1,268 @@\n-#!/usr/bin/env python3\n-#\n-#  Apply operations on selected variables\n-# - scale\n-# one can also select the range of time (for timeseries)\n-# to apply these operations over the range only\n-# when a range of time is selected and when scaling, one\n-# can choose to save the entire timeseries or\n-# the selected range only.\n-# when scaling, one can add additional filters on dimensions\n-# (typically used to filter over latitudes and longitudes)\n-\n-\n-import argparse\n-import warnings\n-\n-import xarray as xr  # noqa: E402\n-\n-\n-class netCDF2netCDF ():\n-    def __init__(self, infile, varname, scale="",\n-                 output="output.netcdf",\n-                 write_all=False,\n-                 filter_list="",\n-                 verbose=False):\n-        self.infile = infile\n-        self.verbose = verbose\n-        self.varname = varname\n-        self.write_all = write_all\n-        self.filter = filter_list\n-        self.selection = {}\n-        if scale == "" or scale is None:\n-            self.scale = 1\n-        else:\n-            self.scale = float(scale)\n-        if output is None:\n-            self.output = "output.netcdf"\n-        else:\n-            self.output = output\n-        # initialization\n-        self.dset = None\n-        self.subset = None\n-        if self.verbose:\n-            print("infile: ", self.infile)\n-            print("varname: ", self.varname)\n-            print("filter_list: ", self.filter)\n-            print("scale: ", self.scale)\n-            print("write_all: ", self.write_all)\n-            print("output: ", self.output)\n-\n-    def dimension_selection(self, single_filter):\n-        split_filter = single_filter.split(\'#\')\n-        dimension_varname = split_filter[0]\n-        op = split_filter[1]\n-        ll = int(split_filter[2])\n-        if (op == \'sl\'):\n-            rl = int(split_filter[3])\n-            self.selection[dimension_varname] = slice(ll, rl)\n-        elif (op == \'to\'):\n-            self.selection[dimension_varname] = slice(None, ll)\n-        elif (op == \'from\'):\n-            self.selection[dimension_varname] = slice(ll, None)\n-        elif (op == \'is\'):\n-            self.selection[dimension_varname] = ll\n-\n-    def filter_selection(self):\n-        for single_filter in self.filter:\n-            self.dimension_selection(single_filter)\n-        if self.write_all:\n-            self.ds[self.varname] = \\\n-                self.ds[self.varname].isel(self.selection)*self.scale\n-        else:\n-            self.dset = \\\n-                self.ds[self.varname].isel(self.selection)*self.scale\n-\n-    def compute(self):\n-        if self.dset is None:\n-            self.ds = xr.open_dataset(self.infile)\n-            if self.filter:\n-                self.filter_selection()\n-                if self.verbose:\n-                    print(self.selection)\n-            elif self.write_all is not None:\n-                self.dset = self.ds[self.varname]\n-\n-    def save(self):\n-        if self.write_all:\n-            self.ds.to_netcdf(self.output)\n-        else:\n-            self.dset.to_netcdf(self.output)\n-\n-\n-if __name__ == \'__main__\':\n-    warnings.filterwarnings("ignore")\n-    parser = argparse.ArgumentParser()\n-    parser.add_argument(\n-        \'input\',\n-        help=\'input filename in netCDF format\'\n-    )\n-    parser.add_argument(\n-        \'varname\',\n-        help=\'Specify which variable to plot (case sensitive)\'\n-    )\n-    parser.add_argument(\n-        \'--filter\',\n-        nargs="*",\n-        help=\'Filter list variable#operator#value_s#value_e\'\n-    )\n-    parser.add_argument(\n-        \'--output\',\n-        help=\'Output filename to store the resulting netCDF file\'\n-    )\n-    parser.add_argument(\n-        \'--scale\',\n-        help=\'scale factor to apply to selection (float)\'\n-    )\n-    parser.add_argument(\n-        "--write_all",\n-        help="write all data to netCDF",\n-        action="store_true")\n-    parser.add_argument(\n-        "-v", "--verbose",\n-        help="switch on verbose mode",\n-     '..b'here(\r\n+                        self.eval_where(self.where),\r\n+                        other=float(self.other)\r\n+                        )\r\n+                else:\r\n+                    self.ds = self.ds.where(\r\n+                        self.eval_where(self.where)\r\n+                        )\r\n+            self.filter_selection()\r\n+            if self.verbose:\r\n+                print(self.selection)\r\n+\r\n+    def save(self):\r\n+        if self.varname != \'None\' and \\\r\n+            self.varname is not None and \\\r\n+                not self.write_all:\r\n+            self.dset[self.varname].to_netcdf(self.output)\r\n+        else:\r\n+            self.dset.to_netcdf(self.output)\r\n+\r\n+    def is_float(self, element) -> bool:\r\n+        try:\r\n+            float(element)\r\n+            return True\r\n+        except ValueError:\r\n+            return False\r\n+\r\n+    def eval_where(self, where_condition):\r\n+        eval_cond = None\r\n+        list_names = list(set(\r\n+                        list(self.ds.keys()) +\r\n+                        list(self.ds.coords.keys()))\r\n+                        )\r\n+        wcond = where_condition\r\n+        check_cond = where_condition\r\n+        for var in list_names:\r\n+            wcond = wcond.replace(var, \' self.ds.\' + var + \' \')\r\n+            check_cond = check_cond.replace(var, \'\')\r\n+        to_remove = "[><=&|()]"\r\n+        check_cond = re.sub(to_remove, "", check_cond).replace("!", "")\r\n+        check_cond = re.sub(\' +\', \' \', check_cond).strip()\r\n+        list_flt = check_cond.split(" ")\r\n+        no_convert = False\r\n+        for num in list_flt:\r\n+            if not self.is_float(num):\r\n+                no_convert = True\r\n+        if not no_convert:\r\n+            eval_cond = eval(wcond)\r\n+        return eval_cond\r\n+\r\n+\r\n+if __name__ == \'__main__\':\r\n+    warnings.filterwarnings("ignore")\r\n+    parser = argparse.ArgumentParser()\r\n+    parser.add_argument(\r\n+        \'input\',\r\n+        help=\'input filename in netCDF format\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'varname\',\r\n+        help=\'Specify which variable to plot (case sensitive)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--filter\',\r\n+        nargs="*",\r\n+        help=\'Filter list variable#operator#value_s#value_e\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--where\',\r\n+        help=\'filename with where condition to be evaluated\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--output\',\r\n+        help=\'Output filename to store the resulting netCDF file\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--scale\',\r\n+        help=\'scale factor to apply to selection (float)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--other\',\r\n+        help=\'Value to use for locations where condition is False (float)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        "--write_all",\r\n+        help="write all data to netCDF",\r\n+        action="store_true")\r\n+    parser.add_argument(\r\n+        "--keep_attributes",\r\n+        help="Keep all attributes",\r\n+        action="store_true")\r\n+    parser.add_argument(\r\n+        "-v", "--verbose",\r\n+        help="switch on verbose mode",\r\n+        action="store_true")\r\n+    parser.add_argument(\r\n+        "--selection",\r\n+        help="select by values",\r\n+        action="store_true")\r\n+    parser.add_argument(\r\n+        "--drop",\r\n+        help="drop values where condition is not met",\r\n+        action="store_true")\r\n+    args = parser.parse_args()\r\n+\r\n+    print("args.selection", args.selection)\r\n+    dset = netCDF2netCDF(infile=args.input, varname=args.varname,\r\n+                         scale=args.scale, output=args.output,\r\n+                         write_all=args.write_all,\r\n+                         sel=args.selection,\r\n+                         keep_attributes=args.keep_attributes,\r\n+                         filter_list=args.filter,\r\n+                         where_config=args.where,\r\n+                         drop=args.drop, other=args.other,\r\n+                         verbose=args.verbose)\r\n+    dset.compute()\r\n+    dset.save()\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 xarray_select.xml
--- a/xarray_select.xml Sun Jun 06 08:51:41 2021 +0000
+++ b/xarray_select.xml Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -1,317 +1,317 @@\n-<tool id="xarray_select" name="NetCDF xarray Selection" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@">\n-    <description>extracts variable values with custom conditions on dimensions</description>\n-    <macros>\n-        <import>macros.xml</import>\n-    </macros>\n-    <expand macro="edam_ontology"/>\n-    <requirements>\n-        <requirement type="package" version="3">python</requirement>\n-        <requirement type="package" version="1.5.6">netcdf4</requirement>\n-        <requirement type="package" version="@TOOL_VERSION@">xarray</requirement>\n-        <requirement type="package" version="0.9.0">geopandas</requirement>\n-        <requirement type="package" version="1.7.1">shapely</requirement>\n-    </requirements>\n-    <command detect_errors="exit_code"><![CDATA[\n-    mkdir output_dir &&\n-    #if $condi_source_coord.coord_source=="coord_from_file"\n-       echo "Galaxy xarray version @TOOL_VERSION@" > output_dir/version.tabular &&\n-    #end if\n-    python \'$__tool_directory__/xarray_tool.py\' \'$input\' --select \'$var\'\n-           --verbose\n-           --filter\n-    #for $i,$uc in enumerate($user_choice)\n-        #if $uc.condi_between.comparator=="bi"\n-             \'${uc.dim}#${uc.condi_between.comparator}#${uc.condi_between.t1}#${uc.condi_between.t2}\'\n-        #else\n-             \'${uc.dim}#${uc.condi_between.comparator}#${uc.condi_between.value}\'\n-        #end if\n-    #end for\n-\n-    #if $time.condi_datetime.datetime=="yes"\n-         --time\n-        #if $time.condi_datetime.condi_between.comparator=="sl"\n-             \'${time.condi_datetime.dim}#${time.condi_datetime.condi_between.comparator}#${time.condi_datetime.condi_between.t1}#${time.condi_datetime.condi_between.t2}\'\n-        #else\n-             \'${time.condi_datetime.dim}#${time.condi_datetime.condi_between.comparator}#${time.condi_datetime.condi_between.t1}\'\n-        #end if\n-    #end if\n-\n-    #if $condi_source_coord.coord_source=="coord_from_file"\n-         --coords \'$coord_tabular\'\n-         --latname \'$condi_source_coord.lat_dim\' --lonname \'$condi_source_coord.lon_dim\'\n-         --outputdir output_dir\n-         #if $condi_source_coord.tolerance\n-             --tolerance \'$condi_source_coord.tolerance\'\n-         #end if\n-    #else\n-         --outfile \'final.tabular\'\n-        #if $condi_source_coord.condi_coord.coord==\'single\'\n-           --latname $condi_source_coord.condi_coord.lat_dim\n-           --latvalN $condi_source_coord.condi_coord.lat_val\n-           --lonname $condi_source_coord.condi_coord.lon_dim\n-           --lonvalE $condi_source_coord.condi_coord.lon_val\n-\t    #if $condi_source_coord.condi_coord.no_missing\n-\t        --no_missing\n-\t    #end if\n-            #if $condi_source_coord.condi_coord.tolerance\n-                --tolerance \'$condi_source_coord.condi_coord.tolerance\'\n-            #end if\n-        #elif $condi_source_coord.condi_coord.coord==\'subregion\'\n-           --latname $condi_source_coord.condi_coord.lat_dim\n-           --latvalN $condi_source_coord.condi_coord.lat_valN\n-           --latvalS $condi_source_coord.condi_coord.lat_valS\n-           --lonname $condi_source_coord.condi_coord.lon_dim\n-           --lonvalE $condi_source_coord.condi_coord.lon_valE\n-           --lonvalW $condi_source_coord.condi_coord.lon_valW\n-        #end if\n-    #end if\n-    ]]></command>\n-    <inputs>\n-        <param type="data" name="input" label="Input netcdf file" format="netcdf"/>\n-        <param type="data" label="Tabular of variables" name="var_tab" format="tabular" help="Select the tabular file which summarize the available variables and dimensions."/>\n-\n-        <param name="var" type="select" label="Choose the variable to extract">\n-            <options from_dataset="var_tab">\n-                <column name="name" index="0"/>\n-                <column name="value" index="0"/>\n-            </options>\n-        </param>\n-\n-        <conditional name="condi_source_coord">\n-            <param name="coord_source" type="select" label="Source of coo'..b'] == \'coord_from_stdin\'</filter>\r\n+        </data>\r\n+    </outputs>\r\n+    <tests>\r\n+        <test>\r\n+            <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+            <param name="var" value="phy"/>\r\n+            <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+            <conditional name="condi_source_coord">\r\n+                <param name="coord_source" value="coord_from_stdin"/>\r\n+                <conditional name="condi_coord">\r\n+                    <param name="coord" value="single"/>\r\n+                    <param name="lat_dim" value="latitude"/>\r\n+                    <param name="lat_val" value="44.0"/>\r\n+                    <param name="lon_dim" value="longitude"/>\r\n+                    <param name="lon_val" value="-2.0"/>\r\n+                </conditional>\r\n+            </conditional>\r\n+            <output name="simpleoutput" value="Test1.tabular">\r\n+                <assert_contents>\r\n+                    <has_text_matching expression="0\\t2002-12-15\\t0.5"/>\r\n+                    <has_text_matching expression="144\\t2014-12-15\\t0.5"/>\r\n+                </assert_contents>\r\n+            </output>\r\n+        </test>\r\n+        <test>\r\n+            <param name="input" value="dataset-ibi-reanalysis-bio-005-003-monthly-regulargrid_1510914389133.nc"/>\r\n+            <param name="var_tab" value="var_tab_dataset-ibi"/>\r\n+            <param name="var" value="nh4"/>\r\n+\r\n+            <conditional name="condi_source_coord">\r\n+                <param name="coord_source" value="coord_from_stdin"/>\r\n+                <conditional name="condi_coord">\r\n+                    <param name="coord" value="global"/>\r\n+                </conditional>\r\n+            </conditional>\r\n+            <section name="time">\r\n+                <conditional name="condi_datetime">\r\n+                    <param name="datetime" value="yes"/>\r\n+                    <conditional name="condi_between">\r\n+                        <param name="comparator" value="sl"/>\r\n+                        <param name="t1" value="2003-12-15" />\r\n+                        <param name="t2" value="2004-12-15" />\r\n+                    </conditional>\r\n+                </conditional>\r\n+            </section>\r\n+            <repeat name="user_choice">\r\n+                <param name="dim" value="nh4"/>\r\n+                <conditional name="condi_between">\r\n+                    <param name="comparator" value="ge"/>\r\n+                    <param name="value" value="50."/>\r\n+                </conditional>\r\n+            </repeat>\r\n+            <output name="simpleoutput" value="Test2.tabular">\r\n+                <assert_contents>\r\n+                    <has_text_matching expression="0\\t2003-12-15\\t0.5"/>\r\n+                    <has_text_matching expression="23\\t2004-12-15\\t0.5"/>\r\n+                </assert_contents>\r\n+            </output>\r\n+        </test>\r\n+    </tests>\r\n+    <help><![CDATA[\r\n+**What it does**\r\n+\r\n+This tool extracts variable values with custom conditions on dimensions.\r\n+\r\n+It can use manualy given coordinates or automaticaly take them from a tabular file to filter informations.\r\n+\r\n+If no values are availables at a coordinate X, the tool will search the closest coordinate with a non NA value.\r\n+\r\n+Filter can be set on every dimension. Available filtering operations are : =, >, <, >=, <=, [interval], ]interval[.\r\n+\r\n+\r\n+\r\n+**Input**\r\n+\r\n+A netcdf file (.nc).\r\n+\r\n+Variable tabular file from \'Netcdf Metadate Info\'.\r\n+\r\n+Tabular file with coordinates (only coordinates, no header!) and the following structure : \'lat\'\t\'lon\'.\r\n+\r\n+\r\n+**Outputs**\r\n+\r\n+A single output with values for the wanted variable if there is only one coordinate.\r\n+\r\n+A data collection where one file is created for every coordinate, if multiple coordinates from tabular file.\r\n+\r\n+\r\n+-------------------------------------------------\r\n+\r\n+The xarray select tool can be used after the xarray Info.\r\n+    ]]>    </help>\r\n+    <expand macro="citations"/>\r\n+</tool>\r\n'
b
diff -r 123a9a629bef -r bf595d613af4 xarray_tool.py
--- a/xarray_tool.py Sun Jun 06 08:51:41 2021 +0000
+++ b/xarray_tool.py Thu Jan 20 17:07:19 2022 +0000
[
b'@@ -1,365 +1,365 @@\n-# xarray tool for:\n-# - getting metadata information\n-# - select data and save results in csv file for further post-processing\n-\n-import argparse\n-import csv\n-import os\n-import warnings\n-\n-import geopandas as gdp\n-\n-import pandas as pd\n-\n-from shapely.geometry import Point\n-from shapely.ops import nearest_points\n-\n-import xarray as xr\n-\n-\n-class XarrayTool ():\n-    def __init__(self, infile, outfile_info="", outfile_summary="",\n-                 select="", outfile="", outputdir="", latname="",\n-                 latvalN="", latvalS="", lonname="", lonvalE="",\n-                 lonvalW="", filter_list="", coords="", time="",\n-                 verbose=False, no_missing=False, coords_info=None,\n-                 tolerance=None):\n-        self.infile = infile\n-        self.outfile_info = outfile_info\n-        self.outfile_summary = outfile_summary\n-        self.select = select\n-        self.outfile = outfile\n-        self.outputdir = outputdir\n-        self.latname = latname\n-        if tolerance != "" and tolerance is not None:\n-            self.tolerance = float(tolerance)\n-        else:\n-            self.tolerance = -1\n-        if latvalN != "" and latvalN is not None:\n-            self.latvalN = float(latvalN)\n-        else:\n-            self.latvalN = ""\n-        if latvalS != "" and latvalS is not None:\n-            self.latvalS = float(latvalS)\n-        else:\n-            self.latvalS = ""\n-        self.lonname = lonname\n-        if lonvalE != "" and lonvalE is not None:\n-            self.lonvalE = float(lonvalE)\n-        else:\n-            self.lonvalE = ""\n-        if lonvalW != "" and lonvalW is not None:\n-            self.lonvalW = float(lonvalW)\n-        else:\n-            self.lonvalW = ""\n-        self.filter = filter_list\n-        self.time = time\n-        self.coords = coords\n-        self.verbose = verbose\n-        self.no_missing = no_missing\n-        # initialization\n-        self.dset = None\n-        self.gset = None\n-        self.coords_info = coords_info\n-        if self.verbose:\n-            print("infile: ", self.infile)\n-            print("outfile_info: ", self.outfile_info)\n-            print("outfile_summary: ", self.outfile_summary)\n-            print("outfile: ", self.outfile)\n-            print("select: ", self.select)\n-            print("outfile: ", self.outfile)\n-            print("outputdir: ", self.outputdir)\n-            print("latname: ", self.latname)\n-            print("latvalN: ", self.latvalN)\n-            print("latvalS: ", self.latvalS)\n-            print("lonname: ", self.lonname)\n-            print("lonvalE: ", self.lonvalE)\n-            print("lonvalW: ", self.lonvalW)\n-            print("filter: ", self.filter)\n-            print("time: ", self.time)\n-            print("coords: ", self.coords)\n-            print("coords_info: ", self.coords_info)\n-\n-    def info(self):\n-        f = open(self.outfile_info, \'w\')\n-        ds = xr.open_dataset(self.infile)\n-        ds.info(f)\n-        f.close()\n-\n-    def summary(self):\n-        f = open(self.outfile_summary, \'w\')\n-        ds = xr.open_dataset(self.infile)\n-        writer = csv.writer(f, delimiter=\'\\t\')\n-        header = [\'VariableName\', \'NumberOfDimensions\']\n-        for idx, val in enumerate(ds.dims.items()):\n-            header.append(\'Dim\' + str(idx) + \'Name\')\n-            header.append(\'Dim\' + str(idx) + \'Size\')\n-        writer.writerow(header)\n-        for name, da in ds.data_vars.items():\n-            line = [name]\n-            line.append(len(ds[name].shape))\n-            for d, s in zip(da.shape, da.sizes):\n-                line.append(s)\n-                line.append(d)\n-            writer.writerow(line)\n-        for name, da in ds.coords.items():\n-            line = [name]\n-            line.append(len(ds[name].shape))\n-            for d, s in zip(da.shape, da.sizes):\n-                line.append(s)\n-                line.append(d)\n-            writer.writerow(line)\n-        f.close()\n-\n-    def rowfilter(self,'..b'       self.lonvalE = row[1]\r\n+            self.outfile = (os.path.join(self.outputdir,\r\n+                            self.select + \'_\' +\r\n+                            str(row.Index) + \'.tabular\'))\r\n+            self.selection()\r\n+\r\n+    def get_coords_info(self):\r\n+        ds = xr.open_dataset(self.infile)\r\n+        for c in ds.coords:\r\n+            filename = os.path.join(self.coords_info,\r\n+                                    c.strip() +\r\n+                                    \'.tabular\')\r\n+            pd = ds.coords[c].to_pandas()\r\n+            pd.index = range(len(pd))\r\n+            pd.to_csv(filename, header=False, sep=\'\\t\')\r\n+\r\n+\r\n+if __name__ == \'__main__\':\r\n+    warnings.filterwarnings("ignore")\r\n+    parser = argparse.ArgumentParser()\r\n+\r\n+    parser.add_argument(\r\n+        \'infile\',\r\n+        help=\'netCDF input filename\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--info\',\r\n+        help=\'Output filename where metadata information is stored\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--summary\',\r\n+        help=\'Output filename where data summary information is stored\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--select\',\r\n+        help=\'Variable name to select\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--latname\',\r\n+        help=\'Latitude name\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--latvalN\',\r\n+        help=\'North latitude value\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--latvalS\',\r\n+        help=\'South latitude value\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--lonname\',\r\n+        help=\'Longitude name\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--lonvalE\',\r\n+        help=\'East longitude value\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--lonvalW\',\r\n+        help=\'West longitude value\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--tolerance\',\r\n+        help=\'Maximum distance between original and selected value for \'\r\n+             \' inexact matches e.g. abs(index[indexer] - target) <= tolerance\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--coords\',\r\n+        help=\'Input file containing Latitude and Longitude\'\r\n+             \'for geographical selection\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--coords_info\',\r\n+        help=\'output-folder where for each coordinate, coordinate values \'\r\n+             \' are being printed in the corresponding outputfile\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--filter\',\r\n+        nargs="*",\r\n+        help=\'Filter list variable#operator#value_s#value_e\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--time\',\r\n+        help=\'select timeseries variable#operator#value_s[#value_e]\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--outfile\',\r\n+        help=\'csv outfile for storing results of the selection\'\r\n+             \'(valid only when --select)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        \'--outputdir\',\r\n+        help=\'folder name for storing results with multiple selections\'\r\n+             \'(valid only when --select)\'\r\n+    )\r\n+    parser.add_argument(\r\n+        "-v", "--verbose",\r\n+        help="switch on verbose mode",\r\n+        action="store_true"\r\n+    )\r\n+    parser.add_argument(\r\n+        "--no_missing",\r\n+        help="""Do not take into account possible null/missing values\r\n+                (only valid for single location)""",\r\n+        action="store_true"\r\n+    )\r\n+    args = parser.parse_args()\r\n+\r\n+    p = XarrayTool(args.infile, args.info, args.summary, args.select,\r\n+                   args.outfile, args.outputdir, args.latname,\r\n+                   args.latvalN, args.latvalS, args.lonname,\r\n+                   args.lonvalE, args.lonvalW, args.filter,\r\n+                   args.coords, args.time, args.verbose,\r\n+                   args.no_missing, args.coords_info, args.tolerance)\r\n+    if args.info:\r\n+        p.info()\r\n+    if args.summary:\r\n+        p.summary()\r\n+    if args.coords:\r\n+        p.selection_from_coords()\r\n+    elif args.select:\r\n+        p.selection()\r\n+    elif args.coords_info:\r\n+        p.get_coords_info()\r\n'