18 #include "ioda/ObsDataVector.h"
19 #include "oops/util/IntSetParser.h"
40 channels_.size() == 3);
61 const size_t nlocs = in.
nlocs();
70 std::vector<float> water_frac(nlocs);
71 in.
get(
Variable(
"water_area_fraction@GeoVaLs"), water_frac);
74 std::vector<float> bt238(nlocs), bt314(nlocs), bt890(nlocs);
75 for (
size_t igrp = 0; igrp < ngrps; ++igrp) {
77 in.
get(
Variable(
"brightness_temperature@"+vargrp[igrp], channels_)[0], bt238);
78 in.
get(
Variable(
"brightness_temperature@"+vargrp[igrp], channels_)[1], bt314);
79 in.
get(
Variable(
"brightness_temperature@"+vargrp[igrp], channels_)[2], bt890);
82 std::vector<float> bias238(nlocs), bias314(nlocs), bias890(nlocs);
88 for (
size_t iloc = 0; iloc < nlocs; ++iloc) {
89 bt238[iloc] = bt238[iloc] - bias238[iloc];
90 bt314[iloc] = bt314[iloc] - bias314[iloc];
91 bt890[iloc] = bt890[iloc] - bias890[iloc];
94 for (
size_t iloc = 0; iloc < nlocs; ++iloc) {
95 bt238[iloc] = bt238[iloc] + bias238[iloc];
96 bt314[iloc] = bt314[iloc] + bias314[iloc];
97 bt890[iloc] = bt890[iloc] + bias890[iloc];
102 for (
size_t iloc = 0; iloc < nlocs; ++iloc) {
103 if (water_frac[iloc] >= 0.99) {
104 out[igrp][iloc] = -113.2 + (2.41 - 0.0049 * bt238[iloc]) * bt238[iloc]
105 + 0.454 * bt314[iloc] - bt890[iloc];
106 out[igrp][iloc] = std::max(0.f, out[igrp][iloc]);