RAVE
compositeengine.h
Go to the documentation of this file.
1/* --------------------------------------------------------------------
2Copyright (C) 2025 Swedish Meteorological and Hydrological Institute, SMHI,
3
4This file is part of RAVE.
5
6RAVE is free software: you can redistribute it and/or modify
7it under the terms of the GNU Lesser General Public License as published by
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
10
11RAVE is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU Lesser General Public License for more details.
15
16You should have received a copy of the GNU Lesser General Public License
17along with RAVE. If not, see <http://www.gnu.org/licenses/>.
18------------------------------------------------------------------------*/
25#ifndef COMPOSITEENGINE_H
26#define COMPOSITEENGINE_H
27
28#include "projection_pipeline.h"
29#include "rave_object.h"
30#include "rave_properties.h"
31#include "rave_types.h"
32#include "cartesian.h"
33#include "composite_utils.h"
34#include "compositearguments.h"
35#include "compositeenginebase.h"
36#include "limits.h"
37
42
47
52
55#define COMPOSITE_ENGINE_DISTANCE_TO_RADAR_RESOLUTION 2000.0
56
58#define COMPOSITE_ENGINE_HEIGHT_RESOLUTION 100.0
59
61#define COMPOSITE_ENGINE_DISTANCE_TO_RADAR_HOW_TASK "se.smhi.composite.distance.radar"
62
64#define COMPOSITE_ENGINE_HEIGHT_ABOVE_SEA_HOW_TASK "se.smhi.composite.height.radar"
65
67#define COMPOSITE_ENGINE_RADAR_INDEX_HOW_TASK "se.smhi.composite.index.radar"
68
70#define COMPOSITE_ENGINE_DEFAULT_QUALITY_FIELDS_GAIN (1.0/UCHAR_MAX)
71
73#define COMPOSITE_ENGINE_DEFAULT_QUALITY_FIELDS_OFFSET 0.0
74
86
97 typedef int(*composite_engine_onFinished_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* bindings, int nbindings);
98
110typedef int(*composite_engine_getLonLat_fun)(CompositeEngine_t* engine, void* extradata, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
111
126typedef int(*composite_engine_selectRadarData_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, int index, double olon, double olat, struct CompositeEngineRadarData_t* cvalues, int ncvalues);
127
142typedef int(*composite_engine_getPolarValueAtPosition_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, const char* quantity, PolarNavigationInfo* navinfo, const char* qiFieldName, RaveValueType* otype, double* ovalue, double* qivalue);
143
147typedef int(*composite_engine_setRadarData_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, double olon, double olat, long x, long y, struct CompositeEngineRadarData_t* cvalues, int ncvalues);
148
153
157typedef int(*composite_engine_getQualityValue_fun)(CompositeEngine_t* self, void* extradata, CompositeArguments_t* args, RaveCoreObject* obj, const char* quantity, const char* qfieldname, PolarNavigationInfo* navinfo, double* v);
158
163
180
192int CompositeEngineUtility_getLonLat(CompositeEngine_t* engine, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
193
206int CompositeEngineUtility_selectRadarData(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, int index, double olon, double olat, CompositeEngineRadarData_t* cvalues, int ncvalues);
207
211int CompositeEngineUtility_getPolarValueAtPosition(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, const char* quantity, PolarNavigationInfo* navinfo, const char* qiFieldName, RaveValueType* otype, double* ovalue, double* qivalue);
212
227int CompositeEngineUtility_setRadarData(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, double olon, double olat, long x, long y, CompositeEngineRadarData_t* cvalues, int ncvalues);
228
244
258int CompositeEngineUtility_fillQualityInformation(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, long x, long y, CartesianParam_t* param, double radardist, int radarindex, PolarNavigationInfo* navinfo);
259
270
278
285
287
298int CompositeEngineFunction_onStarting(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* bindings, int nbindings);
299
309 int CompositeEngineFunction_onFinished(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* bindings, int nbindings);
310
322int CompositeEngineFunction_getLonLat(CompositeEngine_t* self, void* extradata, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
323
335int CompositeEngineFunction_selectRadarData(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, int index, double olon, double olat, CompositeEngineRadarData_t* cvalues, int ncvalues);
336
350 int CompositeEngineFunction_getPolarValueAtPosition(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, const char* quantity, PolarNavigationInfo* navinfo, const char* qiFieldName, RaveValueType* otype, double* ovalue, double* qivalue);
351
364int CompositeEngineFunction_setRadarData(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, double olon, double olat, long x, long y, CompositeEngineRadarData_t* cvalues, int ncvalues);
365
376
377
390int CompositeEngineFunction_getQualityValue(CompositeEngine_t* self, void* extradata, CompositeArguments_t* args, RaveCoreObject* obj, const char* quantity, const char* qfieldname, PolarNavigationInfo* navinfo, double* v);
391
404int CompositeEngineFunction_fillQualityInformation(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, long x, long y, CartesianParam_t* param, double radardist, int radarindex, PolarNavigationInfo* info);
405
407
413
418
423
428
436
446
451
456
461
466
467
474
480
488
494
495#endif /* COMPOSITEENGINE_H */
Defines the functions available when working with cartesian products.
struct _Cartesian_t Cartesian_t
Defines a Cartesian product.
Definition cartesian.h:43
struct _CartesianParam_t CartesianParam_t
Defines a Cartesian product.
Definition cartesianparam.h:43
Contains various utility functions when creating composite factories.
The arguments that should be passed on to the composite generator.
struct _CompositeArguments_t CompositeArguments_t
Defines a Geographical Area.
Definition compositearguments.h:41
RaveCoreObjectType CompositeEngine_TYPE
Type definition to use when creating a rave object.
Definition compositeengine.c:932
int(* composite_engine_getQualityValue_fun)(CompositeEngine_t *self, void *extradata, CompositeArguments_t *args, RaveCoreObject *obj, const char *quantity, const char *qfieldname, PolarNavigationInfo *navinfo, double *v)
Definition compositeengine.h:157
int(* composite_engine_selectRadarData_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, int index, double olon, double olat, struct CompositeEngineRadarData_t *cvalues, int ncvalues)
Function pointer used during composite generation (CompositeEngine_generate).
Definition compositeengine.h:126
int CompositeEngine_setOnStartingFunction(CompositeEngine_t *self, composite_engine_onStarting_fun onStarting)
Sets the on starting function.
Definition compositeengine.c:340
int CompositeEngineFunction_addQualityFlagsToCartesian(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian)
Adds the quality flags to the cartesian product.
Definition compositeengine.c:498
void CompositeEngine_setProperties(CompositeEngine_t *self, RaveProperties_t *properties)
Sets the properties in this engine.
Definition compositeengine.c:744
int CompositeEngineFunction_onStarting(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *bindings, int nbindings)
Delegates to the onStarting function pointer.
Definition compositeengine.c:468
int CompositeEngineUtility_addQualityFlagsToCartesian(CompositeEngine_t *engine, CompositeArguments_t *arguments, Cartesian_t *cartesian)
Creates the quality fields in the cartesian product using arguments and default parameters.
Definition compositeengine.c:676
int CompositeEngine_setDefaultPolarValueAtPositionFunction(CompositeEngine_t *self, composite_engine_getPolarValueAtPosition_fun getPolarValueAtPosition)
Sets the default polarValueAtPosition function,.
Definition compositeengine.c:381
int CompositeEngineUtility_getPolarValueAtPosition(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, const char *quantity, PolarNavigationInfo *navinfo, const char *qiFieldName, RaveValueType *otype, double *ovalue, double *qivalue)
Fetches the polar value from specified position for specified quantity.
Definition compositeengine.c:610
int CompositeEngineFunction_fillQualityInformation(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, long x, long y, CartesianParam_t *param, double radardist, int radarindex, PolarNavigationInfo *info)
Fills the quality information into the product.
Definition compositeengine.c:508
int CompositeEngineUtility_setRadarData(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, double olon, double olat, long x, long y, CompositeEngineRadarData_t *cvalues, int ncvalues)
Sets the radar data for specified position using NEAREST.
Definition compositeengine.c:615
int CompositeEngineFunction_getLonLat(CompositeEngine_t *self, void *extradata, CompositeEngineObjectBinding_t *binding, double herex, double herey, double *olon, double *olat)
This delegates the call to the set lon-lat function.
Definition compositeengine.c:478
int CompositeEngine_setLonLatFunction(CompositeEngine_t *self, composite_engine_getLonLat_fun getLonLat)
Sets the lon-lat function.
Definition compositeengine.c:361
int CompositeEngine_setOnFinishedFunction(CompositeEngine_t *self, composite_engine_onFinished_fun onFinished)
Sets the on finished function.
Definition compositeengine.c:350
int CompositeEngineFunction_getQualityValue(CompositeEngine_t *self, void *extradata, CompositeArguments_t *args, RaveCoreObject *obj, const char *quantity, const char *qfieldname, PolarNavigationInfo *navinfo, double *v)
Returns the quality value at specified polar navigation info.
Definition compositeengine.c:503
int CompositeEngineFunction_getPolarValueAtPosition(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, const char *quantity, PolarNavigationInfo *navinfo, const char *qiFieldName, RaveValueType *otype, double *ovalue, double *qivalue)
Definition compositeengine.c:488
int CompositeEngine_setSelectRadarDataFunction(CompositeEngine_t *self, composite_engine_selectRadarData_fun selectRadarData)
Sets the select radar data function.
Definition compositeengine.c:371
void CompositeEngineUtility_resetRadarData(CompositeArguments_t *arguments, CompositeEngineRadarData_t *cvalues, int nentries)
Resets the array of CompositeEngineRadarData_t except the CartesianParam parameter.
Definition compositeengine.c:906
int(* composite_engine_getPolarValueAtPosition_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, const char *quantity, PolarNavigationInfo *navinfo, const char *qiFieldName, RaveValueType *otype, double *ovalue, double *qivalue)
Function pointer used during composite generation (CompositeEngine_generate) from the default selectR...
Definition compositeengine.h:142
Cartesian_t * CompositeEngine_generate(CompositeEngine_t *self, CompositeArguments_t *arguments, void *extradata)
Generates the composite using a basic approach.
Definition compositeengine.c:769
int CompositeEngine_setGetQualityValueFunction(CompositeEngine_t *self, composite_engine_getQualityValue_fun getQualityValue)
The get quality value function.
Definition compositeengine.c:445
int CompositeEngine_setSetRadarDataFunction(CompositeEngine_t *self, composite_engine_setRadarData_fun setRadarData)
Sets the set radar data function.
Definition compositeengine.c:424
RaveProperties_t * CompositeEngine_getProperties(CompositeEngine_t *self)
Definition compositeengine.c:753
struct _CompositeEngine_t CompositeEngine_t
Defines a Composite engine.
Definition compositeengine.h:41
int CompositeEngine_setAddQualityFlagsToCartesianFunction(CompositeEngine_t *self, composite_engine_addQualityFlagsToCartesian_fun addQualityFlagsToCartesian)
Sets the add quality flags to cartesian that will add the quality flags to the cartesian product.
Definition compositeengine.c:434
int(* composite_engine_onStarting_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *bindings, int nbindings)
Will be called before the looping over the cartesian product will be done.
Definition compositeengine.h:85
int(* composite_engine_fillQualityInformation_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, long x, long y, CartesianParam_t *param, double radardist, int radarindex, PolarNavigationInfo *info)
Fills the quality information in the cartesian product.
Definition compositeengine.h:162
int CompositeEngineFunction_selectRadarData(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, int index, double olon, double olat, CompositeEngineRadarData_t *cvalues, int ncvalues)
Definition compositeengine.c:483
int(* composite_engine_onFinished_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *bindings, int nbindings)
Will be called after the looping over the cartesian product has finished Gives the user a possibility...
Definition compositeengine.h:97
int(* composite_engine_setRadarData_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, double olon, double olat, long x, long y, struct CompositeEngineRadarData_t *cvalues, int ncvalues)
Sets the radar data in the cartesian product.
Definition compositeengine.h:147
void CompositeEngineUtility_freeRadarData(CompositeEngineRadarData_t **cvalues, int nparam)
Frees the CompositeEngineRadarData_t and ensures that all associated parameters are released.
Definition compositeengine.c:918
int CompositeEngine_setFillQualityInformationFunction(CompositeEngine_t *self, composite_engine_fillQualityInformation_fun fillQualityInformation)
The fill quality information function.
Definition compositeengine.c:455
int(* composite_engine_getLonLat_fun)(CompositeEngine_t *engine, void *extradata, CompositeEngineObjectBinding_t *binding, double herex, double herey, double *olon, double *olat)
Function pointer used during composite generation (CompositeEngine_generate).
Definition compositeengine.h:110
int CompositeEngineFunction_setRadarData(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, double olon, double olat, long x, long y, CompositeEngineRadarData_t *cvalues, int ncvalues)
Definition compositeengine.c:493
int CompositeEngineFunction_onFinished(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *bindings, int nbindings)
Delegates to the onFinished function pointer.
Definition compositeengine.c:473
CompositeEngineRadarData_t * CompositeEngineUtility_createRadarData(CompositeArguments_t *arguments, Cartesian_t *cartesian, int *nentries)
Creates an array of CompositeEngineRadarData_t.
Definition compositeengine.c:871
int CompositeEngine_registerQualityFlagDefinition(CompositeEngine_t *self, CompositeQualityFlagDefinition_t *definition)
Registers a definition for a quality flag so that correct datatype, offset and gain are used.
Definition compositeengine.c:759
int CompositeEngine_registerPolarValueAtPositionFunction(CompositeEngine_t *self, const char *quantity, composite_engine_getPolarValueAtPosition_fun getPolarValueAtPosition)
Registers a polar value at position function for the specified quantity.
Definition compositeengine.c:392
int CompositeEngineUtility_selectRadarData(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, CompositeEngineObjectBinding_t *binding, int index, double olon, double olat, CompositeEngineRadarData_t *cvalues, int ncvalues)
Fetches the radar data for specified position using NEAREST.
Definition compositeengine.c:521
int(* composite_engine_addQualityFlagsToCartesian_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian)
Adds quality flags to the cartesian product.
Definition compositeengine.h:152
int CompositeEngineUtility_getLonLat(CompositeEngine_t *engine, CompositeEngineObjectBinding_t *binding, double herex, double herey, double *olon, double *olat)
Calculates the lon/lat coordinate using the provided pipeline.
Definition compositeengine.c:516
int CompositeEngineUtility_fillQualityInformation(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, long x, long y, CartesianParam_t *param, double radardist, int radarindex, PolarNavigationInfo *navinfo)
Fills the quality information for the provided parameter.
Definition compositeengine.c:681
Contains definitions useful when working with the composite engine.
Helper class to support both legacy PROJ.4 projection and > PROJ.4 This object supports RAVE_OBJECT_C...
Generic implementation of an object that is used within rave.
struct _raveobject RaveCoreObject
The basic raveobject that contains the header information for all rave objects.
struct _raveobjecttype RaveCoreObjectType
The rave object type definition.
Property handling This object supports RAVE_OBJECT_CLONE.
struct _RaveProperties_t RaveProperties_t
Defines the area registry.
Definition rave_properties.h:35
Type definitions for RAVE.
RaveValueType
Different value types.
Definition rave_types.h:72
Binding for associating rave objects with pipelines, sources and other miscellaneous information.
Definition compositeenginebase.h:42
Contains information required when determining what data point to use.
Definition compositeengine.h:167
PolarNavigationInfo navinfo
the navigation info
Definition compositeengine.h:174
CartesianParam_t * parameter
the cartesian parameter
Definition compositeengine.h:175
int radarindex
radar index in list of radars
Definition compositeengine.h:172
composite_engine_getPolarValueAtPosition_fun getPolarValueAtPosition
specific get polar value at position
Definition compositeengine.h:177
RaveValueType vtype
value type
Definition compositeengine.h:168
double value
value
Definition compositeengine.h:169
double mindist
min distance
Definition compositeengine.h:170
const char * name
name of quantity
Definition compositeengine.h:173
void * extradata
will be provided to the extradata pointer in the function call
Definition compositeengine.h:178
double radardist
distance to radar
Definition compositeengine.h:171
double qivalue
quality value
Definition compositeengine.h:176
Can be used to define if a quality flag requires different gain/offset or datatype than the default v...
Definition composite_utils.h:105
Provides user with navigation information.
Definition rave_types.h:160
Represents the cartesian product.
Definition compositeengine.c:47