Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MiddleBedHeightCalculation.java @ 3061:49baebb39305
FixA: Add interpolation of parameters that better suits the instantiation real functions.
flys-artifacts/trunk@4641 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 12 Jun 2012 08:11:36 +0000 |
parents | 250a370c377d |
children | b888c5eb65b3 |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import de.intevation.artifacts.common.utils.DateUtils; import de.intevation.flys.model.BedHeightEpoch; import de.intevation.flys.model.BedHeightEpochValue; import de.intevation.flys.model.BedHeightSingle; import de.intevation.flys.model.BedHeightSingleValue; import de.intevation.flys.model.TimeInterval; import de.intevation.flys.artifacts.MINFOArtifact; import de.intevation.flys.artifacts.model.MiddleBedHeightData; public class MiddleBedHeightCalculation extends Calculation { private static final Logger logger = Logger.getLogger(MiddleBedHeightCalculation.class); public CalculationResult calculate(MINFOArtifact artifact) { logger.info("MiddleBedHeightCalculation.calculate"); int[] singleIds = artifact.getBedHeightSingleIDs(); int[] epochIds = artifact.getBedHeightEpochIDs(); if (logger.isDebugEnabled()) { logger.debug("Artifact '" + artifact.identifier() + "' contains:"); if (singleIds != null) { logger.debug(" " + singleIds.length + " single bedheight ids"); } if (epochIds != null) { logger.debug(" " + epochIds.length + " epoch bedheight ids"); } } List<BedHeightSingle> singles = getSingles(artifact, singleIds); List<BedHeightEpoch> epochs = getEpochs(artifact, epochIds); return buildCalculationResult(artifact, singles, epochs); } protected List<BedHeightSingle> getSingles(MINFOArtifact minfo, int[] ids) { List<BedHeightSingle> singles = new ArrayList<BedHeightSingle>(); for (int id: ids) { BedHeightSingle s = BedHeightSingle.getBedHeightSingleById(id); if (s != null) { singles.add(s); } else { logger.warn("Cannot find Sngle by id: " + id); // TODO ADD WARNING } } return singles; } protected List<BedHeightEpoch> getEpochs(MINFOArtifact minfo, int[] ids) { List<BedHeightEpoch> epochs = new ArrayList<BedHeightEpoch>(); for (int id: ids) { BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(id); if (e != null) { epochs.add(e); } else { logger.warn("Cannot find Epoch by id: " + id); // TODO ADD WARNING } } return epochs; } protected CalculationResult buildCalculationResult( MINFOArtifact artifact, List<BedHeightSingle> singles, List<BedHeightEpoch> epochs ) { logger.info("MiddleBedHeightCalculation.buildCalculationResult"); int size = singles.size() + epochs.size(); double kmLo = artifact.getDataAsDouble("ld_from"); double kmHi = artifact.getDataAsDouble("ld_to"); List<MiddleBedHeightData> data = new ArrayList<MiddleBedHeightData>(); for (BedHeightSingle single: singles) { MiddleBedHeightData d = prepareSingleData(single, kmLo, kmHi); if (d != null) { data.add(d); } } for (BedHeightEpoch epoch: epochs) { MiddleBedHeightData d = prepareEpochData(epoch, kmLo, kmHi); if (d != null) { data.add(d); } } logger.debug("Calculation results in " + data.size() + " data objects."); return new CalculationResult((MiddleBedHeightData[]) data.toArray(new MiddleBedHeightData[data.size()]), this); } protected MiddleBedHeightData prepareSingleData( BedHeightSingle single, double kmLo, double kmHi ) { logger.debug("Prepare data for single: " + single.getDescription()); List<BedHeightSingleValue> values = BedHeightSingleValue.getBedHeightSingleValues(single, kmLo, kmHi); MiddleBedHeightData data = new MiddleBedHeightData( single.getYear(), single.getYear(), single.getEvaluationBy(), single.getDescription()); for (BedHeightSingleValue value: values) { data.addKM(value.getStation().doubleValue()); data.addMiddleHeight(value.getHeight().doubleValue()); data.addUncertainty(value.getUncertainty().doubleValue()); data.addSoundingWidth(value.getSoundingWidth().doubleValue()); data.addDataGap(value.getDataGap().doubleValue()); data.addWidth(value.getWidth().doubleValue()); } logger.debug("Single contains " + values.size() + " values"); return data; } protected MiddleBedHeightData prepareEpochData( BedHeightEpoch epoch, double kmLo, double kmHi ) { logger.debug("Prepare data for epoch: " + epoch.getDescription()); TimeInterval ti = epoch.getTimeInterval(); List<BedHeightEpochValue> values = BedHeightEpochValue.getBedHeightEpochValues(epoch, kmLo, kmHi); MiddleBedHeightData data = new MiddleBedHeightData( DateUtils.getYearFromDate(ti.getStartTime()), DateUtils.getYearFromDate(ti.getStopTime()), epoch.getEvaluationBy(), epoch.getDescription() ); for (BedHeightEpochValue value: values) { data.addKM(value.getStation().doubleValue()); data.addMiddleHeight(value.getHeight().doubleValue()); } logger.debug("Epoch contains " + values.size() + " values"); return data; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :