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'
def doPlot(): #print "Read Ploting Region information" #print "===============================\n" if var_to_plot_: vars = [var_to_plot_] else: 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 remove_sys_ = eval(config.get('Plot_general','remove_sys')) #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, None, '_'+subcut_plotname))# 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" #Prepare cached files in the temporary (tmpSamples) folder. #def __init__(self, samples, path, config, optionsList, GroupDict=None, filelist=None, mergeplot=False, sample_to_merge=None, mergecaching=False): Plotter=HistoMaker(samples=mcsamples+datasamples, path=path, config=config, optionsList=options, GroupDict=GroupDict, filelist=filelist, mergeplot=opts.mergeplot, sample_to_merge=sample_to_merge_, mergeCachingPart=mergeCachingPart, plotMergeCached = opts.mergecachingplot, branch_to_keep=None, dccut=None,remove_sys=remove_sys_) 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, subcut_, '1'))) #print 'inputs are', inputs # if('pisa' in config.get('Configuration','whereToLaunch')): multiprocess=int(config.get('Configuration','nprocesses')) # multiprocess=0 start_time = time.time() 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 = [] print "All histograms retrived. DONE in ", str(time.time() - start_time)," s." start_time = time.time() for i,job in enumerate(mcsamples): hDictList = outputs[i] if job.name in 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) 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: if subcut_: dDictList = Plotter.get_histos_from_tree(job,True, config.get('Cuts',region)+' & ' + addBlindingCut +' & ' + subcut_) else: dDictList = Plotter.get_histos_from_tree(job, True, config.get('Cuts',region)+' & ' + addBlindingCut, '1') else: if subcut_: dDictList = Plotter.get_histos_from_tree(job, True, config.get('Cuts',region)+' & ' + subcut_) else: dDictList = Plotter.get_histos_from_tree(job, True, None, '1') #! 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] try: if SignalRegion: Stacks[v].overlay = Overlaylist[v] ## from except Exception as e: print "NO OVERLAY LIST:", e Stacks[v].lumi = lumi Stacks[v].jobnames= Ljobnames[v] Stacks[v].normalize = eval(config.get(section,'Normalize')) #print 'Stack[v].subcut is', Stacks[v].subcut #if subcut_plotname: Stacks[v].subcut = '_'+subcut_plotname #print 'again, Stack[v].subcut is', Stacks[v].subcut 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 "Last part DONE in ", str(time.time() - start_time)," s." print "tree_stack done in ", str(time.time() - begin_time)," s." print 'DOPLOT END'
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. mc_hMaker.get_histos_from_tree(job) print "job.name and all_histos[job.name]:" for i, job in enumerate(all_samples): all_histos[job.name] = outputs[i] for job in data_samples: print '\t- %s' % job data_histos[job.name] = data_hMaker.get_histos_from_tree(job)[0]['DATA'] print '\t> done <\n' print 'Get the bkg histo' print '=================\n' i = 0 for job in background_samples: print job.name htree = all_histos[job.name][0].values()[0] if not i: hDummy = copy(htree) else: hDummy.Add(htree, 1) del htree i += 1
data_hMaker._rebin = copy(mc_hMaker._rebin) data_hMaker.mybinning = deepcopy(mc_hMaker.mybinning) all_histos = {} data_histos = {} print '\n----> Fetching Histograms....' for job in all_samples: print '\n----> job.name:', job.name if not GroupDict[job.name] in sys_cut_include: # manual overwrite if addBlindingCut: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut+'& %s'%addBlindingCut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job) for job in data_samples: print '\t-----> Data Histogram: ', job data_histos[job.name] = data_hMaker.get_histos_from_tree(job)[0]['DATA'] #data_histos[job.name] = data_hMaker.get_histos_from_tree(job) i=0 for job in background_samples: print job.name htree = all_histos[job.name][0].values()[0] if not i:
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'
data_hMaker.rebin_nBins = copy(mc_hMaker.rebin_nBins) data_hMaker.nBins = copy(mc_hMaker.nBins) data_hMaker._rebin = copy(mc_hMaker._rebin) data_hMaker.mybinning = deepcopy(mc_hMaker.mybinning) all_histos = {} data_histos = {} print '\n\t...fetching histos...' for job in all_samples: print '\t- %s'%job if not GroupDict[job.name] in sys_cut_include: # manual overwrite if addBlindingCut: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut+'& %s'%addBlindingCut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job) for job in data_samples: print '\t- %s'%job data_histos[job.name] = data_hMaker.get_histos_from_tree(job)[0]['DATA'] print '\t> done <\n' i=0 for job in background_samples: print job.name htree = all_histos[job.name][0].values()[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'
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.0 lumi = 0.0 for job in datasamples: lumi += float(job.lumi) lumicounter += 1.0 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"
def doPlot(): vars = (config.get(section, 'vars')).split(',') # print 'vars',vars 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 'loop options',options # print 'options',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))] Ljobnames = [[] 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 # multiprocess=16 # if multiprocess>0: # from multiprocessing import Pool # p = Pool(multiprocess) ## import pathos.multiprocessing as mp ## p = mp.ProcessingPool(multiprocess) # myinputs = [] # for job in self.__sampleList: # myoptions = self.putOptions() # myinputs.append((myoptions,job)) # # outputs = p.map(trim_treeMT, myinputs) 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,cutOverWrite))) multiprocess=64 outputs = [] if multiprocess>0: 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,cutOverWrite) 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))])) 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) ##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 'datasamples',datasamples 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)): 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].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'
data_hMaker.rebin_nBins = copy(mc_hMaker.rebin_nBins) data_hMaker.nBins = copy(mc_hMaker.nBins) data_hMaker._rebin = copy(mc_hMaker._rebin) data_hMaker.mybinning = deepcopy(mc_hMaker.mybinning) all_histos = {} data_histos = {} print "\n\t...fetching histos..." for job in all_samples: print "\t- %s" % job if not GroupDict[job.name] in sys_cut_include: # manual overwrite if addBlindingCut: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job, treecut + "& %s" % addBlindingCut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job, treecut) else: all_histos[job.name] = mc_hMaker.get_histos_from_tree(job) # for job in all_samples: # print '\t- %s'%job # if not GroupDict[job.name] in sys_cut_include: # # manual overwrite # if addBlindingCut: # all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut+'& %s'%addBlindingCut) # else: # all_histos[job.name] = mc_hMaker.get_histos_from_tree(job,treecut) # else: