view artifacts/src/main/java/org/dive4elements/river/artifacts/model/FacetTypes.java @ 6152:0587819960c3

Waterlevel differences & bed height differences: Add new model LinearInterpolated intented to unify the two very similiar calculations. The focus of the current implementation is correctness and not speed! The fact that the data sets more mostly sorted by station is not exploited. Doing so would improve performance significantly.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 02 Jun 2013 17:52:53 +0200
parents af13ceeba52a
children 68071f205c0e
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.artifacts.model;

/** 'Types' of facets. */
public interface FacetTypes {

    /** Static helper class to determine if a Facet name is of a generalized
     * 'type'. */
    public static class IS {
        public static boolean WQ_KM(String type) {
           return type.equals(DISCHARGE_LONGITUDINAL_W)
               || type.equals(LONGITUDINAL_W);
        }
        public static boolean W_KM(String type) {
            return type.equals(STATIC_WKMS)
               || type.equals(HEIGHTMARKS_POINTS)
               || WQ_KM(type);
        }
        public static boolean AREA(String type) {
            return type.equals(AREA)
                || type.equals(CROSS_SECTION_AREA)
                || type.equals(LONGITUDINAL_SECTION_AREA);
        }
        public static boolean W(String type) {
            return type.equals(LONGITUDINAL_W)
                || type.equals(DISCHARGE_LONGITUDINAL_W)
                || type.equals(DURATION_W)
                || type.equals(STATIC_WKMS)
                || type.equals(STATIC_WQKMS_W);
        }
        public static boolean Q(String type) {
            return type.equals(LONGITUDINAL_Q)
                || type.equals(DISCHARGE_LONGITUDINAL_Q)
                || type.equals(DURATION_Q)
                || type.equals(STATIC_WQKMS_Q);
        }
        public static boolean V(String type) {
            return type.equals(FLOW_VELOCITY_MAINCHANNEL)
                || type.equals(FLOW_VELOCITY_TOTALCHANNEL);
        }
        public static boolean T(String type) {
            return type.equals(FLOW_VELOCITY_TAU);
        }
        public static boolean H(String type) {
            return type.equals(MIDDLE_BED_HEIGHT_SINGLE)
                || type.equals(MIDDLE_BED_HEIGHT_EPOCH);
        }
        public static boolean MANUALPOINTS(String type) {
            return type.endsWith("manualpoints");
        }
        public static boolean MANUALLINE(String type) {
            return type.endsWith("manualline");
        }
        public static boolean SQ_CURVE(String type) {
            if (type.equals(SQ_A_CURVE)
                || type.equals(SQ_B_CURVE)
                || type.equals(SQ_C_CURVE)
                || type.equals(SQ_D_CURVE)
                || type.equals(SQ_E_CURVE)
                || type.equals(SQ_F_CURVE)
                || type.equals(SQ_A_OUTLIER_CURVE)
                || type.equals(SQ_B_OUTLIER_CURVE)
                || type.equals(SQ_C_OUTLIER_CURVE)
                || type.equals(SQ_D_OUTLIER_CURVE)
                || type.equals(SQ_E_OUTLIER_CURVE)
                || type.equals(SQ_F_OUTLIER_CURVE)
                )
            {
                return true;
            }

            return false;
        }
        public static boolean SQ_MEASUREMENT(String type) {
            if (type.equals(SQ_A_MEASUREMENT)
                || type.equals(SQ_B_MEASUREMENT)
                || type.equals(SQ_C_MEASUREMENT)
                || type.equals(SQ_D_MEASUREMENT)
                || type.equals(SQ_E_MEASUREMENT)
                || type.equals(SQ_F_MEASUREMENT)
                || type.equals(SQ_A_OUTLIER_MEASUREMENT)
                || type.equals(SQ_B_OUTLIER_MEASUREMENT)
                || type.equals(SQ_C_OUTLIER_MEASUREMENT)
                || type.equals(SQ_D_OUTLIER_MEASUREMENT)
                || type.equals(SQ_E_OUTLIER_MEASUREMENT)
                || type.equals(SQ_F_OUTLIER_MEASUREMENT)
                )
            {
                return true;
            }

            return false;
        }
        public static boolean SQ_OUTLIER(String type) {
            if (type.equals(SQ_A_OUTLIER)
                || type.equals(SQ_B_OUTLIER)
                || type.equals(SQ_C_OUTLIER)
                || type.equals(SQ_D_OUTLIER)
                || type.equals(SQ_E_OUTLIER)
                || type.equals(SQ_F_OUTLIER))
            {
                return true;
            }

            return false;
        }
        public static boolean SEDIMENT_LOAD(String type) {
            return type.startsWith("sedimentload");
        }
        public static boolean SEDIMENT_LOAD_NO_FLOAT(String type) {
            return type.startsWith("sedimentload") && !type.contains("susp");
        }
    };

