LAL  7.5.0.1-89842e6
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
26 int 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 
51 struct 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 
64 typedef
65 struct 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 
71 static LALStatus status;
72 
73 LALCache *framecache;
74 LALFrStream *framestream=NULL;
75 
76 static REAL4TimeSeries darm;
77 static REAL4TimeSeries asq;
78 static REAL4TimeSeries exc;
79 
80 static FrChanIn chanin_darm;
81 static FrChanIn chanin_asq;
82 static FrChanIn chanin_exc;
83 
84 static COMPLEX16 Rf0,Cf0,Af0;
85 
86 static CalFactors factors;
87 static UpdateFactorsParams params;
88 
90 
91 SegmentList SL[MAXLINESEGS];
92 
93 LALWindowParams winparams;
94 
95 REAL4Vector *asqwin=NULL,*excwin=NULL,*darmwin=NULL;
96 
97 /* Function Prototypes */
98 int ReadCommandLine(int argc,char *argv[],struct CommandLineArgsTag *CLA);
99 int ReadFiles(struct CommandLineArgsTag CLA);
100 int GetChannelNames(struct CommandLineArgsTag CLA);
101 void FloatToTime(LIGOTimeGPS *tgps, REAL8 *f);
102 void TimeToFloat(REAL8 *f, LIGOTimeGPS *tgps);
103 int FreeMem(void);
104 
105 /**************** MAIN PROGRAM ***************/
106 
107 int 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 
201 int 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 
265 int 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 
425 int 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 
576 int FreeMem(void)
577 {
578 
579  LALFrClose(&status,&framestream);
580 
581  LALDestroyVector(&status,&darm.data);
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
LALCache * XLALCacheImport(const char *fname)
Reads a LAL cache file and produces a LALCache structure.
Definition: LALCache.c:252
void XLALDestroyCache(LALCache *cache)
Destroys a LALCache structure.
Definition: LALCache.c:172
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