LAL  7.5.0.1-08ee4f4
TimeSeries.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (C) 2007 Kipp Cannon
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
13  * Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19 
20 
21 #ifndef _TIMESERIES_H
22 #define _TIMESERIES_H
23 
24 
25 #include <stddef.h>
26 #include <lal/LALDatatypes.h>
27 
28 #if defined(__cplusplus)
29 extern "C" {
30 #elif 0
31 } /* so that editors will match preceding brace */
32 #endif
33 
34 /**
35  * \defgroup TimeSeriesManipulation Time Series Manipulation
36  * \ingroup lal_tools
37  * \author Kipp Cannon <kipp@gravity.phys.uwm.edu>
38  *
39  * \brief This is a suite of functions for creating, destroying, and manipulating LAL
40  * time series. One pair of functions (the XLAL version and its LAL
41  * counterpart) is available for each method and series type. For example
42  * <tt>XLALCreateREAL4TimeSeries()</tt> is available for creating time series
43  * of \c REAL4 data, and the LAL-stype wrapper
44  * <tt>LALCreateREAL4TimeSeries()</tt> is provided which is equivalent to the
45  * XLAL version in all respects except that it adheres to the LAL calling
46  * conventions (eg.\ it takes a \c LALStatus pointer as its first
47  * argument, its return type is \c void, etc.).
48  *
49  */
50 /** @{ */
51 
52 /**
53  * \name Creation Functions
54  *
55  * ### Synopsis ###
56  *
57  * \code
58  * #include <lal/TimeSeries.h>
59  *
60  * XLALCreate<timeseriestype>()
61  * LALCreate<timeseriestype>()
62  * \endcode
63  *
64  * ### Description ###
65  *
66  * These functions create LAL frequency series. An XLAL function returns a
67  * pointer to the newly created series or \c NULL on failure. The LAL
68  * counterpart accepts the address of a pointer which it fills with the
69  * address of the newly created series or \c NULL on failure.
70  * Additionally, the LAL wrapper provides standard LAL-style error checking
71  * via a \c LALStatus pointer.
72  */
73 /** @{ */
74 COMPLEX8TimeSeries *XLALCreateCOMPLEX8TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
75 COMPLEX16TimeSeries *XLALCreateCOMPLEX16TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
76 REAL4TimeSeries *XLALCreateREAL4TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
77 REAL8TimeSeries *XLALCreateREAL8TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
78 INT2TimeSeries *XLALCreateINT2TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
79 INT4TimeSeries *XLALCreateINT4TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
80 INT8TimeSeries *XLALCreateINT8TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
81 UINT2TimeSeries *XLALCreateUINT2TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
82 UINT4TimeSeries *XLALCreateUINT4TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
83 UINT8TimeSeries *XLALCreateUINT8TimeSeries ( const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length );
84 /** @} */
85 
86 /**
87  * \name Destruction Functions
88  *
89  * ### Synopsis ###
90  *
91  * \code
92  * #include <lal/TimeSeries.h>
93  *
94  * XLALDestroy<timeseriestype>()
95  * LALDestroy<timeseriestype>()
96  * \endcode
97  *
98  * ### Description ###
99  *
100  * These functions free all memory associated with a LAL time series. It is
101  * safe to pass \c NULL to these functions.
102  *
103  */
104 /** @{ */
115 /** @} */
116 
117 
118 /**
119  * \name Conversion Functions
120  *
121  * ### Synopsis ###
122  *
123  * \code
124  * #include <lal/TimeSeries.h>
125  *
126  * XLALConvertREAL8TimeSeriesToREAL4()
127  * XLALConvertREAL4TimeSeriesToREAL8()
128  * \endcode
129  *
130  * ### Description ###
131  *
132  * These functions create a new REAL8 or REAL4 time series, initialized
133  * from a REAL4 or REAL8 time series, respectively. The source time series
134  * is not deallocated.
135  */
136 /** @{ */
139 /** @} */
140 
141 
142 /**
143  * \name Cutting Functions
144  *
145  * ### Synopsis ###
146  *
147  * \code
148  * #include <lal/TimeSeries.h>
149  *
150  * XLALCut<timeseriestype>()
151  * LALCut<timeseriestype>()
152  * \endcode
153  *
154  * ### Description ###
155  *
156  * These functions create a new time series by extracting a section of an
157  * existing time series.
158  */
159 /** @{ */
160 COMPLEX8TimeSeries *XLALCutCOMPLEX8TimeSeries ( const COMPLEX8TimeSeries *series, size_t first, size_t length );
161 COMPLEX16TimeSeries *XLALCutCOMPLEX16TimeSeries ( const COMPLEX16TimeSeries *series, size_t first, size_t length );
162 REAL4TimeSeries *XLALCutREAL4TimeSeries ( const REAL4TimeSeries *series, size_t first, size_t length );
163 REAL8TimeSeries *XLALCutREAL8TimeSeries ( const REAL8TimeSeries *series, size_t first, size_t length );
164 INT2TimeSeries *XLALCutINT2TimeSeries ( const INT2TimeSeries *series, size_t first, size_t length );
165 INT4TimeSeries *XLALCutINT4TimeSeries ( const INT4TimeSeries *series, size_t first, size_t length );
166 INT8TimeSeries *XLALCutINT8TimeSeries ( const INT8TimeSeries *series, size_t first, size_t length );
167 UINT2TimeSeries *XLALCutUINT2TimeSeries ( const UINT2TimeSeries *series, size_t first, size_t length );
168 UINT4TimeSeries *XLALCutUINT4TimeSeries ( const UINT4TimeSeries *series, size_t first, size_t length );
169 UINT8TimeSeries *XLALCutUINT8TimeSeries ( const UINT8TimeSeries *series, size_t first, size_t length );
170 /** @} */
171 
172 /**
173  * \name Resizing Functions
174  *
175  * ### Synopsis ###
176  *
177  * \code
178  * #include <lal/TimeSeries.h>
179  *
180  * XLALResize<timeseriestype>()
181  * LALResize<timeseriestype>()
182  * XLALShrink<timeseriestype>()
183  * LALShrink<timeseriestype>()
184  * \endcode
185  *
186  * ### Description ###
187  *
188  * These functions resize an existing time series. The new time series will
189  * have the given length, and its contents will consist of that part of the
190  * original time series that started at sample first. If first is negative,
191  * then the new time series is padded at the start by that many samples. The
192  * time series' epoch is adjusted appropriately.
193  */
194 /** @{ */
197 REAL4TimeSeries *XLALResizeREAL4TimeSeries ( REAL4TimeSeries *series, int first, size_t length );
198 REAL8TimeSeries *XLALResizeREAL8TimeSeries ( REAL8TimeSeries *series, int first, size_t length );
199 INT2TimeSeries *XLALResizeINT2TimeSeries ( INT2TimeSeries *series, int first, size_t length );
200 INT4TimeSeries *XLALResizeINT4TimeSeries ( INT4TimeSeries *series, int first, size_t length );
201 INT8TimeSeries *XLALResizeINT8TimeSeries ( INT8TimeSeries *series, int first, size_t length );
202 UINT2TimeSeries *XLALResizeUINT2TimeSeries ( UINT2TimeSeries *series, int first, size_t length );
203 UINT4TimeSeries *XLALResizeUINT4TimeSeries ( UINT4TimeSeries *series, int first, size_t length );
204 UINT8TimeSeries *XLALResizeUINT8TimeSeries ( UINT8TimeSeries *series, int first, size_t length );
205 
206 COMPLEX8TimeSeries *XLALShrinkCOMPLEX8TimeSeries ( COMPLEX8TimeSeries *series, size_t first, size_t length );
208 REAL4TimeSeries *XLALShrinkREAL4TimeSeries ( REAL4TimeSeries *series, size_t first, size_t length );
209 REAL8TimeSeries *XLALShrinkREAL8TimeSeries ( REAL8TimeSeries *series, size_t first, size_t length );
210 INT2TimeSeries *XLALShrinkINT2TimeSeries ( INT2TimeSeries *series, size_t first, size_t length );
211 INT4TimeSeries *XLALShrinkINT4TimeSeries ( INT4TimeSeries *series, size_t first, size_t length );
212 INT8TimeSeries *XLALShrinkINT8TimeSeries ( INT8TimeSeries *series, size_t first, size_t length );
213 UINT2TimeSeries *XLALShrinkUINT2TimeSeries ( UINT2TimeSeries *series, size_t first, size_t length );
214 UINT4TimeSeries *XLALShrinkUINT4TimeSeries ( UINT4TimeSeries *series, size_t first, size_t length );
215 UINT8TimeSeries *XLALShrinkUINT8TimeSeries ( UINT8TimeSeries *series, size_t first, size_t length );
216 /** @} */
217 
218 /**
219  * \name Addition Functions
220  *
221  * ### Synopsis ###
222  *
223  * \code
224  * #include <lal/TimeSeries.h>
225  *
226  * XLALAdd<timeseriestype>()
227  * \endcode
228  *
229  * ### Description ###
230  *
231  * These functions add the second argument to the first argument, returning a
232  * pointer to the first argument on success or NULL on failure. The two
233  * series must have the same heterodyne frequency and time resolution, and
234  * have units that differ only by a dimensionless factor.
235  *
236  */
237 /** @{ */
248 /** @} */
249 
250 /** @} */
251 
252 #if 0
253 { /* so that editors will match succeeding brace */
254 #elif defined(__cplusplus)
255 }
256 #endif
257 
258 #endif /* _TIMESERIES_H */
const char *const name
type name
Definition: UserInput.c:193
double REAL8
Double precision real floating-point number (8 bytes).
char CHAR
One-byte signed integer, see Headers LAL(Atomic)Datatypes.h for more details.
REAL8TimeSeries * XLALResizeREAL8TimeSeries(REAL8TimeSeries *series, int first, size_t length)
REAL4TimeSeries * XLALResizeREAL4TimeSeries(REAL4TimeSeries *series, int first, size_t length)
UINT4TimeSeries * XLALShrinkUINT4TimeSeries(UINT4TimeSeries *series, size_t first, size_t length)
INT8TimeSeries * XLALCutINT8TimeSeries(const INT8TimeSeries *series, size_t first, size_t length)
INT8TimeSeries * XLALAddINT8TimeSeries(INT8TimeSeries *arg1, const INT8TimeSeries *arg2)
REAL8TimeSeries * XLALConvertREAL4TimeSeriesToREAL8(const REAL4TimeSeries *series)
Definition: TimeSeries.c:50
REAL8TimeSeries * XLALCreateREAL8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
INT8TimeSeries * XLALResizeINT8TimeSeries(INT8TimeSeries *series, int first, size_t length)
INT4TimeSeries * XLALCreateINT4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyUINT4TimeSeries(UINT4TimeSeries *series)
INT2TimeSeries * XLALResizeINT2TimeSeries(INT2TimeSeries *series, int first, size_t length)
REAL8TimeSeries * XLALAddREAL8TimeSeries(REAL8TimeSeries *arg1, const REAL8TimeSeries *arg2)
UINT4TimeSeries * XLALAddUINT4TimeSeries(UINT4TimeSeries *arg1, const UINT4TimeSeries *arg2)
REAL8TimeSeries * XLALCutREAL8TimeSeries(const REAL8TimeSeries *series, size_t first, size_t length)
void XLALDestroyCOMPLEX16TimeSeries(COMPLEX16TimeSeries *series)
void XLALDestroyINT8TimeSeries(INT8TimeSeries *series)
INT2TimeSeries * XLALAddINT2TimeSeries(INT2TimeSeries *arg1, const INT2TimeSeries *arg2)
COMPLEX16TimeSeries * XLALResizeCOMPLEX16TimeSeries(COMPLEX16TimeSeries *series, int first, size_t length)
UINT4TimeSeries * XLALCutUINT4TimeSeries(const UINT4TimeSeries *series, size_t first, size_t length)
COMPLEX8TimeSeries * XLALCutCOMPLEX8TimeSeries(const COMPLEX8TimeSeries *series, size_t first, size_t length)
UINT8TimeSeries * XLALCutUINT8TimeSeries(const UINT8TimeSeries *series, size_t first, size_t length)
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
INT4TimeSeries * XLALCutINT4TimeSeries(const INT4TimeSeries *series, size_t first, size_t length)
COMPLEX8TimeSeries * XLALCreateCOMPLEX8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyINT4TimeSeries(INT4TimeSeries *series)
INT2TimeSeries * XLALCreateINT2TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
COMPLEX16TimeSeries * XLALShrinkCOMPLEX16TimeSeries(COMPLEX16TimeSeries *series, size_t first, size_t length)
void XLALDestroyUINT8TimeSeries(UINT8TimeSeries *series)
COMPLEX16TimeSeries * XLALCutCOMPLEX16TimeSeries(const COMPLEX16TimeSeries *series, size_t first, size_t length)
REAL4TimeSeries * XLALShrinkREAL4TimeSeries(REAL4TimeSeries *series, size_t first, size_t length)
REAL8TimeSeries * XLALShrinkREAL8TimeSeries(REAL8TimeSeries *series, size_t first, size_t length)
COMPLEX8TimeSeries * XLALAddCOMPLEX8TimeSeries(COMPLEX8TimeSeries *arg1, const COMPLEX8TimeSeries *arg2)
UINT2TimeSeries * XLALAddUINT2TimeSeries(UINT2TimeSeries *arg1, const UINT2TimeSeries *arg2)
UINT2TimeSeries * XLALShrinkUINT2TimeSeries(UINT2TimeSeries *series, size_t first, size_t length)
void XLALDestroyCOMPLEX8TimeSeries(COMPLEX8TimeSeries *series)
UINT8TimeSeries * XLALResizeUINT8TimeSeries(UINT8TimeSeries *series, int first, size_t length)
void XLALDestroyREAL4TimeSeries(REAL4TimeSeries *series)
COMPLEX16TimeSeries * XLALAddCOMPLEX16TimeSeries(COMPLEX16TimeSeries *arg1, const COMPLEX16TimeSeries *arg2)
REAL4TimeSeries * XLALCutREAL4TimeSeries(const REAL4TimeSeries *series, size_t first, size_t length)
INT4TimeSeries * XLALResizeINT4TimeSeries(INT4TimeSeries *series, int first, size_t length)
INT2TimeSeries * XLALShrinkINT2TimeSeries(INT2TimeSeries *series, size_t first, size_t length)
INT4TimeSeries * XLALShrinkINT4TimeSeries(INT4TimeSeries *series, size_t first, size_t length)
void XLALDestroyUINT2TimeSeries(UINT2TimeSeries *series)
UINT8TimeSeries * XLALShrinkUINT8TimeSeries(UINT8TimeSeries *series, size_t first, size_t length)
INT2TimeSeries * XLALCutINT2TimeSeries(const INT2TimeSeries *series, size_t first, size_t length)
UINT4TimeSeries * XLALCreateUINT4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
UINT8TimeSeries * XLALCreateUINT8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
COMPLEX16TimeSeries * XLALCreateCOMPLEX16TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
UINT2TimeSeries * XLALCreateUINT2TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
UINT2TimeSeries * XLALCutUINT2TimeSeries(const UINT2TimeSeries *series, size_t first, size_t length)
COMPLEX8TimeSeries * XLALResizeCOMPLEX8TimeSeries(COMPLEX8TimeSeries *series, int first, size_t length)
UINT2TimeSeries * XLALResizeUINT2TimeSeries(UINT2TimeSeries *series, int first, size_t length)
COMPLEX8TimeSeries * XLALShrinkCOMPLEX8TimeSeries(COMPLEX8TimeSeries *series, size_t first, size_t length)
INT8TimeSeries * XLALShrinkINT8TimeSeries(INT8TimeSeries *series, size_t first, size_t length)
UINT4TimeSeries * XLALResizeUINT4TimeSeries(UINT4TimeSeries *series, int first, size_t length)
REAL4TimeSeries * XLALAddREAL4TimeSeries(REAL4TimeSeries *arg1, const REAL4TimeSeries *arg2)
REAL4TimeSeries * XLALCreateREAL4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
INT8TimeSeries * XLALCreateINT8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
UINT8TimeSeries * XLALAddUINT8TimeSeries(UINT8TimeSeries *arg1, const UINT8TimeSeries *arg2)
void XLALDestroyINT2TimeSeries(INT2TimeSeries *series)
INT4TimeSeries * XLALAddINT4TimeSeries(INT4TimeSeries *arg1, const INT4TimeSeries *arg2)
REAL4TimeSeries * XLALConvertREAL8TimeSeriesToREAL4(const REAL8TimeSeries *series)
Definition: TimeSeries.c:33
Time series of COMPLEX16 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:600
Time series of COMPLEX8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:590
Time series of INT2 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:511
Time series of INT4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:530
Time series of INT8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:550
This structure stores units in the mksA system (plus Kelvin, Strain, and ADC Count).
Definition: LALDatatypes.h:498
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
Definition: LALDatatypes.h:458
Time series of REAL4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:570
Time series of REAL8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:580
Time series of UINT2 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:521
Time series of UINT4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:540
Time series of UINT8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:560
enum @1 epoch