Changes between Version 13 and Version 14 of PointObservationConventions


Ignore:
Timestamp:
10/27/09 15:26:37 (10 years ago)
Author:
caron
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PointObservationConventions

    v13 v14  
    11= Chapter 9 Point Observation Data =
    22
    3 Section 5 explains how to specify Coordinate Systems using coordinate variables and auxiliary coordinate variables. This section extends and modifies that framework for point observational data.
     3Chapter 5 explains how to specify Coordinate Systems using coordinate variables and auxiliary coordinate variables. This section extends and modifies that framework for point observational data, and sections 5.4 and 5.5 are deprecated.
    44
    55== 9.1 Overview ==
     
    99Point data files contain collections of point observation data of one of the following '''point feature types''', which reflect the connectedness of common observational datasets in the earth sciences:
    1010
    11     * '''point''': one or more parameters measured at one point in time and space
     11    * '''point''': one or more parameters measured at a set of points in time and space
    1212    * '''stationTimeSeries''': a time-series of data points at the same location, with varying time
    1313    * '''trajectory''': a connected set of data points along a 1D curve in time and space
     
    1616    * '''section''':  a collection of profiles which originate along a trajectory.
    1717
    18 You cannot mix multiple types of data in the same file. A global attribute CF:featureType indicates the feature type used in a particular file, and its value must be one of the above names in order to be correctly processed as point observation data.
    19 
    20 All point data must have lat, lon and time coordinate or auxiliary coordinate variables, which are identified according to sections 4 and 5 of this document. Some feature types allow the vertical coordinate to be optional, and some require it.
     18You cannot mix multiple types of data in the same file. A global attribute CF:featureType indicates the feature type used in a particular file, and its value must be one of the above names in order to be correctly processed as point observation data. (The use of the prefix CF: assumes that TRAC ticket #27 passes, will be removed/changed if needed)
     19
     20All point data must have lat, lon and time coordinate or auxiliary coordinate variables, which are identified according to Chapter 4 and 5 of this document. Some feature types allow the vertical coordinate to be optional, and some require it.
    2121
    2222There are two main ways to represent point data in the classic netCDF model:
     
    3131    * the lat, lon and time coordinates must always exist; a vertical coordinate may exist
    3232    * coordinates may use missing values, but must do so in a consistent way. Missing coordinate values indicate that the point observation should be skipped.
    33     * coordinates are identified with the "coordinates" attribute on the data variables, as specified in sections 4 and 5
     33    * coordinates are identified with the "coordinates" attribute on the data variables, as specified in Chapter 4 and 5
    3434    * index numbering, if used, is always 0 based
    3535    * variables are associated together by having a common, outer dimension
     
    8686   * There must always be a station variable (of any type) with standard_name attribute "'''station_id'''", whose values uniquely identify the station.
    8787   * The station_id variable may use missing values. This allows one to reserve more space than is needed for stations.
    88    * There may be station variables with standard_name attribute "'''station_desc'''", "'''station_altitude'''", and "'''station_wmoid'''"..
     88   * There may be station variables with standard_name attribute "'''station_desc'''", "'''station_altitude'''", and "'''station_WMO_id'''"..
    8989
    9090=== 9.3.1 Multidimensional representation ===
     
    140140=== 9.3.2 Ragged array (contiguous) representation ===
    141141
    142 When the number of observations at each station vary, one can use the 'contiguous ragged array' representation if you are able to completely control the order in which the observations are written. Add a '''rowSize''' station variable specifying the number of observations for each station. The observations for each station are stored sequentially, first for the station with index = 0, then the station with index = 1, etc.
     142When the number of observations at each station vary, one can use the 'contiguous ragged array' representation if you are able to completely control the order in which the observations are written. Add a '''row_size''' station variable specifying the number of observations for each station. The observations for each station are stored sequentially, first for the station with index = 0, then the station with index = 1, etc.
    143143
    144144{{{
     
    162162  int station_info(station) ;
    163163    station_info:long_name = "some kind of station info" ;
    164   int nobs(station) ;
    165     nobs:long_name = "number of observations for this station " ;
    166     nobs:standard_name = "ragged_rowSize" ;
     164  int row_size(station) ;
     165    row_size:long_name = "number of observations for this station " ;
     166    row_size:standard_name = "ragged_row_size" ;
    167167
    168168  double time(obs) ;
     
    186186
    187187{{{
    188   rowStart(stn) to rowStart(stn) + nobs(stn) - 1
     188  rowStart(stn) to rowStart(stn) + row_size(stn) - 1
    189189
    190190where
    191191
    192192  rowStart(stn) = 0 if stn = 0   
    193   rowStart(stn) = rowStart(stn-1) + nobs(stn-1) if i > 0
    194 
    195 }}}
    196 
    197 The rowSize variable contains the number of observations for each station, and is identified by having a standard_name of "'''ragged_rowSize'''". It must have the station dimension as its single dimension, and must be type integer.
     193  rowStart(stn) = rowStart(stn-1) + row_size(stn-1) if i > 0
     194
     195}}}
     196
     197The row_size variable contains the number of observations for each station, and is identified by having a standard_name of "'''ragged_row_size'''". It must have the station dimension as its single dimension, and must be type integer.
    198198
    199199The single dimension of the time coordinate is the obs dimension. All variables having the obs dimension as their outer dimension are observation variables. The obs dimension may use the unlimited dimension or not.
     
    201201=== 9.3.3 Ragged array (indexed) representation ===
    202202
    203 When the number of observations at each station vary, and the observations cannot be written in order, one can use the 'indexed ragged array' representation. Add a '''parentIndex''' observation variable specifying the station index that the observation belongs to:
     203When the number of observations at each station vary, and the observations cannot be written in order, one can use the 'indexed ragged array' representation. Add a '''parent_index''' observation variable specifying the station index that the observation belongs to:
    204204
    205205{{{
     
    226226  int stationIndex(obs) ;
    227227    stationIndex:long_name = "which station this obs is for" ;
    228     stationIndex:standard_name = "ragged_parentIndex" ;
     228    stationIndex:standard_name = "ragged_parent_index" ;
    229229  double time(obs) ;
    230230    time:long_name = "time of measurement" ;
     
    244244}}}
    245245
    246 The humidity(i) and temp(i) data are associated with the coordinate values time(i), lat(s), lon(s), and optionally alt(s), where s = stationIndex(i). The stationIndex variable is identified by having a standard_name of "'''ragged_parentIndex'''".  It must have the obs dimension as its single dimension, and must be type integer.
     246The humidity(i) and temp(i) data are associated with the coordinate values time(i), lat(s), lon(s), and optionally alt(s), where s = stationIndex(i). The stationIndex variable is identified by having a standard_name of "'''ragged_parent_index'''".  It must have the obs dimension as its single dimension, and must be type integer.
    247247
    248248The single dimension of the time coordinate is the obs dimension. All variables having the obs dimension as their outer dimension are observation variables. The obs dimension may use the unlimited dimension or not.
     
    337337Point data may be taken along a flight path or ship path, constituting a connected set of points called a trajectory.
    338338
    339 Some assumption are common to all trajectory representations:
     339Some assumptions are common to all trajectory representations:
    340340
    341341   * There must always be a variable (of any type) with standard_name attribute "'''trajectory_id'''", whose values uniquely identify the trajectory.
    342342   * The outer dimension of the trajectory_id variable is the 'trajectory dimension'.
    343    * All variables that have the trajectory dimension as their single dimension are considered to be information about that trajectory
     343   * All variables that have the trajectory dimension as their only dimension are considered to be information about that trajectory
    344344   * The trajectory_id variable may use missing values. This allows one to reserve more space than is needed.
    345345 
     
    442442=== 9.4.3 Ragged array (contiguous) representation ===
    443443
    444 When the number of observations for each trajectory varies, and one can control the order of writing, one can use the contiguous ragged array representation. One stores the set of observations for each trajectory contiguously along the obs dimension, and adds a rowSize variable specifying the number of observations for each trajectory:
     444When the number of observations for each trajectory varies, and one can control the order of writing, one can use the contiguous ragged array representation. One stores the set of observations for each trajectory contiguously along the obs dimension, and adds a row_size variable specifying the number of observations for each trajectory:
    445445
    446446{{{
     
    454454  int rowSize(trajectory) ;
    455455    rowSize:long_name = "number of obs for this trajectory " ;
    456     rowSize:standard_name = "ragged_rowSize" ;
     456    rowSize:standard_name = "ragged_row_size" ;
    457457
    458458  double time(obs) ;
     
    487487The O3(i) and NO3(i) data are associated with the coordinate values time(i), lat(i), lon(i), and alt(i). All observations for one trajectory are contiguous along the obs dimension, and should be time ordered. All variables that have trajectory as their single dimension are considered to be information about that trajectory. The obs dimension may use the unlimited dimension or not.
    488488
    489 The rowSize variable contains the number of observations for each trajectory, and is identified by having a standard_name of "ragged_rowSize". It must have the trajectory dimension as its single dimension. The observations are associated wit the trajectory using the same algorithm as in 9.3.2.
     489The row_size variable contains the number of observations for each trajectory, and is identified by having a standard_name of "ragged_row_size". It must have the trajectory dimension as its single dimension. The observations are associated with the trajectory using the same algorithm as in 9.3.2.
    490490
    491491=== 9.4.4 Ragged array (indexed) representation ===
    492492
    493 When the number of observations at each trajectory vary, and the observations cannot be written in order, one can use the indexed ragged array representation. Add a parentIndex field specifying the trajectory index that the observation belongs to:
     493When the number of observations at each trajectory vary, and the observations cannot be written in order, one can use the indexed ragged array representation. Add a parent_index field specifying the trajectory index that the observation belongs to:
    494494
    495495{{{
     
    504504  int trajectory_index(obs) ;
    505505    trajectory_index:long_name = "index of trajectory this obs belongs to " ;
    506     trajectory_index:standard_name = "ragged_parentIndex" ;
     506    trajectory_index:standard_name = "ragged_parent_index" ;
    507507  double time(obs) ;
    508508    time:long_name = "time" ;
     
    536536The O3(i) and NO3(i) data are associated with the coordinate values time(i), lat(i), lon(i), and alt(i). All observations for one trajectory will have the same trajectory index value, and should be time ordered. The obs dimension may use the unlimited dimension or not.
    537537
    538 The parentIndex variable is identified by having a standard_name of "ragged_parentIndex". It must have the obs dimension as its single dimension.
     538The parent_index variable is identified by having a standard_name of "ragged_parent_index". It must have the obs dimension as its single dimension.
    539539
    540540 
    541541== 9.5 Profile Data ==
    542542
    543 A series of connected observations along a vertical line, like an atmospheric or ocean sounding, is called a profile. The lat,lon locations are factored out into the profile.
    544 
    545 Some assumption are common to all profile representations:
     543A series of connected observations along a vertical line, like an atmospheric or ocean sounding, is called a profile. The lat, lon locations are factored out into the profile.
     544
     545Some assumptions are common to all profile representations:
    546546
    547547   * There must always be a variable (of any type) with standard_name attribute "'''profile_id'''", whose values uniquely identify the profile.
    548    * The outer dimension of the profile_id variable is the 'profiledimension'.
    549    * All variables that have the profile dimension as their single dimension are considered to be information about that profile
     548   * The outer dimension of the profile_id variable is the 'profile dimension'.
     549   * All variables that have the profile dimension as their only dimension are considered to be information about that profile
    550550   * The profile_id variable may use missing values. This allows one to reserve more space than is needed.
    551551
     
    652652=== 9.5.3 Ragged array (contiguous) representation ===
    653653
    654 When the number of vertical levels for each profile varies, one can use the contiguous ragged array representation. One stores the set of observation for each profile contiguously along the obs dimension, and adds a rowSize variable specifying the number of observations for each profile:
     654When the number of vertical levels for each profile varies, one can use the contiguous ragged array representation. One stores the set of observation for each profile contiguously along the obs dimension, and adds a row_size variable specifying the number of observations for each profile:
    655655
    656656{{{
     
    673673  int rowSize(profile) ;
    674674    rowSize:long_name = "number of obs for this profile " ;
    675     rowSize:standard_name = "ragged_rowSize" ;
     675    rowSize:standard_name = "ragged_row_size" ;
    676676
    677677  float z(obs) ;
     
    703703=== 9.5.4 Ragged array (indexed) representation ===
    704704
    705 When the number of vertical levels for each profile varies, and one cant write them contiguously, one can use the indexed ragged array representation. Add a parentIndex field specifying the profile index that the observation belongs to:
     705When the number of vertical levels for each profile varies, and one cant write them contiguously, one can use the indexed ragged array representation. Add a parent_index field specifying the profile index that the observation belongs to:
    706706
    707707{{{
     
    725725  int parentIndex(obs) ;
    726726    parentIndex:long_name = "index of profile " ;
    727     parentIndex:standard_name = "ragged_parentIndex" ;
     727    parentIndex:standard_name = "ragged_parent_index" ;
    728728
    729729  float z(obs) ;
     
    751751}}}
    752752
    753 The pressure(i), temperature(i), and humidity(i) data is associated with the coordinate values time(p), z(i), lat(p), and lon(p), where p=parentIndex(i). The time coordinate may depend on z also, e.g. time(p,z).
     753The pressure(i), temperature(i), and humidity(i) data is associated with the coordinate values time(p), z(i), lat(p), and lon(p), where p=parent_index(i). The time coordinate may depend on z also, e.g. time(p,z).
    754754
    755755
     
    764764   * There must always be a station variable (of any type) with standard_name attribute "'''station_id'''", whose values uniquely identify the station.
    765765   * The station_id variable may use missing values. This allows one to reserve more space than is needed for stations.
    766    * There may be station variables with standard_name attribute "'''station_desc'''", "'''station_altitude'''", and "'''station_wmoid'''"..
     766   * There may be station variables with standard_name attribute "'''station_desc'''", "'''station_altitude'''", and "'''station_WMO_id'''"..
    767767
    768768=== 9.6.1 Multidimensional representation ===
     
    906906    time:long_name = "time" ;
    907907    time:units = "days since 1970-01-01 00:00:00" ;
    908   int stationIndex(profile) ;
    909     stationIndex:long_name = "which station this obs is for" ;
    910     stationIndex:standard_name = "ragged_parentIndex" ;
    911   int rowSize(profile) ;
    912     rowSize:long_name = "number of obs for this profile " ;
    913     rowSize:standard_name = "ragged_rowSize" ;
     908  int station_index(profile) ;
     909    station_index:long_name = "which station this obs is for" ;
     910    station_index:standard_name = "ragged_parent_index" ;
     911  int row_size(profile) ;
     912    row_size:long_name = "number of obs for this profile " ;
     913    row_size:standard_name = "ragged_row_size" ;
    914914
    915915  float z(obs) ;
     
    937937}}}
    938938
    939 The profile is associated with a station using the stationIndex(profile). For each profile, the observations must be written contiguously, and the number of obs for each profile written in numRows(profile).
    940 
    941 The pressure(i), temperature(i), and humidity(i) data is associated with the coordinate values time(p), z(i), lat(s), and lon(s), where s = stationIndex(p). The time coordinate may depend on z also, e.g. time(obs) instead of time(profile).
     939The profile is associated with a station using the station_index(profile). For each profile, the observations must be written contiguously, and the number of obs for each profile written in row_size(profile).
     940
     941The pressure(i), temperature(i), and humidity(i) data is associated with the coordinate values time(p), z(i), lat(s), and lon(s), where s = station_index(p). The time coordinate may depend on z also, e.g. time(obs) instead of time(profile).
    942942
    943943=== 9.6.4 Flattened representation of multidimensional profiles ===
     
    990990}}}
    991991
    992 This is the same as 9.5.1, except that a station_id variable is added for each profile, which associates the profile to a station. The station information is repeated for each profile and should be the same for all profiles with the same station_id. Note that therre is no station dimension, but station description, altitude and wmo_id can be specified using the standard_name attributes "'''station_desc'''", "'''station_altitude'''", and "'''station_wmoid'''".
     992This is the same as 9.5.1, except that a station_id variable is added for each profile, which associates the profile to a station. The station information is repeated for each profile and should be the same for all profiles with the same station_id. Note that there is no station dimension, but station description, altitude and wmo_id can be specified using the standard_name attributes "'''station_desc'''", "'''station_altitude'''", and "'''station_wmoid'''".
    993993
    994994== 9.7 Section Data ==
     
    996996When profiles are taken along a trajectory, one gets a time series of profiles called a section. This looks like a collection of profiles (see 9.5), except that the profile locations are assumed to be a connected set of points along a trajectory.
    997997
    998 Some assumption are common to all section representations:
     998Some assumptions are common to all section representations:
    999999
    10001000   * There must be a variable (of any type) with standard_name attribute "'''section_id'''", whose values uniquely identify the section.
    10011001   * The outer dimension of the section_id variable is the 'section dimension'.
    1002    * All variables that have the trajectory dimension as their single dimension are considered to be information about that section
     1002   * All variables that have the section dimension as their only dimension are considered to be information about that section
    10031003   * The section_id variable may use missing values. This allows one to reserve more space than is needed.
    10041004
     
    11291129    lat:long_name = "latitude" ;
    11301130    lat:units = "degrees_north" ;
    1131   int rowSize(profile) ;
    1132     rowSize:long_name = "number of obs for this profile " ;
    1133     rowSize:standard_name = "ragged_rowSize" ;
    1134   int sectionIndex(profile) ;
    1135     sectionIndex:long_name = "which section this profileis for" ;
    1136     sectionIndex:standard_name = "ragged_parentIndex" ;
     1131  int row_size(profile) ;
     1132    row_size:long_name = "number of obs for this profile " ;
     1133    row_size:standard_name = "ragged_row_size" ;
     1134  int section_index(profile) ;
     1135    section_index:long_name = "which section this profile is for" ;
     1136    section_index:standard_name = "ragged_parent_index" ;
    11371137
    11381138  float z(obs) ;
     
    11601160}}}
    11611161
    1162 The profile is associated with a section using the sectionIndex(profile). For each profile, the observations must be written contiguously.
     1162The profile is associated with a section using the section_index(profile). For each profile, the observations must be written contiguously, and the number of obs in each profile is stored in row_size(profile).
    11631163
    11641164The pressure(i), temperature(i), and humidity(i) data is associated with the coordinate values time(p), z(i), lat(p), and lon(p). The time coordinate may depend on z also, eg time(obs) instead of time(profile).
     
    12171217= New standard names =
    12181218
    1219    * ragged_rowSize
    1220    * ragged_parentIndex
     1219   * ragged_row_size
     1220   * ragged_parent_index
    12211221   * station_id
    12221222   * station_desc
    12231223   * station_altitude
    1224    * station_wmoid
     1224   * station_WMO_id
    12251225   * profile_id
    12261226   * trajectory_id
    12271227   * section_id
    12281228
     1229= New global attribute =
     1230
     1231'''CF:featureType''' can take one of these values:
     1232 
     1233  * point
     1234  * stationTimeSeries
     1235  * trajectory
     1236  * profile
     1237  * stationProfile
     1238  * section
     1239 
     1240
    12291241= Also see =
    12301242