diff --git a/src/main/java/no/nibio/vips/model/oatfloweringmodel/OatFloweringModel.java b/src/main/java/no/nibio/vips/model/oatfloweringmodel/OatFloweringModel.java index 55fb4ca7c8845d461a5fe3137bfb4134ade3d673..2948f9b3209f84e452cd090d9aaf941cecb6074e 100755 --- a/src/main/java/no/nibio/vips/model/oatfloweringmodel/OatFloweringModel.java +++ b/src/main/java/no/nibio/vips/model/oatfloweringmodel/OatFloweringModel.java @@ -68,6 +68,7 @@ public class OatFloweringModel extends I18nImpl implements Model{ Double dayDegreeSum = 0.0; List<Result> results = new ArrayList<>(); boolean z60Set = false, z625Set = false, z69Set = false; + //int counter = 1; for(WeatherObservation obs:this.TM) { if(obs.getTimeMeasured().compareTo(dateOfSowing) >= 0 @@ -75,22 +76,27 @@ public class OatFloweringModel extends I18nImpl implements Model{ { dayDegreeSum += obs.getValue(); } - //System.out.println(obs.getTimeMeasured() +": " + dayDegreeSum); - if(dayDegreeSum >= 768 && ! z60Set) + + Double GS = this.getGS(dayDegreeSum); + + //System.out.println(obs.getTimeMeasured() +" [" + counter + "]: " + dayDegreeSum + "/" + GS); + //counter++; + if(GS >= 60.0 && ! z60Set) { Result result = this.initResult(obs); result.setValue(this.getModelId().toString(), "ZREACHED", "60"); + result.setValue(this.getModelId().toString(), "GS", GS.toString()); results.add(result); z60Set = true; } - if(dayDegreeSum >= 808 && ! z625Set) + if(GS >= 62.5 && ! z625Set) { Result result = this.initResult(obs); result.setValue(this.getModelId().toString(), "ZREACHED", "62.5"); results.add(result); z625Set = true; } - if(dayDegreeSum >= 922 && ! z69Set) + if(GS >= 69.0 && ! z69Set) { Result result = this.initResult(obs); result.setValue(this.getModelId().toString(), "ZREACHED", "69"); @@ -102,6 +108,17 @@ public class OatFloweringModel extends I18nImpl implements Model{ return results; } + /** + * Calculating Growth stage from day degrees + * + * @param dayDegrees + * @return + */ + public Double getGS(Double dayDegrees) + { + return 99 * Math.exp(-4.056118159304253 * Math.exp(-0.002380012709504 * dayDegrees)); + } + private Result initResult(WeatherObservation obs) { Calendar cal = Calendar.getInstance(); diff --git a/src/test/java/OatFloweringModelTest.java b/src/test/java/OatFloweringModelTest.java index 1d54841bb47872429165cf07fd75879fa93ecfbc..0b5092640f558a4ee93da649e8ee10a6ce0ad8c6 100755 --- a/src/test/java/OatFloweringModelTest.java +++ b/src/test/java/OatFloweringModelTest.java @@ -87,6 +87,20 @@ public class OatFloweringModelTest { } + @Test + public void testGetGS() + { + System.out.println("testGetGS"); + OatFloweringModel instance = new OatFloweringModel(); + Double dayDegrees = 2.1; + Double expRes = 1.749313981451895; + assertEquals(expRes, instance.getGS(dayDegrees)); + + dayDegrees = 69.8; + expRes = 3.1893887633938527; + assertEquals(expRes, instance.getGS(dayDegrees)); + } + @Test public void testGetResult() { @@ -99,13 +113,15 @@ public class OatFloweringModelTest { List<Result> results = instance.getResult(); String weekResult = results.get(0).getValue(instance.getModelId().toString(),"WEEK_IN_YEAR"); String zReached = results.get(0).getValue(instance.getModelId().toString(),"ZREACHED"); - assertEquals(weekResult, "25"); - assertEquals(zReached, "60"); + /*for(Result result:results) { - System.out.println("Result: [" + result.getResultValidTime() + "]" + result.getAllValues()); + System.out.println("Result: [" + result.getValidTimeStart() + "]" + result.getAllValues()); }*/ + assertEquals("27", weekResult); + assertEquals("60", zReached); + } catch(ConfigValidationException | ModelExcecutionException ex) { @@ -130,21 +146,21 @@ public class OatFloweringModelTest { if(all.isArray()) { for(JsonNode node : all){ - System.out.println(node.toString()); + //System.out.println(node.toString()); Date timeMeasured = (Date)mapper.convertValue(node.get("timeMeasured").asText(), new TypeReference<Date>(){}); if(firstDate == null || firstDate.compareTo(timeMeasured) > 0) { firstDate = timeMeasured; } - System.out.println(node.get("elementMeasurementTypeId")); + //System.out.println(node.get("elementMeasurementTypeId")); WeatherObservation observation = new WeatherObservation(); observation.setTimeMeasured(timeMeasured); observation.setLogIntervalId(Integer.valueOf(node.get("logIntervalId").asText())); observation.setElementMeasurementTypeId(node.get("elementMeasurementTypeId").asText()); observation.setValue(Double.valueOf(node.get("value").asText())); observations.add(observation); - System.out.println("logIntevalId=" + observation.getLogIntervalId()); + //System.out.println("logIntevalId=" + observation.getLogIntervalId()); } } @@ -154,7 +170,7 @@ public class OatFloweringModelTest { } config.setConfigParameter("observations", observations); config.setConfigParameter("dateOfSowing", firstDate); - System.out.println("dateOfSowing = " + firstDate); + //System.out.println("dateOfSowing = " + firstDate); return config; } catch (IOException ex) {