# result.SetBinContent(ibin, 0.) result.SetBinError(ibin, 1.e+6) ibin += 1 xmin = result.GetXaxis().GetXmin() xmax = result.GetXaxis().GetXmax() power = ROOT.TF1('power', '[0] + [1] * TMath::Power(x - [2], [3])', xmin, xmax) power.SetParameters(0.01, 1., 10., -1.) power.SetParLimits(0, 0.005, 0.03) power.SetParLimits(1, 0.01, 3.) power.SetParLimits(2, -500., 500.) power.SetParLimits(3, -5., 0.) result.Fit(power) canvas.addObject(power) outputFile.cd() power.Write(PRODUCT + '_fit') text = 'f = %.4f + %.3f#times(p_{T} ' % (power.GetParameter(0), power.GetParameter(1)) if power.GetParameter(2) >= 0.: text += ' - ' else: text += ' + ' text += '%.2f)^{%.2f}' % (abs( power.GetParameter(2)), power.GetParameter(3)) canvas.addText(text, 0.4, 0.15, 0.6, 0.2)
canvas.legend.add('sf_truth', 'MC truth', opt = 'LP', color = ROOT.kGreen, mstyle = 4) canvas.ylimits = (0.9, 1.10) canvas.legend.apply('sf_truth', sfTruth) canvas.addHistogram(sfTruth, drawOpt = 'EP') canvas.legend.apply('sf', scaleFactor) canvas.addHistogram(scaleFactor, drawOpt = 'EP') if ADDFIT: flat = ROOT.TF1('flat', '[0]', scaleFactor.GetXaxis().GetXmin(), scaleFactor.GetXaxis().GetXmax()) flat.SetParameter(0, 1.) flat.SetParLimits(0, 0.95, 1.05) sfTruth.Fit(flat) canvas.addObject(flat) linear = ROOT.TF1('linear', '[0] + [1] * x', scaleFactor.GetXaxis().GetXmin(), scaleFactor.GetXaxis().GetXmax()) linear.SetParameters(1., 0.01) linear.SetParLimits(0, 0.95, 1.05) linear.SetParLimits(1, -0.0001, 0.0001) sfTruth.Fit(linear) canvas.addObject(linear) text = 'flat = %.3f #pm %.3f' % (flat.GetParameter(0), flat.GetParError(0)) canvas.addText(text, 0.3, 0.25, 0.5, 0.2) text = 'line = %.6f + %.6f * p_{T}' % (linear.GetParameter(0), linear.GetParameter(1)) canvas.addText(text, 0.3, 0.35, 0.5, 0.25)
canvas.legend.apply('sf', scaleFactor) canvas.addHistogram(scaleFactor, drawOpt = 'EP') if ADDFIT: power = ROOT.TF1('power', '[0] + [1] / (x - [2])', scaleFactor.GetXaxis().GetXmin(), scaleFactor.GetXaxis().GetXmax()) power.SetParameters(0.02, 1., 0.) power.SetParLimits(2, -175., 10000.) quad = ROOT.TF1('quad', '[0] + [1] * x + [2] * x**2', scaleFactor.GetXaxis().GetXmin(), scaleFactor.GetXaxis().GetXmax()) quad.SetParameters(1., 0.001, 0.00001) function = quad scaleFactor.Fit(function) canvas.addObject(function) """ text = 'f = %.4f + #frac{%.3f}{p_{T}' % (function.GetParameter(0), function.GetParameter(1)) if function.GetParameter(2) >= 0.: text += ' - %.2f}' % function.GetParameter(2) else: text += ' + %.2f}' % (-function.GetParameter(2)) """ text = 'f = %.4f + %.4f * p_{T} + %.4f * p_{T}^{2}' % (function.GetParameter(0), function.GetParameter(1), function.GetParameter(2)) canvas.addText(text, 0.3, 0.3, 0.5, 0.2) canvas.xtitle = binningTitle canvas.printWeb(outputName, 'scaleFactor_' + binningName, logy = False)