Example #1
0
    def create_c_dict(self):
        c_dict = super(ModeWrapper, self).create_c_dict()

        c_dict['CONFIG_FILE'] = self.config.getstr('config', 'MODE_CONFIG')
        c_dict['OBS_INPUT_DIR'] = \
          self.config.getdir('OBS_MODE_INPUT_DIR')
        c_dict['OBS_INPUT_TEMPLATE'] = \
          self.config.getraw('filename_templates',
                             'OBS_MODE_INPUT_TEMPLATE')
        c_dict['OBS_INPUT_DATATYPE'] = \
          self.config.getstr('config', 'OBS_MODE_INPUT_DATATYPE', '')
        c_dict['FCST_INPUT_DIR'] = \
          self.config.getdir('FCST_MODE_INPUT_DIR')
        c_dict['FCST_INPUT_TEMPLATE'] = \
          self.config.getraw('filename_templates',
                             'FCST_MODE_INPUT_TEMPLATE')
        c_dict['FCST_INPUT_DATATYPE'] = \
          self.config.getstr('config', 'FCST_MODE_INPUT_DATATYPE', '')
        c_dict['OUTPUT_DIR'] = self.config.getdir('MODE_OUTPUT_DIR')
        c_dict['ONCE_PER_FIELD'] = True
        c_dict['QUILT'] = self.config.getbool('config', 'MODE_QUILT', False)
        fcst_conv_radius, obs_conv_radius = \
            self.handle_fcst_and_obs_field('MODE_CONV_RADIUS',
                                           'FCST_MODE_CONV_RADIUS',
                                           'OBS_MODE_CONV_RADIUS')
        c_dict['FCST_CONV_RADIUS'] = fcst_conv_radius
        c_dict['OBS_CONV_RADIUS'] = obs_conv_radius

        fcst_conv_thresh, obs_conv_thresh = self.handle_fcst_and_obs_field(
            'MODE_CONV_THRESH', 'FCST_MODE_CONV_THRESH',
            'OBS_MODE_CONV_THRESH')

        c_dict['FCST_CONV_THRESH'] = fcst_conv_thresh
        c_dict['OBS_CONV_THRESH'] = obs_conv_thresh

        fcst_merge_thresh, obs_merge_thresh = \
                self.handle_fcst_and_obs_field('MODE_MERGE_THRESH',
                                               'FCST_MODE_MERGE_THRESH',
                                               'OBS_MODE_MERGE_THRESH')
        c_dict['FCST_MERGE_THRESH'] = fcst_merge_thresh
        c_dict['OBS_MERGE_THRESH'] = obs_merge_thresh
        fcst_merge_flag, obs_merge_flag = \
                self.handle_fcst_and_obs_field('MODE_MERGE_FLAG',
                                               'FCST_MODE_MERGE_FLAG',
                                               'OBS_MODE_MERGE_FLAG')

        c_dict['FCST_MERGE_FLAG'] = fcst_merge_flag
        c_dict['OBS_MERGE_FLAG'] = obs_merge_flag
        c_dict['ALLOW_MULTIPLE_FILES'] = False

        c_dict['MERGE_CONFIG_FILE'] = self.config.getstr(
            'config', 'MODE_MERGE_CONFIG_FILE', '')

        # handle window variables [FCST/OBS]_[FILE_]_WINDOW_[BEGIN/END]
        self.handle_window_variables(c_dict, 'mode')

        c_dict['VERIFICATION_MASK_TEMPLATE'] = \
            self.config.getraw('filename_templates',
                               'MODE_VERIFICATION_MASK_TEMPLATE')
        c_dict['VERIFICATION_MASK'] = ''

        # check that values are valid
        error_message = 'items must start with a comparison operator '+\
                        '(>,>=,==,!=,<,<=,gt,ge,eq,ne,lt,le)'
        if not util.validate_thresholds(
                util.getlist(c_dict['FCST_CONV_THRESH'])):
            self.logger.error('MODE_FCST_CONV_THRESH {}'.format(error_message))
            exit(1)
        if not util.validate_thresholds(util.getlist(
                c_dict['OBS_CONV_THRESH'])):
            self.logger.error('MODE_OBS_CONV_THRESH {}'.format(error_message))
            exit(1)
        if not util.validate_thresholds(
                util.getlist(c_dict['FCST_MERGE_THRESH'])):
            self.logger.error(
                'MODE_FCST_MERGE_THRESH {}'.format(error_message))
            exit(1)
        if not util.validate_thresholds(
                util.getlist(c_dict['OBS_MERGE_THRESH'])):
            self.logger.error('MODE_OBS_MERGE_THRESH {}'.format(error_message))
            exit(1)

        return c_dict
