diff --git a/.gitignore b/.gitignore index 4bc1e934d1a2494c4b7a08a7b94ce0c6f5834c65..7a03f2e8852777aa499889951a5d5d8b610df740 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ target/ classes/ +modules/ *~ diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java index 70346b7414e1bf74343100156903bfe29e8c2106..8ea9ba4f9bc0c64b8cbba27c29bbefcfbccb79a0 100644 --- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java +++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java @@ -28,25 +28,44 @@ import java.util.Date; public class OptimizationObservation implements Comparable{ private Date date; - private float hoyde; - private float utviklingstrinn; - private float NDF; - private float INDF; - private float raaprotein; - private float FEm; + private Double height; + private Double MSC; + private Double NDF; + private Double INDF; + private Double rawProtein; + private Double FEm; public OptimizationObservation() { } + + public OptimizationObservation( + Date date, + Double height, + Double MSC, + Double NDF, + Double INDF, + Double rawProtein, + Double FEm + ) + { + this.date = date; + this.height = height; + this.MSC = MSC; + this.NDF = NDF; + this.INDF = INDF; + this.rawProtein = rawProtein; + this.FEm = FEm; + } /** * Bruker formelen Avling (kg TS/daa) = 34.86 * 0.017h<sup>2</sup> + 10.21h * @return */ - public float getAvling() + public Double getAvling() { - return 34.86f + 0.017f * (float) Math.pow(this.getHoyde(), 2) + 10.21f * this.getHoyde(); + return 34.86f + 0.017f * (Double) Math.pow(this.getHeight(), 2) + 10.21f * this.getHeight(); } @Override @@ -77,86 +96,86 @@ public class OptimizationObservation implements Comparable{ } /** - * @return the hoyde + * @return the height */ - public float getHoyde() { - return hoyde; + public Double getHeight() { + return height; } /** - * @param hoyde the hoyde to set + * @param height the height to set */ - public void setHoyde(float hoyde) { - this.hoyde = hoyde; + public void setHeight(Double height) { + this.height = height; } /** - * @return the utviklingstrinn + * @return the MSC */ - public float getUtviklingstrinn() { - return utviklingstrinn; + public Double getMSC() { + return MSC; } /** - * @param utviklingstrinn the utviklingstrinn to set + * @param MSC the MSC to set */ - public void setUtviklingstrinn(float utviklingstrinn) { - this.utviklingstrinn = utviklingstrinn; + public void setMSC(Double MSC) { + this.MSC = MSC; } /** * @return the NDF */ - public float getNDF() { + public Double getNDF() { return NDF; } /** * @param NDF the NDF to set */ - public void setNDF(float NDF) { + public void setNDF(Double NDF) { this.NDF = NDF; } /** * @return the INDF */ - public float getINDF() { + public Double getINDF() { return INDF; } /** * @param INDF the INDF to set */ - public void setINDF(float INDF) { + public void setINDF(Double INDF) { this.INDF = INDF; } /** - * @return the raaprotein + * @return the rawProtein */ - public float getRaaprotein() { - return raaprotein; + public Double getRawProtein() { + return rawProtein; } /** - * @param raaprotein the raaprotein to set + * @param rawProtein the rawProtein to set */ - public void setRaaprotein(float raaprotein) { - this.raaprotein = raaprotein; + public void setRawProtein(Double rawProtein) { + this.rawProtein = rawProtein; } /** * @return the FEm */ - public float getFEm() { + public Double getFEm() { return FEm; } /** * @param FEm the FEm to set */ - public void setFEm(float FEm) { + public void setFEm(Double FEm) { this.FEm = FEm; } diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java index f2236ab89c1ceb739d3c731745373c2f19b266dd..3c70f822e22072986c81d8696e5b3ff4996accb8 100644 --- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java +++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java @@ -21,6 +21,8 @@ package no.bioforsk.vips.model.roughagenutritionmodel; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -80,7 +82,19 @@ public class RoughageNutritionModel implements Model { @Override public List<Result> getResult() throws ModelExcecutionException { RoughageNutritionModelImpl impl = new RoughageNutritionModelImpl(); - ResultMatrix resultMatrix = impl.beregnModell(TMD, TJM10D, RRD, EPPD, Q0D, firstHarvest, secondHarvest, soilType, cloverShare, optimizationObservations, timeZone); + ResultMatrix resultMatrix = impl.beregnModell( + TMD, + TJM10D, + RRD, + EPPD, + Q0D, + firstHarvest, + secondHarvest, + soilType, + cloverShare, + optimizationObservations, + timeZone + ); List<Result> results = new ArrayList<>(); @@ -283,9 +297,10 @@ public class RoughageNutritionModel implements Model { { this.cloverShare = mapper.convertValue(config.getConfigParameter("cloverShare"), Integer.class); } - if(config.getConfigParameter("optimizationObsevations") != null) + if(config.getConfigParameter("optimizationInfo") != null) { - this.optimizationObservations = mapper.convertValue(config.getConfigParameter("optimizatioObservations"), new TypeReference<List<OptimizationObservation>>(){}); + List<String> optimizationInfo = mapper.convertValue(config.getConfigParameter("optimizationInfo"), new TypeReference<List<String>>(){}); + this.optimizationObservations = this.parseOptimizationInfo(optimizationInfo, this.timeZone); } @@ -437,4 +452,29 @@ public class RoughageNutritionModel implements Model { } } + private List<OptimizationObservation> parseOptimizationInfo(List<String> optimizationInfo, TimeZone timeZone) { + List<OptimizationObservation> retVal = new ArrayList<>(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + format.setTimeZone(timeZone); + for(String line:optimizationInfo) + { + String[] parts = line.split(","); + try + { + OptimizationObservation optObs = new OptimizationObservation( + format.parse(parts[0]), // Date + Double.parseDouble(parts[1]), // Height + Double.parseDouble(parts[2]), // MSC + Double.parseDouble(parts[3]), // FEm + Double.parseDouble(parts[4]), // NDF + Double.parseDouble(parts[5]), // INDF + Double.parseDouble(parts[6]) // Raw protein + ); + retVal.add(optObs); + } + catch(ArrayIndexOutOfBoundsException | ParseException ex) {} + } + return retVal; + } + } diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java index 6deb917aa814e4e14248095b99eeaa9fc822319d..49d3b00a63f0a4643857ce0059c96a2e04fde268 100644 --- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java +++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java @@ -2064,7 +2064,7 @@ public class RoughageNutritionModelImpl implements CostFunction{ { try { OptimizationObservation observasjon = i.next(); - maaltUtviklingstrinn = observasjon.getUtviklingstrinn(); + maaltUtviklingstrinn = observasjon.getMSC(); // Tar høyde for at observasjonen ikke inneholder måling av utviklingstrinn if(maaltUtviklingstrinn < 0) continue; @@ -2558,10 +2558,10 @@ public class RoughageNutritionModelImpl implements CostFunction{ for(ListIterator<OptimizationObservation> i=this.observasjoner.listIterator();i.hasNext();) { OptimizationObservation observasjon = i.next(); - if(observasjon.getRaaprotein() > 0 && this.getRaaprotein(observasjon.getDate(), this.jordtype) > 0) + if(observasjon.getRawProtein() > 0 && this.getRaaprotein(observasjon.getDate(), this.jordtype) > 0) { double beregnetNMengde = this.getNMengdeFraRaaprotein(this.getRaaprotein(observasjon.getDate(), this.jordtype), observasjon.getDate(), this.jordtype); - double maaltNMengde = this.getNMengdeFraRaaprotein(observasjon.getRaaprotein(), observasjon.getDate(), this.jordtype); + double maaltNMengde = this.getNMengdeFraRaaprotein(observasjon.getRawProtein(), observasjon.getDate(), this.jordtype); differanseMellomMaaltOgSimulertNMengde = maaltNMengde - beregnetNMengde; @@ -2570,7 +2570,7 @@ public class RoughageNutritionModelImpl implements CostFunction{ while(i.hasNext() && grenseDato == null) { OptimizationObservation tmp = i.next(); - if(tmp.getRaaprotein() > 0 && this.getRaaprotein(tmp.getDate(), this.jordtype) > 0) + if(tmp.getRawProtein() > 0 && this.getRaaprotein(tmp.getDate(), this.jordtype) > 0) grenseDato = tmp.getDate(); }