ucar.nc2.dataset
Class CoordSysBuilder

java.lang.Object
  extended by ucar.nc2.dataset.CoordSysBuilder
All Implemented Interfaces:
CoordSysBuilderIF
Direct Known Subclasses:
ADASConvention, ATDRadarConvention, AvhrrConvention, AWIPSConvention, AWIPSsatConvention, BUFRConvention, COARDSConvention, Cosmic1Convention, DefaultConvention, EpicInsitu, FslWindProfiler, GIEFConvention, IFPSConvention, Jason2Convention, M3IOConvention, M3IOVGGridConvention, MADISStation, ModisSatellite, NppConvention, NsslRadarMosaicConvention, NUWGConvention, Suomi, UnidataObsConvention, WRFConvention

public class CoordSysBuilder
extends Object
implements CoordSysBuilderIF

Abstract class for implementing Convention-specific parsing of netCDF files.

You can use an NcML file alone (use registerNcML()) if file uses a convention attribute. If not, you must implement a class that implements isMine() to identify your files, and call wrapNcML in the augmentDataset method (see eg ATDRadarConvention class).

Subclasses Info:

 // identify which variables are coordinate axes
 // default: 1) coordinate variables 2) variables with _coordinateAxisType attribute 3) variables listed
 // in a coordinates attribute on another variable.
 findCoordinateAxes( ncDataset);
 

// identify which variables are used to describe coordinate system findCoordinateSystems( ncDataset); // identify which variables are used to describe coordinate transforms findCoordinateTransforms( ncDataset); // turn Variables into CoordinateAxis objects makeCoordinateAxes( ncDataset); // make Coordinate Systems for all Coordinate Systems Variables makeCoordinateSystems( ncDataset);

// Assign explicit CoordinateSystem objects to variables assignExplicitCoordinateSystems( ncDataset); makeCoordinateSystemsImplicit( ncDataset); if (useMaximalCoordSys) makeCoordinateSystemsMaximal( ncDataset);

makeCoordinateTransforms( ncDataset); assignCoordinateTransforms( ncDataset);

Author:
caron

Nested Class Summary
static interface CoordSysBuilder.ConventionNameOk
          Allow plug-ins to determine if it owns a file based on the file's Convention attribute.
 class CoordSysBuilder.VarProcess
          Wrap each variable in the dataset with a VarProcess object.
 
Field Summary
protected  String conventionName
           
protected  Map<Dimension,List<CoordSysBuilder.VarProcess>> coordVarMap
           
protected  boolean debug
           
protected static org.slf4j.Logger log
           
protected  Formatter parseInfo
           
static String resourcesDir
           
protected  boolean showRejects
           
protected  Formatter userAdvice
           
protected  List<CoordSysBuilder.VarProcess> varList
           
 
Constructor Summary
CoordSysBuilder()
           
 
Method Summary
protected  void addCoordinateVariable(Dimension dim, CoordSysBuilder.VarProcess vp)
           
 void addUserAdvice(String advice)
          Give advice for a user trying to figure out why things arent working
protected  void assignCoordinateSystemsExplicit(NetcdfDataset ncDataset)
          Assign explicit CoordinateSystem objects to variables.
protected  void assignCoordinateTransforms(NetcdfDataset ncDataset)
          Assign CoordinateTransform objects to Coordinate Systems.
 void augmentDataset(NetcdfDataset ncDataset, CancelTask cancelTask)
          Make changes to the dataset that are needed before processing scale/offset in NetcdfDataset.
 void buildCoordinateSystems(NetcdfDataset ncDataset)
          Heres where the work is to identify coordinate axes and coordinate systems.
static CoordSysBuilderIF factory(NetcdfDataset ds, CancelTask cancelTask)
          Get a CoordSysBuilder whose job it is to add Coordinate information to a NetcdfDataset.
protected  void findCoordinateAxes(NetcdfDataset ncDataset)
          Identify coordinate axes, set VarProcess.isCoordinateAxis = true.
protected  CoordSysBuilder.VarProcess findCoordinateAxis(String name)
           
protected  void findCoordinateSystems(NetcdfDataset ncDataset)
          Identify coordinate systems, set VarProcess.isCoordinateSystem = true.
protected  void findCoordinateTransforms(NetcdfDataset ncDataset)
          Identify coordinate transforms, set VarProcess.isCoordinateTransform = true.
