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 Types

typedef PoissonDiskThinningParameters Parameters_
 

Public Member Functions

 PoissonDiskThinning (ioda::ObsSpace &obsdb, const Parameters_ &parameters, 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 FilterParametersBaseWithAbstractAction &parameters, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
 
 FilterBase (ioda::ObsSpace &, const eckit::Configuration &, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
 
 ~FilterBase ()
 
- Public Member Functions inherited from ufo::ObsProcessorBase
 ObsProcessorBase (ioda::ObsSpace &, bool deferToPost, std::shared_ptr< ioda::ObsDataVector< int > >, std::shared_ptr< ioda::ObsDataVector< float > >)
 
 ~ObsProcessorBase ()
 
void preProcess () override
 
void priorFilter (const GeoVaLs &) override
 
void postFilter (const ioda::ObsVector &, const ioda::ObsVector &, const ObsDiagnostics &) override
 
oops::Variables requiredVars () const override
 
oops::Variables requiredHdiagnostics () const override
 

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
 
ObsAccessor createObsAccessor () const
 
ObsData getObsData (const ObsAccessor &obsAccessor, 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 Variables &filtervars, const ObsAccessor &obsAccessor) const
 
void synchroniseRandomNumberGenerators (const eckit::mpi::Comm &comm) const
 
void groupObservationsByPriority (const std::vector< size_t > &validObsIds, const ObsAccessor &obsAccessor, RecursiveSplitter &splitter) 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

Parameters_ options_
 

Additional Inherited Members

- Protected Attributes inherited from ufo::FilterBase
const eckit::LocalConfiguration config_
 
ufo::Variables filtervars_
 
- Protected Attributes inherited from ufo::ObsProcessorBase
ioda::ObsSpace & obsdb_
 
std::shared_ptr< ioda::ObsDataVector< int > > flags_
 
std::shared_ptr< ioda::ObsDataVector< float > > obserr_
 
ufo::Variables allvars_
 
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 52 of file src/ufo/filters/PoissonDiskThinning.h.

Member Typedef Documentation

◆ Parameters_

Constructor & Destructor Documentation

◆ PoissonDiskThinning()

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

Definition at line 146 of file PoissonDiskThinning.cc.

◆ ~PoissonDiskThinning()

ufo::PoissonDiskThinning::~PoissonDiskThinning ( )
override

Definition at line 156 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 159 of file PoissonDiskThinning.cc.

Here is the call graph for this function:

◆ classname()

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

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

◆ createObsAccessor()

ObsAccessor ufo::PoissonDiskThinning::createObsAccessor ( ) const
private

Definition at line 213 of file PoissonDiskThinning.cc.

Here is the call graph for this function:
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 431 of file PoissonDiskThinning.cc.

◆ getObsData()

PoissonDiskThinning::ObsData ufo::PoissonDiskThinning::getObsData ( const ObsAccessor obsAccessor,
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 222 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 395 of file PoissonDiskThinning.cc.

◆ getValidObservationIds()

std::vector< size_t > ufo::PoissonDiskThinning::getValidObservationIds ( const std::vector< bool > &  apply,
const Variables filtervars,
const ObsAccessor obsAccessor 
) const
private

Definition at line 285 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,
const ObsAccessor obsAccessor,
RecursiveSplitter splitter 
) const
private

Definition at line 322 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 464 of file PoissonDiskThinning.cc.

◆ qcFlag()

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

Implements ufo::FilterBase.

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

◆ synchroniseRandomNumberGenerators()

void ufo::PoissonDiskThinning::synchroniseRandomNumberGenerators ( const eckit::mpi::Comm &  comm) const
private

Initialise random number generators used for shuffling with the same seed on all processes belonging to the given communicator.

Definition at line 304 of file PoissonDiskThinning.cc.

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

◆ 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 345 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 370 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 264 of file PoissonDiskThinning.cc.

Here is the caller graph for this function:

Member Data Documentation

◆ options_

Parameters_ ufo::PoissonDiskThinning::options_
private

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


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