source: trunk/include/ew_timeseries.h @ 4194

Revision 4194, 6.5 KB checked in by scott, 7 years ago (diff)

Ewspectra, compute_spectra & sniffspectra

Line 
1/******************************************************************************
2 *
3 *      File:                   ew_timeseries.h
4 *
5 *      Function:               Representation of & a library of functions that can handle
6 *                  a time-series for processing in Earthworm modules
7 *
8 *      Author(s):              Paul Friberg, ISTI
9 *                  Scott Hunter, ISTI
10 *
11 *      Source:                 Started anew.
12 *
13 *      Notes:                 
14 *
15 *      Change History:
16 *                      4/26/11 Started source
17 *     
18 *****************************************************************************/
19
20#ifndef EW_TIME_SERIES_H
21#define EW_TIME_SERIES_H
22
23#include <trace_buf.h>
24#include <ws_clientII.h>
25
26typedef struct  {
27        TRACE2X_HEADER trh2x;
28        int gaps;                 /* # of gaps in the time-series */
29        double gapTime;   /* amount of time in gaps */
30        double gapValue;  /* values used to fill gaps with */
31        long   dataCount; /* # of entries in data */
32        int    dataType;  /* type of data in series */
33        double *data;     /* a pointer to the data as an array of doubles, of trh2x.nsamp number of samples */
34}
35EW_TIME_SERIES ;
36
37#define EWTS_TYPE_SIMPLE (0)    /* each entry is one double */
38#define EWTS_TYPE_COMPLEX (1)   /* each entry is a complex value:
39                                                                        one double for the real part,
40                                                                        the next for the imaginary part */
41#define EWTS_TYPE_AMPPHS (2)    /* each entry is a pair of values:
42                                                                        one double for the amplitude,
43                                                                        the next for the phase */
44
45#define EWTS_MODE_FIRST (1)             /* process only 1st component of each entry */
46#define EWTS_MODE_SECOND (2)    /* process only 2nd component of each entry */
47#define EWTS_MODE_BOTH (3)              /* process both components of each entry */
48
49/*****************************************************************************
50        unary_calc_EWTS( arg, op, oparg ): 
51                Call op(d,oparg) for each d in arg
52                Return 0 on success
53*****************************************************************************/
54int unary_calc_EWTS( 
55        EW_TIME_SERIES arg,                                     /* the EWTS to calculate from */
56        int mode,                                                       /* which component(s) to process */
57        void(*op)(const double, const int, void* ),     /* the accumulator function */
58        void *oparg );                                          /* the "accumulator" argument for op */
59
60/*****************************************************************************
61        unary_modify_EWTS( arg, op, oparg ):
62                Replace each d in arg with op(d,oparg)
63                Return 0 on success
64*****************************************************************************/
65int unary_modify_EWTS( 
66        EW_TIME_SERIES arg,                                             /* the EWTS to modify */
67        int mode,                                                               /* which component(s) to process */
68        double(*op)(const double, const int, const double),/* the modify function */
69        const double oparg );                                   /* second argument to all calls to op */
70
71/*****************************************************************************
72        unary_fill_EWTS( input, output, op, oparg ):
73                For each d in input, assign corresponding element of output with op(d,oparg)
74                Return 0 on success
75*****************************************************************************/
76int unary_fill_EWTS( 
77        EW_TIME_SERIES input,                                   /* the EWTS to calculate from */
78        EW_TIME_SERIES output,                                  /* the EWTS to fill */
79        int mode,                                                               /* which component(s) to process */
80        double(*op)(const double, const int, const double),/* function to compute fill values */
81        const double oparg );                                   /* second arg to function */
82
83/*****************************************************************************
84        binary_modify_EWTS( arg1, arg2, op ):
85                Replace each d in arg1 with op(d,d2), where d2 is the
86                corresponding element of arg2
87                Return 0 on success
88*****************************************************************************/
89int binary_modify_EWTS( 
90        EW_TIME_SERIES arg1,                                            /* the EWTS to modify */
91        EW_TIME_SERIES arg2,                                            /* EWTS with second arguments */
92        int mode,                                                                       /* which component(s) to process */
93        double(*op)(const double, const int, const double) );   /* the modify function */
94
95/*****************************************************************************
96        binary_fill_EWTS( arg1, arg2, output, op ):
97                For each d1 in arg1, assign corresponding element of output with
98                op(d1,d2), where d2 is the corresponding element of arg2
99                Return 0 on success
100*****************************************************************************/
101int binary_fill_EWTS( 
102        EW_TIME_SERIES arg1,                                            /* the 1st EWTS to read */
103        EW_TIME_SERIES arg2,                                            /* the 2nd EWTS to read */ 
104        EW_TIME_SERIES output,                                          /* the EWTS to fill */
105        int mode,                                                                       /* which component(s) to process */
106        double(*op)(const double, const int, const double) );   /* function to compute fill values */
107
108/* Taper types for taper_EWTS */
109#define BARTLETT        (1)
110#define HANNING         (2)
111#define PARZAN          (3)
112#define BMHARRIS        (4)
113
114/*****************************************************************************
115        taper_EWTS( ewts, taper_type, fraction ):
116                Taper the fraction of ewts using the specified taper type
117*****************************************************************************/
118void taper_EWTS( 
119        EW_TIME_SERIES ewts,    /* EWTS to taper */
120        int taper_type,                 /* type of taper to employ */
121        double fraction,                /* fraction of EWTS to taper at each end */
122        int mode );                             /* which component(s) to process */
123
124/*****************************************************************************
125        subtract_from_EWTS( ewts1, ewts2 ):
126                Subtract the elements of ewts2 from the corresponding elements of ewts1
127                Return 0 on success
128*****************************************************************************/
129int subtract_from_EWTS( 
130        EW_TIME_SERIES ewts1,   /* EWTS to subtract from */
131        EW_TIME_SERIES ewts2,   /* EWTS of values to subtract */
132        int mode );                             /* which component(s) to process */
133
134/*****************************************************************************
135        demean_EWTS( ewts ):
136                Subtract the mean of ewts from all of its elements
137                Return 0 on success
138*****************************************************************************/
139int demean_EWTS( 
140        EW_TIME_SERIES ewts );  /* EWTS to demean */
141
142/*****************************************************************************
143        print_EWTS( ewts, filename ):
144                Print the contents of ewts (a line for each value with with
145                tab-separated time & value) to the specified file
146*****************************************************************************/
147void print_EWTS(
148        EW_TIME_SERIES *ewts,           /* EWTS to print */
149        char *col1header,                       /* header for first column ("Time" if NULL) */
150        /* map entry index/time to first column value time if NULL */
151                double(*op)(int i, double t, void *arg),       
152        void *entryMapArg,                      /* what to pass as 3rd arg to entryMap */
153        FILE *fp);                                      /* open file to print to; stdout if NULL */
154
155#endif
Note: See TracBrowser for help on using the repository browser.