cBins = [] for b in cBinsStr: cBins.append(float(b)) axis = ROOT.TAxis(len(cBins) - 1, array('d', cBins)) graph = {'scale': ROOT.TGraphErrors(), 'sigma': ROOT.TGraphErrors()} #dataset = data.makeDataSet(options.genvar,options.genCut,-1) for i in range(1, axis.GetNbins() + 1): cBinLo = axis.GetBinLowEdge(i) cBinHi = axis.GetBinUpEdge(i) cBinCenter = axis.GetBinCenter(i) dataset = data.makeDataSet( options.genvar, options.genCut + '*({cvar}>{lo}&&{cvar}<={hi})'.format( cvar=options.condVar, lo=cBinLo - 100, hi=cBinHi + 100), -1) histo = data.drawTH1( options.var, options.cut + '*({cvar}>{lo}&&{cvar}<={hi})'.format( cvar=options.condVar, lo=cBinLo, hi=cBinHi), "1", options.bins, options.mini, options.maxi) fitter = Fitter([options.var]) fitter.importBinnedData(histo, [options.var], 'data') fitter.gaussianSum('model', options.var, dataset, options.genvar) fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(1)]) chi = fitter.projection("model", "data", options.var, "debugPlot_" + str(i) + "_" + options.output, 'x') print i, 'Chi2', chi for nuis in ['scale', 'sigma']: v, vErr = fitter.fetch(nuis) graph[nuis].SetPoint(i, cBinCenter, v)
if options.data == 0 or options.data == 2: dataPlotters[-1].setupFromFile(args[0] + '/' + fname + '.pck') dataPlotters[-1].addCorrectionFactor('xsec', 'tree') dataPlotters[-1].addCorrectionFactor('genWeight', 'tree') dataPlotters[-1].addCorrectionFactor('puWeight', 'tree') if options.data == 2: sigmas = [] for d in dataPlotters: sigmas.append(d.tree.GetMaximum("xsec") / d.weightinv) sigmaW = max(sigmas) for p in dataPlotters: p.addCorrectionFactor(1.0 / sigmaW, 'flat') parameterization = {} data = MergedPlotter(dataPlotters) dataset = data.makeDataSet(options.genvar, options.genCut, -1) histo = data.drawTH1(options.var, options.cut, "1", options.bins, options.mini, options.maxi) fitter = Fitter([options.var]) fitter.importBinnedData(histo, [options.var], 'data') fitter.gaussianSum('model', options.var, dataset, options.genvar) fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(1)]) chi = fitter.projection("model", "data", options.var, "debugPlot_" + options.output + ".root", 'x') print 'Chi2', chi print 'make systematics' meanDefault = fitter.w.var("scale").getVal() sigmaDefault = fitter.w.var("sigma").getVal() f2 = ROOT.TFile(options.output, "RECREATE")