protected  CoordSysBuilder.VarProcess findVarProcess(String fullName)
           
protected  AxisType getAxisType(NetcdfDataset ncDataset, VariableEnhanced v)
          Identify what kind of AxisType the named variable is.
 String getConventionUsed()
          Get the name of the Convention.
 String getParseInfo()
          Detailed information when the coordinate systems were parsed
static boolean getUseMaximalCoordSys()
          Get whether to make records into Structures.
 String getUserAdvice()
          Specific advice to a user about problems with the coordinate information in the file.
protected  boolean hasXY(List<CoordinateAxis> coordAxes)
           
protected  boolean isCoordinateAxisForVariable(Variable axis, VariableEnhanced v)
          Does this axis "fit" this variable.
protected  void makeCoordinateAxes(NetcdfDataset ncDataset)
          Take previously identified Coordinate Axis and Coordinate Variables and make them into a CoordinateAxis.
protected  void makeCoordinateSystems(NetcdfDataset ncDataset)
          Take all previously identified Coordinate Systems and create a CoordinateSystem object.
protected  void makeCoordinateSystemsImplicit(NetcdfDataset ncDataset)
          Make implicit CoordinateSystem objects for variables that dont already have one, by using the variables' list of coordinate axes, and any coordinateVariables for it.
protected  void makeCoordinateSystemsMaximal(NetcdfDataset ncDataset)
          If a variable still doesnt have a coordinate system, use hueristics to try to find one that was probably forgotten.
protected  CoordinateTransform makeCoordinateTransform(NetcdfDataset ds, Variable ctv)
           
protected  void makeCoordinateTransforms(NetcdfDataset ncDataset)
          Take all previously identified Coordinate Transforms and create a CoordinateTransform object by calling CoordTransBuilder.makeCoordinateTransform().
protected  VariableDS makeCoordinateTransformVariable(NetcdfDataset ds, CoordinateTransform ct)
           
static VariableDS makeDummyTransformVariable(NetcdfDataset ds, CoordinateTransform ct)
          Deprecated. use CoordTransBuilder.makeDummyTransformVariable
static void registerConvention(String conventionName, Class c)
          Register a class that implements a Convention.
static void registerConvention(String conventionName, Class c, CoordSysBuilder.ConventionNameOk match)
          Register a class that implements a Convention.
static void registerConvention(String conventionName, String className)
          Register a class that implements a Convention.
static void registerNcML(String conventionName, String ncmlLocation)
          Register an NcML file that implements a Convention by wrappping the dataset in the NcML.
 void setConventionUsed(String convName)
          Pass in the name of the Convention used to locate this CoordSysBuilderIF.
static void setUseMaximalCoordSys(boolean b)
          If true, assign implicit CoordinateSystem objects to variables that dont have one yet.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

resourcesDir

public static final String resourcesDir
See Also:
Constant Field Values

log

protected static org.slf4j.Logger log

conventionName

protected String conventionName

varList

protected List<CoordSysBuilder.VarProcess> varList

coordVarMap

protected Map<Dimension,List<CoordSysBuilder.VarProcess>> coordVarMap

parseInfo

protected Formatter parseInfo

userAdvice

protected Formatter userAdvice

debug

protected boolean debug

showRejects

protected boolean showRejects
Constructor Detail

CoordSysBuilder

public CoordSysBuilder()
Method Detail

registerNcML

public static void registerNcML(String conventionName,
                                String ncmlLocation)
Register an NcML file that implements a Convention by wrappping the dataset in the NcML. It is then processed by CoordSysBuilder, using the _Coordinate attributes.

Parameters:
conventionName - name of Convention, must be in the "Conventions" global attribute.
ncmlLocation - location of NcML file, may be local file or URL.
See Also:
NcMLReader.wrapNcML(ucar.nc2.dataset.NetcdfDataset, java.lang.String, ucar.nc2.util.CancelTask)

registerConvention

public static void registerConvention(String conventionName,
                                      Class c)
Register a class that implements a Convention. Will match (ignoring case) the COnvention name.

Parameters:
conventionName - name of Convention. This name will be used to look in the "Conventions" global attribute. Otherwise, you must implement the isMine() static method.
c - implementation of CoordSysBuilderIF that parses those kinds of netcdf files.

registerConvention

