示例#1
0
def doPlot():

    #print "Read Ploting Region information"
    #print "===============================\n"

    vars = (config.get(section, 'vars')).split(
        ',')  #get the variables to be ploted in each region
    #print "The variables are", vars, "\n"
    data = eval(config.get(
        section, 'Datas'))  # read the data corresponding to each CR (section)
    mc = eval(config.get('Plot_general',
                         'samples'))  # read the list of mc samples
    total_lumi = eval(config.get('Plot_general', 'lumi'))
    #print 'total lumi is', total_lumi
    print "The list of mc samples is", mc

    #print "Check if is Signal Region"
    #print "=========================\n"
    SignalRegion = False
    if config.has_option(section, 'Signal'):
        mc.append(config.get(section, 'Signal'))
        SignalRegion = True
    #print "After addind the signal, the mc is", mc

    #print "Getting information on data and mc samples"
    #print "==========================================\n"

    #print "Getting data sample"
    datasamples = info.get_samples(data)
    #print "datasamples is\n", datasamples
    #print "Getting mc sample"
    mcsamples = info.get_samples(mc)
    #print "mc sample is\n"
    #for sample in mcsamples:
    #print "sample name", sample.name

    GroupDict = eval(
        config.get('Plot_general', 'Group')
    )  #Contained in plots. Listed in general, under Group [Samples] group. This is a dictionnary that descriebes what samples should share the same color under the stack plot.

    #GETALL AT ONCE
    options = []
    Stacks = []
    #print "Start Loop over the list of variables(to fill the StackMaker )" print "==============================================================\n"
    for i in range(
            len(vars)
    ):  # loop over the list of variables to be ploted in each reagion
        #print "The variable is ", vars[i], "\n"
        Stacks.append(
            StackMaker(config, vars[i], region, SignalRegion)
        )  # defined in myutils DoubleStackMaker. The StackMaker merge together all the informations necessary to perform the plot (plot region, variables, samples and signal region ). "options" contains the variables information, including the cuts.
        options.append(Stacks[i].options)
    #print "Finished Loop over the list of variables(to fill the StackMaker )"
    #print "================================================================\n"
    #print 'loop options',options
    # print 'options',options

    #Prepare cached files in the temporary (tmpSamples) folder.
    Plotter = HistoMaker(mcsamples + datasamples, path, config, options,
                         GroupDict, filelist, opts.mergeplot)
    if len(filelist) > 0 or opts.mergeplot:
        print('ONLY CACHING PERFORMED, EXITING')
        sys.exit(1)

    #print '\nProducing Plot of %s\n'%vars[v]
    Lhistos = [[] for _ in range(0, len(vars))]
    Ltyps = [[] for _ in range(0, len(vars))]
    Ldatas = [[] for _ in range(0, len(vars))]
    Ldatatyps = [[] for _ in range(0, len(vars))]
    Ldatanames = [[] for _ in range(0, len(vars))]
    Ljobnames = [[] for _ in range(0, len(vars))]

    #print "Summing up the Luminosity"
    #print "=========================\n"

    #! Sums up the luminosity of the data:
    lumicounter = 0.
    lumi = 0.
    if datasamples == []:
        lumi = total_lumi
    else:
        print "Will run over datasamples to sum up the lumi"
        for job in datasamples:
            print "Datasample is", job
            lumi += float(job.lumi)
            lumicounter += 1.
        if lumicounter > 0:
            lumi = lumi / lumicounter

    print "The lumi is", lumi, "\n"

    Plotter.lumi = lumi
    mass = Stacks[0].mass

    #print 'mcsamples',mcsamples
    inputs = []
    for job in mcsamples:
        #        print 'job.name'
        #        cutOverWrite = None
        #        if addBlindingCut:
        #            cutOverWrite = config.get('Cuts',region)+' & ' + addBlindingCut
        inputs.append((Plotter, "get_histos_from_tree", (job, True)))

    #print 'inputs are', inputs

    # if('pisa' in config.get('Configuration','whereToLaunch')):
    multiprocess = int(config.get('Configuration', 'nprocesses'))
    #    multiprocess=0
    outputs = []
    if multiprocess > 1:
        from multiprocessing import Pool
        from myutils import GlobalFunction
        p = Pool(multiprocess)
        #print 'launching get_histos_from_tree with ',multiprocess,' processes'
        outputs = p.map(GlobalFunction, inputs)
    else:
        #print 'launching get_histos_from_tree with ',multiprocess,' processes'
        for input_ in inputs:
            outputs.append(getattr(
                input_[0],
                input_[1])(*input_[2]))  #ie. Plotter.get_histos_from_tree(job)
    #print 'get_histos_from_tree DONE'
    Overlaylist = []
    for i, job in enumerate(mcsamples):
        #print 'job.name',job.name,"mass==",mass
        #hTempList, typList = Plotter.get_histos_from_tree(job)
        hDictList = outputs[i]
        if job.name in mass:
            #print 'job.name == mass'
            histoList = []
            for v in range(0, len(vars)):
                histoCopy = deepcopy(hDictList[v].values()[0])
                histoCopy.SetTitle(job.name)
                histoList.append(histoCopy)
            Overlaylist.append(histoList)
