本文整理汇总了Python中geodata.netcdf.DatasetNetCDF类的典型用法代码示例。如果您正苦于以下问题:Python DatasetNetCDF类的具体用法?Python DatasetNetCDF怎么用?Python DatasetNetCDF使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DatasetNetCDF类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: loadNARR_TS
def loadNARR_TS(name=dataset_name, grid=None, varlist=None, resolution=None, varatts=None, filelist=None,
folder=None, lautoregrid=None):
''' Get a properly formatted NARR dataset with monthly mean time-series. '''
if grid is None:
# load from original time-series files
if folder is None: folder = orig_ts_folder
# translate varlist
if varatts is None: varatts = tsvaratts.copy()
if varlist is None: varlist = tsvarlist
if varlist and varatts: varlist = translateVarNames(varlist, varatts)
if filelist is None: # generate default filelist
filelist = [orig_ts_file.format(special[var]) if var in special else orig_ts_file.format(var) for var in varlist
if var not in nofile and var in varatts]
# load dataset
dataset = DatasetNetCDF(name=name, folder=folder, filelist=filelist, varlist=varlist, varatts=varatts,
atts=projdict, multifile=False, ncformat='NETCDF4_CLASSIC')
# replace time axis with number of month since Jan 1979
data = np.arange(0,len(dataset.time),1, dtype='int16') # month since 1979 (Jan 1979 = 0)
timeAxis = Axis(name='time', units='month', coord=data, atts=dict(long_name='Month since 1979-01'))
dataset.replaceAxis(dataset.time, timeAxis, asNC=False, deepcopy=False)
# add projection
projection = getProjFromDict(projdict, name='{0:s} Coordinate System'.format(name))
dataset = addGDALtoDataset(dataset, projection=projection, geotransform=None, gridfolder=grid_folder)
else:
# load from neatly formatted and regridded time-series files
if folder is None: folder = avgfolder
dataset = loadObservations(name=name, folder=folder, projection=None, resolution=None, grid=grid,
period=None, varlist=varlist, varatts=varatts, filepattern=tsfile,
filelist=filelist, lautoregrid=lautoregrid, mode='time-series')
# return formatted dataset
return dataset
示例2: loadGPCC_TS
def loadGPCC_TS(name=dataset_name, grid=None, varlist=None, resolution='25', varatts=None, filelist=None,
folder=None, lautoregrid=None):
''' Get a properly formatted dataset with the monthly GPCC time-series. '''
if grid is None:
# load from original time-series files
if folder is None: folder = orig_ts_folder
# prepare input
if resolution not in ('05', '10', '25'): raise DatasetError, "Selected resolution '%s' is not available!"%resolution
# translate varlist
if varatts is None: varatts = tsvaratts.copy()
if varlist is None: varlist = varatts.keys()
if varlist and varatts: varlist = translateVarNames(varlist, varatts)
if filelist is None: # generate default filelist
filelist = []
if 'p' in varlist: filelist.append(orig_ts_file.format('precip',resolution))
if 's' in varlist: filelist.append(orig_ts_file.format('statio',resolution))
# load dataset
dataset = DatasetNetCDF(name=name, folder=folder, filelist=filelist, varlist=varlist, varatts=varatts, multifile=False, ncformat='NETCDF4_CLASSIC')
# replace time axis with number of month since Jan 1979
data = np.arange(0,len(dataset.time),1, dtype='int16') + (1901-1979)*12 # month since 1979 (Jan 1979 = 0)
timeAxis = Axis(name='time', units='month', coord=data, atts=dict(long_name='Month since 1979-01'))
dataset.replaceAxis(dataset.time, timeAxis, asNC=False, deepcopy=False)
# add GDAL info
dataset = addGDALtoDataset(dataset, projection=None, geotransform=None)
# N.B.: projection should be auto-detected as geographic
else:
# load from neatly formatted and regridded time-series files
if folder is None: folder = avgfolder
grid, resolution = checkGridRes(grid, resolution, period=None, lclim=False)
dataset = loadObservations(name=name, folder=folder, projection=None, resolution=resolution, grid=grid,
period=None, varlist=varlist, varatts=varatts, filepattern=tsfile,
filelist=filelist, lautoregrid=lautoregrid, mode='time-series')
# return formatted dataset
return dataset
示例3: loadCRU_TS
def loadCRU_TS(name=dataset_name, grid=None, varlist=None, resolution=None, varatts=None, filelist=None,
folder=None, lautoregrid=None):
''' Get a properly formatted CRU dataset with monthly mean time-series. '''
if grid is None:
# load from original time-series files
if folder is None: folder = orig_ts_folder
# translate varlist
if varatts is None: varatts = tsvaratts.copy()
if varlist is None: varlist = varatts.keys()
if varlist and varatts: varlist = translateVarNames(varlist, varatts)
# assemble filelist
if filelist is None: # generate default filelist
filelist = [orig_ts_file.format(var) for var in varlist if var not in nofile]
# load dataset
dataset = DatasetNetCDF(name=name, folder=folder, filelist=filelist, varlist=varlist, varatts=varatts,
multifile=False, ncformat='NETCDF4_CLASSIC')
# replace time axis with number of month since Jan 1979
data = np.arange(0,len(dataset.time),1, dtype='int16') + (1901-1979)*12 # month since 1979 (Jan 1979 = 0)
timeAxis = Axis(name='time', units='month', coord=data, atts=dict(long_name='Month since 1979-01'))
dataset.replaceAxis(dataset.time, timeAxis, asNC=False, deepcopy=False)
# add projection
dataset = addGDALtoDataset(dataset, projection=None, geotransform=None, gridfolder=grid_folder)
# N.B.: projection should be auto-detected as geographic
else:
# load from neatly formatted and regridded time-series files
if folder is None: folder = avgfolder
dataset = loadObservations(name=name, folder=folder, projection=None, resolution=None, grid=grid,
period=None, varlist=varlist, varatts=varatts, filepattern=tsfile,
filelist=filelist, lautoregrid=lautoregrid, mode='time-series')
# return formatted dataset
return dataset
示例4: loadGPCC_LTM
def loadGPCC_LTM(
name=dataset_name, varlist=None, resolution="025", varatts=ltmvaratts, filelist=None, folder=ltmfolder
):
""" Get a properly formatted dataset the monthly accumulated GPCC precipitation climatology. """
# prepare input
if resolution not in ("025", "05", "10", "25"):
raise DatasetError, "Selected resolution '%s' is not available!" % resolution
# translate varlist
if varlist is None:
varlist = varatts.keys()
if varlist and varatts:
varlist = translateVarNames(varlist, varatts)
# load variables separately
if "p" in varlist:
dataset = DatasetNetCDF(
name=name,
folder=folder,
filelist=["normals_v2011_%s.nc" % resolution],
varlist=["p"],
varatts=varatts,
ncformat="NETCDF4_CLASSIC",
)
if "s" in varlist:
gauges = nc.Dataset(folder + "normals_gauges_v2011_%s.nc" % resolution, mode="r", format="NETCDF4_CLASSIC")
stations = Variable(data=gauges.variables["p"][0, :, :], axes=(dataset.lat, dataset.lon), **varatts["s"])
# consolidate dataset
dataset.addVariable(stations, asNC=False, copy=True)
dataset = addGDALtoDataset(dataset, projection=None, geotransform=None, gridfolder=grid_folder)
# N.B.: projection should be auto-detected as geographic
# return formatted dataset
return dataset
示例5: loadCFSR_TS
def loadCFSR_TS(name=dataset_name, grid=None, varlist=None, varatts=None, resolution='hires',
filelist=None, folder=None, lautoregrid=None):
''' Get a properly formatted CFSR dataset with monthly mean time-series. '''
if grid is None:
# load from original time-series files
if folder is None: folder = orig_ts_folder
# translate varlist
if varatts is None: varatts = tsvaratts.copy()
if varlist is None:
if resolution == 'hires' or resolution == '03' or resolution == '031': varlist = varlist_hires
elif resolution == 'lowres' or resolution == '05': varlist = varlist_lowres
if varlist and varatts: varlist = translateVarNames(varlist, varatts)
if filelist is None: # generate default filelist
if resolution == 'hires' or resolution == '03' or resolution == '031':
files = [hiresfiles[var] for var in varlist if var in hiresfiles]
elif resolution == 'lowres' or resolution == '05':
files = [lowresfiles[var] for var in varlist if var in lowresfiles]
# load dataset
dataset = DatasetNetCDF(name=name, folder=folder, filelist=files, varlist=varlist, varatts=varatts,
check_override=['time'], multifile=False, ncformat='NETCDF4_CLASSIC')
# load static data
if filelist is None: # generate default filelist
if resolution == 'hires' or resolution == '03' or resolution == '031':
files = [hiresstatic[var] for var in varlist if var in hiresstatic]
elif resolution == 'lowres' or resolution == '05':
files = [lowresstatic[var] for var in varlist if var in lowresstatic]
# load constants, if any (and with singleton time axis)
if len(files) > 0:
staticdata = DatasetNetCDF(name=name, folder=folder, filelist=files, varlist=varlist, varatts=varatts,
axes=dict(lon=dataset.lon, lat=dataset.lat), multifile=False,
check_override=['time'], ncformat='NETCDF4_CLASSIC')
# N.B.: need to override the axes, so that the datasets are consistent
if len(staticdata.variables) > 0:
for var in staticdata.variables.values():
if not dataset.hasVariable(var.name):
var.squeeze() # remove time dimension
dataset.addVariable(var, copy=False) # no need to copy... but we can't write to the netcdf file!
# replace time axis with number of month since Jan 1979
data = np.arange(0,len(dataset.time),1, dtype='int16') # month since 1979 (Jan 1979 = 0)
timeAxis = Axis(name='time', units='month', coord=data, atts=dict(long_name='Month since 1979-01'))
dataset.replaceAxis(dataset.time, timeAxis, asNC=False, deepcopy=False)
# add projection
dataset = addGDALtoDataset(dataset, projection=None, geotransform=None, gridfolder=grid_folder)
# N.B.: projection should be auto-detected as geographic
else:
# load from neatly formatted and regridded time-series files
if folder is None: folder = avgfolder
grid, resolution = checkGridRes(grid, resolution)
dataset = loadObservations(name=name, folder=folder, projection=None, resolution=resolution, grid=grid,
period=None, varlist=varlist, varatts=varatts, filepattern=tsfile,
filelist=filelist, lautoregrid=lautoregrid, mode='time-series')
# return formatted dataset
return dataset
示例6: computeClimatology
#.........这里部分代码省略.........
assert os.path.exists(expfolder)
filepath = expfolder+filename
tmpfilepath = expfolder+tmpfilename
lskip = False # else just go ahead
if os.path.exists(filepath):
if not loverwrite:
age = datetime.fromtimestamp(os.path.getmtime(filepath))
# if sink file is newer than source file, skip (do not recompute)
if age > sourceage and os.path.getsize(filepath) > 1e6: lskip = True
# N.B.: NetCDF files smaller than 1MB are usually incomplete header fragments from a previous crash
#print sourceage, age
if not lskip: os.remove(filepath)
# depending on last modification time of file or overwrite setting, start computation, or skip
if lskip:
# print message
skipmsg = "\n{:s} >>> Skipping: file '{:s}' in dataset '{:s}' already exists and is newer than source file.".format(pidstr,filename,dataset_name)
skipmsg += "\n{:s} >>> ('{:s}')\n".format(pidstr,filepath)
logger.info(skipmsg)
else:
## begin actual computation
beginmsg = "\n{:s} <<< Computing '{:s}' (d{:02d}) Climatology from {:s}".format(
pidstr,dataset_name,domain,periodstr)
if griddef is None: beginmsg += " >>> \n"
else: beginmsg += " ('{:s}' grid) >>> \n".format(griddef.name)
logger.info(beginmsg)
## actually load datasets
if source is None:
source = loadWRF_TS(experiment=experiment, filetypes=[filetype], domains=domain) # comes out as a tuple...
if not lparallel and ldebug: logger.info('\n'+str(source)+'\n')
# prepare sink
if os.path.exists(tmpfilepath): os.remove(tmpfilepath) # remove old temp files
sink = DatasetNetCDF(name='WRF Climatology', folder=expfolder, filelist=[tmpfilename], atts=source.atts.copy(), mode='w')
sink.atts.period = periodstr
# initialize processing
if griddef is None: lregrid = False
else: lregrid = True
CPU = CentralProcessingUnit(source, sink, varlist=varlist, tmp=lregrid, feedback=ldebug) # no need for lat/lon
# start processing climatology
if shift != 0:
logger.info('{0:s} (shifting climatology by {1:d} month, to start with January) \n'.format(pidstr,shift))
CPU.Climatology(period=period, offset=offset, shift=shift, flush=False)
# N.B.: immediate flushing should not be necessary for climatologies, since they are much smaller!
# reproject and resample (regrid) dataset
if lregrid:
CPU.Regrid(griddef=griddef, flush=True)
logger.info('%s --- '+str(griddef.geotansform)+' --- \n'%(pidstr))
# sync temporary storage with output dataset (sink)
CPU.sync(flush=True)
# add Geopotential Height Variance
if 'GHT_Var' in sink and 'Z_var' not in sink:
data_array = ( sink['GHT_Var'].data_array - sink['Z'].data_array**2 )**0.5
atts = dict(name='Z_var',units='m',long_name='Square Root of Geopotential Height Variance')
sink += Variable(axes=sink['Z'].axes, data=data_array, atts=atts)
# add (relative) Vorticity Variance
if 'Vorticity_Var' in sink and 'zeta_var' not in sink:
data_array = ( sink['Vorticity_Var'].data_array - sink['zeta'].data_array**2 )**0.5
atts = dict(name='zeta_var',units='1/s',long_name='Square Root of Relative Vorticity Variance')
sink += Variable(axes=sink['zeta'].axes, data=data_array, atts=atts)
# add names and length of months
sink.axisAnnotation('name_of_month', name_of_month, 'time',
atts=dict(name='name_of_month', units='', long_name='Name of the Month'))
if not sink.hasVariable('length_of_month'):
sink += Variable(name='length_of_month', units='days', axes=(sink.time,), data=days_per_month,
atts=dict(name='length_of_month',units='days',long_name='Length of Month'))
# close... and write results to file
sink.sync()
sink.close()
writemsg = "\n{:s} >>> Writing to file '{:s}' in dataset {:s}".format(pidstr,filename,dataset_name)
writemsg += "\n{:s} >>> ('{:s}')\n".format(pidstr,filepath)
logger.info(writemsg)
# rename file to proper name
if os.path.exists(filepath): os.remove(filepath) # remove old file
os.rename(tmpfilepath,filepath) # this will overwrite the old file
# print dataset
if not lparallel and ldebug:
logger.info('\n'+str(sink)+'\n')
# clean up (not sure if this is necessary, but there seems to be a memory leak...
del sink, CPU; gc.collect() # get rid of these guys immediately
# clean up and return
if source is not None: source.unload(); del source
# N.B.: source is only loaded once for all periods
# N.B.: garbage is collected in multi-processing wrapper as well
# return
return 0 # so far, there is no measure of success, hence, if there is no crash...
示例7: loadObservations
def loadObservations(name=None, folder=None, period=None, grid=None, station=None, shape=None, lencl=False,
varlist=None, varatts=None, filepattern=None, filelist=None, resolution=None,
projection=None, geotransform=None, axes=None, lautoregrid=None, mode='climatology'):
''' A function to load standardized observational datasets. '''
# prepare input
if mode.lower() == 'climatology': # post-processed climatology files
# transform period
if period is None or period == '':
if name not in ('PCIC','PRISM','GPCC','NARR'):
raise ValueError("A period is required to load observational climatologies.")
elif isinstance(period,basestring):
period = tuple([int(prd) for prd in period.split('-')])
elif not isinstance(period,(int,np.integer)) and ( not isinstance(period,tuple) and len(period) == 2 ):
raise TypeError(period)
elif mode.lower() in ('time-series','timeseries'): # concatenated time-series files
period = None # to indicate time-series (but for safety, the input must be more explicit)
if lautoregrid is None: lautoregrid = False # this can take very long!
# cast/copy varlist
if isinstance(varlist,basestring): varlist = [varlist] # cast as list
elif varlist is not None: varlist = list(varlist) # make copy to avoid interference
# figure out station and shape options
if station and shape: raise ArgumentError()
elif station or shape:
if grid is not None: raise NotImplementedError('Currently observational station data can only be loaded from the native grid.')
if lautoregrid: raise GDALError('Station data can not be regridded, since it is not map data.')
lstation = bool(station); lshape = bool(shape)
grid = station if lstation else shape
# add station/shape parameters
if varlist:
params = stn_params if lstation else shp_params
for param in params:
if param not in varlist: varlist.append(param)
else:
lstation = False; lshape = False
# varlist (varlist = None means all variables)
if varatts is None: varatts = default_varatts.copy()
if varlist is not None: varlist = translateVarNames(varlist, varatts)
# filelist
if filelist is None:
filename = getFileName(name=name, resolution=resolution, period=period, grid=grid, filepattern=filepattern)
# check existance
filepath = '{:s}/{:s}'.format(folder,filename)
if not os.path.exists(filepath):
nativename = getFileName(name=name, resolution=resolution, period=period, grid=None, filepattern=filepattern)
nativepath = '{:s}/{:s}'.format(folder,nativename)
if os.path.exists(nativepath):
if lautoregrid:
from processing.regrid import performRegridding # causes circular reference if imported earlier
griddef = loadPickledGridDef(grid=grid, res=None, folder=grid_folder)
dataargs = dict(period=period, resolution=resolution)
performRegridding(name, 'climatology',griddef, dataargs) # default kwargs
else: raise IOError("The dataset '{:s}' for the selected grid ('{:s}') is not available - use the regrid module to generate it.".format(filename,grid) )
else: raise IOError("The dataset file '{:s}' does not exits!\n('{:s}')".format(filename,filepath))
# load dataset
dataset = DatasetNetCDF(name=name, folder=folder, filelist=[filename], varlist=varlist, varatts=varatts,
axes=axes, multifile=False, ncformat='NETCDF4')
# mask all shapes that are incomplete in dataset
if shape and lencl and 'shp_encl' in dataset:
dataset.load() # need to load data before masking; is cheap for shape averages, anyway
dataset.mask(mask='shp_encl', invert=True, skiplist=shp_params)
# correct ordinal number of shape (should start at 1, not 0)
if lshape:
if dataset.hasAxis('shapes'): raise AxisError("Axis 'shapes' should be renamed to 'shape'!")
if not dataset.hasAxis('shape'):
raise AxisError()
if dataset.shape.coord[0] == 0: dataset.shape.coord += 1
# figure out grid
if not lstation and not lshape:
if grid is None or grid == name:
dataset = addGDALtoDataset(dataset, projection=projection, geotransform=geotransform, gridfolder=grid_folder)
elif isinstance(grid,basestring): # load from pickle file
# griddef = loadPickledGridDef(grid=grid, res=None, filename=None, folder=grid_folder)
# add GDAL functionality to dataset
dataset = addGDALtoDataset(dataset, griddef=grid, gridfolder=grid_folder)
else: raise TypeError(dataset)
# N.B.: projection should be auto-detected, if geographic (lat/lon)
return dataset
示例8: print
# load source
periodstr = 'Climatology' if period is None else '{0:4d}-{1:4d}'.format(*period)
print('\n\n *** Processing Resolution %s from %s *** \n\n'%(res,periodstr))
if period is None: source = loadGPCC_LTM(varlist=None,resolution=res) # ['stations','precip']
else: source = loadGPCC_TS(varlist=None,resolution=res)
source = source(time=timeSlice(period))
#source.load()
print(source)
print('\n')
# prepare sink
gridstr = res if grid == 'GPCC' else grid
filename = getFileName(grid=gridstr, period=period, name='GPCC', filepattern=avgfile)
if os.path.exists(avgfolder+filename): os.remove(avgfolder+filename)
atts =dict(period=periodstr, name='GPCC', title='GPCC Climatology')
sink = DatasetNetCDF(name='GPCC Climatology', folder=avgfolder, filelist=[filename], atts=source.atts, mode='w')
# sink = addGDALtoDataset(sink, griddef=source.griddef)
# initialize processing
CPU = CentralProcessingUnit(source, sink, tmp=True)
if period is not None:
# determine averaging interval
offset = source.time.getIndex(period[0]-1979)/12 # origin of monthly time-series is at January 1979
# start processing climatology
CPU.Climatology(period=period[1]-period[0], offset=offset, flush=False)
# CPU.sync(flush=True)
# get NARR coordinates
if grid is not 'GPCC':
griddef = loadPickledGridDef(grid=grid, res=None, folder=grid_folder)
示例9: performExtraction
def performExtraction(dataset, mode, stnfct, dataargs, loverwrite=False, varlist=None, lwrite=True, lreturn=False,
ldebug=False, lparallel=False, pidstr='', logger=None):
''' worker function to extract point data from gridded dataset '''
# input checking
if not isinstance(dataset,basestring): raise TypeError
if not isinstance(dataargs,dict): raise TypeError # all dataset arguments are kwargs
if not callable(stnfct): raise TypeError # function to load station dataset
if lparallel:
if not lwrite: raise IOError, 'In parallel mode we can only write to disk (i.e. lwrite = True).'
if lreturn: raise IOError, 'Can not return datasets in parallel mode (i.e. lreturn = False).'
# logging
if logger is None: # make new logger
logger = logging.getLogger() # new logger
logger.addHandler(logging.StreamHandler())
else:
if isinstance(logger,basestring):
logger = logging.getLogger(name=logger) # connect to existing one
elif not isinstance(logger,logging.Logger):
raise TypeError, 'Expected logger ID/handle in logger KW; got {}'.format(str(logger))
lclim = False; lts = False
if mode == 'climatology': lclim = True
elif mode == 'time-series': lts = True
else: raise NotImplementedError, "Unrecognized Mode: '{:s}'".format(mode)
## extract meta data from arguments
module, dataargs, loadfct, filepath, datamsgstr = getMetaData(dataset, mode, dataargs)
dataset_name = dataargs.dataset_name; periodstr = dataargs.periodstr; avgfolder = dataargs.avgfolder
# load template dataset
stndata = stnfct() # load station dataset from function
if not isinstance(stndata, Dataset): raise TypeError
# N.B.: the loading function is necessary, because DataseNetCDF instances do not pickle well
# determine age of source file
if not loverwrite: sourceage = datetime.fromtimestamp(os.path.getmtime(filepath))
# get filename for target dataset and do some checks
filename = getTargetFile(stndata.name, dataset, mode, module, dataargs, lwrite)
if ldebug: filename = 'test_' + filename
if not os.path.exists(avgfolder): raise IOError, "Dataset folder '{:s}' does not exist!".format(avgfolder)
lskip = False # else just go ahead
if lwrite:
if lreturn:
tmpfilename = filename # no temporary file if dataset is passed on (can't rename the file while it is open!)
else:
if lparallel: tmppfx = 'tmp_exstns_{:s}_'.format(pidstr[1:-1])
else: tmppfx = 'tmp_exstns_'.format(pidstr[1:-1])
tmpfilename = tmppfx + filename
filepath = avgfolder + filename
tmpfilepath = avgfolder + tmpfilename
if os.path.exists(filepath):
if not loverwrite:
age = datetime.fromtimestamp(os.path.getmtime(filepath))
# if source file is newer than sink file or if sink file is a stub, recompute, otherwise skip
if age > sourceage and os.path.getsize(filepath) > 1e5: lskip = True
# N.B.: NetCDF files smaller than 100kB are usually incomplete header fragments from a previous crashed
if not lskip: os.remove(filepath) # recompute
# depending on last modification time of file or overwrite setting, start computation, or skip
if lskip:
# print message
skipmsg = "\n{:s} >>> Skipping: file '{:s}' in dataset '{:s}' already exists and is newer than source file.".format(pidstr,filename,dataset_name)
skipmsg += "\n{:s} >>> ('{:s}')\n".format(pidstr,filepath)
logger.info(skipmsg)
else:
## actually load datasets
source = loadfct() # load source
# check period
if 'period' in source.atts and dataargs.periodstr != source.atts.period: # a NetCDF attribute
raise DateError, "Specifed period is inconsistent with netcdf records: '{:s}' != '{:s}'".format(periodstr,source.atts.period)
# print message
if lclim: opmsgstr = "Extracting '{:s}'-type Point Data from Climatology ({:s})".format(stndata.name, periodstr)
elif lts: opmsgstr = "Extracting '{:s}'-type Point Data from Time-series".format(stndata.name)
else: raise NotImplementedError, "Unrecognized Mode: '{:s}'".format(mode)
# print feedback to logger
logger.info('\n{0:s} *** {1:^65s} *** \n{0:s} *** {2:^65s} *** \n'.format(pidstr,datamsgstr,opmsgstr))
if not lparallel and ldebug: logger.info('\n'+str(source)+'\n')
## create new sink/target file
# set attributes
atts=source.atts.copy()
atts['period'] = dataargs.periodstr if dataargs.periodstr else 'time-series'
atts['name'] = dataset_name; atts['station'] = stndata.name
atts['title'] = '{:s} (Stations) from {:s} {:s}'.format(stndata.title,dataset_name,mode.title())
# make new dataset
if lwrite: # write to NetCDF file
if os.path.exists(tmpfilepath): os.remove(tmpfilepath) # remove old temp files
sink = DatasetNetCDF(folder=avgfolder, filelist=[tmpfilename], atts=atts, mode='w')
else: sink = Dataset(atts=atts) # ony create dataset in memory
# initialize processing
CPU = CentralProcessingUnit(source, sink, varlist=varlist, tmp=False, feedback=ldebug)
# extract data at station locations
CPU.Extract(template=stndata, flush=True)
# get results
#.........这里部分代码省略.........
示例10: print
# generate averaged climatology
elif mode == 'average_timeseries':
# load source
periodstr = '%4i-%4i'%period
print('\n')
print(' *** Processing Grid %s from %s *** '%(grid,periodstr))
print('\n')
source = loadNARR_TS()
print(source)
print('\n')
# prepare sink
gridstr = '' if grid is 'NARR' else '_'+grid
filename = avgfile.format(gridstr,'_'+periodstr)
if os.path.exists(avgfolder+filename): os.remove(avgfolder+filename)
sink = DatasetNetCDF(name='NARR Climatology', folder=avgfolder, filelist=[filename], atts=source.atts, mode='w')
sink.atts.period = periodstr
# determine averaging interval
offset = source.time.getIndex(period[0]-1979)/12 # origin of monthly time-series is at January 1979
# initialize processing
# CPU = CentralProcessingUnit(source, sink, varlist=['precip', 'T2'], tmp=True) # no need for lat/lon
CPU = CentralProcessingUnit(source, sink, varlist=None, tmp=True) # no need for lat/lon
# start processing climatology
CPU.Climatology(period=period[1]-period[0], offset=offset, flush=False)
# sync temporary storage with output
CPU.sync(flush=True)
# # make new masks
示例11: print
elif mode == 'average_timeseries':
# load source
periodstr = '{0:4d}-{1:4d}'.format(*period)
print('\n')
print(' *** Processing Resolution %s from %s *** '%(res,periodstr))
print('\n')
source = loadCFSR_TS(resolution=res)
print(source)
print('\n')
# prepare sink
filename = avgfile.format('_'+res,'_'+periodstr)
if os.path.exists(avgfolder+filename): os.remove(avgfolder+filename)
sink = DatasetNetCDF(name='CFSR Climatology', folder=avgfolder, filelist=[filename], atts=source.atts, mode='w')
sink.atts.period = periodstr
# determine averaging interval
offset = source.time.getIndex(period[0]-1979)/12 # origin of monthly time-series is at January 1979
# initialize processing
CPU = CentralProcessingUnit(source, sink, tmp=True)
# start processing climatology
CPU.Climatology(period=period[1]-period[0], offset=offset, flush=False)
# shift longitude axis by 180 degrees left (i.e. 0 - 360 -> -180 - 180)
CPU.Shift(lon=-180, flush=False)
# sync temporary storage with output (sink variable; do not flush!)
CPU.sync(flush=False)
示例12: print
# load source
periodstr = '%4i-%4i'%period
print('\n')
print(' *** Processing Time-series from %s *** '%(periodstr,))
print('\n')
source = loadCRU_TS()
source = source(time=timeSlice(period)) # only get relevant time-slice
print(source)
assert period[0] != 1979 or source.time.coord[0] == 0
assert len(source.time) == (period[1]-period[0])*12
print('\n')
# prepare sink
filename = avgfile.format('','_'+periodstr,)
if os.path.exists(avgfolder+filename): os.remove(avgfolder+filename)
sink = DatasetNetCDF(name='CRU Climatology', folder=avgfolder, filelist=[filename], atts=source.atts, mode='w')
sink.atts.period = periodstr
# determine averaging interval
offset = source.time.getIndex(period[0]-1979)/12 # origin of monthly time-series is at January 1979
# initialize processing
# CPU = CentralProcessingUnit(source, sink, varlist=['wetfrq'])
CPU = CentralProcessingUnit(source, sink)
# start processing
print('')
print(' +++ processing +++ ')
CPU.Climatology(period=period[1]-period[0], offset=offset, flush=False)
# sync temporary storage with output
CPU.sync(flush=False)
print('\n')
示例13: __init__
#.........这里部分代码省略.........
varlist = list(varlist)
if 'SST' in varlist: # special handling of name SST variable, as it is part of Ts
varlist.remove('SST')
if not 'Ts' in varlist: varlist.append('Ts')
lSST = True # Ts is renamed to SST below
if translateVars is None: varlist = list(varlist) + translateVarNames(varlist, atts) # also aff translations, just in case
elif translateVars is True: varlist = translateVarNames(varlist, atts)
# N.B.: DatasetNetCDF does never apply translation!
# NetCDF file mode
ncmode = 'rw' if lwrite else 'r'
# get grid or station-set name
if lstation:
# the station name can be inserted as the grid name
gridstr = '_'+station.lower(); # only use lower case for filenames
griddef = None
elif lshape:
# the station name can be inserted as the grid name
gridstr = '_'+shape.lower(); # only use lower case for filenames
griddef = None
else:
if grid is None or grid == experiment.grid:
gridstr = ''; griddef = None
else:
gridstr = '_'+grid.lower() # only use lower case for filenames
griddef = loadPickledGridDef(grid=grid, res=None, filename=None, folder=grid_folder, check=True)
# insert grid name and period
filenames = []
for filetype,fileformat in zip(typelist,filelist):
if lclim: filename = fileformat.format(gridstr,periodstr) # put together specfic filename for climatology
elif lts: filename = fileformat.format(gridstr) # or for time-series
elif lcvdp: filename = fileformat.format(experiment.name if experiment else name,periodstr) # not implemented: gridstr
elif ldiag: raise NotImplementedError
else: raise DatasetError
filenames.append(filename) # append to list (passed to DatasetNetCDF later)
# check existance
filepath = '{:s}/{:s}'.format(folder,filename)
if not os.path.exists(filepath):
nativename = fileformat.format('',periodstr) # original filename (before regridding)
nativepath = '{:s}/{:s}'.format(folder,nativename)
if os.path.exists(nativepath):
if lautoregrid:
from processing.regrid import performRegridding # causes circular reference if imported earlier
griddef = loadPickledGridDef(grid=grid, res=None, folder=grid_folder)
dataargs = dict(experiment=experiment, filetypes=[filetype], period=period)
print("The '{:s}' (CESM) dataset for the grid ('{:s}') is not available:\n Attempting regridding on-the-fly.".format(name,filename,grid))
if performRegridding('CESM','climatology' if lclim else 'time-series', griddef, dataargs): # default kwargs
raise IOError, "Automatic regridding failed!"
print("Output: '{:s}'".format(name,filename,grid,filepath))
else: raise IOError, "The '{:s}' (CESM) dataset '{:s}' for the selected grid ('{:s}') is not available - use the regrid module to generate it.".format(name,filename,grid)
else: raise IOError, "The '{:s}' (CESM) dataset file '{:s}' does not exits!\n({:s})".format(name,filename,folder)
# load dataset
#print varlist, filenames
if experiment: title = experiment.title
else: title = name
dataset = DatasetNetCDF(name=name, folder=folder, filelist=filenames, varlist=varlist, axes=None,
varatts=atts, title=title, multifile=False, ignore_list=ignore_list,
ncformat='NETCDF4', squeeze=True, mode=ncmode, check_vars=check_vars)
# replace time axis
if lreplaceTime:
if lts or lcvdp:
# check time axis and center at 1979-01 (zero-based)
if experiment is None: ys = period[0]; ms = 1
else: ys,ms,ds = [int(t) for t in experiment.begindate.split('-')]; assert ds == 1
if dataset.hasAxis('time'):
ts = (ys-1979)*12 + (ms-1); te = ts+len(dataset.time) # month since 1979 (Jan 1979 = 0)