49 if (varno ==
varnos_.at(
i))
return true;
69 for (
size_t i = 0;
i < begin->
columns().size();
i++) {
72 for (
auto &row : sodb) {
73 for (
size_t i = 0;
i < begin->
columns().size();
i++) {
88 NewDimensionScale<int>(
"nlocs", num_rows, num_rows, num_rows));
91 vertcos.push_back(NewDimensionScale<int>(
"nchans", number_of_levels,
92 number_of_levels, number_of_levels));
95 vertcos.push_back(NewDimensionScale<int>(
"nchans", number_of_levels,
96 number_of_levels, number_of_levels));
99 vertcos.push_back(NewDimensionScale<int>(
"nchans", number_of_levels,
100 number_of_levels, number_of_levels));
107 vertcos.push_back(NewDimensionScale<int>(
"nchans", number_of_levels,
108 number_of_levels, number_of_levels));
111 vertcos.push_back(NewDimensionScale<int>(
"nchans", number_of_levels,
112 number_of_levels, number_of_levels));
130 if (column_index != -1) {
134 size_t seqno_new =
getData(
i, seqno_index);
135 int varno =
getData(
i, varno_index);
156 if (column_index != -1) {
160 size_t seqno_new =
getData(
i, seqno_index);
161 int varno =
getData(
i, varno_index);
181 std::vector<std::string> arr;
182 if (column_index != -1) {
185 size_t seqno_new =
getData(
i, seqno_index);
186 int varno =
getData(
i, varno_index);
196 double ud =
getData(
i, column_index);
197 strncpy(uc,
reinterpret_cast<char*
>(&ud), 8);
201 std::string s = std::string(uc);
202 size_t endpos = s.find_last_not_of(
" ");
203 size_t startpos = s.find_first_not_of(
" ");
204 if (std::string::npos != endpos) {
205 s = s.substr(0, endpos + 1);
206 s = s.substr(startpos);
208 s.erase(std::remove(std::begin(s), std::end(s),
' '), std::end(s));
222 std::string
const& col,
223 const int nchans = 1,
224 const int nchans_actual = 1)
const {
231 for (
auto& it : varnos) {
237 if (column_index != -1 && varno_index != -1) {
240 if (std::find(varnos.begin(), varnos.end(),
getData(
i, varno_index)) != varnos.end()) {
248 if (column_index != -1 && varno_index != -1) {
252 if (std::find(varnos.begin(), varnos.end(),
getData(
i, varno_index)) != varnos.end()) {
256 if (k_chan > nchans_actual) {
257 j += (nchans - nchans_actual);
268 const std::vector<int>& varnos) {
270 std::string sql =
"select ";
278 sql = sql +
" from \"" + filename +
"\" where (";
279 for (
int i = 0;
i < varnos.size();
i++) {
281 sql = sql +
"varno = " + std::to_string(varnos.at(
i));
283 sql = sql +
" or varno = " + std::to_string(varnos.at(
i));
294 int varno =
getData(
i, varno_column);
309 size_t seqno_new =
getData(
i, seqno_index);
310 if (seqno != seqno_new) {
327 std::string
const& time_col)
const {
330 std::vector<std::string> date_strings;
331 date_strings.reserve(var_date.size());
333 const std::string missingDateTime =
"9996-02-29T23:58:57Z";
334 for (
int i = 0;
i < var_date.size();
i++) {
335 std::string datetimestring;
337 int year = var_date[
i] / 10000;
338 int month = var_date[
i] / 100 -
year * 100;
339 int day = var_date[
i] - 10000 *
year - 100 * month;
340 int hour = var_time[
i] / 10000;
341 int minute = var_time[
i] / 100 -
hour * 100;
342 int second = var_time[
i] - 10000 *
hour - 100 * minute;
343 std::ostringstream stream;
344 stream <<
year <<
"-" << std::setfill(
'0') << std::setw(2) << month <<
"-" << std::setfill(
'0')
345 << std::setw(2) << day <<
"T" << std::setfill(
'0') << std::setw(2) <<
hour <<
":"
346 << std::setfill(
'0') << std::setw(2) << minute <<
":" << std::setfill(
'0')
347 << std::setw(2) << second <<
"Z";
348 datetimestring = stream.str();
350 datetimestring = missingDateTime;
352 date_strings.push_back(std::move(datetimestring));
363 std::vector<std::string> vard;
374 v =
og.vars.createWithScales<
int>(column, {
og.vars[
"nlocs"]}, params_copy);
375 v.writeWithEigenRegular(vari);
379 v =
og.vars.createWithScales<
float>(column, {
og.vars[
"nlocs"]}, params_copy);
380 v.writeWithEigenRegular(var);
382 v =
og.vars.createWithScales<std::string>(column, {
og.vars[
"nlocs"]},
params);
423 const std::vector<int> varnos{varno};
430 int number_of_levels;
436 if (number_of_levels <= 0)
return v;
437 if (number_of_levels == 1) {
438 v =
og.vars.createWithScales<
float>(std::to_string(varno), {
og.vars[
"nlocs"]}, params_copy);
440 std::string vertco_type;
443 vertco_type =
"nchans";
447 vertco_type =
"nchans";
451 vertco_type =
"nchans";
455 vertco_type =
"nchans";
463 vertco_type =
"nchans";
466 if (vertco_type ==
"") {
467 v =
og.vars.createWithScales<
float>(std::to_string(varno), {
og.vars[
"nlocs"]},
474 v =
og.vars.createWithScales<
float>(std::to_string(varno),
475 {
og.vars[
"nlocs"],
og.vars[
"nchans"]}, params_copy);
477 v =
og.vars.createWithScales<
float>(
478 std::to_string(varno), {
og.vars[
"nlocs"],
og.vars[vertco_type]}, params_copy);
489 size_t totalRows = 0;
490 for (; it != end; ++it) {
std::map< int, size_t > varnos_and_levels_
std::vector< std::string > getDates(std::string const &date_col, std::string const &time_col) const
Returns a vector of date strings.
NewDimensionScales_t getVertcos() const
Returns the dimensions for the ODB.
size_t numberOfRowsForVarno(int varno) const
Returns the number of rows for a particular varno.
int getObsgroup() const
Returns the obsgroup number.
Eigen::ArrayXf getMetadataColumn(std::string const &column) const
Returns data for a (metadata) column.
Eigen::ArrayXf getVarnoColumn(const std::vector< int > &varnos, std::string const &column, const int nchans, const int nchans_actual) const
Returns data for a varno for a varno column.
Eigen::ArrayXi getMetadataColumnInt(std::string const &column) const
Returns data for a (metadata) column.
bool hasVarno(int varno) const
Returns true if a particular varno is present.
size_t numberOfMetadataRows() const
Returns the number of "metadata" rows, i.e. hdr-type rows.
ioda::Variable getIodaObsvalue(int varno, ioda::ObsGroup og, ioda::VariableCreationParameters params) const
Returns an ioda variable for a specified column.
std::vector< double > data_
DataFromSQL()
Simple constructor.
void setData(size_t row, size_t column, double val)
Set a value for a row,column element.
void select(const std::vector< std::string > &columns, const std::string &filename, const std::vector< int > &varnos)
Populate structure with data from specified columns, file and varnos.
std::vector< int > varnos_
std::vector< int > column_types_
ioda::Variable getIodaVariable(std::string const &column, ioda::ObsGroup og, ioda::VariableCreationParameters params) const
Returns an ioda variable for a specified column.
size_t number_of_metadata_rows_
std::vector< std::string > getMetadataStringColumn(std::string const &column) const
Returns data for a (metadata) column.
int getColumnIndex(const std::string &column) const
Returns the index of a specified column.
size_t numberOfLevels(int varno) const
Returns the number of levels for each varno.
static size_t countRows(const std::string &sql)
Returns a count of the rows extracted by an sql.
double getData(size_t row, size_t column) const
Returns the value for a particular row/column.
const std::vector< std::string > & getColumns() const
Returns a vector of columns.
std::vector< std::string > columns_
int getColumnTypeByName(std::string const &column) const
Returns the type of a specified column.
An ObsGroup is a specialization of a ioda::Group. It provides convenience functions and guarantees th...
Variable_Implementation writeWithEigenRegular(const EigenClass &d, const Selection &mem_selection=Selection::all, const Selection &file_selection=Selection::all)
Write an Eigen object (a Matrix, an Array, a Block, a Map).
virtual Variable write(gsl::span< char > data, const Type &in_memory_dataType, const Selection &mem_selection=Selection::all, const Selection &file_selection=Selection::all)
The fundamental write function. Backends overload this function to implement all write operations.
const core::MetaData & columns() const
static constexpr int obsgroup_ssmis
static constexpr int obsgroup_gmilow
static constexpr int varno_rawsca
static constexpr int obsgroup_abiclr
static constexpr int varno_rawbt_hirs
static constexpr int obsgroup_sonde
static constexpr int obsgroup_gpsro
static constexpr int obsgroup_iasi
static constexpr int odb_type_real
static constexpr int varno_rawbt_amsu
static constexpr int obsgroup_atms
static constexpr int obsgroup_atovs
static constexpr int obsgroup_airs
static constexpr int varno_rawbt_mwts
static constexpr int obsgroup_ahiclr
static constexpr int obsgroup_cris
static constexpr int odb_missing_int
static constexpr int obsgroup_seviriclr
static constexpr int obsgroup_mwsfy3
static constexpr float odb_missing_float
static constexpr int odb_type_int
static constexpr int obsgroup_amsr
static constexpr int varno_rawbt_mwhs
static constexpr int obsgroup_mwri
static constexpr int obsgroup_gmihigh
static constexpr int obsgroup_hiras
static constexpr int varno_rawbt_amsr_89ghz
static constexpr int odb_type_bitfield
static constexpr int varno_rawbt
static constexpr int obsgroup_scatwind
std::vector< std::shared_ptr< NewDimensionScale_Base > > NewDimensionScales_t
Used to specify Variable creation-time properties.
VariableCreationParameters & setFillValue(DataType fill)