Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 56 additions & 54 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,64 @@ Another feature is to manipulate the field values by scaling with an arbitrary f

## Installation

You can install pyflexplot from MCH pypi repository using pip:
__Prerequisites__: Git, [Miniforge](https://conda-forge.org/download)
(or another Conda installation),
[Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer)

### Get source code

```bash
git clone git@github.com:MeteoSwiss-APN/pyflexplot.git
cd pyflexplot
```

### Create Conda environment

Create a Conda environment with only the desired Python version and Poetry and activate it

```bash
conda create -n pyflexplot python=3.10 poetry=1.8
conda activate pyflexplot
```

Configure Poetry to not create a new virtual environment. If it detects an already enabled
virtual environment (eg a Conda environment) it will install dependencies into it:

```bash
poetry config --local virtualenvs.create false
```

### Build the project (Poetry)
Alternative build with mchbuild see further below.

```bash
poetry install
```

### Build the project (mchbuild)

_Documentation to be added._

### Run tests and quality tools

```bash
poetry run pytest
```

If no errors occur, the tests save plots in their respective folders in the

#### Run quality assurance tools

Run pylint to check code style of Python files (if any):

```bash
poetry run pylint src
```

Run mypy to check typing:

```bash
pip install pyflexplot -i https://service.meteoswiss.ch/nexus/repository/python-all/simple
poetry run mypy
```

## Run pyflexplot
Expand Down Expand Up @@ -243,58 +297,6 @@ pyflexplot --preset "$preset" --merge-pdfs --dest=s3://<s3-bucket-name>

## Development

__Prerequisites__: Git, [Miniconda](https://docs.anaconda.com/free/miniconda/) or
[Miniforge](https://github.com/conda-forge/miniforge)
(for installation of Conda), or
[Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer)

### Install dependencies & start the service locally (CSCS)

Clone the repo and enter the project folder:

```bash
git clone git@github.com:MeteoSwiss-APN/pyflexplot.git && cd pyflexplot
```

Create a Conda environment with only the desired Python version and Poetry and activate it:

```bash
conda create --yes --name pyflexplot python=3.10 poetry=1.8
conda activate pyflexplot
```

Configure Poetry to not create a new virtual environment. If it detects an already enabled virtual (eg Conda) environment it will install dependencies into it:

```bash
poetry config --local virtualenvs.create false
```

Install packages:

```bash
poetry install
```

### Run the tests and quality tools

Run tests:

```bash
poetry run pytest
```

Run pylint to check code style of Python files (if any):

```bash
poetry run pylint src
```

Run mypy to check typing:

```bash
poetry run mypy
```

### Updating the Test References

Pyflexplot includes a set of functionality tests that compare generated output against predefined reference data.
Expand Down
2 changes: 1 addition & 1 deletion src/pyflexplot/data/presets/opr/icon-ch1-ctrl/all_png.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ model = "ICON-CH1-CTRL"
lang = "de"
outfile_time_format = "%Y%m%dT%H%M"
combine_species = false
outfile = "forecast-iconch1eps-dispersion~{base_time}~{plot_variable}~{domain}~{release_site}~{species_id}~{time_step}.png"
outfile = "forecast-iconch1eps-dispersion~{base_time}~{plot_variable}~{domain}~{release_site}~{species_name}~{time_step}.png"

[_base._concentration]
plot_variable = "concentration"
Expand Down
6 changes: 3 additions & 3 deletions src/pyflexplot/data/presets/opr/icon-ch1-ctrl/all_shp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ time = -1
combine_species = true

[_base._concentration."_shp+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_Konzentration_{species_id}_{time_step}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_Konzentration_{species_name}_{time_step}.shp"

[_base._concentration._integr."_shp+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_integrierte_Luftaktivitaet_{species_id}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_integrierte_Luftaktivitaet_{species_name}.shp"

[_base._tot_deposition."_shp+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_Deposition_{species_id}_{time_step}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_Deposition_{species_name}_{time_step}.shp"

[_base._affected_area."_shp+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Dispersion_beaufschl_Gebiet.shp"
Expand Down
12 changes: 11 additions & 1 deletion src/pyflexplot/data/presets/opr/icon-ch2-eps/all_pdf.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ens_member_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1
model = "ICON-CH2-EPS"
lang = "de"
outfile_time_format = "%Y%m%dT%H%M"
combine_species = true
combine_species = false

[_base._concentration]
plot_variable = "concentration"
Expand All @@ -29,21 +29,25 @@ plot_variable = "affected_area"
integrate = true
level = 0
time = -1
combine_species = true

[_base._concentration."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_probability_{domain}.pdf"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._concentration._integr."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_probability_{domain}.pdf"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._tot_deposition."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_probability_{domain}.pdf"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._affected_area."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_probability_{domain}.pdf"
Expand All @@ -55,6 +59,7 @@ outfile = "{release_start}_{release_site}_FLEXPART-{model}_probability_{domain}.
plot_type = "multipanel"
multipanel_param = "time"
time = [2, 4, 8, -1]
combine_species = true

[_base._concentration._integr."_pctl95+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_percentile_{domain}.pdf"
Expand Down Expand Up @@ -93,9 +98,11 @@ time = 0

[_base._concentration._cloud."_arrival+"]
ens_variable = "cloud_arrival_time"
combine_species = true

[_base._concentration._cloud."_departure+"]
ens_variable = "cloud_departure_time"
combine_species = true

[_base._concentration._integr."_min+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_cloud_statistics_{domain}.pdf"
Expand Down Expand Up @@ -136,14 +143,17 @@ ens_variable = "mean"
[_base._concentration._integr."_median+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_cloud_statistics_{domain}.pdf"
ens_variable = "median"

[_base._tot_deposition."_median+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_cloud_statistics_{domain}.pdf"
ens_variable = "median"

[_base._affected_area."_median+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_cloud_statistics_{domain}.pdf"
ens_variable = "median"

["**".full]
domain = "full"

["**".ch]
domain = "ch"
10 changes: 8 additions & 2 deletions src/pyflexplot/data/presets/opr/icon-ch2-eps/all_png.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ ens_member_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1
model = "ICON-CH2-EPS"
lang = "de"
outfile_time_format = "%Y%m%dT%H%M"
combine_species = true
outfile = "forecast-iconch2eps-dispersion~{base_time}~{plot_variable}-{ens_variable}~{domain}~{release_site}~1~{time_step}.png"
combine_species = false
outfile = "forecast-iconch2eps-dispersion~{base_time}~{plot_variable}-{ens_variable}~{domain}~{release_site}~{species_name}~{time_step}.png"

[_base._concentration]
plot_variable = "concentration"
Expand All @@ -30,18 +30,22 @@ plot_variable = "affected_area"
integrate = true
level = 0
time = -1
combine_species = true

[_base._concentration."_probability+"]
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._concentration._integr."_probability+"]
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._tot_deposition."_probability+"]
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._affected_area."_probability+"]
ens_variable = "probability"
Expand All @@ -66,9 +70,11 @@ time = 0

[_base._concentration._cloud."_arrival+"]
ens_variable = "cloud_arrival_time"
combine_species = true

[_base._concentration._cloud."_departure+"]
ens_variable = "cloud_departure_time"
combine_species = true

[_base._concentration._integr."_min+"]
ens_variable = "minimum"
Expand Down
38 changes: 22 additions & 16 deletions src/pyflexplot/data/presets/opr/icon-ch2-eps/all_shp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ens_member_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1
model = "ICON-CH2-EPS"
lang = "de"
outfile_time_format = "%Y%m%dT%H%M"
combine_species = true
combine_species = false

[_base._concentration]
plot_variable = "concentration"
Expand All @@ -29,39 +29,43 @@ plot_variable = "affected_area"
integrate = true
level = 0
time = -1
combine_species = true

[_base._concentration."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit-Konzentration_{species_id}_{time_step}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit_Konzentration_{species_name}_{time_step}.shp"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._concentration._integr."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit-integrierte-Luftaktivitaet_{species_id}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._tot_deposition."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit-Deposition_{species_id}.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit_Deposition_{species_name}.shp"
ens_variable = "probability"
ens_param_thr = 0
combine_species = true

[_base._affected_area."_probability+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit-beaufschl_Gebiet.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wahrscheinlichkeit_beaufschl_Gebiet.shp"
ens_variable = "probability"
ens_param_thr = 0

[_base._concentration._integr."_pctl95+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "percentile"
ens_param_pctl = 95

[_base._tot_deposition."_pctl95+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil_Deposition_{species_name}.shp"
ens_variable = "percentile"
ens_param_pctl = 95

[_base._affected_area."_pctl95+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_95-Perzentil_beaufschl_Gebiet.shp"
ens_variable = "percentile"
ens_param_pctl = 95

Expand All @@ -73,53 +77,55 @@ time = 0
[_base._concentration._cloud."_arrival+"]
ens_variable = "cloud_arrival_time"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wolkenankunftszeit.shp"
combine_species = true

[_base._concentration._cloud."_departure+"]
ens_variable = "cloud_departure_time"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Wolkenabzugszeit.shp"
combine_species = true

[_base._concentration._integr."_min+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Minimum_integrierte-Luftaktivitaet.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Minimum_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "minimum"

[_base._tot_deposition."_min+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Minimum_Deposition.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Minimum_Deposition_{species_name}.shp"
ens_variable = "minimum"

[_base._affected_area."_min+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Minimum_beaufschl_Gebiet.shp"
ens_variable = "minimum"

[_base._concentration._integr."_max+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Maximum_integrierte-Luftaktivitaet.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Maximum_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "maximum"

[_base._tot_deposition."_max+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Maximum_Deposition.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Maximum_Deposition_{species_name}.shp"
ens_variable = "maximum"

[_base._affected_area."_max+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Maximum_beaufschl_Gebiet.shp"
ens_variable = "maximum"

[_base._concentration._integr."_mean+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Mittel_integrierte-Luftaktivitaet.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Mittel_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "mean"

[_base._tot_deposition."_mean+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Mittel_Deposition.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Mittel_Deposition_{species_name}.shp"
ens_variable = "mean"

# [_base._affected_area."_mean+"] # for affected area, mean is same area as max -> skip mean
# outfile = "{release_start}_{release_site}_FLEXPART-{model}_Mittel_beaufschl_Gebiet.shp"
# ens_variable = "mean"

[_base._concentration._integr."_median+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Median_integrierte-Luftaktivitaet.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Median_integrierte-Luftaktivitaet_{species_name}.shp"
ens_variable = "median"

[_base._tot_deposition."_median+"]
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Median_Deposition.shp"
outfile = "{release_start}_{release_site}_FLEXPART-{model}_Median_Deposition_{species_name}.shp"
ens_variable = "median"

[_base._affected_area."_median+"]
Expand Down
Loading