#            Overlaylist.append(deepcopy([hDictList[v].values()[0] for v in range(0,len(vars))]))
# >>>>>>> silviodonato/master
        for v in range(0, len(vars)):
            Lhistos[v].append(hDictList[v].values()[0])
            Ltyps[v].append(hDictList[v].keys()[0])
            Ljobnames[v].append(job.name)

    #print "len(vars)=",len(vars)
    #print "Ltyps is", Ltyps
    ##invert Overlaylist[variable][job] -> Overlaylist[job][variable]
    #print "len(Overlaylist) before: ",len(Overlaylist)
    #print "Overlaylist",Overlaylist
#    newOverlaylist = [[None]*len(Overlaylist)]*len(vars)
#    for i,OverlaySameSample in enumerate(Overlaylist):
#            for j,Overlay in enumerate(OverlaySameSample):
#                newOverlaylist[j][i] = Overlay
#    Overlaylist = newOverlaylist
    Overlaylist = [list(a) for a in zip(*Overlaylist)]
    #print "len(Overlaylist) after: ",len(Overlaylist)
    #print "Overlaylist",Overlaylist

    ##merge overlays in groups
    for i in range(len(Overlaylist)):
        newhistos = {}
        #print "len(Overlaylist[i]):",Overlaylist[i]
        for histo in Overlaylist[i]:
            #print "histo.GetName()",histo.GetName(),
            #print "histo.GetTitle()",histo.GetTitle(),
            group = GroupDict[histo.GetTitle()]
            if not group in newhistos.keys():
                histo.SetTitle(group)
                newhistos[group] = histo
            else:
                #print "Before newhistos[group].Integral()",newhistos[group].Integral(),
                newhistos[group].Add(histo)
                #print "After newhistos[group].Integral()",newhistos[group].Integral()
        Overlaylist[i] = newhistos.values()

#   ### ORIGINAL ###
#    print 'mcsamples',mcsamples
#    for job in mcsamples:
#        print 'job.name',job.name
#        #hTempList, typList = Plotter.get_histos_from_tree(job)
#        if addBlindingCut:
#            hDictList = Plotter.get_histos_from_tree(job,config.get('Cuts',region)+' & ' + addBlindingCut)
#        else:
#            print 'going to get_histos_from_tree'
#            hDictList = Plotter.get_histos_from_tree(job)
#        if job.name == mass:
#            print 'job.name', job.name
#            Overlaylist= deepcopy([hDictList[v].values()[0] for v in range(0,len(vars))])
#        for v in range(0,len(vars)):
#            Lhistos[v].append(hDictList[v].values()[0])
#            Ltyps[v].append(hDictList[v].keys()[0])
#            Ljobnames[v].append(job.name)

#print "DATA samples\n"
#! Get the data histograms
    for job in datasamples:
        if addBlindingCut:
            dDictList = Plotter.get_histos_from_tree(
                job,
                config.get('Cuts', region) + ' & ' + addBlindingCut)
        else:
            dDictList = Plotter.get_histos_from_tree(job)
        #! add the variables list for each job (Samples)
        for v in range(0, len(vars)):
            Ldatas[v].append(dDictList[v].values()[0])
            Ldatatyps[v].append(dDictList[v].keys()[0])
            Ldatanames[v].append(job.name)

    for v in range(0, len(vars)):

        #print "Ltyps[v]:",Ltyps[v]
        #print "Lhistos[v]:",Lhistos[v]
        #print "Ldatas[v]:",Ldatas[v]
        #print "Ldatatyps[v]:",Ldatatyps[v]
        #print "Ldatanames[v]:",Ldatanames[v]
        #print "lumi:",lumi

        histos = Lhistos[v]
        typs = Ltyps[v]
        Stacks[v].histos = Lhistos[v]
        Stacks[v].typs = Ltyps[v]
        Stacks[v].datas = Ldatas[v]
        Stacks[v].datatyps = Ldatatyps[v]
        Stacks[v].datanames = Ldatanames[v]
        if SignalRegion:
            Stacks[v].overlay = Overlaylist[v]  ## from
        Stacks[v].lumi = lumi
        Stacks[v].jobnames = Ljobnames[v]
        Stacks[v].normalize = eval(config.get(section, 'Normalize'))
        Stacks[v].doPlot()
        ##FIXME##
        #        Stacks[v].histos = Lhistos[v]
        #        Stacks[v].typs = Ltyps[v]
        #        Stacks[v].datas = Ldatas[v]
        #        Stacks[v].datatyps = Ldatatyps[v]
        #        Stacks[v].datanames= Ldatanames[v]
        #        Stacks[v].normalize = True
        #        Stacks[v].options['pdfName'] = Stacks[v].options['pdfName'].replace('.pdf','_norm.pdf')
        #        Stacks[v].doPlot()
        print 'i am done!\n'
    print 'DOPLOT END'
