예제 #1
0
파일: arakawa.py 프로젝트: jfleroux/vacumm
def set_grid_type(var, gtype):
    """Set an attribute so that var is identified as being on the specified Arakawa
    grid type.

    If var is a :mod:`cdms2` variable or grid, it sets the
    :attr:`_vacumm_arakawa_grid_type` attribute,
    else it sets the :attr:`arakawa_grid_type` attribute.

    :Params:

        - **var**:  A :mod:`cdms2` variable or grid, a
          :class:`~vacumm.data.misc.dataset.Dataset` instance.
        - **gtype**: None or one of the :attr:`grid_type` letters.

    """
    if gtype is not None:
        gtype = str(gtype).upper()
    if cdms2.isVariable(var) or cdms2.isGrid(var):
        vv = [var]
        if cdms2.isVariable(var):
            grid = var.getGrid()
            if grid is not None: vv.append(grid)
        for v in vv:
            _set_clean_atts_(v, _cdms2_atts, gtype)
    else:
        _set_clean_atts_(var, _other_atts, gtype)
    return gtype
예제 #2
0
 def setTargetGrid(self,target,regridTool="esmf",regridMethod="linear"):
     self.regridTool = regridTool
     self.regridMethod = regridMethod
     if target=="2.5x2.5":
         self.targetGrid = cdms2.createUniformGrid(-88.875,72,2.5,0,144,2.5)
         self.targetGridName = target
     elif cdms2.isGrid(target):
         self.targetGrid = target
         self.targetGridName = target
     else:
         raise RunTimeError,"Unknown grid: %s" % target
예제 #3
0
파일: base.py 프로젝트: PCMDI/pcmdi_metrics
 def set_target_grid(self, target, regrid_tool='esmf',
                     regrid_method='linear'):
     self.regrid_tool = regrid_tool
     self.regrid_method = regrid_method
     if target == '2.5x2.5':
         self.target_grid = cdms2.createUniformGrid(
             -88.875, 72, 2.5, 0, 144, 2.5
         )
         self.target_grid_name = target
     elif cdms2.isGrid(target):
         self.target_grid = target
         self.target_grid_name = target
     else:
         logging.getLogger("pcmdi_metrics").error(
             'Unknown grid: %s' % target)
         raise RuntimeError('Unknown grid: %s' % target)
예제 #4
0
 def setTargetGrid(self, target, regridTool="esmf", regridMethod="linear"):
     self.regridTool = regridTool
     self.regridMethod = regridMethod
     if target == "2.5x2.5":
         self.targetGrid = cdms2.createUniformGrid(
             -88.875,
             72,
             2.5,
             0,
             144,
             2.5)
         self.targetGridName = target
     elif cdms2.isGrid(target):
         self.targetGrid = target
         self.targetGridName = target
     else:
         raise RuntimeError("Unknown grid: %s" % target)
예제 #5
0
 def set_target_grid(self,
                     target,
                     regrid_tool='esmf',
                     regrid_method='linear'):
     self.regrid_tool = regrid_tool
     self.regrid_method = regrid_method
     if target == '2.5x2.5':
         self.target_grid = cdms2.createUniformGrid(-88.875, 72, 2.5, 0,
                                                    144, 2.5)
         self.target_grid_name = target
     elif cdms2.isGrid(target):
         self.target_grid = target
         self.target_grid_name = target
     else:
         logging.getLogger("pcmdi_metrics").error('Unknown grid: %s' %
                                                  target)
         raise RuntimeError('Unknown grid: %s' % target)
