RAVE
compositearguments.c File Reference

The arguments that should be passed on to a composite generator. More...

#include "compositearguments.h"
#include "composite_utils.h"
#include "odim_source.h"
#include "rave_attribute.h"
#include "rave_datetime.h"
#include "rave_debug.h"
#include "rave_alloc.h"
#include "rave_list.h"
#include "rave_object.h"
#include "rave_types.h"
#include "rave_value.h"
#include "raveobject_hashtable.h"
#include "raveobject_list.h"
#include <string.h>
#include <strings.h>
#include <stdio.h>

Classes

struct  _CompositeArguments_t
 Represents the area. More...
 
struct  ProductTypeMapping_t
 Mapping between a product string and the Rave_ProductType which is a mapping to ODIM. More...
 
struct  CompositeArgumentParameter_t
 Structure for keeping track on parameters that should be composited. More...
 
struct  CompositeArgumentObjectEntry_t
 The object entry that is stored inside the arguments. More...
 

Typedefs

typedef struct ProductTypeMapping_t ProductTypeMapping_t
 Mapping between a product string and the Rave_ProductType which is a mapping to ODIM.
 
typedef struct CompositeArgumentParameter_t CompositeArgumentParameter_t
 Structure for keeping track on parameters that should be composited.
 
typedef struct CompositeArgumentObjectEntry_t CompositeArgumentObjectEntry_t
 The object entry that is stored inside the arguments.
 

Functions

const char * CompositeArguments_productToString (Rave_CompositingProduct product)
 Converts a method into a string.
 
Rave_CompositingProduct CompositeArguments_stringToProduct (const char *product)
 Converts a string into a product.
 
int CompositeArguments_setProduct (CompositeArguments_t *args, const char *product)
 Sets the compositing method to use when creating the composite.
 
const char * CompositeArguments_getProduct (CompositeArguments_t *args)
 Returns the compositing product.
 
Rave_CompositingProduct CompositeArguments_getCompositingProduct (CompositeArguments_t *args)
 If the product could be translated to a compositing product, this will be returned.
 
Rave_ProductType CompositeArguments_getProductType (CompositeArguments_t *args)
 In some cases it is possible to translate a Rave_CompositingProduct into a Rave_ProductType.
 
int CompositeArguments_setArea (CompositeArguments_t *args, Area_t *area)
 Sets the area to use when creating the composite.
 
Area_tCompositeArguments_getArea (CompositeArguments_t *args)
 Returns the area.
 
int CompositeArguments_setTime (CompositeArguments_t *args, const char *value)
 Sets the nominal time.
 
const char * CompositeArguments_getTime (CompositeArguments_t *args)
 Returns the nominal time.
 
int CompositeArguments_setDate (CompositeArguments_t *args, const char *value)
 Sets the nominal date.
 
const char * CompositeArguments_getDate (CompositeArguments_t *args)
 Returns the nominal date.
 
void CompositeArguments_setHeight (CompositeArguments_t *args, double height)
 Sets the height that should be used when generating a composite.
 
double CompositeArguments_getHeight (CompositeArguments_t *args)
 Returns the height that is used for composite generation.
 
void CompositeArguments_setElevationAngle (CompositeArguments_t *args, double angle)
 Sets the elevation angle that should be used when generating a composite as PPI.
 
double CompositeArguments_getElevationAngle (CompositeArguments_t *args)
 Returns the elevation angle that is used for composite generation.
 
void CompositeArguments_setRange (CompositeArguments_t *args, double range)
 Sets the range that should be used when generating the Pseudo MAX.
 
double CompositeArguments_getRange (CompositeArguments_t *args)
 Returns the range in meters.
 
int CompositeArguments_setStrategy (CompositeArguments_t *args, const char *strategy)
 Sets the strategy id.
 
const char * CompositeArguments_getStrategy (CompositeArguments_t *args)
 Returns the strategy.
 
int CompositeArguments_addArgument (CompositeArguments_t *args, RaveAttribute_t *argument)
 Adds a rave attriargumentbute to the composite arguments.
 
void CompositeArguments_removeArgument (CompositeArguments_t *args, const char *name)
 Removes the rave argument that is named accordingly.
 
RaveAttribute_tCompositeArguments_getArgument (CompositeArguments_t *args, const char *name)
 Returns the rave argument that is named accordingly.
 
int CompositeArguments_hasArgument (CompositeArguments_t *args, const char *name)
 Returns if there is a rave argument that is named accordingly.
 
int CompositeArguments_addParameter (CompositeArguments_t *args, const char *quantity, double gain, double offset, RaveDataType datatype, double nodata, double undetect)
 Adds a parameter to be processed.
 
int CompositeArguments_hasParameter (CompositeArguments_t *args, const char *parameter)
 Returns if this composite generator is going to process specified parameter.
 
int CompositeArguments_getParameter (CompositeArguments_t *args, const char *parameter, double *gain, double *offset, RaveDataType *datatype, double *nodata, double *undetect)
 Returns the parameter at specified index.
 
int CompositeArguments_getParameterCount (CompositeArguments_t *args)
 Returns the number of parameters to be processed.
 
const char * CompositeArguments_getParameterAtIndex (CompositeArguments_t *args, int index, double *gain, double *offset, RaveDataType *datatype, double *nodata, double *undetect)
 Returns the parameter at specified index.
 
const char * CompositeArguments_getParameterName (CompositeArguments_t *args, int index)
 Returns the parameter name at specified index.
 
int CompositeArguments_addObject (CompositeArguments_t *args, RaveCoreObject *object)
 Adds a rave object to the arguments.
 
int CompositeArguments_getNumberOfObjects (CompositeArguments_t *args)
 Returns the number of objects.
 
RaveCoreObjectCompositeArguments_getObject (CompositeArguments_t *args, int index)
 Returns the object at specified index.
 
RaveObjectList_tCompositeArguments_getObjects (CompositeArguments_t *args)
 param[in] args - self
 
int CompositeArguments_setQIFieldName (CompositeArguments_t *args, const char *fieldname)
 If a quality field based algorithm is implemented, this field can be set to indicate what field to use.
 
const char * CompositeArguments_getQIFieldName (CompositeArguments_t *args)
 Returns the name of the field to use when implementing a quality based compositing.
 
int CompositeArguments_addQualityFlag (CompositeArguments_t *args, const char *flag)
 Adds a quality flag that should be generated during processing.
 
int CompositeArguments_setQualityFlags (CompositeArguments_t *args, const char *flags[], int nrflags)
 Sets the quality flags that should be used.
 
int CompositeArguments_getNumberOfQualityFlags (CompositeArguments_t *args)
 Returns the number of quality flags.
 
const char * CompositeArguments_getQualityFlagAt (CompositeArguments_t *args, int index)
 Returns the name of the quality flag at specified position.
 
int CompositeArguments_removeQualityFlag (CompositeArguments_t *args, const char *flag)
 Removes the quality flag with provided name.
 
int CompositeArguments_removeQualityFlagAt (CompositeArguments_t *args, int index)
 Removes the quality flag at specified index.
 
RaveList_tCompositeArguments_getQualityFlags (CompositeArguments_t *args)
 Returns a full list of all set quality flags.
 
int CompositeArguments_hasQualityFlag (CompositeArguments_t *args, const char *name)
 
int CompositeArguments_createRadarIndexMapping (CompositeArguments_t *args, OdimSources_t *sources)
 Creates the radar index mapping from the objects and the sources.
 
RaveObjectHashTable_tCompositeArguments_getRadarIndexMapping (CompositeArguments_t *args)
 Returns the radar index mapping.
 
int CompositeArguments_updateRadarIndexMapping (CompositeArguments_t *args, RaveObjectHashTable_t *mapping, OdimSources_t *sources)
 Updates the radar index mapping.
 
RaveList_tCompositeArguments_getRadarIndexKeys (CompositeArguments_t *args)
 Returns the registered radar indexes.
 
int CompositeArguments_getRadarIndexValue (CompositeArguments_t *args, const char *key)
 Returns the index for the specified key.
 
int CompositeArguments_createRadarIndex (CompositeArguments_t *args, const char *key)
 Creates a radar index value for the specified key.
 
int CompositeArguments_getObjectRadarIndexValue (CompositeArguments_t *args, int index)
 Returns the objects radar index at specified index.
 

Variables

RaveCoreObjectType CompositeArgumentObjectEntry_TYPE
 A composite argument object entry that that keeps track of added objects.
 
