ra4_stats  0341147a0dc35f80f4e12c6003afb76a38e2ed6e
scan_aggregate.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 
3 import argparse
4 import os
5 import shutil
6 import re
7 import tempfile
8 import subprocess
9 import ROOT
10 import sys
11 
12 def GetRegex(name):
13  return re.search("t1tttt_(.*?)_(.*?)_lumi_(.*?)_met_(.*?)_inf_njets_(.*?)_inf_nbm_(.*?)_inf_tkveto_(.*?).root", name)
14 
15 def GetParams(name):
16  param_strings = GetRegex(name)
17  mglu = int(param_strings.group(1))
18  mlsp = int(param_strings.group(2))
19  lumi = float(param_strings.group(3))
20  met = float(param_strings.group(4))
21  njets = int(param_strings.group(5))
22  nbm = int(param_strings.group(6))
23  tkveto = param_strings.group(7)
24  if tkveto == "true":
25  tkveto = True
26  else:
27  tkveto = False
28  return (mglu, mlsp, lumi, met, njets, nbm, tkveto)
29 
30 def GetLimit(filename):
31  f = ROOT.TFile(filename, "read")
32  for wp in f.limit:
33  if wp.quantileExpected == 0.5:
34  return wp.limit
35 
36  return -1.
37 
38 def GetSignificance(filename):
39  f = ROOT.TFile(filename, "read")
40  for wp in f.limit:
41  if wp.quantileExpected == -1.:
42  return wp.limit
43 
44  return -1.
45 
46 if __name__ == "__main__":
47  parser = argparse.ArgumentParser(description="Extracts binning parameters, limits, and significance from a single (aggregate) bin workspace")
48  parser.add_argument("-f", "--file", required=True, help="File from which to extract parameters")
49  parser.add_argument("-o", "--output", default="", help="Directory in which to store results")
50  args = parser.parse_args()
51 
52  params = GetParams(args.file)
53 
54  origdir = os.getcwd()
55  workdir = tempfile.mkdtemp()
56  name = os.path.basename(args.file)
57  os.symlink(args.file, os.path.join(workdir, name))
58  os.chdir(workdir)
59 
60  subprocess.call(["combine","-M","Asymptotic","-t","-1","--toysFreq",name])
61  subprocess.call(["combine","-M","ProfileLikelihood","--significance","--expectSignal=1","-t","-1","--toysFreq",name])
62 
63  limit = GetLimit(os.path.join(workdir, "higgsCombineTest.Asymptotic.mH120.root"))
64  signif = GetSignificance(os.path.join(workdir, "higgsCombineTest.ProfileLikelihood.mH120.root"))
65 
66  params += (limit, signif,)
67 
68  os.chdir(origdir)
69  shutil.rmtree(workdir)
70 
71  result = " ".join(str(x) for x in params)
72  print result
73 
74  if(args.output != ""):
75  with open(os.path.join(args.output, name.replace(".root", ".txt")), "w") as f:
76  f.write(result)
def GetParams(name)
def GetRegex(name)
def GetLimit(filename)
def GetSignificance(filename)