This is the base class for classes that write output for Level 2 Full Physics.
More...
|
virtual | ~Output () |
|
virtual void | print (std::ostream &Os) const |
|
std::string | print_to_string () const |
| Print to string. More...
|
|
template<class S , class T , int D> |
void | register_data_source (const std::string &Dataset_name, blitz::Array< T, D >(S::*Pmf)() const, const boost::shared_ptr< S > &Src) |
| A common way to supply the metadata source is with a shared_ptr to an object, and a pointer to a member function. More...
|
|
template<class S , class T > |
void | register_data_source (const std::string &Dataset_name, T(S::*Pmf)() const, const boost::shared_ptr< S > &Src) |
| A common way to supply the metadata source is with a shared_ptr to an object, and a pointer to a member function. More...
|
|
template<class T , int D> |
void | register_data_source (const std::string &Dataset_name, const blitz::Array< T, D > &Val) |
| Handling for when data is constant. More...
|
|
template<class T > |
void | register_data_source (const std::string &Dataset_name, const T &Val) |
| Handling for when data is constant. More...
|
|
template<class T > |
void | register_data_source (const std::string &Dataset_name, boost::function< T > f) |
| Most general way to enter a Data source. More...
|
|
template<class S , class T > |
void | register_data_source_pad (const std::string &Dataset_name, blitz::Array< T, 1 >(S::*Pmf)() const, const boost::shared_ptr< S > &Src, int Full_size, T Fill_value) |
| There are several fields that are generated on the active levels only. More...
|
|
template<class S , class T > |
void | register_data_source_pad (const std::string &Dataset_name, blitz::Array< T, 2 >(S::*Pmf)() const, const boost::shared_ptr< S > &Src, int Full_size, T Fill_value) |
|
void | write () |
| Write out file. More...
|
|
void | write_best_attempt () |
| Write out the file, making a best attempt but ignoring all errors. More...
|
|
|
virtual void | end_because_of_error () |
| Notify when an error occurred. More...
|
|
virtual void | end_write () |
| Notify when we are done. More...
|
|
virtual void | start_write () |
| Notify derived class that we are starting to write data. More...
|
|
virtual void | write_data (const std::string &Dataset_name, int Val)=0 |
| Various write functions that derived classes. More...
|
|
virtual void | write_data (const std::string &Dataset_name, int64_t Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, double Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const std::string &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const char *Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< int, 1 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< std::string, 1 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< const char *, 1 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< double, 1 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< int, 2 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< std::string, 2 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< const char *, 2 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< double, 2 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< int, 3 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< std::string, 3 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< const char *, 3 > &Val)=0 |
|
virtual void | write_data (const std::string &Dataset_name, const blitz::Array< double, 3 > &Val)=0 |
|
This is the base class for classes that write output for Level 2 Full Physics.
Specific derived classes are used to write out files (e.g., OutputHdf, OutputHeritage), this class just captures the common behavior.
The output is designed to be decentralized. Classes register themselves as being able to supply data to be written out when requested, and the OutputHeritage class will request this data when it wants to write out the state of the system. This "write on
demand" design allows for scenarios such as "dump data out when an
error occurs" and "dump data on each iteration of the retrieval
solver", and "checkpoint results".
In many cases, the dataset and metadata is supplied either as a constant unchanging value, or as a pointer to a member function of an object supplied as a boost::shared_ptr<T>. The functions "register_data_source" have been overloaded to handle these common cases, most of the time these are the only functions you need. If you want to specify this with a more general boost::function, you can do so also.
The derived class need to supply various write_xxx functions to act as a data sink for this data.
This class only supports a fixed number of data types (int, double, std::string) and array rank (scalar, 1d, 2d, 3d). We also have a int64_t scalar, needed for the sounding id. We can easily extend this to other types and ranks if needed. For developers, you add a new types by adding a new write_data function to this class, along with adding the type to function "pass_to_write".
A write is intended to be atomic - either it completely succeeds or the output should be cleaned up and nothing produced. This prevents a file with "missing fields" from being generated.
In the case of a processing error, we may want to make an attempt to dump as much of the data as possible to help with diagnostics. A separate "write_best_attempt" routines is supplied, this will write out whatever we can, ignoring all errors. This can results in partial files, but in the case of a diagnostic file whatever we can get is better than nothing.
Definition at line 102 of file output.h.