示例#1
0
def ProjectDraw(var, cut, Lumi, samplelist, pd):

    plt.cfg.register(samplelist)
    groupList = plt.cfg.getGroupPlot()

    histList = OrderedDict()
    VAR = var
    # remove extra space
    CUT = ' '.join(filter(None, selection[cut].split(" ")))

    # group tag
    for igroup in groupList:
        CUT_ = CUT
        if igroup == 'BkgSum': continue
        #if igroup in [ 'Fake', 'DATA' ] : CUT_ =  CUT.replace("isbVeto && ","")

        print col.CYAN + "drawLambda::GroupTag : ", igroup + col.ENDC
        histList[igroup] = {}
        ##sample tag
        for isample in groupList[igroup]['samples']:
            print("isample : ", isample)
            histList[igroup][isample] = []
            if 'weights' in samples[isample].keys():
                for jsample in samples[isample]['weights'].keys():
                    WEIGHTS = '(%s)*(%s)' % (
                        expressAliases(samples[isample]['weight']),
                        samples[isample]['weights'][jsample])
                    #WEIGHTS = '(%s)*(%s)' %( samples[isample]['weight'] , samples[isample]['weights'][jsample] )
                    if igroup not in ['Fake', 'DATA']:
                        WEIGHTS = "%s*(%s)" % (str(
                            float(Lumi) / 1000.), WEIGHTS)
                    filelist = [
                        x for x in samples[isample]['name']
                        if os.path.basename(x).split('_', 1)[-1].replace(
                            '.root', '').split('__part')[0] == jsample
                    ]
                    files = makeVectorList(filelist)
                    df = ROOT.RDataFrame("Events", files)
                    gROOT.cd()
                    histList[igroup][isample].append(
                        makeHisto(df, VAR, CUT_, WEIGHTS, jsample))
            else:
                WEIGHTS = expressAliases(samples[isample]['weight'])
                #WEIGHTS = samples[isample]['weight']
                if igroup not in ['Fake', 'DATA']:
                    WEIGHTS = "%s*(%s)" % (str(float(Lumi) / 1000.), WEIGHTS)
                filelist = samples[isample]['name']
                files = makeVectorList(filelist)
                df = ROOT.RDataFrame("Events", files)
                gROOT.cd()
                histList[igroup][isample].append(
                    makeHisto(df, VAR, CUT_, WEIGHTS, isample))

        pass
    # apply action
    return applyAction(histList, groupList)
示例#2
0
def plot_signal( var, cut, norm=False ):

    colors = [ 616+4 , 800 , 416+1 , 800+7 , 860+10 , 600 , 616 , 921 , 922 ]

    if cut in selection: plotdir = cut
    pathname = PLOTDIR+"/signals/"+plotdir
    if not os.path.exists(pathname): os.system('mkdir -p %s'%pathname)

    histlist={}
    plt.cfg.register(sign) #sign is grouptag
    samples = plt.cfg.getModule('samples')
    
    CUT = ' '.join(filter( None , selection[cut].split(" ") ))
    signlist = plt.cfg.getGroupPlot()['Higgs']['samples']
    for i,isample in enumerate(signlist):
        WEIGHTS = "%s*(%s)" %( str(float(LUMI)/1000.) , expressAliases(samples[isample]['weight']) )
        filelist = [ x for x in samples[isample]['name'] ]
        files = makeVectorList(filelist)
        df = ROOT.RDataFrame("Events", files); gROOT.cd()
        histlist[isample] = makeHisto( df , var , CUT , WEIGHTS , isample )
        histlist[isample] = histlist[isample].GetPtr()
        histlist[isample].Sumw2()
        histlist[isample].SetLineWidth(2)
        histlist[isample].SetLineColor(colors[i])
    #######################################################################################################
    # add total histograms
    histlist['Higgs']=None
    for i, ihist in enumerate(histlist):
        if i==0:
            histlist['Higgs'] = histlist[ihist].Clone('totsignal')
            histlist['Higgs'].Sumw2()
        histlist['Higgs'].Add(histlist[ihist])
    
    leg = TLegend( 0.7 if not options.Statebox else 0.4 , 0.9-0.035*len(signlist), 0.9, 0.9)
    leg.SetBorderSize(0)
    leg.SetFillStyle(1001) #1001                                                                                                                                    
    leg.SetFillColor(0)
    for s in signlist : leg.AddEntry(histlist[s], '%s [%.1f]' %( s , histlist[s].Integral() ) , "l")

    c1 = TCanvas("c1", "Signals", 800, 600)
    c1.cd().SetLogy() if options.logy else c1.cd()
    c1.cd()
    c1.GetPad(0).SetTopMargin(0.06)
    c1.GetPad(0).SetRightMargin(0.05)
    c1.GetPad(0).SetTicks(1, 1)

    hmax = 0.
    for i, s in enumerate(signlist):
        if histlist[s].GetMaximum() > hmax: hmax = histlist[s].GetMaximum()
    if not options.logy:
        histlist[signlist[0]].SetMaximum(hmax*1.2)
        histlist[signlist[0]].SetMinimum(0.)
    else:
        histlist[signlist[0]].SetMaximum(hmax*4)

    c1.cd()
    for i, s in enumerate(signlist):
        histlist[s].Draw("HIST" if i==0 else "SAMES, HIST")
        if options.Statebox:
            c1.GetPad(0).Update()
            if i==1:
                lof = histlist[s].GetListOfFunctions()
                statbox = lof.FindObject('stats')
                statbox.SetX1NDC(0.779026); statbox.SetX2NDC(0.979401)
                statbox.SetY1NDC(0.593168); statbox.SetY2NDC(0.754658)
    leg.Draw()

    drawCMS(LUMI, "Simulation")
    printTable_signal( histlist , pathname , '%s_%s.txt' %(plotdir,var) , signlist , histplease=True )
    ### fitting mass shape?
    ########################

    if gROOT.IsBatch():
        c1.Print(pathname+"/"+var.replace('.', '_')+".png")
        #c1.Print(pathname+"/"+var.replace('.', '_')+".pdf")
        
    #print col.WARNING+"PURGE OBJECTS IN MEMORY"+col.ENDC
    #for process in histlist:
    #    histlist[process].Delete()
    pass
