Example #1
0
    def get_one_field_info(self, v_name, v_level, v_extra, v_thresh, d_type):
        """! Builds the FCST_FIELD or OBS_FIELD items that are sent to the mode config file
              Overrides get_one_field_info in compare_gridded_wrappers.py
              Args:
                @param v_name var_info name
                @param v_level var_info level
                @param v_extra var_info extra arguments
                @param v_thresh probability threshold
                @param d_type type of data (FCST or OBS)
                @return returns a string with field info
        """
        level_type, level = util.split_level(v_level)
        field = ""

        if self.c_dict[d_type + '_IS_PROB']:
            thresh_str = ""
            comparison = util.get_comparison_from_threshold(v_thresh)
            number = util.get_number_from_threshold(v_thresh)
            if comparison in ["gt", "ge", ">", ">="]:
                thresh_str += "thresh_lo=" + str(number) + ";"
            elif comparison in ["lt", "le", "<", "<="]:
                thresh_str += "thresh_hi=" + str(number) + ";"

            if self.c_dict[d_type+'_INPUT_DATATYPE'] == "NETCDF" or \
               self.c_dict[d_type+'_INPUT_DATATYPE'] == "GEMPAK":
                field = "{ name=\"" + v_name + "\"; level=\"" + \
                        level+"\"; prob=TRUE; "
            else:
                field = "{ name=\"PROB\"; level=\""+level_type + \
                          level.zfill(2) + "\"; prob={ name=\"" + \
                          v_name + "\"; " + thresh_str + "} "
        else:
            if self.config.getbool('config', d_type + '_PCP_COMBINE_RUN',
                                   False):
                field = "{ name=\""+v_name+"_"+level + \
                             "\"; level=\"(*,*)\"; "
            else:
                field = "{ name=\""+v_name + \
                             "\"; level=\""+v_level+"\"; "

        field += v_extra + " }"
        return field
Example #2
0
    def get_one_field_info(self, v_level, v_thresh, v_name, v_extra, d_type):
        """! Format field information into format expected by MET config file
              Args:
                @param v_level level of data to extract
                @param v_thresh threshold value to use in comparison
                @param v_name name of field to process
                @param v_extra additional field information to add if available
                @param d_type type of data to find (FCST or OBS)
                @rtype string
                @return Returns formatted field information
        """
        # separate character from beginning of numeric level value if applicable
        level_type, level = util.split_level(v_level)

        # list to hold field information
        fields = []

        # get cat thresholds if available
        cat_thresh = ""
        threshs = []
        if len(v_thresh) != 0:
            threshs = v_thresh
            cat_thresh = "cat_thresh=[ " + ','.join(threshs) + " ];"

        # if either input is probabilistic, create separate item for each threshold
        if self.c_dict['FCST_IS_PROB'] or self.c_dict['OBS_IS_PROB']:
            # if input being processed if probabilistic, format accordingly
            if self.c_dict[d_type + '_IS_PROB']:
                for thresh in threshs:
                    thresh_str = ""
                    comparison = util.get_comparison_from_threshold(thresh)
                    number = util.get_number_from_threshold(thresh)
                    if comparison in ["gt", "ge", ">", ">=", "==", "eq"]:
                        thresh_str += "thresh_lo=" + str(number) + "; "
                    if comparison in ["lt", "le", "<", "<=", "==", "eq"]:
                        thresh_str += "thresh_hi=" + str(number) + "; "

                    prob_cat_thresh = self.c_dict[d_type + '_PROB_THRESH']
                    if self.c_dict[d_type + '_INPUT_DATATYPE'] == 'NETCDF':
                        field = "{ name=\"" + v_name + "\"; level=\"" + \
                                level + "\"; prob=TRUE; cat_thresh=[" + prob_cat_thresh + "];}"
                    else:
                        field = "{ name=\"PROB\"; level=\"" + level_type + \
                                level + "\"; prob={ name=\"" + \
                                v_name + \
                                "\"; " + thresh_str + "} cat_thresh=[" + prob_cat_thresh + "];"
                    field += v_extra + "}"
                    fields.append(field)
            else:
                # if input being processed is not probabilistic but the other input is
                for thresh in threshs:
                    # if pcp_combine was run, use name_level, (*,*) format
                    # if not, use user defined name/level combination
                    if self.config.getbool('config',
                                           d_type + '_PCP_COMBINE_RUN', False):
                        field = "{ name=\"" + v_name + "_" + level + \
                                "\"; level=\"(*,*)\"; cat_thresh=[ " + \
                                str(thresh) + " ]; }"
                    else:
                        field = "{ name=\"" + v_name + \
                                "\"; level=\"" + v_level + "\"; cat_thresh=[ " + \
                                str(thresh) + " ]; }"
                    fields.append(field)
        else:
            # if neither input is probabilistic, add all cat thresholds to same field info item
            # if pcp_combine was run, use name_level, (*,*) format
            # if not, use user defined name/level combination
            if self.config.getbool('config', d_type + '_PCP_COMBINE_RUN',
                                   False):
                field = "{ name=\"" + v_name + "_" + level + \
                        "\"; level=\"(*,*)\"; "
            else:
                field = "{ name=\"" + v_name + \
                        "\"; level=\"" + v_level + "\"; "

            field += cat_thresh + " " + v_extra + " }"
            fields.append(field)

        # combine all fields into a comma separated string and return
        field_list = ','.join(fields)
        return field_list
Example #3
0
def test_get_number_from_threshold_eq_ends_with_decimal():
    assert (util.get_number_from_threshold("eq5.") == 5)
Example #4
0
def test_get_number_from_threshold_complex():
    assert (util.get_number_from_threshold("<=2.3||>=4.2") == 2.3)
Example #5
0
def test_get_number_from_threshold_eq_positive():
    assert (util.get_number_from_threshold("eq+4.5") == 4.5)
Example #6
0
def test_get_number_from_threshold_eq_starts_with_decimal():
    assert (util.get_number_from_threshold("eq.5") == 0.5)
Example #7
0
def test_get_number_from_threshold_eq():
    assert (util.get_number_from_threshold("eq4.5") == 4.5)
Example #8
0
def test_get_number_from_threshold_eq_negative():
    assert (util.get_number_from_threshold("eq-4.5") == -4.5)
Example #9
0
def test_get_number_from_threshold_le():
    assert (util.get_number_from_threshold("le4.5") == 4.5)
Example #10
0
def test_get_number_from_threshold_ne():
    assert (util.get_number_from_threshold("ne10.5") == 10.5)
Example #11
0
def test_get_number_from_threshold_gt():
    assert (util.get_number_from_threshold("gt4.5") == 4.5)
Example #12
0
def test_get_number_from_threshold_eq_symbol():
    assert (util.get_number_from_threshold("==4.5") == 4.5)
Example #13
0
def test_get_number_from_threshold_ge_symbol():
    assert (util.get_number_from_threshold(">=4.0") == 4.0)
Example #14
0
def test_get_number_from_threshold_gt_symbol():
    assert (util.get_number_from_threshold(">4.545") == 4.545)
Example #15
0
def test_get_number_from_threshold_gt_int():
    assert (util.get_number_from_threshold("gt4") == 4)