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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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 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 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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
'''
Created on Aug 18, 2012

@author: Lukasz Kreczko

Email: [email protected]
'''
from ROOT import *
from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf
import tools.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()
    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'}
Exemplo n.º 12
0
    "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'
]
Exemplo n.º 13
0
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, hist_1mBtag, hist_2mBtag]  # due to b-tag scale factors these are not as simple any more
    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
    "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},
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
    
    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'}
Exemplo n.º 18
0
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])
Exemplo n.º 19
0
Email: [email protected]
'''
#from ROOT import *
from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf, RooMCStudy, RooFit
import tools.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')