RaveCoreObjectType CompositeArguments_TYPE
 Type definition to use when creating a rave object.
 

Detailed Description

The arguments that should be passed on to a composite generator.

Author
Anders Henja (Swedish Meteorological and Hydrological Institute, SMHI)
Date
2024-10-14

Typedef Documentation

◆ CompositeArgumentObjectEntry_t

typedef struct CompositeArgumentObjectEntry_t CompositeArgumentObjectEntry_t

The object entry that is stored inside the arguments.

◆ CompositeArgumentParameter_t

typedef struct CompositeArgumentParameter_t CompositeArgumentParameter_t

Structure for keeping track on parameters that should be composited.

◆ ProductTypeMapping_t

typedef struct ProductTypeMapping_t ProductTypeMapping_t

Mapping between a product string and the Rave_ProductType which is a mapping to ODIM.

Function Documentation

◆ CompositeArguments_addArgument()

int CompositeArguments_addArgument ( CompositeArguments_t * args,
RaveAttribute_t * argument )

Adds a rave attriargumentbute to the composite arguments.

instead.

Parameters
[in]args- self
[in]argument- the argument
Returns
1 on success otherwise 0

◆ CompositeArguments_addObject()

int CompositeArguments_addObject ( CompositeArguments_t * args,
RaveCoreObject * object )

Adds a rave object to the arguments.

Parameters
[in]args- self
[in]object- a rave object.
Returns
1 on success, otherwise 0

◆ CompositeArguments_addParameter()

int CompositeArguments_addParameter ( CompositeArguments_t * args,
const char * quantity,
double gain,
double offset,
RaveDataType datatype,
double nodata,
double undetect )

Adds a parameter to be processed.

Parameters
[in]args- self
[in]quantity- the parameter quantity
[in]gain- the gain to be used for the parameter
[in]offset- the offset to be used for the parameter
[in]datatype- the type of data RaveDataType
[in]nodata- the nodata value to use
[in]undetect- the undetect value to use
Returns
1 on success

◆ CompositeArguments_addQualityFlag()

int CompositeArguments_addQualityFlag ( CompositeArguments_t * args,
const char * flag )

Adds a quality flag that should be generated during processing.

Parameters
[in]args- self
[in]flag- the quality flag that should be passed on
Returns
1 on success, otherwise 0

◆ CompositeArguments_createRadarIndex()

int CompositeArguments_createRadarIndex ( CompositeArguments_t * args,
const char * key )

Creates a radar index value for the specified key.

If there already is a key the currently set index will be returned.

Parameters
[in]args- self
[in]key- the key
Returns
the index value created or the existing value for the key or 0 on failure.

◆ CompositeArguments_createRadarIndexMapping()

int CompositeArguments_createRadarIndexMapping ( CompositeArguments_t * args,
OdimSources_t * sources )

Creates the radar index mapping from the objects and the sources.

If no sources instance a best effort will be done creating the index mapping.

Parameters
[in]args- self
[in]sources- the odim sources
Returns
1 on success, otherwise 0

◆ CompositeArguments_getArea()

Area_t * CompositeArguments_getArea ( CompositeArguments_t * args)

Returns the area.

Parameters
[in]args- self
Returns
the area

◆ CompositeArguments_getArgument()

RaveAttribute_t * CompositeArguments_getArgument ( CompositeArguments_t * args,
const char * name )

Returns the rave argument that is named accordingly.

Parameters
[in]args- self
[in]name- the name of the argument
Returns
the attribute if found otherwise NULL

◆ CompositeArguments_getCompositingProduct()

Rave_CompositingProduct CompositeArguments_getCompositingProduct ( CompositeArguments_t * args)

If the product could be translated to a compositing product, this will be returned.

Parameters
[in]args- self
Returns
the compositing product

◆ CompositeArguments_getDate()

const char * CompositeArguments_getDate ( CompositeArguments_t * args)

Returns the nominal date.

Parameters
[in]args- self
Returns
the nominal time (or NULL if there is none)

◆ CompositeArguments_getElevationAngle()

double CompositeArguments_getElevationAngle ( CompositeArguments_t * args)

Returns the elevation angle that is used for composite generation.

Parameters
[in]args- self
Returns
the elevation angle in radians

◆ CompositeArguments_getHeight()

double CompositeArguments_getHeight ( CompositeArguments_t * args)

