import numpy from math import sqrt from ROOT import * #ROOT .Add method is buggy def add_histos(h1,h2,a): hdiff = h1.Clone() hdiff.Reset() nx, ny = h1.GetNbinsX(), h1.GetNbinsY() for ibx in range(nx): for iby in range(ny): c = (h1.GetBinContent(ibx,iby) +float(a)*h2.GetBinContent(ibx,iby)) hdiff.SetBinContent(ibx,iby,c) return hdiff.Clone() #returns a histogram for only the fiducial def fid_only(h1,fid,pcut_min=22.999,pcut_max=27.001): h2 = h1.Clone() h2.Reset() nx, ny = h1.GetNbinsX(), h1.GetNbinsY() for ibx in range(nx): p = h1.GetXaxis().GetBinCenter(ibx) # p = h1.GetXaxis().GetBinCenter(ibx+1) # p = h1.GetXaxis().GetBinCenter(ibx-1) if pcut_min < p < pcut_max: continue for iby in range(ny): ct = h1.GetYaxis().GetBinCenter(iby) # ct = h1.GetYaxis().GetBinCenter(iby+1) # ct = h1.GetYaxis().GetBinCenter(iby-1) if in_fid(p,ct,fid): h2.SetBinContent(ibx,iby,h1.GetBinContent(ibx,iby)) return h2.Clone() #make simple histogram of inefficiencies def simple_histo(h1): h = TH1D('simple','simple',100,0,0.01) h.GetXaxis().SetNdivisions(505) for ibx in range(h1.GetNbinsX()): for iby in range(h1.GetNbinsY()): c = h1.GetBinContent(ibx,iby) if 0.