Package pylal :: Module gatherloudtrigs
[hide private]
[frames] | no frames]

Source Code for Module pylal.gatherloudtrigs

  1  #!/usr/bin/env python 
  2  # read in all the first stage triggers, make a cut on new_snr, create the summary files, 
  3  # and calculate the livetime. 
  4  from glue.ligolw import ligolw 
  5  from glue.ligolw import lsctables 
  6  from glue.ligolw import table 
  7  from glue.ligolw import utils 
  8  from glue.ligolw.utils import process 
  9  from glue import segmentsUtils 
 10  from glue import segments, git_version 
 11  from glue.lal import LIGOTimeGPS 
 12  import glob 
 13  import optparse 
 14  import sys 
 15   
16 -class DefaultContentHandler(ligolw.LIGOLWContentHandler):
17 pass
18 lsctables.use_in(DefaultContentHandler) 19
20 -def get_segments_from_xml(filename):
21 """ Return a segmentlist of every segment in an XML file with a 22 segments table. 23 """ 24 25 # read XML file 26 seg_xml = utils.load_filename(filename, contenthandler=DefaultContentHandler) 27 28 # get the segment table 29 seg_table = lsctables.SegmentTable.get_table(seg_xml) 30 31 # loop over segments table to get all the segments 32 segs = segments.segmentlist() 33 for seg in seg_table: 34 segs.append(segments.segment(seg.start_time, seg.end_time)) 35 36 return segs
37
38 -def get_loud_trigs(fList, veto_file, new_snr_cut):
39 """ Return a list(s) of single inspiral triggers that are above the 40 new snr threshold for every combination of file in the file list 41 and application of veto in the veto file list. 42 """ 43 trigs = lsctables.New(lsctables.SnglInspiralTable) 44 searched_segs = segments.segmentlist() 45 for fname in fList: 46 xmldoc = utils.load_filename(fname, gz=True, contenthandler=DefaultContentHandler) 47 tbl = lsctables.SnglInspiralTable.get_table(xmldoc) 48 trigs.extend([tbl[i] for i in (tbl.get_new_snr() > new_snr_cut).nonzero()[0]]) 49 search_summary = lsctables.SearchSummaryTable.get_table(xmldoc) 50 searched_segs += search_summary.get_outlist() 51 52 if isinstance(veto_file, list): 53 # If we have multiple veto files, return results for applying each one 54 lt = [] 55 tg = [] 56 for vf in veto_file: 57 veto_segs = get_segments_from_xml(vf) 58 segs_after_veto = searched_segs - veto_segs 59 print vf, 'livetime', abs(segs_after_veto) 60 tg.append(trigs.veto(veto_segs)) 61 lt.append(abs(segs_after_veto)) 62 return tg, lt 63 else: 64 veto_segs = get_segments_from_xml(veto_file) 65 segs_after_veto = searched_segs - veto_segs 66 print veto_file, 'livetime', abs(segs_after_veto) 67 return trigs.veto(veto_segs), abs(segs_after_veto)
68 69 70 if __name__ == "__main__": 71 parser = optparse.OptionParser() 72 73 parser.add_option("-I","--input-glob",action="store",type="string",\ 74 default=None,metavar=" INPUT_GLOB",\ 75 help="GLOB of input inspiral xml files") 76 77 parser.add_option("-c","--new-snr-cut",action="store",type="float",\ 78 default="6.0", help="new snr threshold to retain triggers") 79 80 parser.add_option("--output-file",action="store",type="string",\ 81 default=None, help="Name of output file") 82 83 parser.add_option("--veto-file",action="store",type="string",\ 84 default=None, help="Name of veto file") 85 86 (opts,args) = parser.parse_args() 87 88 if opts.input_glob: 89 fList = glob.glob(opts.input_glob) 90 else: 91 print >>sys.stderr, "Must specify a GLOB of input files " 92 sys.exit(1) 93 94 if not opts.output_file: 95 print >>sys.stderr, "Must specify an output file" 96 sys.exit(1) 97 98 if not opts.veto_file: 99 print >>sys.stderr, "Must specify a veto file" 100 sys.exit(1) 101 102 trigs, livetime = get_loud_trigs(fList, opts.veto_file, opts.new_snr_cut) 103 104 output_doc=ligolw.Document() 105 output_doc.appendChild(ligolw.LIGO_LW()) 106 107 proc_id = process.register_to_xmldoc(output_doc, 108 "get_loud_trigs", opts.__dict__, comment="", ifos=[""], 109 version=git_version.id, cvs_repository=git_version.branch, 110 cvs_entry_time=git_version.date).process_id 111 112 vartable = lsctables.New(lsctables.SearchSummVarsTable) 113 var = lsctables.SearchSummVars() 114 var.process_id = proc_id 115 var.value = livetime 116 var.name = "livetime" 117 var.string = "Single detector trigger collection time in seconds." 118 var.search_summvar_id = vartable.next_id 119 vartable.append(var) 120 121 output_doc.childNodes[0].appendChild(vartable) 122 output_doc.childNodes[0].appendChild(trigs) 123 124 utils.write_filename(output_doc, opts.output_file, gz=opts.output_file.endswith("gz")) 125