Public Member Functions | Protected Types | Protected Attributes | Static Protected Attributes

GribFileData Class Reference

Inheritance diagram for GribFileData:
Inheritance graph
[legend]
Collaboration diagram for GribFileData:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 GribFileData (const string &name="", const string &mode="r", const bool open_file=false)
 Open and initialize the file.
 GribFileData (const GribFileData &fdata)
 Copy constructor.
virtual ~GribFileData ()
 Destructor.
GribFileDataoperator= (const GribFileData &fdata)
 Affectation.
void open_data_file ()
 open the file in read mode and create the API handle
void close_data_file ()
 close the file and free the ressources used by it
const bool is_file_loaded ()
 Check if the file has already been loaded.
const bool is_existing_dataset (const string &ds_name)
 check if ds_name is an existing dataset
const t_grib_var_descget_dataset_desc (const string &ds_name)
 return a reference the related variable descriptor
string get_msg_key (int i_msg, const string &key)
 for a given message, search the value of a key Raise an exception if the key does not exist
virtual void get_dataset_fill_value (const string &dataset_name, void *fill_value)
 read the fill value of the dataset given in parametre
vector< int > get_dataset_dimension (const string &dataset_name)
 access the size of the given dataset
int get_n_dataset ()
 return the number of datasets in the file
string get_dataset_name (int i_dataset)
 get the short name of the record at index i
string get_dataset_long_name (int i_dataset)
 get the extended name of the record at index i
string get_dataset_level (int i_dataset)
 get the level of the record at index i
void print_msg_keys (int i_msg, unsigned int keys_filter=GRIB_KEYS_ITERATOR_ALL_KEYS)
 print the keys of the message number i_msg The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html
void get_msg_keys (int i_msg, vector< pair< string, string > > &v_keys, unsigned int keys_filter=GRIB_KEYS_ITERATOR_ALL_KEYS)
 print the keys of the message number i_msg The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html
void print_keys (unsigned int keys_filter=GRIB_KEYS_ITERATOR_ALL_KEYS)
 display the keys of all messages The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html
int get_dataset_data_type (string dataset_name)
 retrieve the native data type of the specified dataset
void print_param_table (void)
 print all variables entries
void * read_data (void *data, const char *dataset_name, int *start=NULL, int *stride=NULL, int *edges=NULL, int rank=-1)
 read a variable data
template<typename T >
T * get_msg_data (const int i_msg, vector< int > &sz_dim, T *outdata=NULL)
 read the whole data buffer of a GRIB message Due to the GRIB format, the message is always read as double. The cast to T is done in a second time
const void print_msg_data (const int i_msg)
 print out the data buffer (as double) of a message
void init_selector (const char *ds_name, int *&start, int *&stride, int *&edges, int &rank, bool is_selector_allocated[3])
 guess the Region Of Interest selectors start, stride and edges if their are NULL
void free_selector (const bool *is_selector_allocated, int *start, int *stride, int *edges)
 frees the selectors that have been internally allocated
void check_selector (const char *ds_name, int *start, int *stride, int *edges, const int rank)
 check the validity of the start, stride and edges selectors for the given datasets. It mainly checks if one is out of bounds.
void get_scaling (int i_msg, double &scale, double &offset)
 retrieve the scaling factors of the given message
const int get_n_msg () const
 return the number of messages (ie records) in the file

Protected Types

typedef map< string,
t_grib_var_desc
t_var_table

Protected Attributes

FILE * fd
int n_msg
t_var_table var_table

Static Protected Attributes

static const string var_name_id = "shortName"
static const string parameter_code_id = "paramId"
static const string parameter_name_id = "parameterName"
static const string fill_value_id = "missingValue"
static const string scale_factor_id = "scaleValuesBy"
static const string add_offset_id = "offsetValuesBy"
static const string x_dim_id = "Ni"
static const string y_dim_id = "Nj"
static const string level_type_id = "typeOfLevel"
static const string level_id = "level"
static const string data_flag_id = "dataFlag"
static const string data_width_id = "bitsPerValue"
static const string data_id = "values"

Detailed Description

read access in a GRIB1 or GRIB2 file There is some specific words used in GRIB files :


Member Typedef Documentation

typedef map< string, t_grib_var_desc > GribFileData::t_var_table [protected]

current processed message maps the parametres, using their names, to its variable descriptor


Constructor & Destructor Documentation

GribFileData::GribFileData ( const string &  name = "",
const string &  mode = "r",
const bool  open_file = false 
)

Open and initialize the file.

Parameters:
name the filename of the file to be opened (including its path)
mode the opening mode : "r", "w" or "rw". At this time, only the reading "r" mode is fully implemented
open_file tell wether the file must be opened during the instantiation or not

References close_data_file(), fd, n_msg, and open_data_file().

GribFileData::GribFileData ( const GribFileData fdata  ) 

Copy constructor.

Parameters:
fdata the GribFileData object to be recopied.

References fd.


