| 1 | greg | 2.1 | /* RCSid $Id$ */ | 
| 2 |  |  | /* | 
| 3 |  |  | **      Author: Christian Reetz ([email protected]) | 
| 4 |  |  | */ | 
| 5 |  |  | #ifndef __MUC_RANDVAR_H | 
| 6 |  |  | #define __MUC_RANDVAR_H | 
| 7 |  |  |  | 
| 8 |  |  | /**     \file muc_randvar.h | 
| 9 |  |  | *       \author Ch. Reetz ([email protected]) | 
| 10 |  |  | *       \brief representation of a random variables of arbitrary dimension | 
| 11 |  |  | */ | 
| 12 |  |  |  | 
| 13 |  |  |  | 
| 14 |  |  | #ifdef __cplusplus | 
| 15 |  |  | extern "C" { | 
| 16 |  |  | #endif | 
| 17 |  |  |  | 
| 18 |  |  | #include "g3flist.h" | 
| 19 |  |  |  | 
| 20 |  |  | /** random variable structure*/ | 
| 21 |  |  | struct muc_rvar { | 
| 22 |  |  | int                                             n;                      /*      number of samples */ | 
| 23 |  |  | double                                  w;                      /* sum of weights*/ | 
| 24 |  |  | double*                                 sum;            /* sample values sum*/ | 
| 25 |  |  | double*                                 sum_sqr;        /* squared sample values sum*/ | 
| 26 |  |  | double*                                 min;            /* minimum component value*/ | 
| 27 |  |  | double*                                 max;            /* maximum component value*/ | 
| 28 |  |  | g3FList*                                samples;        /* measured samples (if saved)*/ | 
| 29 |  |  | int                                             save_samp;      /*      if true (default) save samples*/ | 
| 30 |  |  | }; | 
| 31 |  |  |  | 
| 32 |  |  | /*      returns dimension of random variable*/ | 
| 33 |  |  | #define muc_rvar_get_dim(rv)                    (g3fl_get_comp_size(rv->samples)) | 
| 34 |  |  | /*      returns the number of samples*/ | 
| 35 |  |  | #define muc_rvar_get_sample_size(rv)    (rv->n) | 
| 36 |  |  |  | 
| 37 |  |  | /* returns a reference to a sample list element*/ | 
| 38 |  |  | /* Take care to have save_samp flag set*/ | 
| 39 |  |  | #define muc_rvar_get_sample(rv,id)              (g3fl_get(rv->samples, id)) | 
| 40 |  |  |  | 
| 41 |  |  |  | 
| 42 |  |  | int                                     muc_rvar_init(struct muc_rvar* rv); | 
| 43 |  |  | struct muc_rvar*        muc_rvar_create(); | 
| 44 |  |  | void                            muc_rvar_free(struct muc_rvar* rv); | 
| 45 |  |  |  | 
| 46 |  |  | /* set dimension of random variable (default 1). */ | 
| 47 |  |  | /*      random variable needs to be empty (\see muc_rvar_clear)*/ | 
| 48 |  |  | int             muc_rvar_set_dim(struct muc_rvar* rv,int dim); | 
| 49 |  |  |  | 
| 50 |  |  | /* set storing samples on (default) or off*/ | 
| 51 |  |  | /* random varianle must be cleared to succeed*/ | 
| 52 |  |  | int             muc_rvar_store_sample(struct muc_rvar* rv, int on); | 
| 53 |  |  |  | 
| 54 |  |  | /*      clear random variables samples. Don't change dimension.*/ | 
| 55 |  |  | void    muc_rvar_clear(struct muc_rvar* rv); | 
| 56 |  |  |  | 
| 57 |  |  | /*      Don't store measured sample values, just summed values.*/ | 
| 58 |  |  | /*      (Deletes samples if there are already stored some)*/ | 
| 59 |  |  | void    muc_rvar_no_samples(struct muc_rvar* rv); | 
| 60 |  |  |  | 
| 61 |  |  | /*      adds measured sample to sums (and stores them if \ref save_samp is true)*/ | 
| 62 |  |  | /*      The weight of the sample is assumed to be 1.0*/ | 
| 63 |  |  | int             muc_rvar_add_sample(struct muc_rvar* rv,double* sample); | 
| 64 |  |  |  | 
| 65 |  |  | /*      adds \param w weighted sample to sums */ | 
| 66 |  |  | /*      (and stores them if \ref save_samp is true)*/ | 
| 67 |  |  | int             muc_rvar_add_weighted_sample(struct muc_rvar* rv,double w,double* samp); | 
| 68 |  |  |  | 
| 69 |  |  | /*      returns current expected value in \param ex*/ | 
| 70 |  |  | int             muc_rvar_get_ex(struct muc_rvar* rv,double* ex); | 
| 71 |  |  |  | 
| 72 |  |  | /*      returns current variance in \param vx*/ | 
| 73 |  |  | int             muc_rvar_get_vx(struct muc_rvar* rv,double* vx); | 
| 74 |  |  |  | 
| 75 |  |  | /* returns current bounds*/ | 
| 76 |  |  | /*      \param bounds: array with len 2*component_size */ | 
| 77 |  |  | /* \return {min1, max1, min2, max2....}*/ | 
| 78 |  |  | int             muc_rvar_get_bounding_box(struct muc_rvar* rv, double* bounds); | 
| 79 |  |  |  | 
| 80 |  |  | /* return sample median (using averaging for even sample numbers)*/ | 
| 81 |  |  | /* \return false if samples are not stored*/ | 
| 82 |  |  | int             muc_rvar_get_median(struct muc_rvar* rv, double* median); | 
| 83 |  |  |  | 
| 84 |  |  | int             muc_rvar_get_percentile(struct muc_rvar* rv, double* median, double percentile); | 
| 85 |  |  |  | 
| 86 |  |  | #ifdef __cplusplus | 
| 87 |  |  | } | 
| 88 |  |  | #endif | 
| 89 |  |  | #endif |