Example #2
0
def test_threshold_lt_symbol():
    thresh_list = {"<2.3", "<1."}
    assert (util.validate_thresholds(thresh_list))
Example #3
0
    def create_c_dict(self):
        c_dict = super(ModeWrapper, self).create_c_dict()

        # set to prevent find_obs from getting multiple files within
        #  a time window. Does not refer to time series of files
        c_dict['ALLOW_MULTIPLE_FILES'] = False

        c_dict['OUTPUT_DIR'] = self.config.getdir('MTD_OUTPUT_DIR',
                                           self.config.getdir('OUTPUT_BASE'))
        c_dict['CONFIG_FILE'] = self.config.getstr('config', 'MTD_CONFIG', '')
        c_dict['MIN_VOLUME'] = self.config.getstr('config', 'MTD_MIN_VOLUME', '2000')
        c_dict['SINGLE_RUN'] = self.config.getbool('config', 'MTD_SINGLE_RUN', False)
        c_dict['SINGLE_DATA_SRC'] = self.config.getstr('config', 'MTD_SINGLE_DATA_SRC', 'FCST')

        # only read FCST conf if processing forecast data
        if not c_dict['SINGLE_RUN'] or c_dict['SINGLE_DATA_SRC'] == 'FCST':
            c_dict['FCST_IS_PROB'] = self.config.getbool('config', 'FCST_IS_PROB', False)
            c_dict['FCST_INPUT_DIR'] = \
              self.config.getdir('FCST_MTD_INPUT_DIR', c_dict['INPUT_BASE'])
            c_dict['FCST_INPUT_TEMPLATE'] = \
              self.config.getraw('filename_templates',
                                 'FCST_MTD_INPUT_TEMPLATE')
            c_dict['FCST_INPUT_DATATYPE'] = \
                self.config.getstr('config', 'FCST_MTD_INPUT_DATATYPE', '')

            if self.config.has_option('config', 'FCST_MTD_CONV_RADIUS'):
                c_dict['FCST_CONV_RADIUS'] = self.config.getstr('config', 'FCST_MTD_CONV_RADIUS')
            elif self.config.has_option('config', 'MTD_CONV_RADIUS'):
                c_dict['FCST_CONV_RADIUS'] = self.config.getstr('config', 'MTD_CONV_RADIUS')
            else:
                self.logger.error('[config] FCST_MTD_CONV_RADIUS not set in config')
                exit(1)

            if self.config.has_option('config', 'FCST_MTD_CONV_THRESH'):
                c_dict['FCST_CONV_THRESH'] = self.config.getstr('config', 'FCST_MTD_CONV_THRESH')
            elif self.config.has_option('config', 'MTD_CONV_THRESH'):
                c_dict['FCST_CONV_THRESH'] = self.config.getstr('config', 'MTD_CONV_THRESH')
            else:
                self.logger.error('[config] FCST_MTD_CONV_THRESH not set in config')
                exit(1)

            # check that values are valid
            if not util.validate_thresholds(util.getlist(c_dict['FCST_CONV_THRESH'])):
                self.logger.error('FCST_MTD_CONV_THRESH items must start with a comparison operator (>,>=,==,!=,<,<=,gt,ge,eq,ne,lt,le)')
                exit(1)

        # only read OBS conf if processing observation data
        if not c_dict['SINGLE_RUN'] or c_dict['SINGLE_DATA_SRC'] == 'OBS':
            c_dict['OBS_IS_PROB'] = self.config.getbool('config', 'OBS_IS_PROB', False)
            c_dict['OBS_INPUT_DIR'] = \
            self.config.getdir('OBS_MTD_INPUT_DIR', c_dict['INPUT_BASE'])
            c_dict['OBS_INPUT_TEMPLATE'] = \
              self.config.getraw('filename_templates',
                                   'OBS_MTD_INPUT_TEMPLATE')
            c_dict['OBS_INPUT_DATATYPE'] = \
                self.config.getstr('config', 'OBS_MTD_INPUT_DATATYPE', '')

            if self.config.has_option('config', 'OBS_MTD_CONV_RADIUS'):
                c_dict['OBS_CONV_RADIUS'] = self.config.getstr('config', 'OBS_MTD_CONV_RADIUS')
            elif self.config.has_option('config', 'MTD_CONV_RADIUS'):
                c_dict['OBS_CONV_RADIUS'] = self.config.getstr('config', 'MTD_CONV_RADIUS')
            else:
                self.logger.error('[config] OBS_MTD_CONV_RADIUS not set in config')
                exit(1)

            if self.config.has_option('config', 'OBS_MTD_CONV_THRESH'):
                c_dict['OBS_CONV_THRESH'] = self.config.getstr('config', 'OBS_MTD_CONV_THRESH')
            elif self.config.has_option('config', 'MTD_CONV_THRESH'):
                c_dict['OBS_CONV_THRESH'] = self.config.getstr('config', 'MTD_CONV_THRESH')
            else:
                self.logger.error('[config] OBS_MTD_CONV_THRESH not set in config')
                exit(1)

            # check that values are valid
            if not util.validate_thresholds(util.getlist(c_dict['OBS_CONV_THRESH'])):
                self.logger.error('OBS_MTD_CONV_THRESH items must start with a comparison operator (>,>=,==,!=,<,<=,gt,ge,eq,ne,lt,le)')
                exit(1)

        # handle window variables [FCST/OBS]_[FILE_]_WINDOW_[BEGIN/END]
        self.handle_window_variables(c_dict, 'mtd')

        return c_dict