public static void registerConvention(String conventionName,
                                      Class c,
                                      CoordSysBuilder.ConventionNameOk match)
Register a class that implements a Convention.

Parameters:
conventionName - name of Convention. This name will be used to look in the "Conventions" global attribute. Otherwise, you must implement the isMine() static method.
match - pass in your own matcher. if null, equalsIgnoreCase() will be used.
c - implementation of CoordSysBuilderIF that parses those kinds of netcdf files.

registerConvention

public static void registerConvention(String conventionName,
                                      String className)
                               throws ClassNotFoundException
Register a class that implements a Convention.

Parameters:
conventionName - name of Convention. This name will be used to look in the "Conventions" global attribute. Otherwise, you must implement the isMine() static method.
className - name of class that implements CoordSysBuilderIF.
Throws:
ClassNotFoundException - if class could not be loaded

setUseMaximalCoordSys

public static void setUseMaximalCoordSys(boolean b)
If true, assign implicit CoordinateSystem objects to variables that dont have one yet. Default value is false.

Parameters:
b - true if if you want to guess at Coordinate Systems
See Also:
makeCoordinateSystemsMaximal(ucar.nc2.dataset.NetcdfDataset)

getUseMaximalCoordSys

public static boolean getUseMaximalCoordSys()
Get whether to make records into Structures.

Returns:
whether to make records into Structures.

factory

public static CoordSysBuilderIF factory(NetcdfDataset ds,
                                        CancelTask cancelTask)
                                 throws IOException
Get a CoordSysBuilder whose job it is to add Coordinate information to a NetcdfDataset.

Parameters:
ds - the NetcdfDataset to modify
cancelTask - allow user to bail out.
Returns:
the builder used
Throws:
IOException - on io error
See Also:
NetcdfDataset.enhance(ucar.nc2.dataset.NetcdfDataset, java.util.Set, ucar.nc2.util.CancelTask)

setConventionUsed

public void setConventionUsed(String convName)
Description copied from interface: CoordSysBuilderIF
Pass in the name of the Convention used to locate this CoordSysBuilderIF.

Specified by:
setConventionUsed in interface CoordSysBuilderIF
Parameters:
convName - the name of the Convention

getConventionUsed

public String getConventionUsed()
Description copied from interface: CoordSysBuilderIF
Get the name of the Convention. In the case where the Convention attribute is not set in the file, this name cannot be used to identify the Convention. The isMine() method is called instead.

Specified by:
getConventionUsed in interface CoordSysBuilderIF
Returns:
Convention name

addUserAdvice

public void addUserAdvice(String advice)
Description copied from interface: CoordSysBuilderIF
Give advice for a user trying to figure out why things arent working

Specified by:
addUserAdvice in interface CoordSysBuilderIF
Parameters:
advice - add this advice to the User Advice String

getParseInfo

public String getParseInfo()
Description copied from interface: CoordSysBuilderIF
Detailed information when the coordinate systems were parsed

Specified by:
getParseInfo in interface CoordSysBuilderIF
Returns:
String containing parsing info

getUserAdvice

public String getUserAdvice()
Description copied from interface: CoordSysBuilderIF
Specific advice to a user about problems with the coordinate information in the file.

Specified by:
getUserAdvice in interface CoordSysBuilderIF
Returns:
String containing advice to a user about problems with the coordinate information in the file.

augmentDataset

public void augmentDataset(NetcdfDataset ncDataset,
                           CancelTask cancelTask)
                    throws IOException
Description copied from interface: CoordSysBuilderIF
Make changes to the dataset that are needed before processing scale/offset in NetcdfDataset.

Specified by:
augmentDataset in interface CoordSysBuilderIF
Parameters:
ncDataset - modify this dataset
cancelTask - give user a chance to bail out
Throws:
IOException - on error

getAxisType

protected AxisType getAxisType(NetcdfDataset ncDataset,
                               VariableEnhanced v)
Identify what kind of AxisType the named variable is. Only called for variables already identified as Coordinate Axes. Default null - subclasses can override.

Parameters:
ncDataset - for this dataset
v - a variable alreaddy identified as a Coodinate Axis
Returns:
AxisType or null if unknown.

buildCoordinateSystems

public void buildCoordinateSystems(NetcdfDataset ncDataset)
Heres where the work is to identify coordinate axes and coordinate systems.

