diff --git a/README.md b/README.md index 471574fbf32a71e1733d5e1354c63e5c1738169f..dc263a7795101b38fb9a5e32e81d8c818c58bdd3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,41 @@ # Yellow Stemborer (Scirpophaga incertulas) temperature model -TODO: Add documentation +The model is a simple day-degree model, where a certain heat sum leads to a transition of one phase to another. It is designed to fit into the [VIPS](https://www.nibio.no/en/subjects/plant-health/vips--a-digital-pest-prediction-platform) automatic pest prediction system. + +## Authors +Tor-Einar Skog, NIBIO + +## Input data +Input data are provided as Json +* Daily minimum and maximum temperatures (°C) +* TimeZone (E.g. "Europe/Oslo" or "GMT+0530") +* Biofix date, the time of eggs deposit + +Example input data are given below: +``` json +{ + "timeZone":"GMT+05:30", + "biofixDate":"2019-01-05", + + "observations":[{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2018-12-31T18:30:00Z","value":10.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2018-12-31T18:30:00Z","value":24.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-01T18:30:00Z","value":11.3},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-01T18:30:00Z","value":26.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-02T18:30:00Z","value":10.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-02T18:30:00Z","value":28.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-03T18:30:00Z","value":10.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-03T18:30:00Z","value":30.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-04T18:30:00Z","value":10.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-04T18:30:00Z","value":31.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-05T18:30:00Z","value":11.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-05T18:30:00Z","value":32.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-06T18:30:00Z","value":10.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-06T18:30:00Z","value":32.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-07T18:30:00Z","value":11.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-07T18:30:00Z","value":32.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-08T18:30:00Z","value":12.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-08T18:30:00Z","value":31.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-09T18:30:00Z","value":13.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-09T18:30:00Z","value":31.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-10T18:30:00Z","value":10.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-10T18:30:00Z","value":28.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-11T18:30:00Z","value":13.3},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-11T18:30:00Z","value":27.3},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-12T18:30:00Z","value":13.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-12T18:30:00Z","value":26.9},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-13T18:30:00Z","value":11.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-13T18:30:00Z","value":28.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-14T18:30:00Z","value":12.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-14T18:30:00Z","value":27.3},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-15T18:30:00Z","value":11.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-15T18:30:00Z","value":25.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-16T18:30:00Z","value":11.9},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-16T18:30:00Z","value":26.3},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-17T18:30:00Z","value":12.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-17T18:30:00Z","value":28.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-18T18:30:00Z","value":15.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-18T18:30:00Z","value":27.3},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-19T18:30:00Z","value":12.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-19T18:30:00Z","value":28.6},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-20T18:30:00Z","value":13.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-20T18:30:00Z","value":29.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-21T18:30:00Z","value":14.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-21T18:30:00Z","value":28.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-22T18:30:00Z","value":13.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-22T18:30:00Z","value":28.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-23T18:30:00Z","value":15.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-23T18:30:00Z","value":28.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-24T18:30:00Z","value":14.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-24T18:30:00Z","value":28.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-25T18:30:00Z","value":15.3},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-25T18:30:00Z","value":28.1},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-26T18:30:00Z","value":16.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-26T18:30:00Z","value":28.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-27T18:30:00Z","value":16.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-27T18:30:00Z","value":24.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-28T18:30:00Z","value":16.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-28T18:30:00Z","value":26.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-29T18:30:00Z","value":16.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-29T18:30:00Z","value":25.4},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-30T18:30:00Z","value":15.8},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-30T18:30:00Z","value":26.1},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-01-31T18:30:00Z","value":15.1},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-01-31T18:30:00Z","value":27.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-01T18:30:00Z","value":15.1},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-01T18:30:00Z","value":29.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-02T18:30:00Z","value":16.1},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-02T18:30:00Z","value":28.9},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-03T18:30:00Z","value":16.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-03T18:30:00Z","value":31.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-04T18:30:00Z","value":16.4},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-04T18:30:00Z","value":29.8},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-05T18:30:00Z","value":17.1},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-05T18:30:00Z","value":32.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-06T18:30:00Z","value":16.8},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-06T18:30:00Z","value":32.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-07T18:30:00Z","value":16.6},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-07T18:30:00Z","value":31.8},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-08T18:30:00Z","value":16.8},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-08T18:30:00Z","value":30.6},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-09T18:30:00Z","value":17.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-09T18:30:00Z","value":32.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-10T18:30:00Z","value":16.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-10T18:30:00Z","value":32.4},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-11T18:30:00Z","value":16.1},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-11T18:30:00Z","value":29.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-12T18:30:00Z","value":15.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-12T18:30:00Z","value":29.6},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-13T18:30:00Z","value":15.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-13T18:30:00Z","value":31.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-14T18:30:00Z","value":15.6},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-14T18:30:00Z","value":32.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-15T18:30:00Z","value":17.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-15T18:30:00Z","value":27.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-16T18:30:00Z","value":17.6},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-16T18:30:00Z","value":27.5},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-17T18:30:00Z","value":17.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-17T18:30:00Z","value":30.6},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-18T18:30:00Z","value":17.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-18T18:30:00Z","value":32.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-19T18:30:00Z","value":17.6},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-19T18:30:00Z","value":34.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-20T18:30:00Z","value":18.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-20T18:30:00Z","value":34.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-21T18:30:00Z","value":19.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-21T18:30:00Z","value":35.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-22T18:30:00Z","value":19.2},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-22T18:30:00Z","value":34.8},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-23T18:30:00Z","value":20.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-23T18:30:00Z","value":36.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-24T18:30:00Z","value":20.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-24T18:30:00Z","value":32.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-25T18:30:00Z","value":21.0},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-25T18:30:00Z","value":32.2},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-26T18:30:00Z","value":21.5},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-26T18:30:00Z","value":31.0},{"elementMeasurementTypeId":"TN","logIntervalId":2,"timeMeasured":"2019-02-27T18:30:00Z","value":20.6},{"elementMeasurementTypeId":"TX","logIntervalId":2,"timeMeasured":"2019-02-27T18:30:00Z","value":30.0}]} +``` + +## Daily heat sum contribution calculation +The daily contribution to the heat sum is calculated from min and max temperatures using the single sine wave function. + +## Outputs +The output is a time series of values. For every day, these values are returned: +* Weather data (max and min temp) +* Daily contribution and total heat sum +* Current phase +* Thresholds for phase transitions +* Warning status. 2 = No risk, 3 = Possible risk, 4 = High risk. 0 = Warning status not applicable (e.g. out of season) + +## Developing and testing the model +### Writing code +It is recommended to use an IDE (Integrated Development Environment) such as [NetBeans](https://netbeans.apache.org/) or [Eclipse](https://www.eclipse.org/) to develop and test the model. + +### Testing +[JUnit](https://junit.org/) is used for testing the model. See the `src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java` file for how it's done. + +### Building +Building is done using [Maven](https://maven.apache.org/). \ No newline at end of file diff --git a/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java b/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java index ed59e6dfe75131079eabdd2ded6c9787a6d0c013..1411a632169c3aa4fa319589f96d9fe7aef6a467 100644 --- a/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java +++ b/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java @@ -53,12 +53,15 @@ public class YellowStemborerTempModelTest { ModelConfiguration config = wfr.getModelConfigurationWithWeatherData("/test_data_2019.json", YellowStemborerTempModel.MODEL_ID.toString()); config.setConfigParameter("timeZone", "GMT+05:30"); config.setConfigParameter("biofixDate", "2019-01-05"); + // Print the config + //System.out.println(config.toJSON()); YellowStemborerTempModel instance = new YellowStemborerTempModel(); instance.setConfiguration(config); List<Result> result = instance.getResult(); assertNotNull(result); - result.forEach(r->System.out.println(r)); + // Print the result + //result.forEach(r->System.out.println(r)); }