def getMETVariables(analysisType, sample, metType, bjetbin): base = 'TTbarPlusMetAnalysis/' + analysisType + '/Ref selection/BinnedMETAnalysis/' analyser = 'Electron_%s_bin_%s/electron_AbsEta_%s' if 'Mu' in analysisType: analyser = 'Muon_%s_bin_%s/muon_AbsEta_%s' correctionFactors = {} purities = {} stabilities = {} numberOfGenEvents = {} numberOfRecoEvents = {} for metbin in metbins: genMET = base + analyser % ('GenMET', metbin, bjetbin) PFMET = base + analyser % (metType, metbin, bjetbin) genMETs = FileReader.getHistogramFromFile(genMET, FILES.files[sample]) PFMETs = FileReader.getHistogramFromFile(PFMET, FILES.files[sample]) N_gen = genMETs.Integral() N_reco = PFMETs.Integral() purity = (N_gen + N_reco) / N_reco stability = (N_gen + N_reco) / N_gen correctionFactor = N_gen / N_reco correctionFactors[metbin] = correctionFactor purities[metbin] = purity stabilities[metbin] = stability numberOfGenEvents[metbin] = N_gen numberOfRecoEvents[metbin] = N_reco result = { 'correctionFactors': correctionFactors, 'purities': purities, 'stabilities': stabilities, 'numberOfGenEvents': numberOfGenEvents, 'numberOfRecoEvents':numberOfRecoEvents } return result
def getMETVariables(analysisType, sample, metType, bjetbin): base = "TTbarPlusMetAnalysis/" + analysisType + "/Ref selection/BinnedMETAnalysis/" analyser = "Electron_%s_bin_%s/electron_AbsEta_%s" if "Mu" in analysisType: analyser = "Muon_%s_bin_%s/muon_AbsEta_%s" correctionFactors = {} purities = {} stabilities = {} numberOfGenEvents = {} numberOfRecoEvents = {} for metbin in metbins: genMET = base + analyser % ("GenMET", metbin, bjetbin) PFMET = base + analyser % (metType, metbin, bjetbin) genMETs = FileReader.getHistogramFromFile(genMET, FILES.files[sample]) PFMETs = FileReader.getHistogramFromFile(PFMET, FILES.files[sample]) N_gen = genMETs.Integral() N_reco = PFMETs.Integral() purity = (N_gen + N_reco) / N_reco stability = (N_gen + N_reco) / N_gen correctionFactor = N_gen / N_reco correctionFactors[metbin] = correctionFactor purities[metbin] = purity stabilities[metbin] = stability numberOfGenEvents[metbin] = N_gen numberOfRecoEvents[metbin] = N_reco result = { "correctionFactors": correctionFactors, "purities": purities, "stabilities": stabilities, "numberOfGenEvents": numberOfGenEvents, "numberOfRecoEvents": numberOfRecoEvents, } return result
def estimateQCDWithRelIso(inputFiles, histogramForEstimation=defaultHistogram, function='expo', fitRange=(0.3, 1.6), fitRangesForSystematics=[(0.2, 1.6), (0.4, 1.6)]): inputFile = inputFiles['SingleElectron'] if DEBUG: print '*' * 120 print "Estimating QCD using a fit to RelIso" print 'Input file = ', inputFile print 'Histogram = ', histogramForEstimation print 'Fit function = ', function print 'Fit range = ', fitRange print 'Fit ranges for systematics = ', fitRangesForSystematics print '*' * 120 histogramForEstimation = FileReader.getHistogramFromFile( histogramForEstimation, inputFile) result = relIsoMethodWithSystematics( histogramForEstimation, function, fitRange=fitRange, fitRangesForSystematics=fitRangesForSystematics, applyBiasCorrection=True) return result
def doPerformanceStudyOnMCOnly(inputFiles, histogramForEstimation=defaultHistogram, function='expo', fitRanges=[(0.2, 1.6), (0.3, 1.6), (0.4, 1.6)]): if DEBUG: print '*' * 120 print "Estimating QCD using a fit to RelIso" print 'Histogram = ', histogramForEstimation print 'Fit functions = ', function print 'Fit ranges = ', fitRanges print '*' * 120 #get histograms histograms = FileReader.getHistogramDictionary(histogramForEstimation, inputFiles) global allMC, qcd histograms['SumMC'] = plotting.sumSamples(histograms, allMC) histograms['QCD'] = plotting.sumSamples(histograms, qcd) # qcdInSignalRegion = histograms['QCD'].Integral() # qcdError = 0 # if not qcdInSignalRegion == 0: # qcdError = qcdInSignalRegion / sqrt(qcdInSignalRegion) import copy results = {} qcdInSignalRegion, qcdError = getIntegral(histograms['QCD'], (0, 0.1)) # getRelIsoCalibrationCurve(inputFiles, histogramForEstimation, function, fitRanges) for fitRange in fitRanges: #take all other fit ranges as systematics fitRangesForSystematics = copy.deepcopy(fitRanges) fitRangesForSystematics.remove(fitRange) #instead of data use sum MC resultFromMethod = relIsoMethodWithSystematics( histograms['SumMC'], function, fitRange, fitRangesForSystematics, False) estimate, absoluteError = resultFromMethod[ 'estimate'], resultFromMethod['absoluteError'] N_est = ufloat((estimate, absoluteError)) N_qcd = ufloat((qcdInSignalRegion, qcdError)) relativeDeviation = N_est / N_qcd result = {} result['performance'] = (relativeDeviation.nominal_value, relativeDeviation.std_dev()) result['estimate'] = (estimate, absoluteError) result['qcdInSignalRegion'] = (qcdInSignalRegion, qcdError) result['fitfunction'] = function result['fitRange'] = fitRange result['fitRangesForSystematics'] = fitRangesForSystematics result['fit'] = resultFromMethod['fit'] results[str(fitRange)] = result return results
def doPerformanceStudyOnMCOnly(inputFiles, histogramForEstimation=defaultHistogram, function='expo', fitRanges=[(0.2, 1.6), (0.3, 1.6), (0.4, 1.6)]): if DEBUG: print '*' * 120 print "Estimating QCD using a fit to RelIso" print 'Histogram = ', histogramForEstimation print 'Fit functions = ', function print 'Fit ranges = ', fitRanges print '*' * 120 #get histograms histograms = FileReader.getHistogramDictionary(histogramForEstimation, inputFiles) global allMC, qcd histograms['SumMC'] = plotting.sumSamples(histograms, allMC) histograms['QCD'] = plotting.sumSamples(histograms, qcd) # qcdInSignalRegion = histograms['QCD'].Integral() # qcdError = 0 # if not qcdInSignalRegion == 0: # qcdError = qcdInSignalRegion / sqrt(qcdInSignalRegion) import copy results = {} qcdInSignalRegion, qcdError = getIntegral(histograms['QCD'], (0, 0.1)) # getRelIsoCalibrationCurve(inputFiles, histogramForEstimation, function, fitRanges) for fitRange in fitRanges: #take all other fit ranges as systematics fitRangesForSystematics = copy.deepcopy(fitRanges) fitRangesForSystematics.remove(fitRange) #instead of data use sum MC resultFromMethod = relIsoMethodWithSystematics(histograms['SumMC'], function, fitRange, fitRangesForSystematics, False) estimate, absoluteError = resultFromMethod['estimate'], resultFromMethod['absoluteError'] N_est = ufloat((estimate, absoluteError)) N_qcd = ufloat((qcdInSignalRegion, qcdError)) relativeDeviation = N_est / N_qcd result = {} result['performance'] = (relativeDeviation.nominal_value, relativeDeviation.std_dev()) result['estimate'] = (estimate, absoluteError) result['qcdInSignalRegion'] = (qcdInSignalRegion, qcdError) result['fitfunction'] = function result['fitRange'] = fitRange result['fitRangesForSystematics'] = fitRangesForSystematics result['fit'] = resultFromMethod['fit'] results[str(fitRange)] = result return results
def estimateQCDWithRelIso(inputFiles, histogramForEstimation=defaultHistogram, function='expo', fitRange=(0.3, 1.6), fitRangesForSystematics=[(0.2, 1.6), (0.4, 1.6)]): inputFile = inputFiles['SingleElectron'] if DEBUG: print '*' * 120 print "Estimating QCD using a fit to RelIso" print 'Input file = ', inputFile print 'Histogram = ', histogramForEstimation print 'Fit function = ', function print 'Fit range = ', fitRange print 'Fit ranges for systematics = ', fitRangesForSystematics print '*' * 120 histogramForEstimation = FileReader.getHistogramFromFile(histogramForEstimation, inputFile) result = relIsoMethodWithSystematics(histogramForEstimation, function, fitRange=fitRange, fitRangesForSystematics=fitRangesForSystematics, applyBiasCorrection=True) return result
def getStuff(histogramForEstimation, inputFiles): histograms = FileReader.getHistogramDictionary(histogramForEstimation, inputFiles) global allMC, qcd histograms['SumMC'] = plotting.sumSamples(histograms, allMC) histograms['QCD'] = plotting.sumSamples(histograms, qcd) qcdInSignalRegion, qcdError = getIntegral(histograms['QCD'], (0, 0.1)) data, dataError = getIntegral(histograms['SingleElectron'], (0, 0.1)) sumMC, sumMCError = getIntegral(histograms['SumMC'], (0, 0.1)) result = { 'N_data': data, 'N_QCD': qcdInSignalRegion, 'N_QCD_Error': qcdError, 'N_SumMC': sumMC } return result
def getMETVariablesFrom2DPlot(analysisType, sample, metType, bjetbin): hist = 'TTbarPlusMetAnalysis/' + analysisType + '/Ref selection/MET/%s/RecoMET_vs_GenMET_%s' % (metType, bjetbin) correctionFactors = {} purities = {} stabilities = {} numberOfGenEvents = {} numberOfRecoEvents = {} recoMETvsGenMET = FileReader.getHistogramFromFile(hist, FILES.files[sample]) for metbin in metbins: lowerLimit, upperLimit = metbin.split('-') lowerLimit, upperLimit = float(lowerLimit), float(upperLimit) lowerXbin = recoMETvsGenMET.GetXaxis().FindBin(lowerLimit + 0.001) lowerYbin = recoMETvsGenMET.GetYaxis().FindBin(lowerLimit + 0.001) upperXbin, upperYbin = 0,0 overflowX, overflowY = recoMETvsGenMET.GetNbinsX()+1, recoMETvsGenMET.GetNbinsY()+1 if not upperLimit == 'inf': upperXbin = recoMETvsGenMET.GetXaxis().FindBin(upperLimit - 0.001) upperYbin = recoMETvsGenMET.GetYaxis().FindBin(upperLimit - 0.001) else: upperXbin = overflowX upperYbin = overflowY N_reco = recoMETvsGenMET.Integral(0, overflowX, lowerYbin, upperYbin) N_gen = recoMETvsGenMET.Integral(lowerXbin, upperXbin, 0, overflowY) nRecoPlusnGen = recoMETvsGenMET.Integral(lowerXbin, upperXbin, lowerYbin, upperYbin) purity = nRecoPlusnGen/N_reco stability = nRecoPlusnGen/N_gen correctionFactor = N_gen/N_reco correctionFactors[metbin] = correctionFactor purities[metbin] = purity stabilities[metbin] = stability numberOfGenEvents[metbin] = N_gen numberOfRecoEvents[metbin] = N_reco result = { 'correctionFactors': correctionFactors, 'purities': purities, 'stabilities': stabilities, 'numberOfGenEvents': numberOfGenEvents, 'numberOfRecoEvents':numberOfRecoEvents } return result
tdrStyle = Styles.tdrStyle() gStyle.SetOptStat(0) for sample in samples: path = outputFolder + base + sample # if not os.path.exists(path): # os.makedirs(path) # print 'Sample = ', sample # outputFile = open(path + "/outputFile_" + str(sample) + ".txt", "w") for metType in metTypes: for bJetBin in bJetBins: histFile = base + metType + "/RecoMET_vs_GenMET_" + bJetBin print histFile hist = FileReader.getHistogramFromFile(histFile, FILES.files[sample]) print "Plotting..." print "hist = ", hist title1 = TPaveText(0.15, 0.965, 0.4, 1.01, "NDC") title1.SetFillStyle(0) title1.SetBorderSize(0) title1.SetTextFont(42) title1.SetTextAlign(13) title2 = TPaveText(0.5, 0.97, 1, 1.01, "NDC") title2.SetFillStyle(0) title2.SetBorderSize(0) title2.SetTextFont(42) title2.SetTextAlign(13) # bJetBinTitles = {'0btag':'0 b-tags', '0orMoreBtag':'#geq0 b-tags', '1btag':'1 b-tags', '1orMoreBtag':'#geq1 b-tags', '2orMoreBtags':'#geq2 b-tags'}
"electron_pfIsolation_05_0orMoreBtag": 'Events/(0.05)', "electron_dPhi_in": 'Events/(0.01)', "electron_dEta_in": 'Events/(0.001)', "electron_HadOverEM": 'Events/(0.01)', "electron_mvaTrigV0": 'Events/(0.05)', "electron_mvaNonTrigV0": 'Events/(0.05)', "electron_dB": 'Events/(0.001 cm)', 'electron_sigma_ietaieta': 'Events/(0.001)' } histograms = [ 'HLTQCDAnalyser_inclusive/' + trigger + '/' + variable for variable in variables for trigger in triggers ] hists = FileReader.getHistogramsFromFiles(histograms, files) plotting.setStyle() for variable in variables: hists = plotting.rebin(hists, rebins[variable], '*' + variable) hists = plotting.setXRange(hists, limits=limits[variable], histname='*' + variable) hists = plotting.setYTitle(hists, title=titles[variable], histname='*' + variable) labels = [ 'CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT', 'CaloIdVT_CaloIsoVL_TrkIdVL_TrkIsoT', 'CaloIdVL_CaloIsoT_TrkIdVL_TrkIsoT', 'CaloIdVT_TrkIdT' ]
''' Created on Aug 18, 2012 @author: Lukasz Kreczko Email: [email protected] ''' from ROOT import * from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf import dps.utils.ROOTFileReader as FileReader import FILES from math import sqrt h_m3_data = FileReader.getHistogramFromFile( "TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['ElectronHad']) temp_tt = FileReader.getHistogramFromFile( "TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['TTJet']) temp_wj = FileReader.getHistogramFromFile( "TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W1Jet']) temp_wj.Add( FileReader.getHistogramFromFile( "TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W2Jets'])) temp_wj.Add( FileReader.getHistogramFromFile( "TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W3Jets'])) temp_wj.Add( FileReader.getHistogramFromFile(
def printCutFlow(hist, analysis, outputFormat='Latex'): scale_ttbar = 164.4 / 157.5 used_data = 'ElectronHad' lepton = 'Electron/electron' if 'Mu' in analysis: used_data = 'SingleMu' lepton = 'Muon/muon' hist_1mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/' + lepton + '_AbsEta_1orMoreBtag' hist_2mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/' + lepton + '_AbsEta_2orMoreBtags' hist_names = [hist, #due to b-tag scale factors these are not as simple any more hist_1mBtag, hist_2mBtag ] inputfiles = {} for sample in FILES.samplesToLoad: inputfiles[sample] = FILES.files[sample] hists = FileReader.getHistogramsFromFiles(hist_names, inputfiles) for sample in hists.keys(): for histname in hists[sample].keys(): hists[sample][histname].Sumw2() if analysis == 'EPlusJets': hists['QCD'] = plotting.sumSamples(hists, plotting.qcd_samples) else: hists['QCD'] = hists['QCD_Pt-20_MuEnrichedPt-15'] hists['SingleTop'] = plotting.sumSamples(hists, plotting.singleTop_samples) hists['Di-Boson'] = plotting.sumSamples(hists, plotting.diboson_samples) hists['W+Jets'] = plotting.sumSamples(hists, plotting.wplusjets_samples) # hists['SumMC'] = plotting.sumSamples(hists, plotting.allMC_samples) header = "| Step | TTJet | W+jets | DY + Jets | single top | Di-boson | QCD | Sum MC | Data |" row = " | %s | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d | " if outputFormat == 'Latex': header = "Selection step & \\ttbar & W + Jets & Z + Jets & Single-top & Di-boson & QCD~ & Sum MC & Data\\\\" row = " %s & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & %d \\\\ " print header numbers, errors = getEventNumbers(hists, hist, hist_1mBtag, hist_2mBtag)# + '_0orMoreBtag') for step in range(len(cuts)): nums = numbers[step] errs = errors[step] nums['TTJet'] = nums['TTJet'] * scale_ttbar errs['TTJet'] = errs['TTJet'] * scale_ttbar if analysis == 'EPlusJets' and step >= len(cuts) - 3:#have only estimates for >= 4 jet and beyond histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_0orMoreBtag' if step == len(cuts) - 2: histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_1orMoreBtag' if step == len(cuts) - 1: histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_2orMoreBtags' estimate = QCDRateEstimation.estimateQCDWithRelIso(FILES.files, histForEstimation) nums['QCD'], errs['QCD'] = estimate['estimate'], estimate['absoluteError'] if analysis == 'MuPlusJets' and step >= len(cuts) - 3:#have only estimates for >= 4 jet and beyond scale = 1.21 nums['QCD'], errs['QCD'] = nums['QCD'] * scale, errs['QCD'] * scale sumMC = nums['TTJet'] + nums['W+Jets'] + nums['DYJetsToLL'] + nums['SingleTop'] + nums['QCD'] + nums['Di-Boson'] sumMC_err = sqrt(errs['TTJet'] ** 2 + errs['W+Jets'] ** 2 + errs['DYJetsToLL'] ** 2 + errs['SingleTop'] ** 2 + errs['QCD'] ** 2 + errs['Di-Boson'] ** 2) print row % (cuts[step], nums['TTJet'], errs['TTJet'], nums['W+Jets'], errs['W+Jets'], nums['DYJetsToLL'], errs['DYJetsToLL'], nums['SingleTop'], errs['SingleTop'], nums['Di-Boson'], errs['Di-Boson'], nums['QCD'], errs['QCD'], sumMC, sumMC_err, nums[used_data])
'electron_phi':'Events/(0.5)', "electron_pfIsolation_03_0orMoreBtag":'Events/(0.05)', "electron_pfIsolation_04_0orMoreBtag":'Events/(0.05)', "electron_pfIsolation_05_0orMoreBtag":'Events/(0.05)', "electron_dPhi_in":'Events/(0.01)', "electron_dEta_in":'Events/(0.001)', "electron_HadOverEM":'Events/(0.01)', "electron_mvaTrigV0":'Events/(0.05)', "electron_mvaNonTrigV0":'Events/(0.05)', "electron_dB":'Events/(0.001 cm)', 'electron_sigma_ietaieta':'Events/(0.001)' } histograms = ['HLTQCDAnalyser_inclusive/' + trigger + '/' + variable for variable in variables for trigger in triggers] hists = FileReader.getHistogramsFromFiles(histograms, files) plotting.setStyle() for variable in variables: hists = plotting.rebin(hists, rebins[variable], '*' + variable) hists = plotting.setXRange(hists, limits=limits[variable], histname='*' + variable) hists = plotting.setYTitle(hists, title=titles[variable], histname='*' + variable) labels = [ 'CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT', 'CaloIdVT_CaloIsoVL_TrkIdVL_TrkIsoT', 'CaloIdVL_CaloIsoT_TrkIdVL_TrkIsoT', 'CaloIdVT_TrkIdT' ] styles = [ {'color': kBlack, 'fill': 1001},
''' Created on Aug 18, 2012 @author: Lukasz Kreczko Email: [email protected] ''' from ROOT import * from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf import dps.utils.ROOTFileReader as FileReader import FILES from math import sqrt h_m3_data = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['ElectronHad']) temp_tt = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['TTJet']) temp_wj = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W1Jet']) temp_wj.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W2Jets'])) temp_wj.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W3Jets'])) temp_wj.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['W4Jets'])) temp_zj = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['DYJetsToLL']) temp_qcd = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/QCDConversions/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_0btag", FILES.files['ElectronHad']) temp_stop = FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['T_tW-channel']) temp_stop.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['T_t-channel'])) temp_stop.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['T_s-channel'])) temp_stop.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['Tbar_tW-channel'])) temp_stop.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['Tbar_t-channel'])) temp_stop.Add(FileReader.getHistogramFromFile("TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_2orMoreBtags", FILES.files['Tbar_s-channel'])) n_ttbar = temp_tt.Integral() n_wj = temp_wj.Integral() n_zj = temp_zj.Integral() n_stop = temp_stop.Integral()
Email: [email protected] ''' #from ROOT import * from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf, RooMCStudy, RooFit import dps.utils.ROOTFileReader as FileReader import FILES from math import sqrt distribution = "TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_PFMET_bin_0-25/muon_AbsEta_2orMoreBtags" qcdDistribution = "TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/BinnedMETAnalysis/Muon_PFMET_bin_0-25/muon_AbsEta_0btag" qcdDistribution2 = qcdDistribution data_file = 'SingleMu' #qcdDistribution = "TTbarPlusMetAnalysis/EPlusJets/QCDConversions/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_0btag" #qcdDistribution2 = "TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_0btag" #data_file = 'ElectronHad' h_data = FileReader.getHistogramFromFile(distribution, FILES.files[data_file]) temp_tt = FileReader.getHistogramFromFile(distribution, FILES.files['TTJet']) temp_wj = FileReader.getHistogramFromFile(distribution, FILES.files['W1Jet']) temp_wj.Add(FileReader.getHistogramFromFile(distribution, FILES.files['W2Jets'])) temp_wj.Add(FileReader.getHistogramFromFile(distribution, FILES.files['W3Jets'])) temp_wj.Add(FileReader.getHistogramFromFile(distribution, FILES.files['W4Jets'])) temp_zj = FileReader.getHistogramFromFile(distribution, FILES.files['DYJetsToLL']) temp_qcd = FileReader.getHistogramFromFile(qcdDistribution, FILES.files[data_file]) temp_qcd2 = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files[data_file]) temp_stop = FileReader.getHistogramFromFile(distribution, FILES.files['T_tW-channel']) temp_stop.Add(FileReader.getHistogramFromFile(distribution, FILES.files['T_t-channel'])) temp_stop.Add(FileReader.getHistogramFromFile(distribution, FILES.files['T_s-channel'])) temp_stop.Add(FileReader.getHistogramFromFile(distribution, FILES.files['Tbar_tW-channel'])) temp_stop.Add(FileReader.getHistogramFromFile(distribution, FILES.files['Tbar_t-channel'])) temp_stop.Add(FileReader.getHistogramFromFile(distribution, FILES.files['Tbar_s-channel'])) temp_VPlusJets = temp_zj.Clone('V+jets')
def printCutFlow(hist, analysis, outputFormat='Latex'): scale_ttbar = 164.4 / 157.5 used_data = 'ElectronHad' lepton = 'Electron/electron' if 'Mu' in analysis: used_data = 'SingleMu' lepton = 'Muon/muon' hist_1mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/' + lepton + '_AbsEta_1orMoreBtag' hist_2mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/' + lepton + '_AbsEta_2orMoreBtags' hist_names = [ hist, #due to b-tag scale factors these are not as simple any more hist_1mBtag, hist_2mBtag ] inputfiles = {} for sample in FILES.samplesToLoad: inputfiles[sample] = FILES.files[sample] hists = FileReader.getHistogramsFromFiles(hist_names, inputfiles) for sample in hists.keys(): for histname in hists[sample].keys(): hists[sample][histname].Sumw2() if analysis == 'EPlusJets': hists['QCD'] = plotting.sumSamples(hists, plotting.qcd_samples) else: hists['QCD'] = hists['QCD_Pt-20_MuEnrichedPt-15'] hists['SingleTop'] = plotting.sumSamples(hists, plotting.singleTop_samples) hists['Di-Boson'] = plotting.sumSamples(hists, plotting.diboson_samples) hists['W+Jets'] = plotting.sumSamples(hists, plotting.wplusjets_samples) # hists['SumMC'] = plotting.sumSamples(hists, plotting.allMC_samples) header = "| Step | TTJet | W+jets | DY + Jets | single top | Di-boson | QCD | Sum MC | Data |" row = " | %s | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d +- %d | %d | " if outputFormat == 'Latex': header = "Selection step & \\ttbar & W + Jets & Z + Jets & Single-top & Di-boson & QCD~ & Sum MC & Data\\\\" row = " %s & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & $%d \pm %d$ & %d \\\\ " print header numbers, errors = getEventNumbers(hists, hist, hist_1mBtag, hist_2mBtag) # + '_0orMoreBtag') for step in range(len(cuts)): nums = numbers[step] errs = errors[step] nums['TTJet'] = nums['TTJet'] * scale_ttbar errs['TTJet'] = errs['TTJet'] * scale_ttbar if analysis == 'EPlusJets' and step >= len( cuts) - 3: #have only estimates for >= 4 jet and beyond histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_0orMoreBtag' if step == len(cuts) - 2: histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_1orMoreBtag' if step == len(cuts) - 1: histForEstimation = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_2orMoreBtags' estimate = QCDRateEstimation.estimateQCDWithRelIso( FILES.files, histForEstimation) nums['QCD'], errs['QCD'] = estimate['estimate'], estimate[ 'absoluteError'] if analysis == 'MuPlusJets' and step >= len( cuts) - 3: #have only estimates for >= 4 jet and beyond scale = 1.21 nums['QCD'], errs['QCD'] = nums['QCD'] * scale, errs['QCD'] * scale sumMC = nums['TTJet'] + nums['W+Jets'] + nums['DYJetsToLL'] + nums[ 'SingleTop'] + nums['QCD'] + nums['Di-Boson'] sumMC_err = sqrt(errs['TTJet']**2 + errs['W+Jets']**2 + errs['DYJetsToLL']**2 + errs['SingleTop']**2 + errs['QCD']**2 + errs['Di-Boson']**2) print row % (cuts[step], nums['TTJet'], errs['TTJet'], nums['W+Jets'], errs['W+Jets'], nums['DYJetsToLL'], errs['DYJetsToLL'], nums['SingleTop'], errs['SingleTop'], nums['Di-Boson'], errs['Di-Boson'], nums['QCD'], errs['QCD'], sumMC, sumMC_err, nums[used_data])
def sumExclusiveHistogramsInFile(filename): testfile = File(filename, 'read') newHistograms = {} histExists = newHistograms.has_key nTimes = 1000000000 nthTime = 0 nHistograms = 0 listOfAllHistograms = [] addToList = listOfAllHistograms.append for folder, emptyThing, histograms in testfile: for histogram in histograms: nHistograms += 1 currentPath = folder + '/' + histogram addToList(currentPath) print 'Loading', nHistograms, 'histograms' allHistograms = fileReader.getHistogramsFromFiles(listOfAllHistograms, {'Test':filename}, True)['Test'] print 'Loaded', nHistograms, 'histograms' nHistograms = 0 for histogramName, histogram in allHistograms.iteritems(): nthTime += 1 if nthTime >= nTimes: continue nHistograms += 1 isBtagBinnedHist = False if nHistograms % 5000 == 0: print 'Done', nHistograms, 'histograms' currentHist = histogramName for btag_bin in btag_bins_available: if btag_bin in histogramName: isBtagBinnedHist = True currentHist = histogramName.replace(btag_bin, '') if not isBtagBinnedHist: continue currentPath = currentHist if histExists(currentHist):#already have it continue inclBinHistograms = {} for exclBin in range(len(btag_bins_inclusive)): # print 'Starting with', currentPath + btag_bins_available[exclBin] newhist = allHistograms[currentPath + btag_bins_available[exclBin]] for availBin in range(exclBin + 1, len(btag_bins_available)): # print '>>>>> Adding:', currentPath + btag_bins_available[availBin] addThis = allHistograms[currentPath + btag_bins_available[availBin]] newhist.Add(addThis) inclBinHistograms[currentPath + btag_bins_inclusive[exclBin]] = newhist newHistograms[currentPath] = inclBinHistograms testfile.Close() print 'Done', nHistograms, 'histograms' rootFile = TFile.Open(filename, 'UPDATE') cd = rootFile.Cd rootFile.cd() for histFullPath, histogramDict in newHistograms.iteritems(): currentHist = histFullPath.split('/')[-1] path = histFullPath.replace(currentHist, '') cd('/' + path) for histname, histogram in histogramDict.iteritems(): currentHist = histname.split('/')[-1] histogram.Write(currentHist) rootFile.Write() rootFile.Close() del allHistograms del rootFile del testfile del newHistograms
def sumExclusiveHistogramsInFile(filename): testfile = File(filename, 'read') newHistograms = {} histExists = newHistograms.has_key nTimes = 1000000000 nthTime = 0 nHistograms = 0 listOfAllHistograms = [] addToList = listOfAllHistograms.append for folder, emptyThing, histograms in testfile: for histogram in histograms: nHistograms += 1 currentPath = folder + '/' + histogram addToList(currentPath) print 'Loading', nHistograms, 'histograms' allHistograms = fileReader.getHistogramsFromFiles(listOfAllHistograms, {'Test': filename}, True)['Test'] print 'Loaded', nHistograms, 'histograms' nHistograms = 0 for histogramName, histogram in allHistograms.iteritems(): nthTime += 1 if nthTime >= nTimes: continue nHistograms += 1 isBtagBinnedHist = False if nHistograms % 5000 == 0: print 'Done', nHistograms, 'histograms' currentHist = histogramName for btag_bin in btag_bins_available: if btag_bin in histogramName: isBtagBinnedHist = True currentHist = histogramName.replace(btag_bin, '') if not isBtagBinnedHist: continue currentPath = currentHist if histExists(currentHist): #already have it continue inclBinHistograms = {} for exclBin in range(len(btag_bins_inclusive)): # print 'Starting with', currentPath + btag_bins_available[exclBin] newhist = allHistograms[currentPath + btag_bins_available[exclBin]] for availBin in range(exclBin + 1, len(btag_bins_available)): # print '>>>>> Adding:', currentPath + btag_bins_available[availBin] addThis = allHistograms[currentPath + btag_bins_available[availBin]] newhist.Add(addThis) inclBinHistograms[currentPath + btag_bins_inclusive[exclBin]] = newhist newHistograms[currentPath] = inclBinHistograms testfile.Close() print 'Done', nHistograms, 'histograms' rootFile = TFile.Open(filename, 'UPDATE') cd = rootFile.Cd rootFile.cd() for histFullPath, histogramDict in newHistograms.iteritems(): currentHist = histFullPath.split('/')[-1] path = histFullPath.replace(currentHist, '') cd('/' + path) for histname, histogram in histogramDict.iteritems(): currentHist = histname.split('/')[-1] histogram.Write(currentHist) rootFile.Write() rootFile.Close() del allHistograms del rootFile del testfile del newHistograms
Email: [email protected] ''' #from ROOT import * from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf, RooMCStudy, RooFit import dps.utils.ROOTFileReader as FileReader import FILES from math import sqrt distribution = "TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_PFMET_bin_0-25/muon_AbsEta_2orMoreBtags" qcdDistribution = "TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/BinnedMETAnalysis/Muon_PFMET_bin_0-25/muon_AbsEta_0btag" qcdDistribution2 = qcdDistribution data_file = 'SingleMu' #qcdDistribution = "TTbarPlusMetAnalysis/EPlusJets/QCDConversions/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_0btag" #qcdDistribution2 = "TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/BinnedMETAnalysis/Electron_PFMET_bin_0-25/electron_AbsEta_0btag" #data_file = 'ElectronHad' h_data = FileReader.getHistogramFromFile(distribution, FILES.files[data_file]) temp_tt = FileReader.getHistogramFromFile(distribution, FILES.files['TTJet']) temp_wj = FileReader.getHistogramFromFile(distribution, FILES.files['W1Jet']) temp_wj.Add( FileReader.getHistogramFromFile(distribution, FILES.files['W2Jets'])) temp_wj.Add( FileReader.getHistogramFromFile(distribution, FILES.files['W3Jets'])) temp_wj.Add( FileReader.getHistogramFromFile(distribution, FILES.files['W4Jets'])) temp_zj = FileReader.getHistogramFromFile(distribution, FILES.files['DYJetsToLL']) temp_qcd = FileReader.getHistogramFromFile(qcdDistribution, FILES.files[data_file]) temp_qcd2 = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files[data_file]) temp_stop = FileReader.getHistogramFromFile(distribution,