    /** Available diagram/chart-types.  This enum is evaluated at certain
     * places to iterate over chart-types to e.g. dynamically generate
     * Facet-names (ManualPoints for example). */
    public enum ChartType {
        FD("fix_derivate_curve"),
        LS("longitudinal_section"),
        CS("cross_section"),
        DLS("discharge_longitudinal_section"),
        CDC("computed_discharge_curve"),
        DUC("duration_curve"),
        DIC("discharge_curve"),
        RC("reference_curve"),
        RCN("reference_curve_normalized"),
        WD("wdifferences"),
        FWQC("fix_wq_curve"),
        FDWC("fix_deltawt_curve"),
        FLSC("fix_longitudinal_section_curve"),
        FDC("fix_derivate_curve"),
        EWQ("extreme_wq_curve"),
        BHM("bedheight_middle"),
        BLS("bed_longitudinal_section"),
        SLS("sedimentload_ls"),
        FV("flow_velocity"),
        SQA("sq_relation_a"),
        SQB("sq_relation_b"),
        W_D("w_differences"),
        SQC("sq_relation_c"),
        SQD("sq_relation_d"),
        SQE("sq_relation_e"),
        SQF("sq_relation_f"),
        HD("historical_discharge"),
        HDWQ("historical_discharge_wq");

        private String chartTypeString;

        ChartType(String description) {
            this.chartTypeString = description;
        }

        @Override
        public String toString() {
            return chartTypeString;
        }
    }

    String AREA                        = "area";
    String CROSS_SECTION_AREA          = "cross_section.area";
    String LONGITUDINAL_SECTION_AREA   = "longitudinal_section.area";

    String FLOODMAP_WSPLGEN            = "floodmap.wsplgen";
    String FLOODMAP_BARRIERS           = "floodmap.barriers";
    String FLOODMAP_USERSHAPE          = "floodmap.usershape";
    String FLOODMAP_RIVERAXIS          = "floodmap.riveraxis";
    @Deprecated
    String FLOODMAP_WMSBACKGROUND      = "floodmap.wmsbackground";
    String FLOODMAP_KMS                = "floodmap.kms";
    String FLOODMAP_QPS                = "floodmap.qps";
    String FLOODMAP_HWS_LINES          = "floodmap.hws_lines";
    String FLOODMAP_HWS_POINTS         = "floodmap.hws_points";
    String FLOODMAP_HYDR_BOUNDARY      = "floodmap.hydr_boundaries";
    String FLOODMAP_HYDR_BOUNDARY_POLY = "floodmap.hydr_boundaries_poly";
    String FLOODMAP_CATCHMENT          = "floodmap.catchment";
    String FLOODMAP_FLOODPLAIN         = "floodmap.floodplain";
    String FLOODMAP_LINES              = "floodmap.lines";
    String FLOODMAP_BUILDINGS          = "floodmap.buildings";
    String FLOODMAP_FIXPOINTS          = "floodmap.fixpoints";
    String FLOODMAP_FLOODMARKS         = "floodmap.floodmarks";
    String FLOODMAP_FLOODMAPS          = "floodmap.floodmaps";
    String FLOODMAP_GAUGE_LOCATION     = "floodmap.gauge_location";
    String FLOODMAP_EXTERNAL_WMS       = "floodmap.externalwms";
    String FLOODMAP_JETTIES            = "floodmap.jetties";

