9 @functools.total_ordering
15 self.
lumi = float(parts[2])
16 self.
met = float(parts[3])
18 self.
nbm = int(parts[5])
24 return "Result(mglu="+str(self.
mglu)+
", mlsp="+str(self.
mlsp)+
", lumi="+str(self.
lumi)+
", tkveto="+str(self.
tkveto)+
", nbm="+str(self.
nbm)+
", njets="+str(self.
njets)+
", met="+str(self.
met)+
", limit="+str(self.
limit)+
", significance="+str(self.
significance)+
")" 27 return (self.
mglu, self.
mlsp, self.
lumi, self.
tkveto, self.
nbm, self.
njets, self.
met, self.
limit, self.
significance) < (other.mglu, other.mlsp, other.lumi, other.tkveto, other.nbm, other.njets, other.met, other.limit, other.significance)
32 while len(results) > 0:
33 plot_match = results[0]
34 plot_matches = [r
for r
in results
if r.mglu == plot_match.mglu
and r.mlsp == plot_match.mlsp
and r.tkveto == plot_match.tkveto
and r.nbm == plot_match.nbm]
37 while len(plot_matches) > 0:
38 line_match = plot_matches[0]
39 line_matches = [p
for p
in plot_matches
if p.njets == line_match.njets]
41 plot.append(line_matches)
42 for l
in line_matches:
43 plot_matches.remove(l)
51 files = [f
for f
in os.listdir(dir_name)]
53 with open(os.path.join(dir_name, f),
"r") as the_file: 55 results.extend([
Result(line)])
61 return max(max([g.GetY()[i]
for i
in xrange(0, g.GetN())])
for g
in graphs)
64 return min(min([g.GetY()[i]
for i
in xrange(0, g.GetN())])
for g
in graphs)
68 for met_list
in results:
69 for result
in met_list:
70 if best_result ==
None or result.significance > best_result.significance:
76 for met_list
in results:
77 for result
in met_list:
78 if best_result ==
None or result.limit < best_result.limit:
97 title =
"T1tttt("+str(results[0][0].mglu)+
","+str(results[0][0].mlsp)+
"), L="+str(results[0][0].lumi)+
" fb^{-1}, " 98 if not results[0][0].tkveto:
100 title +=
"Tk Veto, N_{b}#geq "+str(results[0][0].nbm)+
": " 103 title +=
"[signif=%(signif)0.3f]"%{
"signif":
GetMaxSignif(results).significance}
105 title +=
"[limit=%(limit)0.3f]"%{
"limit":
GetMinLimit(results).limit}
107 title +=
";E_{T}^{miss} [GeV];"+(
"Significance" if is_signif
else "X-Sec Limit/Nominal")
111 title =
GetTitle(results, is_signif)
113 for i
in xrange(0, len(graphs)):
115 graphs[i].SetLineWidth(4)
116 graphs[i].SetLineStyle(1)
117 graphs[i].SetMarkerSize(0)
118 graphs[i].SetMarkerColor(0)
119 graphs[i].SetFillStyle(0)
120 graphs[i].SetFillColor(0)
121 graphs[i].SetTitle(title)
122 graphs[i].GetHistogram().SetTitleSize(0.05,
"xyz")
123 graphs[i].GetHistogram().SetLabelSize(0.04,
"xyz")
124 graphs[i].SetMinimum(0.)
125 graphs[i].SetMaximum(3.)
128 name =
"t1tttt_"+str(ex.mglu)+
"_"+str(ex.mlsp)+
"_lumi_"+str(ex.lumi)+
"_tkveto_" 133 name +=
"_nbm_"+str(ex.nbm)
139 y = best_result.significance
if is_signif
else best_result.limit
140 marker = ROOT.TMarker(x,y,20)
141 marker.SetMarkerSize(3)
142 for i
in xrange(0, len(results)):
143 for j
in xrange(0, len(results[i])):
144 if best_result == results[i][j]:
153 met = numpy.asarray([point.met
for point
in line])
154 sig = numpy.asarray([point.significance
for point
in line])
155 lim = numpy.asarray([point.limit
for point
in line])
156 sig_graphs.extend([ROOT.TGraph(len(line), met, sig)])
157 lim_graphs.extend([ROOT.TGraph(len(line), met, lim)])
159 Format(sig_graphs, results,
True)
160 Format(lim_graphs, results,
False)
162 canvas = ROOT.TCanvas()
163 canvas.SetFillStyle(4000)
164 canvas.SetMargin(0.10, 0.20, 0.12, 0.12)
167 legend = ROOT.TLegend(0.80, 0.12, 1.0, 0.88)
168 legend.SetFillStyle(0)
169 legend.SetBorderSize(0)
170 for i
in xrange(0, len(sig_graphs)):
171 legend.AddEntry(sig_graphs[i],
"N_{jets}#geq "+str(results[i][0].njets),
"l")
183 sig_marker.Draw(
"same")
184 canvas.SetLogy(
False)
185 canvas.Print(os.path.join(out_dir, file_base+
"_significance.pdf"))
192 lim_marker.Draw(
"same")
193 canvas.Print(os.path.join(out_dir, file_base+
"_limit_lin.pdf"))
195 canvas.Print(os.path.join(out_dir, file_base+
"_limit_log.pdf"))
197 if __name__ ==
"__main__":
198 parser = argparse.ArgumentParser(description=
"Takes a precomputed set of results with different aggregate binning and makes comparison plots")
199 parser.add_argument(
"-i",
"--input", required=
True, help=
"Directory from which to read precomputed results")
200 parser.add_argument(
"-o",
"--output", required=
True, help=
"Directoy in which to save plots")
201 args = parser.parse_args()
def GetTitle(results, is_signif)
def Format(graphs, results, is_signif)
def GetMaxSignif(results)
def MakePlot(results, out_dir)
def GroupResults(results)
def GetMarker(results, is_signif)