Returns the height that is used for composite generation.

Parameters
[in]args- self
Returns
the height

◆ CompositeArguments_getNumberOfObjects()

int CompositeArguments_getNumberOfObjects ( CompositeArguments_t * args)

Returns the number of objects.

Parameters
[in]args- self
Returns
number of objects

◆ CompositeArguments_getNumberOfQualityFlags()

int CompositeArguments_getNumberOfQualityFlags ( CompositeArguments_t * args)

Returns the number of quality flags.

Parameters
[in]args- self
Returns
number of quality flags

◆ CompositeArguments_getObject()

RaveCoreObject * CompositeArguments_getObject ( CompositeArguments_t * args,
int index )

Returns the object at specified index.

Parameters
[in]args- self
[in]index- position in list of objects
Returns
the found object or NULL if not valid index

◆ CompositeArguments_getObjectRadarIndexValue()

int CompositeArguments_getObjectRadarIndexValue ( CompositeArguments_t * args,
int index )

Returns the objects radar index at specified index.

Requires that radar mapping has been applied and that there exists some sort of mapping.

Parameters
[in]args- self
[in]index-position in list of objects
Returns
the radar index or 0 on failure

◆ CompositeArguments_getObjects()

RaveObjectList_t * CompositeArguments_getObjects ( CompositeArguments_t * args)

param[in] args - self

Returns
the list of objects

◆ CompositeArguments_getParameter()

int CompositeArguments_getParameter ( CompositeArguments_t * args,
const char * parameter,
double * gain,
double * offset,
RaveDataType * datatype,
double * nodata,
double * undetect )

Returns the parameter at specified index.

Parameters
[in]args- self
[in]parameter- the name of the parameter
[out]gain- the gain to be used for the parameter (MAY BE NULL)
[out]offset- the offset to be used for the parameter (MAY BE NULL)
[out]datatype- the datatype to be used for the parameter (MAY BE NULL)
[out]nodata- the nodata to be used for the parameter (MAY BE NULL)
[out]undetect- the undetect to be used for the parameter (MAY BE NULL)
Returns
1 if parameter found, otherwise 0

◆ CompositeArguments_getParameterAtIndex()

const char * CompositeArguments_getParameterAtIndex ( CompositeArguments_t * args,
int index,
double * gain,
double * offset,
RaveDataType * datatype,
double * nodata,
double * undetect )

Returns the parameter at specified index.

Parameters
[in]args- self
[in]index- the index
[out]gain- the gain to be used for the parameter (MAY BE NULL)
[out]offset- the offset to be used for the parameter (MAY BE NULL)
[out]datatype- the datatype to be used for the parameter (MAY BE NULL)
[out]nodata- the nodata to be used for the parameter (MAY BE NULL)
[out]undetect- the undetect to be used for the parameter (MAY BE NULL)
Returns
the parameter name, NULL otherwise

◆ CompositeArguments_getParameterCount()

int CompositeArguments_getParameterCount ( CompositeArguments_t * args)

Returns the number of parameters to be processed.

Parameters
[in]args- self
Returns
the number of parameters

◆ CompositeArguments_getParameterName()

const char * CompositeArguments_getParameterName ( CompositeArguments_t * args,
int index )

Returns the parameter name at specified index.

Parameters
[in]args- self
[in]index- the index
Returns
the parameter name if found, NULL otherwise

◆ CompositeArguments_getProduct()

const char * CompositeArguments_getProduct ( CompositeArguments_t * args)

Returns the compositing product.

Returns
the compositing product

◆ CompositeArguments_getProductType()

Rave_ProductType CompositeArguments_getProductType ( CompositeArguments_t * args)

In some cases it is possible to translate a Rave_CompositingProduct into a Rave_ProductType.

If it is possible, then the product type is returned, otherwise UNDEFINED is returned.

Parameters
[in]args- self
Returns
the Product Type

◆ CompositeArguments_getQIFieldName()

const char * CompositeArguments_getQIFieldName ( CompositeArguments_t * args)

Returns the name of the field to use when implementing a quality based compositing.

Parameters
[in]args- self
Returns
the quality field name or NULL

◆ CompositeArguments_getQualityFlagAt()

const char * CompositeArguments_getQualityFlagAt ( CompositeArguments_t * args,
int index )

