UFO
ufo::PoissonDiskThinning Class Reference

Thins observations by iterating over them in random order and retaining each observation lying outside the exclusion volumes (ellipsoids or cylinders) surrounding observations that have already been retained. More...

#include <PoissonDiskThinning.h>

Inheritance diagram for ufo::PoissonDiskThinning:
Collaboration diagram for ufo::PoissonDiskThinning:

Classes

struct  ObsData
 

Public Member Functions

 PoissonDiskThinning (ioda::ObsSpace &obsdb, const eckit::Configuration &config, std::shared_ptr< ioda::ObsDataVector< int > > flags, std::shared_ptr< ioda::ObsDataVector< float > > obserr)
 
 ~PoissonDiskThinning () override
 
- Public Member Functions inherited from ufo::FilterBase
 FilterBase (ioda::ObsSpace &, const eckit::Configuration &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
 
 ~FilterBase ()
 
void preProcess ()
 
void priorFilter (const GeoVaLs &)
 
void postFilter (const ioda::ObsVector &, const ObsDiagnostics &)
 
oops::Variables requiredVars () const
 
oops::Variables requiredHdiagnostics () const
 

Static Public Member Functions

static const std::string classname ()
 

Private Member Functions

void print (std::ostream &) const override
 
void applyFilter (const std::vector< bool > &, const Variables &, std::vector< std::vector< bool >> &) const override
 
int qcFlag () const override
 
ObsData getObsData (int &numSpatialDims, int &numNonspatialDims) const
 Collect all observation data components used for thinning. More...
 
template<typename ValueType >
void validateSpacings (const util::ScalarOrMap< int, ValueType > &spacingsByPriority, const std::string &parameterName) const
 
std::vector< size_t > getValidObservationIds (const std::vector< bool > &apply) const
 
void groupObservationsByCategory (const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter) const
 
void groupObservationsByPriority (const std::vector< size_t > &validObsIds, RecursiveSplitter &splitter) const
 
void flagThinnedObservations (const std::vector< bool > &isThinned, std::vector< std::vector< bool > > &flagged) const
 
void thinCategory (const ObsData &obsData, const std::vector< size_t > &obsIdsInCategory, const RecursiveSplitter &prioritySplitter, int numSpatialDims, int numNonspatialDims, std::vector< bool > &isThinned) const
 
template<int numDims>
void thinCategory (const ObsData &obsData, const std::vector< size_t > &obsIdsInCategory, const RecursiveSplitter &prioritySplitter, int numSpatialDims, std::vector< bool > &isThinned) const
 Thin observations belonging to a single category. More...
 
template<int numDims>
std::array< float, numDims > getObservationPosition (size_t obsId, const ObsData &obsData) const
 
template<int numDims>
std::array< float, numDims > getExclusionVolumeSemiAxes (size_t obsId, const ObsData &obsData) const
 

Private Attributes

std::unique_ptr< PoissonDiskThinningParametersoptions_
 

Additional Inherited Members

- Protected Attributes inherited from ufo::FilterBase
ioda::ObsSpace & obsdb_
 
const eckit::LocalConfiguration config_
 
std::shared_ptr< ioda::ObsDataVector< int > > flags_
 
std::shared_ptr< ioda::ObsDataVector< float > > obserr_
 
ufo::Variables allvars_
 
ufo::Variables filtervars_
 
ObsFilterData data_
 

Detailed Description

Thins observations by iterating over them in random order and retaining each observation lying outside the exclusion volumes (ellipsoids or cylinders) surrounding observations that have already been retained.

See PoissonDiskThinningParameters for the documentation of the available options.

Definition at line 51 of file src/ufo/filters/PoissonDiskThinning.h.

Constructor & Destructor Documentation

◆ PoissonDiskThinning()

ufo::PoissonDiskThinning::PoissonDiskThinning ( ioda::ObsSpace &  obsdb,
const eckit::Configuration &  config,
std::shared_ptr< ioda::ObsDataVector< int > >  flags,
std::shared_ptr< ioda::ObsDataVector< float > >  obserr 
)

Definition at line 142 of file PoissonDiskThinning.cc.

◆ ~PoissonDiskThinning()

ufo::PoissonDiskThinning::~PoissonDiskThinning ( )
override

Definition at line 155 of file PoissonDiskThinning.cc.

Member Function Documentation

◆ applyFilter()

void ufo::PoissonDiskThinning::applyFilter ( const std::vector< bool > &  apply,
const Variables filtervars,
std::vector< std::vector< bool >> &  flagged 
) const
overrideprivatevirtual

Implements ufo::FilterBase.

Definition at line 158 of file PoissonDiskThinning.cc.

Here is the call graph for this function:

◆ classname()

static const std::string ufo::PoissonDiskThinning::classname ( )
inlinestatic

Definition at line 54 of file src/ufo/filters/PoissonDiskThinning.h.

◆ flagThinnedObservations()

void ufo::PoissonDiskThinning::flagThinnedObservations ( const std::vector< bool > &  isThinned,
std::vector< std::vector< bool > > &  flagged 
) const
private

Definition at line 445 of file PoissonDiskThinning.cc.

Here is the caller graph for this function:

◆ getExclusionVolumeSemiAxes()

template<int numDims>
std::array< float, numDims > ufo::PoissonDiskThinning::getExclusionVolumeSemiAxes ( size_t  obsId,
const ObsData obsData 
) const
private

Definition at line 412 of file PoissonDiskThinning.cc.

◆ getObsData()

PoissonDiskThinning::ObsData ufo::PoissonDiskThinning::getObsData ( int &  numSpatialDims,
int &  numNonspatialDims 
) const
private

Collect all observation data components used for thinning.

Parameters
[out]numSpatialDimsNumber of spatial dimensions used for thinning (3 if thinning by latitude and longitude, 0 otherwise).
[out]numNonspatialDimsNumber of non-spatial dimensions used for thinning.

Definition at line 204 of file PoissonDiskThinning.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getObservationPosition()

template<int numDims>
std::array< float, numDims > ufo::PoissonDiskThinning::getObservationPosition ( size_t  obsId,
const ObsData obsData 
) const
private

Definition at line 376 of file PoissonDiskThinning.cc.

◆ getValidObservationIds()

std::vector< size_t > ufo::PoissonDiskThinning::getValidObservationIds ( const std::vector< bool > &  apply) const
private

Definition at line 278 of file PoissonDiskThinning.cc.

Here is the caller graph for this function:

◆ groupObservationsByCategory()

void ufo::PoissonDiskThinning::groupObservationsByCategory ( const std::vector< size_t > &  validObsIds,
RecursiveSplitter splitter 
) const
private

Definition at line 287 of file PoissonDiskThinning.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ groupObservationsByPriority()

void ufo::PoissonDiskThinning::groupObservationsByPriority ( const std::vector< size_t > &  validObsIds,
RecursiveSplitter splitter 
) const
private

Definition at line 304 of file PoissonDiskThinning.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ print()

void ufo::PoissonDiskThinning::print ( std::ostream &  os) const
overrideprivatevirtual

Implements ufo::FilterBase.

Definition at line 454 of file PoissonDiskThinning.cc.

◆ qcFlag()

int ufo::PoissonDiskThinning::qcFlag ( ) const
inlineoverrideprivatevirtual

Implements ufo::FilterBase.

Definition at line 68 of file src/ufo/filters/PoissonDiskThinning.h.

◆ thinCategory() [1/2]

void ufo::PoissonDiskThinning::thinCategory ( const ObsData obsData,
const std::vector< size_t > &  obsIdsInCategory,
const RecursiveSplitter prioritySplitter,
int  numSpatialDims,
int  numNonspatialDims,
std::vector< bool > &  isThinned 
) const
private

Definition at line 326 of file PoissonDiskThinning.cc.

Here is the caller graph for this function:

◆ thinCategory() [2/2]

template<int numDims>
void ufo::PoissonDiskThinning::thinCategory ( const ObsData obsData,
const std::vector< size_t > &  obsIdsInCategory,
const RecursiveSplitter prioritySplitter,
int  numSpatialDims,
std::vector< bool > &  isThinned 
) const
private

Thin observations belonging to a single category.

Definition at line 351 of file PoissonDiskThinning.cc.

Here is the call graph for this function:

◆ validateSpacings()

template<typename ValueType >
void ufo::PoissonDiskThinning::validateSpacings ( const util::ScalarOrMap< int, ValueType > &  spacingsByPriority,
const std::string &  parameterName 
) const
private

Definition at line 257 of file PoissonDiskThinning.cc.

Here is the caller graph for this function:

Member Data Documentation

◆ options_

std::unique_ptr<PoissonDiskThinningParameters> ufo::PoissonDiskThinning::options_
private

Definition at line 118 of file src/ufo/filters/PoissonDiskThinning.h.


The documentation for this class was generated from the following files: