Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALMetaIO 4.0.6.1-ea7c608
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
sngl_inspiral.c
Go to the documentation of this file.
1/*
2 * sngl_inspiral.c
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with with program; see the file COPYING. If not, write to the Free
16 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 * 02110-1301 USA
18 */
19
20#include <stdlib.h>
21#include <stdio.h>
22#include <string.h>
23
24
25#include <metaio.h>
26
27
28#include <lal/Date.h>
29#include <lal/LALMalloc.h>
30#include <lal/LIGOLwXML.h>
31#include <lal/LIGOLwXMLRead.h>
32#include <lal/LIGOMetadataTables.h>
33#include <lal/LIGOMetadataUtils.h>
34#include <lal/XLALError.h>
35
36
37/**
38 * Create a SnglInspiralTable structure.
39 */
41{
42 SnglInspiralTable *new = XLALMalloc(sizeof(*new));
43
44 if(!new)
46
47 new->next = NULL;
48 memset(new->ifo, 0, sizeof(new->ifo));
49 memset(new->search, 0, sizeof(new->search));
50 memset(new->channel, 0, sizeof(new->channel));
51 if(process)
52 new->process_id = process->process_id;
53 else
54 new->process_id = -1; /* impossible */
55 new->event_id = -1; /* impossible */
56
57 return new;
58}
59
60
61/**
62 * Destroy a SnglInspiralTable structure.
63 */
65{
66 SnglInspiralTable *next = row ? row->next : NULL;
67 XLALFree(row);
68 return next;
69}
70
71
72/**
73 * Destroy a SnglInspiralTable linked list.
74 */
76{
77 while(head)
79}
80
81
82/**
83 * Read the sngl_inspiral table from a LIGO Light Weight XML file into a
84 * linked list of SnglInspiralTable structures.
85 */
87 const char *filename
88)
89{
90 static const char table_name[] = "sngl_inspiral";
91 int miostatus;
92 SnglInspiralTable *head = NULL;
93 SnglInspiralTable **next = &head;
94 struct MetaioParseEnvironment env;
95 struct {
96 int process_id;
97 int ifo;
98 int search;
99 int channel;
100 int end_time;
101 int end_time_ns;
102 int end_time_gmst;
103 int impulse_time;
104 int impulse_time_ns;
105 int template_duration;
106 int event_duration;
107 int amplitude;
108 int eff_distance;
109 int coa_phase;
110 int mass1;
111 int mass2;
112 int mchirp;
113 int mtotal;
114 int eta;
115 int tau0;
116 int tau2;
117 int tau3;
118 int tau4;
119 int tau5;
120 int ttotal;
121 int psi0;
122 int psi3;
123 int alpha;
124 int alpha1;
125 int alpha2;
126 int alpha3;
127 int alpha4;
128 int alpha5;
129 int alpha6;
130 int beta;
131 int f_final;
132 int snr;
133 int chisq;
134 int chisq_dof;
135 int bank_chisq;
136 int bank_chisq_dof;
137 int cont_chisq;
138 int cont_chisq_dof;
139 int sigmasq;
140 int rsqveto_duration;
141 int Gamma0;
142 int Gamma1;
143 int Gamma2;
144 int Gamma3;
145 int Gamma4;
146 int Gamma5;
147 int Gamma6;
148 int Gamma7;
149 int Gamma8;
150 int Gamma9;
151 int kappa;
152 int chi;
153 int spin1x;
154 int spin1y;
155 int spin1z;
156 int spin2x;
157 int spin2y;
158 int spin2z;
159 int event_id;
160 } column_pos;
161
162 /* open the file and find table */
163
164 if(MetaioOpenFile(&env, filename)) {
165 XLALPrintError("%s(): error opening \"%s\": %s\n", __func__, filename, env.mierrmsg.data ? env.mierrmsg.data : "unknown reason");
167 }
168 if(MetaioOpenTableOnly(&env, table_name)) {
169 MetaioAbort(&env);
170 XLALPrintError("%s(): cannot find %s table: %s\n", __func__, table_name, env.mierrmsg.data ? env.mierrmsg.data : "unknown reason");
172 }
173
174 /* find columns */
175
177 column_pos.process_id = XLALLIGOLwFindColumn(&env, "process_id", METAIO_TYPE_INT_8S, 1);
178 column_pos.ifo = XLALLIGOLwFindColumn(&env, "ifo", METAIO_TYPE_LSTRING, 1);
179 column_pos.search = XLALLIGOLwFindColumn(&env, "search", METAIO_TYPE_LSTRING, 1);
180 column_pos.channel = XLALLIGOLwFindColumn(&env, "channel", METAIO_TYPE_LSTRING, 1);
181 column_pos.end_time = XLALLIGOLwFindColumn(&env, "end_time", METAIO_TYPE_INT_4S, 1);
182 column_pos.end_time_ns = XLALLIGOLwFindColumn(&env, "end_time_ns", METAIO_TYPE_INT_4S, 1);
183 column_pos.end_time_gmst = XLALLIGOLwFindColumn(&env, "end_time_gmst", METAIO_TYPE_REAL_8, 1);
184 column_pos.impulse_time = XLALLIGOLwFindColumn(&env, "impulse_time", METAIO_TYPE_INT_4S, 1);
185 column_pos.impulse_time_ns = XLALLIGOLwFindColumn(&env, "impulse_time_ns", METAIO_TYPE_INT_4S, 1);
186 column_pos.template_duration = XLALLIGOLwFindColumn(&env, "template_duration", METAIO_TYPE_REAL_8, 1);
187 column_pos.event_duration = XLALLIGOLwFindColumn(&env, "event_duration", METAIO_TYPE_REAL_8, 1);
188 column_pos.amplitude = XLALLIGOLwFindColumn(&env, "amplitude", METAIO_TYPE_REAL_4, 1);
189 column_pos.eff_distance = XLALLIGOLwFindColumn(&env, "eff_distance", METAIO_TYPE_REAL_4, 1);
190 column_pos.coa_phase = XLALLIGOLwFindColumn(&env, "coa_phase", METAIO_TYPE_REAL_4, 1);
191 column_pos.mass1 = XLALLIGOLwFindColumn(&env, "mass1", METAIO_TYPE_REAL_4, 1);
192 column_pos.mass2 = XLALLIGOLwFindColumn(&env, "mass2", METAIO_TYPE_REAL_4, 1);
193 column_pos.mchirp = XLALLIGOLwFindColumn(&env, "mchirp", METAIO_TYPE_REAL_4, 1);
194 column_pos.mtotal = XLALLIGOLwFindColumn(&env, "mtotal", METAIO_TYPE_REAL_4, 1);
195 column_pos.eta = XLALLIGOLwFindColumn(&env, "eta", METAIO_TYPE_REAL_4, 1);
196 column_pos.tau0 = XLALLIGOLwFindColumn(&env, "tau0", METAIO_TYPE_REAL_4, 1);
197 column_pos.tau2 = XLALLIGOLwFindColumn(&env, "tau2", METAIO_TYPE_REAL_4, 1);
198 column_pos.tau3 = XLALLIGOLwFindColumn(&env, "tau3", METAIO_TYPE_REAL_4, 1);
199 column_pos.tau4 = XLALLIGOLwFindColumn(&env, "tau4", METAIO_TYPE_REAL_4, 1);
200 column_pos.tau5 = XLALLIGOLwFindColumn(&env, "tau5", METAIO_TYPE_REAL_4, 1);
201 column_pos.ttotal = XLALLIGOLwFindColumn(&env, "ttotal", METAIO_TYPE_REAL_4, 1);
202 column_pos.psi0 = XLALLIGOLwFindColumn(&env, "psi0", METAIO_TYPE_REAL_4, 1);
203 column_pos.psi3 = XLALLIGOLwFindColumn(&env, "psi3", METAIO_TYPE_REAL_4, 1);
204 column_pos.alpha = XLALLIGOLwFindColumn(&env, "alpha", METAIO_TYPE_REAL_4, 1);
205 column_pos.alpha1 = XLALLIGOLwFindColumn(&env, "alpha1", METAIO_TYPE_REAL_4, 1);
206 column_pos.alpha2 = XLALLIGOLwFindColumn(&env, "alpha2", METAIO_TYPE_REAL_4, 1);
207 column_pos.alpha3 = XLALLIGOLwFindColumn(&env, "alpha3", METAIO_TYPE_REAL_4, 1);
208 column_pos.alpha4 = XLALLIGOLwFindColumn(&env, "alpha4", METAIO_TYPE_REAL_4, 1);
209 column_pos.alpha5 = XLALLIGOLwFindColumn(&env, "alpha5", METAIO_TYPE_REAL_4, 1);
210 column_pos.alpha6 = XLALLIGOLwFindColumn(&env, "alpha6", METAIO_TYPE_REAL_4, 1);
211 column_pos.beta = XLALLIGOLwFindColumn(&env, "beta", METAIO_TYPE_REAL_4, 1);
212 column_pos.f_final = XLALLIGOLwFindColumn(&env, "f_final", METAIO_TYPE_REAL_4, 1);
213 column_pos.snr = XLALLIGOLwFindColumn(&env, "snr", METAIO_TYPE_REAL_4, 1);
214 column_pos.chisq = XLALLIGOLwFindColumn(&env, "chisq", METAIO_TYPE_REAL_4, 1);
215 column_pos.chisq_dof = XLALLIGOLwFindColumn(&env, "chisq_dof", METAIO_TYPE_INT_4S, 1);
216 column_pos.bank_chisq = XLALLIGOLwFindColumn(&env, "bank_chisq", METAIO_TYPE_REAL_4, 1);
217 column_pos.bank_chisq_dof = XLALLIGOLwFindColumn(&env, "bank_chisq_dof", METAIO_TYPE_INT_4S, 1);
218 column_pos.cont_chisq = XLALLIGOLwFindColumn(&env, "cont_chisq", METAIO_TYPE_REAL_4, 1);
219 column_pos.cont_chisq_dof = XLALLIGOLwFindColumn(&env, "cont_chisq_dof", METAIO_TYPE_INT_4S, 1);
220 column_pos.sigmasq = XLALLIGOLwFindColumn(&env, "sigmasq", METAIO_TYPE_REAL_8, 1);
221 column_pos.rsqveto_duration = XLALLIGOLwFindColumn(&env, "rsqveto_duration", METAIO_TYPE_REAL_4, 1);
222 column_pos.Gamma0 = XLALLIGOLwFindColumn(&env, "Gamma0", METAIO_TYPE_REAL_4, 1);
223 column_pos.Gamma1 = XLALLIGOLwFindColumn(&env, "Gamma1", METAIO_TYPE_REAL_4, 1);
224 column_pos.Gamma2 = XLALLIGOLwFindColumn(&env, "Gamma2", METAIO_TYPE_REAL_4, 1);
225 column_pos.Gamma3 = XLALLIGOLwFindColumn(&env, "Gamma3", METAIO_TYPE_REAL_4, 1);
226 column_pos.Gamma4 = XLALLIGOLwFindColumn(&env, "Gamma4", METAIO_TYPE_REAL_4, 1);
227 column_pos.Gamma5 = XLALLIGOLwFindColumn(&env, "Gamma5", METAIO_TYPE_REAL_4, 1);
228 column_pos.Gamma6 = XLALLIGOLwFindColumn(&env, "Gamma6", METAIO_TYPE_REAL_4, 1);
229 column_pos.Gamma7 = XLALLIGOLwFindColumn(&env, "Gamma7", METAIO_TYPE_REAL_4, 1);
230 column_pos.Gamma8 = XLALLIGOLwFindColumn(&env, "Gamma8", METAIO_TYPE_REAL_4, 1);
231 column_pos.Gamma9 = XLALLIGOLwFindColumn(&env, "Gamma9", METAIO_TYPE_REAL_4, 1);
232 column_pos.kappa = XLALLIGOLwFindColumn(&env, "kappa", METAIO_TYPE_REAL_4, 1);
233 column_pos.chi = XLALLIGOLwFindColumn(&env, "chi", METAIO_TYPE_REAL_4, 1);
234 column_pos.spin1x = XLALLIGOLwFindColumn(&env, "spin1x", METAIO_TYPE_REAL_4, 1);
235 column_pos.spin1y = XLALLIGOLwFindColumn(&env, "spin1y", METAIO_TYPE_REAL_4, 1);
236 column_pos.spin1z = XLALLIGOLwFindColumn(&env, "spin1z", METAIO_TYPE_REAL_4, 1);
237 column_pos.spin2x = XLALLIGOLwFindColumn(&env, "spin2x", METAIO_TYPE_REAL_4, 1);
238 column_pos.spin2y = XLALLIGOLwFindColumn(&env, "spin2y", METAIO_TYPE_REAL_4, 1);
239 column_pos.spin2z =XLALLIGOLwFindColumn(&env, "spin2z", METAIO_TYPE_REAL_4, 1);
240 column_pos.event_id = XLALLIGOLwFindColumn(&env, "event_id", METAIO_TYPE_INT_8S, 1);
241
242 /* check for failure (== a required column is missing) */
243
244 if(XLALGetBaseErrno()) {
245 MetaioAbort(&env);
246 XLALPrintError("%s(): failure reading %s table\n", __func__, table_name);
248 }
249
250 /* loop over the rows in the file */
251
252 while((miostatus = MetaioGetRow(&env)) > 0) {
253 /* create a new row */
254
256
257 if(!row) {
259 MetaioAbort(&env);
261 }
262
263 /* append to linked list */
264
265 *next = row;
266 next = &(*next)->next;
267
268 /* populate the columns */
269
270 row->process_id = env.ligo_lw.table.elt[column_pos.process_id].data.int_8s;
271 strncpy(row->ifo, env.ligo_lw.table.elt[column_pos.ifo].data.lstring.data, sizeof(row->ifo) - 1);
272 strncpy(row->search, env.ligo_lw.table.elt[column_pos.search].data.lstring.data, sizeof(row->search) - 1);
273 strncpy(row->channel, env.ligo_lw.table.elt[column_pos.channel].data.lstring.data, sizeof(row->channel) - 1);
274 XLALGPSSet(&row->end, env.ligo_lw.table.elt[column_pos.end_time].data.int_4s, env.ligo_lw.table.elt[column_pos.end_time_ns].data.int_4s);
275 row->end_time_gmst = env.ligo_lw.table.elt[column_pos.end_time_gmst].data.real_8;
276 XLALGPSSet(&row->impulse_time, env.ligo_lw.table.elt[column_pos.impulse_time].data.int_4s, env.ligo_lw.table.elt[column_pos.impulse_time_ns].data.int_4s);
277 row->template_duration = env.ligo_lw.table.elt[column_pos.template_duration].data.real_8;
278 row->event_duration = env.ligo_lw.table.elt[column_pos.event_duration].data.real_8;
279 row->amplitude = env.ligo_lw.table.elt[column_pos.amplitude].data.real_4;
280 row->eff_distance = env.ligo_lw.table.elt[column_pos.eff_distance].data.real_4;
281 row->coa_phase = env.ligo_lw.table.elt[column_pos.coa_phase].data.real_4;
282 row->mass1 = env.ligo_lw.table.elt[column_pos.mass1].data.real_4;
283 row->mass2 = env.ligo_lw.table.elt[column_pos.mass2].data.real_4;
284 row->mchirp = env.ligo_lw.table.elt[column_pos.mchirp].data.real_4;
285 row->mtotal = env.ligo_lw.table.elt[column_pos.mtotal].data.real_4;
286 row->eta = env.ligo_lw.table.elt[column_pos.eta].data.real_4;
287 row->tau0 = env.ligo_lw.table.elt[column_pos.tau0].data.real_4;
288 row->tau2 = env.ligo_lw.table.elt[column_pos.tau2].data.real_4;
289 row->tau3 = env.ligo_lw.table.elt[column_pos.tau3].data.real_4;
290 row->tau4 = env.ligo_lw.table.elt[column_pos.tau4].data.real_4;
291 row->tau5 = env.ligo_lw.table.elt[column_pos.tau5].data.real_4;
292 row->ttotal = env.ligo_lw.table.elt[column_pos.ttotal].data.real_4;
293 row->psi0 = env.ligo_lw.table.elt[column_pos.psi0].data.real_4;
294 row->psi3 = env.ligo_lw.table.elt[column_pos.psi3].data.real_4;
295 row->alpha = env.ligo_lw.table.elt[column_pos.alpha].data.real_4;
296 row->alpha1 = env.ligo_lw.table.elt[column_pos.alpha1].data.real_4;
297 row->alpha2 = env.ligo_lw.table.elt[column_pos.alpha2].data.real_4;
298 row->alpha3 = env.ligo_lw.table.elt[column_pos.alpha3].data.real_4;
299 row->alpha4 = env.ligo_lw.table.elt[column_pos.alpha4].data.real_4;
300 row->alpha5 = env.ligo_lw.table.elt[column_pos.alpha5].data.real_4;
301 row->alpha6 = env.ligo_lw.table.elt[column_pos.alpha6].data.real_4;
302 row->beta = env.ligo_lw.table.elt[column_pos.beta].data.real_4;
303 row->f_final = env.ligo_lw.table.elt[column_pos.f_final].data.real_4;
304 row->snr = env.ligo_lw.table.elt[column_pos.snr].data.real_4;
305 row->chisq = env.ligo_lw.table.elt[column_pos.chisq].data.real_4;
306 row->chisq_dof = env.ligo_lw.table.elt[column_pos.chisq_dof].data.int_4s;
307 row->bank_chisq = env.ligo_lw.table.elt[column_pos.bank_chisq].data.real_4;
308 row->bank_chisq_dof = env.ligo_lw.table.elt[column_pos.bank_chisq_dof].data.int_4s;
309 row->cont_chisq = env.ligo_lw.table.elt[column_pos.cont_chisq].data.real_4;
310 row->cont_chisq_dof = env.ligo_lw.table.elt[column_pos.cont_chisq_dof].data.int_4s;
311 row->sigmasq = env.ligo_lw.table.elt[column_pos.sigmasq].data.real_8;
312 row->rsqveto_duration = env.ligo_lw.table.elt[column_pos.rsqveto_duration].data.real_4;
313 row->Gamma[0] = env.ligo_lw.table.elt[column_pos.Gamma0].data.real_4;
314 row->Gamma[1] = env.ligo_lw.table.elt[column_pos.Gamma1].data.real_4;
315 row->Gamma[2] = env.ligo_lw.table.elt[column_pos.Gamma2].data.real_4;
316 row->Gamma[3] = env.ligo_lw.table.elt[column_pos.Gamma3].data.real_4;
317 row->Gamma[4] = env.ligo_lw.table.elt[column_pos.Gamma4].data.real_4;
318 row->Gamma[5] = env.ligo_lw.table.elt[column_pos.Gamma5].data.real_4;
319 row->Gamma[6] = env.ligo_lw.table.elt[column_pos.Gamma6].data.real_4;
320 row->Gamma[7] = env.ligo_lw.table.elt[column_pos.Gamma7].data.real_4;
321 row->Gamma[8] = env.ligo_lw.table.elt[column_pos.Gamma8].data.real_4;
322 row->Gamma[9] = env.ligo_lw.table.elt[column_pos.Gamma9].data.real_4;
323 row->kappa = env.ligo_lw.table.elt[column_pos.kappa].data.real_4;
324 row->chi = env.ligo_lw.table.elt[column_pos.chi].data.real_4;
325 row->spin1x = env.ligo_lw.table.elt[column_pos.spin1x].data.real_4;
326 row->spin1y = env.ligo_lw.table.elt[column_pos.spin1y].data.real_4;
327 row->spin1z = env.ligo_lw.table.elt[column_pos.spin1z].data.real_4;
328 row->spin2x = env.ligo_lw.table.elt[column_pos.spin2x].data.real_4;
329 row->spin2y = env.ligo_lw.table.elt[column_pos.spin2y].data.real_4;
330 row->spin2z = env.ligo_lw.table.elt[column_pos.spin2z].data.real_4;
331 row->event_id = env.ligo_lw.table.elt[column_pos.event_id].data.int_8s;
332 }
333 if(miostatus < 0) {
335 MetaioAbort(&env);
336 XLALPrintError("%s(): I/O error parsing %s table: %s\n", __func__, table_name, env.mierrmsg.data ? env.mierrmsg.data : "unknown reason");
338 }
339
340 /* close file */
341
342 if(MetaioClose(&env)) {
344 XLALPrintError("%s(): error parsing document after %s table: %s\n", __func__, table_name, env.mierrmsg.data ? env.mierrmsg.data : "unknown reason");
346 }
347
348 /* done */
349
350 return head;
351}
352
353
354/**
355 * Write a linked list of SnglInspiralTable structures to a the
356 * sngl_inspiral table in a LIGO Light Weight XML file.
357 */
359 LIGOLwXMLStream *xml,
360 const SnglInspiralTable *sngl_inspiral
361)
362{
363 const char *row_head = "\n\t\t\t";
364
365 /* table header */
366
368 XLALFilePuts("\t<Table Name=\"sngl_inspiral:table\">\n", xml->fp);
369 XLALFilePuts("\t\t<Column Name=\"process:process_id\" Type=\"int_8s\"/>\n", xml->fp);
370 XLALFilePuts("\t\t<Column Name=\"ifo\" Type=\"lstring\"/>\n", xml->fp);
371 XLALFilePuts("\t\t<Column Name=\"search\" Type=\"lstring\"/>\n", xml->fp);
372 XLALFilePuts("\t\t<Column Name=\"channel\" Type=\"lstring\"/>\n", xml->fp);
373 XLALFilePuts("\t\t<Column Name=\"end_time\" Type=\"int_4s\"/>\n", xml->fp);
374 XLALFilePuts("\t\t<Column Name=\"end_time_ns\" Type=\"int_4s\"/>\n", xml->fp);
375 XLALFilePuts("\t\t<Column Name=\"end_time_gmst\" Type=\"real_8\"/>\n", xml->fp);
376 XLALFilePuts("\t\t<Column Name=\"impulse_time\" Type=\"int_4s\"/>\n", xml->fp);
377 XLALFilePuts("\t\t<Column Name=\"impulse_time_ns\" Type=\"int_4s\"/>\n", xml->fp);
378 XLALFilePuts("\t\t<Column Name=\"template_duration\" Type=\"real_8\"/>\n", xml->fp);
379 XLALFilePuts("\t\t<Column Name=\"event_duration\" Type=\"real_8\"/>\n", xml->fp);
380 XLALFilePuts("\t\t<Column Name=\"amplitude\" Type=\"real_4\"/>\n", xml->fp);
381 XLALFilePuts("\t\t<Column Name=\"eff_distance\" Type=\"real_4\"/>\n", xml->fp);
382 XLALFilePuts("\t\t<Column Name=\"coa_phase\" Type=\"real_4\"/>\n", xml->fp);
383 XLALFilePuts("\t\t<Column Name=\"mass1\" Type=\"real_4\"/>\n", xml->fp);
384 XLALFilePuts("\t\t<Column Name=\"mass2\" Type=\"real_4\"/>\n", xml->fp);
385 XLALFilePuts("\t\t<Column Name=\"mchirp\" Type=\"real_4\"/>\n", xml->fp);
386 XLALFilePuts("\t\t<Column Name=\"mtotal\" Type=\"real_4\"/>\n", xml->fp);
387 XLALFilePuts("\t\t<Column Name=\"eta\" Type=\"real_4\"/>\n", xml->fp);
388 XLALFilePuts("\t\t<Column Name=\"kappa\" Type=\"real_4\"/>\n", xml->fp);
389 XLALFilePuts("\t\t<Column Name=\"chi\" Type=\"real_4\"/>\n", xml->fp);
390 XLALFilePuts("\t\t<Column Name=\"tau0\" Type=\"real_4\"/>\n", xml->fp);
391 XLALFilePuts("\t\t<Column Name=\"tau2\" Type=\"real_4\"/>\n", xml->fp);
392 XLALFilePuts("\t\t<Column Name=\"tau3\" Type=\"real_4\"/>\n", xml->fp);
393 XLALFilePuts("\t\t<Column Name=\"tau4\" Type=\"real_4\"/>\n", xml->fp);
394 XLALFilePuts("\t\t<Column Name=\"tau5\" Type=\"real_4\"/>\n", xml->fp);
395 XLALFilePuts("\t\t<Column Name=\"ttotal\" Type=\"real_4\"/>\n", xml->fp);
396 XLALFilePuts("\t\t<Column Name=\"psi0\" Type=\"real_4\"/>\n", xml->fp);
397 XLALFilePuts("\t\t<Column Name=\"psi3\" Type=\"real_4\"/>\n", xml->fp);
398 XLALFilePuts("\t\t<Column Name=\"alpha\" Type=\"real_4\"/>\n", xml->fp);
399 XLALFilePuts("\t\t<Column Name=\"alpha1\" Type=\"real_4\"/>\n", xml->fp);
400 XLALFilePuts("\t\t<Column Name=\"alpha2\" Type=\"real_4\"/>\n", xml->fp);
401 XLALFilePuts("\t\t<Column Name=\"alpha3\" Type=\"real_4\"/>\n", xml->fp);
402 XLALFilePuts("\t\t<Column Name=\"alpha4\" Type=\"real_4\"/>\n", xml->fp);
403 XLALFilePuts("\t\t<Column Name=\"alpha5\" Type=\"real_4\"/>\n", xml->fp);
404 XLALFilePuts("\t\t<Column Name=\"alpha6\" Type=\"real_4\"/>\n", xml->fp);
405 XLALFilePuts("\t\t<Column Name=\"beta\" Type=\"real_4\"/>\n", xml->fp);
406 XLALFilePuts("\t\t<Column Name=\"f_final\" Type=\"real_4\"/>\n", xml->fp);
407 XLALFilePuts("\t\t<Column Name=\"snr\" Type=\"real_4\"/>\n", xml->fp);
408 XLALFilePuts("\t\t<Column Name=\"chisq\" Type=\"real_4\"/>\n", xml->fp);
409 XLALFilePuts("\t\t<Column Name=\"chisq_dof\" Type=\"int_4s\"/>\n", xml->fp);
410 XLALFilePuts("\t\t<Column Name=\"bank_chisq\" Type=\"real_4\"/>\n", xml->fp);
411 XLALFilePuts("\t\t<Column Name=\"bank_chisq_dof\" Type=\"int_4s\"/>\n", xml->fp);
412 XLALFilePuts("\t\t<Column Name=\"cont_chisq\" Type=\"real_4\"/>\n", xml->fp);
413 XLALFilePuts("\t\t<Column Name=\"cont_chisq_dof\" Type=\"int_4s\"/>\n", xml->fp);
414 XLALFilePuts("\t\t<Column Name=\"sigmasq\" Type=\"real_8\"/>\n", xml->fp);
415 XLALFilePuts("\t\t<Column Name=\"rsqveto_duration\" Type=\"real_4\"/>\n", xml->fp);
416 XLALFilePuts("\t\t<Column Name=\"Gamma0\" Type=\"real_4\"/>\n", xml->fp);
417 XLALFilePuts("\t\t<Column Name=\"Gamma1\" Type=\"real_4\"/>\n", xml->fp);
418 XLALFilePuts("\t\t<Column Name=\"Gamma2\" Type=\"real_4\"/>\n", xml->fp);
419 XLALFilePuts("\t\t<Column Name=\"Gamma3\" Type=\"real_4\"/>\n", xml->fp);
420 XLALFilePuts("\t\t<Column Name=\"Gamma4\" Type=\"real_4\"/>\n", xml->fp);
421 XLALFilePuts("\t\t<Column Name=\"Gamma5\" Type=\"real_4\"/>\n", xml->fp);
422 XLALFilePuts("\t\t<Column Name=\"Gamma6\" Type=\"real_4\"/>\n", xml->fp);
423 XLALFilePuts("\t\t<Column Name=\"Gamma7\" Type=\"real_4\"/>\n", xml->fp);
424 XLALFilePuts("\t\t<Column Name=\"Gamma8\" Type=\"real_4\"/>\n", xml->fp);
425 XLALFilePuts("\t\t<Column Name=\"Gamma9\" Type=\"real_4\"/>\n", xml->fp);
426 XLALFilePuts("\t\t<Column Name=\"spin1x\" Type=\"real_4\"/>\n", xml->fp);
427 XLALFilePuts("\t\t<Column Name=\"spin1y\" Type=\"real_4\"/>\n", xml->fp);
428 XLALFilePuts("\t\t<Column Name=\"spin1z\" Type=\"real_4\"/>\n", xml->fp);
429 XLALFilePuts("\t\t<Column Name=\"spin2x\" Type=\"real_4\"/>\n", xml->fp);
430 XLALFilePuts("\t\t<Column Name=\"spin2y\" Type=\"real_4\"/>\n", xml->fp);
431 XLALFilePuts("\t\t<Column Name=\"spin2z\" Type=\"real_4\"/>\n", xml->fp);
432 XLALFilePuts("\t\t<Column Name=\"event_id\" Type=\"int_8s\"/>\n", xml->fp);
433 XLALFilePuts("\t\t<Stream Name=\"sngl_inspiral:table\" Type=\"Local\" Delimiter=\",\">", xml->fp);
434 if(XLALGetBaseErrno())
436
437 /* rows */
438
439 for(; sngl_inspiral; sngl_inspiral = sngl_inspiral->next) {
440 if( XLALFilePrintf(xml->fp,"%s%ld,\"%s\",\"%s\",\"%s\",%d,%d,%.16g,%d,%d,%.16g,%.16g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%u,%.8g,%u,%.8g,%u,%.16g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%.8g,%ld",
441 row_head,
442 sngl_inspiral->process_id,
443 sngl_inspiral->ifo,
444 sngl_inspiral->search,
445 sngl_inspiral->channel,
446 sngl_inspiral->end.gpsSeconds,
447 sngl_inspiral->end.gpsNanoSeconds,
448 sngl_inspiral->end_time_gmst,
449 sngl_inspiral->impulse_time.gpsSeconds,
450 sngl_inspiral->impulse_time.gpsNanoSeconds,
451 sngl_inspiral->template_duration,
452 sngl_inspiral->event_duration,
453 sngl_inspiral->amplitude,
454 sngl_inspiral->eff_distance,
455 sngl_inspiral->coa_phase,
456 sngl_inspiral->mass1,
457 sngl_inspiral->mass2,
458 sngl_inspiral->mchirp,
459 sngl_inspiral->mtotal,
460 sngl_inspiral->eta,
461 sngl_inspiral->kappa,
462 sngl_inspiral->chi,
463 sngl_inspiral->tau0,
464 sngl_inspiral->tau2,
465 sngl_inspiral->tau3,
466 sngl_inspiral->tau4,
467 sngl_inspiral->tau5,
468 sngl_inspiral->ttotal,
469 sngl_inspiral->psi0,
470 sngl_inspiral->psi3,
471 sngl_inspiral->alpha,
472 sngl_inspiral->alpha1,
473 sngl_inspiral->alpha2,
474 sngl_inspiral->alpha3,
475 sngl_inspiral->alpha4,
476 sngl_inspiral->alpha5,
477 sngl_inspiral->alpha6,
478 sngl_inspiral->beta,
479 sngl_inspiral->f_final,
480 sngl_inspiral->snr,
481 sngl_inspiral->chisq,
482 sngl_inspiral->chisq_dof,
483 sngl_inspiral->bank_chisq,
484 sngl_inspiral->bank_chisq_dof,
485 sngl_inspiral->cont_chisq,
486 sngl_inspiral->cont_chisq_dof,
487 sngl_inspiral->sigmasq,
488 sngl_inspiral->rsqveto_duration,
489 sngl_inspiral->Gamma[0],
490 sngl_inspiral->Gamma[1],
491 sngl_inspiral->Gamma[2],
492 sngl_inspiral->Gamma[3],
493 sngl_inspiral->Gamma[4],
494 sngl_inspiral->Gamma[5],
495 sngl_inspiral->Gamma[6],
496 sngl_inspiral->Gamma[7],
497 sngl_inspiral->Gamma[8],
498 sngl_inspiral->Gamma[9],
499 sngl_inspiral->spin1x,
500 sngl_inspiral->spin1y,
501 sngl_inspiral->spin1z,
502 sngl_inspiral->spin2x,
503 sngl_inspiral->spin2y,
504 sngl_inspiral->spin2z,
505 sngl_inspiral->event_id ) < 0)
507 row_head = ",\n\t\t\t";
508 }
509
510 /* table footer */
511 if(XLALFilePuts("\n\t\t</Stream>\n\t</Table>\n", xml->fp) < 0)
513
514 /* done */
515 return 0;
516}
int XLALLIGOLwFindColumn(struct MetaioParseEnvironment *env, const char *name, unsigned int type, int required)
Convenience wrapper for MetaioFindColumn(), translating to XLAL-style error reporting and printing us...
int XLALFilePuts(const char *s, LALFILE *file)
int XLALFilePrintf(LALFILE *file, const char *fmt,...)
void * XLALMalloc(size_t n)
void XLALFree(void *p)
#define XLAL_ERROR_NULL(...)
int XLALGetBaseErrno(void)
#define XLAL_ERROR(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int XLALClearErrno(void)
XLAL_EFUNC
XLAL_EIO
LIGOTimeGPS * XLALGPSSet(LIGOTimeGPS *epoch, INT4 gpssec, INT8 gpsnan)
filename
SnglInspiralTable * XLALDestroySnglInspiralTableRow(SnglInspiralTable *row)
Destroy a SnglInspiralTable structure.
Definition: sngl_inspiral.c:64
SnglInspiralTable * XLALCreateSnglInspiralTableRow(const ProcessTable *process)
Create a SnglInspiralTable structure.
Definition: sngl_inspiral.c:40
int XLALWriteLIGOLwXMLSnglInspiralTable(LIGOLwXMLStream *xml, const SnglInspiralTable *sngl_inspiral)
Write a linked list of SnglInspiralTable structures to a the sngl_inspiral table in a LIGO Light Weig...
void XLALDestroySnglInspiralTable(SnglInspiralTable *head)
Destroy a SnglInspiralTable linked list.
Definition: sngl_inspiral.c:75
SnglInspiralTable * XLALSnglInspiralTableFromLIGOLw(const char *filename)
Read the sngl_inspiral table from a LIGO Light Weight XML file into a linked list of SnglInspiralTabl...
Definition: sngl_inspiral.c:86
This structure contains the file stream and current table type for writing to LIGO lightweight XML fi...
Definition: LIGOLwXML.h:71
LALFILE * fp
Definition: LIGOLwXML.h:72
INT4 gpsNanoSeconds
CHAR ifo[LIGOMETA_IFO_MAX]
struct tagSnglInspiralTable * next
CHAR channel[LIGOMETA_CHANNEL_MAX]
CHAR search[LIGOMETA_SEARCH_MAX]