    String DISCHARGE_LONGITUDINAL_W = "discharge_longitudinal_section.w";
    String DISCHARGE_LONGITUDINAL_Q = "discharge_longitudinal_section.q";
    String DISCHARGE_LONGITUDINAL_Q_INFOLD = "discharge_longitudinal_section.q.infolding";
    String DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT = "discharge_longitudinal_section.q.cutting";
    String DISCHARGE_LONGITUDINAL_C = "discharge_longitudinal_section.c";

    String LONGITUDINAL_W = "longitudinal_section.w";
    String LONGITUDINAL_Q = "longitudinal_section.q";
    String LONGITUDINAL_ANNOTATION   = "longitudinal_section.annotations";
    String LONGITUDINAL_MANUALPOINTS = "longitudinal_section.manualpoints";

    String W_DIFFERENCES = "w_differences";

    String COMPUTED_DISCHARGE_Q = "computed_discharge_curve.q";
    String COMPUTED_DISCHARGE_MAINVALUES_Q = "computed_discharge_curve.mainvalues.q";
    String COMPUTED_DISCHARGE_MAINVALUES_W = "computed_discharge_curve.mainvalues.w";

    String MAINVALUES_Q = "mainvalues.q";
    String MAINVALUES_W = "mainvalues.w";

    String CROSS_SECTION = "cross_section";
    String CROSS_SECTION_WATER_LINE = "cross_section_water_line";

    String HYK = "hyk";

    String DISCHARGE_CURVE = "discharge_curve.curve";
    String GAUGE_DISCHARGE_CURVE = "gauge_discharge_curve";
    String GAUGE_DISCHARGE_CURVE_AT_EXPORT = "gauge_discharge_curve_at_export";

    String DURATION_W = "duration_curve.w";
    String DURATION_Q = "duration_curve.q";
    String DURATION_MAINVALUES_Q = "duration_curve.mainvalues.q";

    String MANUALPOINTS = "manualpoints";
    String MANUALLINE = "manualline";

    String QSECTOR        = "qsectors";

    String STATIC_WQ      = "other.wq";
    String STATIC_WQ_ANNOTATIONS = "other.wq.annotations";
    String STATIC_WKMS    = "other.wkms";
    String STATIC_WKMS_MARKS = "other.wkms.marks";
    String STATIC_WQKMS   = "other.wqkms";
    String STATIC_WQKMS_W = "other.wqkms.w";
    String STATIC_WQKMS_Q = "other.wqkms.q";
    String STATIC_WKMS_INTERPOL = "other.wkms.interpol";

    String HEIGHTMARKS_POINTS = "heightmarks_points";

    String CSV = "csv";
    String WST = "wst";
    String AT  = "at";
    String PDF = "pdf";

    String REPORT = "report";

    String HISTORICAL_DISCHARGE_Q      = "historical_discharge.historicalq";
    String HISTORICAL_DISCHARGE_Q_DIFF = "historical_discharge.historicalq.diff";
    String HISTORICAL_DISCHARGE_W      = "historical_discharge.historicalw";
    String HISTORICAL_DISCHARGE_W_DIFF = "historical_discharge.historicalw.diff";
    String HISTORICAL_DISCHARGE_WQ_Q   = "historical_discharge.wq.q";
    String HISTORICAL_DISCHARGE_WQ_W   = "historical_discharge.wq.w";
    String HISTORICAL_DISCHARGE_WQ_CURVE = "historical_discharge.wq.curve";
    String HISTORICAL_DISCHARGE_MAINVALUES_Q = "historical_discharge.mainvalues.q";
    String HISTORICAL_DISCHARGE_MAINVALUES_W = "historical_discharge.mainvalues.w";

    String REFERENCE_CURVE = "reference_curve";
    String REFERENCE_CURVE_NORMALIZED = "reference_curve_normalized";

    String FLOW_VELOCITY_MAINCHANNEL           = "flow_velocity.mainchannel";
    String FLOW_VELOCITY_TOTALCHANNEL          = "flow_velocity.totalchannel";
    String FLOW_VELOCITY_TAU                   = "flow_velocity.tau";
    String FLOW_VELOCITY_MAINCHANNEL_FILTERED  = "flow_velocity.mainchannel.filtered";
    String FLOW_VELOCITY_TOTALCHANNEL_FILTERED = "flow_velocity.totalchannel.filtered";
    String FLOW_VELOCITY_TAU_FILTERED          = "flow_velocity.tau.filtered";
    String FLOW_VELOCITY_ANNOTATION            = "flow_velocity.annotation";
    String FLOW_VELOCITY_MEASUREMENT           = "flow_velocity.measurement";
    String FLOW_VELOCITY_DISCHARGE             = "flow_velocity.discharge";