Member Function Documentation

void GribFileData::check_selector ( const char *  ds_name,
int *  start,
int *  stride,
int *  edges,
const int  rank 
)

check the validity of the start, stride and edges selectors for the given datasets. It mainly checks if one is out of bounds.

Exceptions:
g_exception in case of mismatch
Parameters:
ds_name name of the variable
start indices of extraction start. If NULL, start at (0,0) if rank is 2 ; (0,0,0) if rank is 3...
stride step between 2 read values. Ignored at this time
edges number of values to read along each dimension. if NULL, it will be all data along each dimension.
rank number of dimensions of the dataset

References get_dataset_dimension().

Referenced by read_data().

void GribFileData::free_selector ( const bool *  is_selector_allocated,
int *  start,
int *  stride,
int *  edges 
)

frees the selectors that have been internally allocated

Parameters:
is_selector_allocated tells which selector between start, stride and edges are internally allocated, and so, which one to free
start indices of extraction start. If NULL, start at (0,0) if rank is 2 ; (0,0,0) if rank is 3...
stride step between 2 read values. Ignored at this time
edges number of values to read along each dimension. if NULL, it will be all data along each dimension

Referenced by read_data().

int GribFileData::get_dataset_data_type ( string  dataset_name  ) 

retrieve the native data type of the specified dataset

Parameters:
dataset_name name of a dataset
Returns:
the datatype
const t_grib_var_desc& GribFileData::get_dataset_desc ( const string &  ds_name  )  [inline]

return a reference the related variable descriptor

Parameters:
ds_name name of a dataset
Returns:
a variable descriptor

Referenced by ECMWFFileData::get_nb_pressure_levels(), and ECMWFFileData::get_pressure_levels().

vector< int > GribFileData::get_dataset_dimension ( const string &  dataset_name  )  [virtual]

access the size of the given dataset

Parameters:
dataset_name the name of the dataset
Returns:
a vector that contains the dimensions of the dataset in each direction

Reimplemented from FileData.

References is_existing_dataset().

Referenced by check_selector().

void GribFileData::get_dataset_fill_value ( const string &  dataset_name,
void *  fill_value 
) [virtual]

read the fill value of the dataset given in parametre

Parameters:
dataset_name the name of the dataset where to read the fill value
fill_value (output) where to store the read value

Reimplemented from FileData.

string GribFileData::get_dataset_level ( int  i_dataset  )  [inline]

get the level of the record at index i

Parameters:
i_dataset index of the dataset
Returns:
the level of the dataset as a string

References level_id.

string GribFileData::get_dataset_long_name ( int  i_dataset  )  [inline]

get the extended name of the record at index i

Parameters:
i_dataset index of the dataset
Returns:
the extended name of the dataset as a string

References parameter_name_id.

string GribFileData::get_dataset_name ( int  i_dataset  )  [inline]

get the short name of the record at index i

Parameters:
i_dataset index of the dataset
Returns:
the name of the dataset as a string

References var_name_id.

template<typename T >
T * GribFileData::get_msg_data ( const int  i_msg,
vector< int > &  sz_dim,
T *  outdata = NULL 
)

read the whole data buffer of a GRIB message Due to the GRIB format, the message is always read as double. The cast to T is done in a second time

Warning:
returned buffer. If allocated internally (ie outdata is NULL), the caller must manage the deallocation
Parameters:
i_msg indice of the message to read
sz_dim number of values in the buffer along each dimensions, as [Y,X]
outdata output buffer. If NULL, allocation is done internally. If not NULL, it is supposed to already have the good size and no control will be done on it
Returns:
the message data buffer

References data_id, x_dim_id, and y_dim_id.

Referenced by read_data().

string GribFileData::get_msg_key ( int  i_msg,
const string &  key 
)

for a given message, search the value of a key Raise an exception if the key does not exist

Parameters:
i_msg indice of the searched message
key the searched key
Returns:
the value of the key

References get_msg_keys().

Referenced by ECMWFFileData::init_grid().

void GribFileData::get_msg_keys ( int  i_msg,
vector< pair< string, string > > &  v_keys,
unsigned int  keys_filter = GRIB_KEYS_ITERATOR_ALL_KEYS 
)

print the keys of the message number i_msg The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html

Parameters:
i_msg indice of the message to read
v_keys [OUT] vector that stores the key = value pairs as strings
keys_filter sets which type of keys should be printed. All are printed by default

Referenced by get_msg_key(), and print_msg_keys().

int GribFileData::get_n_dataset (  )  [inline]

return the number of datasets in the file

Returns:
the number of datasets
const int GribFileData::get_n_msg (  )  const [inline]

return the number of messages (ie records) in the file

Returns:
the number of messages in the file
void GribFileData::get_scaling ( int  i_msg,
double &  scale,
double &  offset 
) [inline]

retrieve the scaling factors of the given message

Parameters:
i_msg indice of the searched message
scale scale factor
offset add offset

