In [1]:
%pylab inline --no-import-all
import ROOT


Populating the interactive namespace from numpy and matplotlib

In [2]:
import rootnotes
c1 = rootnotes.default_canvas()

In [3]:
%ls csv


ConvertToRoot.C                        parameterized_inc05_indexed.root?dl=0
fixed.csv                              parameterized_inc10.csv
parameterized.root                     parameterized_inc10.root
parameterized_inc05.csv.gz             parameterized_inc10_indexed.root
parameterized_inc05.root

In [8]:
f= ROOT.TFile('histograms_parameterized.root')
f.ls()

In [9]:
jesParamValues = np.linspace(5,15,11)/10
jesParamValues
jesTrueValues = [0.75, 0.9, 0.95, 0.975, 1, 1.025, 1.05, 1.1, 1.25]
jesParamValues = jesTrueValues #new file uses same points for both

In [10]:
histograms = []
i = 0
for jesTrue in jesTrueValues:
    for jesParam in jesParamValues:
        for label in [0,1]:
            title = 'h_%.3f_%.3f_%d' %(jesTrue, jesParam,label)
            print i, title
            h = f.Get(title)
            histograms.append(h)
            i+=1


0 h_0.750_0.750_0
1 h_0.750_0.750_1
2 h_0.750_0.900_0
3 h_0.750_0.900_1
4 h_0.750_0.950_0
5 h_0.750_0.950_1
6 h_0.750_0.975_0
7 h_0.750_0.975_1
8 h_0.750_1.000_0
9 h_0.750_1.000_1
10 h_0.750_1.025_0
11 h_0.750_1.025_1
12 h_0.750_1.050_0
13 h_0.750_1.050_1
14 h_0.750_1.100_0
15 h_0.750_1.100_1
16 h_0.750_1.250_0
17 h_0.750_1.250_1
18 h_0.900_0.750_0
19 h_0.900_0.750_1
20 h_0.900_0.900_0
21 h_0.900_0.900_1
22 h_0.900_0.950_0
23 h_0.900_0.950_1
24 h_0.900_0.975_0
25 h_0.900_0.975_1
26 h_0.900_1.000_0
27 h_0.900_1.000_1
28 h_0.900_1.025_0
29 h_0.900_1.025_1
30 h_0.900_1.050_0
31 h_0.900_1.050_1
32 h_0.900_1.100_0
33 h_0.900_1.100_1
34 h_0.900_1.250_0
35 h_0.900_1.250_1
36 h_0.950_0.750_0
37 h_0.950_0.750_1
38 h_0.950_0.900_0
39 h_0.950_0.900_1
40 h_0.950_0.950_0
41 h_0.950_0.950_1
42 h_0.950_0.975_0
43 h_0.950_0.975_1
44 h_0.950_1.000_0
45 h_0.950_1.000_1
46 h_0.950_1.025_0
47 h_0.950_1.025_1
48 h_0.950_1.050_0
49 h_0.950_1.050_1
50 h_0.950_1.100_0
51 h_0.950_1.100_1
52 h_0.950_1.250_0
53 h_0.950_1.250_1
54 h_0.975_0.750_0
55 h_0.975_0.750_1
56 h_0.975_0.900_0
57 h_0.975_0.900_1
58 h_0.975_0.950_0
59 h_0.975_0.950_1
60 h_0.975_0.975_0
61 h_0.975_0.975_1
62 h_0.975_1.000_0
63 h_0.975_1.000_1
64 h_0.975_1.025_0
65 h_0.975_1.025_1
66 h_0.975_1.050_0
67 h_0.975_1.050_1
68 h_0.975_1.100_0
69 h_0.975_1.100_1
70 h_0.975_1.250_0
71 h_0.975_1.250_1
72 h_1.000_0.750_0
73 h_1.000_0.750_1
74 h_1.000_0.900_0
75 h_1.000_0.900_1
76 h_1.000_0.950_0
77 h_1.000_0.950_1
78 h_1.000_0.975_0
79 h_1.000_0.975_1
80 h_1.000_1.000_0
81 h_1.000_1.000_1
82 h_1.000_1.025_0
83 h_1.000_1.025_1
84 h_1.000_1.050_0
85 h_1.000_1.050_1
86 h_1.000_1.100_0
87 h_1.000_1.100_1
88 h_1.000_1.250_0
89 h_1.000_1.250_1
90 h_1.025_0.750_0
91 h_1.025_0.750_1
92 h_1.025_0.900_0
93 h_1.025_0.900_1
94 h_1.025_0.950_0
95 h_1.025_0.950_1
96 h_1.025_0.975_0
97 h_1.025_0.975_1
98 h_1.025_1.000_0
99 h_1.025_1.000_1
100 h_1.025_1.025_0
101 h_1.025_1.025_1
102 h_1.025_1.050_0
103 h_1.025_1.050_1
104 h_1.025_1.100_0
105 h_1.025_1.100_1
106 h_1.025_1.250_0
107 h_1.025_1.250_1
108 h_1.050_0.750_0
109 h_1.050_0.750_1
110 h_1.050_0.900_0
111 h_1.050_0.900_1
112 h_1.050_0.950_0
113 h_1.050_0.950_1
114 h_1.050_0.975_0
115 h_1.050_0.975_1
116 h_1.050_1.000_0
117 h_1.050_1.000_1
118 h_1.050_1.025_0
119 h_1.050_1.025_1
120 h_1.050_1.050_0
121 h_1.050_1.050_1
122 h_1.050_1.100_0
123 h_1.050_1.100_1
124 h_1.050_1.250_0
125 h_1.050_1.250_1
126 h_1.100_0.750_0
127 h_1.100_0.750_1
128 h_1.100_0.900_0
129 h_1.100_0.900_1
130 h_1.100_0.950_0
131 h_1.100_0.950_1
132 h_1.100_0.975_0
133 h_1.100_0.975_1
134 h_1.100_1.000_0
135 h_1.100_1.000_1
136 h_1.100_1.025_0
137 h_1.100_1.025_1
138 h_1.100_1.050_0
139 h_1.100_1.050_1
140 h_1.100_1.100_0
141 h_1.100_1.100_1
142 h_1.100_1.250_0
143 h_1.100_1.250_1
144 h_1.250_0.750_0
145 h_1.250_0.750_1
146 h_1.250_0.900_0
147 h_1.250_0.900_1
148 h_1.250_0.950_0
149 h_1.250_0.950_1
150 h_1.250_0.975_0
151 h_1.250_0.975_1
152 h_1.250_1.000_0
153 h_1.250_1.000_1
154 h_1.250_1.025_0
155 h_1.250_1.025_1
156 h_1.250_1.050_0
157 h_1.250_1.050_1
158 h_1.250_1.100_0
159 h_1.250_1.100_1
160 h_1.250_1.250_0
161 h_1.250_1.250_1

