Skip to content
Snippets Groups Projects
Commit cd22b4a8 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Merge branch 'Luke' into 'master'

Added preprocessor for FINNCEREAL model.

See merge request !1
parents 39a3d64c 2f1d2341
No related branches found
No related tags found
1 merge request!1Added preprocessor for FINNCEREAL model.
package no.nibio.vips.logic.scheduling.model.preprocessor;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import no.nibio.vips.entity.ModelConfiguration;
import no.nibio.vips.entity.WeatherObservation;
import no.nibio.vips.logic.entity.ForecastConfiguration;
import no.nibio.vips.logic.entity.PointOfInterestWeatherStation;
import no.nibio.vips.logic.scheduling.model.ModelRunPreprocessor;
import no.nibio.vips.logic.scheduling.model.PreprocessorException;
import no.nibio.vips.model.ConfigValidationException;
import no.nibio.vips.util.WeatherElements;
import no.nibio.vips.util.WeatherObservationListException;
import no.nibio.vips.util.WeatherUtil;
import no.nibio.vips.util.weather.WeatherDataSourceException;
import no.nibio.vips.util.weather.WeatherDataSourceUtil;
public class FinnCerealModelsPreprocessor extends ModelRunPreprocessor {
public static final String SOWING_DATE ="FINNCEREAL_FIELD_SOWING_DATE";
public static final String PREVIOUS_CROP ="FINNCEREAL_PREVIOUS_CROP";
public static final String TILLAGE ="FINNCEREAL_TILLAGE_METHOD";
public static final String SUSCEPTIBILITY ="FINNCEREAL_CROP_SUSCEPTIBILITY";
public static final String MODEL ="FINNCEREAL_MODEL_NAME";
/**
* This method implementation is based on the DOWNCASTModelPreprocessor implemention of getModelCOnfiguration.
*/
@Override
public ModelConfiguration getModelConfiguration(ForecastConfiguration configuration) throws PreprocessorException {
ModelConfiguration config = new ModelConfiguration();
PointOfInterestWeatherStation weatherStation = (PointOfInterestWeatherStation) configuration.getWeatherStationPointOfInterestId();
WeatherDataSourceUtil wdsUtil = new WeatherDataSourceUtil();
WeatherUtil wUtil = new WeatherUtil();
List<WeatherObservation> observations;
Date sowingDate = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
sowingDate = format.parse(configuration.getForecastModelConfigurationValue(SOWING_DATE));
observations = wdsUtil.getWeatherObservations(
weatherStation,
WeatherObservation.LOG_INTERVAL_ID_1H,
new String[]{
WeatherElements.WIND_SPEED_2M,
WeatherElements.WIND_SPEED_10MIN_2M,
WeatherElements.RELATIVE_HUMIDITY_MEAN,
WeatherElements.PRECIPITATION,
WeatherElements.TEMPERATURE_MEAN
},
sowingDate,
configuration.getDateEndInTimeZone());
observations = wUtil.checkForAndFixHourlyTimeSeriesHoles(observations);
List<WeatherObservation> temperature = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.TEMPERATURE_MEAN))
.collect(Collectors.toList());
List<WeatherObservation> rainfall = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.PRECIPITATION))
.collect(Collectors.toList());
List<WeatherObservation> rh = observations.stream().filter(t -> t.getElementMeasurementTypeId().equals(WeatherElements.RELATIVE_HUMIDITY_MEAN))
.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());
}
config.setModelId(this.getModelId());
config.setConfigParameter("timeZone", weatherStation.getTimeZone());
config.setConfigParameter("temperature", temperature);
config.setConfigParameter("rainfall", rainfall);
config.setConfigParameter("rh", rh);
config.setConfigParameter("windspeed", windSpeedAll);
config.setConfigParameter("precedingCrop", configuration.getForecastModelConfigurationValue(PREVIOUS_CROP));
config.setConfigParameter("tillageMethod", configuration.getForecastModelConfigurationValue(TILLAGE));
config.setConfigParameter("diseaseSusceptibility", configuration.getForecastModelConfigurationValue(SUSCEPTIBILITY));
config.setConfigParameter("model", configuration.getForecastModelConfigurationValue(MODEL));
} catch (WeatherDataSourceException | WeatherObservationListException | ParseException ex ) {
throw new PreprocessorException(ex.getMessage());
}
return config;
}
@Override
public String getModelId() {
return "FINNCEREAL";
}
}
{
"_licensenbte": [
"Copyright (c) 2014 NIBIO <http://www.nibio.nb/>. ",
"",
"This file is part of VIPSLogic. ",
"VIPSLogic is free software: you can redistribute it and/or modify ",
"it under the terms of the NIBIO Open Source License as published by ",
"NIBIO, either version 1 of the License, or (at your option) any ",
"later version. ",
"",
"VIPSLogic is distributed in the hope that it will be useful, ",
"but WITHOUT ANY WARRANTY; without even the implied warranty of ",
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ",
"NIBIO Open Source License for more details. ",
"",
"You should have received a copy of the NIBIO Open Source License ",
"along with VIPSLogic. If nbt, see <http://www.nibio.nb/licenses/>. "
],
"_comment" : "Sowing date, previous crop, tillage method, and current crop disease susceptibility for the specific field",
"fields": [
{
"name" : "modelName",
"dataType" : "STRING",
"fieldType" : "SELECT_SINGLE",
"required" : true,
"options": [
{"value":"PyrenophoraTeres", "label":{"en":"Net Blotch","nb":"?","fi":"Verkkolaikku"}, "selected":"true"},
{"value":"DrechsleraTriticiRepentis", "label":{"en":"Tan Spot","nb":"","fi":"Ruskolaikku"}},
{"value":"StagonosporaNodorum", "label":{"en" : "Stagonspora spot", "nb":"?", "fi":"Pistelaikku"}}
]
},
{
"name" : "fieldSowingDate",
"dataType" : "DATE",
"dateFormat" : "yyyy-MM-dd",
"required" : true
},
{
"name" : "previousCrop",
"dataType" : "STRING",
"fieldType" : "SELECT_SINGLE",
"required" : true,
"options": [
{"value":"Wheat", "label":{"en":"Wheat","nb":"Hvete","fi":"Vehn"}, "selected":"true"},
{"value":"Barley", "label":{"en":"Barley","nb":"Barley","fi":"Kaura"}},
{"value":"Oats", "label":{"en" : "Oats", "nb":"?", "fi":"Ohra"}},
{"value":"Grass", "label":{"en" : "Grass", "nb":"?","fi":"Hein"}},
{"value":"Rapeseed", "label":{"en" : "Turnip rape", "nb":"?","fi":"Rypsi"}},
{"value":"SugarBeet", "label":{"en" : "Sugar beet", "nb":"?","fi":"Sokerijuurikas"}},
{"value":"Legumes", "label":{"en" : "Legumes", "nb":"?","fi":"Herneet"}}
]
},
{
"name" : "tillageMethod",
"dataType" : "STRING",
"fieldType" : "SELECT_SINGLE",
"required" : true,
"options": [
{"value":"Intensive", "label":{"en":"Ploughing","nb":"?","fi":"Kynt"}, "selected":"true"},
{"value":"Reduced", "label":{"en":"Reduced tillage","nb":"?","fi":"Kevytmuokkaus"}},
{"value":"nbne", "label":{"en" : "Direct seeding", "nb":"?","fi":"Suorakylv"}}
]
},
{
"name" : "cropSusceptibility",
"dataType" : "STRING",
"fieldType" : "SELECT_SINGLE",
"required" : true,
"options": [
{"value":"nbrmal", "label":{"en":"nbrmal","nb":"?", "fi":"normaali"}, "selected":"true"},
{"value":"Resistant", "label":{"en":"Resistant","nb":"?","fi":"Resistentti"}},
{"value":"Sensitive", "label":{"en" : "Susceptible", "nb":"?", "fi":"Haavoittuva"}}
]
}
]
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment