Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ComputeCalibrationFactorsTest.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Bernd Machenschalk, Duncan Brown, Jolien Creighton, Xavier Siemens
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 * Author: X. Siemens
22 */
23
24#include <lal/LALConfig.h>
25#ifndef LAL_FRAME_ENABLED
26int main( void ) { return 77; }
27#else
28#include <sys/types.h>
29#include <sys/stat.h>
30#include <fcntl.h>
31#include <stdio.h>
32#include <string.h>
33#include <stdlib.h>
34#include <math.h>
35#include <time.h>
36#include <lal/LALDatatypes.h>
37#include <lal/LALStdlib.h>
38#include <lal/LALStdio.h>
39#include <lal/FileIO.h>
40#include <lal/AVFactories.h>
41#include <lal/LALCache.h>
42#include <lal/LALFrStream.h>
43#include <math.h>
44#include <lal/PrintFTSeries.h>
45#include <lal/Window.h>
46#include <lal/Calibration.h>
47
48#define MAXLINERS 76800 /*HARDWIRED !!*/
49#define MAXLINESEGS 10000 /*HARDWIRED !!*/
50
51struct CommandLineArgsTag {
52 REAL8 f; /* Frequency of the calibration line */
53 REAL8 k; /* Value of output matrix to x arm */
54 char *RFile; /* Text file with the response funtion */
55 char *CFile; /* Text file with the sensing function */
56 char *AFile; /* Text file with the actuation function */
57 char *FrCacheFile; /* Frame cache file */
58 char *SegmentsFile; /* Text file with the segments */
59 char *exc_chan; /* excitation channel name */
60 char *darm_chan; /* darm channel name */
61 char *asq_chan; /* asq channel name */
62} CommandLineArgs;
63
64typedef
65struct SegmentListTag {
66 INT4 tgps; /* GPS Seconds of start of segment group */
67 INT4 nseg; /* number of segments starting at tgps */
68 REAL4 seglength; /* length of segment in seconds */
69} SegmentList;
70
71static LALStatus status;
72
73LALCache *framecache;
74LALFrStream *framestream=NULL;
75
76static REAL4TimeSeries darm;
77static REAL4TimeSeries asq;
78static REAL4TimeSeries exc;
79
80static FrChanIn chanin_darm;
81static FrChanIn chanin_asq;
82static FrChanIn chanin_exc;
83
84static COMPLEX16 Rf0,Cf0,Af0;
85
86static CalFactors factors;
87static UpdateFactorsParams params;
88
90
91SegmentList SL[MAXLINESEGS];
92
93LALWindowParams winparams;
94
95REAL4Vector *asqwin=NULL,*excwin=NULL,*darmwin=NULL;
96
97/* Function Prototypes */
98int ReadCommandLine(int argc,char *argv[],struct CommandLineArgsTag *CLA);
99int ReadFiles(struct CommandLineArgsTag CLA);
100int GetChannelNames(struct CommandLineArgsTag CLA);
101void FloatToTime(LIGOTimeGPS *tgps, REAL8 *f);
102void TimeToFloat(REAL8 *f, LIGOTimeGPS *tgps);
103int FreeMem(void);
104
105/**************** MAIN PROGRAM ***************/
106
107int main(int argc,char *argv[])
108{
109 LALFrStreamPos pos;
110 int i,j,k;
111
112 if (ReadCommandLine(argc,argv,&CommandLineArgs)) return 1;
113 if (ReadFiles(CommandLineArgs)) return 3;
114 if (GetChannelNames(CommandLineArgs)) return 4;
115
116 for(i=0;i<numsegs;i++)
117 {
118 for(j=0;j<SL[i].nseg;j++)
119 {
120 REAL4 magexc, magdarm, magasq;
121
122 REAL8 t=SL[i].tgps+j*SL[i].seglength;
123 FloatToTime(&epoch, &t);
124
125 LALFrSeek(&status,&epoch,framestream);
126 LALFrGetPos(&status,&pos,framestream);
127
128 LALFrGetREAL4TimeSeries(&status,&exc,&chanin_exc,framestream);
129 LALFrSetPos(&status,&pos,framestream);
130
131 LALFrGetREAL4TimeSeries(&status,&darm,&chanin_darm,framestream);
132 LALFrSetPos(&status,&pos,framestream);
133
134 LALFrGetREAL4TimeSeries(&status,&asq,&chanin_asq,framestream);
135 LALFrSetPos(&status,&pos,framestream);
136
137 /*Windowing*/
138 for(k=0;k<(INT4)(SL[i].seglength/asq.deltaT +0.5);k++)
139 {
140 asq.data->data[k] *= 2.0*asqwin->data[k];
141 }
142 for(k=0;k<(INT4)(SL[i].seglength/darm.deltaT +0.5);k++)
143 {
144 darm.data->data[k] *= 2.0*darmwin->data[k];
145 }
146 for(k=0;k<(INT4)(SL[i].seglength/exc.deltaT +0.5);k++)
147 {
148 exc.data->data[k] *= 2.0*excwin->data[k];
149 }
150
151 /* set params to call LALComputeCalibrationFactors */
152 params.darmCtrl = &darm;
153 params.asQ = &asq;
154 params.exc = &exc;
155 params.lineFrequency = CommandLineArgs.f;
156 params.outputMatrix = CommandLineArgs.k;
157 params.actuationFactor.re = Af0.re/4000.0; /*ACHTUNG: HARDWIRED !!*/
158 params.actuationFactor.im = Af0.im/4000.0; /*ACHTUNG: HARDWIRED !!*/
159 params.responseFactor = Rf0;
160 params.sensingFactor = Cf0;
161
162 LALComputeCalibrationFactors(&status,&factors,&params);
163
164 magexc=sqrt(factors.exc.re*factors.exc.re+factors.exc.im*factors.exc.im)*2/SL[i].seglength;
165 magasq=sqrt(factors.asq.re*factors.asq.re+factors.asq.im*factors.asq.im)*2/SL[i].seglength;
166 magdarm=sqrt(factors.darm.re*factors.darm.re+factors.darm.im*factors.darm.im)*2/SL[i].seglength;
167
168 fprintf(stdout,"%20.15f %20.15f %20.15f %20.15f %20.15f %20.15f %20.15f %20.15f\n",t,
169 factors.alpha.re,factors.alpha.im,factors.alphabeta.re,
170 factors.alphabeta.im,magexc,magdarm,magasq);
171
172 fflush(stdout);
173
174 }
175 }
176
177 if(FreeMem()) return 4;
178
179 return 0;
180}
181
182/*******************************************************************************/
183 void FloatToTime(LIGOTimeGPS *tgps, REAL8 *f)
184{
185 REAL8 temp0, temp2, temp3;
186 REAL8 temp1, temp4;
187
188 temp0 = floor(*f); /* this is tgps.S */
189 temp1 = (*f) * 1.e10;
190 temp2 = fmod(temp1, 1.e10);
191 temp3 = fmod(temp1, 1.e2);
192 temp4 = (temp2-temp3) * 0.1;
193
194 tgps->gpsSeconds = (INT4)temp0;
195 tgps->gpsNanoSeconds = (INT4)temp4;
196}
197
198
199/*******************************************************************************/
200
201int GetChannelNames(struct CommandLineArgsTag CLA)
202{
203
204 LALFrStreamPos pos1;
205
206 chanin_asq.type=ADCDataChannel;
207 chanin_darm.type=ADCDataChannel;
208 chanin_exc.type=ADCDataChannel;
209
210 chanin_asq.name = CLA.asq_chan;
211 chanin_darm.name= CLA.darm_chan;
212 chanin_exc.name = CLA.exc_chan;
213
214 /* Get channel time step size by calling LALFrGetREAL4TimeSeries */
215
216 epoch.gpsSeconds=SL[0].tgps;
217 epoch.gpsNanoSeconds=0;
218 LALFrSeek(&status,&epoch,framestream);
219 LALFrGetPos(&status,&pos1,framestream);
220 LALFrGetREAL4TimeSeries(&status,&asq,&chanin_asq,framestream);
221 LALFrSetPos(&status,&pos1,framestream);
222 LALFrGetREAL4TimeSeries(&status,&darm,&chanin_darm,framestream);
223 LALFrSetPos(&status,&pos1,framestream);
224 LALFrGetREAL4TimeSeries(&status,&exc,&chanin_exc,framestream);
225 LALFrRewind(&status,framestream);
226
227 /* Determine from the sample rate how many data points to allocate for each segment */
228
229 LALCreateVector(&status,&asq.data,(INT4)(SL[0].seglength/asq.deltaT +0.5));
230 LALCreateVector(&status,&darm.data,(INT4)(SL[0].seglength/darm.deltaT +0.5));
231 LALCreateVector(&status,&exc.data,(INT4)(SL[0].seglength/exc.deltaT +0.5));
232
233 /* Create Window vectors */
234 LALCreateVector(&status,&asqwin,(INT4)(SL[0].seglength/asq.deltaT +0.5));
235 LALCreateVector(&status,&darmwin,(INT4)(SL[0].seglength/darm.deltaT +0.5));
236 LALCreateVector(&status,&excwin,(INT4)(SL[0].seglength/exc.deltaT +0.5));
237
238 winparams.type=Hann;
239
240 /* windows for time domain channels */
241 /* asq */
242 winparams.length=(INT4)(SL[0].seglength/asq.deltaT +0.5);
243 LALWindow(&status,asqwin,&winparams);
244
245 /* darm */
246 winparams.length=(INT4)(SL[0].seglength/darm.deltaT +0.5);
247 LALWindow(&status,darmwin,&winparams);
248
249 /*exc*/
250 winparams.length=(INT4)(SL[0].seglength/exc.deltaT +0.5);
251 LALWindow(&status,excwin,&winparams);
252
253
254 fprintf(stdout,"# GPStime alpha real alpha im alpha*beta real alpha*beta im exc. amplitude darm amplitude AS_Q amplitude\n");
255 fprintf(stdout,"# ----------------------------------------------------------------------------------------------------------------------------------------------------------\n");
256
257 fflush(stdout);
258
259
260 return 0;
261}
262
263/*******************************************************************************/
264
265int ReadFiles(struct CommandLineArgsTag CLA)
266{
267 char line[256];
268 INT4 i;
269 FILE *fpS,*fpR,*fpA,*fpSeg;
270 REAL8 Cmag,Cphase,Rmag,Rphase,Amag,Aphase,freq,x,y;
271 static COMPLEX16FrequencySeries R0;
272 static COMPLEX16FrequencySeries C0;
273 static COMPLEX16FrequencySeries A0;
274
275 /* Allocate space for response and sensing functions; just enough to read first 1200Hz */
276 LALZCreateVector( &status, &R0.data, MAXLINERS);
277 LALZCreateVector( &status, &C0.data, MAXLINERS);
278 LALZCreateVector( &status, &A0.data, MAXLINERS);
279
280 /* Fill in R0, C0 data */
281 R0.f0=0.0;
282 R0.deltaF=1.0/64.0; /*ACHTUNG: HARDWIRED !!*/
283 C0.f0=0.0;
284 C0.deltaF=1.0/64.0; /*ACHTUNG: HARDWIRED !!*/
285 A0.f0=0.0;
286 A0.deltaF=1.0/64.0; /*ACHTUNG: HARDWIRED !!*/
287
288 /* This is kinda messy... Unfortunately there's no good way of doing this */
289 /* ------ Open and read Sensing file ------ */
290 i=0;
291 fpS=fopen(CLA.CFile,"r");
292 if (fpS==NULL)
293 {
294 fprintf(stderr,"That's weird... %s doesn't exist!\n",CLA.CFile);
295 return 1;
296 }
297 while(fgets(line,sizeof(line),fpS))
298 {
299 if(*line == '#') continue;
300 if(*line == '%') continue;
301 if (i > MAXLINERS-1)
302 {
303 /* done reading file */
304 break;
305 }
306 sscanf(line,"%le %le %le",&freq,&Cmag,&Cphase);
307 C0.data->data[i].re=Cmag*cos(Cphase);
308 C0.data->data[i].im=Cmag*sin(Cphase);
309 i++;
310 }
311 fclose(fpS);
312 /* -- close Sensing file -- */
313
314 /* ------ Open and read Response file ------ */
315 i=0;
316 fpR=fopen(CLA.RFile,"r");
317 if (fpR==NULL)
318 {
319 fprintf(stderr,"That's weird... %s doesn't exist!\n",CLA.RFile);
320 return 1;
321 }
322 while(fgets(line,sizeof(line),fpR))
323 {
324 if(*line == '#') continue;
325 if(*line == '%') continue;
326 if (i > MAXLINERS-1)
327 {
328 /* done reading file */
329 break;
330 }
331 sscanf(line,"%le %le %le",&freq,&Rmag,&Rphase);
332 R0.data->data[i].re=Rmag*cos(Rphase);
333 R0.data->data[i].im=Rmag*sin(Rphase);
334 i++;
335 }
336 fclose(fpR);
337 /* -- close Sensing file -- */
338
339 /* ------ Open and read Response file ------ */
340 i=0;
341 fpA=fopen(CLA.AFile,"r");
342 if (fpA==NULL)
343 {
344 fprintf(stderr,"That's weird... %s doesn't exist!\n",CLA.AFile);
345 return 1;
346 }
347 while(fgets(line,sizeof(line),fpA))
348 {
349 if(*line == '#') continue;
350 if(*line == '%') continue;
351 if (i > MAXLINERS-1)
352 {
353 /* done reading file */
354 break;
355 }
356 sscanf(line,"%le %le %le",&freq,&Amag,&Aphase);
357 A0.data->data[i].re=Amag*cos(Aphase);
358 A0.data->data[i].im=Amag*sin(Aphase);
359 i++;
360 }
361 fclose(fpA);
362 /* -- close Sensing file -- */
363
364 /* ------ Open and read Segment file ------ */
365 i=0;
366 fpSeg=fopen(CLA.SegmentsFile,"r");
367 if (fpSeg==NULL)
368 {
369 fprintf(stderr,"That's weird... %s doesn't exist!\n",CLA.SegmentsFile);
370 return 1;
371 }
372 while(fgets(line,sizeof(line),fpSeg))
373 {
374 if(*line == '#') continue;
375 if(*line == '%') continue;
376 if (i > MAXLINESEGS-1)
377 {
378 fprintf(stderr,"Too many lines in file %s! Exiting... \n", CLA.SegmentsFile);
379 return 1;
380 }
381 sscanf(line,"%d %d %f",&SL[i].nseg,&SL[i].tgps,&SL[i].seglength);
382 i++;
383 }
384 numsegs=i;
385 fclose(fpSeg);
386 /* -- close Sensing file -- */
387
388 /* compute C0 and R0 at correct frequency */
389 /* use linear interpolation */
390
391 x = modf( CLA.f / R0.deltaF, &y );
392 i = floor( y );
393 Rf0.re = ( 1 - x ) * R0.data->data[i].re;
394 Rf0.re += x * R0.data->data[i].re;
395 Rf0.im = ( 1 - x ) * R0.data->data[i].im;
396 Rf0.im += x * R0.data->data[i].im;
397 x = modf( CLA.f / C0.deltaF, &y );
398 i = floor( y );
399 Cf0.re = ( 1 - x ) * C0.data->data[i].re;
400 Cf0.re += x * C0.data->data[i].re;
401 Cf0.im = ( 1 - x ) * C0.data->data[i].im;
402 Cf0.im += x * C0.data->data[i].im;
403 x = modf( CLA.f / A0.deltaF, &y );
404 i = floor( y );
405 Af0.re = ( 1 - x ) * A0.data->data[i].re;
406 Af0.re += x * A0.data->data[i].re;
407 Af0.im = ( 1 - x ) * A0.data->data[i].im;
408 Af0.im += x * A0.data->data[i].im;
409
410 /* create Frame cache */
411 framecache = XLALCacheImport(CLA.FrCacheFile);
412 LALFrCacheOpen(&status,&framestream,framecache);
413
414 XLALDestroyCache(&framecache);
415
419
420 return 0;
421}
422
423/*******************************************************************************/
424
425int ReadCommandLine(int argc,char *argv[],struct CommandLineArgsTag *CLA)
426{
427 INT4 c, errflg = 0;
428 LALoptarg = NULL;
429
430 /* Initialize default values */
431 CLA->f=0.0;
432 CLA->k=0.0;
433 CLA->RFile="";
434 CLA->CFile="";
435 CLA->AFile="";
436 CLA->FrCacheFile="";
437 CLA->SegmentsFile="";
438 CLA->exc_chan="";
439 CLA->darm_chan="";
440 CLA->asq_chan="";
441
442 /* Scan through list of command line arguments */
443 while (!errflg && ((c = LALgetopt(argc, argv,"hf:F:r:S:c:A:E:D:a:k:"))!=-1))
444 switch (c) {
445 case 'f':
446 /* frequency bandwidth */
447 CLA->f=atof(LALoptarg);
448 break;
449 case 'k':
450 /* frequency bandwidth */
451 CLA->k=atof(LALoptarg);
452 break;
453 case 'F':
454 /* starting observation time */
455 CLA->FrCacheFile=LALoptarg;
456 break;
457 case 'r':
458 /* starting observation time */
459 CLA->RFile=LALoptarg;
460 break;
461 case 'c':
462 /* starting observation time */
463 CLA->CFile=LALoptarg;
464 break;
465 case 'a':
466 /* starting observation time */
467 CLA->AFile=LALoptarg;
468 break;
469 case 'S':
470 /* starting observation time */
471 CLA->SegmentsFile=LALoptarg;
472 break;
473 case 'E':
474 /* frequency bandwidth */
475 CLA->exc_chan=LALoptarg;
476 break;
477 case 'A':
478 /* frequency bandwidth */
479 CLA->asq_chan=LALoptarg;
480 break;
481 case 'D':
482 /* frequency bandwidth */
483 CLA->darm_chan=LALoptarg;
484 break;
485 case 'h':
486 /* print usage/help message */
487 fprintf(stdout,"All arguments are required. They are:\n");
488 fprintf(stdout,"\t-f\tFLOAT\t Calibration line frequency in Hz.\n");
489 fprintf(stdout,"\t-k\tFLOAT\t Darm to etmx output matrix value.\n");
490 fprintf(stdout,"\t-F\tSTRING\t Name of frame cache file.\n");
491 fprintf(stdout,"\t-r\tSTRING\t Name of response function file.\n");
492 fprintf(stdout,"\t-c\tSTRING\t Name of sensing function file.\n");
493 fprintf(stdout,"\t-a\tSTRING\t Name of actuation function file.\n");
494 fprintf(stdout,"\t-S\tSTRING\t Name of segment list file.\n");
495 fprintf(stdout,"\t-A\tSTRING\t AS_Q channel name (eg, L1:LSC-AS_Q).\n");
496 fprintf(stdout,"\t-E\tSTRING\t Excitation channel name (eg, L1:LSC-ETMX_EXC_DAQ)\n");
497 fprintf(stdout,"\t-D\tSTRING\t Darm channel name (eg, L1:LSC-DARM_CTRL)\n");
498 fprintf(stdout,"Caution: There are a few hardwired quantities in this code. Look for 'HARDWIRED!!' in the code.\n");
499 exit(0);
500 break;
501 default:
502 /* unrecognized option */
503 errflg++;
504 fprintf(stderr,"Unrecognized option argument %c\n",c);
505 exit(1);
506 break;
507 }
508 if(CLA->f == 0)
509 {
510 fprintf(stderr,"No calibration line frequency specified.\n");
511 fprintf(stderr,"Try ./CCFDriver -h \n");
512 exit( 77 );
513 }
514 if(CLA->k == 0)
515 {
516 fprintf(stderr,"No value of the output matrix to x arm specified.\n");
517 fprintf(stderr,"Try ./CCFDriver -h \n");
518 exit( 77 );
519 }
520 if(CLA->CFile == "")
521 {
522 fprintf(stderr,"No sensing function file specified.\n");
523 fprintf(stderr,"Try ./CCFDriver -h \n");
524 exit( 77 );
525 }
526 if(CLA->RFile == "")
527 {
528 fprintf(stderr,"No response function file specified.\n");
529 fprintf(stderr,"Try ./CCFDriver -h \n");
530 exit( 77 );
531 }
532 if(CLA->AFile == "")
533 {
534 fprintf(stderr,"No actuation function file specified.\n");
535 fprintf(stderr,"Try ./CCFDriver -h \n");
536 exit( 77 );
537 }
538 if(CLA->FrCacheFile=="")
539 {
540 fprintf(stderr,"No frame cache file specified.\n");
541 fprintf(stderr,"Try ./CCFDriver -h \n");
542 exit( 77 );
543 }
544 if(CLA->SegmentsFile=="")
545 {
546 fprintf(stderr,"No segments file specified.\n");
547 fprintf(stderr,"Try ./CCFDriver -h \n");
548 exit( 77 );
549 }
550 if(CLA->exc_chan == "")
551 {
552 fprintf(stderr,"No excitation channel specified.\n");
553 fprintf(stderr,"Try ./CCFDriver -h \n");
554 exit( 77 );
555 }
556 if(CLA->darm_chan == "")
557 {
558 fprintf(stderr,"No darm channel specified.\n");
559 fprintf(stderr,"Try ./CCFDriver -h \n");
560 exit( 77 );
561 }
562 if(CLA->asq_chan == "")
563 {
564 fprintf(stderr,"No asq channel specified.\n");
565 fprintf(stderr,"Try ./CCFDriver -h \n");
566 exit( 77 );
567 }
568
569
570
571 return errflg;
572}
573
574/*******************************************************************************/
575
576int FreeMem(void)
577{
578
579 LALFrClose(&status,&framestream);
580
584
585 LALDestroyVector(&status,&asqwin);
586 LALDestroyVector(&status,&darmwin);
587 LALDestroyVector(&status,&excwin);
588
590
591 return 0;
592}
593#endif
void LALComputeCalibrationFactors(LALStatus *status, CalFactors *output, UpdateFactorsParams *input)
int main(void)
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
int LALgetopt(int argc, char *const *argv, const char *optstring)
Definition: LALgetopt.c:172
char * LALoptarg
Definition: LALgetopt.c:64
#define fprintf
static double f(double theta, double y, double xi)
Definition: XLALMarcumQ.c:258
void XLALDestroyCache(LALCache *cache)
Destroys a LALCache structure.
Definition: LALCache.c:172
LALCache * XLALCacheImport(const char *fname)
Reads a LAL cache file and produces a LALCache structure.
Definition: LALCache.c:252
double complex COMPLEX16
Double-precision floating-point complex number (16 bytes total)
double REAL8
Double precision real floating-point number (8 bytes).
int32_t INT4
Four-byte signed integer.
float REAL4
Single precision real floating-point number (4 bytes).
void LALZDestroyVector(LALStatus *, COMPLEX16Vector **)
void LALDestroyVector(LALStatus *, REAL4Vector **)
void LALCreateVector(LALStatus *, REAL4Vector **, UINT4)
void LALZCreateVector(LALStatus *, COMPLEX16Vector **, UINT4)
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:909
COMPLEX16Sequence * data
Definition: LALDatatypes.h:915
COMPLEX16 * data
Pointer to the data array.
Definition: LALDatatypes.h:177
UNDOCUMENTED.
Definition: Calibration.h:82
COMPLEX16 alphabeta
Definition: Calibration.h:84
COMPLEX16 alpha
Definition: Calibration.h:83
COMPLEX16 darm
Definition: Calibration.h:88
COMPLEX16 asq
Definition: Calibration.h:87
COMPLEX16 exc
Definition: Calibration.h:86
The LALCache structure is an array of entries.
Definition: LALCache.h:63
LAL status structure, see The LALStatus structure for more details.
Definition: LALDatatypes.h:947
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
Definition: LALDatatypes.h:458
INT4 gpsSeconds
Seconds since 0h UTC 6 Jan 1980.
Definition: LALDatatypes.h:459
INT4 gpsNanoSeconds
Residual nanoseconds.
Definition: LALDatatypes.h:460
Time series of REAL4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:570
REAL4Sequence * data
The sequence of sampled data.
Definition: LALDatatypes.h:576
REAL8 deltaT
The time step between samples of the time series in seconds.
Definition: LALDatatypes.h:573
Vector of type REAL4, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:145
REAL4 * data
Pointer to the data array.
Definition: LALDatatypes.h:150
UNDOCUMENTED.
Definition: Calibration.h:96
REAL4TimeSeries * darmCtrl
Definition: Calibration.h:101
REAL4TimeSeries * exc
Definition: Calibration.h:103
REAL4TimeSeries * asQ
Definition: Calibration.h:102
enum @1 epoch