ra4_stats  0341147a0dc35f80f4e12c6003afb76a38e2ed6e
underflow.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 
3 from __future__ import print_function
4 
5 import argparse
6 import os
7 import datetime
8 
9 def fullPath(path):
10  return os.path.realpath(os.path.abspath(os.path.expanduser(path)))
11 
12 def ensureDir(path):
13  try:
14  os.makedirs(path)
15  except OSError:
16  if not os.path.isdir(path):
17  raise
18 
19 def Underflow(nbins, bin_yield):
20  print("Underflowing datacard")
21  print("date {}".format(datetime.datetime.now().strftime("%Y.%m.%d")))
22  print("imax * number of channels")
23  print("jmax * number of backgrounds")
24  print("kmax * number of nuisance parameters")
25  print("------------")
26  print("Observation",end="")
27  for ibin in range(nbins):
28  if ibin>0:
29  print("\t\t{}".format(bin_yield),end="")
30  else:
31  print("\t{}".format(bin_yield),end="")
32  print("\n------------")
33  print("bin",end="")
34  for ibin in range(nbins):
35  print("\t{0}\t{0}".format(ibin+1),end="")
36  print("\nprocess",end="")
37  for ibin in range(nbins):
38  print("\tS\tB",end="")
39  print("\nprocess",end="")
40  for ibin in range(nbins):
41  print("\t0\t1",end="")
42  print("\nrate",end="")
43  for ibin in range(nbins):
44  print("\t{0}\t{0}".format(bin_yield),end="")
45  print("\n------------")
46 
47 if __name__ == "__main__":
48  parser = argparse.ArgumentParser(description="Create datacard with large number of high-yield bins designed to cause underflow when fit in combine.",
49  formatter_class=argparse.ArgumentDefaultsHelpFormatter)
50  parser.add_argument("nbins", type=int, help="Number of bins")
51  parser.add_argument("bin_yield", type=int, help="Yield in each bin")
52  args = parser.parse_args()
53 
54  Underflow(args.nbins, args.bin_yield)
def ensureDir(path)
Definition: underflow.py:12
def fullPath(path)
Definition: underflow.py:9
def Underflow(nbins, bin_yield)
Definition: underflow.py:19