def do_fill(opts,fout,s,v,sel,trg,ref,KFWght=None): trg,trg_orig = trigData(opts,s,trg) # cut cut,cutlabel = write_cuts(sel,trg,reftrig=ref,sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,KFWght=KFWght,trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut: %s%s%s: %s"%(blue,cutlabel,plain,cut)) # names sample = s['pointer'] names = getNames(opts,s,v,sel,trg_orig,ref) wpars = weightInfo(opts.weight,KFWght) # containers canvas = TCanvas("cfill","cfill",1200,800) fout.Delete(names['hist']) h = TH1F(names['hist'],names['hist-title'],int(v['nbins_x']),float(v['xmin']),float(v['xmax'])) h.Sumw2() # do actual filling inroot('%s.draw("%s","%s","%s")'%(sample,h.GetName(),v['root'],cut)) if opts.debug: l3("%sFilled: %40s(N=%9d, Int=%9d)%s"%(yellow,h.GetName(),h.GetEntries(),h.Integral(),plain)) # write histogram to file gDirectory.cd('%s:/'%fout.GetName()) path = "%s/%s/%s"%('plots',wpars,names['path-hist']) makeDirsRoot(fout,path) gDirectory.cd(path) h.Write(h.GetName(),TH1.kOverwrite) gDirectory.cd('%s:/'%fout.GetName()) # clean h.Delete() canvas.Close() trg = dc(trg_orig)
def getKFWght(opts,loadedSamples,sel,trg): inroot('float nDat=0.0, nQCD=0.0, nBkg=0.0;') inroot('TH1F *hDat = new TH1F("hDat","hDat",1,0,1);') inroot('TH1F *hQCD = new TH1F("hQCD","hQCD",1,0,1);') inroot('TH1F *hBkg = new TH1F("hBkg","hBkg",1,0,1);') ### LOOP over samples for s in loadedSamples: ### Skip some if any([x in s['tag'] for x in ['JetMon','VBF','GluGlu']]): continue if opts.debug: l3("%sSample: %s%s"%(purple,s['tag'],plain)) ### Clean some if opts.debug and 'KFAC' in opts.weight[1]: l3("Option specified k-factor and puWt ignored in k-factor calculation.") opts.weightlocal = dc(opts.weight) opts.weightlocal[1] = list(set(opts.weight[1])-set(['KFAC','PU'])) ### Get cut and weight trg,trg_orig = trigData(opts,s,trg) cut = write_cuts(sel,trg,sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weightlocal,trigequal=trigTruth(opts.usebool))[0] trg = dc(trg_orig) if opts.debug: l3("Cut: %s"%cut) ### Data if 'Data' in s['tag'] or 'DataV' in s['tag']: inroot('%s.draw("%s","%s","%s")'%(s['pointer'],ROOT.hDat.GetName(),"0.5",cut)) ### QCD elif 'QCD' in s['tag']: inroot('%s.draw("%s","%s","%s")'%(s['pointer'],ROOT.hQCD.GetName(),"0.5",cut)) ### Bkg else: inroot('%s.draw("%s","%s","%s")'%(s['pointer'],ROOT.hBkg.GetName(),"0.5",cut)) print "Data: %8.2f | Bkg: %8.2f | QCD: %8.2f"%(ROOT.hDat.Integral(),ROOT.hBkg.Integral(),ROOT.hQCD.Integral()) ### finish KFWght = (ROOT.hDat.Integral()-ROOT.hBkg.Integral())/ROOT.hQCD.Integral() inroot('delete hDat; delete hQCD; delete hBkg;') if opts.debug: l2("KFWght calculated at: %f"%KFWght) return KFWght
def printSelTrg(opts, KFWghts): from write_cuts import write_cuts l1("Listing cutstrings for control:") for s in opts.selection: for t in opts.trigger: KFWght = KFWghts[('-'.join(sorted(s)), '-'.join(t))] l2("Sel: %20s, Trg: %20s" % ("(%s)" % s, "(%s)" % t)) cutsel = write_cuts( s, [], sample='Data' if opts.fileformat == '1' else 'DataA', jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool))[0] cutsel2 = write_cuts(s, [], sample='QCD250', jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool))[0] cuttrg = write_cuts([], t, sample='QCD250', jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool))[0] cuttrgdat = write_cuts( [], trigData(opts, "", t)[0], sample='Data' if opts.fileformat == '1' else 'DataA', jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool))[0] l3("%s Sel: (e.g. Data) %s %s" % (Red, plain, cutsel)) l3("%s Sel: (e.g. QCD250) %s %s" % (Red, plain, cutsel2)) l3("%s Trg: (e.g. QCD250) %s %s" % (Purple, plain, cuttrg)) l3("%sTrgDat: (e.g. Data) %s %s" % (Purple, plain, cuttrgdat)) print
def mkFitFlatTree(opts,s,sel,trg): # info jsoninfo = json.loads(filecontent(opts.jsoninfo)) jsonsamp = json.loads(filecontent(opts.jsonsamp)) jsonvars = json.loads(filecontent(opts.jsonvars)) ismc = True if not 'Data' in s['tag'] else False # prepare tags = {"NOM":"sNOM","VBF":"sVBF","TPN":"sTPN","TPV":"sTPV"} tag = tags[trg[0]] nfin = s['fname'] nfout = nfin.replace('.root','_%s.root'%tag) if not os.path.exists(opts.destination): makeDirs(opts.destination) fin = TFile.Open(opts.globalpath+nfin,"read") fout = TFile.Open(opts.destination+nfout,"recreate") l2("Working for %s"%s['tag']) l3("File in : %s"%nfin) l3("File out: %s"%nfout) # process fin.cd() tin = fin.Get("Hbb/events") hpass = fin.Get("Hbb/TriggerPass") tin.SetBranchStatus("*",0) for b in list(set(sum([x['bare'].split(',') for x in jsonvars['variables'].itervalues() if not "-"==x['bare']],[]))): tin.SetBranchStatus(b,1) if ismc: for b in ["puWt","trigWtNOM","trigWtVBF"]: tin.SetBranchStatus(b,1) # cuts cut,cutlabel = write_cuts(sel,trg,reftrig=["None"],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s"%(s['tag'],blue,cutlabel,plain,cut)) # cut = "" # if tag=="NOM": # cut ="selNOM && (triggerResult[5] || triggerResult[7]) && nLeptons==0" # elif tag=="VBF": # cut = "selVBF && triggerResult[9] && (!(selNOM && (triggerResult[0] || triggerResult[1]))) && nLeptons==0" # else: sys.exit(Red+"Tag type unclear: NOM/VBF. Exiting."+plain) # if opts.debug: l3("Cut %s: %s%s%s"%(s['tag'],blue,cut,plain)) # process fout.cd() if hpass: hpass.Write("TriggerPass") makeDirsRoot(fout,"Hbb") gDirectory.cd("%s:/%s"%(fout.GetName(),"Hbb")) tout = tin.CopyTree(cut) l3("Events: %d"%tout.GetEntries()) tout.Write() # cleaning fout.Close() fin.Close()
def mkFitFlatTree(opts,s,sel,trg): # info jsoninfo = json.loads(filecontent(opts.jsoninfo)) jsonsamp = json.loads(filecontent(opts.jsonsamp)) ismc = True if not 'Data' in s['tag'] else False # prepare tag = 'VBF' if 'VBF' in trg else 'NOM' nfin = s['fname'] nfout = nfin.replace('flatTree','Fit').replace('.root','_sel%s.root'%tag) if not os.path.exists(opts.destination): makeDirs(opts.destination) fin = TFile.Open(opts.globalpath+nfin,"read") fout = TFile.Open(opts.destination+nfout,"recreate") l2("Working for %s"%s['tag']) l3("File in : %s"%nfin) l3("File out: %s"%nfout) # process fin.cd() tin = fin.Get("Hbb/events") hpass = fin.Get("Hbb/TriggerPass") tin.SetBranchStatus("*",0) for b in ["mvaNOM","mvaVBF","selNOM","selVBF","mvaZ","dPhibb","mbbReg","mbb","nLeptons","triggerResult","jetBtag","b1"]: tin.SetBranchStatus(b,1) if ismc: for b in ["puWt","trigWtNOM","trigWtVBF"]: tin.SetBranchStatus(b,1) # cuts cut,cutlabel = write_cuts(sel,trg,reftrig=["None"],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s"%(s['tag'],blue,cutlabel,plain,cut)) # cut = "" # if tag=="NOM": # cut ="selNOM && (triggerResult[5] || triggerResult[7]) && nLeptons==0" # elif tag=="VBF": # cut = "selVBF && triggerResult[9] && (!(selNOM && (triggerResult[0] || triggerResult[1]))) && nLeptons==0" # else: sys.exit(Red+"Tag type unclear: NOM/VBF. Exiting."+plain) # if opts.debug: l3("Cut %s: %s%s%s"%(s['tag'],blue,cut,plain)) # process fout.cd() if hpass: hpass.Write("TriggerPass") makeDirsRoot(fout,"Hbb") gDirectory.cd("%s:/%s"%(fout.GetName(),"Hbb")) tout = tin.CopyTree(cut) l3("Events: %d"%tout.GetEntries()) tout.Write() # cleaning fout.Close() fin.Close()
def mkPDFFlatTree(opts,s,sel,trg): # info jsoninfo = json.loads(filecontent(opts.jsoninfo)) jsonsamp = json.loads(filecontent(opts.jsonsamp)) ismc = True if not 'Data' in s['tag'] else False # prepare tag = 'VBF' if 'VBF' in trg else 'NOM' makeDirs(opts.destination) nfin = s['fname'] nfout = nfin.replace('flatTree','%sFlatTree'%opts.tag).replace('.root','_%s.root'%tag) fin = TFile.Open(opts.globalpath+nfin,"read") fout = TFile.Open(opts.destination+nfout,"recreate") l2("Working for %s, renaming with %s"%(s['tag'],opts.tag)) l3("File in : %s"%nfin) l3("File out: %s"%nfout) # process fin.cd() tin = fin.Get("Hbb/events") # hpass = fin.Get("Hbb/TriggerPass") tin.SetBranchStatus("*",0) for b in ["mvaNOM","mvaVBF","selNOM","selVBF","dPhibb","mbbReg","mbb","nLeptons","triggerResult","pdfX1","pdfX2","pdfID1","pdfID2","pdfQ"]: tin.SetBranchStatus(b,1) if ismc: for b in ["puWt","trigWtNOM","trigWtVBF"]: tin.SetBranchStatus(b,1) # cuts cut,cutlabel = write_cuts(sel,trg,reftrig=["None"],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s"%(s['tag'],blue,cutlabel,plain,cut)) # cut = "" # if tag=="NOM": # cut ="selNOM && (triggerResult[5] || triggerResult[7]) && nLeptons==0" # elif tag=="VBF": # cut = "selVBF && triggerResult[9] && (!(selNOM && (triggerResult[0] || triggerResult[1]))) && nLeptons==0" # else: sys.exit(Red+"Tag type unclear: NOM/VBF. Exiting."+plain) # if opts.debug: l3("Cut %s: %s%s%s"%(s['tag'],blue,cut,plain)) # process fout.cd() # hpass.Write("TriggerPass") makeDirsRoot(fout,"Hbb") gDirectory.cd("%s:/%s"%(fout.GetName(),"Hbb")) tout = tin.CopyTree(cut,"",opts.nentries) l3("Events: %d"%tout.GetEntries()) tout.Write() # cleaning fout.Close() fin.Close()
def convertSamples(opts, samples): l1("Converting samples:") # remove files if reformat called if opts.reformat: for sample in samples.itervalues(): sname = opts.globalpath + '/' + sample[ 'fname'][:-5] + '_reformatted.root' if os.path.exists(sname): os.remove(sname) sys.exit( red + "Reformat function was called. All reformatted trees were removed. Rerun for more converting, but REMOVE the reformat flag (else you'll keep deleting the files)." + plain) elif opts.preselect: for sample in samples.itervalues(): sname = opts.globalpath + '/' + sample[ 'fname'][:-5] + '_preselected.root' if os.path.exists(sname): os.remove(sname) sys.exit( red + "Preselect function was called. All preselected trees were removed. Rerun for more converting, but REMOVE the preselect flag (else you'll keep deleting the files)." + plain) # actually reformat/preselect trees (one at a time to avoid memory filling up) for sample in samples.itervalues(): if opts.treepreselection == []: sname = opts.globalpath + '/' + sample[ 'fname'][:-5] + '_reformatted.root' if (not os.path.exists(sname)): inroot('reformat("%s","%s",variables,%s,"%s")' % (opts.globalpath, sample['fname'], str( opts.fileformat), opts.source)) sys.exit( red + "Sample reformat function was needed first. Rerun for actual plotting (or more converting)." + plain) else: sname = opts.globalpath + '/' + sample[ 'fname'][:-5] + '_preselected.root' if (not os.path.exists(sname)): cut, label = write_cuts(opts.treepreselection, [], [], [], sample=sample['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, trigequal=trigTruth(opts.usebool), varskip=opts.skip) inroot('preselect("%s","%s",variables,"%s","%s")' % (opts.globalpath, sample['fname'], cut, opts.source)) sys.exit( red + "Sample preselect function was needed first. Rerun for actual plotting (or more converting)." + plain)
def do_fill(opts,fout,s,v,sel,trg,ref,KFWght=None,skipWght=None): # info l2("Filling for %s"%v['var']) # containers cuts = {} cutlabels = {} names = {} canvas = TCanvas("cfill","cfill",1200,1000) # trg trg, trg_orig = trigData(opts,s,trg) # names jsoninfo = json.loads(filecontent(opts.jsoninfo)) names['global'] = getNames(opts,s,v,sel,trg_orig,ref) keepMapInfo = None if skipWght==True: keepMapInfo = [x for x in opts.weight[1] if (x[0:3]=='MAP' or x[0:3]=='FUN' or x[0:3]=='COR')] opts.weight[1] = [dc(x) for x in opts.weight[1] if not (x[0:3]=='MAP' or x[0:3] == 'FUN' or x[0:3]=='COR')] wpars = weightInfo(opts.weight,KFWght) # TEffi object TEffi = TEffiType(v) # looping over different tags for tag in ['Num','Den']: # cuts cuts[tag],cutlabels[tag] = write_cuts(sel,trg if tag=='Num' else ['None'],reftrig=ref,sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,KFWght=KFWght,varskip=opts.skip+[v['root']],trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: %s%s%s: %s"%(tag,blue,cutlabels[tag],plain,cuts[tag])) # loading/filling names[tag] = getNames(opts,s,v,sel,trg_orig if tag=='Num' else ['None'],ref,tag) if not s['tag'] in TEffi.h[tag] or TEffi.h[tag][s['tag']]==None: fout.Delete(names[tag]['hist']) TEffi.fill(s['pointer'],s['tag'],tag,names[tag],cuts[tag]) if opts.debug: l3("%sFilled: %40s(N=%9d, Int=%9d)%s"%(yellow,TEffi.h[tag][s['tag']].GetName(),TEffi.h[tag][s['tag']].GetEntries(),TEffi.h[tag][s['tag']].Integral(),plain)) # consider ratio tag = 'Rat' names[tag] = getNames(opts,s,v,sel,trg_orig,ref,tag) TEffi.effi(names[tag],jsoninfo['colours'][s['tag']],markerStyle(s['tag'],jsoninfo['markers'][s['tag']],opts)) # write histogram to file path = "%s/%s/%s"%('turnonCurves',wpars,names['global']['path-turnon']) TEffi.write(fout,path) # clean #TEffi.delete() canvas.Close() trg = dc(trg_orig) if skipWght==True: opts.weight[1] += keepMapInfo
def do_fill(opts, fout, s, v, sel, trg, ref, KFWght=None): trg, trg_orig = trigData(opts, s, trg) # cut cut, cutlabel = write_cuts(sel, trg, reftrig=ref, sample=s['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut: %s%s%s: %s" % (blue, cutlabel, plain, cut)) # names sample = s['pointer'] names = getNames(opts, s, v, sel, trg_orig, ref) wpars = weightInfo(opts.weight, KFWght) # containers canvas = TCanvas("cfill", "cfill", 1200, 800) fout.Delete(names['hist']) h = TH1F(names['hist'], names['hist-title'], int(v['nbins_x']), float(v['xmin']), float(v['xmax'])) h.Sumw2() # do actual filling inroot('%s.draw("%s","%s","%s")' % (sample, h.GetName(), v['root'], cut)) if opts.debug: l3("%sFilled: %40s(N=%9d, Int=%9d)%s" % (yellow, h.GetName(), h.GetEntries(), h.Integral(), plain)) # write histogram to file gDirectory.cd('%s:/' % fout.GetName()) path = "%s/%s/%s" % ('plots', wpars, names['path-hist']) makeDirsRoot(fout, path) gDirectory.cd(path) h.Write(h.GetName(), TH1.kOverwrite) gDirectory.cd('%s:/' % fout.GetName()) # clean h.Delete() canvas.Close() trg = dc(trg_orig)
def mkBDTcorrelations(): mp = parser() opts,fout,samples = main(mp,False,False,True) sels = ['NOM','VBF'] jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() selsamples = INTERNALpicksamples(opts,jsons) can = TCanvas("main","main",650,600) hProf = INTERNALhistograms(opts,sels,jsons) #INTERNALcanvases(opts) l1("Creating profiles") if not opts.read: for isel,sel in enumerate(sels): ssel = [s for s in selsamples if sel in s['fname']] for s in ssel: l2("Running for %s"%s['tag']) cut,cutlabel = write_cuts(["None"],["None"],reftrig=["None"],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.complexWghts[(sel,'old')],trigequal=trigTruth(opts.usebool)) #cut = re.findall('\*.*',cut)[0][2:-1].replace('pu','ev.pu').replace('trig','ev.trig') if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s"%(s['tag'],blue,cutlabel,plain,cut)) cutextra = "mbbReg[%d]>=80. && mbbReg[%d]<=200."%(1 if sel=='NOM' else 2, 1 if sel=='NOM' else 2) for v in [jsons['vars']['variables'][vv] for vv in opts.variable]: if sel=='NOM' and '[2]' in v['root']: continue if sel=='VBF' and '[1]' in v['root']: continue if 'mva' in v and not sel in v: continue s['tree'].Draw("%s:%s>>+%s"%(v['root'],"mva%s"%sel,hProf[(sel,v['var'],'BDT','QCD' if 'QCD' in s['fname'] else 'DAT')].GetName()),TCut(cutextra)*TCut(cut),"prof") if 'mbbReg' in v['var']: continue s['tree'].Draw("%s:%s>>+%s"%(v['root'],"mbbReg[%d]"%(1 if sel=='NOM' else 2),hProf[(sel,v['var'],'mbbReg','QCD' if 'QCD' in s['fname'] else 'DAT')].GetName()),TCut(cutextra)*TCut(cut),"prof") else: for k in hProf.iterkeys(): hProf[k] = fout.Get("h%s_sel%s_%s_%s"%(k[3],k[0],k[1],k[2])) k = list(set([x[0:3] for x in hProf.iterkeys()])) for ik in k: low = min(hProf[(ik[0],ik[1],ik[2],'QCD')].GetBinContent(hProf[(ik[0],ik[1],ik[2],'QCD')].GetMinimumBin()),hProf[(ik[0],ik[1],ik[2],'DAT')].GetBinContent(hProf[(ik[0],ik[1],ik[2],'DAT')].GetMinimumBin())) hig = max(hProf[(ik[0],ik[1],ik[2],'QCD')].GetBinContent(hProf[(ik[0],ik[1],ik[2],'QCD')].GetMaximumBin()),hProf[(ik[0],ik[1],ik[2],'DAT')].GetBinContent(hProf[(ik[0],ik[1],ik[2],'DAT')].GetMaximumBin())) med = hProf[(ik[0],ik[1],ik[2],'DAT')].GetMean(2) dif = hig-low setlow = med - 1.6*dif sethig = med + 1.6*dif if not 'cos' in ik[1]: setlow = max(setlow,0) limits = {'dEtaqq1':[2,7,2,7],'dPhiqq1':[0,3,0,3],'jetBtag00':[0.5,1.2,0.8,1.0],'jetBtag01':[0.0,1.2,0.55,0.75],'jetQGLNOM0':[0,1,0.5,0.65],'jetQGLNOM1':[0,1,0.35,0.55],'jetQGLNOM2':[0,1,0.5,0.7],'jetQGLNOM3':[0,1,0.5,0.7],'mqq1':[0,2500,500,800],'mbbReg1':[115,145,115,145],'cosTheta1':[-0.35,0.35,-0.2,0.2],'jetQGLVBF0':[0,1,0.4,0.55],'jetQGLVBF1':[0,1,0.3,0.5],'jetQGLVBF2':[0,1,0.55,0.75],'jetQGLVBF3':[0,1,0.5,0.7],'mqq2':[0,2500,1000,1300],'mbbReg2':[115,145,115,145],'cosTheta2':[-0.35,0.35,-0.2,0.2],'dEtaqq2':[2,7,2,7],'dPhiqq2':[0,3,0,3],'softHt':[0,100,25,50],'softN2':[0,10,4,7]} #[3,7,4,6], [0,3,1,2] [0,3,1.5,2.5] if ik[1] in limits: if ik[2]=='BDT': setlow = limits[ik[1]][0] sethig = limits[ik[1]][1] else: setlow = limits[ik[1]][0]#2] sethig = limits[ik[1]][1]#3] # if 'jetBtag01' in ik[1] and ik[0]=='VBF' and ik[2]=='mbbReg': # setlow = 0.4 # sethig = 0.55 hProf[(ik[0],ik[1],ik[2],'DAT')].GetYaxis().SetRangeUser(setlow,sethig) hProf[(ik[0],ik[1],ik[2],'DAT')].GetYaxis().SetTitleOffset(1.4) hProf[(ik[0],ik[1],ik[2],'DAT')].GetXaxis().SetTitleOffset(1.0) hProf[(ik[0],ik[1],ik[2],'DAT')].GetYaxis().SetNdivisions(507) hProf[(ik[0],ik[1],ik[2],'DAT')].GetXaxis().SetNdivisions(507) hProf[(ik[0],ik[1],ik[2],'DAT')].Draw("axis") h = INTERNALgraph(hProf[(ik[0],ik[1],ik[2],'DAT')]) h.SetMarkerStyle(20) h.SetMarkerSize(0.8) h.SetMarkerColor(kBlack) h.SetLineColor(kBlack) h.SetFillStyle(0) h.Draw("same pz") g = INTERNALgraph(hProf[(ik[0],ik[1],ik[2],'QCD')]) # hProf[(ik[0],ik[1],ik[2],'QCD')].SetMarkerStyle(25) # hProf[(ik[0],ik[1],ik[2],'QCD')].SetMarkerColor(kBlue) # hProf[(ik[0],ik[1],ik[2],'QCD')].Draw("same e") g.SetMarkerStyle(25) g.SetMarkerColor(kBlue) g.SetLineColor(kBlue) g.SetFillStyle(0) g.Draw("same pz") leg = TLegend(0.62,0.75,0.9,0.92,"%s selection"%(ik[0].strip('sel'))) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.045) #leg.AddEntry(hProf[(ik[0],ik[1],ik[2],'DAT')],'Data') #leg.AddEntry(hProf[(ik[0],ik[1],ik[2],'QCD')],'QCD') leg.AddEntry(h,'Data','LP') leg.AddEntry(g,'QCD','LP') leg.SetY1(leg.GetY2()-(leg.GetNRows()+1)*0.05) leg.Draw() can.SaveAs("plots/%s.png"%hProf[(ik[0],ik[1],ik[2],'DAT')].GetName().replace('hDAT','h')) can.SaveAs("plots/%s.pdf"%hProf[(ik[0],ik[1],ik[2],'DAT')].GetName().replace('hDAT','h')) fout.cd() for h in hProf.itervalues(): h.Write(h.GetName(),TH1.kOverwrite) # clean fout.Close()
def get1DMap(opts,fout,samples,variables,sel,trg,ref,vx): # info l1("Creating 1D cors for (%s):"%(vx[0])) print "+ (sel,trg,ref): (%s,%s,%s)"%(sel,trg,ref) jsoninfo = json.loads(filecontent(opts.jsoninfo)) groups = list(set([jsoninfo['groups'][x['tag']] for x in samples])) samplesbygroup = {} for group in groups: samplesbygroup[group] = [sample for sample in samples if jsoninfo['groups'][sample['tag']]==group] ratios = [] if 'JetMon' in groups and 'QCD' in groups: ratios += ['JetMon-QCD'] # storage gDirectory.cd("%s:/"%fout.GetName()) for group in groups: makeDirsRoot(fout,'1DMaps/%s'%group) # calculate xvals = array('f',[float(x) for x in vx[1].split("#")]) maps = {} cuts = {} inroot('TTree *t = 0;') # To Save canvas = TCanvas("cmap","cmap",1800,1200) canvas.cd() gPad.SetGrid(0,0) gPad.SetRightMargin(0.14) gStyle.SetPaintTextFormat("6.2f") # LOOP over ALL GROUPS for group in groups: l2("Filling for group: %s%s%s"%(purple,group,plain)) maps[group] = {} cuts[group] = {} for tag in ['Num','Den','Rat']: trg,trg_orig = trigData(opts,'',trg) mapname = "1DMap_%s-%s_s%s-t%s-r%s-d%s_%s"%(group,tag,'-'.join(sorted(sel)),'-'.join(trg_orig),'-'.join(ref),'-'.join(trg),vx[0]) maptitle = "%s;%s;Scale factor"%(mapname,variables[vx[0]]['title_x']) trg = dc(trg_orig) maps[group][tag] = fout.FindObjectAny(mapname) if (not maps[group][tag]) or (not len(xvals)-1==maps[group][tag].GetXaxis().GetNbins()): maps[group][tag] = TH1F(mapname,maptitle,len(xvals)-1,xvals) maps[group][tag].Sumw2() ## LOOP over ALL SAMPLES for s in sorted(samplesbygroup[group],key=lambda x:('QCD' in x['tag'],not 'WJets' in x['tag'],jsoninfo['crosssections'][x['tag']])): if tag=='Rat': continue l3("Filling for sample: %s%s (%s)%s"%(cyan,s['tag'],tag,plain)) trg,trg_orig = trigData(opts,s,trg) inroot('t = (TTree*)%s.gett();'%s['pointer']) cuts[group][tag] = write_cuts(sel,trg if tag=='Num' else [],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,reftrig=ref,trigequal=trigTruth(opts.usebool),weight=opts.weight)[0] #,varskip=[variables[vx[0]]['root'],variables[vy[0]]['root']] if opts.debug: print yellow,cuts[group][tag],plain inroot('t->Draw("%s>>+%s",TCut("%s"));'%(variables[vx[0]]['root'],maps[group][tag].GetName(),cuts[group][tag])) trg = dc(trg_orig) else: l3("Loaded from file for group: %s%s%s"%(cyan,group,plain)) ## END LOOP over ALL SAMPLES # to save path = '%s/../trigger/plots/%s/1DMaps/%s'%(basepath,fout.GetName().split('/')[-1][:-5],group) makeDirs(path) # ratio maps[group]['Rat'].Divide(maps[group]['Num'],maps[group]['Den'],1.0,1.0,'B') #$ maps[group]['Rat'] = TEfficiency(maps[group]['Num'],maps[group]['Den']) maps[group]['Rat'].SetName(mapname) maps[group]['Rat'].SetTitle(maptitle) # save gDirectory.cd('%s:/1DMaps/%s'%(fout.GetName(),group)) ## for tag in ['Num','Den','Rat']: if not tag in maps[group]: continue maps[group][tag].Write(maps[group][tag].GetName(),TH1.kOverwrite) gPad.SetRightMargin(0.14) maps[group][tag].SetTitleOffset(1.0,"Y") maps[group][tag].SetMarkerSize(maps[group][tag].GetMarkerSize()*0.75) maps[group][tag].Draw("text45,error") canvas.SaveAs('%s/%s.png'%(path,maps[group][tag].GetName())) canvas.SaveAs('%s/%s.pdf'%(path,maps[group][tag].GetName())) l3("Written %s map to (eog %s/%s.png)"%(tag,path,maps[group][tag].GetName())) # END LOOP over ALL GROUPS # FOCUS ON RATIO MAPS JetMon / QCD gDirectory.cd("%s:/"%fout.GetName()) for ratio in ratios: # store makeDirsRoot(fout,'1DMaps/%s'%ratio) maps[ratio] = {} l2("Getting ratio for: %s%s%s"%(purple,ratio,plain)) # create trg,trg_orig = trigData(opts,'',trg) mapname = "1DMap_%s-%s_s%s-t%s-r%s-d%s_%s"%(ratio,'Rat','-'.join(sorted(sel)),'-'.join(trg_orig),'-'.join(ref),'-'.join(trg),vx[0]) maptitle = "%s;%s;Scale factor"%(mapname,variables[vx[0]]['title_x']) trg = dc(trg_orig) maps[ratio]['Rat'] = TH1F(mapname,maptitle,len(xvals)-1,xvals) maps[ratio]['Rat'].Sumw2() #$ maps[ratio]['Rat'].Divide(maps[ratio.split('-')[0]]['Rat'].GetPaintedHistogram(),maps[ratio.split('-')[1]]['Rat'].GetPaintedHistogram()) maps[ratio]['Rat'].Divide(maps[ratio.split('-')[0]]['Rat'],maps[ratio.split('-')[1]]['Rat']) # plot canvas.cd() maps[ratio]['Rat'].SetTitleOffset(1.0,"Y") maps[ratio]['Rat'].SetMarkerSize(maps[ratio]['Rat'].GetMarkerSize()*0.75) maps[ratio]['Rat'].Draw('text45,error') # save gDirectory.cd('%s:/1DMaps/%s'%(fout.GetName(),ratio)) maps[ratio]['Rat'].Write(maps[ratio]['Rat'].GetName(),TH1.kOverwrite) path = "%s/../trigger/plots/%s/1DMaps/%s"%(basepath,fout.GetName().split('/')[-1][:-5],ratio) makeDirs(path) for tag in ['Num','Den','Rat']: if not tag in maps[ratio]: continue canvas.SaveAs("%s/%s.png"%(path,maps[ratio][tag].GetName())) canvas.SaveAs("%s/%s.pdf"%(path,maps[ratio][tag].GetName())) l2("Written map to (eog %s/%s.png)"%(path,maps[ratio]['Rat'].GetName())) # 2d copy binsx = [] for i in range(1,maps[ratio]['Rat'].GetNbinsX()+2): binsx += [maps[ratio]['Rat'].GetXaxis().GetBinLowEdge(i)] #print binsx binsx_array = array('f',binsx) binsy_array = array('f',[0.0,1.0]) ratio2d = TH2F('ratio2D','ratio2D',len(binsx_array)-1,binsx_array,len(binsy_array)-1,binsy_array) for i in range(maps[ratio]['Rat'].GetNbinsX()+2): #print maps[ratio]['Rat'].GetXaxis().GetBinLowEdge(i) #print maps[ratio]['Rat'].GetBinContent(i) ratio2D.SetBinContent(i,1,maps[ratio]['Rat'].GetBinContent(i)) ratio2D.SetBinError(i,1,maps[ratio]['Rat'].GetBinError(i)) #plot canvas.cd() ratio2D.SetTitle('%s;%s;%s'%('',maps[ratio]['Rat'].GetXaxis().GetTitle(),'Scale factor')) ratio2D.Draw('colz,error,text45') canvas.SaveAs("%s/2D%s.png"%(path,maps[ratio][tag].GetName())) canvas.SaveAs("%s/2D%s.pdf"%(path,maps[ratio][tag].GetName())) l2("Written map to (eog %s/2D%s.png)"%(path,maps[ratio]['Rat'].GetName())) # clean canvas.Close()
def datamc(): # options mp = parser() opts,fout,samples,variables = main.main(mp,False,True,True) # root setup ROOTsetup() eps = 0.0001 # samples / variables ji, jv, js, Lsamples = loadSamples(opts,samples) Lvariables = {k:v for (k,v) in variables.iteritems() if k in opts.variable} # canvas can = TCanvas("c","c",900,750) can.cd() # histos histos = hists(Lsamples,Lvariables,opts.selection) stacks = {} ################################################## l1("Filling histograms") for s in opts.selection: for t in opts.trigger: # cms paves pcms1,pcms2 = FormatCMSPaves(opts,s) #### # cuts #### cut,cutlabel = write_cuts(s,t,reftrig=["None"],sample=Lsamples[Lsamples.keys()[0]]['i']['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) #### cut1,cut2 = cut.split(' * ')[0][1:],cut.split(' * ')[1][:-1] ################################################## # sample loop for sn,si in sorted(Lsamples.iteritems()): l2("Sample: %s"%sn) st = si['i']['tag'] sg = si['g'] ca,calabel = write_cuts(s,t,reftrig=["None"],sample=st,jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) ca1,ca2 = ca.split(' * ')[0][1:],ca.split(' * ')[1][:-1] n = si['t'].GetEntries() print ca2 # variable loop for vn,vi in sorted(Lvariables.iteritems()): l3(vn) ht = hTag(st,vn,s[0]) si['t'].Draw("%s>>%s"%(vi['root'],ht),"%s"%ca2) ################################################## # stacking for sn,si in sorted(Lsamples.iteritems()): sg = si['g'] st = si['i']['tag'] for vn,vi in sorted(Lvariables.iteritems()): hg = hTag(sg,vn,s[0]) ht = hTag(st,vn,s[0]) Hg = histos[hg] Ht = histos[ht] Hg.Add(Ht) ################################################## # k-factor INTEGRALS = {"Data":0.0,"QCD":0.0,"Other":0.0,"TTJets":0.0} if "KF" in opts.weight[1] and not ('TP' in t[0]): #print "if" for ig,g in enumerate(list(set([x['g'] for (k,x) in Lsamples.iteritems()]))): var = Lvariables.keys()[0] hg = hTag(g,var,s[0]) if g=="VBF125": continue elif g=="Data": INTEGRALS["Data"] += float(histos[hg].Integral()) elif g=="QCD": INTEGRALS["QCD"] += float(histos[hg].Integral()) else: INTEGRALS["Other"] += float(histos[hg].Integral()) kfactor = (INTEGRALS["Data"]-INTEGRALS["Other"])/INTEGRALS["QCD"] l1("K-factor: %.2f"%kfactor) elif "KF" in opts.weight[1]: #print "elif" for ig,g in enumerate(list(set([x['g'] for (k,x) in Lsamples.iteritems()]))): var = Lvariables.keys()[0] hg = hTag(g,var,s[0]) if g=="VBF125": continue elif g=="Data": INTEGRALS["Data"] += float(histos[hg].Integral()) elif g=="TTJets": INTEGRALS["TTJets"] += float(histos[hg].Integral()) else: INTEGRALS["Other"] += float(histos[hg].Integral()) kfactor = (INTEGRALS["Data"]-INTEGRALS["Other"])/INTEGRALS["TTJets"] l1("K-factor: %.2f"%kfactor) ################################################## # groups l1("Group iteration") can.Clear() for vn,vi in sorted(Lvariables.iteritems()): fout.cd() # set pads p1,p2 = FormatPads(can) ################################################## # top pad p1.cd() # containers l2("Variable: %s"%(vn)) DRAW = {} hs = "s_v%s_c%s"%(vn,s[0]) S = THStack(hs,hs) L = TLegend(gStyle.GetPadLeftMargin()+0.03,0.5,gStyle.GetPadLeftMargin()+0.03+0.23*3,1.-gStyle.GetPadTopMargin()-0.025) FormatLegend(L) # group loop for ig,g in enumerate(sorted(list(set([x['g'] for (k,x) in Lsamples.iteritems()])),key=lambda y:(not '125' in y,not 'WJets' in y,histos[hTag(y,vn,s[0])].Integral()))): l3("%s"%(g)) hg = hTag(g,vn,s[0]) Hg = histos[hg] print Hg.Integral() # underflow Hg.SetBinContent(1,0.5*(Hg.GetBinContent(0)+Hg.GetBinContent(1))) Hg.SetBinError(1,sqrt(pow(Hg.GetBinError(0),2.)+pow(Hg.GetBinError(1),2.))) # overflow Hg.SetBinContent(Hg.GetNbinsX(),0.5*(Hg.GetBinContent(Hg.GetNbinsX())+Hg.GetBinContent(Hg.GetNbinsX()+1))) Hg.SetBinError(Hg.GetNbinsX(),sqrt(pow(Hg.GetBinError(Hg.GetNbinsX()),2.)+pow(Hg.GetBinError(Hg.GetNbinsX()+1),2.))) # type handling if g=="Data": Hg.SetMarkerStyle(20) Hg.SetMarkerColor(kBlack) Hg.SetMarkerSize(1.2) DRAW["Data"] = Hg elif g=="VBF125": Hg.SetLineStyle(1) Hg.SetLineColor(ji['colours'][g]) Hg.SetLineWidth(3) Hg.Scale(10.) DRAW["SIG"] = Hg elif g=="GF125": Hg.SetLineStyle(7) Hg.SetLineColor(ji['colours'][g]) Hg.SetLineWidth(3) Hg.Scale(10.) DRAW["SIGGF"] = Hg else: Hg.SetLineStyle(1) Hg.SetLineColor(kBlack) Hg.SetFillStyle(1001) Hg.SetFillColor(ji['colours'][g]) if g=="QCD" and (not "TP" in t[0]) and "KF" in opts.weight[1]: Hg.Scale(kfactor) if g=="TTJets" and ("TP" in t[0]) and "KF" in opts.weight[1]: Hg.Scale(kfactor) if not Hg.GetEntries()==0: S.Add(Hg) # Full stack (bkg) DRAW["BKG"] = S S.Draw() Sall = FormatStack(S) # MC err histos[hTag("MCerr",vn,s[0])] = Sall.Clone(hTag("MCerr",vn,s[0])) Hg = histos[hTag("MCerr",vn,s[0])] Hg.SetFillStyle(3004) Hg.SetFillColor(kGray+2)#kBlack) Hg.SetMarkerSize(0) DRAW["MCerr"] = Hg # Fill legend L.AddEntry(histos[hTag("Data",vn,s[0])],"Data","P") L.AddEntry(histos[hTag("QCD",vn,s[0])],"%s%s"%("QCD"," (x%.2f)"%kfactor if ("KF" in opts.weight[1] and not "TP" in t[0]) else ""),"F") L.AddEntry(histos[hTag("ZJets",vn,s[0])],"%s"%("ZJets"),"F") L.AddEntry(histos[hTag("VBF125",vn,s[0])],"10x VBF H(125)","L") if hTag("Tall",vn,s[0]) in histos: L.AddEntry(histos[hTag("Tall",vn,s[0])],"%s%s"%("T"," (x%.2f)"%kfactor if ("KF" in opts.weight[1] and "TP" in t[0]) else ""),"F") else: L.AddEntry(histos[hTag("TTJets",vn,s[0])],"%s%s"%("TTJets"," (x%.2f)"%kfactor if ("KF" in opts.weight[1] and "TP" in t[0]) else ""),"F") L.AddEntry(histos[hTag("WJets",vn,s[0])],"%s"%("WJets"),"F") L.AddEntry(histos[hTag("GF125",vn,s[0])],"10x GF H(125)","L") if not hTag("Tall",vn,s[0]) in histos: L.AddEntry(histos[hTag("singleT",vn,s[0])],"%s"%("singleT"),"F") L.AddEntry(histos[hTag("MCerr",vn,s[0])],"MC stat. unc.","F") # Draw DRAW["BKG"].Draw("hist") DRAW["Data"].Draw("PE,same") DRAW["SIG"].Draw("hist,same") DRAW["SIGGF"].Draw("hist,same") DRAW["MCerr"].Draw("E2,same") # Edit legend L.SetY1(L.GetY2()-L.GetNRows()*0.04) L.Draw() # Draw paves pcms1.Draw() pcms2.Draw() # Edit canvas gPad.SetLogy(1) gPad.RedrawAxis() p1.Write(p1.GetName()+("NOM" if "NOM" in opts.selection[0] else "VBF")+vn) ################################################## # bottom pad p2.cd() # histo = 1 one = DRAW["Data"].Clone("one") for ibin in range(0,one.GetNbinsX()+2): one.SetBinContent(ibin,1.) one.SetBinError(ibin,0.) # ratio Data/MC - 1 rat = DRAW["Data"].Clone(DRAW["Data"].GetName().replace('h','hRat')) FormatRatio(rat) rat.Divide(DRAW["BKG"].GetStack().Last()) rat.Add(one,-1.) histos[hTag("Data/MC",vn,s[0])] = rat # ratio MCerr/MC - 1 ratMCerr = histos[hTag("MCerr",vn,s[0])].Clone("ratMCerr") ratMCerr.Divide(DRAW["BKG"].GetStack().Last()) ratMCerr.Add(one,-1.) histos[hTag("MCerrDataMC",vn,s[0])] = ratMCerr # Draw rat.Draw() ratMCerr.Draw("E2,same") # Edit pad rat.GetYaxis().SetRangeUser(-1.0+eps,1.0-eps) gPad.SetGridy(1) gPad.Update() line = TF1("l1","0.",gPad.GetUxmin(),gPad.GetUxmax()) line.SetLineColor(kBlack) line.Draw("same") gPad.RedrawAxis() ################################################## # save plotdir = "./plots/%s"%s[0] if not os.path.exists(plotdir): makeDirs(plotdir) can.SaveAs("%s/%s_s%s.pdf"%(plotdir,vn,s[0])) can.SaveAs("%s/%s_s%s.png"%(plotdir,vn,s[0])) fout.cd() can.Clear() ################################################## # clean can.Close() closeSamples(Lsamples)
def mkTemplateFunctions(): global paves mp = parser() opts, fout, samples = main(mp, False, False, True) jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() TYPE = opts.typetag samples = INTERNALpicksamples(opts, jsons) hDat = INTERNALhistograms(opts) hQcd = INTERNALhistograms(opts) can = TCanvas('profiles', 'profiles', 900, 750) #can.Divide(2,1) ln = INTERNALline("1", float(opts.fBound[0]), float(opts.fBound[1])) for iTag, Tag in enumerate(opts.catTags): selsamples = [s for s in samples if s['incarnation'] == Tag] fins = [x['tfile'] for x in selsamples] l1('Running for %s' % Tag) can.cd(1 if 'NOM' in Tag else 2) leg = TLegend(0.75, 0.5, 1. - gPad.GetRightMargin() - 0.05, 1. - gPad.GetTopMargin() - 0.015) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextSize(0.045) leg.SetTextFont(42) leg.SetY1(leg.GetY2() - 2 * leg.GetTextSize() * 1.25) l2("Running for <mbbReg>") fout.cd() hQcd[Tag] = TProfile("hProf_sel%s_%s" % (Tag, TYPE), "hProf_sel%s_%s" % (Tag, TYPE), 25, -0.15, 0.15) hDat[Tag] = TProfile("hProf_sel%s_%s" % (Tag, "Data"), "hProf_sel%s_%s" % (Tag, "Data"), 50, -0.15, 0.15) h = hDat[Tag] h = INTERNALstyleHist(h, 0, markers, colours, TYPE) h = hQcd[Tag] h = INTERNALstyleHist(h, 0, markers, colours, TYPE) can.cd() for ifin, fin in enumerate(fins): if "QCD" in fin.GetName(): h = hQcd[Tag] else: h = hDat[Tag] if "VBF" in fin.GetName(): continue fout.cd() can.cd(1 if 'NOM' in Tag else 2) l4('Sample: %s' % fin.GetName()) CUT1 = "mbbReg[%d] > %.1f && mbbReg[%d] < %.1f" % ( 1 if 'NOM' in Tag else 2, 60, 1 if 'NOM' in Tag else 2, 170) CUT2, cutlabel = write_cuts( ["None"], ["None"], reftrig=["None"], sample=jsons['samp']['files'][os.path.split( fin.GetName())[1]]['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.complexWghts[(Tag, 'old')], trigequal=trigTruth(opts.usebool)) l4('Cutting with: (%s)*%s' % (CUT1, CUT2)) tin = fin.Get("Hbb/events") l3('Drawing mbbReg[%d] --> %s' % (1 if 'NOM' in Tag else 2, h.GetName())) tin.Draw( "mbbReg[%d]:%s>>+%s" % (1 if 'NOM' in Tag else 2, "mvaZ" if 'NOM' in Tag else "mvaVBF", h.GetName()), TCut(CUT1) * TCut(CUT2), "prof") h.Write(h.GetTitle(), TH1.kOverwrite) gPad.SetGrid(0, 1) gPad.RedrawAxis() hQcd[Tag].SetMarkerSize(1.0) hQcd[Tag].SetMarkerStyle(20) hQcd[Tag].SetMarkerColor(kBlack) hDat[Tag].GetXaxis().SetTitleOffset(1.1) hDat[Tag].DrawCopy() hQcd[Tag].DrawCopy("same") epave("Z selection", gPad.GetLeftMargin() + 0.01, 1. - 0.5 * gPad.GetTopMargin(), "left", 1, 0.048) epave("%.1f fb^{-1} (8 TeV)" % (19.8 if 'NOM' in Tag else 18.3), 1. - gPad.GetRightMargin() - 0.01, 1. - 0.5 * gPad.GetTopMargin(), "right", 0, 0.048) line = -0.6 if 'NOM' in Tag else -0.1 tl = TLine(line, 70, line, 170) tl.SetLineStyle(kDashed) tl.SetLineColor(kGray + 2) tl.Draw() paves += [tl] leg.Clear() a = leg.AddEntry(hDat[Tag], "Data", "PL") a.SetTextColor(kBlue + 2) a = leg.AddEntry(hQcd[Tag], "QCD", "PL") a.SetTextColor(kBlack) leg.Draw() paves += [leg] gPad.RedrawAxis() can.SaveAs("mbbRegProfileZ.pdf") # clean for f in samples: if f['tfile']: f['tfile'].Close() fout.Close()
def getYields(opts, loadedSamples, KFWghts): jsoninfo = json.loads(filecontent(opts.jsoninfo)) l1("Extracting yields:") yieldarchive = {} # selection for sel in opts.selection: thissel = '-'.join(sorted(sel)) l1("Running for sel: %s" % thissel) # trigger for itrg, trg in enumerate(opts.trigger): thistrg = '-'.join(trg) if not opts.datatrigger == []: thisdatatrg = '-'.join( opts.datatrigger[opts.trigger.index(trg)]) l1("Running for trg: %s" % (thistrg if opts.datatrigger == [] else " (data: %s)" % thisdatatrg)) # KFWght KFWght = KFWghts[(thissel, thistrg)] # samples groupcounts = {} # category if any([('VBF' in '-'.join(x) or 'MBBREG2' in '-'.join(x)) for x in opts.selection]): keys = ['ALL', 'CAT-2', 'CAT4', 'CAT5', 'CAT6'] elif any([('NOM' in '-'.join(x) or 'MBBREG1' in '-'.join(x)) for x in opts.selection]): keys = ['ALL', 'CAT-1', 'CAT0', 'CAT1', 'CAT2', 'CAT3'] else: sys.exit(Red + 'Don\'t know how to handle this selection. Exiting.' + plain) if any([x in thissel for x in ['NOMC', 'VBFC']]): cat = 'CAT' + str( int(re.search('(NOMC|VBFC)([0-9]{1})', thissel).group(2)) - 1) else: cat = 'ALL' if 'VBF' in thissel and cat == "CAT-1": cat = "CAT-2" if 'VBF' in thissel and 'CAT' in cat and int( re.search('CAT([0-9+-]*)', cat).group(1)) >= 0: cat = "CAT%d" % ( int(re.search('CAT([0-9+-]*)', cat).group(1)) + 4) if any([x in thissel for x in ['NOMC', 'VBFC']]): print re.search('([+_-]*)(mvaNOMC|mvaVBFC)([0-9]{1})([+_-]*)', thissel).groups() selmincat = thissel.replace( ''.join( re.search( '([+_-]*)(mvaNOMC|mvaVBFC)([0-9]{1})([+_-]*)', thissel).groups()), '') else: selmincat = thissel if not (selmincat, '-'.join(trg)) in yieldarchive: yieldarchive[(selmincat, '-'.join(trg))] = {} d = dict([(x, {}) for x in keys]) for k, v in d.iteritems(): if not k in yieldarchive[(selmincat, '-'.join(trg))]: yieldarchive[(selmincat, '-'.join(trg))][k] = v for sample in loadedSamples: if opts.debug: l3("%sSample: %s%s" % (purple, sample['tag'], plain)) trg, trg_orig = trigData(opts, sample, trg) cut, cutlabel = write_cuts(sel, trg, sample=sample['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, trigequal=trigTruth(opts.usebool), varskip=opts.skip) if opts.debug: l3("Cut: %s%s%s: %s" % (blue, cutlabel, plain, cut)) inroot('float nCount = %s.count("%s");' % (sample['pointer'], cut)) l3("Entries %s%-40s: N=%10.f %s" % (cyan, "(%s)" % sample['tag'], ROOT.nCount, plain)) yieldarchive[( selmincat, '-'.join(trg_orig))][cat][sample['tag']] = ROOT.nCount if jsoninfo['groups'][sample['tag']] in groupcounts: groupcounts[jsoninfo['groups'][ sample['tag']]] += ROOT.nCount else: groupcounts[jsoninfo['groups'][ sample['tag']]] = ROOT.nCount trg = dc(trg_orig) yieldarchive[(selmincat, '-'.join(trg))][cat].update(groupcounts) for group, groupval in groupcounts.iteritems(): l3("Entries %s%-40s: N=%10.f %s" % (purple, "(%s)" % group, groupval, plain)) print allkeys = [] for y in yieldarchive.itervalues(): for tag in y: allkeys += [str(x) for x in y[tag].keys()] allkeys = list(set(allkeys)) #print allkeys printYieldTable( opts, yieldarchive, sorted(['Data', 'DataV', 'QCD', 'ZWJets', 'Tall', 'VBF125', 'GF125'], key=lambda x: (x[0:3], len(x), x))) printYieldTable( opts, yieldarchive, sorted(list( set(allkeys) - set([ 'Data', 'DataV', 'QCD', 'ZJets', 'TTJets', 'singleT', 'WJets', 'VBF125', 'GF125' ])), key=lambda x: (x[0:3], len(x), x))) if opts.latex: printYieldTableLatex( opts, yieldarchive, sorted( ['Data', 'DataV', 'QCD', 'ZWJets', 'Tall', 'VBF125', 'GF125'], key=lambda x: (x[0:3], len(x), x))) if opts.latex: printYieldTableLatex( opts, yieldarchive, sorted(list( set(allkeys) - set([ 'Data', 'DataV', 'QCD', 'Tall', 'ZWJets', 'VBF125', 'GF125' ])), key=lambda x: (x[0:3], len(x), x)))
def mkTemplateFunctions(): global paves mp = parser() opts,fout,samples = main(mp,False,False,True) jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() TYPE = opts.typetag samples = INTERNALpicksamples(opts,jsons) hDat = INTERNALhistograms(opts) hQcd = INTERNALhistograms(opts) can = TCanvas('profiles','profiles',900,750) #can.Divide(2,1) ln = INTERNALline("1",float(opts.fBound[0]),float(opts.fBound[1])) for iTag,Tag in enumerate(opts.catTags): selsamples = [s for s in samples if s['incarnation']==Tag] fins = [x['tfile'] for x in selsamples] l1('Running for %s'%Tag) can.cd(1 if 'NOM' in Tag else 2) leg = TLegend(0.75,0.5,1.-gPad.GetRightMargin()-0.05,1.-gPad.GetTopMargin()-0.015) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextSize(0.045) leg.SetTextFont(42) leg.SetY1(leg.GetY2()-2*leg.GetTextSize()*1.25) l2("Running for <mbbReg>") fout.cd() hQcd[Tag] = TProfile("hProf_sel%s_%s"%(Tag,TYPE),"hProf_sel%s_%s"%(Tag,TYPE),25,-0.15,0.15) hDat[Tag] = TProfile("hProf_sel%s_%s"%(Tag,"Data"),"hProf_sel%s_%s"%(Tag,"Data"),50,-0.15,0.15) h = hDat[Tag] h = INTERNALstyleHist(h,0,markers,colours,TYPE) h = hQcd[Tag] h = INTERNALstyleHist(h,0,markers,colours,TYPE) can.cd() for ifin,fin in enumerate(fins): if "QCD" in fin.GetName(): h = hQcd[Tag] else: h = hDat[Tag] if "VBF" in fin.GetName(): continue fout.cd() can.cd(1 if 'NOM' in Tag else 2) l4('Sample: %s'%fin.GetName()) CUT1 = "mbbReg[%d] > %.1f && mbbReg[%d] < %.1f"%(1 if 'NOM' in Tag else 2,60,1 if 'NOM' in Tag else 2,170) CUT2,cutlabel = write_cuts(["None"],["None"],reftrig=["None"],sample=jsons['samp']['files'][os.path.split(fin.GetName())[1]]['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.complexWghts[(Tag,'old')],trigequal=trigTruth(opts.usebool)) l4('Cutting with: (%s)*%s'%(CUT1,CUT2)) tin = fin.Get("Hbb/events") l3('Drawing mbbReg[%d] --> %s'%(1 if 'NOM' in Tag else 2,h.GetName())) tin.Draw("mbbReg[%d]:%s>>+%s"%(1 if 'NOM' in Tag else 2,"mvaZ" if 'NOM' in Tag else "mvaVBF",h.GetName()),TCut(CUT1)*TCut(CUT2),"prof") h.Write(h.GetTitle(),TH1.kOverwrite) gPad.SetGrid(0,1) gPad.RedrawAxis() hQcd[Tag].SetMarkerSize(1.0) hQcd[Tag].SetMarkerStyle(20) hQcd[Tag].SetMarkerColor(kBlack) hDat[Tag].GetXaxis().SetTitleOffset(1.1) hDat[Tag].DrawCopy() hQcd[Tag].DrawCopy("same") epave("Z selection",gPad.GetLeftMargin()+0.01,1.-0.5*gPad.GetTopMargin(),"left",1,0.048) epave("%.1f fb^{-1} (8 TeV)"%(19.8 if 'NOM' in Tag else 18.3),1.-gPad.GetRightMargin()-0.01,1.-0.5*gPad.GetTopMargin(),"right",0,0.048) line = -0.6 if 'NOM' in Tag else -0.1 tl = TLine(line,70,line,170) tl.SetLineStyle(kDashed) tl.SetLineColor(kGray+2) tl.Draw() paves += [tl] leg.Clear() a = leg.AddEntry(hDat[Tag],"Data","PL") a.SetTextColor(kBlue+2) a = leg.AddEntry(hQcd[Tag],"QCD","PL") a.SetTextColor(kBlack) leg.Draw() paves += [leg] gPad.RedrawAxis() can.SaveAs("mbbRegProfileZ.pdf") # clean for f in samples: if f['tfile']: f['tfile'].Close() fout.Close()
def mkTemplateFunctions(): mp = parser() opts, fout, samples = main(mp, False, False, True) sels = ['NOM', 'VBF'] jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() selsamples = INTERNALpicksamples(opts, jsons) can = TCanvas("main", "main") hProf = INTERNALhistograms(opts, sels, jsons) #INTERNALcanvases(opts) l1("Creating profiles") if not opts.read: for isel, sel in enumerate(sels): ssel = [s for s in selsamples if sel in s['fname']] for s in ssel: l2("Running for %s" % s['tag']) cut, cutlabel = write_cuts(["None"], ["None"], reftrig=["None"], sample=s['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.complexWghts[(sel, 'old')], trigequal=trigTruth(opts.usebool)) cut = re.findall('\*.*', cut)[0][2:-1].replace('pu', 'ev.pu').replace( 'trig', 'ev.trig') if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s" % (s['tag'], blue, cutlabel, plain, cut)) nevents = s['tree'].GetEntries() for iev, ev in enumerate(s['tree']): if iev % int(nevents / 5) == 0: l3("%10s/%10s" % (iev, nevents)) wght = eval(cut) mva = ev.mvaNOM if sel == 'NOM' else ev.mvaVBF mbb = ev.mbbReg[1] if sel == 'NOM' else ev.mbbReg[2] if sel == 'NOM': if mva < -0.6: continue if mbb < 80. or mbb > 200.: continue if sel == 'VBF': if mva < -0.1: continue if mbb < 80. or mbb > 200.: continue for v in opts.variable: if '1' in v and not sel == 'NOM' and not 'Btag' in v and not 'QGL' in v: continue if '2' in v and not sel == 'VBF' and not 'Btag' in v and not 'QGL' in v: continue if 'mva' in v and not sel in v: continue v = jsons['vars']['variables'][v] h = hProf[(sel, v['var'], 'QCD' if 'QCD' in s['fname'] else 'DAT')] h.Fill( mva, eval("ev.%s" % (v['root'] if not '[btag' in v['root'] else v['root'].replace('[btag', '[ev.btag'))), wght) else: for k in hProf.iterkeys(): hProf[k] = fout.Get("h%s_sel%s_%s" % (k[2], k[0], k[1])) k = list(set([x[0:2] for x in hProf.iterkeys()])) for ik in k: low = min( hProf[(ik[0], ik[1], 'QCD')].GetBinContent(hProf[(ik[0], ik[1], 'QCD')].GetMinimumBin()), hProf[(ik[0], ik[1], 'DAT')].GetBinContent(hProf[(ik[0], ik[1], 'DAT')].GetMinimumBin())) hig = max( hProf[(ik[0], ik[1], 'QCD')].GetBinContent(hProf[(ik[0], ik[1], 'QCD')].GetMaximumBin()), hProf[(ik[0], ik[1], 'DAT')].GetBinContent(hProf[(ik[0], ik[1], 'DAT')].GetMaximumBin())) med = hProf[(ik[0], ik[1], 'DAT')].GetMean(2) dif = hig - low setlow = med - 2 * dif sethig = med + 2 * dif if 'mbb' in ik[1]: setlow = 110 if 'mbb' in ik[1]: sethig = 160 hProf[(ik[0], ik[1], 'DAT')].GetYaxis().SetRangeUser(setlow, sethig) hProf[(ik[0], ik[1], 'DAT')].Draw() hProf[(ik[0], ik[1], 'QCD')].SetMarkerStyle(25) hProf[(ik[0], ik[1], 'QCD')].SetMarkerColor(kBlue) #for ibin in range(1,hProf[(ik[0],ik[1],'QCD')].GetNbinsX()+1): hProf[(ik[0],ik[1],'QCD')]. hProf[(ik[0], ik[1], 'QCD')].Draw("same L") leg = TLegend(0.6, 0.6, 0.9, 0.9, "%s selection" % (ik[0].strip('sel'))) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.045) leg.AddEntry(hProf[(ik[0], ik[1], 'DAT')], 'Data') leg.AddEntry(hProf[(ik[0], ik[1], 'QCD')], 'QCD') leg.SetY1(leg.GetY2() - (leg.GetNRows() + 1) * 0.05) leg.Draw() can.SaveAs("plots/%s.png" % hProf[(ik[0], ik[1], 'DAT')].GetName().replace('hDAT', 'h')) fout.cd() for h in hProf.itervalues(): h.Write(h.GetName(), TH1.kOverwrite) # clean fout.Close()
def do_fill(opts, fout, s, v, sel, trg, ref, KFWght=None, skipWght=None): # info l2("Filling for %s" % v['var']) # containers cuts = {} cutlabels = {} names = {} canvas = TCanvas("cfill", "cfill", 1200, 1000) # trg trg, trg_orig = trigData(opts, s, trg) # names jsoninfo = json.loads(filecontent(opts.jsoninfo)) names['global'] = getNames(opts, s, v, sel, trg_orig, ref) keepMapInfo = None if skipWght == True: keepMapInfo = [ x for x in opts.weight[1] if (x[0:3] == 'MAP' or x[0:3] == 'FUN' or x[0:3] == 'COR') ] opts.weight[1] = [ dc(x) for x in opts.weight[1] if not (x[0:3] == 'MAP' or x[0:3] == 'FUN' or x[0:3] == 'COR') ] wpars = weightInfo(opts.weight, KFWght) # TEffi object TEffi = TEffiType(v) # looping over different tags for tag in ['Num', 'Den']: # cuts cuts[tag], cutlabels[tag] = write_cuts( sel, trg if tag == 'Num' else ['None'], reftrig=ref, sample=s['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, KFWght=KFWght, varskip=opts.skip + [v['root']], trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: %s%s%s: %s" % (tag, blue, cutlabels[tag], plain, cuts[tag])) # loading/filling names[tag] = getNames(opts, s, v, sel, trg_orig if tag == 'Num' else ['None'], ref, tag) if not s['tag'] in TEffi.h[tag] or TEffi.h[tag][s['tag']] == None: fout.Delete(names[tag]['hist']) TEffi.fill(s['pointer'], s['tag'], tag, names[tag], cuts[tag]) if opts.debug: l3("%sFilled: %40s(N=%9d, Int=%9d)%s" % (yellow, TEffi.h[tag][s['tag']].GetName(), TEffi.h[tag][s['tag']].GetEntries(), TEffi.h[tag][s['tag']].Integral(), plain)) # consider ratio tag = 'Rat' names[tag] = getNames(opts, s, v, sel, trg_orig, ref, tag) TEffi.effi(names[tag], jsoninfo['colours'][s['tag']], markerStyle(s['tag'], jsoninfo['markers'][s['tag']], opts)) # write histogram to file path = "%s/%s/%s" % ('turnonCurves', wpars, names['global']['path-turnon']) TEffi.write(fout, path) # clean #TEffi.delete() canvas.Close() trg = dc(trg_orig) if skipWght == True: opts.weight[1] += keepMapInfo
def mkTemplateFunctions(): mp = parser() opts,fout,samples = main(mp,False,False,True) jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() TYPE = opts.typetag samples = INTERNALpicksamples(opts,jsons) hDat, hRat, fFit, gUnc, fitter, covariant = INTERNALhistograms(opts) c1, c2, c = INTERNALcanvases(opts) can = TCanvas("main","main") ln = INTERNALline("1",float(opts.fBound[0]),float(opts.fBound[1])) for iTag,Tag in enumerate(opts.catTags): nCat = int(opts.mvaBins['mva%s'%Tag][0])-1 rCat = 0 if Tag=='NOM' else 4 selsamples = [s for s in samples if s['incarnation']==Tag] fins = [x['tfile'] for x in selsamples] l1('Running for %s - QCD'%Tag) c2[Tag] = TCanvas('transfer_sel%s_%s'%(Tag,TYPE),'transfer_sel%s_%s'%(Tag,TYPE),600*(nCat-1),600) c2[Tag].Divide(nCat-1,1) leg = INTERNALlegend(Tag) leg.SetX1(0.7) lleg = dict(((Tag,iCat+1),INTERNALlegend(Tag)) for iCat in range(nCat-1)) for iCat in range(nCat): jCat = iCat + rCat if opts.merge: if iCat==nCat-1: continue if iCat==nCat-2: jCat = jCat*10+jCat+1 l2('Running for CAT%d'%jCat) # v = jsons['vars']['variables'][opts.variables[opts.variables.keys()[iTag]][0]] # regular hists # if v['xs']: hDat[(Tag,iCat)] = TH1F('hDat_sel%s_CAT%d'%(Tag,iCat),'hDat_sel%s_CAT%d'%(Tag,iCat),int(v['nbins_x']),v['xs']) # else: hDat[(Tag,iCat)] = TH1F('hDat_sel%s_CAT%d'%(Tag,iCat),'hDat_sel%s_CAT%d'%(Tag,iCat),int(v['nbins_x']),int(v['xmin']),int(v['xmax'])) hDat[(Tag,iCat)] = TH1F('hDat_sel%s_CAT%d_%s'%(Tag,jCat,TYPE),'hDat_sel%s_CAT%d_%s'%(Tag,jCat,TYPE),int(float(opts.fBound[1]) - float(opts.fBound[0]))/(10 if 'Dat' in TYPE else 20),float(opts.fBound[0]),float(opts.fBound[1])) print hDat[(Tag,iCat)].GetBinWidth(1) h = hDat[(Tag,iCat)] h = INTERNALstyleHist(h,iCat,markers,colours,TYPE) can.cd() # cut CUT = TCut("mva%s>%.2f && mva%s<=%.2f"%(Tag,float(opts.mvaBins["mva%s"%Tag][1][iCat+1]),Tag,float(opts.mvaBins["mva%s"%Tag][1][iCat+2]))) if opts.merge: CUT = TCut("mva%s>%.2f && mva%s<=%.2f"%(Tag,float(opts.mvaBins["mva%s"%Tag][1][iCat+1]),Tag,float(opts.mvaBins["mva%s"%Tag][1][iCat+3]))) ###CUT = TCut("mvaNOM>%.2f && mvaNOM<=%.2f"%(float(opts.mvaBins["mva%s"%Tag][1][iCat+1]),float(opts.mvaBins["mva%s"%Tag][1][iCat+2]))) l3('Cutting with: %s'%CUT) for fin in fins: l4('Sample: %s'%fin.GetName()) CUT2,cutlabel = write_cuts(["None"],["None"],reftrig=["None"],sample=jsons['samp']['files'][os.path.split(fin.GetName())[1]]['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.complexWghts[(Tag,'old')],trigequal=trigTruth(opts.usebool)) l4('Cutting with: %s'%CUT2) # drawing tin = fin.Get("Hbb/events") l3('Drawing mbbReg[%d] --> %s'%(1 if 'NOM' in Tag else 2,h.GetName())) tin.Draw("mbbReg[%d]>>+%s"%(1 if 'NOM' in Tag else 2,h.GetName()),TCut(CUT)*TCut(CUT2)) fout.cd() ###tin.Draw("mbbReg[1]>>%s"%(h.GetName()),CUT) if not opts.unblind: h = INTERNALblind(h,100.,150.) h.Scale(1./h.Integral()) h.SetDirectory(0) # ratio hist hRat[(Tag,iCat)] = h.Clone(h.GetName().replace('hDat','hRat')) r = hRat[(Tag,iCat)] r.SetTitle(r.GetName()) r = INTERNALstyleHist(r,iCat,markers,colours,TYPE) # dividing by control CAT ##print "Divide: ", hDat[(Tag,0)].GetName() r.Divide(hDat[(Tag,0)]) r.SetDirectory(0) # fit fFit[(Tag,iCat)] = TF1(h.GetName().replace('hDat','fitRatio'),'pol1',float(opts.fBound[0]),float(opts.fBound[1])) f = fFit[(Tag,iCat)] f.SetLineColor(colours[iCat]) h.Write(h.GetTitle(),TH1.kOverwrite) if not iCat==0: r.Fit(f,"RQ") fitter = TVirtualFitter.GetFitter() covariant = TMatrixDSym() covariant.Use(fitter.GetNumberTotalParameters(),fitter.GetCovarianceMatrix()) nBins = 200 dx = (r.GetBinLowEdge(r.GetNbinsX()+1)-r.GetBinLowEdge(1))/float(nBins) vx = array('f',[r.GetBinLowEdge(1)+(i+1)*dx for i in range(nBins)]) vy = array('f',[f.Eval(vx[i]) for i in range(nBins)]) vex = array('f',[0.0]*nBins) vey = array('f',[sqrt(pow(vx[i],2)*covariant(1,1)+2.0*vx[i]*covariant(0,1)+covariant(0,0)) for i in range(nBins)]) gUnc[(Tag,iCat)] = TGraphErrors(nBins,vx,vy,vex,vey) g = gUnc[(Tag,iCat)] g.SetFillColor(colours[iCat]) g.SetFillStyle(3004) c1[Tag].cd() h.Draw('same E') hDat[(Tag,0)].GetYaxis().SetRangeUser(0.0,max(h.GetMaximum(),hDat[(Tag,0)].GetMaximum())*1.02) gPad.Update() leg.AddEntry(h,'CAT%d'%jCat,'P') c2[Tag].cd(iCat) ln.Draw() g.Draw('same E3') r.Draw('same') ll = lleg[(Tag,iCat)] ll.AddEntry(h,'CAT%d / CAT%d'%(jCat,rCat),'P') ll.SetY1(ll.GetY2()-ll.GetNRows()*0.06) ll.SetTextSize(0.04) ll.Draw() r.GetYaxis().SetRangeUser(0.0,2.0) r.Write(r.GetTitle(),TH1.kOverwrite) g.Write(r.GetTitle().replace('hRat','gRat'),TH1.kOverwrite) else: c1[Tag] = TCanvas('MbbShape_sel%s_%s'%(Tag,TYPE),'MbbShape_sel%s_%s'%(Tag,TYPE),900,600) c1[Tag].cd() gPad.SetLeftMargin(0.12) gPad.SetRightMargin(0.03) h.GetYaxis().SetTitleOffset(0.8) h.SetFillColor(kGray) h.Draw('hist') leg.AddEntry(h,'CAT%d'%jCat,'F') fout.cd() f.Write(f.GetName(),TH1.kOverwrite) c1[Tag].cd() leg.SetY1(leg.GetY2()-leg.GetNRows()*0.06) leg.Draw() c1[Tag].SaveAs('plots/transfer/%s%s.png'%(c1[Tag].GetName(),"_merged" if opts.merge else "")) c1[Tag].SaveAs('plots/transfer/%s%s.pdf'%(c1[Tag].GetName(),"_merged" if opts.merge else "")) c2[Tag].SaveAs('plots/transfer/%s%s.png'%(c2[Tag].GetName(),"_merged" if opts.merge else "")) c2[Tag].SaveAs('plots/transfer/%s%s.pdf'%(c2[Tag].GetName(),"_merged" if opts.merge else "")) #c.SaveAs('plots/transfer/%s.png'%c.GetName()) # clean for f in samples: f['tfile'].Close() fout.Close()
def mkSigOverBkg(opts, samples, sel, trg): # cut cut, cutlabel = write_cuts(sel, trg, reftrig=["None"], sample="DataA", jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, trigequal=trigTruth(opts.usebool)) if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s" % ("DataA", blue, cutlabel, plain, cut)) # category cat = '' mbb = '' print '-'.join(sel) if 'VBF' in '-'.join(sel): cat = str( int(re.search('(mvaVBFC)([0-9]*)', '-'.join(sel)).group(2)) + 3) if int(re.search('(mvaVBFC)([0-9]*)', '-'.join(sel)).group(2)) > 0 else "-2" mbb = 'mbbReg[2]' elif 'NOM' in '-'.join(sel): cat = str( int(re.search('(mvaNOMC)([0-9]*)', '-'.join(sel)).group(2)) - 1) mbb = 'mbbReg[1]' elif 'None' == '-'.join(sel): cat = "ALL" mbb = '' else: sys.exit(Red + "Don't know how to handle this selection: %s. Exiting" % ('-'.join(sel)) + plain) # limited categories if cat == 'ALL' or not (int(cat) >= 0 and int(cat) < 7): return -99, None # container numbers = {} # input if not opts.wsig == '': fin = TFile.Open(opts.wsig, "read") workspace = fin.Get("w") mean = workspace.var("mean_m125_CAT%s" % cat).getVal() fwhm = workspace.var("fwhm_m125_CAT%s" % cat).getVal() lower = mean - fwhm / 2. upper = mean + fwhm / 2. elif not (opts.xmin == '' or opts.xmax == '' or opts.xcen == ''): mean = opts.xcen fwhm = 0 lower = opts.xmin upper = opts.xmax else: sys.exit(Red + 'Can\'t continue without boundaries. Exiting.' + plain) l2("Looking in [%.4f,%.4f] around %.4f" % (lower, upper, mean)) numbers['nlower'] = lower numbers['nupper'] = upper numbers['nmean'] = mean # extra cut extracut = ["%s>=%.6f" % (mbb, lower), "%s<=%.6f" % (mbb, upper)] countSig = 0.0 countBkg = 0.0 for s in samples: cut, cutlabel = write_cuts(sel, trg, reftrig=["None"], sample=s['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, trigequal=trigTruth(opts.usebool), extra=extracut) if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s" % (s['tag'], blue, cutlabel, plain, cut)) fsIn = TFile.Open( opts.globalpath + '/' + s['fname'].replace('flatTree', '%sFlatTree' % opts.flatprefix). replace('.root', '%s.root' % opts.flatsuffix) if not ( opts.flatprefix == "" or opts.flatsuffix == "" ) else opts.globalpath + s['fname']) tsIn = fsIn.Get("Hbb/events") h = TH1F("hcount", "hcount", 1, 0, 1) tsIn.Draw("0.5>>hcount", cut) count = h.Integral() numbers[s['tag']] = count if any([x in s['tag'] for x in ['VBF', 'GluGlu']]): countSig += count elif any([x in s['tag'] for x in ['Data']]): countBkg += count else: continue fsIn.Close() numbers['bkg'] = countBkg numbers['sig'] = countSig numbers['SoB'] = countSig / countBkg numbers['SosB'] = countSig / sqrt(countBkg) return cat, numbers
def mkSBSigTrees(): # initialise global paves mp = parser() opts, fout = main.main(mp, True) fname = fout.GetName() fout.Close() os.remove(fname) prefix = basepath + '/../mvd' basetree = "flatTree_VBFPowheg125.root" makeDirs('/'.join([prefix, "rootfiles"])) makeDirs('/'.join([prefix, "plots"])) ###################################################################################################################################################### ###################################################################################################################################################### # step 01: NOM/PRK selection if opts.step == 1: fin = TFile.Open('/'.join([opts.globalpath, basetree]), "read") tin = fin.Get("Hbb/events") l1("Step 01: %s selection" % opts.sel) fout = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace(".root", "_EvIntStep01_%s.root" % opts.sel) ]), "recreate") makeDirsRoot(fout, "Hbb") gDirectory.cd("Hbb") #cut,label = write_cuts(opts.selection[0],opts.trigger[0],reftrig=[],jsoncuts=opts.jsoncuts,jsonsamp=opts.jsonsamp,sample="VBF125",weight=opts.weight,trigequal=trigTruth(True)) cut, label = write_cuts([], opts.trigger[0], reftrig=[], jsoncuts=opts.jsoncuts, jsonsamp=opts.jsonsamp, sample="VBF125", weight=opts.weight, trigequal=trigTruth(True)) l2("Cut %s: %s" % (opts.sel, cut)) tout = tin.CopyTree(cut) fout.Write() fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 2: fin = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace(".root", "_EvIntStep01_%s.root" % opts.sel) ]), "read") tin = fin.Get("Hbb/events") l1("Step 02: %s: eta/btag variable only slimming" % (opts.sel)) tin.SetBranchStatus('*', 0) for b in [ 'jetBtag', 'btagIdx', 'jetEta', 'etaIdx', 'partonId', 'partonMatchIdx', 'partonMatchDR', 'jetPt', 'jetPhi', 'jetMass', 'blikNOMIdx', 'blikVBFIdx', 'mqq', 'mbb', 'dEtaqq' ]: tin.SetBranchStatus(b, 1) fout = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace(".root", "_EvIntStep02_%s.root" % (opts.sel)) ]), "recreate") makeDirsRoot(fout, "Hbb") gDirectory.cd("Hbb") tout = tin.CloneTree() fout.Write(fout.GetName(), TH1.kOverwrite) fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 3: fin = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace(".root", "_EvIntStep02_%s.root" % (opts.sel)) ]), "read") tin = fin.Get("Hbb/events") nin = tin.GetEntriesFast() l1("Step 03%s: %s: jets tree transformation" % (" (Alt)" if opts.alt else "", opts.sel)) fout = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace( ".root", "_EvIntStep03%s_%s.root" % ("Alt" if opts.alt else "", opts.sel)) ]), "recreate") makeDirsRoot(fout, "Hbb") gDirectory.cd("Hbb") v_eta, v_btag, v_pt, v_phi, v_mass = zeros(1, dtype='float32'), zeros( 1, dtype='float32'), zeros(1, dtype='float32'), zeros( 1, dtype='float32'), zeros(1, dtype='float32') v_etaIdx, v_btagIdx, v_pid, v_ptIdx = zeros(1, dtype='int32'), zeros( 1, dtype='int32'), zeros(1, dtype='int32'), zeros(1, dtype='int32') # new branches tout = TTree("jets", "jets") tout.Branch("eta", v_eta, "eta/F") tout.Branch("etaIdx", v_etaIdx, "etaIdx/I") tout.Branch("btag", v_btag, "btag/F") tout.Branch("btagIdx", v_btagIdx, "btagIdx/I") tout.Branch("pid", v_pid, "pid/I") tout.Branch("ptIdx", v_ptIdx, "ptIdx/I") tout.Branch("pt", v_pt, "pt/F") tout.Branch("phi", v_phi, "phi/F") tout.Branch("mass", v_mass, "mass/F") # loop over tree tref = now() for iEv, Ev in enumerate(tin): if iEv % 20000 == 0: [m, s], p = testimate(tref, iEv, nin) print "%6d/%-10d (est. %dm %ds, %.1f%%)" % (iEv, nin, m, s, p) if opts.nentries > 0 and iEv > opts.nentries: break # loop over partons for pj in range(len(Ev.partonMatchDR)): if Ev.partonMatchDR[pj] > 0.25: continue # if Ev.partonMatchIdx[pj] > len(Ev.jetPt): continue ptIdx = Ev.partonMatchIdx[pj] v_ptIdx[0] = Ev.partonMatchIdx[pj] v_pid[0] = Ev.partonId[pj] v_btag[0] = Ev.jetBtag[ptIdx] v_pt[0] = Ev.jetPt[ptIdx] v_eta[0] = Ev.jetEta[ptIdx] v_phi[0] = Ev.jetPhi[ptIdx] v_mass[0] = Ev.jetMass[ptIdx] if opts.alt: if (ptIdx in list(Ev.btagIdx)) and (ptIdx in list( Ev.etaIdx)): v_btagIdx[0] = list(Ev.btagIdx).index(ptIdx) v_etaIdx[0] = list(Ev.etaIdx).index(ptIdx) else: continue else: if ptIdx < len(list(Ev.btagIdx)): v_btagIdx[0] = Ev.btagIdx[ptIdx] v_etaIdx[0] = Ev.etaIdx[ptIdx] tout.Fill() # save fout.Write(fout.GetName(), TH1.kOverwrite) ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 4: l1("Step 04%s: %s: blik training" % (" (Alt)" if opts.alt else "", opts.sel)) fin = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace( ".root", "_EvIntStep03%s_%s.root" % ("Alt" if opts.alt else "", opts.sel)) ]), "read") tin = fin.Get("Hbb/jets") fout = TFile.Open( "rootfiles/bjetId_%s_MVA%s.root" % (opts.sel, "Alt" if opts.alt else ""), "recreate") sigCut = TCut("abs(pid) == 5") bkgCut = TCut("abs(pid) != 5") presel = TCut( "btagIdx<4 && etaIdx<4 && etaIdx>-1 && ptIdx<4 && btagIdx>-1 && ptIdx>-1" ) Nin = tin.GetEntries() N = 100000 l1("Input tree: %d events" % Nin) l1("Using %d events" % N) factory = TMVA.Factory( "factory_%s%s_" % (opts.sel, "_Alt" if opts.alt else ""), fout, "!V:!Silent:Color:DrawProgressBar:Transformations=I;G:AnalysisType=Classification" ) factory.SetInputTrees(tin, sigCut, bkgCut) factory.AddVariable("btag", 'F') factory.AddVariable("eta", 'F') factory.AddVariable("btagIdx", 'I') factory.AddVariable("etaIdx", 'I') factory.PrepareTrainingAndTestTree( presel, "nTrain_Signal=%d:nTrain_Background=%d:nTest_Signal=%d:nTest_Background=%d" % (N, N, N, N)) factory.BookMethod(TMVA.Types.kLikelihood, "Likelihood") factory.BookMethod(TMVA.Types.kBDT, "BDT_GRAD2", "NTrees=600:nCuts=25:BoostType=Grad:Shrinkage=0.2") factory.TrainAllMethods() factory.TestAllMethods() factory.EvaluateAllMethods() fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 5: l1("Step 05%s: %s: Sig/Bkg plots" % (" (Alt)" if opts.alt else "", opts.sel)) fin = TFile.Open( prefix + "/rootfiles/flatTree_VBFPowheg125_EvIntStep03%s_%s.root" % ("Alt" if opts.alt else "", opts.sel), "read") tin = fin.Get("Hbb/jets") fout = TFile.Open( prefix + "/rootfiles/flatTree_VBFPowheg125_EvIntStep05%s_%s.root" % ("Alt" if opts.alt else "", opts.sel), "recreate") gStyle.SetOptStat(0) gStyle.SetOptTitle(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C" % basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.02) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleSize(0.05, "XY") gStyle.SetLabelSize(0.04, "XY") gStyle.SetTitleOffset(1.35, "Y") gStyle.SetGridColor(17) # fc = {"sig": kBlue - 9, "bkg": kRed} fs = {"sig": 1001, "bkg": 3004} lc = {"sig": kBlue - 7, "bkg": kRed} Ax = [ "#eta", "#eta rank", "CSV b-tag", "CSV b-tag rank", "(old) b-likelihood", "(old) b-likelihood rank", "b-likelihood", "b-likelihood rank" ] Ay = [ "N / (0.2)", "N / (1)", "N / (0.1)", "N / (1)", "N / (0.04)", "N / (1)", "N / (0.04)", "N / (1)" ] AN = [50, 4, 110, 4, 50, 4, 50, 4] Ami = [-5, -0.5, -10, -0.5, -1, -0.5, -1, -0.5] Ama = [5, 3.5, 1, 3.5, 1, 3.5, 1, 3.5] Av = [ "jetEta", "etaIdx", "jetBtag", "btagIdx", "blikNOM", "blikNOMIdx", "myblikNOM", "myblikNOMIdx" ] hs = {} btagbinsinput = [-10, -9, -1, 0] for i in range(1, int(1. / 0.05) + 1): btagbinsinput += [round(float(i) * 0.05, 2)] btagbins = array('f', btagbinsinput) for a1 in ["sig", "bkg"]: for i2, a2 in enumerate(["eta", "etaIdx", "btag", "btagIdx"]): x, y, N, mi, ma = Ax[i2], Ay[i2], AN[i2], Ami[i2], Ama[i2] if not a2 == "btag": hs["%s_%s" % (a1, a2)] = eval( 'TH1F("h%s_%s","h%s_%s;%s;%s",%d,%f,%f)' % (a1, a2, a1, a2, x, y, N, mi, ma)) else: hs["%s_%s" % (a1, a2)] = TH1F( "h%s_%s" % (a1, a2), "h%s_%s;%s;%s" % (a1, a2, x, y), len(btagbins) - 1, btagbins) hs["%s_%s" % (a1, a2)].SetFillColor(fc[a1]) hs["%s_%s" % (a1, a2)].SetFillStyle(fs[a1]) hs["%s_%s" % (a1, a2)].SetLineColor(lc[a1]) # hs["sig_etaIdx"].GetXaxis().SetNdivisions(4) hs["sig_btagIdx"].GetXaxis().SetNdivisions(4) TGaxis.SetMaxDigits(4) legs = [ TLegend( 1. - gStyle.GetPadRightMargin() - 0.03 - 0.30, 1. - gStyle.GetPadTopMargin() - 0.03, 1. - gStyle.GetPadRightMargin() - 0.03, 1. - gStyle.GetPadTopMargin() - 0.03 - 0.055 * 3, "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B")) ] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(4): legs += [deepcopy(legs[0])] # for var in ["eta", "etaIdx", "btag", "btagIdx"]: for typ in ["sig", "bkg"]: tin.Draw("%s>>h%s_%s" % (var, typ, var), "abs(pid)==5" if typ == "sig" else "abs(pid)!=5") # for h in hs.itervalues(): h.Scale(1. / h.Integral()) h.GetYaxis().SetRangeUser( 0.0 if not "Idx" in h.GetName() else 0.1, h.GetBinContent(h.GetMaximumBin()) * 1.40) hs["sig_btag"] = btagTrafo(hs["sig_btag"], "sig", fc["sig"], fs["sig"], lc["sig"]) hs["bkg_btag"] = btagTrafo(hs["bkg_btag"], "bkg", fc["bkg"], fs["bkg"], lc["bkg"]) c = TCanvas("c", "c", 1800, 1300) c.Divide(2, 2) for a1 in ["sig", "bkg"]: for i2, a2 in enumerate(["btag", "btagIdx", "eta", "etaIdx"]): c.cd(i2 + 1) h = hs["%s_%s" % (a1, a2)] h.Draw("" if a1 == "sig" else "same") gPad.SetGrid(1, 1) legs[i2].AddEntry(h, "signal" if a1 == "sig" else "background", "F") if a1 == "bkg": legs[i2].Draw() if a2 == "btag": gPad.SetLogy(1) epave("-1", -0.08, 0.000306) epave("-10", -0.135, 0.000306) # makeDirs(prefix + "/plots") c.SaveAs(prefix + "/plots/EvIntDiscriminant_variablesIn%s_%s.pdf" % ("Alt" if opts.alt else "", opts.sel)) fout.Write(fout.GetName(), TH1.kOverwrite) fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 6: l1("Step 06%s: %s: weights filling & output plots." % (" (Alt)" if opts.alt else "", opts.sel)) gROOT.SetBatch(1) gStyle.SetOptStat(0) gStyle.SetOptTitle(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C" % basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.05) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleOffset(1.35, "Y") gStyle.SetPalette(1) gStyle.SetGridColor(17) TGaxis.SetMaxDigits(4) gStyle.SetTitleSize(0.05, "XYZ") gStyle.SetLabelSize(0.04, "XYZ") gStyle.SetTitleOffset(1.35, "Y") gStyle.SetGridColor(17) # fc = {"sig": kBlue - 9, "bkg": kRed} fs = {"sig": 1001, "bkg": 3004} lc = {"sig": kBlue - 7, "bkg": kRed} Ax = [ "#eta", "#eta rank", "CSV b-tag", "CSV b-tag rank", "(old) b-likelihood", "(old) b-likelihood rank", "b-likelihood", "b-likelihood rank", "|#eta|", "bbtag", "bblik" ] Ay = [ "N / (0.2)", "N / (1)", "N / (0.1)", "N / (1)", "N / (0.08)", "N / (1)", "N / (0.08)", "N / (1)", "N / (0.1)", "N / (0.02)", "N / (0.01)" ] AN = [50, 4, 110, 4, 25, 4, 25, 4, 100, 550, 200] Ami = [-5, -0.5, -10, -0.5, -1, -0.5, -1, -0.5, 0, -10, -1] Ama = [5, 3.5, 1, 3.5, 1, 3.5, 1, 3.5, 5, 1, 1, 1] Av = [ "jetEta", "etaIdx", "jetBtag", "btagIdx", "blik%s" % ("NOM" if opts.sel == "NOM" else "VBF"), "blik%sIdx" % ("NOM" if opts.sel == "NOM" else "VBF"), "blik", "blikIdx", "abseta", "jetBtag", "blik" ] hs = {} btagbinsinput = [-10, -9, -1, 0] for i in range(1, int(1. / 0.05) + 1): btagbinsinput += [round(float(i) * 0.05, 2)] btagbins = array('f', btagbinsinput) for a1 in ["sig", "bkg"]: for i2, a2 in enumerate([ "eta", "etaIdx", "btag", "btagIdx", "blik", "blikIdx", "blik2", "blik2Idx", "abseta", "bbtag", "bblik" ]): x, y, N, mi, ma = Ax[i2], Ay[i2], AN[i2], Ami[i2], Ama[i2] if not a2 == "btag": hs["%s_%s" % (a1, a2)] = eval( 'TH1F("h%s_%s","h%s_%s;%s;%s",%d,%f,%f)' % (a1, a2, a1, a2, x, y, N, mi, ma)) else: hs["%s_%s" % (a1, a2)] = TH1F( "h%s_%s" % (a1, a2), "h%s_%s;%s;%s" % (a1, a2, x, y), len(btagbins) - 1, btagbins) hs["%s_%s" % (a1, a2)].SetFillColor(fc[a1]) hs["%s_%s" % (a1, a2)].SetFillStyle(fs[a1]) hs["%s_%s" % (a1, a2)].SetLineColor(lc[a1]) # if not opts.replot: fglobal = TFile.Open( '/'.join([ prefix, "rootfiles", basetree.replace(".root", "_EvIntStep02_%s.root" % opts.sel) ]), "read") tglobal = fglobal.Get("Hbb/events") eta, etaIdx, btag, btagIdx = zeros(1, 'float32'), zeros( 1, 'float32'), zeros(1, 'float32'), zeros(1, 'float32') pid = ROOT.vector('int')() reader = TMVA.Reader() if opts.alttag == "" or not ("Kostas" in opts.alttag or "CERN" in opts.alttag): reader.AddVariable("btag", btag) reader.AddVariable("eta", eta) reader.AddVariable("btagIdx", btagIdx) reader.AddVariable("etaIdx", etaIdx) reader.BookMVA( opts.tmva, "weights/factory_%s%s__BDT_GRAD2.weights.xml" % (opts.sel, "_Alt" if opts.alt else "")) elif "Kostas" in opts.alttag: reader.AddVariable("btagIdx", btagIdx) reader.AddVariable("etaIdx", etaIdx) reader.AddVariable("btag", btag) reader.AddVariable("eta", eta) reader.BookMVA( opts.tmva, "kostas/weights/factory_%s__BDT_GRAD2.weights.xml" % opts.sel) elif "CERN" in opts.alttag: reader.AddVariable("btagIdx", btagIdx) reader.AddVariable("etaIdx", etaIdx) reader.AddVariable("btag", btag) reader.AddVariable("eta", eta) reader.BookMVA( opts.tmva, "tmpcern/factory_BCanditate_%s_BDT_GRAD.weights.xml" % opts.sel) # reader.BookMVA(opts.tmva,"weights/kostas.NOM.xml") # blik = ROOT.vector('float')() blikIdx = ROOT.vector('int')() blikmqq = zeros(1, 'float32') blikmbb = zeros(1, 'float32') blikdetaqq = zeros(1, 'float32') # fmvd = TFile.Open( prefix + "/rootfiles/flatTree_VBFPowheg125_EvIntStep04%s_%s.root" % ("Alt" if opts.alt else "", opts.sel), "recreate") makeDirsRoot(fmvd, "Hbb") gDirectory.cd("Hbb") tmvd = tglobal.CloneTree(0) # tmvd.Branch("blik", blik) tmvd.Branch("blikIdx", blikIdx) tmvd.Branch("blikmqq", blikmqq, "blikmqq/F") tmvd.Branch("blikmbb", blikmbb, "blikmbb/F") tmvd.Branch("blikdetaqq", blikdetaqq, "blikdetaqq/F") tmvd.Branch("pid", pid) # nentries = tglobal.GetEntriesFast() tref = now() for iEv, Ev in enumerate(tglobal): blik.resize(4, 0) blikIdx.resize(4, 0) pid.resize(4, 0) # if opts.nentries > 0: if iEv > opts.nentries: break if iEv % 5000 == 0: [m, s], p = testimate(tref, iEv, nentries) print "%8d/%-10d (est. %dm %ds, %.1f%%)" % (iEv, nentries, m, s, p) # for ijet in range(4): eta[0] = Ev.jetEta[ijet] btag[0] = Ev.jetBtag[ijet] if opts.alt: etaIdx[0] = list(Ev.etaIdx).index(ijet) btagIdx[0] = list(Ev.btagIdx).index(ijet) else: etaIdx[0] = Ev.etaIdx[ijet] btagIdx[0] = Ev.btagIdx[ijet] blik[ijet] = float(reader.EvaluateMVA(opts.tmva)) # blikIdxPair = sorted([[ijet, blik[ijet]] for ijet in range(4)], key=lambda (x, y): y, reverse=True) # for ijet in range(4): blikIdx[ijet] = blikIdxPair[ijet][0] # for pj in range(len(Ev.partonMatchDR)): if Ev.partonMatchDR[pj] > 0.25: continue ptIdx = Ev.partonMatchIdx[pj] if ptIdx >= len(Ev.btagIdx): continue pid[ptIdx] = Ev.partonId[pj] # for ijet in range(4): # pidVals = sorted([(x,Ev.partonMatchDR[x]) for x in range(len(Ev.partonMatchIdx)) if (Ev.partonMatchIdx[x]==ijet and Ev.partonMatchDR[x]<0.25)],key=lambda (x,y):(y)) # if len(pidVals)<1: pid[ijet] =-999 # else: pid[ijet] = Ev.partonId[pidVals[0][0]] # if pid[ijet]!=-999: for i2, a2 in enumerate([ "eta", "etaIdx", "btag", "btagIdx", "blik", "blikIdx", "blik2", "blik2Idx", "abseta", "bbtag", "bblik" ]): if a2 == "blik": continue h = hs["%s_%s" % ("sig" if abs(pid[ptIdx]) == 5 else "bkg", a2)] if not Av[i2] in ["blik", "blikIdx", "abseta"]: v = eval( "Ev.%s[%d]" % (Av[i2], ptIdx)) if not "Idx" in a2 else eval( "list(Ev.%s).index(%d)" % (Av[i2], ptIdx)) elif Av[i2] == "blik": v = blik[ptIdx] elif Av[i2] == "blikIdx": v = list(blikIdx).index(ptIdx) elif Av[i2] == "abseta": v = abs(Ev.jetEta[ptIdx]) elif Av[i2] == "bbtag": v = Ev.jetBtag[ptIdx] elif Av[i2] == "bblik": v = blik[ptIdx] h.Fill(v) # # v = [TLorentzVector(),TLorentzVector(),TLorentzVector(),TLorentzVector()] # for j in range(4): # k = blikIdx[j] # v[j].SetPtEtaPhiM(Ev.jetPt[k],Ev.jetEta[k],Ev.jetPhi[k],Ev.jetMass[k]) v = [] for jid in range(4): v += [TLorentzVector()] v[-1].SetPtEtaPhiM(Ev.jetPt[jid], Ev.jetEta[jid], Ev.jetPhi[jid], Ev.jetMass[jid]) blikmqq[0] = (v[blikIdx[2]] + v[blikIdx[3]]).M() blikmbb[0] = (v[blikIdx[0]] + v[blikIdx[1]]).M() blikdetaqq[0] = abs(Ev.jetEta[int(blikIdx[2])] - Ev.jetEta[int(blikIdx[3])]) tmvd.Fill() else: fmvd = TFile.Open( prefix + "/rootfiles/flatTree_VBFPowheg125_EvIntStep04%s_%s.root" % ("Alt" if opts.alt else "", opts.sel), "update") gDirectory.cd("Hbb") tmvd = fmvd.Get("Hbb/events") for a1 in ["sig", "bkg"]: for i2, a2 in enumerate([ "eta", "etaIdx", "btag", "btagIdx", "blik", "blikIdx", "blik2", "blik2Idx" ]): eval('h%s_%s = fmvd.Get("Hbb/h%s_%s")' % (a1, a2, a1, a2)) # c = TCanvas("c", "c", 1800, 1500) c.Divide(4, 4) Bv = [ "blikNOM" if opts.sel == "NOM" else "blikVBF", "blikNOMIdx" if opts.sel == "NOM" else "blikVBFIdx", "blik", "blikIdx", "mqq[0]", "mqq[%d]" % (1 if opts.sel == "NOM" else 2), "blikmqq", "NONE", "dEtaqq[0]", "dEtaqq[%d]" % (1 if opts.sel == "NOM" else 2), "blikdetaqq", "NONE", "mbb[0]", "mbb[%d]" % (1 if opts.sel == "NOM" else 2), "blikmbb", "NONE" ] Bx = [ "(old) b-likelihood", "(old) b-likelihood rank", "b-likelihood", "b-likelihood rank", "(CSV) m_{qq'} (GeV)", "(old) m_{qq'} (GeV)", "(new) m_{qq'} (GeV)", "", "(CSV) #Delta#eta_{qq'}", "(old) #Delta#eta_{qq'}", "(new) #Delta#eta_{qq'}", "", "(CSV) m_{b#bar{b}} (GeV)", "(old) m_{b#bar{b}} (GeV)", "(new) m_{b#bar{b}} (GeV)", "" ] By = [ "N / (0.08)", "N / (1)", "N / (0.08)", "N / (1)", "N / (20 GeV)", "N / (20 GeV)", "N / (20 GeV)", "", "N / (0.1)", "N / (0.1)", "N / (0.1)", "", "N / (10 GeV)", "N / (10 GeV)", "N / (10 GeV)", "" ] BN = [25, 4, 25, 4, 100, 100, 100, 0, 50, 50, 50, 0, 30, 30, 30, 0] Bmi = [-1, -0.5, -1, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Bma = [ 1, 3.5, 1, 3.5, 2000, 2000, 2000, 0, 5, 5, 5, 0, 300, 300, 300, 0 ] Bt = [ "(existing)", "(existing)", "(new)", "(new)", "(existing)", "(existing)", "(new)", "", "(existing)", "(existing)", "(new)", "", "(existing)", "(existing)", "(new)", "" ] for iv, v in enumerate(Bv): if v == "blikNOM" or v == "blikVBF": continue if v == "NONE": continue c.cd(iv + 1) gPad.SetGrid(1, 1) tmvd.Draw("%s>>h%d(%d,%f,%f)" % (v, iv + 1, BN[iv], Bmi[iv], Bma[iv])) eval('h%d.GetXaxis().SetTitle("%s")' % (iv + 1, Bx[iv])) eval('h%d.GetYaxis().SetTitle("%s")' % (iv + 1, By[iv])) trpave(Bt[iv]) makeDirs(prefix + "/plots") c.SaveAs(prefix + "/plots/EvIntDiscriminant_variablesOut%s%s-1_%s.pdf" % ("Alt" if opts.alt else "", opts.alttag if not opts.alttag == "" else "", opts.sel)) c.Close() ci = TCanvas("ci", "ci", 900, 750) # c.Divide(2,1) Bv = [ "blikmbb:mbb[0]", "mbb[%d]:mbb[0]" % (1 if opts.sel == "NOM" else 2) ] Bx = ["CSV b-tag m_{b#bar{b}} (GeV)", "CSV b-tag m_{b#bar{b}} (GeV)"] By = [ "b-likelihood m_{b#bar{b}} (GeV)", "b-likelihood m_{b#bar{b}} (GeV)" ] BN = [[140, 140], [140, 140]] Bmi = [[0, 0], [0, 0]] Bma = [[700, 700], [700, 700]] Bt = ["(new)", "(existing)"] for iv, v in enumerate(Bv): if v == "NONE": continue # c.cd(iv+1) ci.cd() tmvd.Draw( "%s>>h%d(%d,%f,%f,%d,%f,%f)" % (v, iv + 1 + 12, BN[iv][0], Bmi[iv][0], Bma[iv][0], BN[iv][1], Bmi[iv][1], Bma[iv][1]), "", "colz") gPad.SetRightMargin(0.14) gPad.SetTopMargin(0.06) gPad.SetBottomMargin(0.14) eval('ROOT.h%d.GetXaxis().SetTitle("%s")' % (iv + 1 + 12, Bx[iv])) eval('ROOT.h%d.GetYaxis().SetTitle("%s")' % (iv + 1 + 12, By[iv])) eval('ROOT.h%d.GetXaxis().SetTitleOffset(%.2f)' % (iv + 1 + 12, 1.1)) #trpave(Bt[iv]) tlpave("Set %s selection" % ("A" if opts.sel == "NOM" else "B"), 0.85, 1) eval('ROOT.h%d.GetZaxis().SetRangeUser(1,4000)' % (iv + 1 + 12)) gPad.SetLogz(1) ci.SaveAs(prefix + "/plots/EvIntDiscriminant_variablesOut%s%s-2%s_%s.pdf" % ("Alt" if opts.alt else "", opts.alttag if not opts.alttag == "" else "", "-new" if iv == 0 else "-existing", opts.sel)) #ci.Close() cb = TCanvas("cb", "cb", 1800, 750) cb.Divide(2, 1) c = TCanvas("c", "c", 2700, 1950) c.Divide(3, 3) for a1 in ["sig", "bkg"]: for i2, a2 in enumerate([ "eta", "etaIdx", "btag", "btagIdx", "blik", "blikIdx", "blik2", "blik2Idx", "abseta", "bbtag", "bblik" ]): h = hs["%s_%s" % (a1, a2)] if "Idx" in a2: h.GetXaxis().SetNdivisions(4) if not h.Integral() == 0: h.Scale(1. / h.Integral()) h.GetYaxis().SetRangeUser( 0.001 if a2 in ["btag", "blik", "blik2", "bbtag", "bblik" ] else 0.0, h.GetBinContent(h.GetMaximumBin()) * (75 if a2 in ["btag", "blik", "blik2", "bbtag", "bblik"] else 1.4)) legs = [ TLegend( 1. - gStyle.GetPadRightMargin() - 0.03 - 0.30, 1. - gStyle.GetPadTopMargin() - 0.03, 1. - gStyle.GetPadRightMargin() - 0.03, 1. - gStyle.GetPadTopMargin() - 0.03 - 0.055 * 3, "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B")) ] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(8): legs += [deepcopy(legs[0])] hsigbtagnew = btagTrafo(hs["sig_btag"], "sig", fc["sig"], fs["sig"], lc["sig"]) hbkgbtagnew = btagTrafo(hs["bkg_btag"], "bkg", fc["bkg"], fs["bkg"], lc["bkg"]) for i2, a2 in enumerate([ "blik2", "blik2Idx", "blikIdx", "btag", "btagIdx", "NONE", "eta", "etaIdx", "NONE" ]): if a2 == "blik2": cb.cd(1) elif a2 == "blik2Idx": cb.cd(2) else: c.cd(i2 + 1) for a1 in ["sig", "bkg"]: gPad.SetRightMargin(0.02) gPad.SetBottomMargin(0.12) if a2 == "NONE": continue h = hs["%s_%s" % (a1, a2)] if a2 == "btag" and a1 == "sig": h = hsigbtagnew elif a2 == "btag" and a1 == "bkg": h = hbkgbtagnew gPad.SetGrid(1, 1) if a2 in ["btag", "blik", "blik2"]: gPad.SetLogy(1) else: gPad.SetLogy(0) h.Draw("" if a1 == "sig" else "same") legs[i2].AddEntry(h, "signal" if a1 == "sig" else "background", "F") if a1 == "bkg": legs[i2].Draw() h.GetXaxis().SetTitleSize(0.05) h.GetYaxis().SetTitleSize(0.05) h.GetXaxis().SetTitleOffset(1.1) h.GetYaxis().SetTitleOffset(1.35) h.GetXaxis().SetLabelSize(0.04) h.GetYaxis().SetLabelSize(0.04) if a2 == "btag": epave("-1", -0.08, 0.000306) epave("-10", -0.13, 0.000306) gPad.Update() if "blik2" in a2 and a1 == "bkg": cb.SaveAs( prefix + "/plots/EvIntDiscriminant_variablesOut%s%s-3a_%s.pdf" % ("Alt" if opts.alt else "", opts. alttag if not opts.alttag == "" else "", opts.sel)) c.SaveAs(prefix + "/plots/EvIntDiscriminant_variablesOut%s%s-3_%s.pdf" % ("Alt" if opts.alt else "", opts.alttag if not opts.alttag == "" else "", opts.sel)) c = TCanvas("c", "c", 900, 750) c.cd() legs = [ TLegend( gStyle.GetPadLeftMargin() + 0.05, gStyle.GetPadBottomMargin() + 0.05, gStyle.GetPadLeftMargin() + 0.3, gStyle.GetPadBottomMargin() + 0.05 + 0.050 * 4, "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B")) ] legs[0].SetTextFont(42) legs[0].SetTextSize(0.045) legs[0].SetFillStyle(0) legs[0].SetBorderSize(0) gs = {} for i2, a2 in enumerate(["bblik", "bbtag", "abseta"]): hsig = hs["sig_%s" % a2] hbkg = hs["bkg_%s" % a2] g = makeGraph(hsig, hbkg, "right" if not a2 == "abseta" else "left") g.Write() gs[a2] = g legs[0].AddEntry( g, "b-likelihood" if "blik" in a2 else ("CSV b-tag" if a2 == "bbtag" else "|#eta|"), "L") g.Draw("A,L" if i2 == 0 else "same,L") legs[0].Draw() legs[0].SetY2(legs[0].GetY1() + legs[0].GetNRows() * 0.050 + 0.05) gPad.Update() c.SaveAs(prefix + "/plots/EvIntDiscriminant_variablesOut%s%s-4_%s.pdf" % ("Alt" if opts.alt else "", opts.alttag if not opts.alttag == "" else "", opts.sel)) if opts.replot: for i in range(20): h = eval("ROOT.h%d" % (i)) if h: h.Write(h.GetName(), TH1.kOverwrite) for a1 in ["sig", "bkg"]: for i2, a2 in enumerate([ "blik2", "blik2Idx", "blikIdx", "btag", "btagIdx", "NONE", "eta", "etaIdx", "NONE" ]): if a2 == "NONE": continue h = hs["%s_%s" % (a1, a2)] if h: h.Write(h.GetName(), TH1.kOverwrite) for g in gs.itervalues(): if g: g.Write(g.GetName(), TH1.kOverwrite) else: fmvd.Write() # fmvd.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step == 7: l1("Step 07%s: %s: more plots." % (" (Alt)" if opts.alt else "", opts.sel)) gROOT.SetBatch(1) gStyle.SetOptStat(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C" % basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.05) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleOffset(1.35, "Y") gStyle.SetTitleSize(0.05, "XYZ") gStyle.SetLabelSize(0.04, "XYZ") gStyle.SetPalette(1) gStyle.SetGridColor(17) TGaxis.SetMaxDigits(4) fin = TFile.Open( "rootfiles/bjetId_%s_MVA%s.root" % (opts.sel, "Alt" if opts.alt else ""), "read") tin = fin.Get("TestTree") fout = TFile.Open( prefix + "/rootfiles/flatTree_VBFPowheg125_EvIntStep07%s_%s.root" % ("Alt" if opts.alt else "", opts.sel), "recreate") NTrue = float(tin.GetEntries("classID==0")) NFake = float(tin.GetEntries("classID==1")) V = ["btag", "btag", "abs(eta)", "abs(eta)", "BDT_GRAD2", "BDT_GRAD2"] Av = [ "btagTrue", "btagFake", "etaTrue", "etaFake", "blikTrue", "blikFake" ] Ax = [ "CSV b-tag", "CSV b-tag", "|#eta|", "|#eta|", "b-likelihood", "b-likelihood" ] Ay = [ "N / (0.05)", "N / (0.05)", "N / (0.2)", "N / (0.2)", "N / (0.08)", "N / (0.08)" ] Ami = [0, 0, 0, 0, -1, -1] Ama = [1, 1, 5, 5, 1, 1] AN = [20, 20, 25, 25, 25, 25] hs = {} for a in range(len(Av)): hs["%s" % Av[a]] = TH1F("h%s" % Av[a], "h%s;%s;%s" % (Av[a], Ax[a], Ay[a]), AN[a], Ami[a], Ama[a]) h = hs["%s" % Av[a]] if "True" in Av[a]: h.SetLineColor(kBlue) h.SetFillColor(kBlue - 9) h.SetFillStyle(1001) elif "Fake" in Av[a]: h.SetLineColor(kRed) h.SetFillColor(kRed) h.SetFillStyle(3004) for v in range(len(V)): tin.Draw("%s>>h%s" % (V[v], Av[v]), "classID==0" if "True" in Av[v] else "classID==1") if "True" in Av[v]: hs[Av[v]].Scale(1. / NTrue) elif "Fake" in Av[v]: hs[Av[v]].Scale(1. / NFake) c = TCanvas("c", "c", 900, 1950) c.Divide(1, 3) legs = [ TLegend( 1. - gStyle.GetPadRightMargin() - 0.03 - 0.30, 1. - gStyle.GetPadTopMargin() - 0.03, 1. - gStyle.GetPadRightMargin() - 0.03, 1. - gStyle.GetPadTopMargin() - 0.03 - 0.055 * 3, "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B")) ] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(20): legs += [deepcopy(legs[0])] for a in range(len(Av)): c.cd(divmod(a + 2, 2)[0]) h = hs["%s" % Av[a]] h.Draw("" if "True" in Av[a] else "same") legs[divmod(a + 2, 2)[0]].AddEntry( h, "signal" if "True" in Av[a] else "background", "F") if "Fake" in Av[a]: legs[divmod(a + 2, 2)[0]].Draw() if "btag" in Av[a] or "blik" in Av[a]: if "True" in Av[a]: h.GetYaxis().SetRangeUser( 0.001, h.GetBinContent(h.GetMaximumBin()) * 75) gPad.SetLogy(1) else: if "True" in Av[a]: h.GetYaxis().SetRangeUser( 0.0, h.GetBinContent(h.GetMaximumBin()) * 1.4) gPad.SetLogy(0) c.SaveAs("plots/performance%s-1_%s.pdf" % ("Alt" if opts.alt else "", opts.sel)) c.Close() xtrue = [0.] * 1000 yfake = [0.] * 1000 c = TCanvas("c", "c", 900, 750) c.cd() legs = [ TLegend( gStyle.GetPadLeftMargin() + 0.05, gStyle.GetPadBottomMargin() + 0.05, gStyle.GetPadLeftMargin() + 0.3, gStyle.GetPadBottomMargin() + 0.05 + 0.050 * 4, "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B")) ] legs[0].SetTextFont(42) legs[0].SetTextSize(0.045) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(20): legs += [deepcopy(legs[0])] gs = {} for a in range(len(Av)): if "True" in Av[a]: xtrue = [0.] * 1000 yfake = [0.] * 1000 for i in range(hs[Av[a]].GetNbinsX()): xtrue[i] = hs[Av[a]].Integral(i, hs[Av[a]].GetNbinsX()) if "eta" in Av[a]: xtrue[i] = 1. - xtrue[i] elif "Fake" in Av[a]: for i in range(hs[Av[a]].GetNbinsX()): yfake[i] = 1. - hs[Av[a]].Integral(i, hs[Av[a]].GetNbinsX()) if "eta" in Av[a]: yfake[i] = -yfake[i] + 1. gs[Av[a][0:-4]] = TGraph( hs[Av[a]].GetNbinsX(), array('f', xtrue[0:hs[Av[a]].GetNbinsX()]), array('f', yfake[0:hs[Av[a]].GetNbinsX()])) g = gs[Av[a][0:-4]] g.SetLineColor(kRed if "btag" in Av[a] else ( kGreen + 2 if "eta" in Av[a] else kBlue)) gPad.SetGrid(1, 1) gs["btag"].GetXaxis().SetLimits(0.7, 1.05) gs["btag"].GetYaxis().SetRangeUser(0.0, 1.1) gs["btag"].GetXaxis().SetTitle("Efficiency of matched b-jets") gs["btag"].GetYaxis().SetTitle("Rejection of matched non b-jets") gs["btag"].GetXaxis().SetNdivisions(504) gs["btag"].Draw("AL") gs["eta"].Draw("sameL") gs["blik"].Draw("sameL") legs[-1].AddEntry(gs["btag"], "CSV b-tag", "L") legs[-1].AddEntry(gs["eta"], "|#eta|", "L") legs[-1].AddEntry(gs["blik"], "b-likelihood", "L") legs[-1].Draw() c.SaveAs("plots/performance%s-2_%s.pdf" % ("Alt" if opts.alt else "", opts.sel)) c.Close() c1s = fin.Get("CorrelationMatrixS") c1b = fin.Get("CorrelationMatrixB") gStyle.SetGridColor(kBlack) c = TCanvas("c", "c", 900 * 2, 850 * 1) c.Divide(2, 1) c.cd(1) gPad.SetGrid(1, 1) gPad.SetTopMargin(0.14) gPad.SetRightMargin(0.13) c1s.SetMarkerColor(kBlack) c1s.Draw("colz,text") epavetext([ "Correlation matrix (signal)", "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B") ], 0.03, 0.88, 0.5, 0.97) epavetext(["Linear correlation coefficients in %"], 0.52, 0.85, 0.99, 0.89, 0.025, 0) gPad.Update() gPad.RedrawAxis() c.cd(2) gPad.SetGrid(1, 1) gPad.SetTopMargin(0.14) gPad.SetRightMargin(0.13) c1b.SetMarkerColor(kBlack) c1b.Draw("colz,text") epavetext([ "Correlation matrix (background)", "%s selection" % ("Set A" if opts.sel == "NOM" else "Set B") ], 0.03, 0.88, 0.5, 0.97) epavetext(["Linear correlation coefficients in %"], 0.52, 0.85, 0.99, 0.89, 0.025, 0) gPad.Update() gPad.RedrawAxis() c.SaveAs("plots/performance%s-3_%s.pdf" % ("Alt" if opts.alt else "", opts.sel)) c.Close() gStyle.SetGridColor(17) fout.Write(fout.GetName(), TH1.kOverwrite) fin.Close() fout.Close()
def mkTemplateFunctions(): mp = parser() opts, fout, samples = main(mp, False, False, True) jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() TYPE = opts.typetag samples = INTERNALpicksamples(opts, jsons) hDat, hRat, fFit, gUnc, fitter, covariant = INTERNALhistograms(opts) c1, c2, c = INTERNALcanvases(opts) can = TCanvas("main", "main") ln = INTERNALline("1", float(opts.fBound[0]), float(opts.fBound[1])) for iTag, Tag in enumerate(opts.catTags): nCat = int(opts.mvaBins['mva%s' % Tag][0]) - 1 rCat = 0 if Tag == 'NOM' else 4 selsamples = [s for s in samples if s['incarnation'] == Tag] fins = [x['tfile'] for x in selsamples] l1('Running for %s - QCD' % Tag) c2[Tag] = TCanvas('transfer_sel%s_%s' % (Tag, TYPE), 'transfer_sel%s_%s' % (Tag, TYPE), 600 * (nCat - 1), 600) c2[Tag].Divide(nCat - 1, 1) leg = INTERNALlegend(Tag) leg.SetX1(0.7) lleg = dict( ((Tag, iCat + 1), INTERNALlegend(Tag)) for iCat in range(nCat - 1)) for iCat in range(nCat): jCat = iCat + rCat if opts.merge: if iCat == nCat - 1: continue if iCat == nCat - 2: jCat = jCat * 10 + jCat + 1 l2('Running for CAT%d' % jCat) # v = jsons['vars']['variables'][opts.variables[opts.variables.keys()[iTag]][0]] # regular hists # if v['xs']: hDat[(Tag,iCat)] = TH1F('hDat_sel%s_CAT%d'%(Tag,iCat),'hDat_sel%s_CAT%d'%(Tag,iCat),int(v['nbins_x']),v['xs']) # else: hDat[(Tag,iCat)] = TH1F('hDat_sel%s_CAT%d'%(Tag,iCat),'hDat_sel%s_CAT%d'%(Tag,iCat),int(v['nbins_x']),int(v['xmin']),int(v['xmax'])) hDat[(Tag, iCat)] = TH1F( 'hDat_sel%s_CAT%d_%s' % (Tag, jCat, TYPE), 'hDat_sel%s_CAT%d_%s' % (Tag, jCat, TYPE), int(float(opts.fBound[1]) - float(opts.fBound[0])) / (10 if 'Dat' in TYPE else 20), float(opts.fBound[0]), float(opts.fBound[1])) print hDat[(Tag, iCat)].GetBinWidth(1) h = hDat[(Tag, iCat)] h = INTERNALstyleHist(h, iCat, markers, colours, TYPE) can.cd() # cut CUT = TCut("mva%s>%.2f && mva%s<=%.2f" % (Tag, float(opts.mvaBins["mva%s" % Tag][1][iCat + 1]), Tag, float(opts.mvaBins["mva%s" % Tag][1][iCat + 2]))) if opts.merge: CUT = TCut( "mva%s>%.2f && mva%s<=%.2f" % (Tag, float(opts.mvaBins["mva%s" % Tag][1][iCat + 1]), Tag, float(opts.mvaBins["mva%s" % Tag][1][iCat + 3]))) ###CUT = TCut("mvaNOM>%.2f && mvaNOM<=%.2f"%(float(opts.mvaBins["mva%s"%Tag][1][iCat+1]),float(opts.mvaBins["mva%s"%Tag][1][iCat+2]))) l3('Cutting with: %s' % CUT) for fin in fins: l4('Sample: %s' % fin.GetName()) CUT2, cutlabel = write_cuts( ["None"], ["None"], reftrig=["None"], sample=jsons['samp']['files'][os.path.split( fin.GetName())[1]]['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.complexWghts[(Tag, 'old')], trigequal=trigTruth(opts.usebool)) l4('Cutting with: %s' % CUT2) # drawing tin = fin.Get("Hbb/events") l3('Drawing mbbReg[%d] --> %s' % (1 if 'NOM' in Tag else 2, h.GetName())) tin.Draw( "mbbReg[%d]>>+%s" % (1 if 'NOM' in Tag else 2, h.GetName()), TCut(CUT) * TCut(CUT2)) fout.cd() ###tin.Draw("mbbReg[1]>>%s"%(h.GetName()),CUT) if not opts.unblind: h = INTERNALblind(h, 100., 150.) h.Scale(1. / h.Integral()) h.SetDirectory(0) # ratio hist hRat[(Tag, iCat)] = h.Clone(h.GetName().replace('hDat', 'hRat')) r = hRat[(Tag, iCat)] r.SetTitle(r.GetName()) r = INTERNALstyleHist(r, iCat, markers, colours, TYPE) # dividing by control CAT ##print "Divide: ", hDat[(Tag,0)].GetName() r.Divide(hDat[(Tag, 0)]) r.SetDirectory(0) # fit fFit[(Tag, iCat)] = TF1(h.GetName().replace('hDat', 'fitRatio'), 'pol1', float(opts.fBound[0]), float(opts.fBound[1])) f = fFit[(Tag, iCat)] f.SetLineColor(colours[iCat]) h.Write(h.GetTitle(), TH1.kOverwrite) if not iCat == 0: r.Fit(f, "RQ") fitter = TVirtualFitter.GetFitter() covariant = TMatrixDSym() covariant.Use(fitter.GetNumberTotalParameters(), fitter.GetCovarianceMatrix()) nBins = 200 dx = (r.GetBinLowEdge(r.GetNbinsX() + 1) - r.GetBinLowEdge(1)) / float(nBins) vx = array( 'f', [r.GetBinLowEdge(1) + (i + 1) * dx for i in range(nBins)]) vy = array('f', [f.Eval(vx[i]) for i in range(nBins)]) vex = array('f', [0.0] * nBins) vey = array('f', [ sqrt( pow(vx[i], 2) * covariant(1, 1) + 2.0 * vx[i] * covariant(0, 1) + covariant(0, 0)) for i in range(nBins) ]) gUnc[(Tag, iCat)] = TGraphErrors(nBins, vx, vy, vex, vey) g = gUnc[(Tag, iCat)] g.SetFillColor(colours[iCat]) g.SetFillStyle(3004) c1[Tag].cd() h.Draw('same E') hDat[(Tag, 0)].GetYaxis().SetRangeUser( 0.0, max(h.GetMaximum(), hDat[(Tag, 0)].GetMaximum()) * 1.02) gPad.Update() leg.AddEntry(h, 'CAT%d' % jCat, 'P') c2[Tag].cd(iCat) ln.Draw() g.Draw('same E3') r.Draw('same') ll = lleg[(Tag, iCat)] ll.AddEntry(h, 'CAT%d / CAT%d' % (jCat, rCat), 'P') ll.SetY1(ll.GetY2() - ll.GetNRows() * 0.06) ll.SetTextSize(0.04) ll.Draw() r.GetYaxis().SetRangeUser(0.0, 2.0) r.Write(r.GetTitle(), TH1.kOverwrite) g.Write(r.GetTitle().replace('hRat', 'gRat'), TH1.kOverwrite) else: c1[Tag] = TCanvas('MbbShape_sel%s_%s' % (Tag, TYPE), 'MbbShape_sel%s_%s' % (Tag, TYPE), 900, 600) c1[Tag].cd() gPad.SetLeftMargin(0.12) gPad.SetRightMargin(0.03) h.GetYaxis().SetTitleOffset(0.8) h.SetFillColor(kGray) h.Draw('hist') leg.AddEntry(h, 'CAT%d' % jCat, 'F') fout.cd() f.Write(f.GetName(), TH1.kOverwrite) c1[Tag].cd() leg.SetY1(leg.GetY2() - leg.GetNRows() * 0.06) leg.Draw() c1[Tag].SaveAs('plots/transfer/%s%s.png' % (c1[Tag].GetName(), "_merged" if opts.merge else "")) c1[Tag].SaveAs('plots/transfer/%s%s.pdf' % (c1[Tag].GetName(), "_merged" if opts.merge else "")) c2[Tag].SaveAs('plots/transfer/%s%s.png' % (c2[Tag].GetName(), "_merged" if opts.merge else "")) c2[Tag].SaveAs('plots/transfer/%s%s.pdf' % (c2[Tag].GetName(), "_merged" if opts.merge else "")) #c.SaveAs('plots/transfer/%s.png'%c.GetName()) # clean for f in samples: f['tfile'].Close() fout.Close()
def mkBDTcorrelations(): mp = parser() opts, fout, samples = main(mp, False, False, True) sels = ['NOM', 'VBF'] jsons = INTERNALprepare(opts) markers, colours = INTERNALstyle() selsamples = INTERNALpicksamples(opts, jsons) can = TCanvas("main", "main", 650, 600) hProf = INTERNALhistograms(opts, sels, jsons) #INTERNALcanvases(opts) l1("Creating profiles") if not opts.read: for isel, sel in enumerate(sels): ssel = [s for s in selsamples if sel in s['fname']] for s in ssel: l2("Running for %s" % s['tag']) cut, cutlabel = write_cuts(["None"], ["None"], reftrig=["None"], sample=s['tag'], jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.complexWghts[(sel, 'old')], trigequal=trigTruth(opts.usebool)) #cut = re.findall('\*.*',cut)[0][2:-1].replace('pu','ev.pu').replace('trig','ev.trig') if opts.debug: l3("Cut %s: \n\t\t\t%s%s%s: \n\t\t\t%s" % (s['tag'], blue, cutlabel, plain, cut)) cutextra = "mbbReg[%d]>=80. && mbbReg[%d]<=200." % ( 1 if sel == 'NOM' else 2, 1 if sel == 'NOM' else 2) for v in [ jsons['vars']['variables'][vv] for vv in opts.variable ]: if sel == 'NOM' and '[2]' in v['root']: continue if sel == 'VBF' and '[1]' in v['root']: continue if 'mva' in v and not sel in v: continue s['tree'].Draw( "%s:%s>>+%s" % (v['root'], "mva%s" % sel, hProf[(sel, v['var'], 'BDT', 'QCD' if 'QCD' in s['fname'] else 'DAT')].GetName()), TCut(cutextra) * TCut(cut), "prof") if 'mbbReg' in v['var']: continue s['tree'].Draw( "%s:%s>>+%s" % (v['root'], "mbbReg[%d]" % (1 if sel == 'NOM' else 2), hProf[(sel, v['var'], 'mbbReg', 'QCD' if 'QCD' in s['fname'] else 'DAT')].GetName()), TCut(cutextra) * TCut(cut), "prof") else: for k in hProf.iterkeys(): hProf[k] = fout.Get("h%s_sel%s_%s_%s" % (k[3], k[0], k[1], k[2])) k = list(set([x[0:3] for x in hProf.iterkeys()])) for ik in k: low = min( hProf[(ik[0], ik[1], ik[2], 'QCD')].GetBinContent(hProf[(ik[0], ik[1], ik[2], 'QCD')].GetMinimumBin()), hProf[(ik[0], ik[1], ik[2], 'DAT')].GetBinContent(hProf[(ik[0], ik[1], ik[2], 'DAT')].GetMinimumBin())) hig = max( hProf[(ik[0], ik[1], ik[2], 'QCD')].GetBinContent(hProf[(ik[0], ik[1], ik[2], 'QCD')].GetMaximumBin()), hProf[(ik[0], ik[1], ik[2], 'DAT')].GetBinContent(hProf[(ik[0], ik[1], ik[2], 'DAT')].GetMaximumBin())) med = hProf[(ik[0], ik[1], ik[2], 'DAT')].GetMean(2) dif = hig - low setlow = med - 1.6 * dif sethig = med + 1.6 * dif if not 'cos' in ik[1]: setlow = max(setlow, 0) limits = { 'dEtaqq1': [2, 7, 2, 7], 'dPhiqq1': [0, 3, 0, 3], 'jetBtag00': [0.5, 1.2, 0.8, 1.0], 'jetBtag01': [0.0, 1.2, 0.55, 0.75], 'jetQGLNOM0': [0, 1, 0.5, 0.65], 'jetQGLNOM1': [0, 1, 0.35, 0.55], 'jetQGLNOM2': [0, 1, 0.5, 0.7], 'jetQGLNOM3': [0, 1, 0.5, 0.7], 'mqq1': [0, 2500, 500, 800], 'mbbReg1': [115, 145, 115, 145], 'cosTheta1': [-0.35, 0.35, -0.2, 0.2], 'jetQGLVBF0': [0, 1, 0.4, 0.55], 'jetQGLVBF1': [0, 1, 0.3, 0.5], 'jetQGLVBF2': [0, 1, 0.55, 0.75], 'jetQGLVBF3': [0, 1, 0.5, 0.7], 'mqq2': [0, 2500, 1000, 1300], 'mbbReg2': [115, 145, 115, 145], 'cosTheta2': [-0.35, 0.35, -0.2, 0.2], 'dEtaqq2': [2, 7, 2, 7], 'dPhiqq2': [0, 3, 0, 3], 'softHt': [0, 100, 25, 50], 'softN2': [0, 10, 4, 7] } #[3,7,4,6], [0,3,1,2] [0,3,1.5,2.5] if ik[1] in limits: if ik[2] == 'BDT': setlow = limits[ik[1]][0] sethig = limits[ik[1]][1] else: setlow = limits[ik[1]][0] #2] sethig = limits[ik[1]][1] #3] # if 'jetBtag01' in ik[1] and ik[0]=='VBF' and ik[2]=='mbbReg': # setlow = 0.4 # sethig = 0.55 hProf[(ik[0], ik[1], ik[2], 'DAT')].GetYaxis().SetRangeUser(setlow, sethig) hProf[(ik[0], ik[1], ik[2], 'DAT')].GetYaxis().SetTitleOffset(1.4) hProf[(ik[0], ik[1], ik[2], 'DAT')].GetXaxis().SetTitleOffset(1.0) hProf[(ik[0], ik[1], ik[2], 'DAT')].GetYaxis().SetNdivisions(507) hProf[(ik[0], ik[1], ik[2], 'DAT')].GetXaxis().SetNdivisions(507) hProf[(ik[0], ik[1], ik[2], 'DAT')].Draw("axis") h = INTERNALgraph(hProf[(ik[0], ik[1], ik[2], 'DAT')]) h.SetMarkerStyle(20) h.SetMarkerSize(0.8) h.SetMarkerColor(kBlack) h.SetLineColor(kBlack) h.SetFillStyle(0) h.Draw("same pz") g = INTERNALgraph(hProf[(ik[0], ik[1], ik[2], 'QCD')]) # hProf[(ik[0],ik[1],ik[2],'QCD')].SetMarkerStyle(25) # hProf[(ik[0],ik[1],ik[2],'QCD')].SetMarkerColor(kBlue) # hProf[(ik[0],ik[1],ik[2],'QCD')].Draw("same e") g.SetMarkerStyle(25) g.SetMarkerColor(kBlue) g.SetLineColor(kBlue) g.SetFillStyle(0) g.Draw("same pz") leg = TLegend(0.62, 0.75, 0.9, 0.92, "%s selection" % (ik[0].strip('sel'))) leg.SetFillStyle(-1) leg.SetBorderSize(0) leg.SetTextFont(42) leg.SetTextSize(0.045) #leg.AddEntry(hProf[(ik[0],ik[1],ik[2],'DAT')],'Data') #leg.AddEntry(hProf[(ik[0],ik[1],ik[2],'QCD')],'QCD') leg.AddEntry(h, 'Data', 'LP') leg.AddEntry(g, 'QCD', 'LP') leg.SetY1(leg.GetY2() - (leg.GetNRows() + 1) * 0.05) leg.Draw() can.SaveAs( "plots/%s.png" % hProf[(ik[0], ik[1], ik[2], 'DAT')].GetName().replace('hDAT', 'h')) can.SaveAs( "plots/%s.pdf" % hProf[(ik[0], ik[1], ik[2], 'DAT')].GetName().replace('hDAT', 'h')) fout.cd() for h in hProf.itervalues(): h.Write(h.GetName(), TH1.kOverwrite) # clean fout.Close()
def get2DMap(opts,fout,samples,variables,sel,trg,ref,vx,vy): # info l1("Creating 2D maps for (%s,%s):"%(vx[0],vy[0])) print "+ (sel,trg,ref): (%s,%s,%s)"%(sel,trg,ref) jsoninfo = json.loads(filecontent(opts.jsoninfo)) groups = list(set([jsoninfo['groups'][x['tag']] for x in samples])) samplesbygroup = {} paves = [] for group in groups: samplesbygroup[group] = [sample for sample in samples if jsoninfo['groups'][sample['tag']]==group] ratios = [] if 'JetMon' in groups and 'QCD' in groups: ratios += ['JetMon-QCD'] # storage gDirectory.cd("%s:/"%fout.GetName()) for group in groups: makeDirsRoot(fout,'2DMaps/%s'%group) # calculate xvals = array('f',[float(x) for x in vx[1].split("#")]) yvals = array('f',[float(x) for x in vy[1].split("#")]) maps = {} cuts = {} inroot('TTree *t = 0;') # style gStyle.SetPalette(20) #13 gStyle.SetPaintTextFormat("7.2f") # To Save if opts.notext: canvas = TCanvas("cmap","cmap",1600,1200) else: canvas = TCanvas("cmap","cmap",1800,1200) gStyle.SetLineScalePS(2.2) canvas.cd() set_palette() gPad.SetGrid(0,0) if not opts.notext: gPad.SetRightMargin(0.25) else: gPad.SetRightMargin(0.12) print gPad.GetTopMargin() gPad.SetTopMargin(0.065) # LOOP over ALL GROUPS itest = 0 for group in groups: l2("Filling for group: %s%s%s"%(purple,group,plain)) maps[group] = {} cuts[group] = {} for tag in ['Num','Den','Rat']: if opts.numonly and not tag=='Num': continue trg,trg_orig = trigData(opts,'',trg) mapname = "2DMap_%s-%s_s%s-t%s-r%s-d%s_%s-%s"%(group,tag,'-'.join(sorted(sel)),'-'.join(trg_orig),'-'.join(ref),'-'.join(trg),vx[0],vy[0]) maptitle = "%s;%s;%s"%(mapname,variables[vx[0]]['title_x'],variables[vy[0]]['title_x']) trg = dc(trg_orig) maps[group][tag] = fout.FindObjectAny(mapname) if (not maps[group][tag]) or (not len(xvals)-1==maps[group][tag].GetXaxis().GetNbins()) or (not len(yvals)-1==maps[group][tag].GetYaxis().GetNbins()) or opts.redo: maps[group][tag] = TH2F(mapname,maptitle,len(xvals)-1,xvals,len(yvals)-1,yvals) maps[group][tag].Sumw2() ## LOOP over ALL SAMPLES for s in sorted(samplesbygroup[group],key=lambda x:('QCD' in x['tag'],not 'WJets' in x['tag'],jsoninfo['crosssections'][x['tag']])): if tag=='Rat': continue l3("Filling for sample: %s%s (%s)%s"%(cyan,s['tag'],tag,plain)) trg,trg_orig = trigData(opts,s,trg) inroot('t = (TTree*)%s.gett();'%s['pointer']) cuts[group][tag] = write_cuts(sel,trg if tag=='Num' else [],sample=s['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,reftrig=ref,trigequal=trigTruth(opts.usebool),weight=opts.weight)[0] #,varskip=[variables[vx[0]]['root'],variables[vy[0]]['root']] if opts.debug: print yellow,cuts[group][tag],plain inroot('t->Draw("%s:%s>>+%s",TCut("%s"));'%(variables[vy[0]]['root'],variables[vx[0]]['root'],maps[group][tag].GetName(),cuts[group][tag])) trg = dc(trg_orig) else: l3("Loaded from file for group: %s%s%s"%(cyan,group,plain)) ## END LOOP over ALL SAMPLES # to save path = '%s/../trigger/plots/%s/2DMaps/%s'%(basepath,fout.GetName().split('/')[-1][:-5],group) makeDirs(path) if not opts.numonly: # ratio ##CHECK THIS!!!## maps[group]['Rat'].Divide(maps[group]['Num'],maps[group]['Den'],1.0,1.0,'B') ##ALTERNATIVE# for ix in range(0,maps[group]['Num'].GetNbinsX()+1): ##ALTERNATIVE# for iy in range(0,maps[group]['Num'].GetNbinsX()+1): ##ALTERNATIVE# v1 = maps[group]['Num'].GetBinContent(ix,iy) ##ALTERNATIVE# ev1 = maps[group]['Num'].GetBinError(ix,iy) ##ALTERNATIVE# v2 = maps[group]['Den'].GetBinContent(ix,iy) ##ALTERNATIVE# ev2 = maps[group]['Den'].GetBinError(ix,iy) ##ALTERNATIVE# if not v2 == 0: ##ALTERNATIVE# div = v1/v2 ##ALTERNATIVE# ediv = sqrt(div*(1.-div)/v2)*ev2/sqrt(v2) ##ALTERNATIVE# else: ##ALTERNATIVE# div = 0 ##ALTERNATIVE# ediv = 0 ##ALTERNATIVE# maps[group]['Rat'].SetBinContent(ix,iy,div) ##ALTERNATIVE# maps[group]['Rat'].SetBinError(ix,iy,ediv) #$ maps[group]['Rat'] = TEfficiency(maps[group]['Num'],maps[group]['Den']) maps[group]['Rat'].SetName(mapname) maps[group]['Rat'].SetTitle(maptitle) # save gDirectory.cd('%s:/2DMaps/%s'%(fout.GetName(),group)) for tag in ['Num','Den','Rat']: if opts.numonly and not tag=='Num': continue if not tag in maps[group]: continue #$ if tag=='Rat': #$ maps[group][tag].Paint("colz,text90,error") #$ maps[group][tag].GetPaintedHistogram().SetTitleOffset(1.0,"Y") #$ else: maps[group][tag].SetTitleOffset(1.0,"Y") #maps[group][tag].GetXaxis().SetTitle(variables[vx[0]]['title_x']) #maps[group][tag].GetYaxis().SetTitle(variables[vy[0]]['title_x']) maps[group][tag].SetTitleSize(maps[group][tag].GetTitleSize("X")*1.1,"XY") maps[group][tag].SetTitleOffset(maps[group][tag].GetTitleOffset()*1.0 if not opts.notext else maps[group][tag].GetTitleOffset()*1.05,"X") maps[group][tag].SetTitleOffset(maps[group][tag].GetTitleOffset()*1.0 if not opts.notext else maps[group][tag].GetTitleOffset()*(1.14 if not "VBF" in trg else 1.00),"Y") if "VBF" in trg: maps[group][tag].SetLabelSize(maps[group][tag].GetLabelSize("X")*0.95,"X") #maps[group][tag].SetTitleOffset(maps[group][tag].GetTitleOffset()*0.8,"Z") maps[group][tag].SetMarkerSize((1.25 if not ('mqq' in vx[0] or 'mqq' in vy[0]) else 0.85) if not (group=='QCD' and not tag=='Rat') else 1.0) if "VBF" in trg: maps[group][tag].SetMarkerSize(maps[group][tag].GetMarkerSize()*0.95) maps[group][tag].GetXaxis().SetTickLength(0.03) maps[group][tag].GetYaxis().SetTickLength(0.016) maps[group][tag].GetZaxis().SetRangeUser(0,0.8 if not "VBF" in trg else 1.0) maps[group][tag].GetYaxis().SetNdivisions(505 if not 'VBF' in trg else 507) maps[group][tag].SetTitle("") if 'VBF' in trg: gPad.SetLogx(1) maps[group][tag].GetXaxis().SetMoreLogLabels() maps[group][tag].SetMarkerSize(maps[group][tag].GetMarkerSize()*0.75) gStyle.SetHistMinimumZero(kFALSE) if maps[group][tag].GetEntries()==0: maps[group][tag].SetBinContent(0,0,-1e-16) maps[group][tag].SetMinimum(0.0 if not "VBF" in trg else 0.0) maps[group][tag].SetMaximum(0.8 if not "VBF" in trg else 1.0) maps[group][tag].SetContour(999) set_palette() maps[group][tag].Draw("colz,text,error") grid = mapgrid(maps[group][tag],2,2 if not "VBF" in trg else 1,5) gPad.Update() try: palette = maps[group][tag].GetListOfFunctions().FindObject("palette") palette.SetX1NDC(0.89 - (0.13 if not opts.notext else 0.0)) palette.SetX2NDC(0.93 - (0.13 if not opts.notext else 0.0)) palette.SetY1NDC(0.1) palette.SetY2NDC(0.935) maps[group][tag].GetZaxis().SetTickLength(0.02) gPad.Update() except: continue canvas.Modified() canvas.Update() if not opts.notext: text,selleg = addText(opts,group,tag,vx,vy,sel,trg,ref) text.Draw("same") selleg.Draw("same") ttl = topleft("Set %s trigger efficiency (%s)"%("A" if not "VBF" in trg else "B","data" if not "QCD" in group else "simulation")) ttr = topright("%.1f fb^{-1} (8 TeV)"%(19.8 if not "VBF" in trg else 18.3)) maps[group][tag].Write(maps[group][tag].GetName(),TH1.kOverwrite) canvas.SaveAs('%s/%s%s.png'%(path,maps[group][tag].GetName(),'' if not opts.notext else '_noleg')) canvas.SaveAs('%s/%s%s.pdf'%(path,maps[group][tag].GetName(),'' if not opts.notext else '_noleg')) gStyle.SetHistMinimumZero(kTRUE) l3("Written %s map to (eog %s/%s%s.png)"%(tag,path,maps[group][tag].GetName(),'' if not opts.notext else '_noleg')) # END LOOP over ALL GROUPS # FOCUS ON RATIO MAPS JetMon / QCD gDirectory.cd("%s:/"%fout.GetName()) for ratio in ratios: if opts.numonly: continue # store makeDirsRoot(fout,'2DMaps/%s'%ratio) maps[ratio] = {} l2("Getting ratio for: %s%s%s"%(purple,ratio,plain)) # create trg,trg_orig = trigData(opts,'',trg) mapname = "2DMap_%s-%s_s%s-t%s-r%s-d%s_%s-%s"%(ratio,'Rat','-'.join(sorted(sel)),'-'.join(trg_orig),'-'.join(ref),'-'.join(trg),vx[0],vy[0]) maptitle = "%s;%s;%s"%("",variables[vx[0]]['title_x'],variables[vy[0]]['title_x']) #mapname trg = dc(trg_orig) maps[ratio]['Rat'] = TH2F(mapname,maptitle,len(xvals)-1,xvals,len(yvals)-1,yvals) maps[ratio]['Rat'].Sumw2() #$ maps[ratio]['Rat'].Divide(maps[ratio.split('-')[0]]['Rat'].GetPaintedHistogram(),maps[ratio.split('-')[1]]['Rat'].GetPaintedHistogram()) maps[ratio]['Rat'].Divide(maps[ratio.split('-')[0]]['Rat'],maps[ratio.split('-')[1]]['Rat']) ###### CORRECTION FACTOR ##### for ix in range(maps[ratio]['Rat'].GetNbinsX()+1): ##### for iy in range(maps[ratio]['Rat'].GetNbinsY()+1): ##### x = maps[ratio]['Rat'].GetXaxis().GetBinCenter(ix) ##### y = maps[ratio]['Rat'].GetYaxis().GetBinCenter(iy) ##### if y >= 3.5 and y < 4.0: maps[ratio]['Rat'].SetBinContent(ix,iy,maps[ratio]['Rat'].GetBinContent(ix,iy)*1.0/0.8) ##### elif y >= 4.0 and y < 4.5: maps[ratio]['Rat'].SetBinContent(ix,iy,maps[ratio]['Rat'].GetBinContent(ix,iy)*1.0/0.92) ##### elif y >= 4.5 and y < 5.0: maps[ratio]['Rat'].SetBinContent(ix,iy,maps[ratio]['Rat'].GetBinContent(ix,iy)*1.0/1.0) ##### elif y >= 5.0 and y < 5.5: maps[ratio]['Rat'].SetBinContent(ix,iy,maps[ratio]['Rat'].GetBinContent(ix,iy)*1.0/1.15) # plot canvas.cd() #maps[ratio]['Rat'].GetXaxis().SetTitle(variables[vx[0]]['title_x']) #maps[ratio]['Rat'].GetYaxis().SetTitle(variables[vy[0]]['title_x']) maps[ratio]['Rat'].SetMarkerSize(1.25 if not ('mqq' in vx[0] or 'mqq' in vy[0]) else 0.85) maps[ratio]['Rat'].SetTitleSize(maps[ratio]['Rat'].GetTitleSize("X")*1.1,"XY") maps[ratio]['Rat'].SetTitleOffset(maps[ratio]['Rat'].GetTitleOffset()*1.0 if not opts.notext else maps[ratio]['Rat'].GetTitleOffset()*1.05,"X") maps[ratio]['Rat'].SetTitleOffset(maps[ratio]['Rat'].GetTitleOffset()*1.0 if not opts.notext else maps[ratio]['Rat'].GetTitleOffset()*(1.14 if not "VBF" in trg else 1.00),"Y") if "VBF" in trg: maps[ratio]['Rat'].SetLabelSize(maps[ratio]['Rat'].GetLabelSize("X")*0.95,"X") if "VBF" in trg: maps[ratio]['Rat'].SetMarkerSize(maps[ratio]['Rat'].GetMarkerSize()*0.95) maps[ratio]['Rat'].GetXaxis().SetTickLength(0.03) maps[ratio]['Rat'].GetYaxis().SetTickLength(0.016) maps[ratio]['Rat'].GetZaxis().SetRangeUser(0,1.4 if not "VBF" in trg else 2.0) maps[ratio]['Rat'].GetYaxis().SetNdivisions(505 if not 'VBF' in trg else 507) if 'VBF' in trg: gPad.SetLogx(1) maps[ratio]['Rat'].GetXaxis().SetMoreLogLabels() maps[ratio]['Rat'].SetMarkerSize(maps[ratio]['Rat'].GetMarkerSize()*0.75) gStyle.SetHistMinimumZero(kFALSE) set_palette() maps[ratio]['Rat'].Draw('colz,error,text') maps[ratio]['Rat'].SetMinimum(0.6 if not "VBF" in trg else 0.0) maps[ratio]['Rat'].SetMaximum(1.4 if not "VBF" in trg else 1.6) grid = mapgrid(maps[ratio]['Rat'],2,2 if not "VBF" in trg else 1,4) #for ix in range(1,maps[ratio]['Rat'].GetNbinsX()+1): # for iy in range(1,maps[ratio]['Rat'].GetNbinsY()+1): # if maps[ratio]['Rat'].GetBinContent(ix,iy)==0: # pave = TPave(maps[ratio]['Rat'].GetXaxis().GetBinCenter(ix)-0.033,maps[ratio]['Rat'].GetYaxis().GetBinCenter(iy)-0.03,maps[ratio]['Rat'].GetXaxis().GetBinCenter(ix)+0.033,maps[ratio]['Rat'].GetYaxis().GetBinCenter(iy)+0.03,0) # pave.SetFillColor(kWhite) # pave.SetFillStyle(1001) # canvas.cd() # pave.Draw() # paves += [pave] gPad.Update() maps[ratio]['Rat'].GetZaxis().SetTickLength(0.02) palette = maps[ratio]['Rat'].GetListOfFunctions().FindObject("palette") palette.SetX1NDC(0.89 - (0.11 if not opts.notext else 0.0)) palette.SetX2NDC(0.93 - (0.11 if not opts.notext else 0.0)) palette.SetY1NDC(0.1) palette.SetY2NDC(0.935) gPad.Update() canvas.Modified() canvas.Update() if not opts.notext: text,selleg = addText(opts,'Data / QCD','SF',vx,vy,sel,trg,ref) text.Draw("same") selleg.Draw("same") ttl = topleft("Set %s trigger efficiency (data/simulation)"%("A" if not "VBF" in trg else "B")) ttr = topright("%.1f fb^{-1} (8 TeV)"%(19.8 if not "VBF" in trg else 18.3)) # save gDirectory.cd('%s:/2DMaps/%s'%(fout.GetName(),ratio)) maps[ratio]['Rat'].Write(maps[ratio]['Rat'].GetName(),TH1.kOverwrite) path = "%s/../trigger/plots/%s/2DMaps/%s"%(basepath,fout.GetName().split('/')[-1][:-5],ratio) makeDirs(path) for tag in ['Num','Den','Rat']: if not tag in maps[ratio]: continue canvas.SaveAs("%s/%s%s.png"%(path,maps[ratio][tag].GetName(),'' if not opts.notext else '_noleg')) canvas.SaveAs("%s/%s%s.pdf"%(path,maps[ratio][tag].GetName(),'' if not opts.notext else '_noleg')) gStyle.SetHistMinimumZero(kTRUE) l2("Written map to (eog %s/%s%s.png)"%(path,maps[ratio]['Rat'].GetName(),'' if not opts.notext else '_noleg')) # canvas.Close() # clean canvas.Close()
def datamc(): # options mp = parser() opts, fout, samples, variables = main.main(mp, False, True, True) # root setup ROOTsetup() eps = 0.0001 # samples / variables ji, jv, js, Lsamples = loadSamples(opts, samples) Lvariables = { k: v for (k, v) in variables.iteritems() if k in opts.variable } # canvas can = TCanvas("c", "c", 900, 750) can.cd() # histos histos = hists(Lsamples, Lvariables, opts.selection) stacks = {} ################################################## l1("Filling histograms") for s in opts.selection: for t in opts.trigger: # cms paves pcms1, pcms2 = FormatCMSPaves(opts, s) #### # cuts #### cut,cutlabel = write_cuts(s,t,reftrig=["None"],sample=Lsamples[Lsamples.keys()[0]]['i']['tag'],jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal=trigTruth(opts.usebool)) #### cut1,cut2 = cut.split(' * ')[0][1:],cut.split(' * ')[1][:-1] ################################################## # sample loop for sn, si in sorted(Lsamples.iteritems()): l2("Sample: %s" % sn) st = si['i']['tag'] sg = si['g'] ca, calabel = write_cuts(s, t, reftrig=["None"], sample=st, jsonsamp=opts.jsonsamp, jsoncuts=opts.jsoncuts, weight=opts.weight, trigequal=trigTruth(opts.usebool)) ca1, ca2 = ca.split(' * ')[0][1:], ca.split(' * ')[1][:-1] n = si['t'].GetEntries() print ca2 # variable loop for vn, vi in sorted(Lvariables.iteritems()): l3(vn) ht = hTag(st, vn, s[0]) si['t'].Draw("%s>>%s" % (vi['root'], ht), "%s" % ca2) ################################################## # stacking for sn, si in sorted(Lsamples.iteritems()): sg = si['g'] st = si['i']['tag'] for vn, vi in sorted(Lvariables.iteritems()): hg = hTag(sg, vn, s[0]) ht = hTag(st, vn, s[0]) Hg = histos[hg] Ht = histos[ht] Hg.Add(Ht) ################################################## # k-factor INTEGRALS = {"Data": 0.0, "QCD": 0.0, "Other": 0.0, "TTJets": 0.0} if "KF" in opts.weight[1] and not ('TP' in t[0]): #print "if" for ig, g in enumerate( list(set([x['g'] for (k, x) in Lsamples.iteritems()]))): var = Lvariables.keys()[0] hg = hTag(g, var, s[0]) if g == "VBF125": continue elif g == "Data": INTEGRALS["Data"] += float(histos[hg].Integral()) elif g == "QCD": INTEGRALS["QCD"] += float(histos[hg].Integral()) else: INTEGRALS["Other"] += float(histos[hg].Integral()) kfactor = (INTEGRALS["Data"] - INTEGRALS["Other"]) / INTEGRALS["QCD"] l1("K-factor: %.2f" % kfactor) elif "KF" in opts.weight[1]: #print "elif" for ig, g in enumerate( list(set([x['g'] for (k, x) in Lsamples.iteritems()]))): var = Lvariables.keys()[0] hg = hTag(g, var, s[0]) if g == "VBF125": continue elif g == "Data": INTEGRALS["Data"] += float(histos[hg].Integral()) elif g == "TTJets": INTEGRALS["TTJets"] += float(histos[hg].Integral()) else: INTEGRALS["Other"] += float(histos[hg].Integral()) kfactor = (INTEGRALS["Data"] - INTEGRALS["Other"]) / INTEGRALS["TTJets"] l1("K-factor: %.2f" % kfactor) ################################################## # groups l1("Group iteration") can.Clear() for vn, vi in sorted(Lvariables.iteritems()): fout.cd() # set pads p1, p2 = FormatPads(can) ################################################## # top pad p1.cd() # containers l2("Variable: %s" % (vn)) DRAW = {} hs = "s_v%s_c%s" % (vn, s[0]) S = THStack(hs, hs) L = TLegend(gStyle.GetPadLeftMargin() + 0.03, 0.5, gStyle.GetPadLeftMargin() + 0.03 + 0.23 * 3, 1. - gStyle.GetPadTopMargin() - 0.025) FormatLegend(L) # group loop for ig, g in enumerate( sorted(list( set([x['g'] for (k, x) in Lsamples.iteritems()])), key=lambda y: (not '125' in y, not 'WJets' in y, histos[hTag( y, vn, s[0])].Integral()))): l3("%s" % (g)) hg = hTag(g, vn, s[0]) Hg = histos[hg] print Hg.Integral() # underflow Hg.SetBinContent( 1, 0.5 * (Hg.GetBinContent(0) + Hg.GetBinContent(1))) Hg.SetBinError( 1, sqrt( pow(Hg.GetBinError(0), 2.) + pow(Hg.GetBinError(1), 2.))) # overflow Hg.SetBinContent( Hg.GetNbinsX(), 0.5 * (Hg.GetBinContent(Hg.GetNbinsX()) + Hg.GetBinContent(Hg.GetNbinsX() + 1))) Hg.SetBinError( Hg.GetNbinsX(), sqrt( pow(Hg.GetBinError(Hg.GetNbinsX()), 2.) + pow(Hg.GetBinError(Hg.GetNbinsX() + 1), 2.))) # type handling if g == "Data": Hg.SetMarkerStyle(20) Hg.SetMarkerColor(kBlack) Hg.SetMarkerSize(1.2) DRAW["Data"] = Hg elif g == "VBF125": Hg.SetLineStyle(1) Hg.SetLineColor(ji['colours'][g]) Hg.SetLineWidth(3) Hg.Scale(10.) DRAW["SIG"] = Hg elif g == "GF125": Hg.SetLineStyle(7) Hg.SetLineColor(ji['colours'][g]) Hg.SetLineWidth(3) Hg.Scale(10.) DRAW["SIGGF"] = Hg else: Hg.SetLineStyle(1) Hg.SetLineColor(kBlack) Hg.SetFillStyle(1001) Hg.SetFillColor(ji['colours'][g]) if g == "QCD" and (not "TP" in t[0]) and "KF" in opts.weight[1]: Hg.Scale(kfactor) if g == "TTJets" and ( "TP" in t[0]) and "KF" in opts.weight[1]: Hg.Scale(kfactor) if not Hg.GetEntries() == 0: S.Add(Hg) # Full stack (bkg) DRAW["BKG"] = S S.Draw() Sall = FormatStack(S) # MC err histos[hTag("MCerr", vn, s[0])] = Sall.Clone(hTag("MCerr", vn, s[0])) Hg = histos[hTag("MCerr", vn, s[0])] Hg.SetFillStyle(3004) Hg.SetFillColor(kGray + 2) #kBlack) Hg.SetMarkerSize(0) DRAW["MCerr"] = Hg # Fill legend L.AddEntry(histos[hTag("Data", vn, s[0])], "Data", "P") L.AddEntry( histos[hTag("QCD", vn, s[0])], "%s%s" % ("QCD", " (x%.2f)" % kfactor if ("KF" in opts.weight[1] and not "TP" in t[0]) else ""), "F") L.AddEntry(histos[hTag("ZJets", vn, s[0])], "%s" % ("ZJets"), "F") L.AddEntry(histos[hTag("VBF125", vn, s[0])], "10x VBF H(125)", "L") if hTag("Tall", vn, s[0]) in histos: L.AddEntry( histos[hTag("Tall", vn, s[0])], "%s%s" % ("T", " (x%.2f)" % kfactor if ("KF" in opts.weight[1] and "TP" in t[0]) else ""), "F") else: L.AddEntry( histos[hTag("TTJets", vn, s[0])], "%s%s" % ("TTJets", " (x%.2f)" % kfactor if ("KF" in opts.weight[1] and "TP" in t[0]) else ""), "F") L.AddEntry(histos[hTag("WJets", vn, s[0])], "%s" % ("WJets"), "F") L.AddEntry(histos[hTag("GF125", vn, s[0])], "10x GF H(125)", "L") if not hTag("Tall", vn, s[0]) in histos: L.AddEntry(histos[hTag("singleT", vn, s[0])], "%s" % ("singleT"), "F") L.AddEntry(histos[hTag("MCerr", vn, s[0])], "MC stat. unc.", "F") # Draw DRAW["BKG"].Draw("hist") DRAW["Data"].Draw("PE,same") DRAW["SIG"].Draw("hist,same") DRAW["SIGGF"].Draw("hist,same") DRAW["MCerr"].Draw("E2,same") # Edit legend L.SetY1(L.GetY2() - L.GetNRows() * 0.04) L.Draw() # Draw paves pcms1.Draw() pcms2.Draw() # Edit canvas gPad.SetLogy(1) gPad.RedrawAxis() p1.Write(p1.GetName() + ("NOM" if "NOM" in opts.selection[0] else "VBF") + vn) ################################################## # bottom pad p2.cd() # histo = 1 one = DRAW["Data"].Clone("one") for ibin in range(0, one.GetNbinsX() + 2): one.SetBinContent(ibin, 1.) one.SetBinError(ibin, 0.) # ratio Data/MC - 1 rat = DRAW["Data"].Clone(DRAW["Data"].GetName().replace( 'h', 'hRat')) FormatRatio(rat) rat.Divide(DRAW["BKG"].GetStack().Last()) rat.Add(one, -1.) histos[hTag("Data/MC", vn, s[0])] = rat # ratio MCerr/MC - 1 ratMCerr = histos[hTag("MCerr", vn, s[0])].Clone("ratMCerr") ratMCerr.Divide(DRAW["BKG"].GetStack().Last()) ratMCerr.Add(one, -1.) histos[hTag("MCerrDataMC", vn, s[0])] = ratMCerr # Draw rat.Draw() ratMCerr.Draw("E2,same") # Edit pad rat.GetYaxis().SetRangeUser(-1.0 + eps, 1.0 - eps) gPad.SetGridy(1) gPad.Update() line = TF1("l1", "0.", gPad.GetUxmin(), gPad.GetUxmax()) line.SetLineColor(kBlack) line.Draw("same") gPad.RedrawAxis() ################################################## # save plotdir = "./plots/%s" % s[0] if not os.path.exists(plotdir): makeDirs(plotdir) can.SaveAs("%s/%s_s%s.pdf" % (plotdir, vn, s[0])) can.SaveAs("%s/%s_s%s.png" % (plotdir, vn, s[0])) fout.cd() can.Clear() ################################################## # clean can.Close() closeSamples(Lsamples)
def mkSBSigTrees(): # initialise global paves mp = parser() opts,fout = main.main(mp,True) fname = fout.GetName() fout.Close() os.remove(fname) prefix = basepath+'/../mvd' basetree = "flatTree_VBFPowheg125.root" makeDirs('/'.join([prefix,"rootfiles"])) makeDirs('/'.join([prefix,"plots"])) ###################################################################################################################################################### ###################################################################################################################################################### # step 01: NOM/PRK selection if opts.step==1: fin = TFile.Open('/'.join([opts.globalpath,basetree]),"read") tin = fin.Get("Hbb/events") l1("Step 01: %s selection"%opts.sel) fout = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep01_%s.root"%opts.sel)]),"recreate") makeDirsRoot(fout,"Hbb") gDirectory.cd("Hbb") #cut,label = write_cuts(opts.selection[0],opts.trigger[0],reftrig=[],jsoncuts=opts.jsoncuts,jsonsamp=opts.jsonsamp,sample="VBF125",weight=opts.weight,trigequal=trigTruth(True)) cut,label = write_cuts([],opts.trigger[0],reftrig=[],jsoncuts=opts.jsoncuts,jsonsamp=opts.jsonsamp,sample="VBF125",weight=opts.weight,trigequal=trigTruth(True)) l2("Cut %s: %s"%(opts.sel,cut)) tout = tin.CopyTree(cut) fout.Write() fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==2: fin = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep01_%s.root"%opts.sel)]),"read") tin = fin.Get("Hbb/events") l1("Step 02: %s: eta/btag variable only slimming"%(opts.sel)) tin.SetBranchStatus('*',0) for b in ['jetBtag','btagIdx','jetEta','etaIdx','partonId','partonMatchIdx','partonMatchDR','jetPt','jetPhi','jetMass','blikNOMIdx','blikVBFIdx','mqq','mbb','dEtaqq']: tin.SetBranchStatus(b,1) fout = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep02_%s.root"%(opts.sel))]),"recreate") makeDirsRoot(fout,"Hbb") gDirectory.cd("Hbb") tout = tin.CloneTree() fout.Write(fout.GetName(),TH1.kOverwrite) fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==3: fin = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep02_%s.root"%(opts.sel))]),"read") tin = fin.Get("Hbb/events") nin = tin.GetEntriesFast() l1("Step 03%s: %s: jets tree transformation"%(" (Alt)" if opts.alt else "",opts.sel)) fout = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep03%s_%s.root"%("Alt" if opts.alt else "",opts.sel))]),"recreate") makeDirsRoot(fout,"Hbb") gDirectory.cd("Hbb") v_eta,v_btag,v_pt,v_phi,v_mass = zeros(1,dtype='float32'),zeros(1,dtype='float32'),zeros(1,dtype='float32'),zeros(1,dtype='float32'),zeros(1,dtype='float32') v_etaIdx,v_btagIdx,v_pid,v_ptIdx = zeros(1,dtype='int32'),zeros(1,dtype='int32'),zeros(1,dtype='int32'),zeros(1,dtype='int32') # new branches tout = TTree("jets","jets") tout.Branch("eta",v_eta,"eta/F") tout.Branch("etaIdx",v_etaIdx,"etaIdx/I") tout.Branch("btag",v_btag,"btag/F") tout.Branch("btagIdx",v_btagIdx,"btagIdx/I") tout.Branch("pid",v_pid,"pid/I") tout.Branch("ptIdx",v_ptIdx,"ptIdx/I") tout.Branch("pt",v_pt,"pt/F") tout.Branch("phi",v_phi,"phi/F") tout.Branch("mass",v_mass,"mass/F") # loop over tree tref = now() for iEv,Ev in enumerate(tin): if iEv%20000==0: [m,s],p = testimate(tref,iEv,nin) print "%6d/%-10d (est. %dm %ds, %.1f%%)"%(iEv,nin,m,s,p) if opts.nentries>0 and iEv>opts.nentries: break # loop over partons for pj in range(len(Ev.partonMatchDR)): if Ev.partonMatchDR[pj] > 0.25: continue # if Ev.partonMatchIdx[pj] > len(Ev.jetPt): continue ptIdx = Ev.partonMatchIdx[pj] v_ptIdx[0] = Ev.partonMatchIdx[pj] v_pid[0] = Ev.partonId[pj] v_btag[0] = Ev.jetBtag[ptIdx] v_pt[0] = Ev.jetPt[ptIdx] v_eta[0] = Ev.jetEta[ptIdx] v_phi[0] = Ev.jetPhi[ptIdx] v_mass[0] = Ev.jetMass[ptIdx] if opts.alt: if (ptIdx in list(Ev.btagIdx)) and (ptIdx in list(Ev.etaIdx)): v_btagIdx[0] = list(Ev.btagIdx).index(ptIdx) v_etaIdx[0] = list(Ev.etaIdx).index(ptIdx) else: continue else: if ptIdx < len(list(Ev.btagIdx)): v_btagIdx[0] = Ev.btagIdx[ptIdx] v_etaIdx[0] = Ev.etaIdx[ptIdx] tout.Fill() # save fout.Write(fout.GetName(),TH1.kOverwrite) ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==4: l1("Step 04%s: %s: blik training"%(" (Alt)" if opts.alt else "",opts.sel)) fin = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep03%s_%s.root"%("Alt" if opts.alt else "",opts.sel))]),"read") tin = fin.Get("Hbb/jets") fout = TFile.Open("rootfiles/bjetId_%s_MVA%s.root"%(opts.sel,"Alt" if opts.alt else ""),"recreate") sigCut = TCut("abs(pid) == 5") bkgCut = TCut("abs(pid) != 5") presel = TCut("btagIdx<4 && etaIdx<4 && etaIdx>-1 && ptIdx<4 && btagIdx>-1 && ptIdx>-1") Nin = tin.GetEntries() N = 100000 l1("Input tree: %d events"%Nin) l1("Using %d events"%N) factory = TMVA.Factory("factory_%s%s_"%(opts.sel,"_Alt" if opts.alt else ""),fout,"!V:!Silent:Color:DrawProgressBar:Transformations=I;G:AnalysisType=Classification") factory.SetInputTrees(tin,sigCut,bkgCut) factory.AddVariable("btag" ,'F'); factory.AddVariable("eta" ,'F'); factory.AddVariable("btagIdx",'I'); factory.AddVariable("etaIdx" ,'I'); factory.PrepareTrainingAndTestTree(presel,"nTrain_Signal=%d:nTrain_Background=%d:nTest_Signal=%d:nTest_Background=%d"%(N,N,N,N)) factory.BookMethod(TMVA.Types.kLikelihood,"Likelihood"); factory.BookMethod(TMVA.Types.kBDT,"BDT_GRAD2","NTrees=600:nCuts=25:BoostType=Grad:Shrinkage=0.2"); factory.TrainAllMethods(); factory.TestAllMethods(); factory.EvaluateAllMethods(); fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==5: l1("Step 05%s: %s: Sig/Bkg plots"%(" (Alt)" if opts.alt else "",opts.sel)) fin = TFile.Open(prefix+"/rootfiles/flatTree_VBFPowheg125_EvIntStep03%s_%s.root"%("Alt" if opts.alt else "",opts.sel),"read") tin = fin.Get("Hbb/jets") fout = TFile.Open(prefix+"/rootfiles/flatTree_VBFPowheg125_EvIntStep05%s_%s.root"%("Alt" if opts.alt else "",opts.sel),"recreate") gStyle.SetOptStat(0) gStyle.SetOptTitle(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C"%basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.02) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleSize(0.05,"XY") gStyle.SetLabelSize(0.04,"XY") gStyle.SetTitleOffset(1.35,"Y") gStyle.SetGridColor(17) # fc = {"sig":kBlue-9,"bkg":kRed} fs = {"sig":1001,"bkg":3004} lc = {"sig":kBlue-7,"bkg":kRed} Ax = ["#eta","#eta rank","CSV b-tag","CSV b-tag rank","(old) b-likelihood","(old) b-likelihood rank","b-likelihood","b-likelihood rank"] Ay = ["N / (0.2)","N / (1)","N / (0.1)","N / (1)","N / (0.04)","N / (1)","N / (0.04)","N / (1)"] AN = [50,4,110,4,50,4,50,4] Ami = [-5,-0.5,-10,-0.5,-1,-0.5,-1,-0.5] Ama = [5,3.5,1,3.5,1,3.5,1,3.5] Av = ["jetEta","etaIdx","jetBtag","btagIdx","blikNOM","blikNOMIdx","myblikNOM","myblikNOMIdx"] hs = {} btagbinsinput = [-10,-9,-1,0] for i in range(1,int(1./0.05)+1): btagbinsinput += [round(float(i)*0.05,2)] btagbins = array('f',btagbinsinput) for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["eta","etaIdx","btag","btagIdx"]): x,y,N,mi,ma = Ax[i2],Ay[i2],AN[i2],Ami[i2],Ama[i2] if not a2=="btag": hs["%s_%s"%(a1,a2)] = eval('TH1F("h%s_%s","h%s_%s;%s;%s",%d,%f,%f)'%(a1,a2,a1,a2,x,y,N,mi,ma)) else: hs["%s_%s"%(a1,a2)] = TH1F("h%s_%s"%(a1,a2),"h%s_%s;%s;%s"%(a1,a2,x,y),len(btagbins)-1,btagbins) hs["%s_%s"%(a1,a2)].SetFillColor(fc[a1]) hs["%s_%s"%(a1,a2)].SetFillStyle(fs[a1]) hs["%s_%s"%(a1,a2)].SetLineColor(lc[a1]) # hs["sig_etaIdx"].GetXaxis().SetNdivisions(4) hs["sig_btagIdx"].GetXaxis().SetNdivisions(4) TGaxis.SetMaxDigits(4) legs = [TLegend(1.-gStyle.GetPadRightMargin()-0.03-0.30,1.-gStyle.GetPadTopMargin()-0.03,1.-gStyle.GetPadRightMargin()-0.03,1.-gStyle.GetPadTopMargin()-0.03-0.055*3,"%s selection"%("Set A" if opts.sel=="NOM" else "Set B"))] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(4): legs += [deepcopy(legs[0])] # for var in ["eta","etaIdx","btag","btagIdx"]: for typ in ["sig","bkg"]: tin.Draw("%s>>h%s_%s"%(var,typ,var),"abs(pid)==5" if typ=="sig" else "abs(pid)!=5") # for h in hs.itervalues(): h.Scale(1./h.Integral()) h.GetYaxis().SetRangeUser(0.0 if not "Idx" in h.GetName() else 0.1,h.GetBinContent(h.GetMaximumBin())*1.40) hs["sig_btag"] = btagTrafo(hs["sig_btag"],"sig",fc["sig"],fs["sig"],lc["sig"]) hs["bkg_btag"] = btagTrafo(hs["bkg_btag"],"bkg",fc["bkg"],fs["bkg"],lc["bkg"]) c = TCanvas("c","c",1800,1300) c.Divide(2,2) for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["btag","btagIdx","eta","etaIdx"]): c.cd(i2+1) h = hs["%s_%s"%(a1,a2)] h.Draw("" if a1=="sig" else "same") gPad.SetGrid(1,1) legs[i2].AddEntry(h,"signal" if a1=="sig" else "background","F") if a1=="bkg": legs[i2].Draw() if a2=="btag": gPad.SetLogy(1) epave("-1",-0.08,0.000306) epave("-10",-0.135,0.000306) # makeDirs(prefix+"/plots") c.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesIn%s_%s.pdf"%("Alt" if opts.alt else "",opts.sel)) fout.Write(fout.GetName(),TH1.kOverwrite) fin.Close() fout.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==6: l1("Step 06%s: %s: weights filling & output plots."%(" (Alt)" if opts.alt else "",opts.sel)) gROOT.SetBatch(1) gStyle.SetOptStat(0) gStyle.SetOptTitle(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C"%basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.05) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleOffset(1.35,"Y") gStyle.SetPalette(1) gStyle.SetGridColor(17) TGaxis.SetMaxDigits(4) gStyle.SetTitleSize(0.05,"XYZ") gStyle.SetLabelSize(0.04,"XYZ") gStyle.SetTitleOffset(1.35,"Y") gStyle.SetGridColor(17) # fc = {"sig":kBlue-9,"bkg":kRed} fs = {"sig":1001,"bkg":3004} lc = {"sig":kBlue-7,"bkg":kRed} Ax = ["#eta","#eta rank","CSV b-tag","CSV b-tag rank","(old) b-likelihood","(old) b-likelihood rank","b-likelihood","b-likelihood rank","|#eta|","bbtag","bblik"] Ay = ["N / (0.2)","N / (1)","N / (0.1)","N / (1)","N / (0.08)","N / (1)","N / (0.08)","N / (1)","N / (0.1)","N / (0.02)","N / (0.01)"] AN = [50,4,110,4,25,4,25,4,100,550,200] Ami = [-5,-0.5,-10,-0.5,-1,-0.5,-1,-0.5,0,-10,-1] Ama = [5,3.5,1,3.5,1,3.5,1,3.5,5,1,1,1] Av = ["jetEta","etaIdx","jetBtag","btagIdx","blik%s"%("NOM" if opts.sel=="NOM" else "VBF"),"blik%sIdx"%("NOM" if opts.sel=="NOM" else "VBF"),"blik","blikIdx","abseta","jetBtag","blik"] hs = {} btagbinsinput = [-10,-9,-1,0] for i in range(1,int(1./0.05)+1): btagbinsinput += [round(float(i)*0.05,2)] btagbins = array('f',btagbinsinput) for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["eta","etaIdx","btag","btagIdx","blik","blikIdx","blik2","blik2Idx","abseta","bbtag","bblik"]): x,y,N,mi,ma = Ax[i2],Ay[i2],AN[i2],Ami[i2],Ama[i2] if not a2=="btag": hs["%s_%s"%(a1,a2)] = eval('TH1F("h%s_%s","h%s_%s;%s;%s",%d,%f,%f)'%(a1,a2,a1,a2,x,y,N,mi,ma)) else: hs["%s_%s"%(a1,a2)] = TH1F("h%s_%s"%(a1,a2),"h%s_%s;%s;%s"%(a1,a2,x,y),len(btagbins)-1,btagbins) hs["%s_%s"%(a1,a2)].SetFillColor(fc[a1]) hs["%s_%s"%(a1,a2)].SetFillStyle(fs[a1]) hs["%s_%s"%(a1,a2)].SetLineColor(lc[a1]) # if not opts.replot: fglobal = TFile.Open('/'.join([prefix,"rootfiles",basetree.replace(".root","_EvIntStep02_%s.root"%opts.sel)]),"read") tglobal = fglobal.Get("Hbb/events") eta,etaIdx,btag,btagIdx = zeros(1,'float32'),zeros(1,'float32'),zeros(1,'float32'),zeros(1,'float32') pid = ROOT.vector('int')() reader = TMVA.Reader() if opts.alttag=="" or not ("Kostas" in opts.alttag or "CERN" in opts.alttag): reader.AddVariable("btag",btag) reader.AddVariable("eta",eta) reader.AddVariable("btagIdx",btagIdx) reader.AddVariable("etaIdx",etaIdx) reader.BookMVA(opts.tmva,"weights/factory_%s%s__BDT_GRAD2.weights.xml"%(opts.sel,"_Alt" if opts.alt else "")) elif "Kostas" in opts.alttag: reader.AddVariable("btagIdx",btagIdx) reader.AddVariable("etaIdx",etaIdx) reader.AddVariable("btag",btag) reader.AddVariable("eta",eta) reader.BookMVA(opts.tmva,"kostas/weights/factory_%s__BDT_GRAD2.weights.xml"%opts.sel) elif "CERN" in opts.alttag: reader.AddVariable("btagIdx",btagIdx) reader.AddVariable("etaIdx",etaIdx) reader.AddVariable("btag",btag) reader.AddVariable("eta",eta) reader.BookMVA(opts.tmva,"tmpcern/factory_BCanditate_%s_BDT_GRAD.weights.xml"%opts.sel) # reader.BookMVA(opts.tmva,"weights/kostas.NOM.xml") # blik = ROOT.vector('float')() blikIdx = ROOT.vector('int')() blikmqq = zeros(1,'float32') blikmbb = zeros(1,'float32') blikdetaqq = zeros(1,'float32') # fmvd = TFile.Open(prefix+"/rootfiles/flatTree_VBFPowheg125_EvIntStep04%s_%s.root"%("Alt" if opts.alt else "",opts.sel),"recreate") makeDirsRoot(fmvd,"Hbb") gDirectory.cd("Hbb") tmvd = tglobal.CloneTree(0) # tmvd.Branch("blik",blik) tmvd.Branch("blikIdx",blikIdx) tmvd.Branch("blikmqq",blikmqq,"blikmqq/F") tmvd.Branch("blikmbb",blikmbb,"blikmbb/F") tmvd.Branch("blikdetaqq",blikdetaqq,"blikdetaqq/F") tmvd.Branch("pid",pid) # nentries = tglobal.GetEntriesFast() tref = now() for iEv,Ev in enumerate(tglobal): blik.resize(4,0) blikIdx.resize(4,0) pid.resize(4,0) # if opts.nentries>0: if iEv>opts.nentries: break if iEv%5000==0: [m,s],p = testimate(tref,iEv,nentries) print "%8d/%-10d (est. %dm %ds, %.1f%%)"%(iEv,nentries,m,s,p) # for ijet in range(4): eta[0] = Ev.jetEta[ijet] btag[0] = Ev.jetBtag[ijet] if opts.alt: etaIdx[0] = list(Ev.etaIdx).index(ijet) btagIdx[0] = list(Ev.btagIdx).index(ijet) else: etaIdx[0] = Ev.etaIdx[ijet] btagIdx[0] = Ev.btagIdx[ijet] blik[ijet] = float(reader.EvaluateMVA(opts.tmva)) # blikIdxPair = sorted([[ijet,blik[ijet]] for ijet in range(4)],key=lambda (x,y):y,reverse=True) # for ijet in range(4): blikIdx[ijet] = blikIdxPair[ijet][0] # for pj in range(len(Ev.partonMatchDR)): if Ev.partonMatchDR[pj] > 0.25: continue ptIdx = Ev.partonMatchIdx[pj] if ptIdx >= len(Ev.btagIdx): continue pid[ptIdx] = Ev.partonId[pj] # for ijet in range(4): # pidVals = sorted([(x,Ev.partonMatchDR[x]) for x in range(len(Ev.partonMatchIdx)) if (Ev.partonMatchIdx[x]==ijet and Ev.partonMatchDR[x]<0.25)],key=lambda (x,y):(y)) # if len(pidVals)<1: pid[ijet] =-999 # else: pid[ijet] = Ev.partonId[pidVals[0][0]] # if pid[ijet]!=-999: for i2,a2 in enumerate(["eta","etaIdx","btag","btagIdx","blik","blikIdx","blik2","blik2Idx","abseta","bbtag","bblik"]): if a2=="blik": continue h = hs["%s_%s"%("sig" if abs(pid[ptIdx])==5 else "bkg",a2)] if not Av[i2] in ["blik","blikIdx","abseta"]: v = eval("Ev.%s[%d]"%(Av[i2],ptIdx)) if not "Idx" in a2 else eval("list(Ev.%s).index(%d)"%(Av[i2],ptIdx)) elif Av[i2] == "blik": v = blik[ptIdx] elif Av[i2] == "blikIdx": v = list(blikIdx).index(ptIdx) elif Av[i2] == "abseta": v = abs(Ev.jetEta[ptIdx]) elif Av[i2] == "bbtag": v = Ev.jetBtag[ptIdx] elif Av[i2] == "bblik": v = blik[ptIdx] h.Fill(v) # # v = [TLorentzVector(),TLorentzVector(),TLorentzVector(),TLorentzVector()] # for j in range(4): # k = blikIdx[j] # v[j].SetPtEtaPhiM(Ev.jetPt[k],Ev.jetEta[k],Ev.jetPhi[k],Ev.jetMass[k]) v = [] for jid in range(4): v += [TLorentzVector()] v[-1].SetPtEtaPhiM(Ev.jetPt[jid],Ev.jetEta[jid],Ev.jetPhi[jid],Ev.jetMass[jid]) blikmqq[0] = (v[blikIdx[2]]+v[blikIdx[3]]).M() blikmbb[0] = (v[blikIdx[0]]+v[blikIdx[1]]).M() blikdetaqq[0] = abs(Ev.jetEta[int(blikIdx[2])]-Ev.jetEta[int(blikIdx[3])]) tmvd.Fill() else: fmvd = TFile.Open(prefix+"/rootfiles/flatTree_VBFPowheg125_EvIntStep04%s_%s.root"%("Alt" if opts.alt else "",opts.sel),"update") gDirectory.cd("Hbb") tmvd = fmvd.Get("Hbb/events") for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["eta","etaIdx","btag","btagIdx","blik","blikIdx","blik2","blik2Idx"]): eval('h%s_%s = fmvd.Get("Hbb/h%s_%s")'%(a1,a2,a1,a2)) # c = TCanvas("c","c",1800,1500) c.Divide(4,4) Bv = ["blikNOM" if opts.sel=="NOM" else "blikVBF","blikNOMIdx" if opts.sel=="NOM" else "blikVBFIdx","blik","blikIdx","mqq[0]","mqq[%d]"%(1 if opts.sel=="NOM" else 2),"blikmqq","NONE","dEtaqq[0]","dEtaqq[%d]"%(1 if opts.sel=="NOM" else 2),"blikdetaqq","NONE","mbb[0]","mbb[%d]"%(1 if opts.sel=="NOM" else 2),"blikmbb","NONE"] Bx = ["(old) b-likelihood","(old) b-likelihood rank","b-likelihood","b-likelihood rank","(CSV) m_{qq'} (GeV)","(old) m_{qq'} (GeV)","(new) m_{qq'} (GeV)","","(CSV) #Delta#eta_{qq'}","(old) #Delta#eta_{qq'}","(new) #Delta#eta_{qq'}","","(CSV) m_{b#bar{b}} (GeV)","(old) m_{b#bar{b}} (GeV)","(new) m_{b#bar{b}} (GeV)",""] By = ["N / (0.08)","N / (1)","N / (0.08)","N / (1)","N / (20 GeV)","N / (20 GeV)","N / (20 GeV)","","N / (0.1)","N / (0.1)","N / (0.1)","","N / (10 GeV)","N / (10 GeV)","N / (10 GeV)",""] BN = [25,4,25,4,100,100,100,0,50,50,50,0,30,30,30,0] Bmi = [-1,-0.5,-1,-0.5,0,0,0,0,0,0,0,0,0,0,0,0] Bma = [1,3.5,1,3.5,2000,2000,2000,0,5,5,5,0,300,300,300,0] Bt = ["(existing)","(existing)","(new)","(new)","(existing)","(existing)","(new)","","(existing)","(existing)","(new)","","(existing)","(existing)","(new)",""] for iv,v in enumerate(Bv): if v == "blikNOM" or v == "blikVBF": continue if v == "NONE": continue c.cd(iv+1) gPad.SetGrid(1,1) tmvd.Draw("%s>>h%d(%d,%f,%f)"%(v,iv+1,BN[iv],Bmi[iv],Bma[iv])) eval('h%d.GetXaxis().SetTitle("%s")'%(iv+1,Bx[iv])) eval('h%d.GetYaxis().SetTitle("%s")'%(iv+1,By[iv])) trpave(Bt[iv]) makeDirs(prefix+"/plots") c.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesOut%s%s-1_%s.pdf"%("Alt" if opts.alt else "",opts.alttag if not opts.alttag=="" else "",opts.sel)) c.Close() ci = TCanvas("ci","ci",900,750) # c.Divide(2,1) Bv = ["blikmbb:mbb[0]","mbb[%d]:mbb[0]"%(1 if opts.sel=="NOM" else 2)] Bx = ["CSV b-tag m_{b#bar{b}} (GeV)","CSV b-tag m_{b#bar{b}} (GeV)"] By = ["b-likelihood m_{b#bar{b}} (GeV)","b-likelihood m_{b#bar{b}} (GeV)"] BN = [[140,140],[140,140]] Bmi = [[0,0],[0,0]] Bma = [[700,700],[700,700]] Bt = ["(new)","(existing)"] for iv,v in enumerate(Bv): if v == "NONE": continue # c.cd(iv+1) ci.cd() tmvd.Draw("%s>>h%d(%d,%f,%f,%d,%f,%f)"%(v,iv+1+12,BN[iv][0],Bmi[iv][0],Bma[iv][0],BN[iv][1],Bmi[iv][1],Bma[iv][1]),"","colz") gPad.SetRightMargin(0.14) gPad.SetTopMargin(0.06) gPad.SetBottomMargin(0.14) eval('ROOT.h%d.GetXaxis().SetTitle("%s")'%(iv+1+12,Bx[iv])) eval('ROOT.h%d.GetYaxis().SetTitle("%s")'%(iv+1+12,By[iv])) eval('ROOT.h%d.GetXaxis().SetTitleOffset(%.2f)'%(iv+1+12,1.1)) #trpave(Bt[iv]) tlpave("Set %s selection"%("A" if opts.sel=="NOM" else "B"),0.85,1) eval('ROOT.h%d.GetZaxis().SetRangeUser(1,4000)'%(iv+1+12)) gPad.SetLogz(1) ci.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesOut%s%s-2%s_%s.pdf"%("Alt" if opts.alt else "",opts.alttag if not opts.alttag=="" else "","-new" if iv==0 else "-existing",opts.sel)) #ci.Close() cb = TCanvas("cb","cb",1800,750) cb.Divide(2,1) c = TCanvas("c","c",2700,1950) c.Divide(3,3) for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["eta","etaIdx","btag","btagIdx","blik","blikIdx","blik2","blik2Idx","abseta","bbtag","bblik"]): h = hs["%s_%s"%(a1,a2)] if "Idx" in a2: h.GetXaxis().SetNdivisions(4) if not h.Integral()==0: h.Scale(1./h.Integral()) h.GetYaxis().SetRangeUser(0.001 if a2 in ["btag","blik","blik2","bbtag","bblik"] else 0.0,h.GetBinContent(h.GetMaximumBin())*(75 if a2 in ["btag","blik","blik2","bbtag","bblik"] else 1.4)) legs = [TLegend(1.-gStyle.GetPadRightMargin()-0.03-0.30,1.-gStyle.GetPadTopMargin()-0.03,1.-gStyle.GetPadRightMargin()-0.03,1.-gStyle.GetPadTopMargin()-0.03-0.055*3,"%s selection"%("Set A" if opts.sel=="NOM" else "Set B"))] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(8): legs += [deepcopy(legs[0])] hsigbtagnew = btagTrafo(hs["sig_btag"],"sig",fc["sig"],fs["sig"],lc["sig"]) hbkgbtagnew = btagTrafo(hs["bkg_btag"],"bkg",fc["bkg"],fs["bkg"],lc["bkg"]) for i2,a2 in enumerate(["blik2","blik2Idx","blikIdx","btag","btagIdx","NONE","eta","etaIdx","NONE"]): if a2=="blik2": cb.cd(1) elif a2=="blik2Idx": cb.cd(2) else: c.cd(i2+1) for a1 in ["sig","bkg"]: gPad.SetRightMargin(0.02) gPad.SetBottomMargin(0.12) if a2=="NONE": continue h = hs["%s_%s"%(a1,a2)] if a2=="btag" and a1=="sig": h = hsigbtagnew elif a2=="btag" and a1=="bkg": h = hbkgbtagnew gPad.SetGrid(1,1) if a2 in ["btag","blik","blik2"]: gPad.SetLogy(1) else: gPad.SetLogy(0) h.Draw("" if a1=="sig" else "same") legs[i2].AddEntry(h,"signal" if a1=="sig" else "background","F") if a1=="bkg": legs[i2].Draw() h.GetXaxis().SetTitleSize(0.05) h.GetYaxis().SetTitleSize(0.05) h.GetXaxis().SetTitleOffset(1.1) h.GetYaxis().SetTitleOffset(1.35) h.GetXaxis().SetLabelSize(0.04) h.GetYaxis().SetLabelSize(0.04) if a2=="btag": epave("-1",-0.08,0.000306) epave("-10",-0.13,0.000306) gPad.Update() if "blik2" in a2 and a1=="bkg": cb.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesOut%s%s-3a_%s.pdf"%("Alt" if opts.alt else "",opts.alttag if not opts.alttag=="" else "",opts.sel)) c.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesOut%s%s-3_%s.pdf"%("Alt" if opts.alt else "",opts.alttag if not opts.alttag=="" else "",opts.sel)) c = TCanvas("c","c",900,750) c.cd() legs = [TLegend(gStyle.GetPadLeftMargin()+0.05,gStyle.GetPadBottomMargin()+0.05,gStyle.GetPadLeftMargin()+0.3,gStyle.GetPadBottomMargin()+0.05+0.050*4,"%s selection"%("Set A" if opts.sel=="NOM" else "Set B"))] legs[0].SetTextFont(42) legs[0].SetTextSize(0.045) legs[0].SetFillStyle(0) legs[0].SetBorderSize(0) gs = {} for i2,a2 in enumerate(["bblik","bbtag","abseta"]): hsig = hs["sig_%s"%a2] hbkg = hs["bkg_%s"%a2] g = makeGraph(hsig,hbkg,"right" if not a2=="abseta" else "left") g.Write() gs[a2] = g legs[0].AddEntry(g,"b-likelihood" if "blik" in a2 else ("CSV b-tag" if a2=="bbtag" else "|#eta|"),"L") g.Draw("A,L" if i2==0 else "same,L") legs[0].Draw() legs[0].SetY2(legs[0].GetY1()+legs[0].GetNRows()*0.050+0.05) gPad.Update() c.SaveAs(prefix+"/plots/EvIntDiscriminant_variablesOut%s%s-4_%s.pdf"%("Alt" if opts.alt else "",opts.alttag if not opts.alttag=="" else "",opts.sel)) if opts.replot: for i in range(20): h = eval("ROOT.h%d"%(i)) if h: h.Write(h.GetName(),TH1.kOverwrite) for a1 in ["sig","bkg"]: for i2,a2 in enumerate(["blik2","blik2Idx","blikIdx","btag","btagIdx","NONE","eta","etaIdx","NONE"]): if a2=="NONE": continue h = hs["%s_%s"%(a1,a2)] if h: h.Write(h.GetName(),TH1.kOverwrite) for g in gs.itervalues(): if g: g.Write(g.GetName(),TH1.kOverwrite) else: fmvd.Write() # fmvd.Close() ###################################################################################################################################################### ###################################################################################################################################################### if opts.step==7: l1("Step 07%s: %s: more plots."%(" (Alt)" if opts.alt else "",opts.sel)) gROOT.SetBatch(1) gStyle.SetOptStat(0) gStyle.SetLineScalePS(2) gROOT.ProcessLineSync(".x %s/styleCMSTDR.C"%basepath) gStyle.SetPadRightMargin(0.02) gStyle.SetPadLeftMargin(0.16) gStyle.SetPadTopMargin(0.05) gStyle.SetPadBottomMargin(0.12) gROOT.SetBatch(1) gStyle.SetTitleOffset(1.35,"Y") gStyle.SetTitleSize(0.05,"XYZ") gStyle.SetLabelSize(0.04,"XYZ") gStyle.SetPalette(1) gStyle.SetGridColor(17) TGaxis.SetMaxDigits(4) fin = TFile.Open("rootfiles/bjetId_%s_MVA%s.root"%(opts.sel,"Alt" if opts.alt else ""),"read") tin = fin.Get("TestTree") fout = TFile.Open(prefix+"/rootfiles/flatTree_VBFPowheg125_EvIntStep07%s_%s.root"%("Alt" if opts.alt else "",opts.sel),"recreate") NTrue = float(tin.GetEntries("classID==0")) NFake = float(tin.GetEntries("classID==1")) V = ["btag","btag","abs(eta)","abs(eta)","BDT_GRAD2","BDT_GRAD2"] Av = ["btagTrue","btagFake","etaTrue","etaFake","blikTrue","blikFake"] Ax = ["CSV b-tag","CSV b-tag","|#eta|","|#eta|","b-likelihood","b-likelihood"] Ay = ["N / (0.05)","N / (0.05)","N / (0.2)","N / (0.2)","N / (0.08)","N / (0.08)"] Ami = [0,0,0,0,-1,-1] Ama = [1,1,5,5,1,1] AN = [20,20,25,25,25,25] hs = {} for a in range(len(Av)): hs["%s"%Av[a]] = TH1F("h%s"%Av[a],"h%s;%s;%s"%(Av[a],Ax[a],Ay[a]),AN[a],Ami[a],Ama[a]) h = hs["%s"%Av[a]] if "True" in Av[a]: h.SetLineColor(kBlue) h.SetFillColor(kBlue-9) h.SetFillStyle(1001) elif "Fake" in Av[a]: h.SetLineColor(kRed) h.SetFillColor(kRed) h.SetFillStyle(3004) for v in range(len(V)): tin.Draw("%s>>h%s"%(V[v],Av[v]),"classID==0" if "True" in Av[v] else "classID==1") if "True" in Av[v]: hs[Av[v]].Scale(1./NTrue) elif "Fake" in Av[v]: hs[Av[v]].Scale(1./NFake) c = TCanvas("c","c",900,1950) c.Divide(1,3) legs = [TLegend(1.-gStyle.GetPadRightMargin()-0.03-0.30,1.-gStyle.GetPadTopMargin()-0.03,1.-gStyle.GetPadRightMargin()-0.03,1.-gStyle.GetPadTopMargin()-0.03-0.055*3,"%s selection"%("Set A" if opts.sel=="NOM" else "Set B"))] legs[0].SetTextFont(42) legs[0].SetTextSize(0.05) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(20): legs += [deepcopy(legs[0])] for a in range(len(Av)): c.cd(divmod(a+2,2)[0]) h = hs["%s"%Av[a]] h.Draw("" if "True" in Av[a] else "same") legs[divmod(a+2,2)[0]].AddEntry(h,"signal" if "True" in Av[a] else "background","F") if "Fake" in Av[a]: legs[divmod(a+2,2)[0]].Draw() if "btag" in Av[a] or "blik" in Av[a]: if "True" in Av[a]: h.GetYaxis().SetRangeUser(0.001,h.GetBinContent(h.GetMaximumBin())*75) gPad.SetLogy(1) else: if "True" in Av[a]: h.GetYaxis().SetRangeUser(0.0,h.GetBinContent(h.GetMaximumBin())*1.4) gPad.SetLogy(0) c.SaveAs("plots/performance%s-1_%s.pdf"%("Alt" if opts.alt else "",opts.sel)) c.Close() xtrue = [0.]*1000 yfake = [0.]*1000 c = TCanvas("c","c",900,750) c.cd() legs = [TLegend(gStyle.GetPadLeftMargin()+0.05,gStyle.GetPadBottomMargin()+0.05,gStyle.GetPadLeftMargin()+0.3,gStyle.GetPadBottomMargin()+0.05+0.050*4,"%s selection"%("Set A" if opts.sel=="NOM" else "Set B"))] legs[0].SetTextFont(42) legs[0].SetTextSize(0.045) legs[0].SetFillStyle(-1) legs[0].SetBorderSize(0) for i in range(20): legs += [deepcopy(legs[0])] gs = {} for a in range(len(Av)): if "True" in Av[a]: xtrue = [0.]*1000 yfake = [0.]*1000 for i in range(hs[Av[a]].GetNbinsX()): xtrue[i] = hs[Av[a]].Integral(i,hs[Av[a]].GetNbinsX()) if "eta" in Av[a]: xtrue[i] = 1. - xtrue[i] elif "Fake" in Av[a]: for i in range(hs[Av[a]].GetNbinsX()): yfake[i] = 1. - hs[Av[a]].Integral(i,hs[Av[a]].GetNbinsX()) if "eta" in Av[a]: yfake[i] = -yfake[i] + 1. gs[Av[a][0:-4]] = TGraph(hs[Av[a]].GetNbinsX(),array('f',xtrue[0:hs[Av[a]].GetNbinsX()]),array('f',yfake[0:hs[Av[a]].GetNbinsX()])) g = gs[Av[a][0:-4]] g.SetLineColor(kRed if "btag" in Av[a] else (kGreen+2 if "eta" in Av[a] else kBlue)) gPad.SetGrid(1,1) gs["btag"].GetXaxis().SetLimits(0.7,1.05) gs["btag"].GetYaxis().SetRangeUser(0.0,1.1) gs["btag"].GetXaxis().SetTitle("Efficiency of matched b-jets") gs["btag"].GetYaxis().SetTitle("Rejection of matched non b-jets") gs["btag"].GetXaxis().SetNdivisions(504) gs["btag"].Draw("AL") gs["eta"].Draw("sameL") gs["blik"].Draw("sameL") legs[-1].AddEntry(gs["btag"],"CSV b-tag","L") legs[-1].AddEntry(gs["eta"],"|#eta|","L") legs[-1].AddEntry(gs["blik"],"b-likelihood","L") legs[-1].Draw() c.SaveAs("plots/performance%s-2_%s.pdf"%("Alt" if opts.alt else "",opts.sel)) c.Close() c1s = fin.Get("CorrelationMatrixS") c1b = fin.Get("CorrelationMatrixB") gStyle.SetGridColor(kBlack) c = TCanvas("c","c",900*2,850*1) c.Divide(2,1) c.cd(1) gPad.SetGrid(1,1) gPad.SetTopMargin(0.14) gPad.SetRightMargin(0.13) c1s.SetMarkerColor(kBlack) c1s.Draw("colz,text") epavetext(["Correlation matrix (signal)","%s selection"%("Set A" if opts.sel=="NOM" else "Set B")],0.03,0.88,0.5,0.97) epavetext(["Linear correlation coefficients in %"],0.52,0.85,0.99,0.89,0.025,0) gPad.Update() gPad.RedrawAxis() c.cd(2) gPad.SetGrid(1,1) gPad.SetTopMargin(0.14) gPad.SetRightMargin(0.13) c1b.SetMarkerColor(kBlack) c1b.Draw("colz,text") epavetext(["Correlation matrix (background)","%s selection"%("Set A" if opts.sel=="NOM" else "Set B")],0.03,0.88,0.5,0.97) epavetext(["Linear correlation coefficients in %"],0.52,0.85,0.99,0.89,0.025,0) gPad.Update() gPad.RedrawAxis() c.SaveAs("plots/performance%s-3_%s.pdf"%("Alt" if opts.alt else "",opts.sel)) c.Close() gStyle.SetGridColor(17) fout.Write(fout.GetName(),TH1.kOverwrite) fin.Close() fout.Close()
def mkUncJEx(): ################################################## # initialising #print gSystem.Load("../fitbias/fitTF1") # gSystem.AddIncludePath("-I/opt/Software/include") # gROOT.ProcessLine(".L ../fitbias/fitTF1.C++") opts,fout,variables = main.main(parser(),False,True,False) gDirectory.cd("%s:/"%fout.GetName()) jsoninfo = json.loads(filecontent(opts.jsoninfo)) jsonsamp = json.loads(filecontent(opts.jsonsamp)) jsonvars = json.loads(filecontent(opts.jsonvars)) jsoncuts = json.loads(filecontent(opts.jsoncuts)) global SEL global TRG global DTG global REF global CUT global LAB global colours global offset catbounds = {} for tag in opts.tag: catbounds[tag] = array('f',opts.categoryboundaries[0]) if tag=="NOM" else array('f',opts.categoryboundaries[1]) if (not len(opts.selection) == len(opts.trigger)) or (not len(opts.selection) == len(opts.tag)): sys.exit("Selection/trigger/tag options are broken. Exiting.") for i in range(len(opts.selection)): s = opts.selection[i] t = opts.trigger[i] d = opts.datatrigger[i] if opts.datatrigger and len(opts.datatrigger)>1 else opts.datatrigger[0] if opts.datatrigger else t r = opts.reftrig[i] if opts.reftrig and len(opts.reftrig)>1 else opts.reftrig[0] if opts.reftrig else 'None' w = opts.weight[1] if opts.weight else "???" tag = opts.tag[i] SEL[tag] = s TRG[tag] = t DTG[tag] = d REF[tag] = r WGT[tag] = w CUT[tag],LAB[tag] = write_cuts(s,t,reftrig=["None"],sample="VBF125",jsonsamp=opts.jsonsamp,jsoncuts=opts.jsoncuts,weight=opts.weight,trigequal='1') ################################################## # some ROOT settings gStyle.SetOptStat(0) gROOT.SetBatch(1) TH1.SetDefaultSumw2(1) ROOT.gErrorIgnoreLevel = kWarning gROOT.ProcessLine("TH1::SetDefaultSumw2(1);") gStyle.SetPadTopMargin(0.02) gStyle.SetPadBottomMargin(0.23) gStyle.SetPadLeftMargin(0.11) gStyle.SetLabelFont(43,"XYZ") gStyle.SetLabelSize(25,"XYZ") gStyle.SetTitleFont(43,"XYZ") gStyle.SetTitleSize(30,"XYZ") gStyle.SetTitleOffset(3.0,"X") gStyle.SetTitleOffset(1.6,"Y") gStyle.SetLabelOffset(0.015,"X") gStyle.SetTitleColor(kBlack,"XYZ")#kBlue+2 gStyle.SetLabelColor(kBlack,"XYZ") gStyle.SetTickLength(0.02) ################################################## # reading sample properties friends = ["HbbJERUp","HbbJERCl","HbbJESDn","HbbJESUp"]#HbbJERDn,#"HbbJESUp","HbbJESDn", sampleproperties = {} for s in opts.sample: sampleproperties[s] = {} sprops = sampleproperties[s] # load sample properties sprops['tag'] = s sprops['group'] = jsoninfo['groups'][s] sprops['file'] = [k for (k,v) in jsonsamp['files'].iteritems() if v['tag']==s][0] sprops['scale'] = jsonsamp['files'][sprops['file']]['scale'] sprops['colour'] = jsonsamp['files'][sprops['file']]['colour'] sprops['tfile'] = TFile(opts.globalpath+'/'+sprops['file'],"read") sprops['ttree'] = {} for f in ["%s"%x for x in ['Hbb']+friends]: if sprops['tfile'].Get("%s/events"%f): sprops['ttree'][f] = sprops['tfile'].Get("%s/events"%f) else: sprops['ttree'][f] = None sprops['th1'] = {} sprops['tf1'] = {} for tag in opts.tag: for incat,ncat in enumerate(["%s"%x for x in ['Hbb']+friends]): for inh,nh in enumerate(opts.variable): key = (tag,ncat,nh) sprops[key] = {'th1':None,'tf1':{'ful':None,'bkg':None,'params':None}} if incat==0: sprops[(tag,'JES',nh)] = {'tca':None} sprops[(tag,'JER',nh)] = {'tca':None} if catveto(tag,nh): continue if 'jetUnsPt' in nh: variables[nh]['xmin'] = '-0.4' variables[nh]['xmax'] = '0.4' variables[nh]['nbins_x'] = '41' v = variables[nh]['root'] n = variables[nh]['var'] xmin = float(variables[nh]['xmin']) xmax = float(variables[nh]['xmax']) bins = int(variables[nh]['nbins_x']) tx = variables[nh]['title_x'] ty = variables[nh]['title_y'] f1,f2,f3,hname = gethname(WGT[tag],variables[nh],sprops['group'],sprops['tag'],SEL[tag],TRG[tag],DTG[tag],REF[tag]) hname = hname.replace('hNum','h%s'%ncat) if "mva" in v: sprops[key]['th1'] = TH1F(hname,"%s;%s;%s"%(hname,tx,ty),len(catbounds[tag])-1,catbounds[tag]) else: sprops[key]['th1'] = TH1F(hname,"%s;%s;%s"%(hname,tx,ty),bins,xmin,xmax) sprops[key]['th1'].Sumw2() if incat==0: sprops[(tag,'JES',nh)]['tca'] = TCanvas(hname.replace('h%s'%ncat,'cJES'),hname.replace('h%s'%ncat,'cJES'),1200,1200) sprops[(tag,'JER',nh)]['tca'] = TCanvas(hname.replace('h%s'%ncat,'cJER'),hname.replace('h%s'%ncat,'cJER'),1200,1200) # summarize load block l1("Loaded properties for:") print "%s%12s | %12s | %8s | %15s | %40s | %15s | %15s | %55s |%s"%(blue,"tag","group","colour","scale","file","tree name","object type","alternatives",plain) print "-"*(15*2 + 11 + 18 + 43 + 36 + 58 - 1) for sp in sampleproperties.itervalues(): print "%12s | %12s | %8s | %15s | %40s | %15s | %15s | %55s |"%( \ sp["tag"],sp["group"],sp["colour"],sp["scale"],sp["file"], \ sp["ttree"]["Hbb"].GetName() if not sp["ttree"]["Hbb"]==None else "%s%15s%s"%(Red,"None",plain), \ sp["ttree"]["Hbb"].IsA().GetName() if not sp["ttree"]["Hbb"]==None else "%s%15s%s"%(Red,"None",plain), \ ", ".join([x for x in sprops["ttree"].keys()]) if len(sprops["ttree"].keys())>0 else "%s%30s%s"%(Red,"None",plain) \ ) # summarize selections & triggers: l1("Running these selections:") for tag in opts.tag: print "%s%s%s: %s\n\t%s%s%s"%(Black,tag,plain,LAB[tag],grey,CUT[tag],plain) ################################################## # loop makeDirs("plots/uncertainties") f0 = "histos" for isp,sp in enumerate(sampleproperties.itervalues()): # start stag = sp['tag'] l1("Working with sample: %s"%stag) sp['tfile'].cd() tarray = [] for tag in opts.tag: for incat,ncat in enumerate(["%s"%x for x in ["Hbb"]+friends]): l2("Category %s (%s)"%(ncat,tag)) tree = sp['ttree'][ncat] treedraw = tree.Draw for inh,(nhf,nhr,nh) in enumerate([(variables[x],variables[x]['root'],variables[x]['var']) for x in opts.variable]): if 'jetUnsPt' in nh and 'JES' in ncat: continue f1,f2,f3,hname = gethname(WGT[tag],nhf,sp['group'],sp['tag'],SEL[tag],TRG[tag],DTG[tag],REF[tag]) hname = hname.replace('hNum','h%s'%ncat) makeDirs("plots/uncertainties/%s%s"%(f1,'' if not opts.noleg else '_noleg')) makeDirsRoot(fout,'%s/%s/%s/%s'%(f0,f1,f2,f3)) sp['tfile'].cd() if catveto(tag,nh): continue # tstart = time() # if (isp==0 and incat==len(["%s"%x for x in ["Hbb"]+friends])-1 and inh==len(variables)-1): average = tarray[-1] # l3("%-40s %-40s"%("Variable %s"%nh,"(time expected %.fs + %d modules)"%(tarray[-1]*((5-inh)+(4-incat)*5) if len(tarray)>0 else -999,len(sampleproperties)-isp-1))) l3("%-40s"%("Variable %s"%nh)) if "JER" in ncat: sp[(tag,'JER',nh)]['tca'].cd() else: sp[(tag,'JES',nh)]['tca'].cd() if fout.Get("%s/%s/%s/%s/%s;1"%(f0,f1,f2,f3,hname)): l4('%sLoading%s: %s \n%s%s(%s/%s/%s/%s)%s'%(red,plain,hname,grey,' '*9,f0,f1,f2,f3,plain)) sp[(tag,ncat,nh)]['th1'] = fout.Get("%s/%s/%s/%s/%s;1"%(f0,f1,f2,f3,hname)).Clone() # sp[(tag,ncat,nh)]['th1'].Sumw2() else: l4('%sCreating%s: %s \n%s%s(%s/%s/%s/%s)%s'%(red,plain,hname,grey,' '*9,f0,f1,f2,f3,plain)) if not 'jetUnsPt' in nh: treedraw("%s>>%s"%(nhr,sp[(tag,ncat,nh)]['th1'].GetName()),CUT[tag]) else: treedraw("((%s - %s)/(%s))>>%s"%(nhr.replace('Uns',''),nhr,nhr.replace('Uns',''),sp[(tag,ncat,nh)]['th1'].GetName()),CUT[tag]) oldwd = gDirectory.GetPath() gDirectory.cd("%s:/%s/%s/%s/%s/"%(fout.GetName(),f0,f1,f2,f3)) sp[(tag,ncat,nh)]['th1'].Write(sp[(tag,ncat,nh)]['th1'].GetName(),TH1.kOverwrite) gDirectory.cd(oldwd) #tnow = time() #tarray += [time01(tstart,tnow,tarray)] if 'mbb' in nh: # gROOT.ProcessLineSync('TCanvas *can = new TCanvas("%s","%s",1800,1800)'%(sp[(tag,ncat,nh)]['th1'].GetName()[:100],sp[(tag,ncat,nh)]['th1'].GetName()[:100])) # gROOT.ProcessLineSync('TH1F hroot = (TH1F)gDirectory->FindObjectAny("%s").Clone("%s")'%(sp[(tag,ncat,nh)]['th1'].GetName(),sp[(tag,ncat,nh)]['th1'].GetName()[:100])) # gROOT.ProcessLineSync('double params[8] = {0.,0.,0.,0.,0.,0.,0.,0.}') # gROOT.ProcessLineSync('fitTF1(can,hroot,%.2f,%.2f,%.2f,params,%i)'%(90.+offset[ncat],160.+offset[ncat],(float(variables[nh]['xmax'])-float(variables[nh]['xmin']))/float(variables[nh]['nbins_x']),colours[ncat])) # sp[(tag,ncat,nh)]['tf1']['params'] = dc(list(ROOT.params)) # count = 0 # for i in ROOT.can.GetListOfPrimitives(): # if i.IsA().GetName() == "RooCurve" and count==0: # sp[(tag,ncat,nh)]['tf1']['ful'] = i.Clone() # count += 1 # elif i.IsA().GetName() == "RooCurve" and count==1: # sp[(tag,ncat,nh)]['tf1']['bkg'] = i.Clone() # count += 1 # break # gROOT.ProcessLineSync('can.Close()') sp[(tag,ncat,nh)]['th1'].Scale(1./float(sp[(tag,ncat,nh)]['th1'].Integral())) c = TCanvas("%s"%(sp[(tag,ncat,nh)]['th1'].GetName()[:100]),"%s"%(sp[(tag,ncat,nh)]['th1'].GetName()[:100]),1800,1800) h = sp[(tag,ncat,nh)]['th1'].Clone(sp[(tag,ncat,nh)]['th1'].GetName()[:100]) params = [0.]*9 fitTF1(c,h,50,200,(float(variables[nh]['xmax'])-float(variables[nh]['xmin']))/float(variables[nh]['nbins_x']),params,colours[ncat]) #print params sp[(tag,ncat,nh)]['tf1']['params'] = dc(list(params)) count = 0 for i in c.GetListOfPrimitives(): if i.IsA().GetName() == "RooCurve" and count==0: sp[(tag,ncat,nh)]['tf1']['ful'] = i.Clone() count += 1 elif i.IsA().GetName() == "RooCurve" and count==1: sp[(tag,ncat,nh)]['tf1']['bkg'] = i.Clone() count += 1 break c.Close() for inh,nh in enumerate([variables[x]['var'] for x in opts.variable]): if catveto(tag,nh): continue # JES Up/Dn if 'HbbJESUp' in friends: sp[(tag,'Hbb',nh)]['th1'] = style01(sp[(tag,'Hbb',nh)]['th1'],kBlack,kGray) sp[(tag,'HbbJESUp',nh)]['th1'] = style01(sp[(tag,'HbbJESUp',nh)]['th1'],kBlue+1,None,1)#7 sp[(tag,'HbbJESDn',nh)]['th1'] = style01(sp[(tag,'HbbJESDn',nh)]['th1'],kRed+1,None,1)#10 sp[(tag,'JES',nh)]['tca'],numbersJES = func01(opts,tag,sp[(tag,'JES',nh)]['tca'],dict((y,(sp[(tag,y,nh)]['th1'],sp[(tag,y,nh)]['tf1'],None)) for y in ['Hbb','HbbJESUp','HbbJESDn']),SEL[tag],TRG[tag]) # JER Up/Dn if 'HbbJERCl' in friends: sp[(tag,'HbbJERUp',nh)]['th1'] = style01(sp[(tag,'HbbJERUp',nh)]['th1'],kViolet+1,None,1)#7 sp[(tag,'HbbJERCl',nh)]['th1'] = style01(sp[(tag,'HbbJERCl',nh)]['th1'],kSpring-1,None,1)#7 #sp[(tag,'HbbJERDn',nh)]['th1'] = style01(sp[(tag,'HbbJERDn',nh)]['th1'],kMagenta+1,None,9)#10 sp[(tag,'JER',nh)]['tca'],numbersJER = func01(opts,tag,sp[(tag,'JER',nh)]['tca'],dict((y,(sp[(tag,y,nh)]['th1'],sp[(tag,y,nh)]['tf1'],sp[(tag,y,nh[0:3]+'Uns'+nh[3:])]['th1'] if 'jetPt' in nh else None)) for y in ['Hbb','HbbJERUp','HbbJERCl']),SEL[tag],TRG[tag]) #,'HbbJERDn' # table numbers = {} if not numbersJES=={}: for k,v in sorted(numbersJES.iteritems()): numbers[k] = v if not numbersJER=={}: for k,v in sorted(numbersJER.iteritems()): numbers[k] = v if 'mva' in nh: labels = ['Categories','JES Up','JES Down','JER','JER$^{+}$ wrt. JER'] print "\\begin{table}\n\t\\caption{Jet-energy scale and resolution uncertainty values per category.}\\centering \\small\n\t\\begin{tabular}{|*{%d}{c|}} \\hline"%(len(labels)) print "\t", for il,l in enumerate(labels): print "%20s%s"%("\makebox[2.2cm]{%s}"%l," &" if not il==len(labels)-1 else ""), print "\\\\ \\hline\\hline" for i,(cl,cu) in enumerate(sorted(list(set([(cl,cu) for (n,cl,cu) in numbers.iterkeys()])))): print "\t%20d &"%(i-1 if not 'VBF' in tag else (i+3 if not i==0 else -2)), for j,n in enumerate(['HbbJESUp','HbbJESDn','HbbJERCl','HbbJERUp']): if n=='HbbJERUp': print "%20.4f"%(1-numbers[(n,cl,cu)]), elif not n=='HbbJERCl': print "%20.3f &"%(1+numbers[(n,cl,cu)]), else: print "%20.3f &"%numbers[(n,cl,cu)], print "\\\\ \\hline" if 'NOM' in tag: print "\t\\hline" else: print "" print "\\end{tabular}\n\\end{table}"