MeteoIODoc 20240328.18c31bd1
mio::FilterDeGrass Class Reference

Detailed Description

This filter is used to distinguish if snow (HS) is on the ground or not.

This is useful because the ultrasonic sensor cannot distinguish between snow or vegetation/grass on the ground. The filter is based on total snow depth (HS), snow surface temperature (TSS), ground surface temperature (TSG) and reflected shortwave radiation (RSWR). Different steps to do:

  1. calculate possible offset of TSS (reason: at some stations in some springs the TSS increases although snow is still on the ground)
  2. calculate correlation of TSS and TSG in spring (normally both temperatures increase at the same time in spring which results in a high correlation; low correlation if TSS and TSG increase not parallel which leads in connection with a high offset of TSS to the assumption, that TSS is false), then:
    1. if TSS has a low offset and the correlation between TSS and TSG is high, the algorithm analyses based on the daily Max/Min/Mean of TSS if snow is on the ground or not
    2. if no TSS is available or the offset of TSS is high/correlation of TSS and TSG is low, the algorithm analyses based on the variance of TSG and the value of TSG if snow is on the ground or not.

References/Literature: Tilg, A.-M., Marty C. and G. Klein, "An automatic algorithm for validating snow depth measurements of IMIS stations", 2015. Swiss Geoscience Meeting 2015

Normally, the filter computes any potential offset on TSS before using it in its algorithms. But it is possible to provide the offset that must be used, with the optional TSS_OFFSET argument (then TSS_meas + TSS_offset is compared to given thresholds to determine if snow can exist on the ground, so you can give a negative offset to more easily keep snow on the ground).

Example of use:

HS::filter1 = DETECT_GRASS
Note
  • two of the used criterias are currently only valid for mid-northern latitudes (months when the season might start);
  • it is probably a good idea to use a FilterRate filter after this one in order to remove some potential left-over peaks.
Author
Anna-Maria Tilg and Mathias Bavay
Date
2015-12-16

#include <FilterDeGrass.h>

Public Member Functions

 FilterDeGrass (const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &name, const Config &cfg)
 
virtual void process (const unsigned int &param, const std::vector< MeteoData > &ivec, std::vector< MeteoData > &ovec)
 
- Public Member Functions inherited from mio::ProcessingBlock
virtual ~ProcessingBlock ()
 
virtual void process (const unsigned int &param, const std::vector< MeteoData > &ivec, std::vector< MeteoData > &ovec)=0
 
virtual void process (Date &dateStart, Date &dateEnd)
 
std::string getName () const
 
const ProcessingPropertiesgetProperties () const
 
const std::string toString () const
 
bool skipStation (const std::string &station_id) const
 Should the provided station be skipped in the processing? More...
 
bool noStationsRestrictions () const
 
const std::vector< DateRangegetTimeRestrictions () const
 

Additional Inherited Members

- Static Public Member Functions inherited from mio::ProcessingBlock
static void readCorrections (const std::string &filter, const std::string &filename, std::vector< double > &X, std::vector< double > &Y)
 Read a data file structured as X Y value on each lines. More...
 
static void readCorrections (const std::string &filter, const std::string &filename, std::vector< double > &X, std::vector< double > &Y1, std::vector< double > &Y2)
 Read a data file structured as X Y1 Y2 value on each lines. More...
 
static std::vector< double > readCorrections (const std::string &filter, const std::string &filename, const size_t &col_idx, const char &c_type, const double &init)
 Read a correction file applicable to repeating time period. More...
 
static std::vector< offset_specreadCorrections (const std::string &filter, const std::string &filename, const double &TZ, const size_t &col_idx=2)
 Read a correction file, ie a file structured as timestamps followed by values on each lines. More...
 
static std::map< std::string, std::vector< DateRange > > readDates (const std::string &filter, const std::string &filename, const double &TZ)
 Read a list of date ranges by stationIDs from a file. More...
 
- Protected Member Functions inherited from mio::ProcessingBlock
 ProcessingBlock (const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &name, const Config &cfg)
 protected constructor only to be called by children More...
 
- Static Protected Member Functions inherited from mio::ProcessingBlock
static void extract_dbl_vector (const unsigned int &param, const std::vector< MeteoData > &ivec, std::vector< double > &ovec)
 
static void extract_dbl_vector (const unsigned int &param, const std::vector< const MeteoData * > &ivec, std::vector< double > &ovec)
 
- Protected Attributes inherited from mio::ProcessingBlock
const std::set< std::string > excluded_stations
 
const std::set< std::string > kept_stations
 
const std::vector< DateRangetime_restrictions
 
ProcessingProperties properties
 
const std::string block_name
 
- Static Protected Attributes inherited from mio::ProcessingBlock
static const double soil_albedo = .23
 
static const double snow_albedo = .85
 
static const double snow_thresh = .1
 parametrize the albedo from HS More...
 

Constructor & Destructor Documentation

◆ FilterDeGrass()

mio::FilterDeGrass::FilterDeGrass ( const std::vector< std::pair< std::string, std::string > > &  vecArgs,
const std::string &  name,
const Config cfg 
)

Member Function Documentation

◆ process()

void mio::FilterDeGrass::process ( const unsigned int &  param,
const std::vector< MeteoData > &  ivec,
std::vector< MeteoData > &  ovec 
)
virtual

Implements mio::ProcessingBlock.


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