Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALSimulation 6.2.0.1-3a66518
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
detector_noise.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Jolien Creighton
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 * @defgroup lalsim_detector_noise lalsim-detector-noise
22 * @ingroup lalsimulation_programs
23 *
24 * @brief Simulates detector noise
25 *
26 * ### Synopsis
27 *
28 * lalsim-detector-noise [options]
29 *
30 * ### Description
31 *
32 * The `lalsim-detector-noise` utility produces a continuous stream of
33 * simulated detector noise for a specified interval of time and for
34 * a specified noise PSD. Alternatively, `lalsim-detector-noise` outputs
35 * a requested noise PSD. The output is written to the standard output
36 * in two-column ascii format data in which the first column contains either
37 * the GPS times of each sample or the frequency of each PSD component,
38 * and the second column contains the value of that sample.
39 *
40 * ### Options
41 *
42 * <DL>
43 * <DT>`-h`, `--help`</DT>
44 * <DD>print this message and exit</DD>
45 * <DT>`--verbose`</DT>
46 * <DD>verbose output</DD>
47 * <DT>`-0`, `--0noise`</DT>
48 * <DD>no noise (generates zeros)</DD>
49 * <DT>`-A`, `--aligo-nosrm`</DT>
50 * <DD>aLIGO no SRM noise</DD>
51 * <DT>`-B`, `--aligo-zerodet-lowpower`</DT>
52 * <DD>aLIGO zero detuning low power noise</DD>
53 * <DT>`-C`, `--aligo-zerodet-highpower`</DT>
54 * <DD>aLIGO zero detuning high power noise</DD>
55 * <DT>`-D`, `--aligo-nsnsopt`</DT>
56 * <DD>aLIGO NSNS optimized noise</DD>
57 * <DT>`-E`, `--aligo-bhbh20deg`</DT>
58 * <DD>aLIGO BHBH optimized 20 deg detuning noise</DD>
59 * <DT>`-F`, `--aligo-highfreq`</DT>
60 * <DD>aLIGO kHz narrowband noise</DD>
61 * <DT>`-I`, `--iligo-srd`</DT>
62 * <DD>iLIGO SRD noise power</DD>
63 * <DT>`-v`, `--virgo`</DT>
64 * <DD>initial Virgo noise power</DD>
65 * <DT>`-V`, `--advvirgo`</DT>
66 * <DD>Advanced Virgo noise power</DD>
67 * <DT>`-g`, `--geo`</DT>
68 * <DD>GEO600 noise power</DD>
69 * <DT>`-G`, `--geohf`</DT>
70 * <DD>GEO-HF noise power</DD>
71 * <DT>`-T`, `--tama`</DT>
72 * <DD>TAMA300 noise power</DD>
73 * <DT>`-K`, `--kagra`</DT>
74 * <DD>KAGRA noise power</DD>
75 * <DT>`-O`, `--official`</DT>
76 * <DD>use official data files</DD>
77 * <DT>`-P`, `--psd-only`</DT>
78 * <DD>output PSD only (actually ASD)</DD>
79 * <DT>`-a`, `--asd-file` ASDFILE</DT>
80 * <DD>read amplitude spectrum density file</DD>
81 * <DT>`-s`, `--start-time` GPSSTART</DT>
82 * <DD>GPS start time (s)</DD>
83 * <DT>`-t`, `--duration` DURATION</DT>
84 * <DD>(required) duration of data to produce (s)</DD>
85 * <DT>`-r`, `--sample-rate` SRATE</DT>
86 * <DD>sample rate (Hz) [16384]</DD>
87 * <DT>`-d`, `--segment-duration` SEGDUR</DT>
88 * <DD>segment duration (s) [4]</DD>
89 * <DT>`-f`, `--low-frequency` FLOW</DT>
90 * <DD>override default low frequency (Hz)</DD>
91 * </DL>
92 *
93 * ### Environment
94 *
95 * The `LAL_DEBUG_LEVEL` can used to control the error and warning reporting of
96 * `lalsim-detector-noise`. Common values are: `LAL_DEBUG_LEVEL=0` which
97 * suppresses error messages, `LAL_DEBUG_LEVEL=1` which prints error messages
98 * alone, `LAL_DEBUG_LEVEL=3` which prints both error messages and warning
99 * messages, and `LAL_DEBUG_LEVEL=7` which additionally prints informational
100 * messages.
101 *
102 * The `GSL_RNG_SEED` and `GSL_RNG_TYPE` environment variables can be used
103 * to set the random number generator seed and type respectively.
104 *
105 * ### Exit Status
106 *
107 * The `lalsim-detector-noise` utility exits 0 on success, and >0 if an error
108 * occurs.
109 *
110 * ### Example
111 *
112 * The command:
113 *
114 * lalsim-detector-noise --aligo-zerodet-highpower -s 1000000000 -t 1000
115 *
116 * will stream 1000 seconds of aLIGO zero detuning high power noise
117 * beginning at GPS time 1000000000.
118 *
119 * The command:
120 *
121 * lalsim-detector-noise --iligo-srd -P
122 *
123 * outputs the Initial LIGO PSD.
124 *
125 * The command:
126 *
127 * lalsim-detector-noise -0 -s 1000000000 -t 1000
128 *
129 * will stream 1000 seconds of zero-noise beginning at GPS time 1000000000.
130 */
131
132#include <math.h>
133#include <stdio.h>
134#include <stdlib.h>
135
136#include <gsl/gsl_rng.h>
137
138#include <lal/LALStdlib.h>
139#include <lal/LALgetopt.h>
140#include <lal/LALConstants.h>
141#include <lal/Date.h>
142#include <lal/Units.h>
143#include <lal/FrequencySeries.h>
144#include <lal/TimeSeries.h>
145#include <lal/LALSimNoise.h>
146#include <lal/LALSimUtils.h>
147
148static LALUnit strainSquaredPerHertzUnit = { 0, { 0, 0, 1, 0, 0, 2, 0}, { 0, 0, 0, 0, 0, 0, 0} };
149
150double (*psdfunc)(double);
152double srate = 16384; // sampling rate in Hertz
153double segdur = 4; // duration of a segment in seconds
155double duration;
157double flow;
160const char *detector;
162int verbose = 0;
163
164int usage(const char *program);
165int parseargs(int argc, char **argv);
166double zeronoise(double f);
167
168int main(int argc, char *argv[])
169{
170 char tstr[32]; // string to hold GPS time -- 31 characters is enough
171 size_t length;
172 size_t stride;
173 size_t n;
174 REAL8FrequencySeries *psd = NULL;
175 REAL8TimeSeries *seg = NULL;
176 gsl_rng *rng;
177
179
180 parseargs(argc, argv);
181 if (overrideflow > 0.0)
183 length = segdur * srate;
184 stride = length / 2;
185
186 /* handle 0noise case first */
187 if (strcmp(detector, "0noise") == 0) {
188 /* just print out a bunch of zeros */
189 if (psdonly) {
190 double deltaF = srate / length;
191 size_t klow = flow / deltaF;
192 size_t k;
193 fprintf(stdout, "# freq (s^-1)\tASD (strain s^1/2)\n");
194 for (k = klow; k < length/2 - 1; ++k)
195 fprintf(stdout, "%.18e\t%.18e\n", k * deltaF, 0.0);
196 } else {
197 size_t j;
198 fprintf(stdout, "# time (s)\tNOISE (strain)\n");
199 n = duration * srate;
200 for (j = 0; j < n; ++j) {
202 fprintf(stdout, "%s\t%.18e\n", XLALGPSToStr(tstr, XLALGPSAdd(&t, j/srate)), 0.0);
203 }
204 }
205 return 0;
206 }
207
208 gsl_rng_env_setup();
209 rng = gsl_rng_alloc(gsl_rng_default);
211 if (asdfile)
213 else if (official && opsdfunc)
214 opsdfunc(psd, flow);
215 else
217 if (verbose) {
218 double Mpc = 1e6 * LAL_PC_SI;
219 double horizon_distance;
220 fprintf(stderr, "%-39s %s\n", "detector: ", detector);
221 fprintf(stderr, "%-39s %g Hz\n", "low-frequency cutoff: ", flow);
222 horizon_distance = XLALMeasureStandardSirenHorizonDistance(psd, flow, -1.0);
223 fprintf(stderr, "%-39s %g Mpc\n", "standard siren horizon distance: ", horizon_distance / Mpc);
224 fprintf(stderr, "%-39s %g Mpc\n", "sense-monitor range: ", horizon_distance / Mpc / LAL_HORIZON_DISTANCE_OVER_SENSEMON_RANGE);
225 fprintf(stderr, "%-39s GSL_RNG_TYPE=%s\n", "GSL random number generator:", gsl_rng_name(rng));
226 fprintf(stderr, "%-39s GSL_RNG_SEED=%lu\n", "GSL random number seed:", gsl_rng_default_seed);
227 }
228 if (psdonly) { // output PSD and exit
229 size_t klow = flow / psd->deltaF;
230 size_t k;
231 fprintf(stdout, "# freq (s^-1)\tASD (strain s^1/2)\n");
232 for (k = klow; k < length/2 - 1; ++k)
233 fprintf(stdout, "%.18e\t%.18e\n", k * psd->deltaF, sqrt(psd->data->data[k]));
234 goto end;
235 }
236
237 n = duration * srate;
238 seg = XLALCreateREAL8TimeSeries("STRAIN", &tstart, 0.0, 1.0/srate, &lalStrainUnit, length);
239 XLALSimNoise(seg, 0, psd, rng); // first time to initialize
240 fprintf(stdout, "# time (s)\tNOISE (strain)\n");
241 while (1) { // infinite loop
242 size_t j;
243 for (j = 0; j < stride; ++j, --n) { // output first stride points
244 LIGOTimeGPS t = seg->epoch;
245 if (n == 0) // check if we're done
246 goto end;
247 fprintf(stdout, "%s\t%.18e\n", XLALGPSToStr(tstr, XLALGPSAdd(&t, j * seg->deltaT)), seg->data->data[j]);
248 }
249 XLALSimNoise(seg, stride, psd, rng); // make more data
250 }
251
252end:
256
257 return 0;
258}
259
260int parseargs( int argc, char **argv )
261{
262 struct LALoption long_options[] = {
263 { "help", no_argument, 0, 'h' },
264 { "verbose", no_argument, 0, 1 },
265 { "0noise", no_argument, 0, '0' },
266 { "aligo-nosrm", no_argument, 0, 'A' },
267 { "aligo-zerodet-lowpower", no_argument, 0, 'B' },
268 { "aligo-zerodet-highpower", no_argument, 0, 'C' },
269 { "aligo-nsnsopt", no_argument, 0, 'D' },
270 { "aligo-bhbh20deg", no_argument, 0, 'E' },
271 { "aligo-highfreq", no_argument, 0, 'F' },
272 { "iligo-srd", no_argument, 0, 'I' },
273 { "virgo", no_argument, 0, 'v' },
274 { "advvirgo", no_argument, 0, 'V' },
275 { "geo", no_argument, 0, 'g' },
276 { "geohf", no_argument, 0, 'G' },
277 { "tama", no_argument, 0, 'T' },
278 { "kagra", no_argument, 0, 'K' },
279 { "official", no_argument, 0, 'O' },
280 { "psd-only", no_argument, 0, 'P' },
281 { "asd-file", required_argument, 0, 'a' },
282 { "start-time", required_argument, 0, 's' },
283 { "duration", required_argument, 0, 't' },
284 { "sample-rate", required_argument, 0, 'r' },
285 { "segment-duration", required_argument, 0, 'd' },
286 { "low-frequency", required_argument, 0, 'f' },
287 { 0, 0, 0, 0 }
288 };
289 char args[] = "h\1I0ABCDEFOPvVgGTKa:s:t:r:d:f:";
290 while (1) {
291 int option_index = 0;
292 int c;
293
294 c = LALgetopt_long_only(argc, argv, args, long_options, &option_index);
295 if (c == -1) /* end of options */
296 break;
297
298 switch (c) {
299 case 0: /* if option set a flag, nothing else to do */
300 if (long_options[option_index].flag)
301 break;
302 else {
303 fprintf(stderr, "error parsing option %s with argument %s\n", long_options[option_index].name, LALoptarg);
304 exit(1);
305 }
306 case 'h': /* help */
307 usage(argv[0]);
308 exit(0);
309 case 1: /* verbose */
310 verbose = 1;
311 break;
312 case '0': /* 0noise */
313 /* psdfunc and opsdfunc are ignored so just choose anything */
316 flow = 9.0;
317 detector = "0noise";
318 break;
319 case 'A': /* aligo-nosrm */
322 flow = 9.0;
323 detector = "aLIGO_NoSRM";
324 break;
325 case 'B': /* aligo-zerodet-lowpower */
328 flow = 9.0;
329 detector = "aLIGO_ZeroDet_LowPower";
330 break;
331 case 'C': /* aligo-zerodet-highpower */
334 flow = 9.0;
335 detector = "aLIGO_ZeroDet_HighPower";
336 break;
337 case 'D': /* aligo-nsnsopt */
340 flow = 9.0;
341 detector = "aLIGO_NSNSopt";
342 break;
343 case 'E': /* aligo-bhbh20deg */
346 flow = 9.0;
347 detector = "aLIGO_BHBH20deg";
348 break;
349 case 'F': /* aligo-highfreq */
352 flow = 9.0;
353 detector = "aLIGO_HighFreq";
354 break;
355 case 'I': /* iligo-srd */
357 flow = 30.0;
358 detector = "LIGO_SRD";
359 break;
360 case 'v': /* initial Virgo */
362 flow = 5.0;
363 detector = "Virgo";
364 break;
365 case 'V': /* Advanced Virgo */
367 flow = 1.0;
368 detector = "AdvVirgo";
369 break;
370 case 'g': /* GEO600 */
372 flow = 30.0;
373 detector = "GEO600";
374 break;
375 case 'G': /* GEO-HF */
377 flow = 50.0;
378 detector = "GEOHF";
379 break;
380 case 'T': /* TAMA300 */
382 flow = 30.0;
383 detector = "TAMA300";
384 break;
385 case 'K': /* KAGRA (formerly LCGT) */
387 flow = 5.0;
388 detector = "KAGRA";
389 break;
390 case 'O': /* official */
391 official = 1;
392 break;
393 case 'P': /* psd-only */
394 psdonly = 1;
395 break;
396 case 'a': /* asd-file */
397 flow = 0.0;
400 break;
401 case 's': /* start-time */
402 {
403 char *endp = NULL;
404 if (XLALStrToGPS(&tstart, LALoptarg, &endp) < 0 || strlen(endp)) {
405 fprintf(stderr, "could not parse GPS string `%s'\n", LALoptarg);
406 exit(1);
407 }
408 break;
409 }
410 case 't': /* duration */
411 duration = atof(LALoptarg);
412 break;
413 case 'r': /* sample-rate */
414 srate = atof(LALoptarg);
415 break;
416 case 'd': /* segment duration */
417 segdur = atof(LALoptarg);
418 break;
419 case 'f': /* low frequency */
420 overrideflow = atof(LALoptarg);
421 break;
422 case '?':
423 default:
424 fprintf(stderr, "unknown error while parsing options\n");
425 exit(1);
426 }
427 }
428
429 if ( LALoptind < argc ) {
430 fprintf(stderr, "extraneous command line arguments:\n");
431 while (LALoptind < argc)
432 fprintf(stderr, "%s\n", argv[LALoptind++]);
433 exit(1);
434 }
435
436 if ((!psdfunc && !asdfile) || (!psdonly && duration == 0.0)) {
437 fprintf(stderr, "must select a noise model and a duration\n");
438 usage(argv[0]);
439 exit(1);
440 }
441
442 return 0;
443}
444
445int usage( const char *program )
446{
447 fprintf(stderr, "usage: %s [options]\n", program);
448 fprintf(stderr, "options:\n" );
449 fprintf(stderr, "\t-h, --help \tprint this message and exit\n");
450 fprintf(stderr, "\t-0, --0noise \tno noise (generates zeros)\n");
451 fprintf(stderr, "\t-A, --aligo-nosrm \taLIGO no SRM noise\n");
452 fprintf(stderr, "\t-B, --aligo-zerodet-lowpower \taLIGO zero detuning low power noise\n");
453 fprintf(stderr, "\t-C, --aligo-zerodet-highpower\taLIGO zero detuning high power noise\n");
454 fprintf(stderr, "\t-D, --aligo-nsnsopt \taLIGO NSNS optimized noise\n");
455 fprintf(stderr, "\t-E, --aligo-bhbh20deg \taLIGO BHBH optimized 20 deg detuning noise\n");
456 fprintf(stderr, "\t-F, --aligo-highfreq \taLIGO kHz narrowband noise\n");
457 fprintf(stderr, "\t-I, --iligo-srd \tiLIGO SRD noise power\n");
458 fprintf(stderr, "\t-v, --virgo \tinitial Virgo noise power\n");
459 fprintf(stderr, "\t-V, --advvirgo \tAdvanced Virgo noise power\n");
460 fprintf(stderr, "\t-g, --geo \tGEO600 noise power\n");
461 fprintf(stderr, "\t-G, --geohf \tGEO-HF noise power\n");
462 fprintf(stderr, "\t-T, --tama \tTAMA300 noise power\n");
463 fprintf(stderr, "\t-K, --kagra \tKAGRA noise power\n");
464 fprintf(stderr, "\t-O, --official \tuse official data files\n");
465 fprintf(stderr, "\t-P, --psd-only \toutput PSD only (actually ASD)\n");
466 fprintf(stderr, "\t-a, --asd-file ASDFILE \tread an ASD file\n");
467 fprintf(stderr, "\t-s, --start-time GPSSTART \tGPS start time (s)\n");
468 fprintf(stderr, "\t-t, --duration DURATION \t(required) duration of data to produce (s)\n");
469 fprintf(stderr, "\t-r, --sample-rate SRATE \tsample rate (Hz) [16384]\n");
470 fprintf(stderr, "\t-d, --segment-duration SEGDUR\tsegment duration (s) [4]\n");
471 fprintf(stderr, "\t-f, --low-frequency FLOW \toverride default low frequency (Hz)\n");
472 return 0;
473}
int XLALStrToGPS(LIGOTimeGPS *t, const char *nptr, char **endptr)
void LALCheckMemoryLeaks(void)
#define c
const char * name
int LALgetopt_long_only(int argc, char *const *argv, const char *options, const struct LALoption *long_options, int *opt_index)
int LALoptind
char * LALoptarg
#define no_argument
#define required_argument
#define fprintf
int verbose
int main(int argc, char *argv[])
const char * detector
double segdur
int usage(const char *program)
int official
int parseargs(int argc, char **argv)
double zeronoise(double f)
LIGOTimeGPS tstart
int psdonly
double srate
static LALUnit strainSquaredPerHertzUnit
double(* psdfunc)(double)
double duration
double overrideflow
int(* opsdfunc)(REAL8FrequencySeries *, double)
char * asdfile
double flow
char * XLALGPSToStr(char *s, const LIGOTimeGPS *t)
REAL8FrequencySeries * XLALCreateREAL8FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL8FrequencySeries(REAL8FrequencySeries *series)
#define LAL_PC_SI
#define LIGOTIMEGPSZERO
int XLALSimNoise(REAL8TimeSeries *s, size_t stride, REAL8FrequencySeries *psd, gsl_rng *rng)
Routine that may be used to generate sequential segments of data with a specified stride from one seg...
Definition: LALSimNoise.c:144
int XLALSimNoisePSDaLIGOHighFrequencyGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "High_Freq....
double XLALSimNoisePSDGEO(double f)
Provides a GEO noise power spectrum based on that from Table IV of .
double XLALSimNoisePSDGEOHF(double f)
Provides a GEO-HF noise power spectrum based on a fit to Figure 6 from .
int XLALSimNoisePSDaLIGOBHBH20DegGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "BBH_20deg....
double XLALSimNoisePSDTAMA(double f)
Provides a TAMA300 noise power spectrum based on that from Table IV of .
double XLALSimNoisePSDaLIGOZeroDetHighPower(double f)
Provides the noise power spectrum for aLIGO under the high-power broad-band signal recycling (no detu...
int XLALSimNoisePSDFromFile(REAL8FrequencySeries *psd, double flow, const char *fname)
Reads file fname containing two-column amplitude spectral density data file and interpolates at the f...
int XLALSimNoisePSD(REAL8FrequencySeries *psd, double flow, double(*psdfunc)(double))
Evaluates a power spectral density function, psdfunc, at the frequencies required to populate the fre...
int XLALSimNoisePSDaLIGONoSRMLowPowerGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "NO_SRM....
double XLALSimNoisePSDaLIGONoSRMLowPower(double f)
Provides the noise power spectrum for aLIGO under the low-power no-signal-recycling-mirror configurat...
double XLALSimNoisePSDaLIGOHighFrequency(double f)
Provides the noise power spectrum for aLIGO under the configuration tuned to narrow-band high-frequen...
int XLALSimNoisePSDaLIGOZeroDetLowPowerGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "ZERO_DET_low_P....
int XLALSimNoisePSDaLIGONSNSOptGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "NSNS_Opt....
double XLALSimNoisePSDaLIGONSNSOpt(double f)
Provides the noise power spectrum for aLIGO under the configuration tuned to optimize sensitivity to ...
double XLALSimNoisePSDAdvVirgo(double f)
Provides the noise power spectrum for AdvVirgo based on that from Eqn 6 of .
double XLALSimNoisePSDaLIGOZeroDetLowPower(double f)
Provides the noise power spectrum for aLIGO under the low-power broad-band signal recycling (no detun...
double XLALSimNoisePSDiLIGOSRD(double f)
Provides the noise power spectrum based on a phenomenological fit to the SRD curve for iLIGO.
double XLALSimNoisePSDKAGRA(double f)
Provides the noise power spectrum for KAGRA based on that from Eqn 5 of .
double XLALSimNoisePSDVirgo(double f)
Provides the design noise power spectrum for Virgo based on a phenomenological fit (from the Virgo we...
int XLALSimNoisePSDaLIGOZeroDetHighPowerGWINC(REAL8FrequencySeries *psd, double flow)
Returns a frequency series psd with low frequency cutoff flow corresponding to the "ZERO_DET_high_P....
double XLALSimNoisePSDaLIGOBHBH20Deg(double f)
Provides the noise power spectrum for aLIGO under the configuration tuned to optimize sensitivity to ...
double XLALMeasureStandardSirenHorizonDistance(const REAL8FrequencySeries *psd, double f_min, double f_max)
Computes the horizon distance for a binary neutron star standard siren signal for a given one-sided d...
Definition: LALSimUtils.c:236
#define LAL_HORIZON_DISTANCE_OVER_SENSEMON_RANGE
Ratio of horizon distance to sense-monitor range.
Definition: LALSimUtils.h:56
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
REAL8TimeSeries * XLALCreateREAL8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
const LALUnit lalStrainUnit
void XLALAbortErrorHandler(const char *func, const char *file, int line, int errnum)
XLALErrorHandlerType * XLALSetErrorHandler(XLALErrorHandlerType *newHandler)
LIGOTimeGPS * XLALGPSAdd(LIGOTimeGPS *epoch, REAL8 dt)
char * program
Definition: inject.c:87
end
int * flag
REAL8Sequence * data
REAL8Sequence * data
LIGOTimeGPS epoch
REAL8 * data