def __init__(self, cfg, time_period=0, models=NAMES_UA): # logging log = gen.getLogger(gen.getClassName(self)) log.info("start creating ua ensemble monthly average") # aos obj = aos.DataObject(('ua_ens_month_avg', time_period, models)) if obj.load(): obj.copy(self) return (None) # init self._time_period = time_period self._models = models self.cfg = dict(cfg) # create list of time_avg_lat_lon 2D-fields ensemble_time_avg_lat_lon = [] if time_period == '1979-2005': directory_prefix = pl.Path( self.cfg['data_folders']['historical']).joinpath('ua/mon') elif time_period == '2070-2099': directory_prefix = pl.Path( self.cfg['data_folders']['rcp85']).joinpath('ua/mon') else: raise Exception("ua_ens_avg: time period '%s' not known" % time_period) print("Load data from time period %s" % time_period) log.info("ua_ens_month_avg: Load data from time period %s" % time_period) for name in self._models: print("Loading %s from file" % name) log.info("Loading %s from file" % name) directory = directory_prefix.joinpath(name).joinpath('r1i1p1') tall = time_avg_month_lat_lon_dir(directory, time_period=time_period) ensemble_time_avg_lat_lon += [tall] # check consistancy of grids in the ensemble of time_avg_lat_lon 2D-fields and store grid tall_0 = ensemble_time_avg_lat_lon[0] for tall in ensemble_time_avg_lat_lon: if not tall_0.grid_equal(tall): raise Exception( "ua_ens_month_avg: error, grids are not consistent") self.points = tall_0.points self.area = tall_0.area # put ensemble into a 3D array with shape (n_points, 24, n_models) tall_0 = ensemble_time_avg_lat_lon[0] n_points = tall_0.data.shape[0] self.n_models = len(ensemble_time_avg_lat_lon) self.data = np.zeros((n_points, 24, self.n_models)) for tall, model in zip(ensemble_time_avg_lat_lon, range(self.n_models)): self.data[:, :, model] = tall.data # aos obj.save(self)
def __init__(self, time_period=0): # aos obj = aos.DataObject(('uas_ens_avg', time_period)) if obj.load(): obj.copy(self) return (None) # init self._time_period = time_period self._models = NAMES_UAS # create list of time_avg_lat_lon 2D-fields ensemble_time_avg_lat_lon = [] if (time_period == '1971-2000') or (time_period == '1979-2005'): directory_prefix = 'data/ModData2/CMIP5/atmos/historical/uas/mon/' elif (time_period == '2071-2100') or (time_period == '2070-2099'): directory_prefix = 'data/ModData2/CMIP5/atmos/rcp85/uas/mon/' else: raise Exception("uas_ens_avg: time period '%s' not known" % time_period) print("Load data from time period %s" % time_period) for name in self._models: print("Loading %s from file" % name) directory = directory_prefix + name + '/r1i1p1/' uas_list = [ uas(['file', os.path.join(directory, f)]) for f in os.listdir(directory) if f.endswith(".nc") ] tall = time_avg_lat_lon(['uas list', uas_list], time_period=time_period) ensemble_time_avg_lat_lon += [tall] # check consistancy of grids in the ensemble of time_avg_lat_lon 2D-fields and store grid tall_0 = ensemble_time_avg_lat_lon[0] for tall in ensemble_time_avg_lat_lon: if not tall_0.grid_equal(tall): raise Exception("uas_ens_avg: error, grids are not consistent") self.points = tall_0.points self.area = tall_0.area # put ensemble into a 2D array: [data,talls] data = [] for tall in ensemble_time_avg_lat_lon: data += [tall.data] self.data = np.hstack(data) # area # aos obj.save(self)
def __init__(self, data): # aos obj = aos.DataObject(('ua', data)) if obj.load(): obj.copy(self) return (None) # logging log = gen.getLogger(gen.getClassName(self)) log.info("creating class") if not data: raise Exception("ua: Initialization error, provide data") if data[0] == 'file': self._init_ua_from_file(data[1]) else: raise Exception("ua: Initialization error, unknow mode") # aos obj.save(self)
def __init__(self, directory, time_period=0): # logging log = gen.getLogger(gen.getClassName(self)) log.info("starting") # aos obj = aos.DataObject(('time_avg_lat_lon_dir', directory, time_period)) if obj.load(): obj.copy(self) log.info("loaded") return (None) ua_list = [] for f in directory.iterdir(): if '_reg.nc' in str(f): gen.print_truncate(" Loading file %s" % f) ua_list = ua_list + [ua(['file', directory.joinpath(f)])] super(time_avg_lat_lon_dir, self).__init__(['ua list', ua_list], time_period=time_period) # aos obj.save(self) log.info("created")
def __init__(self, e, n=360, max_length=360, min_length=30): """Class initialization Parameters ---------- e : class Evaluation class for a single evaluation to run n : int, optional Range of starting degrees [0, 360]. max_length : int, optional Maximum size of averaging window [1, 360). min_length : int, optional Minumum size of averaging window [1, 359). Returns ------- TYPE Description """ # logging log = gen.getLogger(gen.getClassName(self)) log.info("start evaluating all [JJA]") # Error files self.minima_error_file = 'min_max_error.csv' self.nan_error_file = 'nan_error.csv' # aos obj = aos.DataObject(('EvaluateAll [JJA]', n)) if obj.load(): obj.copy(self) return (None) # prepare evaluate self.n = n self.min_length = min_length self.max_length = max_length x = np.arange(self.n) y = np.arange(self.min_length, self.max_length + 1) xx, yy = np.meshgrid(x, y) individuals = np.transpose( np.hstack((xx.reshape(-1, 1), yy.reshape(-1, 1)))) # evaluate self.ret = e(individuals) # Process / convert results self.start = individuals[0, :].reshape(-1, 1) self.length = individuals[1, :].reshape(-1, 1) self.fitness = self.ret[0, :].reshape(-1, 1) self.result = pd.DataFrame( { 'start': self.start.ravel(), 'length': self.length.ravel(), 'fitness': self.fitness.ravel() }, index=np.arange(len(self.fitness.ravel()))) # Longitudes in input goes from -179.5 to 179.5. # Here we convert from integer degree (offset) to the proper longitude value. self.result['start'] -= 179.5 self.save_errors(e.f.n_models) # aos obj.save(self)