8 #include "ufo/Locations.h"
13 #include "eckit/config/Configuration.h"
14 #include "eckit/exception/Exceptions.h"
16 #include "ioda/ObsSpace.h"
18 #include "oops/mpi/mpi.h"
19 #include "oops/util/DateTime.h"
20 #include "oops/util/Logger.h"
27 const std::vector<util::DateTime> & times,
28 std::shared_ptr<const ioda::Distribution> dist)
29 : dist_(std::move(dist)), lons_(lons), lats_(lats), times_(times) {
32 oops::Log::trace() <<
"ufo::Locations::Locations done" << std::endl;
56 const eckit::mpi::Comm & comm) {
57 const eckit::LocalConfiguration obsconf(conf,
"obs space");
58 const util::DateTime bgn = util::DateTime(conf.getString(
"window begin"));
59 const util::DateTime end = util::DateTime(conf.getString(
"window end"));
60 ioda::ObsTopLevelParameters obsparams;
61 obsparams.validateAndDeserialize(obsconf);
63 ioda::ObsSpace obspace(obsparams, comm, bgn, end, oops::mpi::myself());
64 const size_t nlocs = obspace.nlocs();
65 dist_ = obspace.distribution();
71 obspace.get_db(
"MetaData",
"latitude",
lats_);
72 obspace.get_db(
"MetaData",
"longitude",
lons_);
73 obspace.get_db(
"MetaData",
"datetime",
times_);
86 const util::DateTime & t2)
const {
87 std::vector<bool> isIn(
times_.size(),
false);
88 for (
size_t ii = 0; ii <
times_.size(); ++ii) {
89 if (t1 <
times_[ii] &&
times_[ii] <= t2) isIn[ii] =
true;
103 os <<
"Lat/lon/time locations: " <<
size() <<
" locations on this task " << std::endl;
Locations class to handle simple lat-lon-time locations.
size_t size() const
size of locations
std::shared_ptr< const ioda::Distribution > dist_
std::vector< bool > isInTimeWindow(const util::DateTime &t1, const util::DateTime &t2) const
find which observations are in the (t1, t2] time window
Locations & operator+=(const Locations &)
append locations with more locations
std::vector< float > lats_
longitudes on current MPI task
std::vector< util::DateTime > times_
latitudes on current MPI task
Locations(const std::vector< float > &lons, const std::vector< float > &lats, const std::vector< util::DateTime > ×, std::shared_ptr< const ioda::Distribution >)
constructor from passed lons, lats, times
void print(std::ostream &os) const override
std::vector< float > lons_
observations MPI distribution
integer function nlocs(this)
Return the number of observational locations in this Locations object.