示例#2
0
def doPlot():

    vars = (config.get(section, 'vars')).split(',')
    data = config.get(section, 'Datas')
    mc = eval(config.get('Plot_general', 'samples'))

    print '  with Vars:', vars
    print '  Using MC samples: ', mc
    print '  and Data samples: ', data

    # Is set in plots.  Can be the mass of ZH/ggZH.
    SignalRegion = False
    if config.has_option(section, 'Signal'):
        mc.append(config.get(section, 'Signal'))
        SignalRegion = True

    #print '\n\n\t\t=====SignalRegion:', SignalRegion

    datasamples = info.get_samples(data)
    mcsamples = info.get_samples(mc)

    GroupDict = eval(config.get('Plot_general', 'Group'))

    #GETALL AT ONCE
    options = []
    Stacks = []
    for i in range(len(vars)):
        Stacks.append(StackMaker(config, vars[i], region, SignalRegion))
        options.append(Stacks[i].options)

# Init the HistoMaker class
    Plotter = HistoMaker(mcsamples + datasamples, path, config, options,
                         GroupDict)

    #print '\nProducing Plot of %s\n'%vars[v]
    Lhistos = [[] for _ in range(0, len(vars))]
    Ltyps = [[] for _ in range(0, len(vars))]
    Ldatas = [[] for _ in range(0, len(vars))]
    Ldatatyps = [[] for _ in range(0, len(vars))]
    Ldatanames = [[] for _ in range(0, len(vars))]

    #Find out Lumi:
    lumicounter = 0.
    lumi = 0.
    for job in datasamples:
        lumi += float(job.lumi)
        lumicounter += 1.

    if lumicounter > 0:
        lumi = lumi / lumicounter

    print '\n\t\t Luminosity Auto Calculation: ', lumi

    # temp hack
    #lumi = 3000.
    Plotter.lumi = lumi
    mass = Stacks[0].mass

    # Define the counters for statistics counting
    mass_count = Counter()
    bdt_count = Counter()

    for job in mcsamples:

        # hDictList returns list of TH1Fs of the specified vars to plot
        if addBlindingCut:
            hDictList = Plotter.get_histos_from_tree(
                job,
                config.get('Cuts', region) + ' & ' + addBlindingCut)
        else:
            hDictList = Plotter.get_histos_from_tree(job)

        #print '\n\n\t\tJob name: ', job.name
        if job.name == 'ZH125':
            #or job.name == 'ggZH125':
            Overlaylist = deepcopy(
                [hDictList[v].values()[0] for v in range(0, len(vars))])

        for v in range(0, len(vars)):
            Lhistos[v].append(hDictList[v].values()[0])
            Ltyps[v].append(hDictList[v].keys()[0])
            hist = hDictList[v].values()[0]

        # end variable loop
    # end MC sample loop

    # Loop over data
    for job in datasamples:

        # temp hack to turn off data
        #break

        #hTemp, typ = Plotter.get_histos_from_tree(job)
        if addBlindingCut:
            dDictList = Plotter.get_histos_from_tree(
                job,
                config.get('Cuts', region) + ' & ' + addBlindingCut)
        else:
            dDictList = Plotter.get_histos_from_tree(job)

        for v in range(0, len(vars)):
            Ldatas[v].append(dDictList[v].values()[0])
            Ldatatyps[v].append(dDictList[v].keys()[0])
            Ldatanames[v].append(job.name)

# produce the final plots and save
    for v in range(0, len(vars)):

        histos = Lhistos[v]
        typs = Ltyps[v]
        Stacks[v].histos = Lhistos[v]
        Stacks[v].typs = Ltyps[v]
        Stacks[v].datas = Ldatas[v]
        Stacks[v].datatyps = Ldatatyps[v]
        Stacks[v].datanames = Ldatanames[v]
        if SignalRegion:
            Stacks[v].overlay = Overlaylist[v]
        Stacks[v].lumi = lumi

        Stacks[v].doPlot()

        Stacks[v].overlay = []
        Stacks[v].histos = Lhistos[v]
        Stacks[v].typs = Ltyps[v]
        Stacks[v].datas = Ldatas[v]
        Stacks[v].datatyps = Ldatatyps[v]
        Stacks[v].datanames = Ldatanames[v]
        Stacks[v].normalize = True
        Stacks[v].options['pdfName'] = Stacks[v].options['pdfName'].replace(
            '.pdf', '_norm.pdf')
        #Stacks[v].doPlot()
        print 'i am done!\n'
