def run_pixel(X, Y, dataset_config, yatsm_config, px=0, py=0): """ Run a single pixel through YATSM Args: X (ndarray): 2D (nimage x nband) feature input from ordinal date Y (ndarray): 2D (nband x nimage) image input dataset_config (dict): dict of dataset configuration options yatsm_config (dict): dict of YATSM algorithm options px (int, optional): X (column) pixel reference py (int, optional): Y (row) pixel reference Returns: model_result (ndarray): NumPy array of model results from YATSM """ # Extract design info design_info = X.design_info # Continue if valid observations are less than 50% of dataset valid = cyprep.get_valid_mask(Y[:dataset_config['mask_band'] - 1, :], dataset_config['min_values'], dataset_config['max_values']) if valid.sum() < Y.shape[1] / 2.0: raise TSLengthException('Not enough valid observations') # Otherwise continue with masked values valid = (valid * np.in1d(Y[dataset_config['mask_band'] - 1, :], dataset_config['mask_values'], invert=True)).astype(np.bool) Y = Y[:dataset_config['mask_band'] - 1, valid] X = X[valid, :] if yatsm_config['reverse']: # TODO: do this earlier X = np.flipud(X) Y = np.fliplr(Y) yatsm = YATSM(X, Y, consecutive=yatsm_config['consecutive'], threshold=yatsm_config['threshold'], min_obs=yatsm_config['min_obs'], min_rmse=yatsm_config['min_rmse'], test_indices=yatsm_config['test_indices'], retrain_time=yatsm_config['retrain_time'], screening=yatsm_config['screening'], screening_crit=yatsm_config['screening_crit'], green_band=dataset_config['green_band'] - 1, swir1_band=dataset_config['swir1_band'] - 1, remove_noise=yatsm_config['remove_noise'], dynamic_rmse=yatsm_config['dynamic_rmse'], slope_test=yatsm_config['slope_test'], lassocv=yatsm_config['lassocv'], design_info=design_info, px=px, py=py, logger=logger) yatsm.run() if yatsm_config['commission_alpha']: yatsm.record = yatsm.commission_test(yatsm_config['commission_alpha']) if yatsm_config['robust']: yatsm.record = yatsm.robust_record if yatsm_config['calc_pheno']: ltm = pheno.LongTermMeanPhenology(yatsm, yatsm_config['red_index'], yatsm_config['nir_index'], yatsm_config['blue_index'], yatsm_config['scale'], yatsm_config['evi_index'], yatsm_config['evi_scale']) yatsm.record = ltm.fit(year_interval=yatsm_config['year_interval'], q_min=yatsm_config['q_min'], q_max=yatsm_config['q_max']) return yatsm.record
def run_pixel(X, Y, dataset_config, yatsm_config, px=0, py=0): """ Run a single pixel through YATSM Args: X (ndarray): 2D (nimage x nband) feature input from ordinal date Y (ndarray): 2D (nband x nimage) image input dataset_config (dict): dict of dataset configuration options yatsm_config (dict): dict of YATSM algorithm options px (int, optional): X (column) pixel reference py (int, optional): Y (row) pixel reference Returns: model_result (ndarray): NumPy array of model results from YATSM """ # Extract design info design_info = X.design_info # Continue if valid observations are less than 50% of dataset valid = cyprep.get_valid_mask( Y[:dataset_config['mask_band'] - 1, :], dataset_config['min_values'], dataset_config['max_values'] ) if valid.sum() < Y.shape[1] / 2.0: raise TSLengthException('Not enough valid observations') # Otherwise continue with masked values valid = (valid * np.in1d(Y[dataset_config['mask_band'] - 1, :], dataset_config['mask_values'], invert=True)).astype(np.bool) Y = Y[:dataset_config['mask_band'] - 1, valid] X = X[valid, :] if yatsm_config['reverse']: # TODO: do this earlier X = np.flipud(X) Y = np.fliplr(Y) yatsm = YATSM(X, Y, consecutive=yatsm_config['consecutive'], threshold=yatsm_config['threshold'], min_obs=yatsm_config['min_obs'], min_rmse=yatsm_config['min_rmse'], test_indices=yatsm_config['test_indices'], retrain_time=yatsm_config['retrain_time'], screening=yatsm_config['screening'], screening_crit=yatsm_config['screening_crit'], green_band=dataset_config['green_band'] - 1, swir1_band=dataset_config['swir1_band'] - 1, remove_noise=yatsm_config['remove_noise'], dynamic_rmse=yatsm_config['dynamic_rmse'], slope_test=yatsm_config['slope_test'], lassocv=yatsm_config['lassocv'], design_info=design_info, px=px, py=py, logger=logger) yatsm.run() if yatsm_config['commission_alpha']: yatsm.record = yatsm.commission_test(yatsm_config['commission_alpha']) if yatsm_config['robust']: yatsm.record = yatsm.robust_record if yatsm_config['calc_pheno']: ltm = pheno.LongTermMeanPhenology( yatsm, yatsm_config['red_index'], yatsm_config['nir_index'], yatsm_config['blue_index'], yatsm_config['scale'], yatsm_config['evi_index'], yatsm_config['evi_scale']) yatsm.record = ltm.fit(year_interval=yatsm_config['year_interval'], q_min=yatsm_config['q_min'], q_max=yatsm_config['q_max']) return yatsm.record
# Renew the generator for style if plot_style == 'xkcd': style_context = plt.xkcd() else: style_context = plt.style.context(plot_style) if isinstance(plot_index, int): with style_context: plot_results() plt.tight_layout() plt.title('Modeled Timeseries') plt.show() if args['--commit_alpha']: yatsm.record = yatsm.commission_test(float(args['--commit_alpha'])) # Renew the generator for style if plot_style == 'xkcd': style_context = plt.xkcd() else: style_context = plt.style.context(plot_style) if isinstance(plot_index, int): with style_context: plot_results() plt.tight_layout() plt.title('Modeled Timeseries (with commission test)') plt.show() if args['--pheno']: