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