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
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
def test_get_number_from_threshold_eq_ends_with_decimal(): assert (util.get_number_from_threshold("eq5.") == 5)
def test_get_number_from_threshold_complex(): assert (util.get_number_from_threshold("<=2.3||>=4.2") == 2.3)
def test_get_number_from_threshold_eq_positive(): assert (util.get_number_from_threshold("eq+4.5") == 4.5)
def test_get_number_from_threshold_eq_starts_with_decimal(): assert (util.get_number_from_threshold("eq.5") == 0.5)
def test_get_number_from_threshold_eq(): assert (util.get_number_from_threshold("eq4.5") == 4.5)
def test_get_number_from_threshold_eq_negative(): assert (util.get_number_from_threshold("eq-4.5") == -4.5)
def test_get_number_from_threshold_le(): assert (util.get_number_from_threshold("le4.5") == 4.5)
def test_get_number_from_threshold_ne(): assert (util.get_number_from_threshold("ne10.5") == 10.5)
def test_get_number_from_threshold_gt(): assert (util.get_number_from_threshold("gt4.5") == 4.5)
def test_get_number_from_threshold_eq_symbol(): assert (util.get_number_from_threshold("==4.5") == 4.5)
def test_get_number_from_threshold_ge_symbol(): assert (util.get_number_from_threshold(">=4.0") == 4.0)
def test_get_number_from_threshold_gt_symbol(): assert (util.get_number_from_threshold(">4.545") == 4.545)
def test_get_number_from_threshold_gt_int(): assert (util.get_number_from_threshold("gt4") == 4)