GWtool
Gravitational-wave tool
 All Classes Files Functions Variables Pages
gw_ligo_mcmc_injection.f90
Go to the documentation of this file.
1 !> \file gw_ligo_mcmc_injection.f90 Create an inspiral injection xml to use for lalinference_mcmc
2 
3 !
4 ! GWtool: Simple tools for working with gravitational waves
5 ! http://gwtool.sourceforge.net/
6 !
7 !
8 ! Copyright 2007-2013 AstroFloyd - astrofloyd.org
9 !
10 !
11 ! This file is part of GWtool.
12 !
13 ! GWtool is free software: you can redistribute it and/or modify
14 ! it under the terms of the GNU General Public License as published by
15 ! the Free Software Foundation, either version 3 of the License, or
16 ! (at your option) any later version.
17 !
18 ! GWtool is distributed in the hope that it will be useful,
19 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ! GNU General Public License for more details.
22 !
23 ! You should have received a copy of the GNU General Public License
24 ! along with GWtool. If not, see <http://www.gnu.org/licenses/>.
25 
26 
27 
28 !***********************************************************************************************************************************
29 !> \brief Share stream data content
30 
31 module data
32  use sufr_kinds, only: double,long
33  implicit none
34  private :: double, long
35 
36  character :: process_id*(99), waveform*(99), source*(99), numrel_data*(99), taper*(99), simulation_id*(99)
37  integer(long) :: geocent_end_time,geocent_end_time_ns, h_end_time,h_end_time_ns, l_end_time,l_end_time_ns, g_end_time
38  integer(long) :: g_end_time_ns, t_end_time,t_end_time_ns, v_end_time,v_end_time_ns
39  integer(long) :: numrel_mode_min,numrel_mode_max, amp_order, bandpass
40  real(double) :: mass1,mass2, mchirp,eta, distance, longitude,latitude, inclination, coa_phase, polarization
41  real(double) :: end_time_gmst, psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta
42  real(double) :: spin1x,spin1y,spin1z, spin2x,spin2y,spin2z, spin1,theta1,phi1, spin2,theta2,phi2
43  real(double) :: theta0,phi0, f_lower,f_final, eff_dist_h,eff_dist_l,eff_dist_g,eff_dist_t,eff_dist_v
44 
45 end module data
46 !***********************************************************************************************************************************
47 
48 
49 
50 !***********************************************************************************************************************************
51 module routines
52  implicit none
53 
54 contains
55 
56  !*********************************************************************************************************************************
57  !> \brief Write a (number of) injection xml floating-point data values to file
58  !!
59  !! \param op Output unit
60  !! \param array Array of floating-point values to write
61 
62  subroutine write_floats(op,array)
63  use sufr_kinds, only: double
64 
65  implicit none
66  integer, intent(in) :: op
67  real(double), intent(in) :: array(:)
68  integer :: i
69 
70  do i=1,size(array)
71  if(array(i).lt.0.d0) then
72  write(op,'(ES13.6,A)', advance='no') array(i),',' ! Extra space for minus sign
73  else
74  write(op,'(ES12.6,A)', advance='no') array(i),','
75  end if
76  end do
77 
78  end subroutine write_floats
79  !*********************************************************************************************************************************
80 
81 
82  !*********************************************************************************************************************************
83  !> \brief Write a (number of) injection xml integer data values to file
84  !!
85  !! \param op Output unit
86  !! \param array Array of integer values to write
87 
88  subroutine write_ints(op, array)
89  use sufr_kinds, only: long
90  implicit none
91  integer, intent(in) :: op
92  integer(long), intent(in) :: array(:)
93  integer :: i
94 
95  do i=1,size(array)
96  write(op,'(I0,A)', advance='no') array(i),','
97  end do
98 
99  end subroutine write_ints
100  !*********************************************************************************************************************************
101 
102 
103  !*********************************************************************************************************************************
104  !> \brief Write an injection xml character data value to file
105  !!
106  !! \param op Output unit
107  !! \param string Character string to write
108  !! \param comma Write comma after entry?
109 
110  subroutine write_string(op, string, comma)
111  implicit none
112  integer, intent(in) :: op
113  character, intent(in) :: string*(*)
114  logical, optional, intent(in) :: comma
115  logical :: lcomma
116 
117  lcomma = .true.
118  if(present(comma)) lcomma = comma
119 
120  write(op,'(A)', advance='no') '"'//trim(string)//'"'
121  if(lcomma) write(op,'(A)', advance='no') ','
122 
123  end subroutine write_string
124  !*********************************************************************************************************************************
125 
126 end module routines
127 !***********************************************************************************************************************************
128 
129 
130 
131 !***********************************************************************************************************************************
132 !> \brief Create an inspiral injection xml to use for lalinference_mcmc
133 
135  use sufr_system, only: find_free_io_unit, syntax_quit, file_open_error_quit
136  use sufr_constants, only: set_sufr_constants
137 
138  implicit none
139  integer :: op, status, narg
140  character :: ipfile*(99),opfile*(99)
141 
142  call set_sufr_constants()
143 
144  narg = command_argument_count()
145  if(narg.eq.1.or.narg.eq.2) then
146  call get_command_argument(1, ipfile)
147  opfile = 'injection.xml'
148  if(narg.eq.2) call get_command_argument(2, opfile)
149  else
150  call syntax_quit('<inputfile.dat> [<outputfile.xml>]', 0)
151  end if
152 
153 
154  call find_free_io_unit(op)
155  open(unit=op,form='formatted',status='replace',action='write',file=trim(opfile),iostat=status)
156  if(status.ne.0) call file_open_error_quit(trim(opfile), 0, 0) ! 1st 0: output
157 
158  call write_xml_header(op)
159 
161 
162  call read_injection_values(trim(ipfile))
163 
164  call write_xml_content_stream(op)
165 
166  call write_xml_footer(op)
167  close(op)
168 
169 end program gw_ligo_mcmc_injection
170 !***********************************************************************************************************************************
171 
172 
173 !***********************************************************************************************************************************
174 !> \brief Write the injection content stream to the xml file
175 !!
176 !! \param op Output unit
177 
179  use data, only: process_id, waveform, source, numrel_data, taper, simulation_id
180  use data, only: geocent_end_time,geocent_end_time_ns, h_end_time,h_end_time_ns, l_end_time,l_end_time_ns, g_end_time
181  use data, only: g_end_time_ns, t_end_time,t_end_time_ns, v_end_time,v_end_time_ns
182  use data, only: numrel_mode_min,numrel_mode_max, amp_order, bandpass
183  use data, only: mass1,mass2, mchirp,eta, distance, longitude,latitude, inclination, coa_phase, polarization
184  use data, only: end_time_gmst, psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta
185  use data, only: spin1x,spin1y,spin1z, spin2x,spin2y,spin2z, spin1,theta1,phi1, spin2,theta2,phi2
186  use data, only: theta0,phi0, f_lower,f_final, eff_dist_h,eff_dist_l,eff_dist_g,eff_dist_t,eff_dist_v
188 
189  implicit none
190  integer, intent(in) :: op
191 
192  write(op,'(9x)', advance='no')
193  call write_string(op, trim(process_id))
194  call write_string(op, trim(waveform))
195 
196  call write_ints(op, (/geocent_end_time, geocent_end_time_ns, h_end_time, h_end_time_ns, l_end_time, l_end_time_ns, &
197  g_end_time, g_end_time_ns, t_end_time, t_end_time_ns, v_end_time, v_end_time_ns/) )
198 
199  write(op,'(ES22.16,A )', advance='no') end_time_gmst,','
200 
201  call write_string(op, trim(source))
202 
203 
204  ! Compute chirp mass and eta from M1 and M2:
205  call m1m2_mceta(mass1,mass2, mchirp,eta)
206 
207  call write_floats(op, (/mass1,mass2, mchirp,eta, distance, longitude,latitude, inclination, coa_phase, polarization/) )
208  call write_floats(op, (/psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta/) )
209 
210  ! Compute cartesian spin vectors from spherical:
211  spin1x = spin1 * sin(theta1) * cos(phi1)
212  spin1y = spin1 * sin(theta1) * sin(phi1)
213  spin1z = spin1 * cos(theta1)
214 
215  spin2x = spin2 * sin(theta2) * cos(phi2)
216  spin2y = spin2 * sin(theta2) * sin(phi2)
217  spin2z = spin2 * cos(theta2)
218 
219 
220  call write_floats(op, (/spin1x, spin1y, spin1z, spin2x, spin2y, spin2z/) )
221  call write_floats(op, (/theta0,phi0, f_lower,f_final, eff_dist_h, eff_dist_l, eff_dist_g, eff_dist_t, eff_dist_v/) )
222 
223  call write_ints(op, (/numrel_mode_min, numrel_mode_max/) )
224  call write_string(op, trim(numrel_data))
225  call write_ints(op, (/amp_order/) )
226  call write_string(op, trim(taper))
227  call write_ints(op, (/bandpass/) )
228  call write_string(op, trim(simulation_id), comma=.false.)
229 
230 end subroutine write_xml_content_stream
231 !***********************************************************************************************************************************
232 
233 
234 !***********************************************************************************************************************************
235 !> \brief Set the default values for the inspiral injection xml stream data
236 
238  use data, only: process_id, waveform, source, numrel_data, taper, simulation_id
239  use data, only: geocent_end_time,geocent_end_time_ns, h_end_time,h_end_time_ns, l_end_time,l_end_time_ns, g_end_time
240  use data, only: g_end_time_ns, t_end_time,t_end_time_ns, v_end_time,v_end_time_ns
241  use data, only: numrel_mode_min,numrel_mode_max, amp_order, bandpass
242  use data, only: mass1,mass2, distance, longitude,latitude, inclination, coa_phase, polarization
243  use data, only: end_time_gmst, psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta
244  use data, only: spin1,theta1,phi1, spin2,theta2,phi2
245  use data, only: theta0,phi0, f_lower,f_final, eff_dist_h,eff_dist_l,eff_dist_g,eff_dist_t,eff_dist_v
246 
247  implicit none
248 
249  waveform = 'SpinTaylorT4threePointFivePN'
250 
251  geocent_end_time = 1000000010
252  geocent_end_time_ns = 0
253 
254  mass1 = 10.
255  mass2 = 10.
256 
257  distance = 20.
258  longitude = 1.5001
259  latitude = 0.7606
260  inclination = 0.1745329
261  coa_phase = 4.286765
262  polarization = 0.3490658
263 
264  spin1 = 0.999
265  theta1 = 1.1331489
266  phi1 = 1.0176645
267  spin2 = 0.0000001
268  theta2 = 1.9058877
269  phi2 = 4.5542608
270 
271  f_lower = 40.
272  f_final = 0. ! ?
273 
274  taper = 'TAPER_NONE' ! ?
275 
276 
277  ! Dummy values, not used by lalinference_mcmc:
278  process_id = 'process:process_id:0'
279 
280  h_end_time = 0
281  h_end_time_ns = 0
282  l_end_time = 0
283  l_end_time_ns = 0
284  g_end_time = 0
285  g_end_time_ns = 0
286  t_end_time = 0
287  t_end_time_ns = 0
288  v_end_time = 0
289  v_end_time_ns = 0
290 
291  end_time_gmst = 0.
292 
293  source = ''
294 
295 
296  psi0 = 0.
297  psi3 = 0.
298  alpha = 0.
299  alpha1 = 0.
300  alpha2 = 0.
301  alpha3 = 0.
302  alpha4 = 0.
303  alpha5 = 0.
304  alpha6 = 0.
305  beta = 0.
306 
307  theta0 = 0.
308  phi0 = 0.
309 
310  eff_dist_h = 0.
311  eff_dist_l = 0.
312  eff_dist_g = 0.
313  eff_dist_t = 0.
314  eff_dist_v = 0.
315 
316  numrel_mode_min = 0
317  numrel_mode_max = 0
318  numrel_data = ''
319 
320  amp_order = -1
321 
322  bandpass = 0
323  simulation_id = 'sim_inspiral:simulation_id:0'
324 
325 end subroutine set_default_injection_values
326 !***********************************************************************************************************************************
327 
328 
329 !***********************************************************************************************************************************
330 !> \brief Set the default values for the inspiral injection xml stream data
331 !!
332 !! \param ipfile Name of the input file
333 
334 subroutine read_injection_values(ipfile)
335  use sufr_system, only: find_free_io_unit, file_open_error_quit, file_read_error_quit
336  use data, only: process_id, waveform, source, numrel_data, taper, simulation_id
337  use data, only: geocent_end_time,geocent_end_time_ns, h_end_time,h_end_time_ns, l_end_time,l_end_time_ns, g_end_time
338  use data, only: g_end_time_ns, t_end_time,t_end_time_ns, v_end_time,v_end_time_ns
339  use data, only: numrel_mode_min,numrel_mode_max, amp_order, bandpass
340  use data, only: mass1,mass2, distance, longitude,latitude, inclination, coa_phase, polarization
341  use data, only: end_time_gmst, psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta
342  use data, only: spin1,theta1,phi1, spin2,theta2,phi2
343  use data, only: theta0,phi0, f_lower,f_final, eff_dist_h,eff_dist_l,eff_dist_g,eff_dist_t,eff_dist_v
344 
345  implicit none
346  character, intent(in) :: ipfile*(*)
347  integer :: ip, status
348 
349  namelist /injection_data/ process_id, waveform, source, numrel_data, taper, simulation_id, &
350  geocent_end_time,geocent_end_time_ns, h_end_time,h_end_time_ns, l_end_time,l_end_time_ns, g_end_time, &
351  g_end_time_ns, t_end_time,t_end_time_ns, v_end_time,v_end_time_ns, &
352  numrel_mode_min,numrel_mode_max, amp_order, bandpass, &
353  mass1,mass2, distance, longitude,latitude, inclination, coa_phase, polarization, &
354  end_time_gmst, psi0,psi3, alpha, alpha1,alpha2,alpha3,alpha4,alpha5,alpha6, beta, &
355  spin1,theta1,phi1, spin2,theta2,phi2, &
356  theta0,phi0, f_lower,f_final, eff_dist_h,eff_dist_l,eff_dist_g,eff_dist_t,eff_dist_v
357 
358 
359  call find_free_io_unit(ip)
360  open(unit=ip,form='formatted',status='old',action='read',file=trim(ipfile),iostat=status)
361  if(status.ne.0) call file_open_error_quit(trim(ipfile), 1, 0) ! 1: input file
362 
363  read(ip, nml=injection_data, iostat=status)
364  if(status.ne.0) call file_read_error_quit(trim(ipfile), 0, 0) ! 1st 0: no particular line
365 
366  close(ip)
367 
368 end subroutine read_injection_values
369 !***********************************************************************************************************************************
370 
371 
372 !***********************************************************************************************************************************
373 !> \brief Compute chirp mass and symmetric mass ration from individual masses
374 !!
375 !! \param m1 Individual mass 1
376 !! \param m2 Individual mass 2
377 !!
378 !! \retval mc Chirp mass
379 !! \retval eta Symmetric mass ratio
380 
381 subroutine m1m2_mceta(m1,m2, mc,eta)
382  use sufr_kinds, only: double
383 
384  implicit none
385  real(double), intent(in) :: m1, m2
386  real(double), intent(out) :: mc, eta
387  real(double) :: m
388 
389  m = m1+m2
390  eta = m1*m2/(m*m)
391  mc = m*eta**0.6d0
392 
393 end subroutine m1m2_mceta
394 !***********************************************************************************************************************************
395 
396 
397 !***********************************************************************************************************************************
398 !> \brief Write the XML header to the injection file
399 !!
400 !! \param op Output unit
401 
402 subroutine write_xml_header(op)
403  implicit none
404  integer, intent(in) :: op
405 
406  write(op,'(A)') "<?xml version='1.0' encoding='utf-8' ?>"
407  write(op,'(A)') '<!DOCTYPE LIGO_LW SYSTEM "http://ldas-sw.ligo.caltech.edu/doc/ligolwAPI/html/ligolw_dtd.txt"><LIGO_LW>'
408  write(op,'(A)') ' <Table Name="sim_inspiralgroup:sim_inspiral:table">'
409  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:process_id" Type="ilwd:char"/>'
410  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:waveform" Type="lstring"/>'
411  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:geocent_end_time" Type="int_4s"/>'
412  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:geocent_end_time_ns" Type="int_4s"/>'
413  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:h_end_time" Type="int_4s"/>'
414  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:h_end_time_ns" Type="int_4s"/>'
415  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:l_end_time" Type="int_4s"/>'
416  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:l_end_time_ns" Type="int_4s"/>'
417  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:g_end_time" Type="int_4s"/>'
418  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:g_end_time_ns" Type="int_4s"/>'
419  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:t_end_time" Type="int_4s"/>'
420  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:t_end_time_ns" Type="int_4s"/>'
421  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:v_end_time" Type="int_4s"/>'
422  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:v_end_time_ns" Type="int_4s"/>'
423  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:end_time_gmst" Type="real_8"/>'
424  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:source" Type="lstring"/>'
425  write(op,'(6x,A)') ''
426  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:mass1" Type="real_4"/>'
427  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:mass2" Type="real_4"/>'
428  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:mchirp" Type="real_4"/>'
429  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eta" Type="real_4"/>'
430  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:distance" Type="real_4"/>'
431  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:longitude" Type="real_4"/>'
432  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:latitude" Type="real_4"/>'
433  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:inclination" Type="real_4"/>'
434  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:coa_phase" Type="real_4"/>'
435  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:polarization" Type="real_4"/>'
436  write(op,'(6x,A)') ''
437  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:psi0" Type="real_4"/>'
438  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:psi3" Type="real_4"/>'
439  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha" Type="real_4"/>'
440  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha1" Type="real_4"/>'
441  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha2" Type="real_4"/>'
442  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha3" Type="real_4"/>'
443  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha4" Type="real_4"/>'
444  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha5" Type="real_4"/>'
445  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:alpha6" Type="real_4"/>'
446  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:beta" Type="real_4"/>'
447  write(op,'(6x,A)') ''
448  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin1x" Type="real_4"/>'
449  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin1y" Type="real_4"/>'
450  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin1z" Type="real_4"/>'
451  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin2x" Type="real_4"/>'
452  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin2y" Type="real_4"/>'
453  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:spin2z" Type="real_4"/>'
454  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:theta0" Type="real_4"/>'
455  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:phi0" Type="real_4"/>'
456  write(op,'(6x,A)') ''
457  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:f_lower" Type="real_4"/>'
458  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:f_final" Type="real_4"/>'
459  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eff_dist_h" Type="real_4"/>'
460  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eff_dist_l" Type="real_4"/>'
461  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eff_dist_g" Type="real_4"/>'
462  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eff_dist_t" Type="real_4"/>'
463  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:eff_dist_v" Type="real_4"/>'
464  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:numrel_mode_min" Type="int_4s"/>'
465  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:numrel_mode_max" Type="int_4s"/>'
466  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:numrel_data" Type="lstring"/>'
467  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:amp_order" Type="int_4s"/>'
468  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:taper" Type="lstring"/>'
469  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:bandpass" Type="int_4s"/>'
470  write(op,'(6x,A)') '<Column Name="sim_inspiralgroup:sim_inspiral:simulation_id" Type="ilwd:char"/>'
471  write(op,'(6x,A)') ''
472  write(op,'(6x,A)') '<Stream Name="sim_inspiralgroup:sim_inspiral:table" Type="Local" Delimiter=",">'
473 
474 end subroutine write_xml_header
475 !***********************************************************************************************************************************
476 
477 
478 !***********************************************************************************************************************************
479 !> \brief Write the XML footer to the injection file
480 !!
481 !! \param op Output unit
482 
483 subroutine write_xml_footer(op)
484  implicit none
485  integer, intent(in) :: op
486 
487  write(op,*)
488  write(op,'(6x,A)') '</Stream>'
489  write(op,'(6x,A)') ''
490  write(op,'(A)') ' </Table>'
491  write(op,'(A)') '</LIGO_LW>'
492 
493 end subroutine write_xml_footer
494 !***********************************************************************************************************************************
495 
Share stream data content.
subroutine write_xml_header(op)
Write the XML header to the injection file.
subroutine write_xml_footer(op)
Write the XML footer to the injection file.
subroutine write_ints(op, array)
Write a (number of) injection xml integer data values to file.
program gw_ligo_mcmc_injection
Create an inspiral injection xml to use for lalinference_mcmc.
subroutine write_xml_content_stream(op)
Write the injection content stream to the xml file.
subroutine write_floats(op, array)
Write a (number of) injection xml floating-point data values to file.
subroutine m1m2_mceta(m1, m2, mc, eta)
Compute chirp mass and symmetric mass ration from individual masses.
subroutine write_string(op, string, comma)
Write an injection xml character data value to file.
subroutine read_injection_values(ipfile)
Set the default values for the inspiral injection xml stream data.
subroutine set_default_injection_values()
Set the default values for the inspiral injection xml stream data.