Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALApps 10.1.0.1-b246709
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
lalappsfrutils.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Sukanta Bose, Duncan Brown, Stephen Fairhurst
3*
4* This program is free software; you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation; either version 2 of the License, or
7* (at your option) any later version.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with with program; see the file COPYING. If not, write to the
16* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17* MA 02110-1301 USA
18*/
19
20/*-----------------------------------------------------------------------
21 *
22 * File Name: lalappsfrutils.c
23 *
24 * Author: Brown, D. A.
25 *
26 *
27 *-----------------------------------------------------------------------
28 */
29
30#include "lalappsfrutils.h"
31
32/*
33 *
34 * functions to write data to frame files, since lal doesn't have this yet
35 *
36 */
37
38
40 FrameH *frame,
41 REAL4TimeSeries *chan,
42 const char *unit,
43 const char *suffix
44 )
45{
46 char chname[256];
47 struct series fdata;
48
49 if ( suffix )
50 {
51 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
52 }
53 else
54 {
55 snprintf( chname, sizeof(chname), "%s", chan->name );
56 }
57 fdata.name = chname;
58 fdata.tbeg = chan->epoch;
59 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
60 epoch_add( &fdata.tend, &(chan->epoch),
61 chan->deltaT * (REAL8) chan->data->length );
62 fdata.dom = Time;
63 fdata.type = FR_VECT_4R;
64 fdata.step = (double) chan->deltaT;
65 fdata.unit = unit;
66 fdata.size = (size_t) chan->data->length;
67 fdata.data = (float *) chan->data->data;
68 return fr_add_proc_data( frame, &fdata );
69}
70
72 FrameH *frame,
73 REAL8TimeSeries *chan,
74 const char *unit,
75 const char *suffix
76 )
77{
78 char chname[256];
79 struct series fdata;
80
81 if ( suffix )
82 {
83 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
84 }
85 else
86 {
87 snprintf( chname, sizeof(chname), "%s", chan->name );
88 }
89 fdata.name = chname;
90 fdata.tbeg = chan->epoch;
91 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
92 epoch_add( &fdata.tend, &(chan->epoch),
93 chan->deltaT * (REAL8) chan->data->length );
94 fdata.dom = Time;
95 fdata.type = FR_VECT_8R;
96 fdata.step = (double) chan->deltaT;
97 fdata.unit = unit;
98 fdata.size = (size_t) chan->data->length;
99 fdata.ddata = (double *) chan->data->data;
100 return fr_add_proc_data( frame, &fdata );
101}
102
103
105 FrameH *frame,
107 const char *unit,
108 const char *suffix
109 )
110{
111 char chname[256];
112 struct series fdata;
113
114 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
115 fdata.name = chname;
116 fdata.tbeg = chan->epoch;
117 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
118 epoch_add( &fdata.tend, &chan->epoch,
119 (chan->data->length - 1) / (chan->deltaF * chan->data->length) );
120 fdata.dom = Freq;
121 fdata.type = FR_VECT_4R;
122 fdata.step = (double) chan->deltaF;
123 fdata.unit = unit;
124 fdata.size = (size_t) chan->data->length;
125 fdata.data = (float *) chan->data->data;
126 return fr_add_proc_data( frame, &fdata );
127}
128
130 FrameH *frame,
132 const char *unit,
133 const char *suffix
134 )
135{
136 char chname[256];
137 struct series fdata;
138
139 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
140 fdata.name = chname;
141 fdata.tbeg = chan->epoch;
142 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
143 epoch_add( &fdata.tend, &chan->epoch,
144 (chan->data->length - 1) / (chan->deltaF * chan->data->length) );
145 fdata.dom = Freq;
146 fdata.type = FR_VECT_8C;
147 fdata.step = (double) chan->deltaF;
148 fdata.unit = unit;
149 fdata.size = (size_t) chan->data->length;
150 fdata.data = (float *) chan->data->data;
151 return fr_add_proc_data( frame, &fdata );
152}
153
155 FrameH *frame,
156 COMPLEX8TimeSeries *chan,
157 const char *unit,
158 const char *suffix
159 )
160{
161 char chname[256];
162 struct series fdata;
163
164 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
165 fdata.name = chname;
166 fdata.tbeg = chan->epoch;
167 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
168 epoch_add( &fdata.tend, &chan->epoch,
169 chan->deltaT * (REAL8) chan->data->length );
170 fdata.dom = Time;
171 fdata.type = FR_VECT_8C;
172 fdata.step = (float) chan->deltaT;
173 fdata.f0 = (float) chan->f0;
174 fdata.unit = unit;
175 fdata.size = (size_t) chan->data->length;
176 fdata.data = (float *) chan->data->data;
177 return fr_add_proc_data( frame, &fdata );
178}
179
180
181
183 FrameH *frame,
185 const char *unit,
186 const char *suffix
187 )
188{
189 char chname[256];
190 struct series fdata;
191 /** \deprecated FIXME: the following code uses obsolete CVS ID tags.
192 * It should be modified to use git version information. */
193 char comment[] = "Generated by $Id$";
194 char seconds[] = "s";
195 char hertz[] = "Hz";
196 struct FrVect *vect;
197 struct FrProcData *proc;
198 size_t i;
199 char *channel;
200
201 snprintf( chname, sizeof(chname), "%s_%s", chan->name, suffix );
202 fdata.name = chname;
203 fdata.tbeg = chan->epoch;
204 memset( &fdata.tend, 0, sizeof(LIGOTimeGPS) );
205 epoch_add( &fdata.tend, &chan->epoch,
206 (chan->data->length - 1) / (chan->deltaF * chan->data->length) );
207 fdata.dom = Freq;
208 fdata.type = FR_VECT_8R;
209 fdata.step = (double) chan->deltaF;
210 fdata.unit = unit;
211 fdata.size = (size_t) chan->data->length;
212
213 channel = fdata.name;
214
215 if ( ! frame )
216 {
217 char src[2];
218 src[0] = fdata.name[0];
219 src[1] = 0;
220 frame = FrameHNew( src );
221 frame->run = 1;
222 frame->frame = 1;
223 frame->GTimeS = (int) fdata.tbeg.gpsSeconds;
224 frame->GTimeN = (int) fdata.tbeg.gpsNanoSeconds;
225 frame->dt = epoch_diff( &fdata.tend, &fdata.tbeg );
226 }
227
228 /* FIXME: work around for FrameL const string issue */
229 union { const char *c; char *s; } u = {fdata.unit};
230
231 vect = FrVectNew1D( channel, fdata.type, fdata.size, fdata.step,
232 IS_TIME( fdata.dom) ? seconds : hertz, u.s );
233 proc = calloc( 1, sizeof( *proc ) );
234 proc->classe = FrProcDataDef();
235#if defined FR_VERS && FR_VERS < 5000
236 proc->sampleRate = IS_TIME( fdata.dom) ? 1.0 / fdata.step : -1;
237#endif
238 proc->fShift = 0;
239 proc->data = vect;
240 proc->next = frame->procData;
241 frame->procData = proc;
242 FrStrCpy( &proc->name, channel );
243 FrStrCpy( &proc->comment, comment );
244 for ( i = 0; i < fdata.size; ++i )
245 {
246 vect->dataF[i] = fdata.data[i];
247 }
248
249 return frame;
250}
const char * unit
int s
const double u
double REAL8
CHAR comment[LIGOMETA_COMMENT_MAX]
Definition: inspfrinj.c:350
int i
Definition: inspinj.c:596
FrameH * fr_add_proc_REAL8TimeSeries(FrameH *frame, REAL8TimeSeries *chan, const char *unit, const char *suffix)
FrameH * fr_add_proc_REAL8FrequencySeries(FrameH *frame, REAL8FrequencySeries *chan, const char *unit, const char *suffix)
FrameH * fr_add_proc_COMPLEX8FrequencySeries(FrameH *frame, COMPLEX8FrequencySeries *chan, const char *unit, const char *suffix)
FrameH * fr_add_proc_REAL4TimeSeries(FrameH *frame, REAL4TimeSeries *chan, const char *unit, const char *suffix)
FrameH * fr_add_proc_COMPLEX8TimeSeries(FrameH *frame, COMPLEX8TimeSeries *chan, const char *unit, const char *suffix)
FrameH * fr_add_proc_REAL4FrequencySeries(FrameH *frame, REAL4FrequencySeries *chan, const char *unit, const char *suffix)
proc
src
c
int
float
void epoch_add(LIGOTimeGPS *t1, LIGOTimeGPS *t0, double dt)
Definition: series.c:39
double epoch_diff(const LIGOTimeGPS *t2, const LIGOTimeGPS *t1)
Definition: series.c:29
FrameH * fr_add_proc_data(FrameH *frame, const struct series *ser)
Definition: series.c:132
@ Time
Definition: series.h:29
@ Freq
Definition: series.h:29
#define IS_TIME(domain_)
Definition: series.h:31
char * channel
CHAR name[LALNameLength]
COMPLEX8Sequence * data
CHAR name[LALNameLength]
LIGOTimeGPS epoch
COMPLEX8Sequence * data
COMPLEX8 * data
INT4 gpsNanoSeconds
REAL4Sequence * data
CHAR name[LALNameLength]
CHAR name[LALNameLength]
REAL4Sequence * data
LIGOTimeGPS epoch
REAL4 * data
REAL8Sequence * data
CHAR name[LALNameLength]
REAL8Sequence * data
LIGOTimeGPS epoch
CHAR name[LALNameLength]
REAL8 * data
Definition: series.h:36
const char * unit
Definition: series.h:44
char * name
Definition: series.h:37
float f0
Definition: series.h:43
float * data
Definition: series.h:46
int type
Definition: series.h:41
size_t size
Definition: series.h:45
double step
Definition: series.h:42
double * ddata
Definition: series.h:47
LIGOTimeGPS tbeg
Definition: series.h:38
domain dom
Definition: series.h:40
LIGOTimeGPS tend
Definition: series.h:39