    String MIDDLE_BED_HEIGHT_SINGLE     = "bedheight_middle.single";
    String MIDDLE_BED_HEIGHT_EPOCH      = "bedheight_middle.epoch";
    String MIDDLE_BED_HEIGHT_ANNOTATION = "bedheight_middle.annotation";

    String BED_QUALITY_POROSITY_TOPLAYER         = "bed_longitudinal_section.porosity_toplayer";
    String BED_QUALITY_POROSITY_SUBLAYER         = "bed_longitudinal_section.porosity_sublayer";
    String BED_QUALITY_BED_DIAMETER_TOPLAYER     = "bed_longitudinal_section.bed_diameter_toplayer";
    String BED_QUALITY_BED_DIAMETER_SUBLAYER     = "bed_longitudinal_section.bed_diameter_sublayer";
    String BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER = "bed_longitudinal_section.sediment_density_toplayer";
    String BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER = "bed_longitudinal_section.sediment_density_sublayer";
    String BED_QUALITY_BEDLOAD_DIAMETER          = "bed_longitudinal_section.bedload_diameter";

    String BED_DIFFERENCE_YEAR          = "bedheight_difference.year";
    String BED_DIFFERENCE_YEAR_FILTERED = "bedheight_difference.year.filtered";
    String BED_DIFFERENCE_HEIGHT_YEAR   = "bedheight_difference.height_year";
    String BED_DIFFERENCE_HEIGHT_YEAR_FILTERED   = "bedheight_difference.height_year.filtered";
    String BED_DIFFERENCE_EPOCH         = "bedheight_difference.epoch";
    String BED_DIFFERENCE_EPOCH_FILTERED = "bedheight_difference.epoch.filtered";
    String BED_DIFFERENCE_MORPH_WIDTH   = "bedheight_difference.morph_width";
    String BED_DIFFERENCE_YEAR_HEIGHT1  = "bedheight_difference.year.height1";
    String BED_DIFFERENCE_YEAR_HEIGHT2  = "bedheight_difference.year.height2";
    String BED_DIFFERENCE_YEAR_HEIGHT1_FILTERED = "bedheight_difference.year.height1.filtered";
    String BED_DIFFERENCE_YEAR_HEIGHT2_FILTERED = "bedheight_difference.year.height2.filtered";
    String BED_DIFFERENCE_EPOCH_HEIGHT1 = "bedheight_difference.epoch.height1";
    String BED_DIFFERENCE_EPOCH_HEIGHT2 = "bedheight_difference.epoch.height2";
    String BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED = "bedheight_difference.epoch.height1.filtered";
    String BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED = "bedheight_difference.epoch.height2.filtered";
    String MORPHOLOGIC_WIDTH = "morph-width";

    String SEDIMENT_LOAD_COARSE        = "sedimentload.coarse";
    String SEDIMENT_LOAD_SAND          = "sedimentload.sand";
    String SEDIMENT_LOAD_FINEMIDDLE    = "sedimentload.finemiddle";
    String SEDIMENT_LOAD_SUSP_SAND     = "sedimentload.susp_sand";
    String SEDIMENT_LOAD_SUSP_SAND_BED = "sedimentload.susp_sand_bed";
    String SEDIMENT_LOAD_SUSP_SEDIMENT = "sedimentload.susp_sediment";
    String SEDIMENT_LOAD_TOTAL         = "sedimentload.total";
    String SEDIMENT_LOAD_TOTAL_LOAD    = "sedimentload.total_load";

    String SQ_OVERVIEW       = "sq_overview";

    String SQ_A_CURVE       = "sq_a_curve";
    String SQ_A_MEASUREMENT = "sq_a_measurement";
    String SQ_A_OUTLIER     = "sq_a_outlier";
    String SQ_A_OUTLIER_CURVE = "sq_a_outlier_curve";
    String SQ_A_OUTLIER_MEASUREMENT = "sq_a_outlier_measurement";

