Skip to content

Commit

Permalink
Refactor plotting of views (#1550)
Browse files Browse the repository at this point in the history
* Refactoring Side View

* Fixing blank line

* Fixing errors in plotting Side View and refactoring Linear View

* Empty-Commit

* Empty-Commit

* Testing Top view in plot module

* Testing Top View in plot module to use MyTopViewFigure class

* Using getBBOX()

* Using get_plot_size_in_px()

* Testing Side view and Linear view in plot module

* Adding tight layout for side view

CLI script and documentation (#1598)

* CLI script and documentation

* Updating plot module

* Adding template for plot module

* Fixes in documentation and adding template for plot module

* Fixing error in template of plot module

* Adding testing for mssautoplot

* Adding template and fixing errors

* Fixing errors in tests

* Fixing errors in mssautoplot and updating mpl_pathinteractor module

* Removing test_mssautoplot.py

* Fixing flake8 errors

Work by Joern Ungermann:

* fix flake8 and minor bugs

    Co-authored-by: Joern Ungermann <j.ungermann@fz-juelich.de>
  • Loading branch information
swsrkty authored and joernu76 committed Nov 21, 2022
1 parent 045e6ff commit 0cf90c9
Show file tree
Hide file tree
Showing 11 changed files with 1,987 additions and 958 deletions.
1 change: 1 addition & 0 deletions docs/components.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ Components
mswms
mscolab
gentutorials
mssautoplot


81 changes: 81 additions & 0 deletions docs/mssautoplot.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
mssautoplot - A CLI tool for automation
=======================================

A CLI tool which enables users to download a set of plots according to the given configuration. The configuration for downloading the plots is located in "mssautoplot.json". In this file you can specify the default settings.

How to use
----------

The CLI tool has the following parameters:

+--------------+-------+----------------------------------------------------------------------+
| Parameter | Type | Description |
+--------------+-------+----------------------------------------------------------------------+
| ``--cpath`` | TEXT | Path of the config file where the configuration is specified. |
+--------------+-------+----------------------------------------------------------------------+
| ``--ftrack`` | TEXT | Flight track. |
+--------------+-------+----------------------------------------------------------------------+
| ``--itime`` | TEXT | Initial time. |
+--------------+-------+----------------------------------------------------------------------+
| ``--vtime`` | TEXT | Valid time. |
+--------------+-------+----------------------------------------------------------------------+
| ``--intv`` |INTEGER| Time interval in hours. |
+--------------+-------+----------------------------------------------------------------------+
| ``--stime`` | TEXT | Starting time for downloading multiple plots with a fixed interval.|
+--------------+-------+----------------------------------------------------------------------+
| ``--etime`` | TEXT | Ending time for downloading multiple plots with a fixed interval. |
+--------------+-------+----------------------------------------------------------------------+

A short description of how to start the program is given by the ``--help`` option.

Examples
~~~~~~~~

Here are a few examples on how to use this tool,

1. ``mssautoplot --cpath mssautoplot.json``

The above command downloads the required number of plots with the default settings from mss_autoplot.json into the output folder.

2. ``mssautoplot --cpath mssautoplot.json --itime="" --vtime="2019-09-02T00:00:00"``

The above command will download all the plots configured in mss_autoplot.json of initial time "" and valid time "2019-09-02T00:00:00". This can be used to create a daily "standard set" of plots with/without an actual flight track, e.g., for daily morning briefings

For downloading plots of multiple flight tracks, specify the flight track and it's configuration in mss_autoplot.json. This can be used to create a "standard set" of plots for all actual flights of a campaign. See below:

"automated_plotting_flights": [
["flight1", "section1", "vertical1", "filename1", "init_time1", "time1"]
["flight2", "section2, "vertical2", "filename2", "init_time2", "time2"]]

3. ``mssautoplot --cpath mssautoplot.json --stime="2019-09-01T00:00:00" --etime="2019-09-02T00:00:00" --intv=6``

The above command will download plots of the with/without flight track from start time "2019-09-01T00:00:00" to end time "2019-09-02T00:00:00". The user would need to compulsorily specify the init_time and time in mss_autoplot.json inorder to use this functionality.


Settings file
--------------

This file includes configuration settings to generate plots in automated fashion. It includes,

- View
- URL of the WMS server
- URL of mscolab server
- List of layers to be plotted
- Style
- Elevation
- List of initial time and forecast hours
- List of flight paths
- List of operations (from MSCOLAB)
- Level
- Map section
- Resolution of the plot
- Path of output folder


If you don't have a mss_autoplot.json then default configuration is in place.

Store this mss_autoplot.json in a path, e.g. “$HOME/.config/msui”

**/$HOME/.config/msui/mssautoplot.json**

.. literalinclude:: samples/config/msui/mssautoplot.json.sample
96 changes: 96 additions & 0 deletions docs/samples/config/msui/mssautoplot.json.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@

{
"view":"topview"
"data_dir": "~/mssdata",
"filepicker_default": "default",

"import_plugins": {
"FliteStar": ["fls", "mslib.plugins.io.flitestar", "load_from_flitestar"],
"Text": ["txt", "mslib.plugins.io.text", "load_from_txt"]
},

"export_plugins": {
"Text": ["txt", "mslib.plugins.io.text", "save_to_txt"],
"KML": ["kml", "mslib.plugins.io.kml", "save_to_kml"],
"GPX": ["gpx", "mslib.plugins.io.gpx", "save_to_gpx"]
},


"layout": {
"topview": [963, 702],
"sideview": [913, 557],
"tableview": [1236, 424],
"immutable": false
},

"locations": {
"EDMO": [48.08, 11.28],
"Hannover": [52.37, 9.74],
"Hamburg": [53.55, 9.99],
"Juelich": [50.92, 6.36],
"Leipzig": [51.34, 12.37],
"Muenchen": [48.14, 11.57],
"Stuttgart": [48.78, 9.18],
"Wien": [48.20833, 16.373064],
"Zugspitze": [47.42, 10.98],
"Kiruna": [67.821, 20.336],
"Ny-Alesund": [78.928, 11.986]
},

"predefined_map_sections": {
"01 Europe (cyl)": {"CRS": "EPSG:4326",
"map": {"llcrnrlon": -15.0, "llcrnrlat": 35.0,
"urcrnrlon": 30.0, "urcrnrlat": 65.0}},
"02 Germany (cyl)": {"CRS": "EPSG:4326",
"map": {"llcrnrlon": 5.0, "llcrnrlat": 45.0,
"urcrnrlon": 15.0, "urcrnrlat": 57.0}},
"03 Global (cyl)": {"CRS": "EPSG:4326",
"map": {"llcrnrlon": -180.0, "llcrnrlat": -90.0,
"urcrnrlon": 180.0, "urcrnrlat": 90.0}},
"04 Shannon (stereo)": {"CRS": "EPSG:77752350",
"map": {"llcrnrlon": -45.0, "llcrnrlat": 22.0,
"urcrnrlon": 45.0, "urcrnrlat": 63.0}},
"05 Northern Hemisphere (stereo)": {"CRS": "EPSG:77790000",
"map": {"llcrnrlon": -45.0, "llcrnrlat": 0.0,
"urcrnrlon": 135.0, "urcrnrlat": 0.0}},
"06 Southern Hemisphere (stereo)": {"CRS": "EPSG:77890000",
"map": {"llcrnrlon": 45.0, "llcrnrlat": 0.0,
"urcrnrlon": -135.0, "urcrnrlat": 0.0}}
},

"new_flighttrack_template": ["Kiruna", "Ny-Alesund"],
"new_flighttrack_flightlevel": 250,
"num_interpolation_points": 201,
"num_labels": 10,

"WMS_request_timeout": 30,

"default_WMS": ["http://www.your-server.de/forecasts"],
"default_VSEC_WMS": ["http://www.your-server.de/forecasts"],
"default_LSEC_WMS": ["http://www.your-server.de/forecasts"],

"default_MSCOLAB": ["http://www.your-mscolab-server.de/"],
"WMS_login": {
"http://www.your-server.de/forecasts" : ["youruser", "yourpassword"]
},
"MSC_login": {
"http://www.your-mscolab-server.de" : ["youruser", "yourpassword"]
},

"automated_plotting_flights": [
["", "", "", "", "", ""]
],
"automated_plotting_hsecs": [
["", "", "", ""]
],
"automated_plotting_vsecs": [
["","", "", ""]
],
"automated_plotting_lsecs": [
["", "", ""]
]

"MSCOLAB_mailid": "",
"MSCOLAB_password": ""
"MSCOLAB_operations":[]
}
8 changes: 5 additions & 3 deletions docs/samples/plugins/navaid.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@
from mslib.msui.constants import MSUI_CONFIG_PATH


def radial_dme(lat, lon, elev=12., test_date=datetime.date.today(), maxdist = 250.):
def radial_dme(lat, lon, elev=12., test_date=datetime.date.today(), maxdist=250.):
# Read the list of NAVAIDs
# PATH needs to be replaced by generic
navaid_file = os.path.join(MSUI_CONFIG_PATH, 'plugins', 'NAVAID_System.csv')
navaid = open(navaid_file, encoding='utf-8-sig' )
navaid = open(navaid_file, encoding='utf-8-sig')
csvreader = csv.reader(navaid)
header = next(csvreader)
ix = header.index('X')
Expand Down Expand Up @@ -113,7 +113,9 @@ def save_to_navaid(filename, name, waypoints):
max_com_len = len(str(wp.comments))
with codecs.open(filename, "w", encoding="utf-8") as out_file:
out_file.write(u"# Do not modify if you plan to import this file again!\n")
out_file.write(u"# This file contains NAVAID-DME names for points less than {0:.0f} nm distance from closest NAVAID point\n".format(maxdist))
out_file.write(
f"# This file contains NAVAID-DME names for points less than {maxdist:.0f} "
"nm distance from closest NAVAID point\n")
out_file.write(f"Track name: {name:}\n")
line = u"{0:5d} {1:{2}} {3:11} {4:4.0f}° {5:02.0f}' {6:4.0f}° {7:02.0f}' {8:7.1f} {9:7.1f} {10:8.1f}" \
u" {11:8.1f} {12:{13}}\n"
Expand Down
22 changes: 22 additions & 0 deletions mslib/msui/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,28 @@
except IOError:
logging.error(f'"{MSUI_SETTINGS}" can''t be created')

# ToDo refactor to a function
MSS_AUTOPLOT = os.getenv('MSS_AUTOPLOT', os.path.join(MSUI_CONFIG_PATH, "mssautoplot.json"))

# We try to create an empty MSUI_SETTINGS file if not existing
# but there can be a permission problem
if '://' in MSS_AUTOPLOT:
dir_path, file_name = fs.path.split(MSS_AUTOPLOT)
try:
_fs = fs.open_fs(dir_path)
if not _fs.exists(file_name):
with _fs.open(file_name, 'w') as fid:
fid.write("{}")
except fs.errors.CreateFailed:
logging.error(f'"{MSS_AUTOPLOT}" can''t be created')
else:
if not os.path.exists(MSS_AUTOPLOT):
try:
with open(MSS_AUTOPLOT, 'w') as fid:
fid.write("{}")
except IOError:
logging.error(f'"{MSS_AUTOPLOT}" can''t be created')

WMS_LOGIN_CACHE = {}
MSC_LOGIN_CACHE = {}

Expand Down
2 changes: 1 addition & 1 deletion mslib/msui/editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ def update_view(self):
empty = True
color = QtCore.Qt.red
# check if any duplicate values
if len(set(values_list)) != len(values_list):
if len(set([tuple(_x) if isinstance(_x, list) else _x for _x in values_list])) != len(values_list):
duplicate = True
color = QtCore.Qt.red
elif key == 'filepicker_default':
Expand Down
Loading

0 comments on commit 0cf90c9

Please sign in to comment.