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 int 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 int timeFromStartSec = timeFromStart.toSeconds();
46 int StateTimeFromStartSec =
47 (timeFromStartSec / windowSubSec) * windowSubSec;
48 if ((timeFromStartSec - StateTimeFromStartSec) == 0) {
49 TimeWeightObsAfterState[i] = 1.0;
51 TimeWeightObsAfterState[i] = 1.0 -
static_cast<float>(timeFromStartSec -
52 StateTimeFromStartSec)/
53 static_cast<float>(windowSubSec);
56 <<
" windowSubSec = " << windowSubSec
57 <<
" StateTimeFromStartSec = " << StateTimeFromStartSec
60 for (
int 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.0 - 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]) {