References add_offset_id, and scale_factor_id.

void GribFileData::init_selector ( const char *  ds_name,
int *&  start,
int *&  stride,
int *&  edges,
int &  rank,
bool  is_selector_allocated[3] 
)

guess the Region Of Interest selectors start, stride and edges if their are NULL

Parameters:
ds_name [IN] name of the variable to read
start [INOUT] indices of extraction start. If NULL, start at (0,0) if rank is 2 ; (0,0,0) if rank is 3...
stride [INOUT] step between 2 read values. Ignored at this time
edges [INOUT] number of values to read along each dimension. if NULL, it will be all data along each dimension.
rank [INOUT] the number of dimensions of the dataset
is_selector_allocated [INOUT] tells which selector between start, stride and edges are allocated in the method. Used to correctly free them after use

Referenced by read_data().

const bool GribFileData::is_existing_dataset ( const string &  ds_name  )  [inline]

check if ds_name is an existing dataset

Parameters:
ds_name name of a dataset
Returns:
true if the dataset exists

Referenced by get_dataset_dimension(), and read_data().

GribFileData & GribFileData::operator= ( const GribFileData fdata  ) 

Affectation.

Parameters:
fd the GribFileData object to be recopied.

References fd.

void GribFileData::print_keys ( unsigned int  keys_filter = GRIB_KEYS_ITERATOR_ALL_KEYS  ) 

display the keys of all messages The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html

Parameters:
keys_filter sets which type of keys should be printed. All are printed by default

References fd, is_file_loaded(), and FileData::name.

const void GribFileData::print_msg_data ( const int  i_msg  ) 

print out the data buffer (as double) of a message

Parameters:
i_msg indice of the message to read
void GribFileData::print_msg_keys ( int  i_msg,
unsigned int  keys_filter = GRIB_KEYS_ITERATOR_ALL_KEYS 
)

print the keys of the message number i_msg The keys_filter parametre is set using the GRIB API constants as described in http://www.ecmwf.int/publications/manuals/grib_api/group__keys__iterator.html

Parameters:
i_msg indice of the message to read
keys_filter sets which type of keys should be printed. All are printed by default

References get_msg_keys().

void * GribFileData::read_data ( void *  data,
const char *  dataset_name,
int *  start = NULL,
int *  stride = NULL,
int *  edges = NULL,
int  rank = -1 
) [virtual]

read a variable data

Warning:
due to the GRIB basic types, all data will be returned as double
Parameters:
data the output buffer of read values as float64 (void* is used for interfaces compatibility). If NULL, allocation is done internally
dataset_name name of the variable to read
start indices of extraction start. If NULL, start at (0,0) if rank is 2 ; (0,0,0) if rank is 3...
stride step between 2 interesting values. Ignored at this time
edges number of values to read along each dimension. if NULL, it will be all data along each dimension.
rank the dimension of start, stride and edges
Returns:
a pointer to the read data array. It is useful when you let this method manage the allocation to update the allocated pointer to the data. If you've done it yourself or you are using a static buffer, it isn't necessary to catch this return pointer

Implements FileData.

References check_selector(), free_selector(), get_msg_data(), init_selector(), is_existing_dataset(), and is_file_loaded().


Member Data Documentation

const string GribFileData::add_offset_id = "offsetValuesBy" [static, protected]

scale offset key ID

Referenced by get_scaling().

const string GribFileData::data_flag_id = "dataFlag" [static, protected]

binary data description flag key ID

const string GribFileData::data_id = "values" [static, protected]

data values access key ID

Referenced by get_msg_data().

const string GribFileData::data_width_id = "bitsPerValue" [static, protected]

number of bits used by a value key ID

FILE* GribFileData::fd [protected]
const string GribFileData::fill_value_id = "missingValue" [static, protected]

fill value key ID

const string GribFileData::level_id = "level" [static, protected]

pressure level key ID

Referenced by get_dataset_level().

const string GribFileData::level_type_id = "typeOfLevel" [static, protected]

pressure type of level key ID. Type can be surface, isobaricInhPa or hybrid

int GribFileData::n_msg [protected]

the GRIB API low level file handle total number of messages

Referenced by GribFileData().

const string GribFileData::parameter_code_id = "paramId" [static, protected]

name of a parameter code key ID

const string GribFileData::parameter_name_id = "parameterName" [static, protected]

int name of a parameter

Referenced by get_dataset_long_name().

const string GribFileData::scale_factor_id = "scaleValuesBy" [static, protected]

scale factor key ID

Referenced by get_scaling().

const string GribFileData::var_name_id = "shortName" [static, protected]

name of a parameter key ID

Referenced by get_dataset_name().

const string GribFileData::x_dim_id = "Ni" [static, protected]

longitude dimension key ID

Referenced by get_msg_data().

const string GribFileData::y_dim_id = "Nj" [static, protected]

latitude dimension key ID

Referenced by get_msg_data().


The documentation for this class was generated from the following files: