14 #include "ioda/ObsVector.h"
16 #include "oops/util/DateTime.h"
17 #include "oops/util/Duration.h"
18 #include "oops/util/Logger.h"
26 const eckit::Configuration & config) {
27 util::DateTime windowBegin(odb_.windowStart());
28 util::Duration windowSub;
29 windowSub = util::Duration(config.getString(
"windowSub"));
30 int64_t windowSubSec = windowSub.toSeconds();
32 std::size_t
nlocs = odb_.nlocs();
36 std::vector<float> TimeWeightObsAfterState(
nlocs, 0.0);
38 std::vector<util::DateTime> dateTimeIn(
nlocs);
39 odb_.get_db(
"MetaData",
"datetime", dateTimeIn);
41 oops::Log::debug() <<
"datetime = " << dateTimeIn[0].toString() << std::endl;
43 for (std::size_t i = 0; i <
nlocs; ++i) {
44 util::Duration timeFromStart = dateTimeIn[i] - windowBegin;
45 int64_t timeFromStartSec = timeFromStart.toSeconds();
46 int64_t StateTimeFromStartSec =
47 (timeFromStartSec / windowSubSec) * windowSubSec;
48 if ((timeFromStartSec - StateTimeFromStartSec) == 0) {
49 TimeWeightObsAfterState[i] = 1.0f;
51 TimeWeightObsAfterState[i] = 1.0f -
static_cast<float>(timeFromStartSec -
52 StateTimeFromStartSec)/
53 static_cast<float>(windowSubSec);
56 <<
" windowSubSec = " << windowSubSec
57 <<
" StateTimeFromStartSec = " << StateTimeFromStartSec
60 for (std::size_t i=0; i < TimeWeightObsAfterState.size(); ++i) {
62 << TimeWeightObsAfterState[i] << std::endl;
65 std::vector<float> TimeWeightObsBeforeState(
nlocs, 0.0);
66 transform(TimeWeightObsAfterState.cbegin(), TimeWeightObsAfterState.cend(),
67 TimeWeightObsBeforeState.begin(),
68 [] (
float element) {return 1.0f - element;});
70 std::vector<std::vector<float>> timeWeights;
71 timeWeights.push_back(TimeWeightObsAfterState);
72 timeWeights.push_back(TimeWeightObsBeforeState);
74 for (
auto i : timeWeights[0]) {
77 for (
auto i : timeWeights[1]) {
integer function nlocs(this)
Return the number of observational locations in this Locations object.
std::vector< std::vector< float > > timeWeightCreate(const ioda::ObsSpace &odb_, const eckit::Configuration &config)