From e9875472a2cb5ff6f73d44e9f68aadad174bc745 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Tue, 7 Jun 2022 09:42:21 +0200 Subject: [PATCH] Added support for the EOL (dead) phase --- pom.xml | 10 ++-- .../yellowstemborertempmodel/DataMatrix.java | 1 + .../YellowStemborerTempModel.java | 47 +++++++++++++------ .../YellowStemborerTempModelTest.java | 6 +-- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index bb20e15..ca147cb 100755 --- a/pom.xml +++ b/pom.xml @@ -6,11 +6,6 @@ <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> - <dependency> - <groupId>no.nibio.vips.common</groupId> - <artifactId>VIPSCommon</artifactId> - <version>1.0-SNAPSHOT</version> - </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> @@ -23,6 +18,11 @@ <version>1.3</version> <scope>test</scope> </dependency> + <dependency> + <groupId>no.nibio.vips.common</groupId> + <artifactId>VIPSCommon</artifactId> + <version>2022.1</version> + </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> diff --git a/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/DataMatrix.java b/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/DataMatrix.java index 17d2e76..0e10b81 100644 --- a/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/DataMatrix.java +++ b/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/DataMatrix.java @@ -35,4 +35,5 @@ public class DataMatrix extends DateMap{ public final static String PHASE_LARVAE ="LARVAE"; public final static String PHASE_PUPA ="PUPA"; public final static String PHASE_ADULT ="ADULT"; + public final static String PHASE_EOL ="EOL"; } diff --git a/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModel.java b/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModel.java index 4abf3f2..b4a045c 100644 --- a/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModel.java +++ b/src/main/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModel.java @@ -61,12 +61,13 @@ public class YellowStemborerTempModel extends I18nImpl implements Model { DataMatrix.PHASE_EGG, DataMatrix.PHASE_LARVAE, DataMatrix.PHASE_PUPA, - DataMatrix.PHASE_ADULT + DataMatrix.PHASE_ADULT, + DataMatrix.PHASE_EOL }; // DD aggregation cutoff values for each phase - private Double[] ddLower = {13.0,12.0,15.0,13.0}; - private Double[] ddUpper = {36.0, 34.0,36.0,36.0}; + private Double[] ddLower = {13.0, 12.0, 15.0, 13.0}; + private Double[] ddUpper = {36.0, 34.0, 36.0, 36.0}; // Heat sum thresholds for each phase private Double[] heatRequirements = {113.0, 370.0, 188.0, 25.0}; @@ -127,6 +128,10 @@ public class YellowStemborerTempModel extends I18nImpl implements Model { { warningStatus = Result.WARNING_STATUS_HIGH_RISK; } + if(PHASE.equals(DataMatrix.PHASE_EOL)) + { + warningStatus = Result.WARNING_STATUS_NO_RISK; + } result.setWarningStatus(warningStatus); retVal.add(result); // Moving on... @@ -347,27 +352,39 @@ public class YellowStemborerTempModel extends I18nImpl implements Model { Double sum = currentPhase.equals(DataMatrix.PHASE_EGG) ? 0.0 : currentPhase.equals(DataMatrix.PHASE_LARVAE) ? this.heatRequirements[0] : currentPhase.equals(DataMatrix.PHASE_PUPA) ? this.heatRequirements[0] + this.heatRequirements[1] - : this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2]; + : currentPhase.equals(DataMatrix.PHASE_ADULT) ? this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2] + : this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2] + this.heatRequirements[3]; List<String> phasesList = Arrays.asList(this.phases); while(today.compareTo(lastDate) <= 0) { - WeatherObservation todayMinTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TND); - WeatherObservation todayMaxTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TXD); - if(todayMinTemp == null || todayMaxTemp == null) + if(!currentPhase.equals(DataMatrix.PHASE_EOL)) + { + WeatherObservation todayMinTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TND); + WeatherObservation todayMaxTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TXD); + if(todayMinTemp == null || todayMaxTemp == null) + { + throw new ModelExcecutionException("Missing weather data at " + today + ": " + (todayMinTemp == null ? "TND ": "") + (todayMaxTemp == null ? "TXD ": "")); + } + //System.out.println("today=" + today + ",todayTemp=" + todayTemp); + Double current_ddLower = this.ddLower[phasesList.indexOf(currentPhase)]; + Double current_ddUpper = this.ddUpper[phasesList.indexOf(currentPhase)]; + Double dailyContribution = nlc.calculateSingleSineWaveWithCutoff(todayMinTemp.getValue(), todayMaxTemp.getValue(), current_ddLower, current_ddUpper); + this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.DAILY_CONTRIB, dailyContribution); + sum += dailyContribution; + } + else { - throw new ModelExcecutionException("Missing weather data at " + today + ": " + (todayMinTemp == null ? "TND ": "") + (todayMaxTemp == null ? "TXD ": "")); + this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.DAILY_CONTRIB, 0.0); } - //System.out.println("today=" + today + ",todayTemp=" + todayTemp); - Double current_ddLower = this.ddLower[phasesList.indexOf(currentPhase)]; - Double current_ddUpper = this.ddUpper[phasesList.indexOf(currentPhase)]; - Double dailyContribution = nlc.calculateSingleSineWaveWithCutoff(todayMinTemp.getValue(), todayMaxTemp.getValue(), current_ddLower, current_ddUpper); - this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.DAILY_CONTRIB, dailyContribution); - sum += dailyContribution; this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.HEAT_SUM, sum); // Check phase transition - if(sum >= this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2]) + if(sum >= this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2] + this.heatRequirements[3]) + { + currentPhase = DataMatrix.PHASE_EOL; + } + else if(sum >= this.heatRequirements[0] + this.heatRequirements[1] + this.heatRequirements[2]) { currentPhase = DataMatrix.PHASE_ADULT; } 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 9290114..8d0bb1d 100644 --- a/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java +++ b/src/test/java/no/nibio/vips/model/yellowstemborertempmodel/YellowStemborerTempModelTest.java @@ -55,11 +55,11 @@ public class YellowStemborerTempModelTest { // The timezone is used to set daily temperatures and biofix date correctly config.setConfigParameter("timeZone", "GMT+05:30"); // The date for when to start calculating heat sums - config.setConfigParameter("biofixDate", "2019-01-05"); + config.setConfigParameter("biofixDate", "2019-01-02"); // OPTIONAL // The observed phase at biofix date. Default is EGG - config.setConfigParameter("observedPhase", DataMatrix.PHASE_EGG); + config.setConfigParameter("observedPhase", DataMatrix.PHASE_ADULT); // Heat requirement for transitioning out of [EGG,LARVAE,PUPA,ADULT] phases Double[] heatRequirements = {113.0, 370.0, 188.0, 25.0}; @@ -90,7 +90,7 @@ public class YellowStemborerTempModelTest { //ObjectMapper mapper = new ObjectMapper(); //System.out.println(mapper.writeValueAsString(result)); // Line by line - //result.forEach(r->System.out.println(r)); + result.forEach(r->System.out.println(r)); } -- GitLab