Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALInference 4.1.9.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
lalinference_review_test.py
Go to the documentation of this file.
1##python
2import argparse
3import shutil
4import os
5import sys
6import subprocess
7import glob
8import lalinference
9
10from configparser import ConfigParser
11
12prefix=''
13try:
14 prefix=os.environ['LALINFERENCE_DATADIR']
15except KeyError:
16 prefix=''
17
18parser = argparse.ArgumentParser(description="Runs review tests of lalinference using lalinference_pipe_example.ini.")
19
20parser.add_argument('-i','--ini_file', type=str, nargs='?',
21 default=os.path.join(prefix,'lalinference_pipe_example.ini'),
22 help='lalinference_pipe ini file to process.')
23
24parser.add_argument('--bns-injection', type=str, nargs='?',
25 default=False,
26 const=os.path.join(prefix,'fiducialBNS.xml'),
27 help='injection file for fiducial BNS analysis.')
28
29parser.add_argument('--gracedb', action='store_true',
30 default=False,
31 help='Runs the analysis for the GraceDB test event T169545.')
32
33parser.add_argument('--analytic-tests', action='store_true',
34 default=False,
35 help='Run on the unmodal and bimodial Gaussian and Rosenbrock test functions.')
36
37parser.add_argument('--analytic-csv-dir', type=str,
38 default=prefix,
39 help='Directory containing the CSVs describing the analytic tests.')
40
41parser.add_argument('--pptest', action='store_true',
42 default=False,
43 help='Runs a P-P analysis. Must specify a single engine.')
44
45parser.add_argument('--pp-approximant', action='store', type=str,
46 default='IMRPhenomPv2pseudoFourPN,SEOBNRv4_ROMpseudoFourPN',
47 help='Approximant(s) used for the P-P analysis.')
48
49parser.add_argument('--bbh-injection', type=str, nargs='?',
50 default=False,
51 const=os.path.join(prefix,'fiducialBBH.xml'),
52 help='injection file for fiducial BBH analysis.')
53
54parser.add_argument('-e','--engine', type=str, nargs='?',
55 default='lalinferencemcmc,lalinferencenest',
56 help='lalinference engine to run with.')
57
58parser.add_argument('-o','--output', type=str, nargs='?',
59 default=None,
60 help='output directory.')
61
62parser.add_argument('--condor-submit', action='store_true',
63 default=False,
64 help='submits the test suite.')
65
66args = parser.parse_args()
67
68args.ini_file = os.path.abspath(args.ini_file)
69
70if 'UNCLEAN' in lalinference.InferenceVCSInfo.vcsId:
71 default_outputdir=os.getenv('HOME')+'/lalinference_testrun/'+lalinference.InferenceVCSInfo.vcsId+'_UNCLEAN/'+args.engine+'/'
72else:
73 default_outputdir=os.getenv('HOME')+'/lalinference_testrun/'+lalinference.InferenceVCSInfo.vcsId+'/'+args.engine.replace(',','_')+'/'
74
75if args.output == None:
76 web_outputdir=default_outputdir
77 args.output=os.path.abspath(default_outputdir)
78else:
79 web_outputdir=os.path.abspath(args.output)
80 args.output=os.path.abspath(args.output)
81
82os.makedirs(args.output)
83
84if args.bns_injection:
85 args.bns_injection=os.path.abspath(args.bns_injection)
86if args.bbh_injection:
87 args.bbh_injection=os.path.abspath(args.bbh_injection)
88
89analytic_csv_dir = os.path.abspath(args.analytic_csv_dir)
90if args.analytic_tests:
91 csvs = glob.glob(analytic_csv_dir+"/*csv")
92 for csv in csvs:
93 shutil.copy(csv,args.output+'/'+os.path.basename(csv))
94
95os.chdir(args.output)
96
97lalinf_prefix=''
98try:
99 lalinf_prefix=os.environ['LALINFERENCE_PREFIX']
100except KeyError:
101 print('LALINFERENCE_PREFIX variable not defined, could not find LALInference installation.')
102 sys.exit()
103
104def init_ini_file(file=args.ini_file):
105 cp=ConfigParser()
106 fp=open(file)
107 cp.optionxform = str
108 try:
109 cp.read_file(fp)
110 except AttributeError:
111 cp.readfp(fp)
112 fp.close()
113
114 cp.set('condor','lalsuite-install',lalinf_prefix)
115 cp.set('analysis','engine',args.engine)
116 cp.remove_option('analysis','nparallel')
117
118 return cp
119
120############################################################
121
123
124 cp.set('lalinference','fake-cache',"{'H1':'LALSimAdLIGO','L1':'LALSimAdLIGO','V1':'LALSimAdVirgo'}")
125 cp.set('analysis','dataseed','1234')
126 cp.set('engine','0noise','')
127
128 cp.set('paths','webdir',web_outputdir+'/fiducialBNS/webdir/')
129 cp.set('lalinference','flow',"{'H1':40,'L1':40,'V1':40}")
130 cp.set('engine','approx','SEOBNRv4_ROMpseudoFourPN')
131 cp.set('resultspage','deltaLogP','5')
132 cp.set('engine','comp-max','3.5')
133 cp.set('engine','comp-min','0.5')
134 cp.remove_option('engine','disable-spin')
135 cp.set('engine','a_spin1-max','0.1')
136 cp.set('engine','a_spin1-min','-0.1')
137 cp.set('engine','a_spin2-max','0.1')
138 cp.set('engine','a_spin2-min','-0.1')
139 cp.set('engine','alignedspin-zprior','')
140 cp.set('engine','distance-max','500')
141 cp.set('engine','neff','500')
142 cp.set('engine','nlive','512')
143
144 return cp
145
146if args.bns_injection:
147
148 os.makedirs(args.output+'/fiducialBNS/')
149 os.chdir(args.output+'/fiducialBNS/')
150
151 shutil.copy(args.bns_injection,args.output+'/fiducialBNS/')
152 BNS_ini_file=os.path.join(args.output,'fiducialBNS','BNS.ini')
153
155 with open(BNS_ini_file,'w') as cpfile:
156 cpBNS.write(cpfile)
157
158 lalinferenceargs = [ 'lalinference_pipe'
159 , '-I'
160 , args.bns_injection
161 , '-r'
162 , './run'
163 , '-p'
164 , './daglog'
165 , BNS_ini_file ]
166
167 if args.condor_submit:
168 lalinferenceargs.append('--condor-submit')
169
170 subprocess.call(lalinferenceargs)
171
172###################################################
173
175
176 cp.set('analysis','upload-to-gracedb','True')
177 cp.set('paths','webdir',web_outputdir+'/GraceDB/webdir/')
178
179 cp.set('datafind','types',"{'H1':'H1_HOFT_C00','L1':'L1_HOFT_C00','V1':'V1Online'}")
180 cp.set('data','channels',"{'H1':'H1:GDS-CALIB_STRAIN','L1':'L1:GDS-CALIB_STRAIN','V1':'V1:FAKE_h_16384Hz_4R'}")
181
182 cp.set('engine','distance-max','300')
183
184 return cp
185
186if args.gracedb:
187
188 os.makedirs(args.output+'/GraceDB/')
189 os.chdir(args.output+'/GraceDB/')
190
191 GDB_ini_file=os.path.join(args.output,'GraceDB','GDB.ini')
192
194 with open(GDB_ini_file,'w') as cpfile:
195 cpGDB.write(cpfile)
196
197 lalinferenceargs = [ 'lalinference_pipe'
198 , '--gid'
199 , 'T169545'
200 , '-r'
201 , './run'
202 , '-p'
203 , './daglog'
204 , GDB_ini_file ]
205
206 if args.condor_submit:
207 lalinferenceargs.append('--condor-submit')
208
209 subprocess.call(lalinferenceargs)
210
211############################################################
212
214
215 cp.set('lalinference','fake-cache',"{'H1':'LALSimAdLIGO','L1':'LALSimAdLIGO','V1':'LALSimAdVirgo'}")
216 cp.set('analysis','dataseed','1234')
217 cp.set('engine','0noise','')
218 cp.remove_option('engine','margphi')
219
220 cp.set('paths','webdir',web_outputdir+'/fiducialBBH/webdir/')
221 #cp.set('lalinference','flow',"{'H1':40,'L1':40,'V1':40}")
222 cp.set('engine','approx','IMRPhenomPv2pseudoFourPN')
223 cp.set('analysis','roq','True')
224 cp.remove_option('engine','disable-spin')
225 cp.set('resultspage','deltaLogP','6')
226 cp.set('engine','distance-max','1000')
227 cp.set('engine','inj-fref','100')
228
229 cp.set('engine','neff','500')
230 cp.set('engine','nlive','512')
231
232 return cp
233
234if args.bbh_injection:
235
236 os.makedirs(args.output+'/fiducialBBH/')
237 os.chdir(args.output+'/fiducialBBH/')
238
239 shutil.copy(args.bbh_injection,args.output+'/fiducialBBH/')
240 BBH_ini_file=os.path.join(args.output,'fiducialBBH','BBH.ini')
241
243 with open(BBH_ini_file,'w') as cpfile:
244 cpBBH.write(cpfile)
245
246 lalinferenceargs = [ 'lalinference_pipe'
247 , '-I'
248 , args.bbh_injection
249 , '-r'
250 , './run'
251 , '-p'
252 , './daglog'
253 , BBH_ini_file ]
254
255 if args.condor_submit:
256 lalinferenceargs.append('--condor-submit')
257
258 subprocess.call(lalinferenceargs)
259
260############################################################
261def set_analytic_test(cp, test_func):
262
263 cp.set('paths','webdir',web_outputdir+'/'+test_func+'/webdir/')
264 cp.set('lalinference','fake-cache',"{'H1':'LALSimAdLIGO','L1':'LALSimAdLIGO','V1':'LALSimAdVirgo'}")
265 cp.set('analysis','dataseed','1234')
266
267 cp.set('input','analyse-all-time','True')
268 cp.set('input','gps-start-time','0')
269 cp.set('input','gps-end-time','2')
270 cp.set('input','segment-overlap','0')
271 cp.set('input','psd-length','1')
272
273 cp.set('engine','seglen','1')
274 cp.set('engine','approx','SpinTaylorT4')
275 cp.set('engine',test_func,'')
276 cp.set('engine','neff','10000')
277 cp.set('engine','nlive','2048')
278
279 cp.set('resultspage','deltaLogP','7')
280 if test_func != "rosenbrockLikelihood":
281 csv = args.output+'/'+test_func+'_means.csv'
282 if os.path.isfile(csv):
283 cp.set('resultspage','meanVectors',csv)
284 csv = args.output+'/'+'test_correlation_matrix.csv'
285 if os.path.isfile(csv):
286 cp.set('resultspage','covarianceMatrix',csv)
287
288 return cp
289
290if args.analytic_tests:
291 test_funcs = ['correlatedGaussianLikelihood', 'bimodalGaussianLikelihood', 'rosenbrockLikelihood']
292 for test_func in test_funcs:
293 os.makedirs(args.output+'/' + test_func + '/')
294 os.chdir(args.output+'/' + test_func + '/')
295
296
297 analytic_ini_file=os.path.join(args.output,test_func,'analytic.ini')
298
299 cpanalytic=set_analytic_test(init_ini_file(), test_func)
300 with open(analytic_ini_file,'w') as cpfile:
301 cpanalytic.write(cpfile)
302
303 lalinferenceargs = [ 'lalinference_pipe'
304 , '-r'
305 , './run'
306 , '-p'
307 , './daglog'
308 , analytic_ini_file ]
309
310 if args.condor_submit:
311 lalinferenceargs.append('--condor-submit')
312
313 subprocess.call(lalinferenceargs)
314
315############################################################
316
317def set_pptest(cp, engine, approximant):
318
319 cp.set('paths','webdir', os.path.join(web_outputdir, 'pptest', engine, approximant, 'webdir/'))
320 cp.set('ppanalysis','webdir', os.path.join(web_outputdir, 'PPcheck', engine, approximant + '/'))
321 cp.set('lalinference','fake-cache',"{'H1':'LALSimAdLIGO','L1':'LALSimAdLIGO','V1':'LALSimAdVirgo'}")
322 cp.set('analysis','dataseed','1234')
323 cp.set('analysis', 'engine', engine)
324
325 cp.remove_option('engine','margphi')
326 cp.set('engine','margtime','')
327 cp.set('engine','amporder','-1')
328 cp.set('engine','fref','0')
329 cp.set('engine','distance-max','2000')
330 cp.set('engine', 'approx', approximant)
331
332 cp.set('resultspage','deltaLogP','7')
333
334 return cp
335
336if args.pptest:
337
338 # The PP test needs a single engine to be specified
339 for engine in args.engine.split(','):
340 for approximant in args.pp_approximant.split(','):
341 os.makedirs(os.path.join(args.output, 'pptest', engine, approximant + '/'))
342 os.chdir(os.path.join(args.output, 'pptest', engine, approximant + '/'))
343
344 pptest_ini_file=os.path.join(args.output, 'pptest', engine, approximant, 'pptest.ini')
345
346 cppptest=set_pptest(init_ini_file(), engine=engine,
347 approximant=approximant)
348 with open(pptest_ini_file,'w') as cpfile:
349 cppptest.write(cpfile)
350
351 lalinferenceargs = [ 'lalinference_pp_pipe'
352 , '-r'
353 , './run'
354 , '-N'
355 , '100'
356 , pptest_ini_file ]
357
358 subprocess.call(lalinferenceargs)
359
360 if args.condor_submit:
361 condor_submit_dag = ['condor_submit_dag', os.path.join(args.output, 'pptest', engine, approximant, 'run/priortest.dag')]
362 subprocess.call(condor_submit_dag)
def set_pptest(cp, engine, approximant)
def init_ini_file(file=args.ini_file)