def get_branch_list_each_tree(self): PATH_included_root = read_file_name_root(self._infile)[2] DicTreeBranchNameList = {} f = TFile(PATH_included_root, "READ") dirlist = f.GetListOfKeys() ITER = dirlist.MakeIterator() key = ITER.Next() while key: BranchNameList = [] tree = key.ReadObj() branchlist = tree.GetListOfBranches() if (branchlist.IsEmpty()): continue ITER_b = branchlist.MakeIterator() key_b = ITER_b.Next() while key_b: BranchNameList.append(key_b.GetName()) key_b = ITER_b.Next() DicTreeBranchNameList[tree.GetName()] = BranchNameList key = ITER.Next() f.Close() return DicTreeBranchNameList
def MakeHistoROOT_general(self, binNum=20, histoName=["Mjj", "lep1pt"]): tfile_list = self.Read_Data_n_MC()[0] Hist_list = [] for i in range(len(tfile_list)): Tree = tfile_list[i].Get("tree") Entries = Tree.GetEntries() #print(Entries) Name = self.Read_Data_n_MC()[1][i] outfile = TFile(Name + "_hist.root", "RECREATE") Hist_list.append(read_file_name_root(Name + "_hist.root")[2]) #BinMinMax_list = [] for jj in range(Entries): Tree.GetEntry(jj) for kk, hName in enumerate(histoName): BranchName = "Tree." + hName if (jj == 0): minval = eval(BranchName) maxval = eval(BranchName) temp_list = [minval, maxval] BinMinMax_list.append(temp_list) else: if (eval(BranchName) < BinMinMax_list[kk][0]): BinMinMax_list[kk][0] = eval(BranchName) if (eval(BranchName) > BinMinMax_list[kk][1]): BinMinMax_list[kk][1] = eval(BranchName) print("Bin Range of histograms :", BinMinMax_list) JHisto_list = [] for num, hName2 in enumerate(histoName): RANGE = BinMinMax_list[num][1] - BinMinMax_list[num][0] temp_hist = TH1D(hName2, hName2, binNum, BinMinMax_list[num][0] - RANGE / 8, BinMinMax_list[num][1] + RANGE / 8) JHisto_list.append(temp_hist) del BinMinMax_list print "Filling ROOT Histogram :", Name for j in range(Entries): Tree.GetEntry(j) for kk, hName in enumerate(histoName): BranchName = "Tree." + hName JHisto_list[kk].Fill(eval(BranchName)) outfile.Write() outfile.Close() del JHisto_list for i in range(len(tfile_list)): tfile_list[i].Close() Hist_tuple = tuple(Hist_list) del Hist_list return Hist_tuple
def get_branch_list_all(self): PATH_included_root = read_file_name_root(self._infile)[2] SetBranchNameList = list() # make a set of branchNameList f = TFile(PATH_included_root, "READ") dirlist = f.GetListOfKeys() ITER = dirlist.MakeIterator() key = ITER.Next() while key: tree = key.ReadObj() branchlist = tree.GetListOfBranches() if (branchlist.IsEmpty()): continue ITER_b = branchlist.MakeIterator() key_b = ITER_b.Next() while key_b: #SetBranchNameList.add(key_b.GetName()) SetBranchNameList.append(key_b.GetName()) key_b = ITER_b.Next() key = ITER.Next() f.Close() return SetBranchNameList
def MakeHistoROOT(self, binNum=20, histoName=["Mjj", "lep1pt"]): tfile_list = self.Read_Data_n_MC()[0] #print(tfile_list) Hist_list = [] BinMinMax_list = [] for i in range( len(tfile_list) ): # Specify Histogram bin-range, bin-num.. ROTATE on all files Tree = tfile_list[i].Get("tree") Entries = Tree.GetEntries() #print(Entries) #Name = self.Read_Data_n_MC()[1][i] #outfile = TFile(Name+"_hist.root","RECREATE") #Hist_list.append(read_file_name_root(Name+"_hist.root")[2]) temp_BinMinMax_list = [] for jj in range(Entries): Tree.GetEntry(jj) for kk, hName in enumerate(histoName): BranchName = "Tree." + hName if (jj == 0): minval = eval(BranchName) maxval = eval(BranchName) temp_list = [minval, maxval] temp_BinMinMax_list.append(temp_list) else: if (hName == "lep1pt"): #ADDED ##FIXME temp_BinMinMax_list[kk][0] = 0 temp_BinMinMax_list[kk][1] = 400 continue #ADDED ##FIXME if (hName == "jet1pt"): #ADDED ##FIXME temp_BinMinMax_list[kk][0] = 0 temp_BinMinMax_list[kk][1] = 600 continue #ADDED ##FIXME if (eval(BranchName) < temp_BinMinMax_list[kk][0]): temp_BinMinMax_list[kk][0] = eval(BranchName) if (eval(BranchName) > temp_BinMinMax_list[kk][1]): temp_BinMinMax_list[kk][1] = eval(BranchName) print("Temp Bin Range of histograms :", temp_BinMinMax_list) if i == 0: BinMinMax_list = list(temp_BinMinMax_list) else: for num1 in range(len(BinMinMax_list)): for num2 in range(len(BinMinMax_list[num1])): if ((num2 == 0) & (BinMinMax_list[num1][num2] > temp_BinMinMax_list[num1][num2])): BinMinMax_list[num1][num2] = temp_BinMinMax_list[ num1][num2] elif ((num2 == 1) & (BinMinMax_list[num1][num2] < temp_BinMinMax_list[num1][num2])): BinMinMax_list[num1][num2] = temp_BinMinMax_list[ num1][num2] print("Final Bin Range of histograms :", BinMinMax_list) del Tree ################################################### CREATE FILE ################################################ for i in range(len(tfile_list)): JHisto_list = [] Tree = tfile_list[i].Get("tree") Entries = Tree.GetEntries() #print(BinMinMax_list) ## Name = self.Read_Data_n_MC()[1][i] outfile = TFile(Name + "_hist.root", "RECREATE") Hist_list.append(read_file_name_root(Name + "_hist.root")[2]) for num, hName2 in enumerate(histoName): #print(BinMinMax_list[num][1], BinMinMax_list[num][0]) ## RANGE = BinMinMax_list[num][1] - BinMinMax_list[num][0] temp_hist = TH1D(hName2, hName2, binNum, BinMinMax_list[num][0] - RANGE / 8, BinMinMax_list[num][1] + RANGE / 8) JHisto_list.append(temp_hist) #del BinMinMax_list print "Filling ROOT Histogram :", Name for j in range(Entries): Tree.GetEntry(j) Entries = Tree.GetEntries() for kk, hName in enumerate(histoName): BranchName = "Tree." + hName JHisto_list[kk].Fill(eval(BranchName)) ### FIXME remove if just interate ROOT files #try: # if((Tree.LL_Helicity)==1.0): JHisto_list[LastNum].Fill(0) # elif((Tree.TL_Helicity)==1.0) : JHisto_list[LastNum].Fill(0.5) # elif((Tree.TT_Helicity)==1.0) : JHisto_list[LastNum].Fill(1) #except Exception: # JHisto_list[LastNum].Fill(-1) ### del JHisto_list outfile.Write() outfile.Close() #del JHisto_list del BinMinMax_list for i in range(len(tfile_list)): tfile_list[i].Close() Hist_tuple = tuple(Hist_list) del Hist_list return Hist_tuple
def __init__(self, fileList): self.filelist = fileList self.namelist = [read_file_name_root(i)[0] for i in fileList]
def MakeHistoROOT_ttZ(self, binNum=20, histoName=["Real", "Regressed"]): tfile_list = self.Read_Data_n_MC()[0] #print(tfile_list) Hist_list = [] BinMinMax_list = [] for i in range( len(tfile_list) ): # Specify Histogram bin-range, bin-num.. ROTATE on all files Tree = tfile_list[i].Get("tree") Entries = Tree.GetEntries() #print(Entries) #Name = self.Read_Data_n_MC()[1][i] #outfile = TFile(Name+"_hist.root","RECREATE") #Hist_list.append(read_file_name_root(Name+"_hist.root")[2]) temp_BinMinMax_list = [] for jj in range(Entries): Tree.GetEntry(jj) for kk, hName in enumerate(histoName): BranchName = "Tree." + hName if (jj == 0): minval = eval(BranchName) maxval = eval(BranchName) temp_list = [minval, maxval] temp_BinMinMax_list.append(temp_list) else: if (eval(BranchName) < temp_BinMinMax_list[kk][0]): temp_BinMinMax_list[kk][0] = eval(BranchName) if (eval(BranchName) > temp_BinMinMax_list[kk][1]): temp_BinMinMax_list[kk][1] = eval(BranchName) print("Temp Bin Range of histograms :", temp_BinMinMax_list) if i == 0: BinMinMax_list = list(temp_BinMinMax_list) else: for num1 in range(len(BinMinMax_list)): for num2 in range(len(BinMinMax_list[num1])): if ((num2 == 0) & (BinMinMax_list[num1][num2] > temp_BinMinMax_list[num1][num2])): BinMinMax_list[num1][num2] = temp_BinMinMax_list[ num1][num2] elif ((num2 == 1) & (BinMinMax_list[num1][num2] < temp_BinMinMax_list[num1][num2])): BinMinMax_list[num1][num2] = temp_BinMinMax_list[ num1][num2] F_BinMinMax = [] print("Final Bin Range of histograms :", BinMinMax_list) if BinMinMax_list[0][0] < BinMinMax_list[1][0]: F_BinMinMax.append(BinMinMax_list[0][0]) else: F_BinMinMax.append(BinMinMax_list[1][0]) if BinMinMax_list[0][1] > BinMinMax_list[1][1]: F_BinMinMax.append(BinMinMax_list[0][1]) else: F_BinMinMax.append(BinMinMax_list[1][1]) print("Merged Bin Range of Histogram :", F_BinMinMax) del Tree ################################################### CREATE FILE ################################################ for i in range(len(tfile_list)): JHisto_list = [] Tree = tfile_list[i].Get("tree") Entries = Tree.GetEntries() #print(BinMinMax_list) ## Name = self.Read_Data_n_MC()[1][i] outfile = TFile(Name + "_hist.root", "RECREATE") Hist_list.append(read_file_name_root(Name + "_hist.root")[2]) for num, hName2 in enumerate(histoName): #print(BinMinMax_list[num][1], BinMinMax_list[num][0]) ## #RANGE = BinMinMax_list[num][1] - BinMinMax_list[num][0] RANGE = F_BinMinMax[1] - F_BinMinMax[0] #temp_hist = TH1D(hName2,hName2,binNum,BinMinMax_list[num][0]-RANGE/8,BinMinMax_list[num][1]+RANGE/8) temp_hist = TH1D(hName2, hName2, binNum, F_BinMinMax[0] - RANGE / 8, F_BinMinMax[1] + RANGE / 8) JHisto_list.append(temp_hist) print("HIST LISTs:", JHisto_list) #del BinMinMax_list print "Filling ROOT Histogram :", Name for j in range(Entries): Tree.GetEntry(j) Entries = Tree.GetEntries() for kk, hName in enumerate(histoName): BranchName = "Tree." + hName JHisto_list[kk].Fill(eval(BranchName)) del JHisto_list outfile.Write() outfile.Close() del BinMinMax_list for i in range(len(tfile_list)): tfile_list[i].Close() Hist_tuple = tuple(Hist_list) del Hist_list return Hist_tuple
def SplitTree(self): FileNameList = read_file_name_root(self._infile) BranchListAll = self.get_branch_list_all() BranchListEachTree = self.get_branch_list_each_tree() DicNumpyArray_branch = {} for numpyarray in BranchListAll: a = numpy.array([0], 'd') DicNumpyArray_branch[numpyarray] = a DicNumpyArray_branch = collections.OrderedDict( sorted(DicNumpyArray_branch.items())) print(DicNumpyArray_branch) DicNumpyArray_branch_w = {} for numpyarray_w in BranchListAll: a_w = numpy.array([0], 'd') DicNumpyArray_branch_w[numpyarray_w] = a_w DicNumpyArray_branch_w = collections.OrderedDict( sorted(DicNumpyArray_branch_w.items())) print(DicNumpyArray_branch_w) gBenchmark.Start("Regerating tree root") f = TFile(FileNameList[2], "READ") dirlist = f.GetListOfKeys() ITER = dirlist.MakeIterator() key = ITER.Next() outfileName = os.getcwd( ) + "/" + FileNameList[0] + "_cut_TTTL.root" #FIXME print("CREATING... :", outfileName) outfile = TFile(outfileName, "RECREATE") ijk = 0 break_flag = 0 while key: if (break_flag == 1): break break_flag += 1 tree = key.ReadObj() tree_f = TTree(tree.GetName() + "", tree.GetName() + "") ENTRY = tree.GetEntries() #print(ENTRY) for i in range(len(DicNumpyArray_branch)): if (list(DicNumpyArray_branch.keys())[i] in BranchListEachTree[tree.GetName()]): tree.SetBranchAddress( list(DicNumpyArray_branch.keys())[i], list(DicNumpyArray_branch.values())[i]) tree_f.Branch( list(DicNumpyArray_branch_w.keys())[i], list(DicNumpyArray_branch_w.values())[i], list(DicNumpyArray_branch_w.keys())[i] + "/D") else: continue print("for tree", tree.GetName()) for j in range(ENTRY): tree.GetEntry(j) if (j % 5000 == 0): print("now looping", j, "th Events, total of ", ENTRY, "events") for k in range(len(DicNumpyArray_branch)): if (list(DicNumpyArray_branch.keys())[k] in BranchListEachTree[tree.GetName()] ): ### FIXED MAYBE not correct.... pass else: continue list(DicNumpyArray_branch_w.values())[k][0] = list( DicNumpyArray_branch.values())[k][0] if (True #& (list(DicNumpyArray_branch.values())[0][0] == 1) # LL #FIXME & (list(DicNumpyArray_branch.values())[0][0] == 0 ) # TTTL #FIXME ): ijk = ijk + 1 tree_f.Fill() else: continue print(" Event left after filtering : ", ijk, "!!!!!!!!!") print("\n") ijk = 0 if (tree_f.GetEntries() == 0): print("!!!!!!! ", tree_f.GetName(), " is Empty, would not be written !!!!!") else: tree_f.Write() key = ITER.Next() print("") print("////////////////////////////////////////////////") print("outputfile : ") print(outfileName) print("////////////////////////////////////////////////") print("") outfile.Close() f.Close() print( "*********************************************************************************************" ) gBenchmark.Show("Regerating tree root") print( "*********************************************************************************************" ) return outfileName