示例#3
0
        _treevar = treevar
        _name = title
        _countHisto = "CountWeightedLHEWeightScale"
        _countbin = lhe_num
        appendList()

_countHisto = "CountWeighted"
_countbin = 0

#print '===================\n'
#print 'The option list is', optionsList

print 'Preparations for Histograms (HistoMakeri)'
print '=========================================\n'

mc_hMaker = HistoMaker(all_samples, path, config, optionsList, GroupDict)
data_hMaker = HistoMaker(data_samples, path, config, [optionsList[0]])

print 'Calculate luminosity'
print '====================\n'
#Calculate lumi
lumi = 0.
nData = 0
for job in data_samples:
    nData += 1
    lumi += float(job.lumi)

if nData > 1:
    lumi = lumi / float(nData)

mc_hMaker.lumi = lumi
示例#4
0
def doPlot():
    vars = (config.get(section, 'vars')).split(',')
    data = config.get(section,'Datas')
    mc = eval(config.get('Plot_general','samples'))

    SignalRegion = False
    if config.has_option(section,'Signal'):
        mc.append(config.get(section,'Signal'))
        SignalRegion = True
            
    datasamples = info.get_samples(data)
    mcsamples = info.get_samples(mc)

    GroupDict = eval(config.get('Plot_general','Group'))

    #GETALL AT ONCE
    options = []
    Stacks = []
    for i in range(len(vars)):
        Stacks.append(StackMaker(config,vars[i],region,SignalRegion))
        options.append(Stacks[i].options)
    print options

    Plotter=HistoMaker(mcsamples+datasamples,path,config,options,GroupDict)

    #print '\nProducing Plot of %s\n'%vars[v]
    Lhistos = [[] for _ in range(0,len(vars))]
    Ltyps = [[] for _ in range(0,len(vars))]
    Ldatas = [[] for _ in range(0,len(vars))]
    Ldatatyps = [[] for _ in range(0,len(vars))]
    Ldatanames = [[] for _ in range(0,len(vars))]

    #Find out Lumi:
    lumicounter=0.
    lumi=0.
    for job in datasamples:
        lumi+=float(job.lumi)
        lumicounter+=1.

    if lumicounter > 0:
        lumi=lumi/lumicounter

    Plotter.lumi=lumi
    mass = Stacks[0].mass

    for job in mcsamples:
        #hTempList, typList = Plotter.get_histos_from_tree(job)
        if addBlindingCut:
            hDictList = Plotter.get_histos_from_tree(job,config.get('Cuts',region)+' & ' + addBlindingCut)
        else:
            hDictList = Plotter.get_histos_from_tree(job)
        if job.name == mass:
            print job.name
            Overlaylist= deepcopy([hDictList[v].values()[0] for v in range(0,len(vars))])
        for v in range(0,len(vars)):
            Lhistos[v].append(hDictList[v].values()[0])
            Ltyps[v].append(hDictList[v].keys()[0])

    for job in datasamples:
        #hTemp, typ = Plotter.get_histos_from_tree(job)
        if addBlindingCut:
            dDictList = Plotter.get_histos_from_tree(job,config.get('Cuts',region)+' & ' + addBlindingCut)
        else:
            dDictList = Plotter.get_histos_from_tree(job)
        for v in range(0,len(vars)):
            Ldatas[v].append(dDictList[v].values()[0])
            Ldatatyps[v].append(dDictList[v].keys()[0])
            Ldatanames[v].append(job.name)

    for v in range(0,len(vars)):

        histos = Lhistos[v]
        typs = Ltyps[v]
        Stacks[v].histos = Lhistos[v]
        Stacks[v].typs = Ltyps[v]
        Stacks[v].datas = Ldatas[v]
        Stacks[v].datatyps = Ldatatyps[v]
        Stacks[v].datanames= Ldatanames[v]
        #if SignalRegion:
        #    Stacks[v].overlay = Overlaylist[v]
        Stacks[v].lumi = lumi
        Stacks[v].doPlot()
        Stacks[v].histos = Lhistos[v]
        Stacks[v].typs = Ltyps[v]
        Stacks[v].datas = Ldatas[v]
        Stacks[v].datatyps = Ldatatyps[v]
        Stacks[v].datanames= Ldatanames[v]
        Stacks[v].normalize = True
        Stacks[v].options['pdfName'] = Stacks[v].options['pdfName'].replace('.pdf','_norm.pdf')
        Stacks[v].doPlot()
        print 'i am done!\n'