예제 #6
0
def change_loc(var, toloc, axes=True, squeeze=True):
    """Change location specifications of a variable and its axes

    It affects the id, the standard_name and the long_name when they are defined.

    :Params:

        -

    :Example:

        >>> change_loc(sst, 'u').id
        'sst_u'
        >>> change_loc(sst, 't', squeeze=True).id
        'sst'

    """

    # Squeeze physloc
    if not isinstance(squeeze, basestring):
        if squeeze:
            squeeze = get_physloc(var)
        else:
            squeeze = None

    # Change attributes
    # - get
    specs = change_loc_specs(
        toloc,
        squeeze=squeeze,
        id=var.id,
        standard_name=getattr(var, 'standard_name', None),
        long_name=getattr(var, 'long_name', None),
    )
    # - set
    var.id = specs['id']
    for att in 'standard_name', 'long_name':
        if att in specs:
            setattr(var, att, specs[att])
    # - cf name
    if hasattr(var, '_vacumm_cf_name'):
        var._vacumm_cf_name = change_loc_single(var._vacumm_cf_name,
                                                'id',
                                                toloc,
                                                squeeze=squeeze)

    # Change axes and grid attributes
    if axes and cdms2.isVariable(var) or cdms2.isGrid(var):

        # Axes
        # - usual
        for meth in 'Longitude', 'Latitude', 'Time', 'Level':
            if hasattr(var, 'get' + meth):
                axismet = getattr(var, 'get' + meth)  # var.getLongitude
                if axismet() is not None:
                    change_loc(axismet(), toloc, squeeze=squeeze)
        # - 2d axes
        if cdms2.isVariable(var) and isaxis(var) and var.ndim > 2:
            for i in -1, -2:
                change_loc(var.getAxis(i), toloc, squeeze=squeeze)

        # Grid
        if cdms2.isVariable(var) and var.getGrid() is not None:
            change_loc(var.getGrid(), toloc, squeeze=squeeze)

    # Reference attribute
    set_loc(var, toloc)

    return var
예제 #7
0
파일: cf.py 프로젝트: jfleroux/vacumm
def change_loc(var, toloc, axes=True, squeeze=True):
    """Change location specifications of a variable and its axes

    It affects the id, the standard_name and the long_name when they are defined.

    :Params:

        -

    :Example:

        >>> change_loc(sst, 'u').id
        'sst_u'
        >>> change_loc(sst, 't', squeeze=True).id
        'sst'

    """

    # Squeeze physloc
    if not isinstance(squeeze, basestring):
        if squeeze:
            squeeze = get_physloc(var)
        else:
            squeeze = None

    # Change attributes
    # - get
    specs = change_loc_specs(toloc, squeeze=squeeze,
        names=var.id,
        standard_names = getattr(var, 'standard_name', None),
        long_names = getattr(var, 'long_name', None),
        )
    # - set
    var.id = specs['names']
    for att in 'standard_name', 'long_name':
        if att+'s' in specs:
            setattr(var, att, specs[att+'s'])
    # - cf name
    if hasattr(var, '_vacumm_cf_name'):
        var._vacumm_cf_name = change_loc_single(var._vacumm_cf_name, 'name', toloc,
            squeeze=squeeze)

    # Change axes and grid attributes
    if axes and cdms2.isVariable(var) or cdms2.isGrid(var):

        # Axes
        # - usual
        for meth in 'Longitude', 'Latitude', 'Time', 'Level':
            if hasattr(var, 'get'+meth):
                axismet = getattr(var, 'get'+meth) # var.getLongitude
                if axismet() is not None:
                    change_loc(axismet(), toloc, squeeze=squeeze)
        # - 2d axes
        if cdms2.isVariable(var) and isaxis(var) and var.ndim>2:
            for i in -1, -2:
                change_loc(var.getAxis(i), toloc, squeeze=squeeze)

        # Grid
        if cdms2.isVariable(var) and var.getGrid() is not None:
            change_loc(var.getGrid(), toloc, squeeze=squeeze)

    # Reference attribute
    set_loc(var, toloc)

    return var
예제 #8
0
print cdms2.isVariable(temp1)
# - Remark
print cdms2.createVariable is MV2.array
#  -> True         (These are the same functions !)
# - other methos
#   . initialization
temp2 = MV2.array(N.ones((3,3,3,3))).astype('f')
#   . attributes
temp2.id = 'temp'
temp2.long_name = 'Temperature'
temp2.units = 'degC'
temp2.set_fill_value(1.e20) # <=> temp2.setMissing(1.e20)
#   . axes
temp2.setAxisList([time,depth,lat,lon])
#   . or for example for each axis individually
temp2.setAxis(1,depth)

# Selection as for file
print temp2(time=("2006-08-01", "2006-08-03", "co")).shape

# The grid itself
# - get it
grid = temp2.getGrid()
# - check axes
grid.getLongitude() is temp2.getLongitude() is grid.getAxis(1) is temp2.getAxis(3)
# - create it!
grid2 = cdms2.createGenericGrid(lat,lon)
# - set it
temp2.setGrid(grid2)
print cdms2.isGrid(grid2)