    String SQ_B_CURVE       = "sq_b_curve";
    String SQ_B_MEASUREMENT = "sq_b_measurement";
    String SQ_B_OUTLIER     = "sq_b_outlier";
    String SQ_B_OUTLIER_CURVE  = "sq_b_outlier_curve";
    String SQ_B_OUTLIER_MEASUREMENT  = "sq_b_outlier_measurement";

    String SQ_C_CURVE       = "sq_c_curve";
    String SQ_C_MEASUREMENT = "sq_c_measurement";
    String SQ_C_OUTLIER     = "sq_c_outlier";
    String SQ_C_OUTLIER_CURVE = "sq_c_outlier_curve";
    String SQ_C_OUTLIER_MEASUREMENT = "sq_c_outlier_measurement";

    String SQ_D_CURVE       = "sq_d_curve";
    String SQ_D_MEASUREMENT = "sq_d_measurement";
    String SQ_D_OUTLIER     = "sq_d_outlier";
    String SQ_D_OUTLIER_CURVE = "sq_d_outlier_curve";
    String SQ_D_OUTLIER_MEASUREMENT = "sq_d_outlier_measurement";

    String SQ_E_CURVE       = "sq_e_curve";
    String SQ_E_MEASUREMENT = "sq_e_measurement";
    String SQ_E_OUTLIER     = "sq_e_outlier";
    String SQ_E_OUTLIER_CURVE = "sq_e_outlier_curve";
    String SQ_E_OUTLIER_MEASUREMENT = "sq_e_outlier_curve_measurement";

    String SQ_F_CURVE       = "sq_f_curve";
    String SQ_F_MEASUREMENT = "sq_f_measurement";
    String SQ_F_OUTLIER     = "sq_f_outlier";
    String SQ_F_OUTLIER_CURVE = "sq_f_outlier_curve";
    String SQ_F_OUTLIER_MEASUREMENT = "sq_f_outlier_measurement";

    String RELATIVE_POINT = "relativepoint";

    String FIX_ANALYSIS_EVENTS_DWT = "fix_analysis_events_dwt";
    String FIX_ANALYSIS_EVENTS_LS = "fix_analysis_events_ls";
    String FIX_ANALYSIS_EVENTS_WQ = "fix_analysis_events_wq";

    String FIX_EVENTS = "fix_events_wqkms";

    String FIX_REFERENCE_EVENTS_DWT = "fix_reference_events_dwt";
    String FIX_REFERENCE_EVENTS_LS = "fix_reference_events_ls";
    String FIX_REFERENCE_EVENTS_WQ = "fix_reference_events_wq";
    String FIX_REFERENCE_PERIOD_DWT = "fix_reference_period_dwt";

    // Note that AVERAGE_DWT will get a postfix (e.g. ..._dwt_1)
    String FIX_SECTOR_AVERAGE_DWT = "fix_sector_average_dwt";
    String FIX_SECTOR_AVERAGE_LS = "fix_sector_average_ls";
    String FIX_SECTOR_AVERAGE_WQ = "fix_sector_average_wq";
    String FIX_SECTOR_AVERAGE_LS_DEVIATION = "fix_sector_average_ls_deviation";

    String FIX_WQ_CURVE = "fix_wq_curve";
    String FIX_OUTLIER = "fix_outlier";

    String FIX_ANALYSIS_PERIODS_DWT = "fix_analysis_periods_dwt";
    String FIX_ANALYSIS_PERIODS_LS = "fix_analysis_periods_ls";
    String FIX_ANALYSIS_PERIODS_WQ = "fix_analysis_periods_wq";

    String FIX_DERIVATE_CURVE = "fix_derivate_curve";

    String FIX_DEVIATION_DWT = "fix_deviation_dwt";
    String FIX_DEVIATION_LS = "fix_deviation_ls";

    String FIX_PARAMETERS = "fix_parameters";

    String STATIC_BEDHEIGHT = "static_bedheight";

    String EXTREME_WQ_CURVE = "extreme_wq_curve";

    String EXTREME_WQ_CURVE_BASE = "extreme_wq_curve_base";
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org