1   
  2   
  3   
  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): 
  18  lsctables.use_in(DefaultContentHandler) 
 19   
 21      """ Return a segmentlist of every segment in an XML file with a 
 22          segments table. 
 23      """ 
 24   
 25       
 26      seg_xml = utils.load_filename(filename, contenthandler=DefaultContentHandler) 
 27   
 28       
 29      seg_table = lsctables.SegmentTable.get_table(seg_xml) 
 30   
 31       
 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   
 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           
 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