Specified by:
buildCoordinateSystems in interface CoordSysBuilderIF
Parameters:
ncDataset - modify this dataset

findCoordinateAxes

protected void findCoordinateAxes(NetcdfDataset ncDataset)
Identify coordinate axes, set VarProcess.isCoordinateAxis = true. Default is to look for those referenced by _CoordinateAxes attribute. Note coordinate variables are already identified.

Parameters:
ncDataset - why

findCoordinateSystems

protected void findCoordinateSystems(NetcdfDataset ncDataset)
Identify coordinate systems, set VarProcess.isCoordinateSystem = true. Default is to look for those referenced by _CoordinateSystems attribute.

Parameters:
ncDataset - why

findCoordinateTransforms

protected void findCoordinateTransforms(NetcdfDataset ncDataset)
Identify coordinate transforms, set VarProcess.isCoordinateTransform = true. Default is to look for those referenced by _CoordinateTransforms attribute ( or has a _CoordinateTransformType attribute, done in VarProcess constructor)

Parameters:
ncDataset - why

makeCoordinateAxes

protected void makeCoordinateAxes(NetcdfDataset ncDataset)
Take previously identified Coordinate Axis and Coordinate Variables and make them into a CoordinateAxis. Uses the getAxisType() method to figure out the type, if not already set.

Parameters:
ncDataset - containing dataset

makeCoordinateSystems

protected void makeCoordinateSystems(NetcdfDataset ncDataset)
Take all previously identified Coordinate Systems and create a CoordinateSystem object.

Parameters:
ncDataset - why

assignCoordinateSystemsExplicit

protected void assignCoordinateSystemsExplicit(NetcdfDataset ncDataset)
Assign explicit CoordinateSystem objects to variables.

Parameters:
ncDataset - why

makeCoordinateSystemsImplicit

protected void makeCoordinateSystemsImplicit(NetcdfDataset ncDataset)
Make implicit CoordinateSystem objects for variables that dont already have one, by using the variables' list of coordinate axes, and any coordinateVariables for it. Must be at least 2 axes.

Parameters:
ncDataset - why

makeCoordinateSystemsMaximal

protected void makeCoordinateSystemsMaximal(NetcdfDataset ncDataset)
If a variable still doesnt have a coordinate system, use hueristics to try to find one that was probably forgotten. Look through all existing CS. create a subset of axes that fits the variable. Choose the one with highest rank. It must have X,Y or lat,lon. If so, add it.

Parameters:
ncDataset - why

isCoordinateAxisForVariable

protected boolean isCoordinateAxisForVariable(Variable axis,
                                              VariableEnhanced v)
Does this axis "fit" this variable. True if all of the dimensions in the axis also appear in the variable. If char variable, last dimension is left out.

Parameters:
axis - check if this axis is ok for the given variable
v - the given variable
Returns:
true if all of the dimensions in the axis also appear in the variable.

hasXY

protected boolean hasXY(List<CoordinateAxis> coordAxes)

makeCoordinateTransforms

protected void makeCoordinateTransforms(NetcdfDataset ncDataset)
Take all previously identified Coordinate Transforms and create a CoordinateTransform object by calling CoordTransBuilder.makeCoordinateTransform().

Parameters:
ncDataset - why

makeCoordinateTransform

protected CoordinateTransform makeCoordinateTransform(NetcdfDataset ds,
                                                      Variable ctv)

assignCoordinateTransforms

protected void assignCoordinateTransforms(NetcdfDataset ncDataset)
Assign CoordinateTransform objects to Coordinate Systems.

Parameters:
ncDataset - why

findVarProcess

protected CoordSysBuilder.VarProcess findVarProcess(String fullName)

findCoordinateAxis

protected CoordSysBuilder.VarProcess findCoordinateAxis(String name)

addCoordinateVariable

protected void addCoordinateVariable(Dimension dim,
                                     CoordSysBuilder.VarProcess vp)

makeCoordinateTransformVariable

protected VariableDS makeCoordinateTransformVariable(NetcdfDataset ds,
                                                     CoordinateTransform ct)

makeDummyTransformVariable

public static VariableDS makeDummyTransformVariable(NetcdfDataset ds,
                                                    CoordinateTransform ct)
Deprecated. use CoordTransBuilder.makeDummyTransformVariable



Copyright © 1999-2011 UCAR/Unidata. All Rights Reserved.