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
86typedef int(*composite_engine_onStarting_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, CompositeEngineObjectBinding_t* bindings, int nbindings);
87
99 typedef int(*composite_engine_onFinished_fun)(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, CompositeEngineObjectBinding_t* bindings, int nbindings);
100
112typedef int(*composite_engine_getLonLat_fun)(CompositeEngine_t* engine, void* extradata, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
113
128typedef 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);
129
144typedef 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);
145
149typedef 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);
150
155
159typedef 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);
160
165
182
194int CompositeEngineUtility_getLonLat(CompositeEngine_t* engine, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
195
208int CompositeEngineUtility_selectRadarData(CompositeEngine_t* engine, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, int index, double olon, double olat, CompositeEngineRadarData_t* cvalues, int ncvalues);
209
213int 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);
214
229int 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);
230
246
260int CompositeEngineUtility_fillQualityInformation(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, long x, long y, CartesianParam_t* param, double radardist, int radarindex, PolarNavigationInfo* navinfo);
261
272
280
287
289
301int CompositeEngineFunction_onStarting(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, CompositeEngineObjectBinding_t* bindings, int nbindings);
302
313 int CompositeEngineFunction_onFinished(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, Cartesian_t* cartesian, CompositeEngineObjectBinding_t* bindings, int nbindings);
314
326int CompositeEngineFunction_getLonLat(CompositeEngine_t* self, void* extradata, CompositeEngineObjectBinding_t* binding, double herex, double herey, double* olon, double* olat);
327
339int CompositeEngineFunction_selectRadarData(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, CompositeEngineObjectBinding_t* binding, int index, double olon, double olat, CompositeEngineRadarData_t* cvalues, int ncvalues);
340
354 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);
355
368int 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);
369
380
381
394int CompositeEngineFunction_getQualityValue(CompositeEngine_t* self, void* extradata, CompositeArguments_t* args, RaveCoreObject* obj, const char* quantity, const char* qfieldname, PolarNavigationInfo* navinfo, double* v);
395
408int CompositeEngineFunction_fillQualityInformation(CompositeEngine_t* self, void* extradata, CompositeArguments_t* arguments, long x, long y, CartesianParam_t* param, double radardist, int radarindex, PolarNavigationInfo* info);
409
411
417
422
427
432
440
450
455
460
465
470
471
478
484
492
497
503void CompositeEngine_setDebug(CompositeEngine_t* self, int debug);
504
511
513
514#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:942
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:159
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:128
int CompositeEngine_setOnStartingFunction(CompositeEngine_t *self, composite_engine_onStarting_fun onStarting)
Sets the on starting function.
Definition compositeengine.c:343
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:501
void CompositeEngine_setProperties(CompositeEngine_t *self, RaveProperties_t *properties)
Sets the properties in this engine.
Definition compositeengine.c:746
int CompositeEngine_getDebug(CompositeEngine_t *self)
Returns if debug has been set or not.
Definition compositeengine.c:935
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:679
int CompositeEngine_setDefaultPolarValueAtPositionFunction(CompositeEngine_t *self, composite_engine_getPolarValueAtPosition_fun getPolarValueAtPosition)
Sets the default polarValueAtPosition function,.
Definition compositeengine.c:384
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:613
int(* composite_engine_onFinished_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, 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:99
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:511
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:618
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:481
int CompositeEngine_setLonLatFunction(CompositeEngine_t *self, composite_engine_getLonLat_fun getLonLat)
Sets the lon-lat function.
Definition compositeengine.c:364
int CompositeEngineFunction_onFinished(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, CompositeEngineObjectBinding_t *bindings, int nbindings)
Delegates to the onFinished function pointer.
Definition compositeengine.c:476
int CompositeEngine_setOnFinishedFunction(CompositeEngine_t *self, composite_engine_onFinished_fun onFinished)
Sets the on finished function.
Definition compositeengine.c:353
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:506
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:491
int CompositeEngineFunction_onStarting(CompositeEngine_t *self, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, CompositeEngineObjectBinding_t *bindings, int nbindings)
Delegates to the onStarting function pointer.
Definition compositeengine.c:471
int CompositeEngine_setSelectRadarDataFunction(CompositeEngine_t *self, composite_engine_selectRadarData_fun selectRadarData)
Sets the select radar data function.
Definition compositeengine.c:374
void CompositeEngineUtility_resetRadarData(CompositeArguments_t *arguments, CompositeEngineRadarData_t *cvalues, int nentries)
Resets the array of CompositeEngineRadarData_t except the CartesianParam parameter.
Definition compositeengine.c:907
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:144
Cartesian_t * CompositeEngine_generate(CompositeEngine_t *self, CompositeArguments_t *arguments, void *extradata)
Generates the composite using a basic approach.
Definition compositeengine.c:771
int CompositeEngine_setGetQualityValueFunction(CompositeEngine_t *self, composite_engine_getQualityValue_fun getQualityValue)
The get quality value function.
Definition compositeengine.c:448
int CompositeEngine_setSetRadarDataFunction(CompositeEngine_t *self, composite_engine_setRadarData_fun setRadarData)
Sets the set radar data function.
Definition compositeengine.c:427
RaveProperties_t * CompositeEngine_getProperties(CompositeEngine_t *self)
Definition compositeengine.c:755
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:437
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:164
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:486
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:149
void CompositeEngineUtility_freeRadarData(CompositeEngineRadarData_t **cvalues, int nparam)
Frees the CompositeEngineRadarData_t and ensures that all associated parameters are released.
Definition compositeengine.c:919
int CompositeEngine_setFillQualityInformationFunction(CompositeEngine_t *self, composite_engine_fillQualityInformation_fun fillQualityInformation)
The fill quality information function.
Definition compositeengine.c:458
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:112
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:496
CompositeEngineRadarData_t * CompositeEngineUtility_createRadarData(CompositeArguments_t *arguments, Cartesian_t *cartesian, int *nentries)
Creates an array of CompositeEngineRadarData_t.
Definition compositeengine.c:872
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:761
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:395
void CompositeEngine_setDebug(CompositeEngine_t *self, int debug)
Useful when debugging parts of processing when using the composite engine.
Definition compositeengine.c:930
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:524
int(* composite_engine_onStarting_fun)(CompositeEngine_t *engine, void *extradata, CompositeArguments_t *arguments, Cartesian_t *cartesian, CompositeEngineObjectBinding_t *bindings, int nbindings)
Will be called before the looping over the cartesian product will be done.
Definition compositeengine.h:86
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:154
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:519
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:684
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:169
PolarNavigationInfo navinfo
the navigation info
Definition compositeengine.h:176
CartesianParam_t * parameter
the cartesian parameter
Definition compositeengine.h:177
int radarindex
radar index in list of radars
Definition compositeengine.h:174
composite_engine_getPolarValueAtPosition_fun getPolarValueAtPosition
specific get polar value at position
Definition compositeengine.h:179
RaveValueType vtype
value type
Definition compositeengine.h:170
double value
value
Definition compositeengine.h:171
double mindist
min distance
Definition compositeengine.h:172
const char * name
name of quantity
Definition compositeengine.h:175
void * extradata
will be provided to the extradata pointer in the function call
Definition compositeengine.h:180
double radardist
distance to radar
Definition compositeengine.h:173
double qivalue
quality value
Definition compositeengine.h:178
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