From 4614f41af04a62eab4ac4784a1904ae37d297702 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Wed, 22 May 2019 11:49:40 +0200 Subject: [PATCH] Bugfix in wind data collection --- .../FinnCerealModelsPreprocessor.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/no/nibio/vips/logic/scheduling/model/preprocessor/FinnCerealModelsPreprocessor.java b/src/main/java/no/nibio/vips/logic/scheduling/model/preprocessor/FinnCerealModelsPreprocessor.java index bf23442b..232c0cd2 100644 --- a/src/main/java/no/nibio/vips/logic/scheduling/model/preprocessor/FinnCerealModelsPreprocessor.java +++ b/src/main/java/no/nibio/vips/logic/scheduling/model/preprocessor/FinnCerealModelsPreprocessor.java @@ -2,6 +2,7 @@ package no.nibio.vips.logic.scheduling.model.preprocessor; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -54,6 +55,7 @@ public class FinnCerealModelsPreprocessor extends ModelRunPreprocessor { }, sowingDate, configuration.getDateEndInTimeZone()); + Collections.sort(observations); observations = wUtil.checkForAndFixHourlyTimeSeriesHoles(observations); List<WeatherObservation> temperature = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.TEMPERATURE_MEAN)) .collect(Collectors.toList()); @@ -63,11 +65,30 @@ public class FinnCerealModelsPreprocessor extends ModelRunPreprocessor { .collect(Collectors.toList()); List<WeatherObservation> windSpeedAll = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.WIND_SPEED_2M)) .collect(Collectors.toList()); - if(windSpeedAll.isEmpty()) { - windSpeedAll = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.WIND_SPEED_10MIN_2M)) - .collect(Collectors.toList()); + + // Dealing with wind, which may be dodgy with regards to forecasts etc. + if(windSpeedAll.isEmpty() || windSpeedAll.size() != temperature.size()) { + List<WeatherObservation> windFallback = observations.stream() + .filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.WIND_SPEED_10MIN_2M)) + .collect(Collectors.toList()); + if(windSpeedAll.isEmpty()) + { + windSpeedAll.addAll(windFallback); + } + else + { + Collections.sort(windSpeedAll); + Date lastWindTime = windSpeedAll.get(windSpeedAll.size()-1).getTimeMeasured(); + windSpeedAll.addAll(windFallback.stream().filter(o->o.getTimeMeasured().after(lastWindTime)).collect(Collectors.toList())); + } } - /*System.out.println("Observations size = " + observations.size()); + + + /* + Collections.sort(temperature); + System.out.println("First temp is at " + temperature.get(0).getTimeMeasured()); + System.out.println("Last temp is at " + temperature.get(temperature.size()-1).getTimeMeasured()); + System.out.println("Observations size = " + observations.size()); System.out.println("temperature size=" + temperature.size()); System.out.println("rainfall size=" + rainfall.size()); System.out.println("rh size =" + rh.size()); -- GitLab