ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/myutils/Rebinner.py
Revision: 1.1
Committed: Mon Feb 4 14:22:21 2013 UTC (12 years, 3 months ago) by nmohr
Content type: text/x-python
Branch: MAIN
CVS Tags: lhcp_UnblindFix, hcp_Unblind, lhcp_11April, LHCP_PreAppFixAfterFreeze, LHCP_PreAppFreeze, HEAD
Log Message:
New version of workspace writer

File Contents

# Content
1 import ROOT
2 from copy import copy
3
4 class Rebinner:
5 def __init__(self,nBins,lowedgearray,active=True):
6 self.lowedgearray=lowedgearray
7 self.nBins=nBins
8 self.active=active
9 def rebin(self, histo):
10 if not self.active: return histo
11 #print 'rebinning'
12 #print histo.Integral()
13 ROOT.gDirectory.Delete('hnew')
14 histo.Rebin(self.nBins,'hnew',self.lowedgearray)
15 binhisto=ROOT.gDirectory.Get('hnew')
16 #print binhisto.Integral()
17 newhisto=ROOT.TH1F('new','new',self.nBins,self.lowedgearray[0],self.lowedgearray[-1])
18 newhisto.Sumw2()
19 for bin in range(1,self.nBins+1):
20 newhisto.SetBinContent(bin,binhisto.GetBinContent(bin))
21 newhisto.SetBinError(bin,binhisto.GetBinError(bin))
22 newhisto.SetName(binhisto.GetName())
23 newhisto.SetTitle(binhisto.GetTitle())
24 #print newhisto.Integral()
25 return copy(newhisto)
26
27 @staticmethod
28 def calculate_binning(hDummyRB,max_rel):
29 ErrorR=0
30 ErrorL=0
31 TotR=0
32 TotL=0
33 binR=nBinsRB
34 binL=1
35 rel=1.0
36 #---- from right
37 while rel > 0.35:
38 TotR+=hDummyRB.GetBinContent(binR)
39 ErrorR=sqrt(ErrorR**2+hDummyRB.GetBinError(binR)**2)
40 binR-=1
41 if not TotR == 0 and not ErrorR == 0:
42 rel=ErrorR/TotR
43 #print rel
44 #print 'upper bin is %s'%binR
45
46 #---- from left
47 rel=1.0
48 while rel > 0.35:
49 TotL+=hDummyRB.GetBinContent(binL)
50 ErrorL=sqrt(ErrorL**2+hDummyRB.GetBinError(binL)**2)
51 binL+=1
52 if not TotL == 0 and not ErrorL == 0:
53 rel=ErrorL/TotL
54 #print rel
55 #it's the lower edge
56 binL+=1
57 #print 'lower bin is %s'%binL
58
59 inbetween=binR-binL
60 stepsize=int(inbetween)/(int(nBins)-2)
61 modulo = int(inbetween)%(int(nBins)-2)
62
63 #print'stepsize %s'% stepsize
64 #print 'modulo %s'%modulo
65
66 binlist=[binL]
67 for i in range(0,int(nBins)-3):
68 binlist.append(binlist[-1]+stepsize)
69 binlist[-1]+=modulo
70 binlist.append(binR)
71 binlist.append(nBinsRB+1)
72 return binlist
73