Example #4
0
def test_threshold_eq_symbol():
    thresh_list = {"==2.3"}
    assert (util.validate_thresholds(thresh_list))
Example #5
0
def test_threshold_ne_symbol():
    thresh_list = {"!=.3"}
    assert (util.validate_thresholds(thresh_list))
Example #6
0
def test_threshold_le():
    thresh_list = {"le2.3", "le1.1"}
    assert (util.validate_thresholds(thresh_list))
Example #7
0
def test_threshold_ge_symbol():
    thresh_list = {">=2.3", ">=5.5"}
    assert (util.validate_thresholds(thresh_list))
Example #8
0
def test_threshold_eq():
    thresh_list = {"eq2.3"}
    assert (util.validate_thresholds(thresh_list))
Example #9
0
def test_threshold_ne():
    thresh_list = {"ne2.3"}
    assert (util.validate_thresholds(thresh_list))
Example #10
0
def test_threshold_complex_comparison():
    thresh_list = {"<=2.3||>=4.2", "gt2.3&&lt4.2"}
    assert (util.validate_thresholds(thresh_list))
Example #11
0
def test_threshold_ge():
    thresh_list = {"ge2.3", "ge5.5"}
    assert (util.validate_thresholds(thresh_list))
Example #12
0
def test_threshold_only_one_fails():
    thresh_list = {"<=2.3", "2.4", "gt2.7"}
    assert (util.validate_thresholds(thresh_list) == False)
Example #13
0
def test_threshold_just_number():
    thresh_list = {"2.3"}
    assert (util.validate_thresholds(thresh_list) == False)
Example #14
0
def test_threshold_ge_symbol_no_number():
    thresh_list = {">=a"}
    assert (util.validate_thresholds(thresh_list) == False)
Example #15
0
def test_threshold_gt_no_number():
    thresh_list = {"gta"}
    assert (util.validate_thresholds(thresh_list) == False)
Example #16
0
def test_threshold_le_symbol():
    thresh_list = {"<=2.3", "<=1.1"}
    assert (util.validate_thresholds(thresh_list))