diff --git a/gstlal-inspiral/bin/gstlal_inspiral_plotsummary b/gstlal-inspiral/bin/gstlal_inspiral_plotsummary index fac88169dfb359ed264df9776db9b6a9768552b8..ac74e977c4d3ecc2a86c6beac1a651cfe554635d 100755 --- a/gstlal-inspiral/bin/gstlal_inspiral_plotsummary +++ b/gstlal-inspiral/bin/gstlal_inspiral_plotsummary @@ -836,18 +836,29 @@ FROM fig, axes = create_plot(x_label, y_label) legend = [] + ifo_count_summary = {''.join(sorted(combo)): '---' for num_ifos in range(1, len(self.missed_found_plots.instruments)+1) for combo in sorted(list(itertools.combinations(self.missed_found_plots.instruments, num_ifos)), reverse=True)} + ifo_count_summary['missed'] = '---' for participating_instruments, sims in sorted(self.found_in.items(), key = (lambda x: lsctables.instrumentsproperty.set(x[0]))): if cnt == 0: - self.missed_found_plots.injection_summary_data.append(["Found", "".join(sorted(self.on_instruments)), "".join(sorted(participating_instruments)), len(sims)]) + ifo_count_summary["".join(sorted(participating_instruments))] = len(sims) legend.append("Found in %s" % ", ".join(sorted(participating_instruments))) axes.semilogy([x_func(sim) for sim in sims], [y_func(sim, participating_instruments) for sim in sims], ".") if missed: if cnt == 0: - self.missed_found_plots.injection_summary_data.append(["Missed", "".join(sorted(self.on_instruments)), "---", len(missed)]) + ifo_count_summary["missed"] = len(missed) for rank, sim in enumerate(missed): self.missed_found_plots.missed_summary_data.append(["".join(sorted(self.on_instruments)), sim.waveform, float(sim.time_at_instrument("H1", {"H1": 0.0})), float(sim.time_at_instrument("L1", {"L1": 0.0})), float(sim.time_at_instrument("V1", {"V1": 0.0})), sim.mass1, sim.mass2, sim.spin1x, sim.spin1y, sim.spin1z, sim.spin2x, sim.spin2y, sim.spin2z, sim.distance, decisive_chirp_distance(sim, self.on_instruments), sim.inclination, sim.alpha4, sim.alpha5, sim.alpha6, decisive_charsnr(sim, self.on_instruments)]) legend.append("Missed") axes.semilogy([x_func(sim) for sim in missed], [y_func(sim, self.on_instruments) for sim in missed], "k.") + if cnt == 0: + total_count = 0 + for ifos in ifo_count_summary.keys(): + if ifo_count_summary[ifos] != '---': + total_count += ifo_count_summary[ifos] + ifo_count_summary['total'] = total_count + ifo_columns = sorted([key for key in ifo_count_summary.keys() if 'missed' not in key and 'total' not in key], key=lambda item: (-len(item), item)) + ['missed', 'total'] + missed_found_row = ["".join(sorted(self.on_instruments))] + [ifo_count_summary[ifo_col] for ifo_col in ifo_columns] + self.missed_found_plots.injection_summary_data.append(missed_found_row) if legend: @@ -886,23 +897,29 @@ FROM self.remove_precession = remove_precession self.isolate_precession = isolate_precession self.snr_segments = snr_segments + self.instruments = set() def add_contents(self, contents): self.base = contents.base if contents.sim_inspiral_table is None: # no injections return + for on_instruments in contents.on_instruments_combos: + self.instruments.update(on_instruments) for on_instruments in contents.on_instruments_combos: if on_instruments not in self.plots: self.plots[on_instruments] = self.MissedFound(on_instruments, self.far_thresh, self, self.remove_precession, self.isolate_precession, self.snr_segments) self.plots[on_instruments].add_contents(contents) def finish(self): - for on_instruments, plot in self.plots.items(): + for on_instruments in sorted(self.plots.keys(), key=lambda item: (-len(item), item)): + plot = self.plots[on_instruments] for fig, filename_fragment, is_open_box in plot.finish(): yield fig, "%s_%s" % (filename_fragment, "".join(sorted(on_instruments))), is_open_box - save_table(self.base + "_injection_summary.json", ["Found || Missed", "On Instruments", "Participating IFOs", "count"], self.injection_summary_data) + ifo_columns = [''.join(sorted(combo)) for num_ifos in range(1, len(self.instruments)+1) for combo in sorted(list(itertools.combinations(self.instruments, num_ifos)), reverse=True)] + ifo_columns.sort(key=lambda item: (-len(item), item)) + save_table(self.base + "_injection_summary.json", ["On Instruments"] + ifo_columns + ['Missed', 'Total'], self.injection_summary_data) save_table(self.base + "_missed_summary.json", ["On Instruments", "Waveform", "H1 time", "L1 time", "V1 time", "m1", "m2", "S_1x", "S_1y", "S_1z", "S_2x", "S_2y", "S_2z", "D (Mpc)", "Decisive D chirp,eff (Mpc)" , "Inclination", "H1 SNR", "L1 SNR", "V1 SNR", "Decisive SNR"], self.missed_summary_data)