def sumPlotObjects(objs_list, weights=None): res = {} aux = {} if weights is None: weights = [1] * len(objs_list) if len(weights) != len(objs_list): logging.error("Numbers of regions and weights given do not match!") return for objs, w in zip(objs_list, weights): for k, v in objs.iteritems(): if k == "error" or k == "chi2": # meaningless to sum them continue short = getCompName(k) if not short in aux: aux[short] = k # pay attention not to modify the objects we are working with. They might be reused elsewhere. if isinstance(v, TObject): res[k] = v.Clone() if isinstance(v, TGraphAsymmErrors): # data scaleTGraphAsymmErrors(res[k], w) else: res[k].Scale(w) elif k == "prefit": res[k] = [v[0].Clone(), v[1]] res[k][0].Scale(w) else: res[k] = v else: idx = aux[short] if short != k: # that's one standard component res[idx].Add(v, w) elif k == "prefit": res[idx][0].Add(v[0], w) elif k == "data": if w == 1: res[idx] = RooHist(res[idx], v) else: res[idx] = RooHist(res[idx], v, 1, w, RooAbsData.SumW2) return res
def addHists(hist1, hist2): from ROOT import RooHist from math import sqrt newHist = RooHist(hist1) for i in range(0, newHist.GetN()): newHist.SetPoint(i, newHist.GetX()[i], hist1.GetY()[i] + hist2.GetY()[i]) newHist.SetPointError(i, hist1.GetErrorXlow(i), hist1.GetErrorXhigh(i), sqrt(hist1.GetErrorYlow(i)**2 + \ hist2.GetErrorYlow(i)**2), sqrt(hist1.GetErrorYhigh(i)**2 + \ hist2.GetErrorYhigh(i)**2) ) return newHist
def invert_col(pad, fgcol=rt.kOrange - 3, bgcol=rt.kBlack): #set foreground and background color #fgcol = rt.kAzure #fgcol = rt.kGreen #fgcol = rt.kOrange-3 pad.SetFillColor(bgcol) pad.SetFrameLineColor(fgcol) next = TIter(pad.GetListOfPrimitives()) obj = next() while obj != None: #H1 if obj.InheritsFrom(TH1.Class()) == True: if obj.GetLineColor() == rt.kBlack: obj.SetLineColor(fgcol) obj.SetFillColor(bgcol) if obj.GetMarkerColor() == rt.kBlack: obj.SetMarkerColor(fgcol) obj.SetAxisColor(fgcol, "X") obj.SetAxisColor(fgcol, "Y") obj.SetLabelColor(fgcol, "X") obj.SetLabelColor(fgcol, "Y") obj.GetXaxis().SetTitleColor(fgcol) obj.GetYaxis().SetTitleColor(fgcol) #Legend if obj.InheritsFrom(TLegend.Class()) == True: obj.SetTextColor(fgcol) #obj.SetFillStyle(1000) #obj.SetFillColor(fgcol) #obj.SetTextColor(bgcol) #ln = TIter(obj.GetListOfPrimitives()) #lo = ln.Next() #while lo != None: #if lo.GetObject() == None: #lo = ln.Next() #continue #if lo.GetObject().InheritsFrom(TH1.Class()) == True: #hx = lo.GetObject() #hx.SetFillColor(bgcol) #if hx.GetMarkerColor() == rt.kBlack: #hx.SetMarkerColor(fgcol) #hx.SetLineColor(fgcol) #pass #lo = ln.Next() #RooHist if obj.InheritsFrom(RooHist.Class()) == True: if obj.GetMarkerColor() == rt.kBlack: obj.SetLineColor(fgcol) obj.SetMarkerColor(fgcol) #H2 if obj.InheritsFrom(TH2.Class()) == True: obj.SetAxisColor(fgcol, "Z") obj.SetLabelColor(fgcol, "Z") obj.GetZaxis().SetTitleColor(fgcol) #obj.SetLineColor(fgcol) #obj.SetMarkerColor(fgcol) #TLatex if obj.InheritsFrom(TLatex.Class()) == True: if obj.GetTextColor() == rt.kBlack: obj.SetTextColor(fgcol) #F2 if obj.InheritsFrom(TF2.Class()) == True: axes = [obj.GetXaxis(), obj.GetYaxis(), obj.GetZaxis()] for i in range(len(axes)): axes[i].SetAxisColor(fgcol) axes[i].SetLabelColor(fgcol) axes[i].SetTitleColor(fgcol) #F1 if obj.InheritsFrom(TF1.Class()) == True: axes = [obj.GetXaxis(), obj.GetYaxis()] for i in range(len(axes)): axes[i].SetAxisColor(fgcol) axes[i].SetLabelColor(fgcol) axes[i].SetTitleColor(fgcol) #TGraph if obj.InheritsFrom(TGraph.Class()) == True: obj.SetFillColor(bgcol) ax = obj.GetXaxis() ay = obj.GetYaxis() ax.SetAxisColor(fgcol) ay.SetAxisColor(fgcol) ax.SetLabelColor(fgcol) ay.SetLabelColor(fgcol) ax.SetTitleColor(fgcol) ay.SetTitleColor(fgcol) if obj.GetLineColor() == rt.kBlack: obj.SetLineColor(fgcol) obj.SetMarkerColor(fgcol) #TGaxis if obj.InheritsFrom(TGaxis.Class()) == True: obj.SetLineColor(fgcol) obj.SetLabelColor(fgcol) obj.SetTitleColor(fgcol) #TFrame if obj.InheritsFrom(TFrame.Class()) == True: if obj.GetLineColor() == rt.kBlack: obj.SetLineColor(fgcol) obj.SetFillColor(bgcol) #move to next item obj = next()
fit2.__class__ = ROOT.RooCurve turnon2 = TurnOnPlot.TurnOn(Name="Stage2", Histo=histo2, MarkerColor=ROOT.kRed, MarkerStyle=20, LineColor=ROOT.kRed, LineStyle=1, Legend="New pedestals") plots[0].addTurnOn(turnon) plots[0].addTurnOn(turnon2) #Plot the difference: diffcurve = RooCurve("diff", "diff", fit, fit2, 1, -1) diffhist = RooHist(histo, histo2, 1, -1, RooAbsData.SumW2) turnondiff = TurnOnPlot.TurnOn(Name="Stage2", Histo=diffhist, Fit=diffcurve, MarkerColor=ROOT.kBlack, MarkerStyle=20, LineColor=ROOT.kBlue, LineStyle=1, Legend="Data-New_pedestals") plots[1].addTurnOn(turnondiff) canvas = [] for plot in plots: canvas.append(plot.plot())
oldDataHist.Draw() theData.Draw("pz") gPad.Update() gPad.WaitPrimitive() oldDataHist = templateMorph.scaleUnwidth(oldDataHist) oldDataHist.Print() bgHist = TH1D(SignalHist) bgHist.Reset('ices') bgHist.SetName(theData.GetName()) bgHist.SetTitle(theData.GetTitle()) bgHist = curveToHist(bgCurve, bgHist, debug=opts.debug) tmpData = RooHist(bgHist, 0, 1, RooAbsData.SumW2) tmpHist = TH1D(bgHist) # if opts.debug: # print 'drawing toy data bg residuals before signal addition...' # resid = tmpData.makeResidHist(bfile.Get('h_total')) # resid.Draw('apz') # gPad.Update() # gPad.WaitPrimitive() bgHist = templateMorph.scaleUnwidth(bgHist) print 'background only' bgHist.Print() bgHist.Add(SignalHist)