Returns the name of the quality flag at specified position.

Parameters
[in]args- self
[in]index- index of quality flag
Returns
quality flag on success, otherwise NULL

◆ CompositeArguments_getQualityFlags()

RaveList_t * CompositeArguments_getQualityFlags ( CompositeArguments_t * args)

Returns a full list of all set quality flags.

Remember to call RaveList_freeAndDestroy

Parameters
[in]args- self
Returns
a rave list of strings defining the quality flags

◆ CompositeArguments_getRadarIndexKeys()

RaveList_t * CompositeArguments_getRadarIndexKeys ( CompositeArguments_t * args)

Returns the registered radar indexes.

Parameters
[in]args- self
Returns
a list of keys

◆ CompositeArguments_getRadarIndexMapping()

RaveObjectHashTable_t * CompositeArguments_getRadarIndexMapping ( CompositeArguments_t * args)

Returns the radar index mapping.

Parameters
[in]args- self
Returns
the radar index mapping

◆ CompositeArguments_getRadarIndexValue()

int CompositeArguments_getRadarIndexValue ( CompositeArguments_t * args,
const char * key )

Returns the index for the specified key.

Parameters
[in]args- self
[in]key- the key
Returns
the radar index (1..N). Will return 1 if not found

◆ CompositeArguments_getRange()

double CompositeArguments_getRange ( CompositeArguments_t * args)

Returns the range in meters.

Parameters
[in]args- self
Returns
the range in meters

◆ CompositeArguments_getStrategy()

const char * CompositeArguments_getStrategy ( CompositeArguments_t * args)

Returns the strategy.

Parameters
[in]args- self
Returns
the strategy or NULL

◆ CompositeArguments_getTime()

const char * CompositeArguments_getTime ( CompositeArguments_t * args)

Returns the nominal time.

Parameters
[in]args- self
Returns
the nominal time (or NULL if there is none)

◆ CompositeArguments_hasArgument()

int CompositeArguments_hasArgument ( CompositeArguments_t * args,
const char * name )

Returns if there is a rave argument that is named accordingly.

Parameters
[in]args- self
[in]name- the name of the argument
Returns
if argument exists or not

◆ CompositeArguments_hasParameter()

int CompositeArguments_hasParameter ( CompositeArguments_t * args,
const char * quantity )

Returns if this composite generator is going to process specified parameter.

Parameters
[in]args- self
[in]quantity- the parameter quantity
Returns
1 if yes otherwise 0

◆ CompositeArguments_hasQualityFlag()

int CompositeArguments_hasQualityFlag ( CompositeArguments_t * args,
const char * name )
Parameters
[in]args- self
[in]name- the name of the quality flag
Returns
1 if the list of quality flags contains the specified name otherwise 0

◆ CompositeArguments_productToString()

const char * CompositeArguments_productToString ( Rave_CompositingProduct product)

Converts a method into a string.

Parameters
[in]product- the Rave_CompositingProduct
Returns
a const char defining the product

◆ CompositeArguments_removeArgument()

void CompositeArguments_removeArgument ( CompositeArguments_t * args,
const char * name )

Removes the rave argument that is named accordingly.

Parameters
[in]args- self
[in]name- the name of the argument

◆ CompositeArguments_removeQualityFlag()

int CompositeArguments_removeQualityFlag ( CompositeArguments_t * args,
const char * flag )

Removes the quality flag with provided name.

Parameters
[in]args- self
[in]flag- the quality flag that should be removed
Returns
1 on success, otherwise 0

◆ CompositeArguments_removeQualityFlagAt()

int CompositeArguments_removeQualityFlagAt ( CompositeArguments_t * args,
int index )

Removes the quality flag at specified index.

Parameters
[in]args- self
[in]index- the index
Returns
1 on success, otherwise 0

◆ CompositeArguments_setArea()

int CompositeArguments_setArea ( CompositeArguments_t * args,
Area_t * area )

Sets the area to use when creating the composite.

Parameters
[in]args- self
[in]area- the area
Returns
1 on success otherwise 0

◆ CompositeArguments_setDate()

int CompositeArguments_setDate ( CompositeArguments_t * args,
const char * value )

Sets the nominal date.

Parameters
[in]args- self
[in]value- the date in the format YYYYMMDD
Returns
1 on success, otherwise 0

