UFO
BlackList.cc
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2018-2019 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
9 
10 #include <string>
11 #include <vector>
12 
13 #include "eckit/config/Configuration.h"
14 
15 #include "ioda/ObsDataVector.h"
16 #include "ioda/ObsSpace.h"
17 
18 #include "oops/base/Variables.h"
19 #include "oops/util/abor1_cpp.h"
20 #include "oops/util/Logger.h"
21 
22 #include "ufo/filters/QCflags.h"
23 
24 namespace ufo {
25 
26 // -----------------------------------------------------------------------------
27 
28 BlackList::BlackList(ioda::ObsSpace & obsdb, const eckit::Configuration & config,
29  std::shared_ptr<ioda::ObsDataVector<int> > flags,
30  std::shared_ptr<ioda::ObsDataVector<float> > obserr)
31  : FilterBase(obsdb, config, flags, obserr)
32 {
33  oops::Log::debug() << "BlackList: config = " << config_ << std::endl;
34 }
35 
36 // -----------------------------------------------------------------------------
37 
39 
40 // -----------------------------------------------------------------------------
41 
42 void BlackList::applyFilter(const std::vector<bool> & apply,
43  const Variables & filtervars,
44  std::vector<std::vector<bool>> & flagged) const {
45 // Initialize map from filtervars to observed variables
46  const oops::Variables observed = obsdb_.obsvariables();
47  std::vector<size_t> filt2obs;
48  for (size_t jv = 0; jv < filtervars.nvars(); ++jv) {
49  filt2obs.push_back(observed.find(filtervars.variable(jv).variable()));
50  }
51 
52  for (size_t jv = 0; jv < filtervars.nvars(); ++jv) {
53  for (size_t jobs = 0; jobs < obsdb_.nlocs(); ++jobs) {
54  flagged[jv][jobs] = apply[jobs] && (*flags_)[filt2obs[jv]][jobs] == QCflags::pass;
55  }
56  }
57 }
58 
59 // -----------------------------------------------------------------------------
60 
61 void BlackList::print(std::ostream & os) const {
62  os << "BlackList: config = " << config_ << std::endl;
63 }
64 
65 // -----------------------------------------------------------------------------
66 
67 } // namespace ufo
ufo::BlackList::applyFilter
void applyFilter(const std::vector< bool > &, const Variables &, std::vector< std::vector< bool >> &) const override
Definition: BlackList.cc:42
ufo::Variables::nvars
size_t nvars() const
Definition: Variables.cc:104
ufo::QCflags::pass
constexpr int pass
Definition: QCflags.h:14
ufo::Variables
Definition: src/ufo/filters/Variables.h:24
ufo_radiancerttov_utils_mod::debug
logical, public debug
Definition: ufo_radiancerttov_utils_mod.F90:100
ufo::FilterBase::obsdb_
ioda::ObsSpace & obsdb_
Definition: FilterBase.h:59
ufo::FilterBase
FilterBase: Base class for UFO QC filters.
Definition: FilterBase.h:42
ufo::BlackList::print
void print(std::ostream &) const override
Definition: BlackList.cc:61
ufo
Definition: RunCRTM.h:27
QCflags.h
ufo::BlackList::BlackList
BlackList(ioda::ObsSpace &, const eckit::Configuration &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
Definition: BlackList.cc:28
ufo::Variable::variable
const std::string & variable() const
Definition: Variable.cc:100
ioda::ObsDataVector< int >
ufo::Variables::variable
Variable variable(const size_t) const
Definition: Variables.cc:114
ufo::FilterBase::config_
const eckit::LocalConfiguration config_
Definition: FilterBase.h:60
ufo::BlackList::~BlackList
~BlackList()
Definition: BlackList.cc:38
BlackList.h