Go to the documentation of this file.
8 #ifndef CORE_OBSDATA_H_
9 #define CORE_OBSDATA_H_
19 #include "eckit/container/KDTree.h"
20 #include "eckit/geometry/Point2.h"
21 #include "eckit/geometry/Point3.h"
22 #include "eckit/geometry/UnitSphere.h"
23 #include "eckit/mpi/Comm.h"
24 #include "oops/base/Variables.h"
25 #include "oops/util/DateTime.h"
26 #include "oops/util/Logger.h"
27 #include "oops/util/Printable.h"
28 #include "ioda/core/IodaUtils.h"
30 #include "ioda/core/ObsSpaceContainer.h"
31 #include "ioda/distribution/Distribution.h"
32 #include "ioda/io/IodaIO.h"
43 template <
typename KeyType>
46 bool has(
const KeyType Key) {
50 void insert(
const KeyType Key,
const std::size_t Val) {
54 std::size_t
at(
const KeyType Key) {
89 typedef std::map<std::size_t, std::vector<std::size_t>>
RecIdxMap;
92 typedef eckit::geometry::Point3
Point;
95 typedef eckit::KDTreeMemory<TreeTrait>
KDTree;
97 ObsData(
const eckit::Configuration &,
const eckit::mpi::Comm &,
98 const util::DateTime &,
const util::DateTime &,
const eckit::mpi::Comm &);
105 std::size_t
gnlocs()
const;
106 std::size_t
nlocs()
const;
107 std::size_t
nrecs()
const;
108 std::size_t
nvars()
const;
109 const std::vector<std::size_t> &
recnum()
const;
110 const std::vector<std::size_t> &
index()
const;
112 bool has(
const std::string &,
const std::string &)
const;
113 ObsDtype dtype(
const std::string &,
const std::string &)
const;
119 void get_db(
const std::string & group,
const std::string & name,
120 std::vector<int> & vdata)
const;
121 void get_db(
const std::string & group,
const std::string & name,
122 std::vector<float> & vdata)
const;
123 void get_db(
const std::string & group,
const std::string & name,
124 std::vector<double> & vdata)
const;
125 void get_db(
const std::string & group,
const std::string & name,
126 std::vector<std::string> & vdata)
const;
127 void get_db(
const std::string & group,
const std::string & name,
128 std::vector<util::DateTime> & vdata)
const;
130 void put_db(
const std::string & group,
const std::string & name,
131 const std::vector<int> & vdata);
132 void put_db(
const std::string & group,
const std::string & name,
133 const std::vector<float> & vdata);
134 void put_db(
const std::string & group,
const std::string & name,
135 const std::vector<double> & vdata);
136 void put_db(
const std::string & group,
const std::string & name,
137 const std::vector<std::string> & vdata);
138 void put_db(
const std::string & group,
const std::string & name,
139 const std::vector<util::DateTime> & vdata);
145 bool recidx_has(
const std::size_t RecNum)
const;
148 const std::vector<std::size_t> &
recidx_vector(
const std::size_t RecNum)
const;
168 void print(std::ostream &)
const;
174 void genDistRandom(
const eckit::Configuration & conf, std::vector<float> & Lats,
175 std::vector<float> & Lons, std::vector<util::DateTime> & Dtimes);
176 void genDistList(
const eckit::Configuration & conf, std::vector<float> & Lats,
177 std::vector<float> & Lons, std::vector<util::DateTime> & Dtimes);
180 void InitFromFile(
const std::string & filename,
const std::size_t MaxFrameSize);
182 const std::size_t FrameStart,
const std::size_t FrameSize);
187 template<
typename VarType>
188 std::vector<VarType>
ApplyIndex(
const std::vector<VarType> & FullData,
189 const std::vector<std::size_t> & FullShape,
190 const std::vector<std::size_t> & Index,
191 std::vector<std::size_t> & IndexedShape)
const;
193 static std::string
DesiredVarType(std::string & GroupName, std::string & FileVarType);
196 void SaveToFile(
const std::string & file_name,
const std::size_t MaxFrameSize);
214 std::shared_ptr<KDTree>
kd_;
277 std::shared_ptr<Distribution>
dist_;
293 #endif // CORE_OBSDATA_H_
void InitFromFile(const std::string &filename, const std::size_t MaxFrameSize)
ObsGroupingMap< float > float_obs_grouping_
ObsDtype dtype(const std::string &, const std::string &) const
const util::DateTime winbgn_
Beginning of DA timing window.
std::shared_ptr< Distribution > dist_
MPI distribution object.
void put_db(const std::string &group, const std::string &name, const std::vector< int > &vdata)
transfer data from vdata to the obs container
const util::DateTime winend_
End of DA timing window.
void BuildSortedObsGroups()
std::size_t at(const KeyType Key)
std::string obs_group_variable_
Variable that location grouping is based upon.
ObsSpaceContainer< util::DateTime > datetime_database_
bool has(const KeyType Key)
const eckit::mpi::Comm & comm() const
const std::vector< std::size_t > & recnum() const
std::vector< std::size_t > indx_
indexes of locations to extract from the input obs file
const RecIdxIter recidx_end() const
std::size_t recidx_recnum(const RecIdxIter &Irec) const
void generateDistribution(const eckit::Configuration &)
bool has(const std::string &, const std::string &) const
std::size_t nvars() const
std::size_t nrecs() const
std::vector< std::size_t > recnums_
record numbers associated with the location indexes
ObsGroupingMap< std::string > string_obs_grouping_
const util::DateTime & windowEnd() const
std::size_t gnlocs() const
const RecIdxIter recidx_begin() const
const std::string & obsname() const
std::string distname_
Distribution type.
void printJo(const ObsVector &, const ObsVector &)
ObsSpaceContainer< std::string > string_database_
std::shared_ptr< KDTree > kd_
KD Tree.
void genDistList(const eckit::Configuration &conf, std::vector< float > &Lats, std::vector< float > &Lons, std::vector< util::DateTime > &Dtimes)
std::string obs_sort_variable_
Variable that location group sorting is based upon.
const eckit::Configuration & getConfig() const
ObsVector class to handle vectors in observation space for IODA.
std::string filein_
path to input file
std::vector< std::size_t > recidx_all_recnums() const
void insert(const KeyType Key, const std::size_t Val)
std::vector< VarType > ApplyIndex(const std::vector< VarType > &FullData, const std::vector< std::size_t > &FullShape, const std::vector< std::size_t > &Index, std::vector< std::size_t > &IndexedShape) const
const std::vector< std::size_t > & recidx_vector(const RecIdxIter &Irec) const
const oops::Variables & obsvariables() const
std::string obs_sort_order() const
ObsData & operator=(const ObsData &)
void get_db(const std::string &group, const std::string &name, std::vector< int > &vdata) const
transfer data from the obs container to vdata
std::size_t in_max_frame_size_
max frame size for input file
std::size_t nlocs() const
bool file_excess_dims_
flag, file has variables with excess dimensions
ObsGroupingMap< int > int_obs_grouping_
maps for obs grouping via integer, float or string values
std::string obs_sort_var() const
bool recidx_has(const std::size_t RecNum) const
std::size_t nlocs_
number of locations on this domain
RecIdxMap::const_iterator RecIdxIter
std::string obs_sort_order_
Sort order for obs grouping.
const eckit::LocalConfiguration config_
Configuration file.
std::size_t next_rec_num_
next available record number
ObsSpaceContainer< int > int_database_
Multi-index containers.
eckit::geometry::Point3 Point
eckit::KDTreeMemory< TreeTrait > KDTree
std::string obs_group_var() const
bool file_unexpected_dtypes_
flag, file has variables with unexpected data types
std::size_t out_max_frame_size_
max frame size for output file
std::vector< std::size_t > GenFrameIndexRecNums(const std::unique_ptr< IodaIO > &FileIO, const std::size_t FrameStart, const std::size_t FrameSize)
void print(std::ostream &) const
std::size_t nvars_
number of variables
bool InsideTimingWindow(const util::DateTime &ObsDt)
RecIdxMap recidx_
profile ordering
const util::DateTime & windowStart() const
std::map< std::size_t, std::vector< std::size_t > > RecIdxMap
std::set< std::size_t > unique_rec_nums_
unique record numbers
void genDistRandom(const eckit::Configuration &conf, std::vector< float > &Lats, std::vector< float > &Lons, std::vector< util::DateTime > &Dtimes)
std::string fileout_
path to output file
std::string obsname_
name of obs space
std::map< KeyType, std::size_t > obs_grouping_map_
ObsSpaceContainer< float > float_database_
const std::vector< std::size_t > & index() const
const eckit::mpi::Comm & commMPI_
MPI communicator.
const std::shared_ptr< Distribution > distribution() const
std::size_t nrecs_
number of records
static std::string DesiredVarType(std::string &GroupName, std::string &FileVarType)
oops::Variables obsvars_
Observation "variables" to be simulated.
void SaveToFile(const std::string &file_name, const std::size_t MaxFrameSize)
ObsData(const eckit::Configuration &, const eckit::mpi::Comm &, const util::DateTime &, const util::DateTime &, const eckit::mpi::Comm &)
std::size_t gnlocs_
total number of locations