def CreateData(fileList, filename): pathList = fileList #['test1.root', 'test2.root'] signalTreeList = TList() backgroundTreeList = TList() outputFile = TFile(filename, 'recreate') pyfilelist = [] pySignalTreelist = [] pyBackgroundTreelist = [] for path in pathList: print("Path", path) inputFile = TFile(path, 'read') pyfilelist.append(inputFile) # Make this TFile survive the loop! inputSignalTree = inputFile.Get('Signal') inputBackgroundTree = inputFile.Get('Background') pySignalTreelist.append( inputSignalTree) # Make this TTree survive the loop! pyBackgroundTreelist.append( inputBackgroundTree) # Make this TTree survive the loop! outputSignalTree = inputSignalTree.CloneTree( ) #instead of extensive processing outputBackgroundTree = inputBackgroundTree.CloneTree( ) #instead of extensive processing signalTreeList.Add(inputSignalTree) backgroundTreeList.Add(inputBackgroundTree) outputFile.cd() outputSignalTree = TTree.MergeTrees(signalTreeList) outputBackgroundTree = TTree.MergeTrees(backgroundTreeList) outputFile.Write() outputFile.Close()
def run_analysis(options,args): tm = tree_manager() pu_weight_sum = 0.0 selected_events = [] metaInfoTrees = [] nEvents_total = int(0) pwd = ROOT.gDirectory.GetPath() for kFile,input_file in enumerate(args): print print 'processing input file %i/%i: %s'%(kFile+1, len(args), input_file) in_file = TFile.Open(input_file,'read') ROOT.gDirectory.cd(pwd) leptonType = options.leptonType tree = None nEvents_sample = 0 specific = None treeName = 'Ntuple' if not options.allBranches: if leptonType == 'muon': #specific = muonBranches+commonBranches mmg = in_file.Get('mmg') tree = mmg.Get('final').Get(treeName) metaInfoTrees.append(mmg.Get('metaInfo').CloneTree()) nEvents_sample = mmg.Get('eventCount').GetBinContent(1) nEvents_total += mmg.Get('skimCounter').GetBinContent(1) mmg = None elif leptonType == 'electron': #specific = electronBranches+commonBranches eeg = in_file.Get('eeg') tree = eeg.Get('final').Get(treeName) metaInfoTrees.append(eeg.Get('metaInfo').CloneTree()) nEvents_sample = eeg.Get('eventCount').GetBinContent(1) nEvents_total += eeg.Get('skimCounter').GetBinContent(1) eeg = None else: raise Exception('invalid lepton type: %s'%options.leptonType) total_events = tree.GetEntriesFast() tick_size = total_events/100.0 if tick_size < 1: tick_size = 1.0 #tm.importTree(treeName,tree,specific) #tm.cloneTree(treeName,'%s_zs'%treeName,specific) #tm.cloneTree(treeName,'%s_zgs'%treeName,specific) #tm.cloneTree(treeName,'%s_zgs_nosihih'%treeName,specific) #setup process dependent stuff cuts = setupCuts(options) #lepton_mass = lepton_masses[options.leptonType] #z_info = z_infos[options.leptonType] #lepton_info = lepton_infos[options.leptonType] #setup pu-reweighing #pu_weight = pu_weight_nominal #if options.isSummer11: # pu_weigt = pu_weight_summer11 procWeight = 1.0 if options.datType != 'data': procWeight = (options.crossSection * run_lumi[options.leptonType][options.runYear]\ [options.runType]) # setup the corrector (this links the appropriate four momenta # into a common naming scheme correct = setup_corrections(options.runYear , options.runType, options.leptonType, options.datType, options.leptonCor , options.gamCor, options.vanilla ) ievent = long(0) for event in tree: ievent+=1 #print ievent,total_events,fmod(ievent/total_events,0.01) if( not (ievent+1)%int(tick_size) or ievent+1 == total_events ): sys.stdout.write('\r%3.0f%s complete! (%i/%i)'%(((ievent+1)/ tick_size), '%', ievent+1, total_events)) sys.stdout.flush() # setup the common event momentum # ell1 = lepton1, ell2 = lepton2 # gam = photon, Z = dilepton, Zg = Z+photon correct(event) run_idx = getRunIndex(event.run[0],options.runYear, options.runType,options.datType, options.leptonType) setattr(event,'procWeight',procWeight) setattr(event,'puWeight',1.0) if options.datType != 'data': setattr(event,'eventFraction',float(ievent+1)/total_events) event.puWeight = pu_S10_CD_reweight(event.nTruePU[0]) #selected_z = [] #selected_pho_nosihih = [] #selected_pho = [] #bad_leptons = [] if options.datType == 'data': # kill run 170722 # kill the obvious pile up combinatorial event if ( event.run[0] == 170722 or (event.run[0] == 166512 and event.lumi[0] == 1678 and event.evt[0] == 1822682238) ): continue bestLLG = None bestZdiff = -1 for i in range(event.N_PATFinalState): cuts.getCutflow('trigger')(event,i) if options.exlProc and not cuts.getCutflow('trigger') : continue cuts.getCutflow('pho')(event,i) cuts.getCutflow('leptons')(event,i) if ( options.exlProc and not cuts.getCutflow('leptons') and not cuts.getCutflow('pho') ): continue cuts.getCutflow('z')(event,i) if options.exlProc and not cuts.getCutflow('z'): continue if ( cuts.getCutflow('trigger') and cuts.getCutflow('leptons') and cuts.getCutflow('pho') and cuts.getCutflow('z') ): thisZdiff = abs(Z_POLE-event.Z[i].M()) if( cuts.getCut('mindr')[0](event.ell1[i], event.ell2[i], event.gam[i]) and (thisZdiff < bestZdiff or bestLLG is None) ): bestZdiff = thisZdiff bestLLG = i #event object selection done if options.exlProc and bestLLG is None: continue bestZ = bestLLG if bestLLG is not None: setattr(event,'ell1SF',1.0) setattr(event,'ell2SF',1.0) #if run_idx != -1: # event.ell1SF = leptonSF_nominal(event.nGoodVtx, # getattr(event,lepton_info['pt'])[idx1], # getattr(event,lepton_info['eta'])[idx1], # run_idx, # options.leptonType) # event.ell2SF = leptonSF_nominal(event.nGoodVtx, # getattr(event,lepton_info['pt'])[idx2], # getattr(event,lepton_info['eta'])[idx2], # run_idx, # options.leptonType) setattr(event,'bestZ',bestLLG) outTrees.bestZTree(event,tm) #tm.fillTree('%s_zs'%treeName,{}) #bestPhoNoSihih = None #bestPhoNoSihihPt = -1 #for idxph in selected_pho_nosihih: # pho.SetPtEtaPhiM(event.phoCorEt[idxph], # event.phoEta[idxph], # event.phoPhi[idxph], # 0.0) # if bestPhoNoSihih is None or pho.Pt() > bestPhoNoSihihPt: # if ( bestZ is not None and # cuts.getCut('mindr')[0](event.bestZLeg1, # event.bestZLeg2, # pho) ): # bestPhoNoSihih = idxph # bestPhoNoSihihPt = pho.Pt() # elif( bestZ is None ): # bestPhoSihih = idxph # bestPhoSihihPt = pho.Pt() bestPho = bestLLG #and bestPhoNoSihih is None: (below) if options.exlProc and bestPho is None: continue if bestPho is not None: setattr(event,'phoSF',1.0) #if run_idx != -1: # event.phoSF = phoSF_nominal(event.nGoodVtx, # event.phoEt[bestPho], # event.phoEta[bestPho], # run_idx) setattr(event,'bestPho',bestPho) #if bestPhoNoSihih is not None: # setattr(event,'phoNoSihihSF',event.phoSF) # setattr(event,'bestPhoNoSihihIdx',bestPho) # setattr(event,'bestPhoNoSihih',pho) #elif bestPhoNoSihih is not None: # pho.SetPtEtaPhiM(event.phoCorEt[bestPhoNoSihih], # event.phoEta[bestPhoNoSihih], # event.phoPhi[bestPhoNoSihih], # 0.0) # setattr(event,'phoNoSihihSF',1.0) # if run_idx != -1: # event.phoNoSihihSF = phoSF_nominal(event.nGoodVtx, # event.phoEt[bestPhoNoSihih], # event.phoEta[bestPhoNoSihih], # run_idx) # setattr(event,'bestPhoNoSihihIdx',bestPhoNoSihih) # setattr(event,'bestPhoNoSihih',pho) if bestLLG is not None: #if bestPhoNoSihih is not None: # thezg = event.bestZ + event.bestPhoNoSihih # setattr(event,'bestZGNoSihih',thezg) # outTrees.bestZGTreeNoSihih(event,tm) # tm.fillTree('EventTree_zgs_nosihih',{}) hzg_r94cat = hzg_4cat_r9based[leptonType](event,bestLLG) setattr(event,'bestZG_r94cat',hzg_r94cat) hzg_r94cat_mod = \ hzg_4cat_r9based_mod[leptonType](event,bestLLG) setattr(event,'bestZG_r94cat_mod',hzg_r94cat_mod) thezg = event.Zg[bestLLG] selected_events.append((event.run[bestLLG], event.lumi[bestLLG], event.evt[bestLLG])) setattr(event,'bestZG',thezg) outTrees.bestZGTree(event,tm) pu_weight_sum += event.puWeight #tm.fillTree('%s_zgs'%treeName,{}) tree = None in_file.Close() del in_file #make a nice file name input_file = args[0] nameparts = input_file[input_file.rfind('/')+1:] nameparts = nameparts.split('.') #output selected event numbers to file if needed print print 'Selected %i (%.2f) events after processing!'%(len(selected_events), pu_weight_sum) try: os.makedirs(options.prefix) print 'Created prefix directory: %s'%options.prefix except os.error: print 'Prefix directory: %s already exists'%options.prefix if options.dumpSelectedEvents: #sort events selected_events.sort(key=lambda event: event[2]) selected_events.sort(key=lambda event: event[1]) selected_events.sort(key=lambda event: event[0]) evf = open(options.prefix + '%s_%s_%s_processed.%s'%('_'.join(nameparts[:-1]), options.runType, options.leptonType, 'txt'), 'w') for ev in selected_events: evf.write('Run, Lumi, Event #:\t%i\t%i\t%i\n'%ev) evf.close() #push all of our output trees to a file outFileName = '' if options.vanilla: outFileName = '%s_%s_%s_%s_%s_processed.%s'\ %('_'.join(nameparts[:-1]), options.runType, options.datType, options.leptonType, 'vanilla', nameparts[-1]) else: outFileName = '%s_%s_%s_%s_%s_%s_processed.%s'\ %('_'.join(nameparts[:-1]), options.runType, options.datType, options.leptonType, options.leptonCor, options.gamCor, nameparts[-1]) hEventCount = TH1I('eventCount','Total Events Processed',1,0,1) hEventCount.SetBinContent(1,nEvents_total) metaTList = TList() for tree in metaInfoTrees: metaTList.Add(tree) metaTree = TTree.MergeTrees(metaTList) outf = TFile.Open(options.prefix + outFileName,'RECREATE') outf.cd() metaTree.Write() hEventCount.Write() tm.write() outf.Close() ROOT.gDirectory.cd(pwd)
format(home), "{0}/scratch0/ntuple/background_analysis/PFAnalysis_QCDEM3080_5.root". format(home), "{0}/scratch0/ntuple/background_analysis/PFAnalysis_QCDEM3080_6.root". format(home), "{0}/scratch0/ntuple/background_analysis/PFAnalysis_QCDEM3080_7.root". format(home), "{0}/scratch0/ntuple/background_analysis/PFAnalysis_QCDEM3080_8.root". format(home), "{0}/scratch0/ntuple/background_analysis/PFAnalysis_QCDEM3080_9.root". format(home), ] tree_list = TList() tree_name = "Summary/tree" output_file_name = "~/scratch0/PFAnalysis_QCDEM3080_0.root" files = [ TFile(file_name) for file_name in file_list if os.path.exists(file_name) ] print("{0} files found.".format(len(files))) trees = [file.Get(tree_name) for file in files] for tree in trees: if tree: tree_list.Add(tree) merged_tree = TTree.MergeTrees(tree_list) output_file = TFile(output_file_name, "recreate") merged_tree.Write() output_file.Close()
) file = TFile( "/home/arun/ttHAnalysis/2016/2017Feb21_fastsim_dR03mvaLoose/histograms/2lss_1tau/forBDTtraining_SS_OS/ntuple_2lss_1tau_SS_OS_all.root" ) if process == "signal": tree = file.Get("2lss_1tau_lepSS_sumOS_Loose/sel/evtntuple/signal/evtTree") elif process == "TTV": tree_ttw = file.Get( "2lss_1tau_lepSS_sumOS_Loose/sel/evtntuple/TTW/evtTree") tree_ttz = file.Get( "2lss_1tau_lepSS_sumOS_Loose/sel/evtntuple/TTZ/evtTree") list = TList() list.Add(tree_ttw) list.Add(tree_ttz) tree = TTree.MergeTrees(list) tree.SetName("bkgTree") c1 = TCanvas() c1.SetFillColor(10) c1.SetBorderSize(2) c1.SetLeftMargin(0.12) c1.SetBottomMargin(0.12) c1.SetRightMargin(0.05) c1.SetLogy() histogram_base = TH1F("histogram_base", "", 100, -1., 1.) histogram_base.SetTitle("") histogram_base.SetStats(False) histogram_base.SetMinimum(0.001) histogram_base.SetMaximum(10.0)