8 #ifndef MAINS_TIMEIODAIO_H_
9 #define MAINS_TIMEIODAIO_H_
14 #include "eckit/config/LocalConfiguration.h"
16 #include "oops/base/Observations.h"
17 #include "oops/base/ObsSpaces.h"
18 #include "oops/mpi/mpi.h"
19 #include "oops/runs/Application.h"
20 #include "oops/util/DateTime.h"
21 #include "oops/util/Duration.h"
22 #include "oops/util/Logger.h"
24 #include "ioda/io/IodaIO.h"
25 #include "ioda/io/IodaIOfactory.h"
26 #include "ioda/core/IodaUtils.h"
30 template <
typename MODEL>
class TimeIodaIO :
public oops::Application {
35 explicit TimeIodaIO(
const eckit::mpi::Comm & comm = oops::mpi::world()) : Application(comm) {}
39 int execute(
const eckit::Configuration & fullConfig)
const {
41 const util::DateTime winbgn(fullConfig.getString(
"window begin"));
42 const util::DateTime winend(fullConfig.getString(
"window end"));
43 oops::Log::info() <<
"Observation window begin:" << winbgn << std::endl;
44 oops::Log::info() <<
"Observation window end:" << winend << std::endl;
47 eckit::LocalConfiguration obsconf(fullConfig,
"observations");
48 oops::Log::debug() <<
"Observations configuration is:" << obsconf << std::endl;
49 ObsSpaces_ obsdb(obsconf, this->getComm(), winbgn, winend);
51 std::vector<eckit::LocalConfiguration> conf;
52 fullConfig.get(
"observations", conf);
54 for (std::size_t jj = 0; jj < obsdb.size(); ++jj) {
55 oops::Log::info() <<
"ObsSpace: " << obsdb[jj].obsname() << std::endl;
56 oops::Log::info() <<
" Number of locations: " << obsdb[jj].obsspace().nlocs()
58 oops::Log::info() <<
" Number of variables: " << obsdb[jj].obsspace().nvars()
60 oops::Log::info() <<
" Number of records: " << obsdb[jj].obsspace().nrecs()
69 return "oops::TimeIodaIO<" + MODEL::name() +
">";
76 #endif // MAINS_TIMEIODAIO_H_