...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
output_common = ( output_name : "/tmp/myOutputTest", output_width : 1000, output_title : "Map of Z500", output_debug : "ON", output_filelist : "ON", output_filelist_name : "/tmp/filelist.txt" ) ps = ps_output( output_common, output_ps_scale : 0.9, output_ps_colour_model : "CMYK" ) png = png_output( output_common, output_cairo_transparent_background : "ON" ) svg = svg_output( output_common, output_svg_fix_size : "ON", output_svg_meta : "Metview map of Z500", output_svg_desc : "This file was generated for the Training course" ) kml = kml_output( output_common, kml_description : "This file was generated for the Training course", kml_author : "Stephan Siemen", kml_link : "http://www.ecmwf.int", kml_latitude : 30, kml_longitude : 120, kml_coastlines : "ON" ) output_drivers = [ps, png, svg, kml] setoutput(output_drivers) data = read("z500.grib") plot(data) |
Setting output dependent on runmode
The way to code run mode dependent outcomes is by using the function runmode(). It returns a string with the run mode:
mode = runmode()
So it is enough to check this string and to code accordingly, either using if/else conditions or the case/of condition test. To introduce the new functionality replace the existing unconditional call to
setoutput() by the following lines of code :
Code Block | ||||
---|---|---|---|---|
| ||||
# check run mode
mode = runmode()
# select outcome dependent on run-mode
if(mode = "execute")
then setoutput(to_pngfile)
else if (mode = "batch")
then setoutput(to_psfile)
else if (mode = "visualise")
then print('Plotting to screen')
else if (mode = "prepare")
then print('Plotting to screen')
else
fail("Only execute, batch and visualise allowed")
end if |
Now, depending on how you call the macro your output will be directed to different media. Choose different options from the icon’s right-click menu to see what happens. Note that you can also simulate these actions from within the Macro editor ( Program | Run Options). The ‘prepare’ run mode is the default one when you run your macro from the Macro editor. The ‘batch’ run mode will be explained in a later paragraph.
If you select an option not covered by the allowed run modes (e.g. Save or Examine), the macro will stop, turn red (failed run) and issue an error message - this behaviour is provided by the fail() function. A related function, stop(), will do the same but allow the macro to exit in the green state (successful run). Note that you may have to see that it has worked! To delete the output files before running the macro in order to
To run the macro in batch mode, you call Metview with the option -b followed by the macro name on the command line (assuming you are running from the same directory as the macro - otherwise you must provide a path to it). For example:
metview -b step8
The newlines within the conditional branching part of the code are down to personal preference. You could also have formatted the code as follows:
if (mode = "execute") then
setoutput(to_pngfile)
else if (mode = "batch") then
setoutput(to_psfile)
If You Have Extra Time ...
One important piece of functionality that we have omitted is the ability to save our derived data. Add some code to handle the Save run mode by saving the derived data in a file. There are three things you will have to do:
• at the end of the run mode checks, instead of
else fail ( ... )
• we should not fail if the mode is “save”:
else if (mode <> "save")
then fail ( ... )
• we must again check the run mode, and if it is Save then write the data to a file; otherwise plot the data.
KML as output format
KML is a very special output format. It contains the it has no notion of output size.
...