def __init__(self, year, inData): print self.INPUT_PATH + '/fakeRate' + inData + year + '.root' self.num = getObjFromFile( self.INPUT_PATH + '/fakeRate' + inData + year + '.root', 'fakeRate_num') self.denom = getObjFromFile( self.INPUT_PATH + '/fakeRate' + inData + year + '.root', 'fakeRate_denom')
def getReweightingFunction(data="PU_2016_36000_XSecCentral", useMC=None): # Data histoData = getObjFromFile(dataDir + data + '.root', 'pileup') histoData.Scale(1. / histoData.Integral()) # MC if not useMC: mcProfile = ROOT.TH1D('mc', 'mc', 100, 0, 100) sys.stdout = open(os.devnull, 'w') from SimGeneral.MixingModule.mix_2016_25ns_Moriond17MC_PoissonOOTPU_cfi import mix sys.stdout = sys.__stdout__ for i, value in enumerate(mix.input.nbPileupEvents.probValue): mcProfile.SetBinContent(i + 1, value) # pylint: disable=E1101 else: mcProfile = useMC mcProfile.Scale(1. / mcProfile.Integral()) # Create reweighting histo reweightingHisto = histoData.Clone('reweightingHisto') reweightingHisto.Divide(mcProfile) # Define reweightingFunc def reweightingFunc(nTrueInt): return reweightingHisto.GetBinContent( reweightingHisto.FindBin(nTrueInt)) return reweightingFunc
def __init__(self, inData, year): self.num = getObjFromFile( self.INPUT_PATH + '/fakeRate' + inData + year + '.root', 'fakeRate_num') self.denom = getObjFromFile( self.INPUT_PATH + '/fakeRate' + inData + year + '.root', 'fakeRate_denom') self.FR = self.num.Clone() self.FR.Divide(self.denom) self.maxpt = self.FR.GetXaxis().GetBinUpEdge( self.FR.GetXaxis().GetLast()) self.maxeta = self.FR.GetYaxis().GetBinUpEdge( self.FR.GetYaxis().GetLast()) self.lastptbincenter = self.FR.GetXaxis().GetBinCenter( self.FR.GetXaxis().GetLast()) self.lastetabincenter = self.FR.GetYaxis().GetBinCenter( self.FR.GetYaxis().GetLast())
def getHist(self, subjob, name, subPath = None): if subPath is None: subPath = self.path if subPath.endswith('.root'): hCounter = getObjFromFile(subPath, 'blackJackAndHookers/'+name) return hCounter else: hCounter = None for f in self.arrangeFilesInSubjobs()[subjob]: if hCounter is None: hCounter = self.getHist(subjob,name, f) else: hCounter.Add(self.getHist(subjob, name, f)) return hCounter
def getHist(self, name, subPath=None): if subPath is None: subPath = self.path if subPath.endswith('.root'): hCounter = getObjFromFile(subPath, 'blackJackAndHookers/' + name) return hCounter else: hCounter = None listOfFiles = glob.glob(self.path + '/*.root') print self.path + '/*.root' for f in listOfFiles: if hCounter is None: hCounter = self.getHist(name, f) else: hCounter.Add(self.getHist(name, f)) return hCounter
def __init__(self, name, *args): self.name = name self.efficiency_num = [] self.efficiency_denom = None self.input_path = None self.bins = None self.workingPoints = None if len( args ) == 2: #if (bins, workingpoints) is given, instantiate new histograms self.bins = args[0] self.workingPoints = args[1] for i, WP in enumerate(self.workingPoints): self.efficiency_num.append( ROOT.TH1D(name + '_' + WP + '_num', name + '_' + WP + '_num', len(self.bins) - 1, self.bins)) self.efficiency_num[i].Sumw2() self.efficiency_denom = ROOT.TH1D(name + '_denom', name + '_denom', len(self.bins) - 1, self.bins) self.efficiency_denom.Sumw2() elif len(args) == 1 and isinstance(args[0], str): self.input_path = args[0] self.workingPoints = [] f = ROOT.TFile(self.input_path) names = [key.GetName() for key in f.GetListOfKeys()] f.Close() for n in names: if '_denom' in n: self.efficiency_denom = getObjFromFile(self.input_path, n) elif '_num' in n: self.efficiency_num.append( getObjFromFile(self.input_path, n)) self.workingPoints.append(n.split('_')[-2]) self.bins = getLowEdges(self.efficiency_denom)
def __init__(self, name, *args): self.name = name self.eff_numerator = None self.eff_denominator = None self.misid_numerator = None self.misid_denominator = None self.WP = None self.path = None if args and isinstance(args[0], list): self.WP = args[0] self.eff_numerator = TH1D(name + '_eff_numerator', name + '_eff_numerator', len(self.WP), 0, len(self.WP)) self.misid_numerator = TH1D(name + '_misid_numerator', name + '_misid_numerator', len(self.WP), 0, len(self.WP)) self.eff_denominator = TH1D(name + '_eff_denominator', name + '_eff_denominator', 1, 0, 1) self.misid_denominator = TH1D(name + '_misid_denominator', name + '_misid_denominator', 1, 0, 1) self.eff_numerator.Sumw2() self.misid_numerator.Sumw2() self.eff_denominator.Sumw2() self.misid_denominator.Sumw2() elif args and isinstance(args[0], str): self.path = args[0] self.eff_numerator = getObjFromFile(self.path, name + '_eff_numerator') self.eff_denominator = getObjFromFile(self.path, name + '_eff_denominator') self.misid_numerator = getObjFromFile(self.path, name + '_misid_numerator') self.misid_denominator = getObjFromFile( self.path, name + '_misid_denominator') else: pass
'ptTau': 'Taus', 'etaTau': 'Taus', 'Mll': 'Events', 'met': 'Events' } log_map = {'ptTau': False, 'etaTau': True, 'Mll': True, 'met': True} for var in varNames: predicted = [] observed = None store_data_observed = None legendNames = [] for sample in sampleNames: f = glob.glob(input_dir + '/' + sample + '/*' + var + '.root') if sample == 'Data_' + args.year: observed = getObjFromFile(f[0], 'inData_' + var) store_data_observed = getObjFromFile(f[0], 'inData_' + var + '_sideBand') else: tmp_pred = getObjFromFile(f[0], 'inData_' + var) tmp_pred_corr = getObjFromFile(f[0], 'inData_' + var + '_sideBand') tmp_pred.Add(tmp_pred_corr, -1.) predicted.append(tmp_pred) legendNames.append(sample) predicted.append(store_data_observed) legendNames.append('Nonprompt prediction') plt.plotDataVSMC(observed, predicted, xtitle_map[var], legendNames,
xtitle_map = {'ptTau': 'P_{T}(#tau) [GeV]', 'etaTau': '#eta(#tau)', 'Mll': 'M(ll) [GeV]', 'met':'E_{T}^{miss} [GeV]'} ytitle_map = {'ptTau': 'Taus', 'etaTau': 'Taus', 'Mll': 'Events', 'met':'Events'} log_map = {'ptTau': False, 'etaTau': False, 'Mll': False, 'met':False} categ_map = {'Categ_C': 'C: OSSF + #tau', 'Categ_D': 'D: OSOF + #tau', 'Categ_E': 'E: SS + #tau' , 'Categ_F':'F: e/#mu + #tau#tau', 'Check': 'FR measurement region'} makeDirIfNeeded(args.output_dir+'/'+args.sample) file_paths = glob.glob(args.input_dir + '/' + args.sample + '/*.root') year = 2016 if '2017' in args.input_dir: year = 2017 elif '2018' in args.input_dir: year = 2018 for f in file_paths: print f h_name = f.rsplit('/', 1)[1] h_name = h_name.split('.')[0] print h_name split_names = h_name.rsplit('_', 1) categ_name = split_names[0] var_name = split_names[1] extraText = [] if categ_name in categ_map.keys(): extraText.append(plt.extraTextFormat(categ_map[categ_name], 0.5, 0.9)) dist_observed = getObjFromFile(f, h_name) dist_predicted = getObjFromFile(f, h_name+'_sideBand') plt.plotClosure(CleanNegativeBins(dist_observed), CleanNegativeBins(dist_predicted), xtitle_map[var_name], ytitle_map[var_name], args.sample, extraText, args.output_dir + '/' +args.sample+'/'+h_name, year, yLog=log_map[var_name])
background_hists_comb = [] signal_hists_comb = [] ntau = ['singletau', 'ditau'] #scales = (1./280., 1./281., 1./237) scales = (1., 1., 1.) for n in ntau: tmp_mu_hists_bkgr = [] tmp_mu_hists_sig = [] for mu_cut_index in range(NUMBER_OF_MU_WP): tmp_hists = [] for bkgr in background_names: tmp_hists.append( getObjFromFile( basefolderInput + '/Combined/' + bkgr + '_' + n + '_' + str(mu_cut_index) + '.root', 'combined_hist' + bkgr + n + str(mu_cut_index))) tmp_mu_hists_bkgr.append(tmp_hists) tmp_hists = [] for sig, scale in zip(signal_names, scales): hist = getObjFromFile( basefolderInput + '/Combined/' + sig + '_' + n + '_' + str(mu_cut_index) + '.root', 'combined_hist' + sig + n + str(mu_cut_index)) hist.Scale(scale) tmp_hists.append(hist) tmp_mu_hists_sig.append(tmp_hists) background_hists_comb.append(tmp_mu_hists_bkgr) signal_hists_comb.append(tmp_mu_hists_sig) for n in ntau:
def load_fakerate(self, name, path): self.misid_numerator = getObjFromFile(path, name + '_misid_numerator') self.misid_denominator = getObjFromFile(path, name + '_misid_denominator')
def load_efficiency(self, name, path): self.eff_numerator = getObjFromFile(path, name + '_eff_numerator') self.eff_denominator = getObjFromFile(path, name + '_eff_denominator')
'/user/lwezenbe/private/PhD/Code/TauStudy/Significance/Data/' + args.inputFile + '.conf') sample = Sample.getSampleFromList(sampleList, args.sampleName) #Is this sample signal or background isSignal = False keywords = ['SMS', 'TChi', 'Slep', 'Snu'] for key in keywords: if key in sample.name: isSignal = True #Initialize chain Chain = sample.initTree() #If SUSY, load in the hCounterSUSY if isSignal: hCounterSUSY = getObjFromFile(sample.path, 'hCounterSUSY') #Initialize event selector import eventSelector evSel = eventSelector.eventSelector(Chain, int(args.ele_cut_index), int(args.mu_cut_index)) #Initialize histograms to save #These consist of the total number of events that are left after performing the event selection #Each bin represents a different Old MVA Iso working point Single_Tau_Output = ROOT.TH1D('singletau', 'singletau', len(evSel.IsoWorkingPoints), 0, len(evSel.IsoWorkingPoints)) Di_Tau_Output = ROOT.TH1D('ditau', 'ditau', len(evSel.IsoWorkingPoints), 0, len(evSel.IsoWorkingPoints)) basefolder = '/storage_mnt/storage/user/lwezenbe/private/PhD/Results/TauStudy/Significance/Histos'