In [11]:
len(histograms)


Out[11]:
162

In [12]:
opt = ''
for i in range(99):
    histograms[2*i+1].Draw(opt)
    opt = 'same'
c1


---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-12-bf2067f4ba88> in <module>()
      1 opt = ''
      2 for i in range(99):
----> 3     histograms[2*i+1].Draw(opt)
      4     opt = 'same'
      5 c1

IndexError: list index out of range

In [9]:
histograms[98].SetLineColor(ROOT.kRed)
histograms[99].SetLineColor(ROOT.kBlue)

histograms[98].Draw()
histograms[99].Draw('same')
c1


Out[9]:

In [13]:
def getHist(jesTrue, jesParam, label):
    title = 'h_%.3f_%.3f_%d' %(jesTrue, jesParam,label)
    h = f.Get(title)
    return h

In [57]:
#setup some variables
#nn = ROOT.RooRealVar('nn','',0,1)
nn = ROOT.RooRealVar('nn','',0,.1)
nnvarList = ROOT.RooArgList(nn)
nnvarSet = ROOT.RooArgSet(nn)
sigFrac = ROOT.RooRealVar('sigFrac','',0,1)
bkgYield = ROOT.RooRealVar('bkgYield','',0,1000000)
sigYield = ROOT.RooRealVar('sigYield','',0,1000000)
yieldList = ROOT.RooArgList(sigYield,bkgYield)

In [48]:
#make asimov data based on JES=1
hbkg_asimov = getHist(1.,1.,0)
hsig_asimov = getHist(1.,1.,1)
#background 	    xs = 104 pb, eff = 0.0691
#signal (M=1TeV) xs = 0.32 p  , eff = 0.08655
sigNorm = 0.32*0.08655*30000/hsig_asimov.GetEntries()
bkgNorm = 104.*0.0691*30000/hbkg_asimov.GetEntries()

print sigNorm, bkgNorm, sigNorm/(sigNorm+bkgNorm)
hasimov = ROOT.TH1F('hasimov','',100,0,1)
hasimov.Add(hbkg_asimov,hsig_asimov,bkgNorm,sigNorm)

asimov_data = ROOT.RooDataHist('asimov_data','',nnvarList,hasimov)
sig_data = ROOT.RooDataHist('sig_data','',nnvarList,hsig_asimov)
bkg_data = ROOT.RooDataHist('bkg_data','',nnvarList,hbkg_asimov)
asimov_data.Print('v')


0.002726485181 1.57513589339 0.00172796133429

