changeset 0:5c0ab9932311 draft

planemo upload for repository https://github.com/NordicESMhub/galaxy-tools/tree/master/tools/essential_climate_variables commit 49926d09bb7d28f07b24050d25c40f2ae875d6f7
author climate
date Fri, 03 May 2019 15:11:01 -0400
parents
children 8b30be2cef81
files README.md ecv_retrieve.py essential_climate_variables.xml test-data/prep_seaice.nc test-data/soil_moisture.nc
diffstat 5 files changed, 329 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Fri May 03 15:11:01 2019 -0400
@@ -0,0 +1,17 @@
+
+# Copernicus Essential Climate Variables for assessing climate variability
+
+This tool allows you to retrieve Copernicus **Essential Climate Variables** for assessing climate variability from the [Copernicus Climate Data Store](https://cds.climate.copernicus.eu/#!/home).
+
+Copernicus ECV for assessing climate variability is available from the Copernicus portal at https://cds.climate.copernicus.eu/cdsapp#!/dataset/ecv-for-climate-change?tab=overview
+
+To be able to retrieve data, you would need to register and get your [CDS API key](https://cds.climate.copernicus.eu/api-how-to).
+
+The CDS API Key needs to be:
+  - located in a file called `.cdsapirc`in the HOME area 
+    (as defined the `HOME` environment variable).
+  - or passed in an enviroment variable called `GALAXY_COPERNICUS_CDSAPIRC`. 
+    When passed in `GALAXY_COPERNICUS_CDSAPIRC`, make sure the key does not contain
+    the string `key: ` but the key itself only (starting with a number). The file
+    `.cdsapirc` will then be created and placed in the HOME area (using HOME
+    environment variable).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ecv_retrieve.py	Fri May 03 15:11:01 2019 -0400
@@ -0,0 +1,145 @@
+# Retrieve Copernicus ECV
+# (Essential climate Variables)
+
+import argparse
+import os
+import shutil
+import tarfile
+import tempfile
+import warnings
+
+import cdsapi
+
+
+class ECV ():
+    def __init__(self, archive, variable, product_type, year,
+                 month, time_aggregation, area, format, output,
+                 verbose=False
+                 ):
+        self.archive = archive
+        self.variable = variable.split(',')
+        if product_type == '':
+            self.product_type = 'climatology'
+        else:
+            self.product_type = product_type
+        if year == '':
+            self.year = '2019'
+        else:
+            self.year = year.split(',')
+        if month == '':
+            self.month = '01'
+        else:
+            self.month = month.split(',')
+        if time_aggregation == '':
+            self.time_aggregation = '1_month'
+        else:
+            self.time_aggregation = time_aggregation
+        self.area = area
+        if format == '':
+            self.format = 'tgz'
+        else:
+            self.format = format
+        if output == '':
+            self.outputfile = "donwload." + self.format
+        else:
+            self.outputfile = output
+        if verbose:
+            print("archive: ", self.archive)
+            print("variable: ", self.variable)
+            print("year: ", self.year)
+            print("month: ", self.month)
+        self.cdsapi = cdsapi.Client()
+
+    def retrieve(self):
+
+        self.cdsapi.retrieve(
+            self.archive, {
+                'variable': self.variable,
+                'year': self.year,
+                'month': self.month,
+                'area': self.area,
+                'format': self.format,
+                'product_type': self.product_type,
+                'time_aggregation': self.time_aggregation,
+                          },
+                self.outputfile)
+
+    def checktar(self):
+        is_grib = False
+        with open(self.outputfile, 'rb') as ofile:
+            is_grib = ofile.read(4)
+        if (is_grib == b'GRIB' and self.format == 'tgz'):
+            # we create a tgz to be consistent
+            newfilename = tempfile.NamedTemporaryFile()
+            gribfile = os.path.basename(newfilename.name) + '.grib'
+            shutil.copyfile(self.outputfile, gribfile)
+            newfilename.close()
+            tar = tarfile.open(self.outputfile, 'w:gz')
+            tar.add(gribfile)
+            tar.close()
+
+
+if __name__ == '__main__':
+    warnings.filterwarnings("ignore")
+    parser = argparse.ArgumentParser()
+
+    remove_apikey = False
+    current_pwd = os.environ['HOME']
+    if 'GALAXY_COPERNICUS_CDSAPIRC_KEY' in os.environ and \
+       not os.path.isfile('.cdsapirc'):
+        with open(".cdsapirc", "w+") as apikey:
+            apikey.write("url: https://cds.climate.copernicus.eu/api/v2\n")
+            apikey.write(
+                  "key: " + os.environ['GALAXY_COPERNICUS_CDSAPIRC_KEY'])
+            remove_apikey = True
+
+    parser.add_argument(
+        'archive',
+        help='Archive name'
+    )
+    parser.add_argument(
+        'variable',
+        help='Specify which variable to retrieve'
+    )
+    parser.add_argument(
+        '--product_type',
+        help='Type of product (climatology or anomaly)'
+    )
+    parser.add_argument(
+        '--year',
+        help='Year(s) to retrieve.'
+    )
+    parser.add_argument(
+        '--month',
+        help='List of months to retrieve.'
+    )
+    parser.add_argument(
+        '--time_aggregation',
+        help='Time range over which data is aggregated (monthly/yearly).'
+    )
+    parser.add_argument(
+        '--area',
+        help='Desired sub-area to extract (North/West/South/East)'
+    )
+    parser.add_argument(
+        '--format',
+        help='Output file format (GRIB or netCDF or tgz)'
+    )
+    parser.add_argument(
+        '--output',
+        help='output filename'
+    )
+    parser.add_argument(
+        "-v", "--verbose",
+        help="switch on verbose mode",
+        action="store_true")
+    args = parser.parse_args()
+
+    p = ECV(args.archive, args.variable, args.product_type,
+            args.year, args.month, args.time_aggregation, args.area,
+            args.format, args.output, args.verbose)
+    p.retrieve()
+    p.checktar()
+    # remove api key file if it was created
+    if remove_apikey and os.getcwd() == current_pwd:
+        os.remove(os.path.join(current_pwd, '.cdsapirc'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/essential_climate_variables.xml	Fri May 03 15:11:01 2019 -0400
@@ -0,0 +1,167 @@
+<tool id="cds_essential_variability" name="Copernicus Essential Climate Variables" version="0.1.4">
+    <description>for assessing climate variability</description>
+    <requirements>
+        <requirement type="package" version="3">python</requirement>
+        <requirement type="package" version="0.1.4">cdsapi</requirement>
+        <requirement type="package" version="1.9.6">cdo</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+       HOME=`pwd`  &&
+       python3 '$__tool_directory__/ecv_retrieve.py'
+            'ecv-for-climate-change' '$variable'
+            --year '$year'
+        #if str($time_aggregation.selector) == '1_month'
+            --month '$time_aggregation.month'
+        #else
+            --month '01'
+        #end if
+           --time_aggregation '$time_aggregation.selector'
+           --product_type '$product_type'
+           --format 'tgz' --output 'tmp.tgz'
+           --verbose                                       &&
+           tar zxvf tmp.tgz                                &&
+           cat *.grib > tmp.grib                           &&
+           cdo -f nc -t ecmwf copy tmp.grib tmp.nc
+    ]]></command>
+    <inputs>
+        <param name="variable" type="select" multiple="true" label="Variable(s)">
+            <option value="surface_air_temperature" selected="true">Surface air temperature</option>
+            <option value="surface_air_relative_humidity" selected="true">Surface air relative humidity</option>
+            <option value="0_7cm_volumetric_soil_moisture" selected="true">0-7cm volumetric soil moisture</option>
+            <option value="precipitation" selected="true">Precipitation</option>
+            <option value="sea_ice" selected="true">Sea-ice</option>
+        </param>
+        <param name="product_type" type="select" label="Select type of data">
+            <option value="climatology" selected="true">Climatology</option>
+            <option value="anomaly">Anomaly</option>
+        </param>
+        <conditional name="time_aggregation">
+            <param name="selector" type="select" label="Time aggregation">
+                <option value="12_month" selected="true">yearly</option>
+                <option value="1_month">monthly</option>
+            </param>
+            <when value="1_month">
+                <param name="month" type="select" multiple="true" label="Select month(s)">
+                    <option value="01" selected="true">January</option>
+                    <option value="02" selected="true">February</option>
+                    <option value="03" selected="true">March</option>
+                    <option value="04" selected="true">April</option>
+                    <option value="05" selected="true">May</option>
+                    <option value="06" selected="true">June</option>
+                    <option value="07" selected="true">July</option>
+                    <option value="08" selected="true">August</option>
+                    <option value="09" selected="true">September</option>
+                    <option value="10" selected="true">October</option>
+                    <option value="11" selected="true">November</option>
+                    <option value="12" selected="true">December</option>
+                </param>
+            </when>
+        </conditional>
+
+        <param name="year" type="select" multiple="true"  label="Select year(s)">
+            <option value="1979">1979</option>
+            <option value="1980">1980</option>
+            <option value="1981">1981</option>
+            <option value="1982">1982</option>
+            <option value="1983">1983</option>
+            <option value="1984">1984</option>
+            <option value="1985">1985</option>
+            <option value="1986">1986</option>
+            <option value="1987">1987</option>
+            <option value="1988">1988</option>
+            <option value="1989">1989</option>
+            <option value="1990">1990</option>
+            <option value="1991">1991</option>
+            <option value="1992">1992</option>
+            <option value="1993">1993</option>
+            <option value="1994">1994</option>
+            <option value="1995">1995</option>
+            <option value="1996">1996</option>
+            <option value="1997">1997</option>
+            <option value="1998">1998</option>
+            <option value="1999">1999</option>
+            <option value="2000">2000</option>
+            <option value="2001">2001</option>
+            <option value="2002">2002</option>
+            <option value="2003">2003</option>
+            <option value="2004">2004</option>
+            <option value="2005">2005</option>
+            <option value="2006">2006</option>
+            <option value="2007">2007</option>
+            <option value="2008">2008</option>
+            <option value="2009">2009</option>
+            <option value="2010">2010</option>
+            <option value="2011">2011</option>
+            <option value="2012">2012</option>
+            <option value="2013">2013</option>
+            <option value="2014">2014</option>
+            <option value="2015">2015</option>
+            <option value="2016">2016</option>
+            <option value="2017">2017</option>
+            <option value="2018">2018</option>
+            <option value="2019" selected="true">2019</option>
+        </param>
+    </inputs>
+    <outputs>
+        <data name="ofilename" format="netcdf" from_work_dir="tmp.nc"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="variable" value="0_7cm_volumetric_soil_moisture"/>
+            <param name="product_type" value="climatology"/>
+            <param name="time_aggregation" value="1_month"/>
+            <param name="month" value="12"/>
+            <param name="year" value="2018"/>
+            <output name="ofilename" ftype="netcdf" file="soil_moisture.nc" compare="sim_size" delta="100"/>
+        </test>
+        <test>
+            <param name="variable" value="precipitation,sea_ice"/>
+            <param name="product_type" value="anomaly"/>
+            <param name="time_aggregation" value="12_month"/>
+            <param name="year" value="2017"/>
+            <output name="ofilename" ftype="netcdf" file="prep_seaice.nc" compare="sim_size" delta="100"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+
+**Copernicus Essential climate variables for assessment of climate variability from 1979 to present**
+=======================================================================================================
+
+This tool is a wrapper to retrieve Copernicus Essential Climate Variables.
+It corresponds to the European Contribution to the Monitoring of Essential Climate Variables from Space.
+An Essential Climate Variable is a physical, chemical or biological variable or a group of linked variables
+that critically contributes to the characterization of Earth’ s climate.
+
+The Essential Climate Variables for assessment of climate variability from 1979 to present dataset contains
+a selection of climatologies and monthly anomalies of Essential Climate Variables (ECVs) suitable for
+monitoring and assessment of climate variability and change. Selection criteria are based on accuracy
+and temporal consistency on monthly to decadal time scales. The ECV data products in this set have been
+estimated from multiple sources and, depending on the source, may have been adjusted to account for biases
+and other known deficiencies. Data sources and adjustment methods used are described in the Product User
+Guide, as are various particulars such as the baseline periods used to calculate monthly climatologies and
+the corresponding anomalies.
+
+
+- ECV Factsheets: https://gcos.wmo.int/en/essential-climate-variables/ecv-factsheets
+- Copernicus Climate Data Store documentation on Essential Climate Variables:
+  https://cds.climate.copernicus.eu/cdsapp#!/dataset/ecv-for-climate-change?tab=overview
+
+  See climatedata.wmo.int/ for more information on Essential Climate Variables.
+
+.. class:: infomark
+
+   It allows to retrieve estimates of Essential Climate Variables (ECVs)
+   derived from Earth observations.
+
+License:
+~~~~~~~~
+   Copernicus License V1.1
+
+   Generated using Copernicus Climate Change Service information [2019].
+   Neither the European Commission nor ECMWF is responsible for any use 
+   that may be made of the Copernicus information or data it contains.
+
+    ]]></help>
+    <citations>
+    </citations>
+</tool>
Binary file test-data/prep_seaice.nc has changed
Binary file test-data/soil_moisture.nc has changed