From 4813406e1c1222c75b31b350be769a19c3d473ea Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Thu, 23 Feb 2023 09:01:53 +0100 Subject: [PATCH] Added info for input data an result data --- input_data.md | 39 +++++++++++++++++++++++++++- model_development_java.md | 5 ++++ model_development_python.md | 5 ++++ model_implementation.md | 2 +- result_data.md | 51 +++++++++++++++++++++++++++++++++++++ weather_data.md | 8 ++++-- 6 files changed, 106 insertions(+), 4 deletions(-) diff --git a/input_data.md b/input_data.md index 1f9a61d..df1e760 100644 --- a/input_data.md +++ b/input_data.md @@ -1,3 +1,40 @@ <img src="illustrations/vipslogo_512.png" alt="VIPS Logo" height="250"/> -# VIPS Model input data \ No newline at end of file +# VIPS Model input data + +Tor-Einar Skog, Senior developer, NIBIO + +Updated: 2023-02-23 + + +Below is a minimum example of VIPS result data. + +**---> TODO create Json schema <---** + +```json +{ + modelId:'REFERENCEM', + configParameters: { + 'sowingDate': '2022-03-01', + 'observations': [ + {'timeMeasured': '2015-03-01T00:00:00+01:00', 'elementMeasurementTypeId': 'TM', 'logIntervalId': '2', 'value': '1.41025'}, + {'timeMeasured': '2015-03-02T00:00:00+01:00', 'elementMeasurementTypeId': 'TM', 'logIntervalId': '2', 'value': '2.87608333333333'}, + {'timeMeasured': '2015-03-03T00:00:00+01:00', 'elementMeasurementTypeId': 'TM', 'logIntervalId': '2', 'value': '1.00854166666667'}, + {'timeMeasured': '2015-03-04T00:00:00+01:00', 'elementMeasurementTypeId': 'TM', 'logIntervalId': '2', 'value': '-1.44675'} + ] + } +} +``` + +## modelId +This is the 10-character unique id for the specific model + +## configParameters +Here are the input data, which are free-form, but by convention weather data are to be found in the `observations` property, and they must follow the [VIPS weather data format](./weather_data.md). Here, we also have a `sowingDate` that this specific model requires. + +## Usage in a VIPS model +### Java +In [VIPSCommon](https://gitlab.nibio.no/VIPS/VIPSCommon), there is a `ModelConfiguration` class that encapsulates all the necessary functionality. +### Python +In [VIPSCore-Python-Common](https://gitlab.nibio.no/VIPS/vipscore-python-common) there is a `ModelConfiguration` class in `entities.py` that encapsulates all the necessary functionality. + diff --git a/model_development_java.md b/model_development_java.md index 43e6e57..b9db277 100644 --- a/model_development_java.md +++ b/model_development_java.md @@ -1,6 +1,11 @@ <img src="illustrations/vipslogo_512.png" alt="VIPS Logo" height="250"/> # Developing a model using Java + +Tor-Einar Skog, Senior developer, NIBIO + +Updated: 2023-02-23 + This page builds on [A step-by-step introduction to implementing prediction models in VIPS](model_implementation.md) What you need to develop a VIPS model is: diff --git a/model_development_python.md b/model_development_python.md index 260d3a8..3ea74f7 100644 --- a/model_development_python.md +++ b/model_development_python.md @@ -1,6 +1,11 @@ <img src="illustrations/vipslogo_512.png" alt="VIPS Logo" height="250"/> # Developing a model using Python + +Tor-Einar Skog, Senior developer, NIBIO + +Updated: 2023-02-23 + This page builds on [A step-by-step introduction to implementing prediction models in VIPS](model_implementation.md) ## Preparations diff --git a/model_implementation.md b/model_implementation.md index 4666376..4d503f1 100644 --- a/model_implementation.md +++ b/model_implementation.md @@ -4,7 +4,7 @@ Tor-Einar Skog, Senior developer, NIBIO -Updated: 2023-02-21 +Updated: 2023-02-23 ## What you will learn This document describes how to implement and test a forecasting model diff --git a/result_data.md b/result_data.md index adcfd25..b96c879 100644 --- a/result_data.md +++ b/result_data.md @@ -1,3 +1,54 @@ <img src="illustrations/vipslogo_512.png" alt="VIPS Logo" height="250"/> # Specification of VIPS model result data +Tor-Einar Skog, Senior developer, NIBIO + +Updated: 2023-02-23 + + +Below is a minimum example of VIPS result data. + +**---> TODO create Json schema <---** + +```json +[ + { + "validTimeStart": "2016-09-29T05:00:00+00:00", + "validTimeEnd": null, + "validGeometry": null, + "warningStatus": 2, + "allValues": "{\"FUNGUSPILO.CONTROLLED_INFECTION_RISK\": \"10\"}" + }, + { + "validTimeStart": "2016-09-29T06:00:00+00:00", + "validTimeEnd": null, + "validGeometry": null, + "warningStatus": 2, + "allValues": "{\"FUNGUSPILO.CONTROLLED_INFECTION_RISK\": \"12\"}" + } +] + +``` + +## Values +The result values are stored as Json inside the `allValues` property, as Json string. It's a string so that we can store it freely in a database, but now that PostgreSQL has support for Json contents, this can be fixed (TODO). + +## warningStatus +This property represents the "Traffic lights" of VIPS, and the codes are to be interpreted as follows: + +* 0 = No result. Could be due to several reasons, e.g that the season has not started or is already over +* 1 = Missing data. The model is running, but lacks the required input data to perform the calculations. This could be missing weather data or that the model requires a field observation at a certain point in the growing season +* 2 = No risk (Green traffic light) +* 3 = Some risk (Yellow traffic light) +* 4 = High risk of infection (Red traffic light) + +Exactly how to interpret the traffic lights should be provided in each model's warning status interpretation metadata method + +## Metadata +The other properties are describing the time and space of the prediction. `validTimeStart` is the only mandatory of the three properties. If you add `validTimeEnd`, the object describes a period rather than a point in time. `validGeometry` describes where the prediction is valid. This is in [GeoJson](https://geojson.org/) format, so it could be any GIS entity, such as point, polygon, multipolygon. + +## Usage in a VIPS model +### Java +In [VIPSCommon](https://gitlab.nibio.no/VIPS/VIPSCommon), there is a `Result` interface and a `ResultImpl` class that encapsulates all the necessary functionality. +### Python +In [VIPSCore-Python-Common](https://gitlab.nibio.no/VIPS/vipscore-python-common) there is a `Result` class in `entities.py` that encapsulates all the necessary functionality. \ No newline at end of file diff --git a/weather_data.md b/weather_data.md index 57f69e8..5e2bde3 100644 --- a/weather_data.md +++ b/weather_data.md @@ -2,6 +2,10 @@ # Specification of external weather data source for VIPS +Tor-Einar Skog, Senior developer, NIBIO + +Updated: 2023-02-23 + ## Preface This is a description of how a weather data provider can make weather data available for forecasting models running in VIPS, NIBIO's system for forecasting agricultural pests and diseases. @@ -49,7 +53,7 @@ Explanation: All weather stations (or measuring points) in the same external weather data source must have a uniform URL pattern. E.g.: ``` -https://lmt.nibio.no/services//rest/vips/getdata/?weatherStationId=[weatherStationId]&elementMeasurementTypes[]=TM&elementMeasurementTypes[]=RR&elementMeasurementTypes[]=UM&logInterval=1h&startDate=2019-05-01&startTime=00&endDate=2019-05-20&endTime=23&timeZone=Europe/Oslo&elementMeasurementTypes[]=BT +https://lmt.nibio.no/services/rest/vips/getdata/?weatherStationId=[weatherStationId]&elementMeasurementTypes[]=TM&elementMeasurementTypes[]=RR&elementMeasurementTypes[]=UM&logInterval=1h&startDate=2019-05-01&startTime=00&endDate=2019-05-20&endTime=23&timeZone=Europe/Oslo&elementMeasurementTypes[]=BT ``` The `[weatherStationId]` is a placeholder for the unique identificator for a particular weather station. It need not be numerical (although that is recommended), but it must be able to easily pass on as part of a URL. @@ -100,6 +104,6 @@ Due to a wish to standardize the names of the codes using international standard |Organization|URL pattern|Contact person| |------------|-----------|--------------| -|NIBIO|http://lmt.nibio.no/agrometbase/export/getVIPS3JSONWeatherData.php?weatherStationId=[weatherStationId]|[Tor-Einar Skog](https://nibio.no/ansatte/tor-einar-skog)| +|NIBIO|https://lmt.nibio.no/services/rest/vips/getdata/?weatherStationId=[weatherStationId]|[Tor-Einar Skog](https://nibio.no/ansatte/tor-einar-skog)| |Swedish University of Agricultural Sciences|http://www.ffe.slu.se/lm/json/downloadJS.cfm?weatherStationID=[weatherStationId]|[LantMet](mailto:lantmet@slu.se)| \ No newline at end of file -- GitLab