◆ CompositeArguments_setElevationAngle()

void CompositeArguments_setElevationAngle ( CompositeArguments_t * args,
double angle )

Sets the elevation angle that should be used when generating a composite as PPI.

Parameters
[in]args- self
[in]angle- the angle in radians

◆ CompositeArguments_setHeight()

void CompositeArguments_setHeight ( CompositeArguments_t * args,
double height )

Sets the height that should be used when generating a composite.

Parameters
[in]args- self
[in]height- the height

◆ CompositeArguments_setProduct()

int CompositeArguments_setProduct ( CompositeArguments_t * args,
const char * product )

Sets the compositing method to use when creating the composite.

Note, this should be set as a const char since a plugin might be able to provide support for a non-predefined method.

Each method will have it's own requirements and as such it is up to the plugin to validate and allow for the combination.

Height/Elevation angle and range are used in combination with the products. PPI requires elevation angle CAPPI, PCAPPI and PMAX requires height above sea level PMAX also requires range in meters

Parameters
[in]args- self
[in]product- the method to use
Returns
1 on success otherwise 0

◆ CompositeArguments_setQIFieldName()

int CompositeArguments_setQIFieldName ( CompositeArguments_t * args,
const char * fieldname )

If a quality field based algorithm is implemented, this field can be set to indicate what field to use.

If not enough it is also possible to use arguments.

Parameters
[in]args- self
[in]fieldname- name of quality field to use
Returns
1 if possible to set, otherwise 0

◆ CompositeArguments_setQualityFlags()

int CompositeArguments_setQualityFlags ( CompositeArguments_t * args,
const char * flags[],
int nrflags )

Sets the quality flags that should be used.

Parameters
[in]args- self
[in]flags- an array of quality flags
[in]nrflags- number of flags
Returns
1 on success otherwise 0

◆ CompositeArguments_setRange()

void CompositeArguments_setRange ( CompositeArguments_t * args,
double range )

Sets the range that should be used when generating the Pseudo MAX.

This range is the limit in meters for when the vertical max should be used. When outside this range, the PCAPPI value is used instead.

Parameters
[in]args- self
[in]range- the range in meters

◆ CompositeArguments_setStrategy()

int CompositeArguments_setStrategy ( CompositeArguments_t * args,
const char * strategy )

Sets the strategy id.

Will help when determining which plugin/factory to use for product generation.

Parameters
[in]args- self
[in]strategy- the strategy id
Returns
1 on success, otherwise 0

◆ CompositeArguments_setTime()

int CompositeArguments_setTime ( CompositeArguments_t * args,
const char * value )

Sets the nominal time.

Parameters
[in]args- self
[in]value- the time in the format HHmmss
Returns
1 on success, otherwise 0

◆ CompositeArguments_stringToProduct()

Rave_CompositingProduct CompositeArguments_stringToProduct ( const char * product)

Converts a string into a product.

Parameters
[in]product- the string
Returns
the Rave_CompositingProduct or Rave_CompositingProduct_UNDEFINED if not possible to translate

◆ CompositeArguments_updateRadarIndexMapping()

int CompositeArguments_updateRadarIndexMapping ( CompositeArguments_t * args,
RaveObjectHashTable_t * mapping,
OdimSources_t * sources )

Updates the radar index mapping.

Parameters
[in]args- self
[in]mapping- the mapping.
[in]sources- the odim sources.
Returns
1 on success otherwise 0

Variable Documentation

◆ CompositeArgumentObjectEntry_TYPE

RaveCoreObjectType CompositeArgumentObjectEntry_TYPE
Initial value:
= {
"CompositeArgumentObjectEntry",
CompositeArgumentObjectEntry_constructor,
CompositeArgumentObjectEntry_destructor,
CompositeArgumentObjectEntry_copyconstructor
}
The object entry that is stored inside the arguments.
Definition compositearguments.c:116

A composite argument object entry that that keeps track of added objects.

◆ CompositeArguments_TYPE

RaveCoreObjectType CompositeArguments_TYPE
Initial value:
= {
"CompositeArguments",
CompositeArguments_constructor,
CompositeArguments_destructor,
CompositeArguments_copyconstructor
}
struct _CompositeArguments_t CompositeArguments_t
Defines a Geographical Area.
Definition compositearguments.h:41

Type definition to use when creating a rave object.