def plot_response(histos,profiles,profiles_noReg,profiles_Cat,style=False,outString=None): if style==True: gROOT.SetBatch(True) gROOT.ProcessLineSync(".x /mnt/t3nfs01/data01/shome/nchernya/HHbbgg_ETH_devel/scripts/setTDRStyle.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) c = ROOT.TCanvas("c","c",900,900) c.cd() histos.Draw("HISTBOX") colors=[ROOT.kRed,ROOT.kOrange-3,ROOT.kAzure+10] profiles.SetLineColor(colors[0]) profiles.SetLineWidth(3) profiles.SetMarkerColor(colors[0]) profiles.SetStats(0) profiles.Draw("PLsame") profiles_noReg.SetLineColor(colors[1]) profiles_noReg.SetLineWidth(3) profiles_noReg.SetMarkerColor(colors[1]) profiles_noReg.SetStats(0) profiles_noReg.Draw("PLsame") profiles_Cat.SetLineColor(colors[2]) profiles_Cat.SetLineWidth(3) profiles_Cat.SetMarkerColor(colors[2]) profiles_Cat.SetStats(0) profiles_Cat.Draw("PLsame") line = ROOT.TLine(histos.GetXaxis().GetBinCenter(0),1,histos.GetXaxis().GetBinCenter(histos.GetXaxis().GetNbins()),1) line.SetLineStyle(9) line.SetLineWidth(3) line.SetLineColor(ROOT.kGreen+1) line.Draw("Lsame") leg = ROOT.TLegend(0.72,0.75,0.95,0.9) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.03) leg.AddEntry(profiles,"XGboost","PL") leg.AddEntry(profiles_noReg,"no regression","PL") leg.AddEntry(profiles_Cat,"HIG-16-044","PL") leg.Draw("same") c.SaveAs(utils.IO.plotFolder+"Response_"+histos.GetTitle()+'_'+str(outString)+'.png') c.SaveAs(utils.IO.plotFolder+"Response_"+histos.GetTitle()+'_'+str(outString)+'.pdf')
return item[1] dy = sys.argv[1] dy_choice = '' dy_model = '' if dy == 'amc': dy_model = 'AMC@NLO' dy_choice = "amc_" if dy == 'mdg': dy_model = 'Madgraph' dy_choice = "HT_" gROOT.SetBatch(True) gROOT.ProcessLineSync(".x /afs/cern.ch/work/n/nchernya/Hbb/setTDRStyle.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) path = "dcap://t3se01.psi.ch:22125//pnfs/psi.ch/cms/trivcat//store/user/nchernya/VBFZll/plotterOutput/v25/" end = "_QCDScalenom_JESnom_v25_bdt_alldata.root" list_nom_data = [] list_denom_data = [] list_nom_dy = [] list_denom_dy = [] list_nom_ewk = [] list_denom_ewk = [] list_nom_ewk_herwig = []
from Merge_DS import Merged_WS import ROOT from ROOT import TFile, TCanvas from ROOT import RooRealVar, RooDataSet, RooWorkspace from ROOT import RooFit, RooDataHist, RooAddPdf, RooArgList, RooKeysPdf, RooHistPdf, RooArgSet, RooAbsData from ROOT import gROOT from datetime import datetime gROOT.ProcessLineSync('.L functions/Johnson.cxx+') gROOT.ProcessLineSync('.L functions/Background.cxx+') from configs.cuts import preselection_cut as offline_cut """ This is simple script to perform combinatorial subtraction from log IPCHI2 distribution. Idea is sraight-forward: - Fit mass distribution (here, we use three gaussians for signal and generic shape for the Background) - Estimate number of combinatorials in signal region - Reweight candidates from background region with negative weights to correct this """ def Subtract_Distribution(dataset, DTF_D0sPi_M, LOG_D0_IPCHI2_OWNPV, bin = "undefined", silent = False): dataset_sig = RooDataSet("dataset_sig", "Signal region",dataset, RooArgSet(DTF_D0sPi_M, LOG_D0_IPCHI2_OWNPV) ," ( DTF_D0sPi_M < 2015 ) ") dataset_bckg = RooDataSet("dataset_bckg", "Background region",dataset, RooArgSet(DTF_D0sPi_M, LOG_D0_IPCHI2_OWNPV) ," ( DTF_D0sPi_M > 2015 ) && ( DTF_D0sPi_M < 2020 ) ") #Introduce fit variables ## Johnson parameters J_mu = RooRealVar("J_mu","J_mu", 2011, 2000, 2020) J_sigma = RooRealVar("J_sigma","J_sigma", 0.045, 0.01, 0.1) J_delta = RooRealVar("J_delta","J_delta", 0., -1, 1) J_gamma = RooRealVar("J_gamma","J_gamma", 0., -1, 1) ## Gaussian parameters
num] + '>>' + profile_name draw_line_profile_noReg = 'Jet_mcPt/Jet_pt:' + features[ num] + '>>' + profile_name_noReg draw_line_profile_Cat = 'Jet_mcPt/Jet_pt_regNew:' + features[ num] + '>>' + profile_name_Cat tree.Draw(draw_line, cuts) tree.Draw(draw_line_profile, cuts) tree.Draw(draw_line_profile_noReg, cuts) tree.Draw(draw_line_profile_Cat, cuts) # In[4]: import plotting_utils as plotting reload(plotting) gROOT.SetBatch(True) gROOT.ProcessLineSync( ".x /mnt/t3nfs01/data01/shome/nchernya/HHbbgg_ETH_devel/scripts/setTDRStyle.C" ) gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) for i in range(0, len(features)): plotting.plot_response(histograms[i], profiles[i], profiles_noReg[i], profiles_Cat[i], False) # In[ ]:
def rooFit104(): print ">>> RooClassFactory::makePdf - write class (\"MyPdfV1\") skeleton code..." # Write skeleton p.d.f class with variable x,a,b # To use this class, # - Edit the file MyPdfV1.cxx and implement the evaluate() method in terms of x,a and b # - Compile and link class with '.x MyPdfV1.cxx+' RooClassFactory.makePdf("MyPdfV1", "x,A,B") print ">>> write class (\"MyPdfV2\") with added initial value expression..." # Write skeleton pdf class with variable x,a,b and given formula expression # To use this class, # - Compile and link class with '.x MyPdfV2.cxx+' RooClassFactory.makePdf("MyPdfV2", "x,A,B", "", "A*fabs(x)+pow(x-B,2)") print ">>> write class (\"MyPdfV3\") with added analytical integral expression..." # Write skeleton p.d.f class with variable x,a,b, given formula expression _and_ # given expression for analytical integral over x # To use this class, # - Compile and link class with '.x MyPdfV3.cxx+' RooClassFactory.makePdf( "MyPdfV3", "x,A,B", "", "A*fabs(x)+pow(x-B,2)", kTRUE, kFALSE, "x:(A/2)*(pow(x.max(rangeName),2)+pow(x.min(rangeName),2))+(1./3)*(pow(x.max(rangeName)-B,3)-pow(x.min(rangeName)-B,3))" ) print ">>> compile and load \"MyPdfV3\" class..." gROOT.ProcessLineSync(".x MyPdfV3.cxx+") #MyPdfV3 = gROOT.LoadClass("MyPdfV3.cxx+") # TClass #print ">>> type(%s) = %s" % ("MyPdfV3",type(MyPdfV3)) from ROOT import MyPdfV3 print ">>> generate and fit data with \"MyPdfV3\" class...\n" a = RooRealVar("a", "a", 1) b = RooRealVar("b", "b", 2, -10, 10) x = RooRealVar("x", "x", -10, 10) pdf = MyPdfV3("pdf", "pdf", x, a, b) frame1 = x.frame(Title("Compiled class MyPdfV3")) # RooPlot data = pdf.generate(RooArgSet(x), 1000) # RooDataSet pdf.fitTo(data) data.plotOn(frame1, Binning(40)) pdf.plotOn(frame1) print "\n>>> RooClassFactory::makePdfInstance - generate a pdf instance directly..." # The RooClassFactory::makePdfInstance() function performs code writing, compiling, linking # and object instantiation in one go and can serve as a straight replacement of RooGenericPdf y = RooRealVar("y", "y", -20, 20) alpha = RooRealVar("alpha", "alpha", 5, 0.1, 10) genpdf = RooClassFactory.makePdfInstance( "GenPdf", "(1+0.1*fabs(y)+sin(sqrt(fabs(y*alpha+0.1))))", RooArgList(y, alpha)) # RooAbsPdf print ">>> generate and fit data with pdf instance...\n" data2 = genpdf.generate(RooArgSet(y), 10000) # RooDataSet genpdf.fitTo(data2) frame2 = y.frame(Title("Compiled version of pdf of rf103")) # RooPlot data2.plotOn(frame2, Binning(50)) genpdf.plotOn(frame2) print "\n>>> draw pdfs and fits on canvas..." canvas = TCanvas("canvas", "canvas", 100, 100, 1400, 600) canvas.Divide(2) canvas.cd(1) gPad.SetLeftMargin(0.15) gPad.SetRightMargin(0.02) frame1.GetYaxis().SetLabelOffset(0.008) frame1.GetYaxis().SetTitleOffset(1.6) frame1.GetYaxis().SetTitleSize(0.045) frame1.GetXaxis().SetTitleSize(0.045) frame1.Draw() canvas.cd(2) gPad.SetLeftMargin(0.15) gPad.SetRightMargin(0.02) frame2.GetYaxis().SetLabelOffset(0.008) frame2.GetYaxis().SetTitleOffset(1.6) frame2.GetYaxis().SetTitleSize(0.045) frame2.GetXaxis().SetTitleSize(0.045) frame2.Draw() canvas.SaveAs("rooFit104.png")
def makeNominals(self, sampleName, sample, inFiles, outFile, variables, columns, definitions, cuts, supercut, nuisances): print "====================" print "=== makeNominals ===" print "====================" gROOT.SetBatch() # only one sample dilivered for now self._inFiles = inFiles self._variables = variables self._cuts = cuts self._definitions = definitions #print 'ShapeFactory:sample',self._sample #print 'ShapeFactory:inFiles',self._inFiles #print 'ShapeFactory:outFile',self._outFile #print 'ShapeFactory:variables',self._variables #print 'ShapeFactory:cuts',self._cuts print 'ShapeFactory:supercut', supercut #in case some variables need a compiled function for variableName, variable in self._variables.iteritems(): if variable.has_key('linesToAdd'): linesToAdd = variable['linesToAdd'] for line in linesToAdd: gROOT.ProcessLineSync(line) TH1D.SetDefaultSumw2(True) self.outFile = TFile(outFile, 'recreate') #print 'ShapeFactory',self._treeName #chain = TChain(self._treeName) # skipMissingFiles inputDir = '' trees = self._connectInputs(inFiles, inputDir, False) for cutName, cut in self._cuts.iteritems(): totCut = cut + "&&" + supercut print 'cut', cutName, '::', cut self.outFile.mkdir(cutName) for variableName, variable in variables.iteritems(): self.outFile.mkdir(cutName + "/" + variableName) self.outFile.cd(cutName + "/" + variableName) print variableName print 'variable[name]', variable['name'] print 'variable[range]', variable['range'][0], ':', variable[ 'range'][1], ':', variable['range'][2] doFold = 0 if 'fold' in variable.keys(): print " variable[fold] = ", variable['fold'] doFold = variable['fold'] # create histogram if 'weights' in sample.keys(): outputsHisto = self._draw( variable['name'], variable['range'], sample['weight'], sample['weights'], totCut, sampleName, trees, columns, doFold, cutName, variableName, sample, True) else: outputsHisto = self._draw(variable['name'], variable['range'], sample['weight'], [], totCut, sampleName, trees, columns, doFold, cutName, variableName, sample, True) outputsHisto.Write() # weight based nuisances: kind = weight for nuisanceName, nuisance in nuisances.iteritems(): if ('cuts' not in nuisance) or ( ('cuts' in nuisance) and (cutName in nuisance['cuts'])): if 'kind' in nuisance: if nuisance['kind'] == 'weight': for sampleNuisName, configurationNuis in nuisance[ 'samples'].iteritems(): if sampleNuisName == sampleName: newSampleNameUp = sampleName + '_' + nuisance[ 'name'] + 'Up' newSampleNameDo = sampleName + '_' + nuisance[ 'name'] + 'Down' # the first weight is "up", the second is "down" newSampleWeightUp = sample[ 'weight'] + '* (' + configurationNuis[ 0] + ")" newSampleWeightDo = sample[ 'weight'] + '* (' + configurationNuis[ 1] + ")" if 'weights' in sample.keys(): outputsHistoUp = self._draw( variable['name'], variable['range'], newSampleWeightUp, sample['weights'], totCut, newSampleNameUp, trees, columns, doFold, cutName, variableName, sample, False) outputsHistoDo = self._draw( variable['name'], variable['range'], newSampleWeightDo, sample['weights'], totCut, newSampleNameDo, trees, columns, doFold, cutName, variableName, sample, False) else: #print 'newSampleWeightUp', newSampleWeightUp outputsHistoUp = self._draw( variable['name'], variable['range'], newSampleWeightUp, [], totCut, newSampleNameUp, trees, columns, doFold, cutName, variableName, sample, False) outputsHistoDo = self._draw( variable['name'], variable['range'], newSampleWeightDo, [], totCut, newSampleNameDo, trees, columns, doFold, cutName, variableName, sample, False) outputsHistoUp.Write() outputsHistoDo.Write() elif nuisance['kind'] == 'PDF': for sampleNuisName, configurationNuis in nuisance[ 'samples'].iteritems(): if sampleNuisName == sampleName: newSampleName = sampleName + '_' + nuisance[ 'name'] if 'weights' in sample.keys(): histoList = self._drawPDF( nuisance['type'], configurationNuis[0], variable['name'], variable['range'], sample['weight'], sample['weights'], totCut, newSampleName, trees, columns, doFold, cutName, variableName, sample, False) else: #print 'newSampleWeightUp', newSampleWeightUp histoList = self._drawPDF( nuisance['type'], configurationNuis[0], variable['name'], variable['range'], sample['weight'], [], totCut, newSampleName, trees, columns, doFold, cutName, variableName, sample, False) print 'length of histoList', len( histoList) for ahist in histoList: #print 'writing ahist' ahist.Write() #outputsHistoUp.Write() #outputsHistoDo.Write() self.outFile.Close() print 'FINISHED'
import ROOT from ROOT import gROOT from ROOT import gStyle import sys #end=sys.argv[1] gROOT.SetBatch(True) gROOT.ProcessLineSync(".x styleCMSTDR.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) f = ROOT.TFile.Open( "/afs/cern.ch/work/l/lata/VBF_Analysis/CMSSW_7_4_7/src/VBFHbb2016/VBF_combine/toolkit/src/case0/datacards/higgsCombinedatacard_scan_cat7.MultiDimFit.mH125.root" ) tree = f.Get("limit") gr = ROOT.TGraph() for entry in range(1, tree.GetEntries()): tree.GetEntry(entry) gr.SetPoint(entry, tree.r, 2 * tree.deltaNLL) print tree.r, 2 * tree.deltaNLL gr.SetLineColor(1) gr.GetYaxis().SetTitle("-2 #Delta ln L") ymax = 10 gr.GetYaxis().SetRangeUser(0., ymax) xmin = 0 xmax = 2 #xmin=-4
def fit_quantiles(X_region,names,style=True,n_bins=100,pol='Pol',outString=None): if style==True: gROOT.SetBatch(True) gROOT.ProcessLineSync(".x /mnt/t3nfs01/data01/shome/nchernya/HHbbgg_ETH_devel/scripts/setTDRStyle.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) h_names = [ 'region'+str(t) for t in range(0,len(X_region))] c_min=0 c_max=2. hist_list=[] func_list=[] max_list=[] datahists=[] graphs=[] func=[] colors=[ROOT.kBlue+1,ROOT.kAzure+5,ROOT.kCyan-1, ROOT.kGreen, ROOT.kSpring+8, ROOT.kOrange] # nqx=3 # taus = array('d',[0.25, 0.5, 0.75]) # nqx=5 # taus = array('d',[0.5-0.68/2,0.3, 0.5, 0.7, 0.5+0.68/2.]) # nqx=4 # taus = array('d',[0.5-0.68/2,0.3, 0.5, 0.8]) # nqx=4 # taus = array('d',[0.5-0.68/2,0.4, 0.5, 0.8]) # nqx=4 # taus = array('d',[0.10,0.16, 0.2, 0.7]) # nqx=4 # taus = array('d',[0.10,0.16, 0.4, 0.7]) # nqx=5 # taus = array('d',[0.10,0.16, 0.4, 0.6, 0.8]) # nqx=5 # taus = array('d',[0.10,0.20, 0.4, 0.6, 0.8]) nqx=4 taus = array('d',[0.10,0.20, 0.4, 0.7]) # the best taus_fit = array('d',[x-taus[0] for x in taus ]) quantiles_pos=[] x0_hist=[] x0_CDFfit=[] for j in range(len(X_region)): h=h_names[j] data =((X_region[j]).as_matrix()).ravel() # print len(data) h_rel_diff = TH1F("hrel_diff_%s"%h_names[j], "hrel_diff_%s"%h_names[j], n_bins, c_min, c_max) h_rel_diff.Sumw2(True) for i in range(len(data)): h_rel_diff.Fill(data[i]) h_rel_diff.Scale(1./h_rel_diff.Integral()) h_rel_diff.SetLineColor(colors[j]) h_rel_diff.SetMarkerColor(colors[j]) h_rel_diff.SetLineWidth(2) h_rel_diff.SetLineStyle(1+j) h_rel_diff.SetMarkerStyle(20+j) datahists.append(h_rel_diff) quantiles_x = array('d', [0 for x in range(0, nqx)]) h_rel_diff.GetQuantiles( nqx,quantiles_x, taus ) quantiles_pos.append(quantiles_x) max_list.append(h_rel_diff.GetMaximum()*1.3) x0_hist.append(h_rel_diff.GetBinCenter(h_rel_diff.GetMaximumBin())) gr = TGraph(nqx,quantiles_x,taus_fit); gr.SetLineColor(colors[j]) gr.SetMarkerColor(colors[j]) gr.SetMarkerStyle(20+j) graphs.append(gr) # fit_cdf = TF1("fit_%s"%h, myCDF, 0., 2., 4) # fit_cdf = TF1("fit_%s"%h, myCDF,quantiles_x[0]*0.98,quantiles_x[4]*1.02,4) # fit_cdf = TF1("fit_%s"%h, myErFuncCdf,quantiles_x[0]*0.98,quantiles_x[3]*1.02,4) # fit_cdf = TF1("fit_%s"%h,"pol3",quantiles_x[0]*0.98,quantiles_x[nqx-1]*1.02) #final with pol3 fit_cdf = TF1("fit_%s"%h,"pol3",quantiles_x[0]*0.98,quantiles_x[nqx-1]*1.02) #final with pol3 # fit_cdf.FixParameter(1,quantiles_x[0] ) #q1 # fit_cdf.FixParameter(2,quantiles_x[2] ) #q3 # fit_cdf.SetParameter(0,1. ) #x0 # fit_cdf.SetParameter(4,3. ) #const # fit_cdf.SetParLimits(4,0.,10 ) #const # fit_cdf.SetParLimits(0, 0.5, 1.5) fit_cdf.SetLineColor(colors[j]) gr.Fit("fit_%s"%h,"R") func.append(fit_cdf) # pol_coeff = [6*fit_cdf.GetParameter(4), 3*fit_cdf.GetParameter(3),fit_cdf.GetParameter(2)] # for pol4 only # pol_roots = np.roots(pol_coeff) # pol_roots_diff = [x - x0_hist[j] for x in pol_roots] # x0_CDFfit.append(pol_roots[min(xrange(len(pol_roots_diff)), key=pol_roots_diff.__getitem__)]) # x0_CDFfit.append(-1*fit_cdf.GetParameter(2)/3/fit_cdf.GetParameter(3)) #for pol3 only x0_CDFfit.append(fit_cdf.GetParameter(0)) #for erFunc c = TCanvas("canv","canv",1600,800) c.Divide(2,1) c.cd(1) frame = TH1F("hframe", "", n_bins, c_min, c_max) frame.SetStats(0) frame.GetXaxis().SetTitleOffset(0.91); frame.GetYaxis().SetTitle("Events") frame.GetXaxis().SetTitle("p_{T}^{gen}/p_{T}^{reco}") frame.GetYaxis().SetLabelSize(0.04) leg = ROOT.TLegend(0.12,0.75,0.6,0.9) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.025) frame.GetYaxis().SetRangeUser(0.,max(max_list)) frame.Draw() for j in range(len(X_region)): datahists[j].Draw("PEsame") leg.AddEntry(datahists[j],names[j] ,"PE") leg.Draw('same') c.cd(2) right,top = gStyle.GetPadRightMargin(),gStyle.GetPadTopMargin() left,bottom = gStyle.GetPadLeftMargin(),gStyle.GetPadBottomMargin() ci = ROOT.TColor.GetColor("#ffffff") # frame2 = TH1F("hframe2", "", n_bins, 0.9, 1.25) frame2 = TH1F("hframe2", "", n_bins, 0.7, 1.4) frame2.SetStats(0) frame2.GetXaxis().SetTitleOffset(0.91); frame2.GetYaxis().SetTitle("#tau - #tau_{1}") frame2.GetXaxis().SetTitle("Quantiles positions") frame2.GetYaxis().SetLabelSize(0.04) frame2.GetYaxis().SetRangeUser(-0.05,max(taus_fit)*1.1) frame2.Draw() paveText2 = ROOT.TPaveText(0.6,0.25,0.9,.4,"NDC") paveText2.SetTextFont(42) paveText2.SetTextSize(top*0.43) paveText2.SetFillStyle(-1) paveText2.SetBorderSize(0) for j in range(len(X_region)): graphs[j].Draw("PEsame") func[j].Draw("sameR") t = paveText2.AddText("x0 hist/fit : %.2f/%.2f"%(x0_hist[j],x0_CDFfit[j])) print("%.2f"%x0_CDFfit[j]) t.SetTextColor(colors[j]); leg.Draw('same') # paveText = ROOT.TPaveText(0.7,0.85,0.9,.9,"NDC") paveText = ROOT.TPaveText(0.75,0.65,0.95,.9,"NDC") paveText.SetTextFont(42) paveText.SetTextColor(ROOT.kBlue) paveText.SetTextSize(top*0.43) paveText.SetFillStyle(-1) paveText.SetBorderSize(0) paveText.AddText("%s Fit"%pol) paveText.AddText("Quantiles : ") for x in taus : paveText.AddText("%.2f"%x) paveText.Draw("same") paveText2.Draw("same") # print x0_hist, x0_CDFfit line = ROOT.TLine(x0_hist[0],frame2.GetMinimum() ,x0_hist[0],frame2.GetMaximum()) line.SetLineStyle(9) line.SetLineWidth(2) line.SetLineColor(ROOT.kRed+1) line.Draw("Lsame") c.SaveAs(utils.IO.plotFolder+"quantiles_"+str(outString)+str(pol)+'.png') c.SaveAs(utils.IO.plotFolder+"quantiles_"+str(outString)+str(pol)+'.pdf')
def plot_regions(X_region,names,style=True,n_bins=50,outString=None,log=False,title='',titleName=''): if style==True: gROOT.SetBatch(True) gROOT.ProcessLineSync(".x ~/HHbbgg_ETH/scripts/setTDRStyle.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) h_names = [ 'region'+str(t) for t in range(0,len(X_region))] c_min=0 c_max=2. if log : c_max=4. c = TCanvas("canv","canv",900,900) c.cd() frame = TH1F("hframe", "hframe", n_bins, c_min, c_max) frame.SetStats(0) frame.GetXaxis().SetTitleOffset(0.91); frame.GetYaxis().SetTitle("Events") frame.GetXaxis().SetTitle("p_{T}^{gen}/p_{T}^{reco}") frame.GetYaxis().SetLabelSize(0.04) leg = ROOT.TLegend(0.12,0.75,0.6,0.9) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.025) if titleName!='' : leg.AddEntry(frame,titleName,"") if title!='' : leg.AddEntry(frame,title,"") hist_list=[] func_list=[] max_list=[] x=[] datahist=[] datahists=[] meanr, sigmaL, sigmaR, alphaL, alphaR = [],[],[],[],[] Ap,Xp,sigp,xi,rho1,rho2 = [],[],[],[],[],[] meanv, widthv, sigmav = [] , [] , [] Xp_initial,sigp_initial,xi_initial,rho1_initial,rho2_initial = 9.8545e-01, 1.3118e-01,2.2695e-01, 6.4189e-02, 9.0282e-02 fsig=[] sig=[] model=[] res=[] integral=[] formula=[] scale_factors=[] scaled=[] func=[] colors=[ROOT.kBlue+1,ROOT.kAzure+5,ROOT.kCyan-1, ROOT.kGreen, ROOT.kSpring+8, ROOT.kOrange, ROOT.kPink+10] for j in range(len(X_region)): if isinstance(X_region[j], np.ndarray) : data = X_region[j] else : data =((X_region[j]).as_matrix()).ravel() # print len(data) h_rel_diff = TH1F("hrel_diff_%s"%h_names[j], "hrel_diff_%s"%h_names[j], n_bins, c_min, c_max) h_rel_diff.Sumw2(ROOT.kTRUE) for i in range(len(data)): h_rel_diff.Fill(data[i]) # h_rel_diff.Scale(1./h_rel_diff.Integral()) h_rel_diff.SetLineColor(colors[j]) h_rel_diff.SetMarkerColor(colors[j]) h_rel_diff.SetLineWidth(2) h_rel_diff.SetLineStyle(1+j) # if (log==True) : max_list.append(h_rel_diff.GetMaximum()*1.3) max_list.append(h_rel_diff.GetMaximum()*1.4) datahists.append(h_rel_diff) num=j h = h_names[j] x.append(RooRealVar("x_%s"%h,"x_%s"%h,c_min,c_max)) datahist.append(RooDataHist("roohist_%s"%h,"roohist_%s"%h,RooArgList(x[num]),datahists[num])) #######################Bukin function ################## if ('mse' in names[j]) or ('HybridLoss' in names[j]) : Xp.append(RooRealVar("Xp_%s"%h,"Xp_%s"%h,0.96,0.7,1.1)) else : Xp.append(RooRealVar("Xp_%s"%h,"Xp_%s"%h,Xp_initial,0.,3.)) if ('unweighted' in names[j]) and ('Jet_mcPt>=300' in outString) : sigp.append(RooRealVar("sigp_%s"%h,"sigp_%s"%h,0.06,0.01,0.2)) elif ('No regression' in names[j]) and ('Jet_mcPt>=600' in outString) : sigp.append(RooRealVar("sigp_%s"%h,"sigp_%s"%h,0.06,0.01,0.2)) elif ('mse' in names[j]) or ('HybridLoss' in names[j]) : sigp.append(RooRealVar("sigp_%s"%h,"sigp_%s"%h,0.06,0.01,0.15)) else : sigp.append(RooRealVar("sigp_%s"%h,"sigp_%s"%h,sigp_initial,0.01,0.3)) xi.append(RooRealVar("xi_%s"%h,"xi_%s"%h,xi_initial,-1,1)) rho1.append(RooRealVar("rho1_%s"%h,"rho1_%s"%h,rho1_initial,-1,1)) #left rho2.append(RooRealVar("rho2_%s"%h,"rho2_%s"%h,rho2_initial,-1,1)) #right sig.append(RooBukinPdf("signal_bukin_%s"%h,"signal_bukin_%s"%h,x[num],Xp[num],sigp[num],xi[num],rho1[num],rho2[num])) ###########################RooCruijff################## meanr.append(RooRealVar("meanr_%s"%h,"meanr_%s"%h,Xp_initial,0.5,1.5)) sigmaL.append(RooRealVar("sigmaL_%s"%h,"sigmaL_%s"%h,sigp_initial,0.01,0.3)) sigmaR.append(RooRealVar("sigmaR_%s"%h,"sigmaR_%s"%h,sigp_initial,0.01,0.3)) alphaL.append(RooRealVar("alphaL_%s"%h,"alphaL_%s"%h,0.01,0,2.)) alphaR.append(RooRealVar("alphaR_%s"%h,"alphaR_%s"%h,0.1,0.,2.)) formula_rooCruijff = "( ( (x_%s-meanr_%s)<0) ? (exp( -1*pow((x_%s-meanr_%s),2)/(2*pow(sigmaL_%s,2)+alphaL_%s*pow((x_%s-meanr_%s),2) ))) : (exp( -1*pow((x_%s-meanr_%s),2)/(2*pow(sigmaR_%s,2)+alphaR_%s*pow((x_%s-meanr_%s),2) ))) )"%(h,h,h,h,h,h,h,h,h,h,h,h,h,h) # sig.append(RooGenericPdf("signal_cruijff_%s"%h,"signal_cruijff_%s"%h,formula_rooCruijff,RooArgList(x[num],meanr[num],sigmaL[num],sigmaR[num],alphaL[num],alphaR[num]))) # sig.append(RooBifurGauss("signal_bifurgaus_%s"%h,"signal_bifurgaus_%s"%h,x[num],meanr[num],sigmaL[num],sigmaR[num])) ############################VOigt########################## meanv.append(RooRealVar("meanv_%s"%h,"meanv_%s"%h,Xp_initial,0.5,1.5)) widthv.append(RooRealVar("widthv_%s"%h,"widthv_%s"%h,sigp_initial,0.01,0.7)) sigmav.append(RooRealVar("sigmav_%s"%h,"sigmav_%s"%h,sigp_initial,0.01,0.7)) # sig.append(RooVoigtian("signal_voigt_%s"%h,"signal_voigt_%s"%h,x[num],meanv[num],widthv[num],sigmav[num])) ########################################################### res.append(sig[num].fitTo(datahist[num],ROOT.RooFit.Strategy(2),ROOT.RooFit.Save(ROOT.kTRUE),ROOT.RooFit.SumW2Error(ROOT.kTRUE))) #res.append(sig[num].chi2FitTo(datahist[num])) fit_range_min = h_rel_diff.GetMean()-h_rel_diff.GetRMS()/2 fit_range_max = h_rel_diff.GetMean()+h_rel_diff.GetRMS()/2 # print 'range of the fit : ', fit_range_min, fit_range_max # res.append(sig[num].fitTo(datahist[num],ROOT.RooFit.Save(ROOT.kTRUE),ROOT.RooFit.Range(fit_range_min,fit_range_max))) # take Mean of each histogram and add 1/2 of the RMS ? -> try that res[num].Print() x[num].setRange("integralRange%s"%h, c_min,c_max) integral.append(sig[num].createIntegral(RooArgSet(x[num]), ROOT.RooFit.Range("integralRange%s"%h))) scale_factors.append(datahists[num].Integral()*datahists[num].GetBinWidth(1)/integral[num].getVal()) formula.append("%f *signal_bukin_%s"%(scale_factors[num],h)) # formula.append("%f *signal_bifurgaus_%s"%(scale_factors[num],h)) # formula.append("%f *signal_voigt_%s"%(scale_factors[num],h)) # formula.append("%f *signal_cruijff_%s"%(scale_factors[num],h)) # create a scaled function = scale * function scaled.append(RooFormulaVar("scaled_%s"%h,formula[num],RooArgList(sig[num]))) func_list.append(scaled[num].asTF(RooArgList(x[num]))) func_list[num].SetLineColor(colors[num]) hist_list.append(h_rel_diff) fitfunc='Bukin' fit_result_file = std.ofstream(utils.IO.plotFolder+"../fitResults/fitResultRegions_%s"%(fitfunc)+str(outString)+'.txt') fit_result_file.write('mean Xp\n',8) for fitnum in range(len(X_region)): Xp[fitnum].writeToStream(fit_result_file,False) fit_result_file.write('\n',1) fit_result_file.write('sigp\n',5) for fitnum in range(len(X_region)): sigp[fitnum].writeToStream(fit_result_file,False) fit_result_file.write('\n',1) fit_result_file.close() outString = outString.replace('/','_').replace(':','_').replace('(','_').replace(')','_').replace('+','_').replace('>=','_').replace('<','_').replace('>','_').replace(' & ','and').replace(' ','') c.cd() frame.GetYaxis().SetRangeUser(1e-06,max(max_list)) # frame.GetYaxis().SetRangeUser(1e-06,0.28) log_name='' if log==True : c.SetLogy() log_name='log' frame.Draw() for j in range(len(X_region)): func_list[j].Draw("same") hist_list[j].Draw("PEsame") leg.AddEntry(hist_list[j],names[j]+',Xp=%.2f,sigp=%.2f'%(Xp[j].getVal(),sigp[j].getVal()) ,"PE") print(j,' Sigma plus error : ',sigp[j].getVal(), ' +- ',sigp[j].getError()) leg.Draw('same') # save_name=utils.IO.plotFolder+"pt_regions_fitBukin_"+str(outString)+'.png' # c.SaveAs("pt_region.png") c.SaveAs(utils.IO.plotFolder+"fitBukin_regions_"+str(outString)+log_name+'.png') c.SaveAs(utils.IO.plotFolder+"fitBukin_regions_"+str(outString)+log_name+'.pdf')
def plot_rel_pt_diff(rel_diff_regressed,rel_diff,style=False,n_bins=50,outString=None,option='caterina'): if style==True: gROOT.SetBatch(True) gROOT.ProcessLineSync(".x /mnt/t3nfs01/data01/shome/nchernya/HHbbgg_ETH_devel/scripts/setTDRStyle.C") gROOT.ForceStyle() gStyle.SetPadTopMargin(0.06) gStyle.SetPadRightMargin(0.04) gStyle.SetPadLeftMargin(0.15) #### rel_diff_regressed = (predictions - true)/true #### rel_diff = (recoPt - true)/true # rel_diff_regressed = true/predictions # rel_diff = true/recoPt c_min = min(min(rel_diff_regressed),min(rel_diff)) c_max = max(max(rel_diff_regressed),max(rel_diff)) c_min=0 c_max=2. Histo_rel_diff = np.histogram(rel_diff,bins=n_bins,range=(c_min,c_max)) Histo_rel_diff_reg = np.histogram(rel_diff_regressed,bins=n_bins,range=(c_min,c_max)) h_rel_diff = TH1F("hrel_diff", "hrel_diff", n_bins, c_min, c_max) for i in range(len(rel_diff)): h_rel_diff.Fill(rel_diff[i]) h_rel_diff_reg = TH1F("hrel_diff_reg", "hrel_diff_reg", n_bins, c_min, c_max) for i in range(len(rel_diff_regressed)): h_rel_diff_reg.Fill(rel_diff_regressed[i]) h_rel_diff.SetLineColor(ROOT.kBlue) h_rel_diff.SetMarkerColor(ROOT.kBlue) h_rel_diff.SetLineWidth(2) h_rel_diff_reg.SetLineColor(ROOT.kRed) h_rel_diff_reg.SetMarkerColor(ROOT.kRed) h_rel_diff_reg.SetLineWidth(2) AllHistos= [Histo_rel_diff, Histo_rel_diff_reg] h_max = max([histo[0].max() for histo in AllHistos])*1.2 h_min = min([histo[0].min() for histo in AllHistos]) c = ROOT.TCanvas("c","c",900,900) c.cd() frame = TH1F("hframe", "hframe", n_bins, c_min, c_max) frame.SetStats(0) frame.GetXaxis().SetTitleOffset(0.91); frame.GetYaxis().SetTitle("Events") # frame.GetXaxis().SetTitle("(p_{T}^{Reco}-p_{T}^{gen})/p_{T}^{gen}") frame.GetXaxis().SetTitle("p_{T}^{gen}/p_{T}^{reco}") frame.GetYaxis().SetLabelSize(0.04) frame.GetYaxis().SetRangeUser(h_min,h_max) frame.Draw() h_rel_diff.Draw("samePE") h_rel_diff_reg.Draw("samePE") print('Nominal : mean, RMS :',h_rel_diff.GetMean(), h_rel_diff.GetRMS()) print('Regresesd : mean, RMS : ',h_rel_diff_reg.GetMean(), h_rel_diff_reg.GetRMS()) leg = ROOT.TLegend(0.55,0.75,0.9,0.9) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.03) # leg.Draw() h_names = ['nom','reg'] datahists = [h_rel_diff,h_rel_diff_reg] x=[] datahist=[] m=[] m_initial=[1.0103e+00,9.5381e-01] s=[] s_initial=[ 1.3210e-01,1.3967e-01] a=[] a_initial=[-7.7802e-01,-1.1260e+00] n=[] n_initial=[ 6.0149e+00,5.5622e+00] Ap,Xp,sigp,xi,rho1,rho2 = [],[],[],[],[],[] Xp_initial,sigp_initial,xi_initial,rho1_initial,rho2_initial = 9.8545e-01, 1.3118e-01,2.2695e-01, 6.4189e-02, 9.0282e-02 meanr, sigmaL, sigmaR, alphaL, alphaR = [],[],[],[],[] fsig=[] sig=[] model=[] res=[] integral=[] formula=[] scale_factors=[] scaled_cb=[] func=[] colors=[ROOT.kBlue,ROOT.kRed] chi_squares=[] fwhm_bukin=[] fwhm=[] fwhm.append( -1 *(h_rel_diff.GetBinCenter( h_rel_diff.FindFirstBinAbove(h_rel_diff.GetMaximum()/2.) ) - h_rel_diff.GetBinCenter( h_rel_diff.FindLastBinAbove(h_rel_diff.GetMaximum()/2.) ) ) ) fwhm.append( -1 *(h_rel_diff_reg.GetBinCenter( h_rel_diff_reg.FindFirstBinAbove(h_rel_diff_reg.GetMaximum()/2.) ) - h_rel_diff_reg.GetBinCenter( h_rel_diff_reg.FindLastBinAbove(h_rel_diff_reg.GetMaximum()/2.) ) ) ) for num,h in enumerate(h_names): x.append(RooRealVar("x_%s"%h,"x_%s"%h,c_min,c_max)) datahist.append(RooDataHist("roohist_%s"%h,"roohist_%s"%h,RooArgList(x[num]),datahists[num])) #######################Crystal ball################ m.append(RooRealVar("mean_%s"%h,"mean_%s"%h,m_initial[num],0.5,1.5)) s.append(RooRealVar("sigma_%s"%h,"sigma_%s"%h,s_initial[num],0.01,0.3)) a.append(RooRealVar("alpha_%s"%h,"alpha_%s"%h,a_initial[num],-10,0.)) n.append(RooRealVar("exp_%s"%h,"exp_%s"%h,n_initial[num],1.,100.)) # sig.append(RooCBShape("signal_gauss_%s"%h,"signal_gauss_%s"%h,x[num],m[num],s[num],a[num],n[num])) #######################Bukin function ################## Xp.append(RooRealVar("Xp_%s"%h,"Xp_%s"%h,Xp_initial,0.,3.)) sigp.append(RooRealVar("sigp_%s"%h,"sigp_%s"%h,sigp_initial,0.01,0.3)) xi.append(RooRealVar("xi_%s"%h,"xi_%s"%h,xi_initial,-1,1)) rho1.append(RooRealVar("rho1_%s"%h,"rho1_%s"%h,rho1_initial,-1,1)) #left rho2.append(RooRealVar("rho2_%s"%h,"rho2_%s"%h,rho2_initial,-1,1)) #right sig.append(RooBukinPdf("signal_bukin_%s"%h,"signal_bukin_%s"%h,x[num],Xp[num],sigp[num],xi[num],rho1[num],rho2[num])) ###########################RooCruijff################## meanr.append(RooRealVar("meanr_%s"%h,"meanr_%s"%h,m_initial[num],0.5,1.5)) sigmaL.append(RooRealVar("sigmaL_%s"%h,"sigmaL_%s"%h,s_initial[num],0.01,0.3)) sigmaR.append(RooRealVar("sigmaR_%s"%h,"sigmaR_%s"%h,s_initial[num],0.01,0.3)) alphaL.append(RooRealVar("alphaL_%s"%h,"alphaL_%s"%h,0.01,0,2.)) alphaR.append(RooRealVar("alphaR_%s"%h,"alphaR_%s"%h,0.1,0.,2.)) # RooGenericPdf genpdf("genpdf","genpdf","(1+0.1*abs(x)+sin(sqrt(abs(x*alpha+0.1))))",RooArgSet(x,alpha)) ; formula_rooCruijff = "( ( (x_%s-meanr_%s)<0) ? (exp( -1*pow((x_%s-meanr_%s),2)/(2*pow(sigmaL_%s,2)+alphaL_%s*pow((x_%s-meanr_%s),2) ))) : (exp( -1*pow((x_%s-meanr_%s),2)/(2*pow(sigmaR_%s,2)+alphaR_%s*pow((x_%s-meanr_%s),2) ))) )"%(h,h,h,h,h,h,h,h,h,h,h,h,h,h) # sig.append(RooGenericPdf("signal_cruijff_%s"%h,"signal_cruijjff_%s"%h,formula_rooCruijff,RooArgList(x[num],meanr[num],sigmaL[num],sigmaR[num],alphaL[num],alphaR[num]))) # sig.append(RooBifurGauss("signal_cruijff_%s"%h,"signal_cruijjff_%s"%h,x[num],meanr[num],sigmaL[num],sigmaR[num])) # fit_range_min = h_rel_diff.GetMean()-fwhm[num] # fit_range_max = h_rel_diff.GetMean()+fwhm[num] # print 'range of the fit : ', fit_range_min, fit_range_max # res.append(sig[num].fitTo(datahist[num],ROOT.RooFit.Save(ROOT.kTRUE),ROOT.RooFit.Range(fit_range_min,fit_range_max))) # take Mean of each histogram and add 1/2 of the RMS ? -> try that res.append(sig[num].fitTo(datahist[num],ROOT.RooFit.Save(ROOT.kTRUE))) res[num].Print() # chi_squares.append((x[num].frame()).chiSquare()) x[num].setRange("integralRange%s"%h, c_min,c_max) integral.append(sig[num].createIntegral(RooArgSet(x[num]), ROOT.RooFit.Range("integralRange%s"%h))) scale_factors.append(datahists[num].Integral()*datahists[num].GetBinWidth(1)/integral[num].getVal()) scale_factors.append(datahists[num].Integral()*datahists[num].GetBinWidth(1)/integral[num].getVal()) # formula.append("%f *signal_gauss_%s"%(scale_factors[num],h)) formula.append("%f *signal_bukin_%s"%(scale_factors[num],h)) # formula.append("%f *signal_cruijff_%s"%(scale_factors[num],h)) # create a scaled function = scale * function scaled_cb.append(RooFormulaVar("scaled_cb_%s"%h,formula[num],RooArgList(sig[num]))) func.append(scaled_cb[num].asTF(RooArgList(x[num]))) func[num].SetLineColor(colors[num]) datahists[num].SetMarkerColor(colors[num]) fwhm_bukin.append(sigp[num].getVal()*2*math.sqrt(2*math.log(2))) # chi_squares.append(RooChi2Var("chi2_%s"%h,"chi2_%s"%h,sig[num],datahist[num])) fitfunc='Bukin' # fitfunc='Bifurgaus' fit_result_file = std.ofstream(utils.IO.plotFolder+"../fitResults/fitResult_%s"%(fitfunc)+str(outString)+'.txt') res[0].floatParsFinal().printMultiline(fit_result_file, 1111, True) res[1].floatParsFinal().printMultiline(fit_result_file, 1111, True) fit_result_file.close() if option=='caterina' : leg.AddEntry(h_rel_diff,"HIG-16-044, FWHM=%.3f"%fwhm[0] ,"P") leg.AddEntry(h_rel_diff,"FWHM Bukin =%.3f"%fwhm_bukin[0] ,"P") leg.AddEntry(h_rel_diff_reg,"XGboost, FWHM=%.3f"%fwhm[1],"P") leg.AddEntry(h_rel_diff_reg,"FWHM Bukin =%.3f"%fwhm_bukin[1],"P") else : leg.AddEntry(h_rel_diff,"Nominal" ,"P") leg.AddEntry(h_rel_diff_reg,"Regressed" ,"P") c2 = ROOT.TCanvas("c2","c2",900,900) c2.cd() frame.Draw() func[0].Draw("same") func[1].Draw("same") h_rel_diff.Draw("PEHISTsame") h_rel_diff_reg.Draw("PEHISTsame") leg.Draw() # c2.SaveAs(utils.IO.plotFolder+"pt_rel_fitCruijff_"+str(outString)+'.png') # c2.SaveAs(utils.IO.plotFolder+"pt_rel_noFit_"+str(outString)+'.png') c2.SaveAs(utils.IO.plotFolder+"pt_rel_fit%s_"%(fitfunc)+str(outString)+'.png') c2.SaveAs(utils.IO.plotFolder+"pt_rel_fit%s_"%(fitfunc)+str(outString)+'.pdf') c2.Draw()