示例#3
0
            if 'weights' in samples[isample].keys():
                for jsample in samples[isample]['weights'].keys():
                    WEIGHTS = '(%s)*(%s)' % (
                        expressAliases(samples[isample]['weight']),
                        samples[isample]['weights'][jsample])
                    if itag not in ['Fake', 'DATA']:
                        WEIGHTS = "%s*(%s)" % (str(
                            float(LUMI) / 1000.), WEIGHTS)
                    filelist = [
                        x for x in samples[isample]['name']
                        if os.path.basename(x).split('_', 1)[-1].replace(
                            '.root', '').split('__part')[0] == jsample
                    ]
                    files = makeVectorList(filelist)
                    #print " --> Caching in subsamples : ", jsample
                    DF[itag][isample][jsample] = ROOT.RDataFrame(
                        "Events", files).Define("weight", WEIGHTS)  #.Cache();
            else:
                isptr = True
                WEIGHTS = expressAliases(samples[isample]['weight'])
                if itag not in ['Fake', 'DATA']:
                    WEIGHTS = "%s*(%s)" % (str(float(LUMI) / 1000.), WEIGHTS)
                filelist = samples[isample]['name']
                files = makeVectorList(filelist)
                #print " --> Caching in samples : ", isample
                DF[itag][isample] = ROOT.RDataFrame("Events", files).Define(
                    "weight", WEIGHTS)  #.Cache();
    ###########################################################
    df_result = OrderedDict()

    if fake:
        DF_fake = OrderedDict()
def ProjectDraw(var, cut, Lumi, samplelist, pd):

    plt.cfg.register(samplelist)
    groupList = plt.cfg.getGroupPlot()

    histList = {}
    VAR = var
    # remove extra space
    CUT = ' '.join(filter(None, selection[cut].split(" ")))

    # group tag
    for igroup in groupList:
        CUT_ = CUT
        if igroup == 'BkgSum': continue
        #if igroup in [ 'Fake', 'DATA' ] : CUT_ =  CUT.replace("isbVeto && ","")

        print col.OKGREEN + "drawLambda::GroupTag : ", igroup + col.ENDC
        #histList[igroup]={} ;
        hists = {}
        ##sample tag
        for isample in groupList[igroup]['samples']:
            print("isample : ", isample)
            hists[isample] = {}
            isptr = False
            ## check if weights exist
            if 'weights' in samples[isample].keys():
                ## sub-samples tag
                subhists = {}
                for jsample in samples[isample]['weights'].keys():
                    subhists[jsample] = {}
                    WEIGHTS = '(%s)*(%s)' % (
                        expressAliases(samples[isample]['weight']),
                        samples[isample]['weights'][jsample])
                    #WEIGHTS = '(%s)*(%s)' %( samples[isample]['weight'] , samples[isample]['weights'][jsample] )
                    if igroup not in ['Fake', 'DATA']:
                        WEIGHTS = "%s*(%s)" % (str(
                            float(Lumi) / 1000.), WEIGHTS)
                    filelist = [
                        x for x in samples[isample]['name']
                        if os.path.basename(x).split('_', 1)[-1].replace(
                            '.root', '').split('__part')[0] == jsample
                    ]
                    files = makeVectorList(filelist)
                    df = ROOT.RDataFrame("Events", files)
                    gROOT.cd()
                    subhists[jsample] = makeHisto(df, VAR, CUT_, WEIGHTS,
                                                  jsample)
                # Wg = (Wg*w1,Wg*w2)
                hists[isample] = sumHistoPtr(subhists, isample, True)
            else:
                ## all sub-samples share common weights
                ###print col.OKGREEN+ "drawLambda::Sub-Samples : "  , samples[isample]['weights'].keys() + col.ENDC
                isptr = True
                WEIGHTS = expressAliases(samples[isample]['weight'])
                #WEIGHTS = samples[isample]['weight']
                if igroup not in ['Fake', 'DATA']:
                    WEIGHTS = "%s*(%s)" % (str(float(Lumi) / 1000.), WEIGHTS)
                filelist = samples[isample]['name']
                files = makeVectorList(filelist)
                df = ROOT.RDataFrame("Events", files)
                gROOT.cd()
                hists[isample] = makeHisto(df, VAR, CUT_, WEIGHTS, isample)

        # Vg = sum(Wg,Zq)
        histList[igroup] = sumHistoPtr(hists, igroup, isptr)

        print col.YELLOW + "group tag processed : ", histList.keys(), col.ENDC

        histList[igroup].Sumw2()
        histList[igroup].SetFillColor(groupList[igroup]['fillcolor'])
        histList[igroup].SetFillStyle(groupList[igroup]['fillstyle'])
        histList[igroup].SetLineColor(groupList[igroup]['linecolor'])
        histList[igroup].SetLineStyle(groupList[igroup]['linestyle'])
    return histList