In [69]:
def fitWithJes(jes,nnframe,sigFracFrame,color):
    hbkg_asimov = getHist(1.,jes,0)
    hsig_asimov = getHist(1.,jes,1)
    #background 	    xs = 104 pb, eff = 0.0691
    #signal (M=1TeV) xs = 0.32 p  , eff = 0.08655
    lumi = 10000. #pb
    sigNorm = 0.32*0.08655*lumi/hsig_asimov.GetEntries()
    bkgNorm = 104.*0.0691*lumi/hbkg_asimov.GetEntries()
    #sigNorm = .001
    #bkgNorm = .001


    print sigNorm, bkgNorm, sigNorm/(sigNorm+bkgNorm)
    hasimov = ROOT.TH1F('hasimov','',100,0,1)
    hasimov.Add(hbkg_asimov,hsig_asimov,bkgNorm,sigNorm)

    asimov_data = ROOT.RooDataHist('asimov_data','',nnvarList,hasimov)
    sig_data = ROOT.RooDataHist('sig_data','',nnvarList,hsig_asimov)
    bkg_data = ROOT.RooDataHist('bkg_data','',nnvarList,hbkg_asimov)
    asimov_data.Print('v')

    # make model
    hbkg = getHist(jes,jes,0)
    hsig = getHist(jes,jes,1)
    print hsig.GetName()
    print '\n\n\n sig/bkg =', hsig.GetEntries()/ hbkg.GetEntries()
    sig_temp = ROOT.RooDataHist('sig_data','',nnvarList,hsig)
    bkg_temp = ROOT.RooDataHist('bkg_data','',nnvarList,hbkg)
    sig_pdf = ROOT.RooHistPdf('sig_pdf','',nnvarSet,sig_temp)
    bkg_pdf = ROOT.RooHistPdf('bkg_pdf','',nnvarSet,bkg_temp)
    # model with signal fraction, not extended
    model = ROOT.RooAddPdf('model','',sig_pdf,bkg_pdf,sigFrac)
    #model with extended pdf
    #pdfList = ROOT.RooArgList(sig_pdf,bkg_pdf)
    #model = ROOT.RooAddPdf('model','',pdfList,yieldList)
    model.fitTo(asimov_data)
    asimov_data.plotOn(nnframe)
    model.plotOn(nnframe,ROOT.RooFit.LineColor(color))

    nll = model.createNLL(asimov_data)
    nllmin = nll.getVal()
    nll.plotOn(sigFracFrame,ROOT.RooFit.LineColor(color))
    return nllmin

In [70]:
nnframe = nn.frame()
sigFracFrame = sigFrac.frame(0,.1)


nllMin = fitWithJes(1.,nnframe, sigFracFrame,ROOT.kRed)
nllMin9 = fitWithJes(.975,nnframe, sigFracFrame,ROOT.kBlue)
nllMin9 = fitWithJes(.95,nnframe, sigFracFrame,ROOT.kGreen)

nnframe.Draw()
c1.SetLogy(False)
print 'nll',nllMin, nllMin9
c1


0.000908828393668 0.525045297796 0.00172796133429
h_1.000_1.000_1



 sig/bkg = 2.22648898241
0.000908828393668 0.525045297796 0.00172796133429
h_0.975_0.975_1



 sig/bkg = 2.22648898241
0.000908828393668 0.525045297796 0.00172796133429
h_0.950_0.950_1



 sig/bkg = 2.22648898241
nll -143406.991999 -128493.744514
Out[70]:

In [71]:
#sigFracFrame.SetMinimum(nllMin)
#sigFracFrame.SetMaximum(nllMin+10)
sigFracFrame.Draw()
c1.SetLogy(False)

c1


Out[71]:

In [52]:
sigFracFrame.SetMinimum(nllMin)
sigFracFrame.SetMaximum(nllMin+10)
#sigFracFrame.Draw()

c1


Out[52]:

In [64]:
#run for extended pdf fit
nnframe = nn.frame()
sigYieldFrame = sigFrac.frame(100,1000)


nllMin = fitWithJes(1.,nnframe, sigYieldFrame,ROOT.kRed)
nllMin9 = fitWithJes(.975,nnframe, sigYieldFrame,ROOT.kBlue)

sigYieldFrame.Draw()
c1.SetLogy(False)
c1


0.000908828393668 0.525045297796 0.00172796133429
h_1.000_1.000_1



 sig/bkg = 2.22648898241
0.000908828393668 0.525045297796 0.00172796133429
h_0.975_0.975_1



 sig/bkg = 2.22648898241
Out[64]:

In [158]:
asimov_data.Print()

In [111]:
sigFrac.setVal(0)
nllat0 = nll.getVal()
sigFrac.setVal(7.10742e-01)
nllatmin = nll.getVal()
print nllat0-nllatmin


3554.89826226

from fit with jes=1

sigFrac.setVal(0) nllat0 = nll.getVal() sigFrac.setVal(6.48752e-02) nllatmin = nll.getVal() print nllat0-nllatmin 2.86345250519


In [129]:
sigFrac.frame?

In [37]:
getHist(.975,.975,0).Draw()
getHist(1.,1.,0).SetLineStyle(ROOT.kDashed)
getHist(1.,1.,0).Draw('same')
c1.SetLogy()
c1


Out[37]:

In [38]:
getHist(.9,.9,1).Draw()
getHist(1.,1.,1).SetLineStyle(ROOT.kDashed)
getHist(1.,1.,1).Draw('same')
c1


Out[38]:

In [75]:
sOverBTemp = getHist(1.,1.,1)
bkgTemp = getHist(1.,1.,0)
sOverBTemp.Divide(bkgTemp)


Out[75]:
True

In [77]:
sOverBTemp.Draw()
c1


Out[77]:

In [ ]: