From 1bb26d924e0e2d71cd9a413b182cb7d5e132c7eb Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 9 Jan 2014 12:52:06 +0000 Subject: [PATCH] Solving issue BristolTopGroup/AnalysisSoftware/#3 --- scripts/.cvsignore | 2 - scripts/FILES.py | 153 -- scripts/QCDRateEstimation.py | 305 --- scripts/QCDShapeExtraction.py | 66 - scripts/StoRMStorageDump.py | 174 -- scripts/__init__.py | 0 scripts/combineResults.py | 79 - scripts/compareTriggersForQCDControlRegion.py | 166 -- scripts/config/__init__.py | 0 scripts/config/plotConfig.py | 17 - scripts/config/sampleSummations.py | 57 - scripts/copyNTuples.py | 43 - scripts/createPUDistribution.py | 3 - scripts/createSumsOfHistograms.py | 142 - scripts/cutFlow.C | 65 - scripts/cutFlow_C.d | 50 - scripts/data/QCD_data_mu.root | Bin 4003 -> 0 bytes scripts/data/__init__.py | 0 ...nceFactors_EPlusJets_2orMoreBtags_JSON.txt | 58 - ...ceFactors_MuPlusJets_2orMoreBtags_JSON.txt | 58 - ...ionFactors_EPlusJets_2orMoreBtags_JSON.txt | 58 - ...onFactors_MuPlusJets_2orMoreBtags_JSON.txt | 58 - ...correctionFactors_EPlusJets_0btag_JSON.txt | 2202 --------------- ...tionFactors_EPlusJets_0orMoreBtag_JSON.txt | 2202 --------------- ...correctionFactors_EPlusJets_1btag_JSON.txt | 2202 --------------- ...tionFactors_EPlusJets_1orMoreBtag_JSON.txt | 2202 --------------- ...ionFactors_EPlusJets_2orMoreBtags_JSON.txt | 2202 --------------- ...orrectionFactors_MuPlusJets_0btag_JSON.txt | 2202 --------------- ...ionFactors_MuPlusJets_0orMoreBtag_JSON.txt | 2202 --------------- ...orrectionFactors_MuPlusJets_1btag_JSON.txt | 2202 --------------- ...ionFactors_MuPlusJets_1orMoreBtag_JSON.txt | 2202 --------------- ...onFactors_MuPlusJets_2orMoreBtags_JSON.txt | 2202 --------------- scripts/data/etaAbs_ge2j_tight.root | Bin 4649 -> 0 bytes scripts/dev/__init__.py | 0 scripts/dev/roofittest.py | 32 - scripts/dev/roofittest2.py | 144 - scripts/do2DMET.C | 145 - scripts/do2DMET_C.d | 86 - scripts/do2DPlots.C | 136 - scripts/do2DPlots_C.d | 86 - scripts/eventPicker.py | 10 - .../forLuke/PFhistosForFitting_central.root | Bin 336295 -> 0 bytes .../PFhistosForFitting_met1_central.root | Bin 59101 -> 0 bytes .../PFhistosForFitting_met2_central.root | Bin 58433 -> 0 bytes .../PFhistosForFitting_met3_central.root | Bin 54944 -> 0 bytes .../PFhistosForFitting_met4_central.root | Bin 51903 -> 0 bytes .../PFhistosForFitting_met5_central.root | Bin 50914 -> 0 bytes .../PFhistosForFitting_metall_central.root | Bin 68439 -> 0 bytes scripts/forLuke/QCDetaData.root | Bin 4528 -> 0 bytes scripts/forLuke/TempFitEta.cc | 605 ---- scripts/forLuke/diffTempFit.cc | 823 ------ scripts/forLuke/pseudoExpsData.C | 684 ----- scripts/forLuke/systematicFits.cc | 808 ------ scripts/forLuke/systematicFits.py | 722 ----- scripts/forLuke/systematicFitsExp.cc | 806 ------ scripts/forLuke/systematicFits_cc.d | 84 - scripts/forLuke/tdrStyle.py | 156 -- scripts/forLuke/tdrstyle.C | 157 -- scripts/makeDiffVariablesPlots.py | 94 - scripts/makeMETplots.py | 97 - scripts/makePrettyPlots.py | 41 - scripts/measureCrossSection.py | 2422 ----------------- .../GenJetHT_vs_GenParton_1btag.png | Bin 13550 -> 0 bytes .../RecoHT_lep_met_vs_GenHT_lep_met_1btag.png | Bin 13815 -> 0 bytes .../RecoHT_lep_vs_GenHT_lep_1btag.png | Bin 13438 -> 0 bytes .../muPlusJets/RecoHT_vs_GenHT_1btag.png | Bin 13225 -> 0 bytes .../muPlusJets/RecoHT_vs_GenParton_1btag.png | Bin 13294 -> 0 bytes .../muPlusJets/RecoM3_vs_GenM3_1btag.png | Bin 11929 -> 0 bytes .../muPlusJets/RecoMET_vs_GenNu_1btag.png | Bin 10874 -> 0 bytes ...eptonic_W_pt_vs_Genleptonic_W_pt_1btag.png | Bin 12036 -> 0 bytes scripts/printCutFlow.py | 151 - scripts/printNTupleContent.py | 7 - scripts/purityAndStability_METbins.py | 199 -- scripts/purityAndStability_METbins_V0.py | 163 -- scripts/purityAndStability_METbins_old.py | 165 -- scripts/roofittest2.py | 136 - scripts/startElectronAnalysis.sh | 7 - scripts/startMeasurement.sh | 5 - scripts/tdrstyle.C | 157 -- scripts/testOutput.png | Bin 46647 -> 0 bytes scripts/tools/ColorPrinter.py | 58 - scripts/tools/CrossSectionMeasurement.py | 0 scripts/tools/ErrorCalculation.py | 3 - scripts/tools/ErrorSources.py | 14 - scripts/tools/FileUtilities.py | 27 - scripts/tools/Fitter.py | 82 - scripts/tools/Log.py | 6 - scripts/tools/NTuples.py | 7 - scripts/tools/PlottingUtilities.py | 269 -- scripts/tools/Printer.py | 0 scripts/tools/ROOTFileReader.py | 99 - scripts/tools/ROOTFileWriter.py | 8 - scripts/tools/Styles.py | 153 -- scripts/tools/Table.py | 15 - scripts/tools/Timer.py | 13 - scripts/tools/Trigger.py | 7 - scripts/tools/WPlusJetsEstimation.py | 7 - scripts/tools/__init__.py | 0 scripts/verifyNTupleProduction.py | 4 - ...workspace_electron_channel_2orMoreBtags.py | 28 - scripts_old/.cvsignore | 2 - scripts_old/EstimateQCD.py | 653 ----- scripts_old/EstimateQCD2.py | 752 ----- scripts_old/HistGetter.py | 251 -- scripts_old/HistPlotter.py | 238 -- scripts_old/PlotHelper.py | 58 - scripts_old/QCDEstimation.py | 350 --- .../QCD_ConversionControlRegion_0btag.pdf | Bin 17593 -> 0 bytes .../QCD_ConversionControlRegion_0btag.png | Bin 46132 -> 0 bytes scripts_old/__init__.py | 0 scripts_old/animate_gaus.sh | 34 - scripts_old/bTagPlots.py | 392 --- scripts_old/calculateRatio.py | 57 - scripts_old/copyGridFolder | 63 - scripts_old/deleteGridFolder | 65 - scripts_old/delete_gpfs_dir.py | 74 - scripts_old/detailed_MC_conversions.png | Bin 31979 -> 0 bytes scripts_old/diffJSON | 10 - scripts_old/fileInfo.py | 138 - scripts_old/first.png | Bin 18952 -> 0 bytes scripts_old/firstrep.png | Bin 6985 -> 0 bytes scripts_old/fit_data_Njet.py | 874 ------ scripts_old/getFileSize.py | 37 - scripts_old/getHLTSuggestion.py | 115 - scripts_old/getSkimEfficiency.py | 140 - scripts_old/getTriggerReport.py | 130 - scripts_old/inputFiles.py | 64 - scripts_old/log.terr | 28 - scripts_old/makeCutFlow.py | 193 -- scripts_old/makeHLTPlots.py | 157 -- scripts_old/makePlots.py | 810 ------ scripts_old/makeShinyPlots.py | 24 - scripts_old/mcNTuple.txt | 548 ---- scripts_old/mergeROOTFilesWithCompression.py | 140 - scripts_old/nTupleInfo.py | 136 - scripts_old/plotMttbar.py | 915 ------- scripts_old/plotQCDEstimate.py | 481 ---- scripts_old/plots/HLTStudy/index.html | 37 - scripts_old/plots/MttbarAnalysis/index.html | 37 - scripts_old/plots/allplots.py | 23 - scripts_old/plots/allplots_multi.py | 51 - scripts_old/plots/index.html | 39 - .../plots/topReconstruction/index.html | 39 - .../mttbar_withMETAndAsymJets_0orMoreBtag.png | Bin 24242 -> 0 bytes ...mttbar_withMETAndAsymJets_2orMoreBtags.png | Bin 27213 -> 0 bytes scripts_old/prescaleTableParser.py | 72 - scripts_old/printCutFlow.py | 92 - scripts_old/readMergeLog.py | 34 - scripts_old/remove_duplicates | 77 - scripts_old/remove_duplicates.py | 78 - scripts_old/rootplot_config.py | 204 -- scripts_old/rootplotmpl_config.py | 225 -- scripts_old/rootplottest.py | 35 - scripts_old/run.sh | 103 - scripts_old/run_mc.sh | 94 - scripts_old/second.png | Bin 3273 -> 0 bytes ...onIsolatedElectrons_electron_eta_0btag.pdf | Bin 15051 -> 0 bytes ...onIsolatedElectrons_electron_eta_0btag.png | Bin 23801 -> 0 bytes ...e_comparison_electron_eta_NonIso_0btag.pdf | Bin 14824 -> 0 bytes ...e_comparison_electron_eta_NonIso_0btag.png | Bin 32020 -> 0 bytes scripts_old/tdrStyle.py | 156 -- scripts_old/test.png | Bin 21685 -> 0 bytes scripts_old/test.py | 25 - scripts_old/testPyROOT.py | 53 - scripts_old/testRootPlot.py | 13 - 165 files changed, 42918 deletions(-) delete mode 100644 scripts/.cvsignore delete mode 100644 scripts/FILES.py delete mode 100644 scripts/QCDRateEstimation.py delete mode 100644 scripts/QCDShapeExtraction.py delete mode 100644 scripts/StoRMStorageDump.py delete mode 100644 scripts/__init__.py delete mode 100644 scripts/combineResults.py delete mode 100644 scripts/compareTriggersForQCDControlRegion.py delete mode 100644 scripts/config/__init__.py delete mode 100644 scripts/config/plotConfig.py delete mode 100644 scripts/config/sampleSummations.py delete mode 100644 scripts/copyNTuples.py delete mode 100644 scripts/createPUDistribution.py delete mode 100644 scripts/createSumsOfHistograms.py delete mode 100644 scripts/cutFlow.C delete mode 100644 scripts/cutFlow_C.d delete mode 100644 scripts/data/QCD_data_mu.root delete mode 100644 scripts/data/__init__.py delete mode 100644 scripts/data/acceptanceFactors/acceptanceFactors_EPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/acceptanceFactors/acceptanceFactors_MuPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/contaminationFactors/contaminationFactors_EPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/contaminationFactors/contaminationFactors_MuPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_EPlusJets_0btag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_EPlusJets_0orMoreBtag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_EPlusJets_1btag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_EPlusJets_1orMoreBtag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_EPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_MuPlusJets_0btag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_MuPlusJets_0orMoreBtag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_MuPlusJets_1btag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_MuPlusJets_1orMoreBtag_JSON.txt delete mode 100644 scripts/data/correctionFactors/correctionFactors_MuPlusJets_2orMoreBtags_JSON.txt delete mode 100644 scripts/data/etaAbs_ge2j_tight.root delete mode 100644 scripts/dev/__init__.py delete mode 100644 scripts/dev/roofittest.py delete mode 100644 scripts/dev/roofittest2.py delete mode 100644 scripts/do2DMET.C delete mode 100644 scripts/do2DMET_C.d delete mode 100644 scripts/do2DPlots.C delete mode 100644 scripts/do2DPlots_C.d delete mode 100644 scripts/eventPicker.py delete mode 100644 scripts/forLuke/PFhistosForFitting_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_met1_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_met2_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_met3_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_met4_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_met5_central.root delete mode 100644 scripts/forLuke/PFhistosForFitting_metall_central.root delete mode 100644 scripts/forLuke/QCDetaData.root delete mode 100644 scripts/forLuke/TempFitEta.cc delete mode 100644 scripts/forLuke/diffTempFit.cc delete mode 100644 scripts/forLuke/pseudoExpsData.C delete mode 100644 scripts/forLuke/systematicFits.cc delete mode 100644 scripts/forLuke/systematicFits.py delete mode 100644 scripts/forLuke/systematicFitsExp.cc delete mode 100644 scripts/forLuke/systematicFits_cc.d delete mode 100644 scripts/forLuke/tdrStyle.py delete mode 100644 scripts/forLuke/tdrstyle.C delete mode 100644 scripts/makeDiffVariablesPlots.py delete mode 100644 scripts/makeMETplots.py delete mode 100644 scripts/makePrettyPlots.py delete mode 100644 scripts/measureCrossSection.py delete mode 100644 scripts/plots/muPlusJets/GenJetHT_vs_GenParton_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoHT_lep_met_vs_GenHT_lep_met_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoHT_lep_vs_GenHT_lep_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoHT_vs_GenHT_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoHT_vs_GenParton_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoM3_vs_GenM3_1btag.png delete mode 100644 scripts/plots/muPlusJets/RecoMET_vs_GenNu_1btag.png delete mode 100644 scripts/plots/muPlusJets/Recoleptonic_W_pt_vs_Genleptonic_W_pt_1btag.png delete mode 100644 scripts/printCutFlow.py delete mode 100644 scripts/printNTupleContent.py delete mode 100644 scripts/purityAndStability_METbins.py delete mode 100644 scripts/purityAndStability_METbins_V0.py delete mode 100644 scripts/purityAndStability_METbins_old.py delete mode 100644 scripts/roofittest2.py delete mode 100755 scripts/startElectronAnalysis.sh delete mode 100644 scripts/startMeasurement.sh delete mode 100644 scripts/tdrstyle.C delete mode 100644 scripts/testOutput.png delete mode 100644 scripts/tools/ColorPrinter.py delete mode 100644 scripts/tools/CrossSectionMeasurement.py delete mode 100644 scripts/tools/ErrorCalculation.py delete mode 100644 scripts/tools/ErrorSources.py delete mode 100644 scripts/tools/FileUtilities.py delete mode 100644 scripts/tools/Fitter.py delete mode 100644 scripts/tools/Log.py delete mode 100644 scripts/tools/NTuples.py delete mode 100644 scripts/tools/PlottingUtilities.py delete mode 100644 scripts/tools/Printer.py delete mode 100644 scripts/tools/ROOTFileReader.py delete mode 100644 scripts/tools/ROOTFileWriter.py delete mode 100644 scripts/tools/Styles.py delete mode 100644 scripts/tools/Table.py delete mode 100644 scripts/tools/Timer.py delete mode 100644 scripts/tools/Trigger.py delete mode 100644 scripts/tools/WPlusJetsEstimation.py delete mode 100644 scripts/tools/__init__.py delete mode 100644 scripts/verifyNTupleProduction.py delete mode 100644 scripts/workspace_electron_channel_2orMoreBtags.py delete mode 100644 scripts_old/.cvsignore delete mode 100644 scripts_old/EstimateQCD.py delete mode 100644 scripts_old/EstimateQCD2.py delete mode 100644 scripts_old/HistGetter.py delete mode 100644 scripts_old/HistPlotter.py delete mode 100644 scripts_old/PlotHelper.py delete mode 100644 scripts_old/QCDEstimation.py delete mode 100644 scripts_old/QCD_ConversionControlRegion_0btag.pdf delete mode 100644 scripts_old/QCD_ConversionControlRegion_0btag.png delete mode 100644 scripts_old/__init__.py delete mode 100644 scripts_old/animate_gaus.sh delete mode 100644 scripts_old/bTagPlots.py delete mode 100644 scripts_old/calculateRatio.py delete mode 100644 scripts_old/copyGridFolder delete mode 100644 scripts_old/deleteGridFolder delete mode 100644 scripts_old/delete_gpfs_dir.py delete mode 100644 scripts_old/detailed_MC_conversions.png delete mode 100644 scripts_old/diffJSON delete mode 100644 scripts_old/fileInfo.py delete mode 100644 scripts_old/first.png delete mode 100644 scripts_old/firstrep.png delete mode 100644 scripts_old/fit_data_Njet.py delete mode 100644 scripts_old/getFileSize.py delete mode 100644 scripts_old/getHLTSuggestion.py delete mode 100644 scripts_old/getSkimEfficiency.py delete mode 100644 scripts_old/getTriggerReport.py delete mode 100644 scripts_old/inputFiles.py delete mode 100644 scripts_old/log.terr delete mode 100644 scripts_old/makeCutFlow.py delete mode 100644 scripts_old/makeHLTPlots.py delete mode 100644 scripts_old/makePlots.py delete mode 100644 scripts_old/makeShinyPlots.py delete mode 100644 scripts_old/mcNTuple.txt delete mode 100644 scripts_old/mergeROOTFilesWithCompression.py delete mode 100644 scripts_old/nTupleInfo.py delete mode 100644 scripts_old/plotMttbar.py delete mode 100644 scripts_old/plotQCDEstimate.py delete mode 100644 scripts_old/plots/HLTStudy/index.html delete mode 100644 scripts_old/plots/MttbarAnalysis/index.html delete mode 100644 scripts_old/plots/allplots.py delete mode 100644 scripts_old/plots/allplots_multi.py delete mode 100644 scripts_old/plots/index.html delete mode 100644 scripts_old/plots/topReconstruction/index.html delete mode 100644 scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag.png delete mode 100644 scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_2orMoreBtags.png delete mode 100644 scripts_old/prescaleTableParser.py delete mode 100644 scripts_old/printCutFlow.py delete mode 100644 scripts_old/readMergeLog.py delete mode 100644 scripts_old/remove_duplicates delete mode 100755 scripts_old/remove_duplicates.py delete mode 100644 scripts_old/rootplot_config.py delete mode 100644 scripts_old/rootplotmpl_config.py delete mode 100644 scripts_old/rootplottest.py delete mode 100644 scripts_old/run.sh delete mode 100644 scripts_old/run_mc.sh delete mode 100644 scripts_old/second.png delete mode 100644 scripts_old/shapeRatio_conversions_NonIsolatedElectrons_electron_eta_0btag.pdf delete mode 100644 scripts_old/shapeRatio_conversions_NonIsolatedElectrons_electron_eta_0btag.png delete mode 100644 scripts_old/shape_comparison_electron_eta_NonIso_0btag.pdf delete mode 100644 scripts_old/shape_comparison_electron_eta_NonIso_0btag.png delete mode 100644 scripts_old/tdrStyle.py delete mode 100644 scripts_old/test.png delete mode 100644 scripts_old/test.py delete mode 100644 scripts_old/testPyROOT.py delete mode 100644 scripts_old/testRootPlot.py diff --git a/scripts/.cvsignore b/scripts/.cvsignore deleted file mode 100644 index 13771a85..00000000 --- a/scripts/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -mc_only_18Nov10_23h14m -.cvsignore diff --git a/scripts/FILES.py b/scripts/FILES.py deleted file mode 100644 index ba9b6ac7..00000000 --- a/scripts/FILES.py +++ /dev/null @@ -1,153 +0,0 @@ -placeholder = 'SAMPLE' -pathToFiles = '/storage/TopQuarkGroup/results/histogramfiles/AN-13-015_V2' -luminosity = 5814#pb-1 -suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET.root' -JES_down_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_minusJES.root' -JES_up_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_plusJES.root' -PU_down_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_PU_65835mb.root' -PU_up_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_PU_72765mb.root' -PDFWeights_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_PDFWeights_%d.root' -BJet_down_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_minusBJet.root' -BJet_up_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_plusBjet.root' -LightJet_down_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_minusLightJet.root' -LightJet_up_suffix = 'PFElectron_PFMuon_PF2PATJets_PFMET_plusLightJet.root' - -template = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/central', 'lumi':luminosity, 'suffix':suffix, 'placeholder':placeholder} -template_JES_down = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/JES_down', 'lumi':luminosity, 'suffix':JES_down_suffix, 'placeholder':placeholder} -template_JES_up = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/JES_up', 'lumi':luminosity, 'suffix':JES_up_suffix, 'placeholder':placeholder} -template_PU_down = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/PU_down', 'lumi':luminosity, 'suffix':PU_down_suffix, 'placeholder':placeholder} -template_PU_up = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles+ '/PU_up', 'lumi':luminosity, 'suffix':PU_up_suffix, 'placeholder':placeholder} -template_PDFWeights = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles+ '/PDFWeights', 'lumi':luminosity, 'suffix':PDFWeights_suffix, 'placeholder':'TTJet'} -template_BJet_down = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/BJet_down', 'lumi':luminosity, 'suffix':BJet_down_suffix, 'placeholder':placeholder} -template_BJet_up = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles+ '/BJet_up', 'lumi':luminosity, 'suffix':BJet_up_suffix, 'placeholder':placeholder} -template_LightJet_down = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles + '/LightJet_down', 'lumi':luminosity, 'suffix':LightJet_down_suffix, 'placeholder':placeholder} -template_LightJet_up = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % {'path':pathToFiles+ '/LightJet_up', 'lumi':luminosity, 'suffix':LightJet_up_suffix, 'placeholder':placeholder} - -samplesToLoad = ['SingleElectron', - 'SingleMu', - 'TTJet', - 'DY1JetsToLL', - 'DY2JetsToLL', - 'DY3JetsToLL', - 'DY4JetsToLL', - 'QCD_Pt-15to20_MuEnrichedPt5', - 'QCD_Pt-20to30_MuEnrichedPt5', - 'QCD_Pt-30to50_MuEnrichedPt5', - 'QCD_Pt-50to80_MuEnrichedPt5', - 'QCD_Pt-80to120_MuEnrichedPt5', - 'QCD_Pt-120to170_MuEnrichedPt5', - 'QCD_Pt-170to300_MuEnrichedPt5', - 'QCD_Pt-300to470_MuEnrichedPt5', - 'QCD_Pt-470to600_MuEnrichedPt5', -# 'QCD_Pt-600to800_MuEnrichedPt5', - 'QCD_Pt-800to1000_MuEnrichedPt5', - 'QCD_Pt-1000_MuEnrichedPt5', - 'QCD_Pt_20_30_BCtoE', - 'QCD_Pt_30_80_BCtoE', - 'QCD_Pt_80_170_BCtoE', - 'QCD_Pt_170_250_BCtoE', - 'QCD_Pt_250_350_BCtoE', - 'QCD_Pt_350_BCtoE', - 'QCD_Pt_20_30_EMEnriched', - 'QCD_Pt_30_80_EMEnriched', - 'QCD_Pt_80_170_EMEnriched', - 'QCD_Pt_170_250_EMEnriched', - 'QCD_Pt_250_350_EMEnriched', - 'QCD_Pt_350_EMEnriched', - 'GJets_HT-200To400', - 'GJets_HT-400ToInf', -# 'WWtoAnything', -# 'WZtoAnything', -# 'ZZtoAnything', - 'T_tW-channel', - 'T_t-channel', - 'T_s-channel', - 'Tbar_tW-channel', - 'Tbar_t-channel', - 'Tbar_s-channel', -# 'TTbarZIncl', -# 'TTbarInclWIncl', - 'W1Jet', - 'W2Jets', - 'W3Jets', - 'W4Jets' - ] -additionalSamples = [ - 'TTJets-matchingdown', - 'TTJets-matchingup', - 'TTJets-scaledown', - 'TTJets-scaleup', - 'WJets-matchingdown', - 'WJets-matchingup', - 'WJets-scaledown', - 'WJets-scaleup', - 'ZJets-matchingdown', - 'ZJets-matchingup', - 'ZJets-scaledown', - 'ZJets-scaleup' - ] - -files = {} -files_JES_down = {} -files_JES_up = {} -files_PU_down = {} -files_PU_up = {} -files_PDF_weights = {} -files_BJet_down = {} -files_BJet_up = {} -files_LightJet_down = {} -files_LightJet_up = {} - -rpl = template.replace -rpl_JES_down = template_JES_down.replace -rpl_JES_up = template_JES_up.replace -rpl_PU_down = template_PU_down.replace -rpl_PU_up = template_PU_up.replace -rpl_BJet_down = template_BJet_down.replace -rpl_BJet_up = template_BJet_up.replace -rpl_LightJet_down = template_LightJet_down.replace -rpl_LightJet_up = template_LightJet_up.replace - -for sample in samplesToLoad: - files[sample] = rpl(placeholder, sample) - files_JES_down[sample] = rpl_JES_down(placeholder, sample) - files_JES_up[sample] = rpl_JES_up(placeholder, sample) - files_PU_down[sample] = rpl_PU_down(placeholder, sample) - files_PU_up[sample] = rpl_PU_up(placeholder, sample) - files_BJet_down[sample] = rpl_BJet_down(placeholder, sample) - files_BJet_up[sample] = rpl_BJet_up(placeholder, sample) - files_LightJet_down[sample] = rpl_LightJet_down(placeholder, sample) - files_LightJet_up[sample] = rpl_LightJet_up(placeholder, sample) - -for sample in additionalSamples: - files[sample] = rpl(placeholder, sample) - -for sample in ['POWHEG', 'MCatNLO']: - formatting = {'path':pathToFiles + '/central', 'lumi':luminosity, 'suffix':'PFElectron_PFMuon_PF2PATJets_PFMET_%s.root'%sample, 'placeholder':'TTJet'} - files[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_JES_down[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_JES_up[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_PU_down[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_PU_up[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_BJet_down[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_BJet_up[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_LightJet_down[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - files_LightJet_up[sample] = '%(path)s/%(placeholder)s_%(lumi)dpb_%(suffix)s' % formatting - -for index in range(1,45): - files_PDF_weights['TTJet_%d' % index] = template_PDFWeights % index - -#data is the same for: -files_PU_down['SingleElectron'] = files['SingleElectron'] -files_PU_up['SingleElectron'] = files['SingleElectron'] -files_BJet_down['SingleElectron'] = files['SingleElectron'] -files_BJet_up['SingleElectron'] = files['SingleElectron'] -files_LightJet_down['SingleElectron'] = files['SingleElectron'] -files_LightJet_up['SingleElectron'] = files['SingleElectron'] -#muon channel -files_PU_down['SingleMu'] = files['SingleMu'] -files_PU_up['SingleMu'] = files['SingleMu'] -files_BJet_down['SingleMu'] = files['SingleMu'] -files_BJet_up['SingleMu'] = files['SingleMu'] -files_LightJet_down['SingleMu'] = files['SingleMu'] -files_LightJet_up['SingleMu'] = files['SingleMu'] diff --git a/scripts/QCDRateEstimation.py b/scripts/QCDRateEstimation.py deleted file mode 100644 index bf65db73..00000000 --- a/scripts/QCDRateEstimation.py +++ /dev/null @@ -1,305 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch - -Different methods are available: -- ABCD method (takes 2D histogram) -- Matrix method (takes 1D histogram) -- RelISo method (takes 1D histogram) - -Output consists of an estimated number of events and error -''' -from __future__ import division -from math import sqrt -import tools.ROOTFileReader as FileReader -import tools.PlottingUtilities as plotting -import FILES -try: - from uncertainties import ufloat - from uncertainties import umath -except: - print "Could not find uncertainties package, please install for full functionality" - print 'http://packages.python.org/uncertainties/' - ufloatEnabled = False -from ROOT import Double -DEBUG = False -allMC = ['TTJet', 'DYJetsToLL', 'QCD_Pt-20to30_BCtoE', 'QCD_Pt-30to80_BCtoE', - 'QCD_Pt-80to170_BCtoE', 'QCD_Pt-20to30_EMEnriched', 'QCD_Pt-30to80_EMEnriched', - 'QCD_Pt-80to170_EMEnriched', 'GJets_HT-40To100', 'GJets_HT-100To200', - 'GJets_HT-200', 'WWtoAnything', 'WZtoAnything', 'ZZtoAnything', 'T_tW-channel', - 'T_t-channel', 'T_s-channel', 'Tbar_tW-channel', 'Tbar_t-channel', - 'Tbar_s-channel', 'W1Jet', 'W2Jets', 'W3Jets', 'W4Jets' - ] -qcd = ['QCD_Pt-20to30_BCtoE', 'QCD_Pt-30to80_BCtoE', - 'QCD_Pt-80to170_BCtoE', 'QCD_Pt-20to30_EMEnriched', 'QCD_Pt-30to80_EMEnriched', - 'QCD_Pt-80to170_EMEnriched', 'GJets_HT-40To100', 'GJets_HT-100To200', - 'GJets_HT-200'] -btag_latex = { - '0orMoreBtag':'$ \geq 0$ b-tags', - '0btag':'0 b-tag', - '1btag':'1 b-tag', - '2orMoreBtags':'$\geq 2$ b-tags' - } -#relIso method is overestimating by 45% -defaultHistogram = 'TTbarEplusJetsPlusMetAnalysis/Ref selection/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_0orMoreBtag' -relIsoBias = 0.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 - -def relIsoMethodWithSystematics(histogramForEstimation=defaultHistogram, function='expo', - fitRange=(0.3, 1.6), fitRangesForSystematics=[(0.2, 1.6), (0.4, 1.6)], applyBiasCorrection=True): - - centralResult = relIsoMethod(histogramForEstimation, function, fitRange=fitRange) - centralEstimate, centralAbsoluteError = centralResult['estimate'], centralResult['absoluteError'] - absoluteStatisticError = centralAbsoluteError - centralRelativeError = 0 - if not centralEstimate == 0: - centralRelativeError = centralAbsoluteError / centralEstimate - centralRelativeErrorSquared = centralRelativeError ** 2 - - #systematic errors - systematicErrorFromOtherFitRangesSquared = 0 - for currentRange in fitRangesForSystematics: - currentResult = relIsoMethod(histogramForEstimation, function, fitRange=currentRange) - currentEstimate, err = currentResult['estimate'], currentResult['absoluteError'] - deviation = currentEstimate - centralEstimate - if not centralEstimate == 0: - systematicErrorFromOtherFitRangesSquared += (deviation / centralEstimate) ** 2 - - centralRelativeErrorSquared += systematicErrorFromOtherFitRangesSquared - relativeSytematicErrorSquared = systematicErrorFromOtherFitRangesSquared - - relativeErrorFromBiasCorrection = 0 - if applyBiasCorrection: - reductionFromBias = 1 - relIsoBias - centralEstimate = centralEstimate * reductionFromBias - relativeErrorFromBiasCorrection = relIsoBias - - centralRelativeErrorSquared += relativeErrorFromBiasCorrection ** 2 - relativeSytematicErrorSquared += relativeErrorFromBiasCorrection ** 2 - - absoluteSystematicError = sqrt(relativeSytematicErrorSquared) * centralEstimate - centralAbsoluteError = sqrt(absoluteSystematicError ** 2 + absoluteStatisticError ** 2) -# absoluteStatisticError = centralRelativeError * centralEstimate - result = { - 'estimate':centralEstimate, - 'absoluteError': centralAbsoluteError, - 'absoluteSystematicError': absoluteSystematicError, - 'absoluteStatisticError': absoluteStatisticError, - 'fit':centralResult['fit']} - return result - -def relIsoMethod(histogramForEstimation, function='expo', - fitRange=(0.3, 1.6), signalRegion=(0., 0.1)): - - histogramForEstimation = histogramForEstimation.Clone('tmp') - - #investigate them - binWidthOfOriginalHistoram = 0.01 - rebinOfOriginalHistogram = 10 - - estimate = 0 - relativeErrorSquared = 0 - histogramForEstimation.Rebin(rebinOfOriginalHistogram) - - fit = None - fit = performFit(histogramForEstimation, function, fitRange) - if fit: - estimate = fit.Integral(signalRegion[0], signalRegion[1]) / (binWidthOfOriginalHistoram * rebinOfOriginalHistogram) - for parErr in range(0, fit.GetNumberFreeParameters()): - par = fit.GetParameter(parErr) - err = fit.GetParError(parErr) - if not par == 0: - relativeErrorSquared += (err / par) ** 2 - - result = {'estimate': estimate, - 'absoluteError':sqrt(relativeErrorSquared) * estimate, - 'relativeError':sqrt(relativeErrorSquared), - 'fit':fit} - return result - -def performFit(histogram, function, fitRange): - histogram = histogram.Clone('fitting') - numberOfFreeParameters = -1 - fit = None - - histogram.Fit(function, "Q0", "ah", fitRange[0], fitRange[1]) - fit = histogram.GetFunction(function) - if fit: - return fit.Clone() - else: - return None - -#Estimate the bias on MC only -def getRelIsoCalibrationCurve(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 'Input files = ', inputFiles - print 'Histogram = ', histogramForEstimation - print 'Fit function = ', function - print 'Fit ranges = ', fitRanges - print '*' * 120 - #get histograms - #instead of data use sum MC - -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 printPerformanceResults(btag_results, btagBins): - print 'function, range & $N_{est,\,QCD}^{data}$ & $N_{true,\,QCD}^{MC}$ & $f_{est./true}$ \\\\' - for btag in btagBins: - print '\hline' - results = btag_results[btag] - print '%s & & & \\\\' % btag_latex[btag] - print '\hline' - for fitrange, result in results.iteritems(): - N_qcd, N_qcd_error = result['qcdInSignalRegion'] - est, err = result['estimate'] - performance, performanceError = result['performance'] - format = (result['fitfunction'], str(result['fitRange']), N_qcd, N_qcd_error, est, err, performance, performanceError) - print '%s, %s & $%.0f \pm %.0f$ & $%.0f \pm %.0f$ & $ %.3f \pm %.3f$ \\\\' % format - -def getIntegral(histogram, integralRange=(0, 0.1)): - firstBin = histogram.GetXaxis().FindBin(integralRange[0]) - lastBin = histogram.GetXaxis().FindBin(integralRange[1]) - - integral = 0 - absoluteError = Double(0) - integral = histogram.IntegralAndError(firstBin, lastBin, absoluteError) - - return integral, absoluteError - -def printResults(results, btagBins): - header = "region & $N_{est,\,QCD}^{MC}$ & $N_{est,\,QCD}^{data}$ &" - header += "$\\frac{(data - MC(QCD^{MC}))}{data}$ &" - header += "$\\frac{(data -MC(QCD^{data}))}{data}$ \\\\" - print header - print '\hline' - rowTemplate = "%s & $%.0f \pm %.0f$ & " - rowTemplate += "$%.0f \pm %.0f$ (stat.) $\pm %.0f$ (syst.) &" - rowTemplate += "%s & %s \\\\" - global btag_latex - for btag in btagBins: - result = results[btag] - ndata = result['N_data'] - nQCD = result['N_QCD'] - nSumMC = result['N_SumMC'] - nSumMC_QCDFromData = nSumMC - nQCD + result['estimate'] - data_MC_diff = (ndata - nSumMC) / ndata * 100 - data_MC_diff_QCDFromData = (ndata - nSumMC_QCDFromData) / ndata * 100 - result['data-MC(QCDFromMC)'] = data_MC_diff - result['data-MC(QCDFromData)'] = data_MC_diff_QCDFromData - formatting = (btag_latex[btag], result['N_QCD'], result['N_QCD_Error'], result['estimate'], - result['absoluteStatisticError'], result['absoluteSystematicError'], - ('%.2f' % data_MC_diff) + '\%', ('%.2f' % data_MC_diff_QCDFromData) + '\%') - print rowTemplate % formatting - -def plotFits(results): - pass - -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 - -if __name__ == '__main__': - btagBins = [ - '0orMoreBtag', - '0btag', - '1btag', - '2orMoreBtags' - ] - - - histBase = 'TTbar_plus_X_analysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03_%s' - results = {} - mcresults = {} - for btag in btagBins: - hist = histBase % btag - results[btag] = estimateQCDWithRelIso(FILES.files, histogramForEstimation=hist) - results[btag].update(getStuff(hist, FILES.files)) - mcresults[btag] = doPerformanceStudyOnMCOnly(FILES.files, hist, function='expo') - print - printResults(results, btagBins) - print - printPerformanceResults(mcresults, btagBins) diff --git a/scripts/QCDShapeExtraction.py b/scripts/QCDShapeExtraction.py deleted file mode 100644 index 6b8a128f..00000000 --- a/scripts/QCDShapeExtraction.py +++ /dev/null @@ -1,66 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' - -import ROOTFileReader as reader - -def getQCDShape(file, histname, histnameForSystematics, rebin=1, suffix=''): - errors = None - if not suffix == '': - histogramForShape = histname + '_' + suffix - histogramForComparison = histnameForSystematics + '_' + suffix - histogramForShape = reader.getHistogramFromFile(histogramForShape, file) - histogramForComparison = reader.getHistogramFromFile(histogramForComparison, file) - #sum weights for correct error calculation - histogramForShape.Sumw2() - histogramForComparison.Sumw2() - #rebin - histogramForShape.Rebin(rebin) - histogramForComparison.Rebin(rebin) - #get normalisation - nShape = histogramForShape.Integral() - nCompare = histogramForComparison.Integral() - - -def getShapeErrorHistogram(files, - histogramForShape='topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets', - histogramForComparison='topReconstruction/backgroundShape/mttbar_antiIsolated_withMETAndAsymJets', - rebin=1, - suffix=''): - - errors = None - -# for suffix in suffixes: -# if suffix in histname: - if not suffix == '': - histogramForShape = histogramForShape + '_' + suffix - histogramForComparison = histogramForComparison + '_' + suffix - - hists = [histogramForShape, histogramForComparison] - hists = getHistsFromFiles(hists, files) - histogramForShape = hists['data'][histogramForShape] - histogramForComparison = hists['data'][histogramForComparison] - histogramForShape.Sumw2() - histogramForComparison.Sumw2() - - histogramForShape.Rebin(rebin) - histogramForComparison.Rebin(rebin) - - nShape = histogramForShape.Integral() - nCompare = histogramForComparison.Integral() - - if nShape > 0 and nCompare > 0: - histogramForShape.Scale(1 / nShape) - histogramForComparison.Scale(1 / nCompare) - - errors = histogramForShape.Clone('ShapeErrors') - errors.Add(histogramForComparison, -1)#subtraction - for bin in range(1, errors.GetNbinsX()): - errors.SetBinContent(bin, fabs(errors.GetBinContent(bin))) - errors.Divide(histogramForShape) - - return errors diff --git a/scripts/StoRMStorageDump.py b/scripts/StoRMStorageDump.py deleted file mode 100644 index cbf70540..00000000 --- a/scripts/StoRMStorageDump.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/python - -''' -StorageDump v2.0 -author: Iban Cabrillo -''' - -import os -import sys -#import urllib -#import urllib2 -import datetime -import subprocess -#from xml.dom import minidom - - -def get_local_cksum(surl, lfn, alder_path, modify = False): - ''' - Get the cksum store at local file level. If the file has no cksum value we should calc it. - ''' - #Look for the adler32 value - output, error = subprocess.Popen(['getfattr', '--only-values', '--absolute-names', '-n', 'user.storm.checksum.adler32', surl], - stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - cksum = 'N/A' - - if len(output) == 0: - print "No checksum value found for file %s. Processing..." % lfn - try: - #Calc the adler32 value - adler32, error = subprocess.Popen([adler_path, surl], stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - cksum = adler32.rstrip('\n').lstrip('0') - except OSError: - print 'Could not calculate cksum:', error - - # Delete the \n on the right and the 0's on the left to be the same adler32 format that is stored by the phedex API - # and set the adler32 value for the file. - if modify: - try: - setadler32, error = subprocess.Popen(['setfattr', '-n', 'user.storm.checksum.adler32', '-v', cksum, surl], - stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - except OSError: - print 'Could not set extra attribute for cksum:', error - - print "Calculated cksum:", cksum - else: - cksum = output.rstrip('\n') - - return cksum - -def get_local_timestamp(surl, lfn, modify = False): - ''' - Get the mtime store for local file as extra attribute. If the file has no this - value stored we calc it. - ''' - #Look for the adler32 value - output, error = subprocess.Popen(['getfattr', '--only-values', '--absolute-names', '-n', 'user.timestamp', surl], - stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - timestamp = 0 - if len(output) == 0: - print "No timestamp value found for file %s. Processing..." % lfn - #Calc de timestamp value - timestamp = str(os.stat(surl).st_ctime).rstrip('\n') - - if modify: - try: - # Set the timstamp value for the file. - settimestamp, error = subprocess.Popen(['setfattr', '-n', 'user.timestamp', '-v', timestamp, surl], - stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - except OSError: - print 'Could not set extra attribute for timestamp:', error - - print "Calculated timestamp:", timestamp - else: - timestamp = output.rstrip('\n') - - return timestamp - - -def get_local_size(surl, lfn, modify = False): - ''' - Get the size of local file from extra attribute. If the file has no value stored we calculate it. - ''' - #Look for the adler32 value - output, error = subprocess.Popen(['getfattr', '--only-values', '--absolute-names', '-n', 'user.size', surl], - stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate() - size = 0 - if len(output) == 0: - print "No size value found as extra attribute for file %s. Processing..." % lfn - - #Calculate the timestamp value - size = str(os.stat(surl).st_size).rstrip('\n') - if modify: - try: - # Set the timestamp value for the file. - setsize, error = subprocess.Popen(['setfattr', '-n', 'user.size', '-v', size, surl], stderr=subprocess.PIPE, - stdout=subprocess.PIPE).communicate() - except OSError: - print 'Could not set extra attribute for size', error - print "Calculated size:", size - else: - size = output.rstrip('\n') - return size - -def print_storage_dump(lfn, size, ctime, cksum): - ''' - Create a file with keys: lfn, size, timestamp, cksum - ''' - - f = open(DumpFile, 'a') - line = '%s|%s|%s|%s\n' % (lfn, size, ctime, cksum) - f.write(line) - - -def getopts(): - ''' - Get the command line arguments - ''' - - from optparse import OptionParser - - parser = OptionParser() - parser.add_option('--localpath', '-p', action='store', - type='string', dest='localpath', default='/gpfs/csic_projects/cms/', - help='Local prefix to your file system to complete the plfn' - ) - - parser.add_option('--dumpfilepath', '-l', action='store', - type='string', dest='dumpfilepath', default='~/', - help='Path where the file with the lfns will be written') - (opt, arg) = parser.parse_args() - return opt - -if __name__ == '__main__': -###########################Globals################################ - #Path to file where the lfns will be written - DumpFile = 'DumpFile_%s.log' % datetime.date.today() -################################################################## - cmsdir = '/gpfs_phys/storm/cms/' - adler_path = 'adler32/calc_adler32.py' - #bristol - alder_path = '/opt/g/ui/3.2.5-0/d-cache/srm/bin/adler32' - - - - try: - myargs = getopts() - cmsdir = myargs.localpath - dumpfilepath = myargs.dumpfilepath - if not dumpfilepath.endswith('/'): - dumpfilepath += '/' - DumpFile = dumpfilepath + 'DumpFile_%s.log' % datetime.date.today() - - except KeyError: - print "missing some mandatory parameters, please run " - sys.exit() - - try: - for tupla in os.walk(cmsdir): - if tupla[2]: - for file in tupla[2]: - surl = tupla[0] + '/' + file - lfn = surl.replace(cmsdir, '') - try: - size = get_local_size(surl, lfn) - timestamp = get_local_timestamp(surl, lfn) - cksum = get_local_cksum(surl, lfn, adler_path) - - print_storage_dump(lfn, size, timestamp, cksum) - except OSError: - print "Uknown error occured" - - except IndexError: - print "The file doesn't exits" - pass diff --git a/scripts/__init__.py b/scripts/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/combineResults.py b/scripts/combineResults.py deleted file mode 100644 index 52e6e120..00000000 --- a/scripts/combineResults.py +++ /dev/null @@ -1,79 +0,0 @@ -''' -Created on Aug 3, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' -from __future__ import division -from data.results import * -from scipy.misc.common import comb -from math import sqrt - -error_correlations = { - 'stat error': 0, - 'lumi_down': 0, - 'lumi_up': 0, - } - - -def combine(result1, result2, errors1, errors2):#errors have to be relative!! - #absolute errors - totalErrors1 = getTotalError(errors1) - totalErrors2 = getTotalError(errors2) - - numerator = result1 / pow(totalErrors1['total'], 2) + result2 / pow(totalErrors2['total'], 2) - denominator = 1. / pow(totalErrors1['total'], 2) + 1 / pow(totalErrors2['total'], 2) - combinedResult = numerator / denominator - - inverseSumUpErrors = 1. / pow(totalErrors1['up'], 2) + 1 / pow(totalErrors2['up'], 2) - inverseSumDownErrors = 1. / pow(totalErrors1['down'], 2) + 1 / pow(totalErrors2['down'], 2) - combinedUpError = sqrt(1. / inverseSumUpErrors) - combinedDownError = sqrt(1. / inverseSumDownErrors) - - errorNames = list(set(errors1.keys() + errors2.keys())) - sumOfInverseErrors = 0 - for errorName in errorNames: - correlation = 0 - if error_correlations.has_key(errorName): - correlation = error_correlations[errorName] - error = 0 - if errorName in errors1.keys() and errorName in errors2.keys() and not correlation == 0: - error = 1. / pow(errors1[errorName], 2) + 1 / pow(errors2[errorName], 2) + 1 / (2*pow(errors1[errorName] * errors2[errorName] * correlation, 2)) - elif errorName in errors1.keys() and errorName in errors2.keys() and correlation == 0: - error = 1. / pow(errors1[errorName], 2) + 1 / pow(errors2[errorName], 2) - elif errorName in errors1.keys() and not errorName in errors2.keys(): - error = 1. / pow(errors1[errorName], 2) - elif not errorName in errors1.keys() and errorName in errors2.keys(): - error = 1. / pow(errors2[errorName], 2) - sumOfInverseErrors += error - - return combinedResult, combinedUpError, combinedDownError, sqrt(1 / sumOfInverseErrors) - - -def getTotalError(errors): - totalUp = 0 - totalDown = 0 - for name, error in errors.iteritems(): - if error > 0: - totalUp += error ** 2 - else: - totalDown += error ** 2 - total = totalUp + totalDown - total = sqrt(total) - totalUp = sqrt(totalUp) - totalDown = sqrt(totalDown) - return {'up':totalUp, 'down':totalDown, 'total':total} - -def combineErrors(errors1, errors2): - pass - -if __name__ == "__main__": - #testing - result1 = 2 - result2 = 5 - errors1 = {'stat error': 0.5, 'lumi_down':-0.5, 'lumi_up': 0.5} - errors2 = {'stat error': 0.5, 'lumi_down':-0.5, 'lumi_up': 0.5} - combination = combine(result1, result2, errors1, errors2) - print combination - diff --git a/scripts/compareTriggersForQCDControlRegion.py b/scripts/compareTriggersForQCDControlRegion.py deleted file mode 100644 index 40def1f4..00000000 --- a/scripts/compareTriggersForQCDControlRegion.py +++ /dev/null @@ -1,166 +0,0 @@ -#Step 1: get histograms of the distribution you are interested in -#Step 2: Pass the distributions with starting values to RooFit -#Step 3: ??? -#Step 4: Profit - -import FILES -import tools.ROOTFileReader as FileReader -import tools.PlottingUtilities as plotting -from ROOT import * -gROOT.SetBatch(True) -gROOT.ProcessLine('gErrorIgnoreLevel = 5001;') - - -availableSamples = FILES.samplesToLoad -files = {'SingleElectron': '/home/kreczko/Workspace/Analysis/AnalysisTools/ElectronHad_2752.4pb_PFElectron_PFMuon_PF2PATJets_PFMET_193834-194225.root'} -#folder where the plots will be placed -outputFolder = '/storage/results/plots/HLTQCDAnalysis/193834-194225/inclusive' -#outputFolder = '/storage/results/plots/HLTQCDAnalysis/194270-195396/inclusive' -outputFormats = [ - 'png', - #'pdf' - ] - -variables = [ - 'electron_pT', - 'electron_eta', - 'electron_phi', - "electron_pfIsolation_03_0orMoreBtag", - "electron_pfIsolation_04_0orMoreBtag", - "electron_pfIsolation_05_0orMoreBtag", - "electron_dPhi_in", - "electron_dEta_in", - "electron_HadOverEM", - "electron_mvaTrigV0", - "electron_mvaNonTrigV0", - "electron_dB", -'electron_sigma_ietaieta' - ] - -triggers = [ - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralPFNoPUJet30', - 'HLT_Ele25_CaloIdVT_CaloIsoVL_TrkIdVL_TrkIsoT_TriCentralPFNoPUJet30', - 'HLT_Ele25_CaloIdVL_CaloIsoT_TrkIdVL_TrkIsoT_TriCentralPFNoPUJet30', - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralPFNoPUJet30', - ] - -limits = { - 'electron_pT':(0, 200), - 'electron_eta':(-3, 3), - 'electron_phi':(-4, 4), - "electron_pfIsolation_03_0orMoreBtag":(0, 2), - "electron_pfIsolation_04_0orMoreBtag":(0, 2), - "electron_pfIsolation_05_0orMoreBtag":(0, 2), - "electron_dPhi_in":(-0.2, 0.2), - "electron_dEta_in":(-0.02, 0.02), - "electron_HadOverEM":(0, 0.2), - "electron_mvaTrigV0":(-1.1, 1.1), - "electron_mvaNonTrigV0":(-1.1, 1.1), - "electron_dB":(0, 0.05), - 'electron_sigma_ietaieta':(0, 0.05) - } - -rebins = { - 'electron_pT':5, - 'electron_eta':10, - 'electron_phi':10, - "electron_pfIsolation_03_0orMoreBtag":5, - "electron_pfIsolation_04_0orMoreBtag":5, - "electron_pfIsolation_05_0orMoreBtag":5, - "electron_dPhi_in":1, - "electron_dEta_in":1, - "electron_HadOverEM":1, - "electron_mvaTrigV0":5, - "electron_mvaNonTrigV0":5, - "electron_dB":1, - 'electron_sigma_ietaieta':1 - } - -titles = { - 'electron_pT':'Events/(5 GeV)', - 'electron_eta':'Events/(0.5)', - '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}, - {'color': kRed, 'fill': 3004}, - {'color': kBlue, 'fill': 1001}, - {'color': kGreen + 3, 'fill': 1001}, - ] - -electron_pT = [] -electron_eta = [] -electron_phi = [] -maxfactor = 1.3 -for variable in variables: - compare = [] - app = compare.append - for hist in histograms: - if variable in hist: - app(hists['SingleElectron'][hist]) - if 'Isolation' in variable: - maxfactor = 2 - elif 'mvaTrigV0' in variable: - maxfactor = 1.5 - else: - maxfactor = 1.3 - canvas, legend = plotting.compareShapes(compare, labels, styles, maxfactor) - legend.Draw() - plotting.saveAs(canvas, variable, outputFormats=outputFormats, outputFolder=outputFolder) - -#MET plots -variables = [ - 'MET_0btag', - 'MET_0orMoreBtag', - 'Transverse_Mass_MET20_0orMoreBtag', - 'Transverse_Mass_0orMoreBtag' - ] -selections = ['QCDAntiID', 'QCDNonIso'] -histograms = ['HLTQCDAnalyser_inclusive/' + selection + '/' + trigger + '/patMETsPFlow/' + variable for variable in variables for trigger in triggers for selection in selections] -hists = FileReader.getHistogramsFromFiles(histograms, files) -hists = plotting.rebin(hists, 5, '*MET_') -hists = plotting.rebin(hists, 5, '*Transverse_Mass') -hists = plotting.setYTitle(hists, title="events/5 GeV", histname='*MET_') -hists = plotting.setYTitle(hists, title="events/5 GeV", histname='*Transverse_Mass') -hists = plotting.setXRange(hists, limits=(0, 100), histname='*MET_') -hists = plotting.setXRange(hists, limits=(0, 120), histname='*Transverse_Mass') - - -for selection in selections: - for variable in variables: - compare = [] - app = compare.append - for hist in histograms: - if variable in hist and selection in hist: - app(hists['SingleElectron'][hist]) - maxfactor = 1.3 - canvas, legend = plotting.compareShapes(compare, labels, styles, maxfactor) - legend.Draw() - plotting.saveAs(canvas, selection + "_" +variable, outputFormats=outputFormats, outputFolder=outputFolder) diff --git a/scripts/config/__init__.py b/scripts/config/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/config/plotConfig.py b/scripts/config/plotConfig.py deleted file mode 100644 index e3b94dd4..00000000 --- a/scripts/config/plotConfig.py +++ /dev/null @@ -1,17 +0,0 @@ -#define additional weights for the various samples -weights = {} - -#define binning for different histograms for Rebin() -binning = {} -binning['mttbar'] = 50 - -#define QCD estimation method -#from ... import X -qcdestimationMethod = None - -#define histograms where QCD is not scaled to estimation -doNotUseQCDEstimationFor = [ - 'QCD' - ] - - diff --git a/scripts/config/sampleSummations.py b/scripts/config/sampleSummations.py deleted file mode 100644 index 29926a6d..00000000 --- a/scripts/config/sampleSummations.py +++ /dev/null @@ -1,57 +0,0 @@ -from copy import deepcopy - -qcd_samples = [ 'QCD_Pt_20_30_BCtoE', - 'QCD_Pt_30_80_BCtoE', - 'QCD_Pt_80_170_BCtoE', - 'QCD_Pt_170_250_BCtoE', - 'QCD_Pt_250_350_BCtoE', - 'QCD_Pt_350_BCtoE', - 'QCD_Pt_20_30_EMEnriched', - 'QCD_Pt_30_80_EMEnriched', - 'QCD_Pt_80_170_EMEnriched', - 'QCD_Pt_170_250_EMEnriched', - 'QCD_Pt_250_350_EMEnriched', - 'QCD_Pt_350_EMEnriched', - 'GJets_HT-200To400', - 'GJets_HT-400ToInf' - ] - -muon_qcd_samples = [ 'QCD_Pt-15to20_MuEnrichedPt5', - 'QCD_Pt-20to30_MuEnrichedPt5', - 'QCD_Pt-30to50_MuEnrichedPt5', - 'QCD_Pt-50to80_MuEnrichedPt5', - 'QCD_Pt-80to120_MuEnrichedPt5', - 'QCD_Pt-120to170_MuEnrichedPt5', - 'QCD_Pt-170to300_MuEnrichedPt5', - 'QCD_Pt-300to470_MuEnrichedPt5', - 'QCD_Pt-470to600_MuEnrichedPt5', -# 'QCD_Pt-600to800_MuEnrichedPt5', - 'QCD_Pt-800to1000_MuEnrichedPt5', - 'QCD_Pt-1000_MuEnrichedPt5' - ] - -singleTop_samples = [ 'T_tW-channel', - 'T_t-channel', - 'T_s-channel', - 'Tbar_tW-channel', - 'Tbar_t-channel', - 'Tbar_s-channel'] - -wplusjets_samples = [ 'W1Jet', 'W2Jets', 'W3Jets', 'W4Jets'] -zplusjets_samples = [ 'DY1JetsToLL', 'DY2JetsToLL', 'DY3JetsToLL', 'DY4JetsToLL' ] -vplusjets_samples = deepcopy(wplusjets_samples) -vplusjets_samples.append('DY1JetsToLL') -vplusjets_samples.append('DY2JetsToLL') -vplusjets_samples.append('DY3JetsToLL') -vplusjets_samples.append('DY4JetsToLL') -#diboson_samples = [ 'WWtoAnything', 'WZtoAnything', 'ZZtoAnything'] -signal_samples = [ 'TTJet', 'SingleTop'] -allMC_samples = [ 'TTJet', 'DYJetsToLL', 'QCD', 'W+Jets', 'SingleTop'] - -btag_bins_inclusive = ['0orMoreBtag', '1orMoreBtag', '2orMoreBtags', '3orMoreBtags'] -btag_sums = { - '0orMoreBtag':['0btag', '1btag', '2btags', '3btags', '4orMoreBtags'], - '1orMoreBtag':['1btag', '2btags', '3btags', '4orMoreBtags'], - '2orMoreBtags':['2btags', '3btags', '4orMoreBtags'], - '3orMoreBtags':['3btags', '4orMoreBtags'] - } diff --git a/scripts/copyNTuples.py b/scripts/copyNTuples.py deleted file mode 100644 index 533fddeb..00000000 --- a/scripts/copyNTuples.py +++ /dev/null @@ -1,43 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' - -if __name__ == "__main__": - basePathToData = '/storage/TopQuarkGroup' - - #steps to do - #1. create folder structure (Dataset/nTupleVersion) - #2. check for corrupt files - if found, ask if wants to remove (grid certificate required) - #3. check for duplicates - if found, ask if wants to remove (grid certificate required) - #run options: - #check-only - #skim info only - - #print output of hadd -# Total number of files: N -# Total number of unique files: M -# Process recognised: Sample -# Input files per output file: X -# Input directory: /gpfs_phys/storm/cms/user/ -# Using compression level Z -# ================================================== -# Creating output file: Sample_merged_I.root -# Number of input files: Y -# CRAB job number of input files: 1-2, 4,7, 10-33 -# ================================================== - - -# supress output of hadd except for debug flag -# Source file N -# ... - -#group by max size of output -#group by number of output files -#create mergeROOTFiles.log automatically (full logging), print summarised output somewhere else -#print warning when more than 500 files are going to be merged. ROOT can't handle this!! -#alternative: create temporary files so max 500 files per output file, merge the temp files and then remove them! - \ No newline at end of file diff --git a/scripts/createPUDistribution.py b/scripts/createPUDistribution.py deleted file mode 100644 index d38b14f3..00000000 --- a/scripts/createPUDistribution.py +++ /dev/null @@ -1,3 +0,0 @@ -#from estimatePU tool -#from list -#from MC input? \ No newline at end of file diff --git a/scripts/createSumsOfHistograms.py b/scripts/createSumsOfHistograms.py deleted file mode 100644 index 865d172f..00000000 --- a/scripts/createSumsOfHistograms.py +++ /dev/null @@ -1,142 +0,0 @@ -#0. Open histogram files -#1. Create inclusive b-tag and jet- multiplicity bins if not present -#2. Write file to current files -#3. add files up (hadd) to create the sum of samples (QCD, singleTop, W+Jets, allMC) -import FILES -from ROOT import TFile -from rootpy.io import File -import tools.ROOTFileReader as fileReader -from optparse import OptionParser - -btag_bins_available = ['0btag', '1btag', '2btags', '3btags', '4orMoreBtags' - ] -btag_bins_inclusive = ['0orMoreBtag', '1orMoreBtag', '2orMoreBtags', '3orMoreBtags'] - -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 cleanFile(filename): - testfile = File(filename, 'update') - nHistograms = 0 - print "Deleting inclusive bin histograms histograms" - for folder, emptyThing, histograms in testfile: - for histogram in histograms: - currentPath = folder + '/' + histogram - for btag in btag_bins_inclusive: - if btag in histogram: - nHistograms += 1 -# print 'Deleting:', currentPath - testfile.Delete(currentPath + ';*') - print 'Deleted', nHistograms, 'histograms' - print 'Closing file', filename - testfile.Close() - print 'Closed file' - -if __name__ == '__main__': - parser = OptionParser() - parser.add_option("-s", "--sample", dest="sample", default='ElectronHad', - help="set sample to be combined. Available samples: " + ','.join(FILES.files.keys())) - parser.add_option("-f", "--fileset", dest="fileset", default='central', - help="set of files to be combined") - (options, args) = parser.parse_args() - fileset = FILES.files - if options.fileset == 'PU_down': - fileset = FILES.files_PU_down - elif options.fileset == 'PU_up': - fileset = FILES.files_PU_up - elif options.fileset == 'PDF': - fileset = FILES.files_PDF_weights - elif options.fileset == 'JES_down': - fileset = FILES.files_JES_down - elif options.fileset == 'JES_up': - fileset = FILES.files_JES_up - elif options.fileset == 'BJet_down': - fileset = FILES.files_BJet_down - elif options.fileset == 'BJet_up': - fileset = FILES.files_BJet_up - elif options.fileset == 'LightJet_down': - fileset = FILES.files_LightJet_down - elif options.fileset == 'LightJet_up': - fileset = FILES.files_LightJet_up - elif options.fileset == 'central': - fileset = FILES.files - else: - print 'Do not recognise fileset' - import sys - sys.exit - print 'Doing file set', options.fileset - - for sample in fileset.keys(): - print 'Doing sample', sample - filename = fileset[sample] - print 'Doing file:', filename - cleanFile(filename) -# sumExclusiveHistogramsInFile(filename) diff --git a/scripts/cutFlow.C b/scripts/cutFlow.C deleted file mode 100644 index 065f8265..00000000 --- a/scripts/cutFlow.C +++ /dev/null @@ -1,65 +0,0 @@ -#include "TFile.h" -#include "TH1.h" -#include "TObject.h" -#include "TString.h" -#include -#include -#include - -void cutFlow(); -TH1D* getSample(TString sample, bool muon); - - -void cutFlow(){ - bool muon = true; -TH1D* tt = getSample("TTJet", muon); - - -double weight = 5050*157.5/6712238; -weight = 1.; - -if(muon == true){ -std::cout << setprecision(6)<< "skim & " << weight*tt->GetBinContent(1) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(1)<< " \\\\ " << std::endl; -std::cout<< setprecision(6) << "trigger and clean & " << weight*tt->GetBinContent(2) << setprecision(3) << " $\\pm$ " << weight*tt->GetBinError(2)<< " \\\\ " << std::endl; -std::cout << setprecision(6)<< "1==mu & " << weight*tt->GetBinContent(3) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(3)<< " \\\\ " << std::endl; -std::cout<< setprecision(6) << "mu veto & " << weight*tt->GetBinContent(4)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(4)<< " \\\\ " << std::endl; -std::cout<< setprecision(6) << "e veto & " << weight*tt->GetBinContent(5)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(5) << " \\\\ " << std::endl; -std::cout<< setprecision(6) << "$\\geq$1jets & " << weight*tt->GetBinContent(6)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(6)<< " \\\\ " << std::endl; -std::cout << setprecision(6)<< "$\\geq$2jets & " << weight*tt->GetBinContent(7)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(7)<< " \\\\ " << std::endl; -std::cout<< setprecision(6) << "$\\geq$3jets & " << weight*tt->GetBinContent(8)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(8) << " \\\\ " << std::endl; -std::cout<< setprecision(6) << "$\\geq$4jets & " << weight*tt->GetBinContent(9)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(9) << " \\\\ " << std::endl; -std::cout<< setprecision(6) << "$\\geq$1btag & " << weight*tt->GetBinContent(10) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(10)<< " \\\\ " << std::endl; -std::cout<< setprecision(6) << "$\\geq$2btag & " << weight*tt->GetBinContent(11) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(11)<< " \\\\ " << std::endl; -}else{ - - std::cout << setprecision(6)<< "skim & " << weight*tt->GetBinContent(1) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(1)<< " \\\\ " << std::endl; - std::cout<< setprecision(6) << "trigger and clean & " << weight*tt->GetBinContent(2) << setprecision(3) << " $\\pm$ " << weight*tt->GetBinError(2)<< " \\\\ " << std::endl; - std::cout << setprecision(6)<< "1==mu & " << weight*tt->GetBinContent(3) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(3)<< " \\\\ " << std::endl; - std::cout<< setprecision(6) << "mu veto & " << weight*tt->GetBinContent(4)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(4)<< " \\\\ " << std::endl; - std::cout<< setprecision(6) << "e veto & " << weight*tt->GetBinContent(5)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(5) << " \\\\ " << std::endl; - std::cout<< setprecision(6) << "conv. veto & " << weight*tt->GetBinContent(6)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(6) << " \\\\ " << std::endl; - std::cout<< setprecision(6) << "$\\geq$1jets & " << weight*tt->GetBinContent(7)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(7)<< " \\\\ " << std::endl; - std::cout << setprecision(6)<< "$\\geq$2jets & " << weight*tt->GetBinContent(8)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(8)<< " \\\\ " << std::endl; - std::cout<< setprecision(6) << "$\\geq$3jets & " << weight*tt->GetBinContent(9)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(9) << " \\\\ " << std::endl; - std::cout<< setprecision(6) << "$\\geq$4jets & " << weight*tt->GetBinContent(10)<< " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(10) << " \\\\ " << std::endl; - std::cout<< setprecision(6) << "$\\geq$1btag & " << weight*tt->GetBinContent(11) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(11)<< " \\\\ " << std::endl; - std::cout<< setprecision(6) << "$\\geq$2btag & " << weight*tt->GetBinContent(12) << " $\\pm$ " << setprecision(3) << weight*tt->GetBinError(12)<< " \\\\ " << std::endl; - - -} -} - -TH1D* getSample(TString sample, bool muon){ - TString dir = "../"; - TFile* tt_file = new TFile(dir + sample + "_5800pb_PFElectron_PFMuon_PF2PATJets_PFMET_TEST.root"); - TDirectoryFile* tt_folder = (TDirectoryFile*) tt_file->Get("EventCount"); - TH1D* tt_cutflow; - if(muon == true){ - tt_cutflow = (TH1D*) tt_folder->Get("TTbarMuPlusJetsRefSelectionUnweighted"); - //tt_cutflow = (TH1D*) tt_folder->Get("TTbarMuPlusJetsRefSelectionUnweighted_singleCuts"); - }else{ - tt_cutflow = (TH1D*) tt_folder->Get("TTbarEplusJetsRefSelectionUnweighted_singleCuts"); - } - return tt_cutflow; -} - diff --git a/scripts/cutFlow_C.d b/scripts/cutFlow_C.d deleted file mode 100644 index 83f53c0a..00000000 --- a/scripts/cutFlow_C.d +++ /dev/null @@ -1,50 +0,0 @@ - -# DO NOT DELETE - -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TFile.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TDirectoryFile.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TDirectory.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TNamed.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TObject.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/Rtypes.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/RConfig.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/RVersion.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/DllImport.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/Rtypeinfo.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/snprintf.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/strlcpy.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TGenericClassInfo.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TSchemaHelper.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TStorage.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TVersionCheck.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/Riosfwd.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TBuffer.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TString.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TMathBase.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TList.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TSeqCollection.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TCollection.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TIterator.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TDatime.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TUUID.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TMap.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/THashTable.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TUrl.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TH1.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TAxis.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TAttAxis.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArrayD.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArray.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TAttLine.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TAttFill.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TAttMarker.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArrayC.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArrayS.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArrayI.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TArrayF.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/Foption.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TVectorFfwd.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TVectorDfwd.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/TFitResultPtr.h -./cutFlow_C.so: /software/root/v5.34.02/normal/root/include/cintdictversion.h /software/root/v5.34.02/normal/root/include/RVersion.h -cutFlow_C__ROOTBUILDVERSION= 5.34/02 diff --git a/scripts/data/QCD_data_mu.root b/scripts/data/QCD_data_mu.root deleted file mode 100644 index 5b0ea15b66ce060b9eeea2f88030c7f26800a010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4003 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 Qe|94n_dr(Y`z!_UFY??i_vdhxaEe%VD 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 -#include "tdrstyle.C" -#include "TTree.h" -#include "TFile.h" -#include "TFile.h" -#include "TH1F.h" -#include "TH2D.h" -#include "TROOT.h" -#include "TStyle.h" -#include "TCanvas.h" -#include "TText.h" -#include "TLegend.h" -#include "THStack.h" -#include "TLine.h" -#include "TChain.h" -#include "TLatex.h" -#include -#include -#include -#include "TLegend.h" -using namespace std; - -void do2DMET(); -void do2DPlots(bool muon, TString variable, TString ytitle); -void getBinning(bool muon, TString variable); - - -void do2DMET(){ - -bool muon = true; - -TString variable[41] = {"patMETsPFlow" , "GenMET" , "patType1CorrectedPFMet" , "patType1p2CorrectedPFMet" , "patType1p2CorrectedPFMetElectronEnUp" , "patType1p2CorrectedPFMetElectronEnDown" , "patType1p2CorrectedPFMetMuonEnUp" , "patType1p2CorrectedPFMetMuonEnDown" , "patType1p2CorrectedPFMetTauEnUp" , "patType1p2CorrectedPFMetTauEnDown" , "patType1p2CorrectedPFMetJetResUp" , "patType1p2CorrectedPFMetJetResDown" , "patType1p2CorrectedPFMetJetEnUp" , "patType1p2CorrectedPFMetJetEnDown" , "patType1p2CorrectedPFMetUnclusteredEnUp" , "patType1p2CorrectedPFMetUnclusteredEnDown" , "patPFMetElectronEnUp" , "patPFMetElectronEnDown" , "patPFMetMuonEnUp" , "patPFMetMuonEnDown" , "patPFMetTauEnUp" , "patPFMetTauEnDown" , "patPFMetJetResUp" , "patPFMetJetResDown" , "patPFMetJetEnUp" , "patPFMetJetEnDown" , "patPFMetUnclusteredEnUp" , "patPFMetUnclusteredEnDown" , "patType1CorrectedPFMetElectronEnUp" , "patType1CorrectedPFMetElectronEnDown" , "patType1CorrectedPFMetMuonEnUp" , "patType1CorrectedPFMetMuonEnDown" , "patType1CorrectedPFMetTauEnUp" , "patType1CorrectedPFMetTauEnDown" , "patType1CorrectedPFMetJetResUp" , "patType1CorrectedPFMetJetResDown" , "patType1CorrectedPFMetJetEnUp" , "patType1CorrectedPFMetJetEnDown" , "patType1CorrectedPFMetUnclusteredEnUp" , "patType1CorrectedPFMetUnclusteredEnDown" , "recoMetPFlow"}; - -TString ytitle[41] = {"patMETsPFlow" , " GenMET" , " patType1CorrectedPFMet" , " patType1p2CorrectedPFMet" , " patType1p2CorrectedPFMetElectronEnUp" , "patType1p2CorrectedPFMetElectronEnDown" , "patType1p2CorrectedPFMetMuonEnUp" , "patType1p2CorrectedPFMetMuonEnDown" , "patType1p2CorrectedPFMetTauEnUp" , "patType1p2CorrectedPFMetTauEnDown" , "patType1p2CorrectedPFMetJetResUp" , "patType1p2CorrectedPFMetJetResDown" , "patType1p2CorrectedPFMetJetEnUp" , "patType1p2CorrectedPFMetJetEnDown" , "patType1p2CorrectedPFMetUnclusteredEnUp" , "patType1p2CorrectedPFMetUnclusteredEnDown" , "patPFMetElectronEnUp" , "patPFMetElectronEnDown" , "patPFMetMuonEnUp" , "patPFMetMuonEnDown" , "patPFMetTauEnUp" , "patPFMetTauEnDown" , "patPFMetJetResUp" , "patPFMetJetResDown" , "patPFMetJetEnUp" , "patPFMetJetEnDown" , "patPFMetUnclusteredEnUp" , "patPFMetUnclusteredEnDown" , "patType1CorrectedPFMetElectronEnUp" , "patType1CorrectedPFMetElectronEnDown" , "patType1CorrectedPFMetMuonEnUp" , "patType1CorrectedPFMetMuonEnDown" , "patType1CorrectedPFMetTauEnUp" , "patType1CorrectedPFMetTauEnDown" , "patType1CorrectedPFMetJetResUp" , "patType1CorrectedPFMetJetResDown" , "patType1CorrectedPFMetJetEnUp" , "patType1CorrectedPFMetJetEnDown" , "patType1CorrectedPFMetUnclusteredEnUp" , "patType1CorrectedPFMetUnclusteredEnDown" , "recoMetPFlow"}; - - - -for(int i =0; i<41; i++){ -do2DPlots(muon, variable[i], ytitle[i]); -getBinning(muon, variable[i]); -} - -} - -void do2DPlots(bool muon, TString variable, TString ytitle){ - - TString leptonFolder; - if(muon == true){ - leptonFolder = "MuonMET/"; - }else{ - leptonFolder = "ElectronMET/"; - } - - setTDRStyle(); - gStyle->SetPalette(1); - - TString dir = "../"; - TFile* tt_file = new TFile(dir + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_TESTING.root"); - - - -TString Nbtags[5] = {"_0btag","_1btag", "_2btags", "_3btags", "_4orMoreBtags"}; - -for(int i = 2; i < 3; i++){ -cout << "Getting histo: " << "Binning/"+leptonFolder+variable+"/RecoMET_vs_GenMET"+Nbtags[i] <Get("Binning/"+leptonFolder+variable+"/RecoMET_vs_GenMET"+Nbtags[i]); - - tt_2d->Rebin2D(10,10); - tt_2d->GetYaxis()->SetTitle("reco MET"); - tt_2d->GetXaxis()->SetTitle(ytitle); - tt_2d->GetYaxis()->SetTitleOffset(1.8); - tt_2d->GetXaxis()->SetTitleOffset(1.5); - - TCanvas *c= new TCanvas("c","c",10,10,800,600); - tt_2d->Draw("COLZ"); - - TString plotName("plots/"+leptonFolder); - plotName += variable; - plotName += Nbtags[i]+".png"; - - c->SaveAs(plotName); - delete c; - -} - - -} - - -void getBinning(bool muon, TString variable){ - - TString leptonFolder; - if(muon == true){ - leptonFolder = "MuonMET/"; - }else{ - leptonFolder = "ElectronMET/"; - } - - TString dir = "../"; - -TFile* tt_file = new TFile(dir + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_TESTING.root"); -TH2D* tt_2d = (TH2D*) tt_file->Get("Binning/"+leptonFolder+variable+"/RecoMET_vs_GenMET_2btags"); -cout << "Getting histo: " << "Binning/"+leptonFolder+variable+"/RecoMET_vs_GenMET_2btags" <Integral(0,bin2-1,0,bin2-1)/tt_2d->Integral(0,301,0,bin2-1); - double p2 = tt_2d->Integral(bin2,bin3-1,bin2,bin3-1)/tt_2d->Integral(0,301,bin2,bin3-1); - double p3 = tt_2d->Integral(bin3,bin4-1,bin3,bin4-1)/tt_2d->Integral(0,301,bin3,bin4-1); - double p4 = tt_2d->Integral(bin4,bin5-1,bin4,bin5-1)/tt_2d->Integral(0,301,bin4,bin5-1); - double p5 = tt_2d->Integral(bin5,301,bin5,301)/tt_2d->Integral(0,301,bin5,301); - - double s1 = tt_2d->Integral(0,bin2-1,0,bin2-1)/tt_2d->Integral(0,bin2-1,0,301); - double s2 = tt_2d->Integral(bin2,bin3-1,bin2,bin3-1)/tt_2d->Integral(bin2,bin3-1,0,301); - double s3 = tt_2d->Integral(bin3,bin4-1,bin3,bin4-1)/tt_2d->Integral(bin3,bin4-1,0,301); - double s4 = tt_2d->Integral(bin4,bin5-1,bin4,bin5-1)/tt_2d->Integral(bin4,bin5-1,0,301); - double s5 = tt_2d->Integral(bin5,301,bin5,301)/tt_2d->Integral(bin5,301,0,301); - - double dp1 = p1*sqrt(pow(tt_2d->Integral(0,bin2-1,0,bin2-1),-1)+pow(tt_2d->Integral(0,301,0,bin2-1),-1)); - double dp2 = p2*sqrt(pow(tt_2d->Integral(bin2,bin3-1,bin2,bin3-1),-1)+pow(tt_2d->Integral(0,301,bin2,bin3-1),-1)); - double dp3 = p3*sqrt(pow(tt_2d->Integral(bin3,bin4-1,bin3,bin4-1),-1)+pow(tt_2d->Integral(0,301,bin3,bin4-1),-1)); - double dp4 = p4*sqrt(pow(tt_2d->Integral(bin4,bin5-1,bin4,bin5-1),-1)+pow(tt_2d->Integral(0,301,bin4,bin5-1),-1)); - double dp5 = p5*sqrt(pow(tt_2d->Integral(bin5,301,bin5,301),-1)+pow(tt_2d->Integral(0,301,bin5,301),-1)); - - double ds1 = s1*sqrt(pow(tt_2d->Integral(0,bin2-1,0,bin2-1),-1)+pow(tt_2d->Integral(0,bin2-1,0,301),-1)); - double ds2 = s2*sqrt(pow(tt_2d->Integral(bin2,bin3-1,bin2,bin3-1),-1)+pow(tt_2d->Integral(bin2,bin3-1,0,301),-1)); - double ds3 = s3*sqrt(pow(tt_2d->Integral(bin3,bin4-1,bin3,bin4-1),-1)+pow(tt_2d->Integral(bin3,bin4-1,0,301),-1)); - double ds4 = s4*sqrt(pow(tt_2d->Integral(bin4,bin5-1,bin4,bin5-1),-1)+pow(tt_2d->Integral(bin4,bin5-1,0,301),-1)); - double ds5 = s5*sqrt(pow(tt_2d->Integral(bin5,301,bin5,301),-1)+pow(tt_2d->Integral(bin5,301,0,301),-1)); -//cout << " bin1 stab: " << s1 << " bin2 pure: " << p1 << endl; -//cout << " bin2 stab: " << s2 << " bin2 pure: " << p2 << endl; -//cout << " bin3 stab: " << s3 << " bin3 pure: " << p3 << endl; -//cout << " bin4 stab: " << s4 << " bin4 pure: " << p4 << endl; -//cout << " bin5 stab: " << s5 << " bin5 pure: " << p5 << endl; - -cout << setprecision(2) << "purity & " << p1 << " & " << p2 << " & " << p3 << " & " << p4 << " & " << p5 << endl; -cout << setprecision(2) << "stability & " << s1 << " & " << s2 << " & " << s3 << " & " << s4 << " & " << s5 << endl; - -} diff --git a/scripts/do2DMET_C.d b/scripts/do2DMET_C.d deleted file mode 100644 index 4b5ee682..00000000 --- a/scripts/do2DMET_C.d +++ /dev/null @@ -1,86 +0,0 @@ - -# DO NOT DELETE - -./do2DMET_C.so: tdrstyle.C -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TStyle.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TNamed.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TObject.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Rtypes.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/RConfig.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/RVersion.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/DllImport.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Rtypeinfo.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/snprintf.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/strlcpy.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TGenericClassInfo.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TSchemaHelper.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TStorage.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVersionCheck.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Riosfwd.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TBuffer.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TString.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TMathBase.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttAxis.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttLine.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttFill.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttText.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttMarker.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArrayI.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArray.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TTree.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TBranch.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TObjArray.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TSeqCollection.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TCollection.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TIterator.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TDataType.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TDictionary.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Property.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArrayD.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TClass.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TObjString.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVirtualTreePlayer.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TFile.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TDirectoryFile.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TDirectory.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TList.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TDatime.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TUUID.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TMap.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/THashTable.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TUrl.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TH1F.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TH1.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAxis.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArrayC.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArrayS.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TArrayF.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Foption.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVectorFfwd.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVectorDfwd.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TFitResultPtr.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TH2D.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TH2.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TMatrixFBasefwd.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TMatrixDBasefwd.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TROOT.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TCanvas.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TPad.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVirtualPad.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttPad.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TVirtualX.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/GuiTypes.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/Buttons.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TQObject.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TAttCanvas.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TCanvasImp.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TText.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TLegend.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TPave.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TBox.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/THStack.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TLine.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TChain.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/TLatex.h -./do2DMET_C.so: /software/root/v5.34.02/normal/root/include/cintdictversion.h /software/root/v5.34.02/normal/root/include/RVersion.h -do2DMET_C__ROOTBUILDVERSION= 5.34/02 diff --git a/scripts/do2DPlots.C b/scripts/do2DPlots.C deleted file mode 100644 index bad0f853..00000000 --- a/scripts/do2DPlots.C +++ /dev/null @@ -1,136 +0,0 @@ -#include -#include "tdrstyle.C" -#include "TTree.h" -#include "TFile.h" -#include "TFile.h" -#include "TH1F.h" -#include "TH2D.h" -#include "TROOT.h" -#include "TStyle.h" -#include "TCanvas.h" -#include "TText.h" -#include "TLegend.h" -#include "THStack.h" -#include "TLine.h" -#include "TChain.h" -#include "TLatex.h" -#include -#include -#include "TLegend.h" -using namespace std; - -void do2DPlots(); -void do2DPlots(bool muon, TString variable, TString xtitle, TString ytitle); -void getBinning(bool muon, TString variable, TString xtitle, TString ytitle); -void do2DPlots(){ - -bool muon = true; - -TString variable[8] = {"RecoHT_vs_GenHT", "RecoHT_lep_vs_GenHT_lep", "RecoHT_lep_met_vs_GenHT_lep_met", "Recoleptonic_W_pt_vs_Genleptonic_W_pt", "RecoM3_vs_GenM3", "RecoMET_vs_GenNu", "RecoHT_vs_GenParton", "GenJetHT_vs_GenParton"}; -TString xtitle[8] = {"Reco HT (GeV)", "Reco HT+lep (GeV)", "Reco HT+lep+met (GeV)", "Reco leptonic W pt (GeV)", "Reco M3 (GeV)", "Reco MET (GeV)", "Reco HT GeV", "Gen Jet HT (GeV)"}; -TString ytitle[8] = {"Gen HT (GeV)", "Gen HT+lep (GeV)", "Gen HT+lep+met (GeV)", "Gen leptonic W pt (GeV)", "Gen M3 (GeV)", "Gen Nu (GeV)", "Gen Parton HT (GeV)", "Gen Parton HT (GeV)"}; - - - -for(int i =4; i<5; i++){ -//do2DPlots(muon, variable[i], xtitle[i], ytitle[i]); -getBinning(muon, variable[i], xtitle[i], ytitle[i]); -} - -} - -void do2DPlots(bool muon, TString variable, TString xtitle, TString ytitle){ - - TString leptonFolder; - if(muon == true){ - leptonFolder = "MuPlusJets/"; - }else{ - leptonFolder = "EPlusJets/"; - } - - setTDRStyle(); - gStyle->SetPalette(1); - - TString dir = "../"; - TFile* tt_file = new TFile(dir + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_TESTING.root"); - - - -TString Nbtags[5] = {"_0btag","_1btag", "_2btags","_3btags", "_4orMoreBtags"}; - -for(int i = 2; i < 3; i++){ - - TH2D* tt_2d = (TH2D*) tt_file->Get("Binning/"+leptonFolder+variable+Nbtags[i]); - - tt_2d->Rebin2D(10,10); - tt_2d->GetYaxis()->SetTitle(ytitle); - tt_2d->GetXaxis()->SetTitle(xtitle); - tt_2d->GetYaxis()->SetTitleOffset(1.8); - tt_2d->GetXaxis()->SetTitleOffset(1.5); - - TCanvas *c= new TCanvas("c","c",10,10,800,600); - tt_2d->Draw("COLZ"); - - TString plotName("plots/"+leptonFolder); - plotName += variable; - plotName += Nbtags[i]+".png"; - - c->SaveAs(plotName); - delete c; - -} - - -} - - -void getBinning(bool muon, TString variable, TString xtitle, TString ytitle){ - - TString leptonFolder; - if(muon == true){ - leptonFolder = "MuPlusJets/"; - }else{ - leptonFolder = "EPlusJets/"; - } - - TString dir = "../"; - TFile* tt_file = new TFile(dir + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_TESTING.root"); - - TH2D* tt_2d = (TH2D*) tt_file->Get("Binning/"+leptonFolder+variable+"_2btags"); - - int i = 0; - int binMin[20]; - binMin[0] = 0; -// int binCho[6] = {0, 80, 110, 160, 240, 340}; //hT -// int binCho[6] = {0, 60, 90, 120, 160, 240}; //mwt - int binCho[5] = {0, 100, 140, 190, 299}; - -for(int bin = 0; binGetNbinsX(); bin++){ - double purity[20]; - double stability[20]; - - purity[i] = tt_2d->Integral(binMin[i], bin+1,binMin[i],bin+1)/tt_2d->Integral(binMin[i], bin+1,0,tt_2d->GetNbinsX()+1); - stability[i] = tt_2d->Integral(binMin[i], bin+1,binMin[i],bin+1)/tt_2d->Integral(0,tt_2d->GetNbinsX()+1 ,binMin[i],bin+1); - - -// if(purity[i]>=0.5 && stability[i]>=0.5){ -// cout << "purity: " << purity[i] << ", stability: " << stability[i] << " bin: " << bin << endl; -// i++; -// binMin[i] = bin; -// } - - if(bin == binCho[i+1]){ - //cout <U0D!19000yw0HFQx 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%0DiC*A+uyQB-kZ0$6D{|%$w_W?TvGZ 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®LZN{X^Xf_ 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 diff --git a/scripts/forLuke/PFhistosForFitting_met1_central.root b/scripts/forLuke/PFhistosForFitting_met1_central.root deleted file mode 100644 index 969886fe3a175499e57e436816fea9e4d874f81c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59101 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

E;#GCVk3+jpOhw@(AGjFUQqbXhmtO#;c8m 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 AK>z>% diff --git a/scripts/forLuke/PFhistosForFitting_met2_central.root b/scripts/forLuke/PFhistosForFitting_met2_central.root deleted file mode 100644 index e2fa5dcb69a03c7fb9d02d759ad5c96be764a694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58433 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.g3m$b~x80@3-2#RJZvhgF8jg0X0806F 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 JGs`EC{{!$a_qqT8 diff --git a/scripts/forLuke/PFhistosForFitting_met4_central.root b/scripts/forLuke/PFhistosForFitting_met4_central.root deleted file mode 100644 index b00583ae3bf74362602c890f9a61843caaa7e086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51903 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�p>AP5wKap>; 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 diff --git a/scripts/forLuke/QCDetaData.root b/scripts/forLuke/QCDetaData.root deleted file mode 100644 index 75fa773434b4d33b278913e26753ebb85aade526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4528 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 -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "TLatex.h" -#include "TText.h" -#include "TLegend.h" -#include "TFile.h" - -#include "tdrstyle.C" - -using namespace std; -// Declare pointer to data as global (not elegant but TMinuit needs this). -vector data_Vec; //input data - -vector ttbar_Vec; //ttbar+single top template from mc -vector wjets_Vec; //wjest template from data driven method -vector zjets_Vec; //zjets template from data driven method -vector qcd_Vec; //qcd template from data drive method - -vector ttbar_err_Vec; -vector wjets_err_Vec; //wjest template from data driven method -vector zjets_err_Vec; //zjets template from data driven method -vector qcd_err_Vec; //qcd template from data drive method - - -int Ntotal; //define as global, got in getDataFromHis function -int nbins; //define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function - -//double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -double xmin = 0; -double xmax; //calculate in getDataFromHis function - -void fcn(int& npar, double* deriv, double& f, double par[], int flag); -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins); -void getSignalFromHis(TFile* inputFile, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); -void getTemFromHis(TFile* inputFile, TString& templ, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); - - -TText* doPrelim(float luminosity, float x, float y); - -//double lumi = 964.6; -//double lumi = 987.2; -double lumi = 4973.4; - - double Nsignal; - double Nwjets; - double Nzjets; - double NQCD; - double NSinglT; - double Nttbar; - double NtotPass; -//------------------------------------------------------------------------- -int TempFitEta() { - - -double theorXsect = 157.5; - - // Choose the jet multiplicity - TString jet_num = "2b_"; - TString jet_num_temp = "ge2j"; - //choose what to use - TString templ = "_central"; - TString num = "3"; - - - //trig - TFile* f_central = TFile::Open("PFhistosForFitting_met"+num+templ+".root"); - //no trig - TFile* f_centraln = TFile::Open("../../metPlots1907/output/PFhistosForFitting_met"+num+templ+".root"); - - TFile* f_templates = TFile::Open("QCDetaData.root"); - TFile* f_all = TFile::Open("PFhistosForFitting_metall"+templ+".root"); - - - TH1D* signaln = (TH1D*) f_centraln->Get("metEta_h_"+jet_num+"signal"); - TH1D* zjetsn = (TH1D*) f_centraln->Get("metEta_h_"+jet_num+"zjets"); - - - TH1D* signal = (TH1D*) f_central->Get("metEta_h_"+jet_num+"signal"); - TH1D* wjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"); - TH1D* zjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"); - TH1D* QCD = (TH1D*) f_central->Get("metEta_h_"+jet_num+"QCD"); - TH1D* SinglT = (TH1D*) f_central->Get("metEta_h_"+jet_num+"SinglT"); - TH1D* ttbar = (TH1D*) f_central->Get("metEta_h_"+jet_num+"ttbar"); - TH1D* tt_Z = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_Z"); - TH1D* tt_W = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_W"); - TH1D* DATA = (TH1D*) f_central->Get("metEta_h_"+jet_num+"data"); - - TH1D* QCData = (TH1D*) f_templates->Get("metEta_h_"+jet_num_temp); - TH1D* ttbarAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"ttbar"); - - int rebinF = 8; - - signaln->Rebin(rebinF); - zjetsn->Rebin(rebinF); - - signal->Rebin(rebinF); - wjets->Rebin(rebinF); - zjets->Rebin(rebinF); - QCD->Rebin(rebinF); - SinglT->Rebin(rebinF); - ttbar->Rebin(rebinF); - tt_Z->Rebin(rebinF); - tt_W->Rebin(rebinF); - DATA->Rebin(rebinF); - QCData->Rebin(rebinF/2); - - - cout << "input params: " << endl; - Nsignal = signal->Integral(); - Nwjets = wjets->Integral(); - Nzjets = zjets->Integral(); - NQCD = QCD->Integral(); - NSinglT = SinglT->Integral(); - Nttbar = ttbar->Integral(); -double Ntt_Z =tt_Z->Integral(); -double Ntt_W =tt_W->Integral(); -double tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; -double Ndata = DATA->Integral(); - NtotPass = ttbarAll->Integral(); - - - TString wstring = "wjets"; - TString zstring = "zjets"; - TString qcdstring = ""; - - // Read in the data and templates. - getDataFromHis(f_central, jet_num, nbins); // Get data histrogram form central selection - getSignalFromHis(f_central, jet_num, nbins, ttbar_Vec, ttbar_err_Vec);// Get ttbar, single-top histrograms form MC with entral selection - - // TString wstring = "Wtemplate"; - // TString zstring = "DYtemplate"; - - getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); - getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); - getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); - - f_central->Close(); - f_templates->Close(); -// f_signal->Close(); -// f_wjets->Close(); -// f_zjets->Close(); -// f_qcd->Close(); - - // Initialize minuit, set initial values etc. of parameters. - const int npar = 4; // the number of parameters - TMinuit minuit(npar); - minuit.SetFCN(fcn); - - //minuit.SetPrintLevel(1); - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - int ierflg = 0; - string parName[npar] = {"ttbar+single-top", "wjets", "zjets", "qcd"}; //background parameters - double par[npar] = {Nsignal, Nwjets, Nzjets, NQCD}; //using the MC estimation as the start values 1fb - //double par[npar] = {4667.33 , 3790.39 , 1376.35 , 194.751}; - cout << "total data events: " << Ntotal << endl; - - - for(int i=0; iSetBinContent(i+1, data_Vec[i]); - - // cout<<"data: "<SetBinContent(i+1, mean); //fitting results - - ttbar_Con->SetBinContent(i+1, ttbar_con); - wjets_Con->SetBinContent(i+1, wjets_con); - zjets_Con->SetBinContent(i+1, zjets_con); - qcd_Con->SetBinContent(i+1, qcd_con); - - ttbar_Temp->SetBinContent(i+1, ttbar_Vec[i]); - wjets_Temp->SetBinContent(i+1, wjets_Vec[i]); - zjets_Temp->SetBinContent(i+1, zjets_Vec[i]); - qcd_Temp->SetBinContent(i+1, qcd_Vec[i]); - - } - - //print out the results - cout <<" \n Total number of events after the fit" << endl; - cout<<" & ttbar+single top & w+jets & z+jets & qcd "<cd(); - ttbar_Temp->SetLineColor(kRed+1); - wjets_Temp->SetLineColor(kGreen-3); - zjets_Temp->SetLineColor(kAzure-2); - qcd_Temp->SetLineColor(kYellow); - // stop_Temp->SetLineColor(kOrange); - - ttbar_Temp->SetLineWidth(5); - wjets_Temp->SetLineWidth(5); - zjets_Temp->SetLineWidth(5); - qcd_Temp->SetLineWidth(5); - // stop_Temp->SetLineWidth(5); - ttbar_Temp->SetAxisRange(0.,2.6); - ttbar_Temp->SetTitle(""); - ttbar_Temp->Draw(); - ttbar_Temp->SetMaximum(1.3*ttbar_Temp->GetMaximum()); - //ttbar_Temp->SetMaximum(.12); - ttbar_Temp->GetXaxis()->SetTitle("muon |#eta|"); - ttbar_Temp->GetYaxis()->SetTitle(""); - - wjets_Temp->Draw("same"); - zjets_Temp->Draw("same"); - qcd_Temp ->Draw("same"); - //stop_Temp ->Draw("same"); - - TLegend* legTemp = new TLegend(0.66, 0.6, 0.96, 0.92); - legTemp->SetBorderSize(0); - legTemp->SetTextFont(42); - legTemp->SetFillColor(0); - - legTemp->AddEntry(ttbar_Temp, " t#bar{t}+single top", "L"); - // legTemp->AddEntry(stop_Temp, " single top", "L"); - legTemp->AddEntry(wjets_Temp, " W#rightarrowl#nu", "L"); - legTemp->AddEntry(zjets_Temp, " Z/#gamma*#rightarrowl^{+}l^{-}", "L"); - legTemp->AddEntry(qcd_Temp , " QCD", "L"); - legTemp->SetTextSize(0.045); - - legTemp->Draw("same"); - - TText* textPrelim1 = doPrelim(lumi,0.49,0.96); - textPrelim1->Draw(); - - //canvasTemp->SaveAs("notePlots/Temp"+num+".png"); - //canvasTemp->SaveAs("notePlots/Temp"+num+".pdf"); - //make fit plot - - TCanvas* canvasFit = new TCanvas("canvasFit", "canvasFit", 700, 500); - canvasFit->cd(); - - ttbar_Con->SetFillColor(kRed+1); - wjets_Con->SetFillColor(kGreen-3); - zjets_Con->SetFillColor(kAzure-2); - qcd_Con ->SetFillColor(kYellow); - // stop_Con->SetFillColor(kOrange); - - - - hs->Add(qcd_Con); - hs->Add(zjets_Con); - hs->Add(wjets_Con); - // hs->Add(stop_Con); - hs->Add(ttbar_Con); - - result->SetLineStyle(1); // 1 = solid, 2 = dashed, 3 = dotted - result->SetLineColor(kViolet-3); // black (default) - result->SetLineWidth(3); - - data->Sumw2(); - data->SetMarkerStyle(20); - data->SetMarkerSize(1.2); - data->SetLineWidth(1); - double h_max = data->GetMaximum(); - data->SetMaximum(1.2*h_max); - data->GetXaxis()->SetTitle("|#eta|(#mu)"); - data->GetYaxis()->SetTitle("Events/(0.2)"); - data->SetAxisRange(0.,2.6); - canvasFit->SetLogy(0); - hs->SetTitle(""); - - data->Draw(); - hs->Draw("same"); - - //result->Draw("same"); - data->Draw("same"); - - - TLegend* legFit = new TLegend(0.66, 0.6, 0.96, 0.92); - legFit->SetBorderSize(0); - legFit->SetTextFont(42); - legFit->SetFillColor(0); - - legFit->AddEntry(data , " Data", "LPE"); -// legFit->AddEntry(result , " Fit", "L"); - legFit->AddEntry(ttbar_Con, " t#bar{t}+single top", "F"); - // legFit->AddEntry(stop_Con , " Single-Top", "F"); - legFit->AddEntry(wjets_Con, " W#rightarrowl#nu", "F"); - legFit->AddEntry(zjets_Con, " Z/#gamma*#rightarrowl^{+}l^{-}", "F"); - legFit->AddEntry(qcd_Con , " QCD", "F"); - - legFit->SetTextSize(0.04); - - legFit->Draw("same"); - - TText* textPrelim = doPrelim(lumi,0.16,0.96); - textPrelim->Draw(); - - gPad->RedrawAxis(); - canvasFit->SaveAs("../pasPlots/Fit"+num+".png"); - canvasFit->SaveAs("../pasPlots/Fit"+num+".pdf"); - - cout << "To exit, quit ROOT from the File menu of the plot" << endl; - canvasFit->SetLogy(0); - data->SetAxisRange(0.,2.6); - //canvasFit->SaveAs("../pasPlots/Fit.png"); - //canvasFit->SaveAs("../pasPlots/Fit.pdf"); - - return 0; - -} - -//------------------------------------------------------------------------- - -// function to read in the data from a histogram -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins){ - - - TH1F *h_data = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"data"); - - -// TFile* output = TFile::Open("muData.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// h_data->SetName("muData"); -// h_data->Write(); - - - - nbins = h_data->GetNbinsX(); - - xmax = xmin + nxbins*(h_data->GetBinWidth(1)); - - cout<<"num of bins: "<GetBinContent(ibin+1) << "," << h_data->GetBinError(ibin+1) << "}, "; - int nn = h_data->GetBinContent(ibin+1); - - data_Vec.push_back(nn); - - Ntotal += nn; - - } - - - //std::cout<< "}" << std::endl; - // cout <<" \n Total number of events before the fit" << endl; - //cout <<" Data: \t "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+templ); - - //std::cout<<"test: "<Integral()<Scale(1./his_mc_array->Integral()); - //std::cout<<"test: "<GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - //std::cout << "{" << his_mc_array->GetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - } - //std::cout<< "}" << std::endl; - -} - - -void getSignalFromHis(TFile* inputFile, TString& jet_num, int& nxbins, vector& vect, vector& vect_err){ - - - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"signal"); - his_mc_array->Scale(1./his_mc_array->Integral()); - - - - -// TFile* output = TFile::Open("signal.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// his_mc_array->SetName("SignalTemplate"); -// his_mc_array->Write(); - -//std::cout << ": {" << std::endl; - for(int ibin=0; ibinGetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - vect.push_back(his_mc_array->GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - } -//std::cout<< "}" << std::endl; - -} -//------------------------------------------------------------------------- - -// fcn passes back f = - 2*ln(L), the function to be minimized. not sure if N_{single top} is obtained from fitting -void fcn(int& npar, double* deriv, double& f, double par[], int flag){ - - double lnL = 0.0; - - - for (int i=0; i0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - //cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - //double r = nwjets/nzjets; - //double r_err = r*0.01; - - //f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - //Wjets constrain -// f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -// //Zjets constrain -// f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -// //QCD constrain -// f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - //Ratio Constrain - //f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); //chi4? - - - //ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); //swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -TText* doPrelim(float luminosity, float x, float y) -{ - std::ostringstream stream; - stream <<"#mu, #geq 4 jets, #geq 2 b-tags CMS Preliminary, L = 5.0 fb^{-1} @ #sqrt{s} = 7 TeV"; - - TLatex* text = new TLatex(x, y, stream.str().c_str()); - //text->SetTextAlign(33); //left - //text->SetTextAlign(22); //center - //text->SetTextAlign(11); //right -text->SetNDC(true); -text->SetTextFont(42); -text->SetTextSize(0.035); // for thesis - - return text; -} diff --git a/scripts/forLuke/diffTempFit.cc b/scripts/forLuke/diffTempFit.cc deleted file mode 100644 index 24a53b32..00000000 --- a/scripts/forLuke/diffTempFit.cc +++ /dev/null @@ -1,823 +0,0 @@ -/*A C++ program to use of ROOT class TMinuit for function minimization.It shows a Maximum Likelihood fit for the mean of a binned Poisson pdf in which TMinuit minimizes - - 2*log(L). fcn passes back f = -2*ln L by reference; this is the function to minimize. - - The factor of -2 allows MINUIT to get the errors using the same recipe as for least squares, i.e., go up from the minimum by 1. - - TMinuit does not allow fcn to be a member function, and the function arguments are fixed, so the one of the only ways to bring the data into fcn is to declare a poi -nter to the data (xVecPtr) as global. - - For more info on TMinuit see root.cern.ch/root/html/TMinuit.html . - -*/ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "TLatex.h" -#include "TText.h" -#include "TLegend.h" -#include "TFile.h" -#include "TGraphAsymmErrors.h" - -#include "tdrstyle.C" - -using namespace std; -// Declare pointer to data as global (not elegant but TMinuit needs this). -vector data_Vec; //input data - -vector ttbar_Vec; //ttbar+single top template from mc -vector wjets_Vec; //wjest template from data driven method -vector zjets_Vec; //zjets template from data driven method -vector qcd_Vec; //qcd template from data drive method - -vector ttbar_err_Vec; -vector wjets_err_Vec; //wjest template from data driven method -vector zjets_err_Vec; //zjets template from data driven method -vector qcd_err_Vec; //qcd template from data drive method - - -int Ntotal; //define as global, got in getDataFromHis function -int nbins; //define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function - -//double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -double xmin = 0; -double xmax; //calculate in getDataFromHis function - -void fcn(int& npar, double* deriv, double& f, double par[], int flag); -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins); -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst, int& nxbins, vector& vect, vector& vect_err); -void getTemFromHis(TFile* inputFile, TString& templ, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); - - -TText* doPrelim(float luminosity, float x, float y); - -//double lumi = 964.6; -//double lumi = 987.2; -double lumi = 4973.4; - - double Nsignal; - double Nwjets; - double Nzjets; - double NQCD; - double NSinglT; - double Nttbar; - double NtotPass; - double NttbarUp; - double NtotPassUp; - double NttbarDown; - double NtotPassDown; - - double NttbarUpMat; - double NtotPassUpMat; - double NttbarDownMat; - double NtotPassDownMat; - - double NttbarNLO; - double NtotPassNLO; - double NttbarPOW; - double NtotPassPOW; - - //scale for bin - double bin2bin[5] = {1.1319 , 1.0636 , 0.934024 , 0.902389 , 0.98126}; - -//------------------------------------------------------------------------- - -int diffTempFit() { -setTDRStyle(); -gStyle->SetTitleYOffset(1.6); -//asymerrors - int n = 5; - double x[n]; - double y[n]; - double exl[n]; - double exh[n]; - -double theorNum = 0; -double nloNum = 0; -double powhegNum = 0; - -//syst -double upNum = 0; -double downNum = 0; -double mupNum = 0; -double mdownNum = 0; - -double theorXsect = 157.5; -double totXsect = 0; - - // Choose the jet multiplicity - TString jet_num = "2b_"; - TString jet_num_temp = "ge2j"; - - TString metBin[5] = {"1","2","3","4","5"}; - -//choose what to use -TString templ = "_central"; - - - //differential histo - double xbins[6]= {1,25,45,70,100,150}; - //histograms for comaprison - //diff generators - TH1D *theor = new TH1D("theor", "", 5, xbins); - TH1D *nlo = new TH1D("nlo", "", 5, xbins); - TH1D *powheg = new TH1D("powheg", "", 5, xbins); - //syst samples - TH1D *sysup = new TH1D("sysup", "", 5, xbins); - TH1D *sysdown = new TH1D("sysdown", "", 5, xbins); - TH1D *mup = new TH1D("mup", "", 5, xbins); - TH1D *mdown = new TH1D("mdown", "", 5, xbins); - //measured - TH1D *measured = new TH1D("meas", "", 5, xbins); //muon - TH1D *ele = new TH1D("ele", "", 5, xbins); - TH1D *comb = new TH1D("comb", "", 5, xbins); - //compare histo - TH1D *nominal = new TH1D("nominal", "", 5, xbins); - - TString syst = "ttbar"; - - for(int met = 0; met<5; met++){ - //for systematics - TFile* f_central = TFile::Open("PFhistosForFitting_met"+metBin[met]+templ+".root"); - TFile* f_all = TFile::Open("PFhistosForFitting_metall"+templ+".root"); - TFile* f_templates = TFile::Open("QCDetaData.root"); - - TH1D* signal = (TH1D*) f_central->Get("metEta_h_"+jet_num+"signal"); - TH1D* wjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"); - TH1D* zjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"); - TH1D* SinglT = (TH1D*) f_central->Get("metEta_h_"+jet_num+"SinglT"); - TH1D* ttbar = (TH1D*) f_central->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* QCD = (TH1D*) f_central->Get("metEta_h_"+jet_num+"QCD"); - TH1D* tt_Z = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_Z"); - TH1D* tt_W = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_W"); - TH1D* DATA = (TH1D*) f_central->Get("metEta_h_"+jet_num+"data"); - TH1D* QCData = (TH1D*) f_templates->Get("metEta_h_"+jet_num_temp); - - TH1D* ttbarAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"ttbar"); - -// TH1D* signal_sys = (TH1D*) f_->Get("metEta_h_"+jet_num+"signal"); -// TH1D* wjets_sys = (TH1D*) f_sys->Get("metEta_h_"+jet_num+"wjets"); -// TH1D* zjets_sys = (TH1D*) f_sys->Get("metEta_h_"+jet_num+"zjets"); - - //for other gens - TH1D* ttbar_nlo = (TH1D*) f_central->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powheg = (TH1D*) f_central->Get("metEta_h_"+jet_num+"powheg"); - TH1D* ttbar_nloAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powhegAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"powheg"); - - //for sys up/down - - TH1D* ttbar_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbar_sysdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qdown"); - TH1D* ttbarUpAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbarDownAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qdown"); - - TH1D* ttbar_mup = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbar_mdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mdown"); - TH1D* ttbarUpAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbarDownAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mdown"); - - //Choose rebin factor... -int rebinF = 8; -// if(met==4){ -// rebinF=4; -// } - -// signal_sys->Rebin(rebinF); - ttbar_sys->Rebin(rebinF); -// wjets_sys->Rebin(rebinF); -// zjets_sys->Rebin(rebinF); - - ttbar_sysdown->Rebin(rebinF); - - ttbar_mup->Rebin(rebinF); - ttbar_mdown->Rebin(rebinF); - - ttbar_nlo->Rebin(rebinF); - ttbar_powheg->Rebin(rebinF); - - - signal->Rebin(rebinF); - wjets->Rebin(rebinF); - zjets->Rebin(rebinF); - QCD->Rebin(rebinF); - SinglT->Rebin(rebinF); - ttbar->Rebin(rebinF); - tt_Z->Rebin(rebinF); - tt_W->Rebin(rebinF); - DATA->Rebin(rebinF); - QCData->Rebin(rebinF/2); - - - cout << "input params: " << endl; - //systematic samples - NttbarUp = ttbar_sys->Integral(); - NtotPassUp = ttbarUpAll->Integral(); - NttbarDown = ttbar_sysdown->Integral(); - NtotPassDown = ttbarDownAll->Integral(); - NttbarUpMat = ttbar_mup->Integral(); - NtotPassUpMat = ttbarUpAllMat->Integral(); - NttbarDownMat = ttbar_mdown->Integral(); - NtotPassDownMat = ttbarDownAllMat->Integral(); - - NttbarNLO = ttbar_nlo->Integral(); - NtotPassNLO = ttbar_nloAll->Integral(); - NttbarPOW = ttbar_powheg->Integral(); - NtotPassPOW = ttbar_powhegAll->Integral(); - - Nsignal = signal->Integral(); - Nwjets = wjets->Integral(); - Nzjets = zjets->Integral(); - NQCD = QCD->Integral(); - NSinglT = SinglT->Integral(); - Nttbar = ttbar->Integral(); - NtotPass = ttbarAll->Integral(); - - -double Ntt_Z =tt_Z->Integral(); -double Ntt_W =tt_W->Integral(); -double tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; -double Ndata = DATA->Integral(); - cout << "all tt: " << NtotPass << endl; - cout << "signal: " << Nsignal << endl; - cout << "wjets: " << Nwjets<< endl; - cout << "zjets: " << Nzjets << endl; - cout << "qcd: " << NQCD << endl; - - TString wstring = "wjets"; - TString zstring = "zjets"; - TString qcdstring = ""; - - - // Read in the data and templates. - getDataFromHis(f_central, jet_num, nbins); // Get data histrogram form central selection - getSignalFromHis(f_central, jet_num, syst, nbins, ttbar_Vec, ttbar_err_Vec);// Get ttbar, single-top histrograms form MC with entral selection - - getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); - getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); - getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); - - f_central->Close(); - f_templates->Close(); - - // Initialize minuit, set initial values etc. of parameters. - const int npar = 4; // the number of parameters - TMinuit minuit(npar); - minuit.SetFCN(fcn); - - //minuit.SetPrintLevel(1); - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - double fraction= NSinglT/Nsignal; - - int ierflg = 0; - string parName[npar] = {"ttbar+single-top", "wjets", "zjets", "qcd"}; //background parameters - double par[npar] = {Nsignal, Nwjets, Nzjets, NQCD}; //using the MC estimation as the start values 1fb - - cout << "total data events: " << Ntotal << endl; - - for(int i=0; iGetBinWidth(met+1); - -measured->SetBinContent(met+1,xs_fit/width); -measured->SetBinError(met+1,(xs_fitup-xs_fit)/width); - -nlo->SetBinContent(met+1,nloNum/157.5/width); -powheg->SetBinContent(met+1,powhegNum/157.5/width); -theor->SetBinContent(met+1, (bin2bin[met]*theorNum/157.5/width)); - -sysup->SetBinContent(met+1, (bin2bin[met]*upNum/157.5/width)); -sysdown->SetBinContent(met+1, (bin2bin[met]*downNum/157.5/width)); -mup->SetBinContent(met+1, (bin2bin[met]*mupNum/157.5/width)); -mdown->SetBinContent(met+1, (bin2bin[met]*mdownNum/157.5/width)); - - -x[met] = measured->GetBinCenter(met+1); -y[met] = xs_fit/width; -//exl[met] = measured->GetBinWidth(met+1)/2.; -//exh[met] = measured->GetBinWidth(met+1)/2.; -exl[met] = 0.; -exh[met] = 0.; -} //end of met loop - -//uncertainties***************************************************************************** -//double tempStat[5] = {1.806/25./157.5, 1.888/20./157.5, 2.051/25./157.5, 1.072/30./157.5, 1.215/50./157.5}; -double tempStat[5] = {0,0,0,0,0}; - -double JESup[5] = {0.00018686 , 0.000254873 , 0.000181984 , -0.000525503 , 3.26796e-05}; -double JESdown[5] = {0.000223406 , -0.000362 , 0.000248638 , -0.000246032 , 6.08773e-05}; - -double METup[5] = {0.000385347 , 3.01644e-05 , -0.000476814 , 2.71308e-05 , 2.51081e-05}; -double METdown[5] = {0.000366172 , -0.000133105 , -0.000195811 , -3.46826e-05 , -3.79334e-06}; - -double PUup[5] = {0.000132928 , -2.48779e-05 , 6.61007e-07 , -1.04251e-06 , -5.35471e-05}; -double PUdown[5] = {-6.59201e-05 , -6.32625e-06 , 1.66483e-05 , 1.09521e-05 , 1.92887e-05}; - -double Bup[5] = {-3.1983e-06 , 3.08789e-05 , -7.06707e-06 , -3.20028e-06 , -5.35066e-06}; -double Bdown[5] = {-9.95133e-06 , 4.11996e-05 , -1.62558e-05 , -7.1995e-06 , 7.56417e-07}; - -double Qallup[5] = {-0.000130589 , -2.90699e-05 , 0.000226989 , -3.44631e-05 , -1.84942e-05}; -double Qalldown[5] = {0.000957462 , -0.000710205 , 0.000534231 , -0.000654179 , -5.00956e-05}; - -double Mallup[5] = {0.000307849 , -0.000103324 , -0.000125457 , -5.91573e-05 , -8.203e-06}; -double Malldown[5] = {0.00023947 , -0.000892247 , 0.000806758 , -5.76717e-05 , -0.000126811}; - -double singletD[5] = {7.87955e-06 , -4.22954e-06 , -1.23691e-05 , -4.43155e-06 , 6.75271e-06}; -double singletU[5] = {-8.08991e-06 , 4.34e-06 , 1.26758e-05 , 4.5571e-06 , -6.9254e-06}; - -double idUp[5] = {5.99454e-05 , 0.000150228 , 0.000116607 , -0.000280843 , 2.13493e-05}; -double idDown[5] = {7.70397e-05 , 0.000146588 , 9.50871e-05 , -0.000283887 , 2.71862e-05}; - - -double lumiD[5] = {5.67361e-05 , 0.00018803 , 0.000108069 , -0.000301307 , 2.43164e-05}; -double lumiU[5] = {6.65391e-05 , 0.000143872 , 0.000125036 , -0.000292431 , 2.34648e-05}; - -double pdf[5] = {2.71e-05 , 3.66e-05 , 1.28e-05 , 1.33e-05 , 1.03e-05}; - -double stat[5] = {0.000236782 , 0.0003032 , 0.000233202 , 6.27219e-05 , 8.94673e-05}; - -double up[5], down[5]; - -for(int bin = 0; bin < 5; bin++ ){ -down[bin] =sqrt(pow(JESdown[bin],2)+pow(Qalldown[bin],2)+pow(Malldown[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METdown[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)+pow(PUdown[bin],2)+pow(Bdown[bin],2)+pow(idDown[bin],2)); -up[bin] =sqrt(pow(JESup[bin],2)+pow(Qallup[bin],2)+pow(Mallup[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METup[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)+pow(PUup[bin],2)+pow(Bup[bin],2)+pow(idUp[bin],2)); - - -y[bin] = (bin2bin[bin]*y[bin])/totXsect; - -} - -//electron values for >=2btags - double eleres[5] = {0.01*0.70, 0.01*1.25, 0.01*1.08, 0.01*0.56, 0.01*0.27}; - double eleyl[5] = {sqrt(pow(0.01*0.12,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.19,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.05,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.01 ,2))}; - double eleyh[5] = {sqrt(pow(0.01*0.04,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.37,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.07,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.01 ,2))}; -//electron values for geq to 4jets -// double eleres[5] = {0.01*0.39, 0.01*0.99, 0.01*1.25, 0.01*0.73, 0.01*0.35}; -// double eleyl[5] = {sqrt(pow(0.01*0.51,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.10,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.40,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.39,2)),sqrt(pow(0.01*0.17,2)+pow(0.01*0.02 ,2))}; -// double eleyh[5] = {sqrt(pow(0.01*0.76,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.63,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.24,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.12,2)),sqrt(pow(0.01*0.08,2)+pow(0.01*0.02 ,2))}; - - //electron values******************************************************************** -TGraphAsymmErrors* grele = new TGraphAsymmErrors(n,x,eleres,exl,exh,eleyl,eleyh); - grele->SetMarkerStyle(20); - grele->SetMarkerColor(4); - grele->SetLineColor(4); - grele->SetMarkerStyle(26); - - for(int bin = 0; bin < 5; bin++){ - ele->SetBinContent(bin+1,eleres[bin]); - ele->SetBinError(bin+1,0.000001); - } - - ele->SetMarkerStyle(20); - ele->SetMarkerColor(4); - ele->SetLineColor(4); - - //muon values************************************************************************* - double eyl[5] = {down[0],down[1],down[2],down[3],down[4]}; - double eyh[5] = {up[0],up[1],up[2],up[3],up[4]}; - TGraphAsymmErrors* gr = new TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh); - gr->SetMarkerColor(1); - gr->SetMarkerStyle(20); - gr->SetFillStyle(3004); - - - TCanvas *c= new TCanvas("c","c",10,10,800,600); - - - -measured->SetMarkerStyle(20); -measured->Scale(1./ totXsect); -std::cout << "total measured x sect: " << totXsect << std::endl; - -//cout.precision(3); -//std::cout << "temp stat: " << std::endl; -//for(int i = 0; i<5; i++){ -//std::cout << tempStat[i] << "(" << (tempStat[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -//} - - //central -// double central[5] = {0.00609465 , 0.0145213 , 0.0116628 , 0.00549336 , 0.00213862}; -//central fit - double central[5] = {0.00616768 , 0.0143576 , 0.0116077 , 0.00554829 , 0.00216365}; - -//std::cout << (measured->GetBinError(1)/y[0])*100 << " , " << (measured->GetBinError(2)/y[1])*100 << " , " << (measured->GetBinError(3)/y[2])*100 << " , " << (measured->GetBinError(4)/y[3])*100 << " , " << (measured->GetBinError(5)/y[4])*100 << std::endl; - - //uncertaint write out for muon -// std::cout << "tot up: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << up[i] << "(" << (up[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } -// std::cout << "tot down: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << down[i] << "(" << (down[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } - - -//Combination!!!********************************************************************************* -//std::cout << " combined vals: " << std::endl; -//combination stuff -double val[5]; double combUp[5]; double combDown[5]; -for(int i = 0; i<5; i++){ -double valnum = (measured->GetBinContent(i+1)/pow(up[i],2))+(measured->GetBinContent(i+1)/pow(down[i],2))+(eleres[i]/pow(eleyh[i],2))+(eleres[i]/pow(eleyl[i],2)); -double den = (1./pow(up[i],2))+(1./pow(down[i],2))+(1./pow(eleyh[i],2))+(1./pow(eleyl[i],2)); -val[i] = valnum/den; - -combUp[i] = sqrt(1./(1./pow(up[i],2)+pow(eleyh[i],2))); -combDown[i] = sqrt(1./(1./pow(down[i],2)+pow(eleyl[i],2))); - -//std::cout << val[i] << " , " ; -comb->SetBinContent(i+1, val[i]); -comb->SetBinError(i+1, 0.00000000001); -} - -TGraphAsymmErrors* grcomb = new TGraphAsymmErrors(n,x,val,exl,exh,combDown,combUp); - grcomb->SetMarkerStyle(20); - grcomb->SetMarkerColor(7); - grcomb->SetLineColor(7); - grcomb->SetMarkerStyle(20); - - comb->SetMarkerStyle(20); - comb->SetMarkerColor(7); - comb->SetLineColor(7); - -//show nominal calculated values -for(int i =1; i < 6; i++){ -nominal->SetBinContent(i,central[i-1]); - } - - - //plot colors - theor->SetLineColor(kRed+1); - sysup->SetLineColor(kBlue); - sysdown->SetLineColor(kRed+1); - mup->SetLineColor(kMagenta+3); - mdown->SetLineColor(kGreen + 4); - //theor->SetFillColor(kRed+1); - nominal->SetLineColor(kWhite); - - theor->SetLineStyle(7); - sysup->SetLineStyle(7); - sysdown->SetLineStyle(7); - mup->SetLineStyle(7); - mdown->SetLineStyle(7); - - nlo->SetLineStyle(7); - powheg->SetLineStyle(7); - nlo->SetLineColor(kMagenta+3); - powheg->SetLineColor(kBlue); - -theor->SetMinimum(0); -theor->SetMaximum(0.02); - -//nominal->Draw(); - -theor->Draw(); -//sysup->Draw(); - -//theor->SetMaximum(0.018); -//nominal->Draw("same"); -//measured->Draw("Esame"); -//ele->Draw("Esame"); -gr->Draw("P"); -//ele and combined -//grele->Draw("Esame"); -//comb->Draw("Esame"); -//grcomb->Draw("Esame"); - -//nominal->Draw("same"); - -//systs -// sysup->Draw("same"); -// sysdown->Draw("same"); -// mup->Draw("same"); -// mdown->Draw("same"); - -//gens -nlo->Draw("same"); -powheg->Draw("same"); - -//too see effect of an uncertainty for input of uncertainty - -//cout.precision(4); -//too see effect of an uncertainty - -std::cout << " output: " << std::endl; -for(int bin = 1; bin<=5; bin++){ - std::cout << measured->GetBinContent(bin)-nominal->GetBinContent(bin) << " , " ; - // std::cout << measured->GetBinError(bin) << " , "; -} -std::cout << " " << std::endl; -cout.precision(3); -for(int bin = 1; bin<=5; bin++){ -std::cout << 100*measured->GetBinContent(bin) << " \\pm " << 100*stat[bin-1] << " (fit)^{+" << 100*up[bin-1] << "}_{-"<<100*down[bin-1] << "} (sys)" << std::endl; - -//std::cout << 100*(measured->GetBinContent(bin)-nominal->GetBinContent(bin))/measured->GetBinContent(bin) << "\\\% & " ; - //std::cout << 100*(up[bin-1])/measured->GetBinContent(bin) << "\\\% & " ; - //std::cout << 100*(measured->GetBinError(bin)/measured->GetBinContent(bin)) << "\\% & "; -} - -std::cout << totXsect << std::endl; - -//legend - TLegend *tleg; - tleg = new TLegend(0.65,0.75,0.9,0.9); - tleg->SetTextSize(0.03); - tleg->SetBorderSize(0); - tleg->SetFillColor(10); - - - tleg->AddEntry(gr , "data '11'" , "lep"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets, #geq 2 btags)" , "lpe"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets)" , "lpe"); -// tleg->AddEntry(comb , "combined" , "lpe"); - - tleg->AddEntry(theor , "t#bar{t} (MADGRAPH)" , "l"); - tleg->AddEntry(powheg , "t#bar{t} (POWHEG)" , "l"); - tleg->AddEntry(nlo , "t#bar{t} (MC@NLO)" , "l"); - //for sys -// tleg->AddEntry(sysdown , "t#bar{t} (Q^{2} down) " , "l"); -// tleg->AddEntry(sysup , "t#bar{t} (Q^{2} up) " , "l"); -// tleg->AddEntry(mdown , "t#bar{t} (matching threshold 10 GeV)" , "l"); -// tleg->AddEntry(mup , "t#bar{t} (matching threshold 40 GeV)" , "l"); - -//tleg->AddEntry(nominal , "no trigger corrections" , "l"); - - tleg->Draw("same"); - - - -//titles -theor->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{#partial #sigma}{#partial MET} [GeV^{-1}]");theor->GetYaxis()->SetTitleSize(0.05); -theor->GetXaxis()->SetTitle("MET [GeV]"); theor->GetXaxis()->SetTitleSize(0.05); -sysup->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{#partial #sigma}{#partial MET} [GeV^{-1}]");sysup->GetYaxis()->SetTitleSize(0.05); -sysup->GetXaxis()->SetTitle("MET [GeV]"); sysup->GetXaxis()->SetTitleSize(0.05); - - TText* textPrelim = doPrelim(lumi,0.16,0.96); - textPrelim->Draw(); - -//c->SetLogy(1); - -c->SaveAs("../pasPlots/compGen.png"); -c->SaveAs("../pasPlots/compGen.pdf"); - -return 0; - -} - -//------------------------------------------------------------------------- - -// function to read in the data from a histogram -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins){ - - TH1F *h_data = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"data"); -Ntotal=0; - -// TFile* output = TFile::Open("muData.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// h_data->SetName("muData"); -// h_data->Write(); - - - - nbins = h_data->GetNbinsX(); - - xmax = xmin + nxbins*(h_data->GetBinWidth(1)); - - cout<<"num of bins: "<GetBinContent(ibin+1); - - data_Vec.push_back(nn); - - Ntotal += nn; - - } - - // cout <<" \n Total number of events before the fit" << endl; - //cout <<" Data: \t "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+templ); - - //std::cout<<"test: "<Integral()<Scale(1./his_mc_array->Integral()); - //std::cout<<"test: "<GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - //std::cout << "{" << his_mc_array->GetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - } - //std::cout<< "}" << std::endl; - -} - - -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst,int& nxbins, vector& vect, vector& vect_err){ - - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+syst); - TH1F* his_mc_stop = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"SinglT"); - his_mc_array->Add(his_mc_stop); - - his_mc_array->Scale(1./his_mc_array->Integral()); - - - - -// TFile* output = TFile::Open("signal.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// his_mc_array->SetName("SignalTemplate"); -// his_mc_array->Write(); - - - for(int ibin=0; ibinGetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - } - - -} -//------------------------------------------------------------------------- - -// fcn passes back f = - 2*ln(L), the function to be minimized. not sure if N_{single top} is obtained from fitting -void fcn(int& npar, double* deriv, double& f, double par[], int flag){ - - double lnL = 0.0; - - - for (int i=0; i0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - //cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - //double r = nwjets/nzjets; - //double r_err = r*0.01; - - //f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - //Wjets constrain -// f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -// //Zjets constrain -// f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -// //QCD constrain -// f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - //Ratio Constrain - //f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); //chi4? - - - //ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); //swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -TText* doPrelim(float luminosity, float x, float y) -{ - std::ostringstream stream; - stream <<"#mu, #geq 4 jets, #geq 2 b-tags CMS Preliminary, L = 5.0 fb^{-1} @ #sqrt{s} = 7 TeV"; - - TLatex* text = new TLatex(x, y, stream.str().c_str()); - //text->SetTextAlign(33); //left - //text->SetTextAlign(22); //center - //text->SetTextAlign(11); //right -text->SetNDC(true); -text->SetTextFont(42); -text->SetTextSize(0.035); // for thesis - - return text; -} diff --git a/scripts/forLuke/pseudoExpsData.C b/scripts/forLuke/pseudoExpsData.C deleted file mode 100644 index f0772cd4..00000000 --- a/scripts/forLuke/pseudoExpsData.C +++ /dev/null @@ -1,684 +0,0 @@ -/*A C++ program to use of ROOT class TMinuit for function minimization.It shows a Maximum Likelihood fit for the mean of a binned Poisson pdf in which TMinuit minimizes - - 2*log(L). fcn passes back f = -2*ln L by reference; this is the function to minimize. - - The factor of -2 allows MINUIT to get the errors using the same recipe as for least squares, i.e., go up from the minimum by 1. - - TMinuit does not allow fcn to be a member function, and the function arguments are fixed, so the one of the only ways to bring the data into fcn is to declare a poi -nter to the data (xVecPtr) as global. - - For more info on TMinuit see root.cern.ch/root/html/TMinuit.html . - - Yao Weng 11/30/2009 - -*/ -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "TLatex.h" -#include "TText.h" -#include "TLegend.h" -#include "TFile.h" - -#include "tdrstyle.C" -#include "TRandom3.h" - - -using namespace std; -// Declare pointer to data as global (not elegant but TMinuit needs this). -vector data_Vec; //input data - -vector sig_Vec; //ttbar+single top template from mc -vector ttbar_Vec; //ttbar+single top template from mc -vector SinglT_Vec; //ttbar+single top template from mc -vector wjets_Vec; //wjest template from mc -vector zjets_Vec; //zjets template from mc -vector qcd_Vec; //qcd template from data drive method - -vector sig_err_Vec; -vector ttbar_err_Vec; //ttbar+single top template from mc -vector SinglT_err_Vec; //ttbar+single top template from mc -vector wjets_err_Vec; //wjest template from data driven method -vector zjets_err_Vec; //zjets template from data driven method -vector qcd_err_Vec; //qcd template from data drive method - -vector sig_Vec_Exp; //ttbar+single top template from mc -vector ttbar_Vec_Exp; //ttbar+single top template from mc -vector SinglT_Vec_Exp; //ttbar+single top template from mc -vector wjets_Vec_Exp; //wjest template from data driven method -vector zjets_Vec_Exp; //zjets template from data driven method -vector qcd_Vec_Exp; //qcd template from data drive method - -int Ntotal; //define as global, got in getDataFromHis function -int nbins; //define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function -double total; - -//double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -double xmin = 0; -double xmax; //calculate in getDataFromHis function - -void fcn(int& npar, double* deriv, double& f, double par[], int flag); -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins); -void getSignalFromHis(TFile* inputFile, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); -void getTemFromHis(TFile* inputFile, TString& templ, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); - -//added for pseudo exps -void makePseudoData(int metBin, TString sample, vector& vect_exp, vector& vect, vector& vect_err, double Nin, double jes, double q2); -void allPseudoData(vector& vect_data, vector& vect_tt,vector& vect_singl, vector& vect_w, vector& vect_z,vector& vect_qcd); - -TText* doPrelim(float luminosity, float x, float y); - -//double lumi = 964.6; -//double lumi = 987.2; -double lumi = 4973.4; - - double Nsignal; - double Nwjets; - double Nzjets; - double NQCD; - double NSinglT; - double Nttbar; - double NtotPass; - - double NQCD_Exp; -//systematic stuff - double sigJES[5] = {0.0931625,0.0913714,0.0878864,0.0907158,0.0727412}; - double wJES[5] = { 0.177986,0.182469,0.164872,0.145936,0.107857}; - double zJES[5] = { 0.191011,0.165981,0.143306,0.179691,0.104074}; - double qcdJES[5] = { 0.,0.,0.,0.,0.}; - - double sigQ2[5] = {-0.0555018, -0.0561554, -0.0684114, -0.06333, -0.128015}; - //double wQ2A[5] = {0.0409279, 0.0323349,0.0434689, 0.023042, 0.0134098}; - double wQ2A[5] = {0.0, 0.0,0.0, 0.0, 0.0}; - double wQ2B[5] = {-1.29644, -1.25751, -1.27239, -1.19836, -1.44405}; - //double zQ2A[5] = {-0.0109077, -0.00468542, 0.0150196, 0.00462842, 0.00129225}; - double zQ2A[5] = {-0.0, -0.0, 0.0, 0.0, 0.0}; - double zQ2B[5] = {-1.00334, -1.04471, -1.16302, -1.0853, -0.636802}; - - -//------------------------------------------------------------------------- -int pseudoExpsData() { - -int nExperiments = 5000; - -double theorXsect = 157.5; - - // Choose the jet multiplicity - TString jet_num = "2b_"; - TString jet_num_temp = "ge2j"; - - TString dir = "/home/mepgphs/project/CMSSW_4_2_5/CMGTools/CMSSW_4_2_5/src/CMGTools/TtbarMuonJets/metPlots1907/output/"; - - TString number = "2"; - int metBin = 2; - - TFile* f_central = TFile::Open(dir+"PFhistosForFitting_met"+number+"_central.root"); - TFile* f_templates = TFile::Open(dir+"QCDetaData.root"); - TFile* f_all = TFile::Open(dir+"PFhistosForFitting_metall_central.root"); - - TFile* f_sys = TFile::Open(dir+"scaledown_met"+number+"_central.root"); - - TH1D* signal = (TH1D*) f_central->Get("metEta_h_"+jet_num+"signal"); - TH1D* wjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"); - TH1D* zjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"); - TH1D* QCD = (TH1D*) f_central->Get("metEta_h_"+jet_num+"QCD"); - TH1D* SinglT = (TH1D*) f_central->Get("metEta_h_"+jet_num+"SinglT"); - TH1D* ttbar = (TH1D*) f_central->Get("metEta_h_"+jet_num+"ttbar"); - TH1D* tt_Z = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_Z"); - TH1D* tt_W = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_W"); - TH1D* DATA = (TH1D*) f_central->Get("metEta_h_"+jet_num+"data"); - TH1D* QCDeta = (TH1D*) f_templates->Get("metEta_h_"+jet_num_temp); - TH1D* ttbarAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* signal_sys = (TH1D*) f_sys->Get("metEta_h_"+jet_num+"signal"); - - int rebinF = 8; - signal_sys->Rebin(rebinF); - - signal->Rebin(rebinF); - wjets->Rebin(rebinF); - zjets->Rebin(rebinF); - QCD->Rebin(rebinF); - SinglT->Rebin(rebinF); - ttbar->Rebin(rebinF); - tt_Z->Rebin(rebinF); - tt_W->Rebin(rebinF); - DATA->Rebin(rebinF); - QCDeta->Rebin(rebinF/2); - - cout << "input params: " << endl; - Nsignal = signal->Integral(); - Nwjets = wjets->Integral(); - Nzjets = zjets->Integral(); - NQCD = QCD->Integral(); - NSinglT = SinglT->Integral(); - Nttbar = ttbar->Integral(); - NtotPass = ttbarAll->Integral(); -double Ntt_Z =tt_Z->Integral(); -double Ntt_W =tt_W->Integral(); -double tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; -double Ndata = DATA->Integral(); - - cout << "signal: " << Nsignal << endl; - cout << "wjets: " << Nwjets << endl; - cout << "zjets: " << Nzjets << endl; - cout << "qcd: " << NQCD << endl; - -// cout << Nttbar << " & " << Nwjets << " & " << Nzjets << " & " << NQCD << " & " << NSinglT << " & " << Ntt_Z << " & " << Ntt_W << " & " << tot << " & " << Ndata <Close(); - f_templates->Close(); - - TH1D* his_beta_fit = new TH1D("his_beta_fit", "", 1500, -0.5, 2.5); //used to plot beta_fit distribution - TH1F* his_pull = new TH1F("his_pull", "", 1000, -10., 10.); //used to plot beta_fit distribution - TH1F* his_result = new TH1F("his_result", "", 1000, 0. , 80.); //used to plot beta_fit distribution - -int iexp =0; -while(iexp < nExperiments) { // loop doing experiments - //data_Vec.erase(data_Vec.begin(),data_Vec.end()); - total = 0; - - //std::cout << "sig before: " << Nsignal << std::endl; - TRandom3* rng = new TRandom3(0); - //JES parameterisation - double delta_JES=1000; - double JESwidth = 1.0; - while(fabs(delta_JES)>2.*JESwidth) - delta_JES=rng->Gaus(0.,JESwidth); - delta_JES = 0.; - - //Q2 for V+jets - double delta_qscale = 1000.; - double Q2width = TMath::Log(2.); -while((TMath::Exp((wQ2B[metBin-1]-zQ2B[metBin-1])*delta_qscale))<0.75||TMath::Exp((wQ2B[metBin-1]-zQ2B[metBin-1])*delta_qscale)>1.25) - delta_qscale = rng->Gaus(0.,Q2width); - delta_qscale = 0.; - - //Q2 for tt+jets - double delta_qscale_tt = 1000.; -while((delta_qscale_tt)>2.*Q2width) - delta_qscale_tt = rng->Gaus(0.,Q2width); - delta_qscale_tt = 0.; - - // makePseudoData(metBin,"ttbar", ttbar_Vec_Exp, ttbar_Vec, ttbar_err_Vec,Nttbar, delta_JES, delta_qscale_tt ); - // makePseudoData(metBin,"SinglT", SinglT_Vec_Exp, SinglT_Vec, SinglT_err_Vec,NSinglT, delta_JES, delta_qscale_tt ); - // makePseudoData(metBin,"wjets", wjets_Vec_Exp, wjets_Vec, wjets_err_Vec,Nwjets, delta_JES, delta_qscale); - // makePseudoData(metBin,"zjets", zjets_Vec_Exp, zjets_Vec, zjets_err_Vec,Nzjets, delta_JES, delta_qscale); - // makePseudoData(metBin,"qcd", qcd_Vec_Exp, qcd_Vec, qcd_err_Vec,NQCD, NQCD_Exp, NQCD_Exp); - - //allPseudoData(data_Vec, ttbar_Vec_Exp, SinglT_Vec_Exp, wjets_Vec_Exp, zjets_Vec_Exp, qcd_Vec_Exp); - -sig_Vec_Exp.erase(sig_Vec_Exp.begin(),sig_Vec_Exp.end()); -wjets_Vec_Exp.erase(wjets_Vec_Exp.begin(),wjets_Vec_Exp.end()); -zjets_Vec_Exp.erase(zjets_Vec_Exp.begin(),zjets_Vec_Exp.end()); -qcd_Vec_Exp.erase(qcd_Vec_Exp.begin(),qcd_Vec_Exp.end()); - -TRandom3* rand = new TRandom3(0); - - for(int i = 0; i < nbins; i++){ - sig_Vec_Exp.push_back(rand->Gaus(sig_Vec[i], sig_err_Vec[i])); - - wjets_Vec_Exp.push_back(rand->Gaus(wjets_Vec[i], wjets_err_Vec[i])); - - zjets_Vec_Exp.push_back(rand->Gaus(zjets_Vec[i], zjets_err_Vec[i])); - - qcd_Vec_Exp.push_back(rand->Gaus(qcd_Vec[i], qcd_err_Vec[i])); - - //std::cout << sig_Vec_Exp[i] << " , " ; - - } - - // Initialize minuit, set initial values etc. of parameters. - const int npar = 4; // the number of parameters - TMinuit minuit(npar); - minuit.SetFCN(fcn); - - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - int ierflg = 0; - string parName[npar] = {"ttbar+single-top", "wjets", "zjets", "qcd"}; //background parameters - double par[npar] = {Nsignal, Nwjets, Nzjets, NQCD}; //using the MC estimation as the start values 1fb - - //cout << "total data events: " << Ntotal << endl; - - - for(int i=0; iFill(beta); - his_pull->Fill(pull); - his_result->Fill(xs_fit); - } - -} - -//draw histograms - - TCanvas* cBetaFit = new TCanvas("cBetaFit", "cBetaFit", 10,10,800,600); - cBetaFit->cd(); - //his_beta_fit->Fit("gaus","L"); - //TF1* fitFunction = his_beta_fit->GetFunction("gaus"); - //fitFunction->SetLineWidth(2); - his_beta_fit->Scale(1./his_beta_fit->Integral()); - his_beta_fit->GetXaxis()->SetTitle("#sigma_{fit}/#sigma_{theory}"); - //his_beta_fit->SetAxisRange(1.,1.2) ; - his_beta_fit->Draw(); - - TCanvas* cPull = new TCanvas("cPull", "cPull", 10,10,800,600); - cPull->cd(); - //his_pull->Fit("gaus","L"); - //TF1* fitFunction2 = his_pull->GetFunction("gaus"); - //fitFunction2->SetLineWidth(2); - his_pull->Scale(1./his_pull->Integral()); - his_pull->GetXaxis()->SetTitle("#sigma_{fit}-#sigma_{theory}/#Delta#sigma"); - his_pull->Draw(); - //his_result->SetAxisRange(0.75*his_result->GetMaximum(), 1.25*his_result->GetMaximum() ; - - TCanvas* cRes = new TCanvas("cRes", "cRes", 10,10,800,600); - cRes->cd(); - //his_pull->Fit("gaus","L"); - //TF1* fitFunction2 = his_pull->GetFunction("gaus"); - //fitFunction2->SetLineWidth(2); - his_result->Scale(1./his_result->Integral()); - his_result->GetXaxis()->SetTitle("#sigma_{fit} (pb)"); - his_result->Draw(); - his_result->SetAxisRange(0.5*his_result->GetMean(), 1.5*his_result->GetMean()) ; - - - cBetaFit->SaveAs("notePlots/xbeta_stat"+number+".pdf"); - cBetaFit->SaveAs("notePlots/xbeta_stat"+number+".png"); - cBetaFit->SaveAs("notePlots/xbeta_stat"+number+".eps"); - - cPull->SaveAs("notePlots/xpull_stat"+number+".pdf"); - cPull->SaveAs("notePlots/xpull_stat"+number+".eps"); - cPull->SaveAs("notePlots/xpull_stat"+number+".png"); - - cRes->SaveAs("notePlots/xres_stat"+number+".pdf"); - cRes->SaveAs("notePlots/xres_stat"+number+".eps"); - cRes->SaveAs("notePlots/xres_stat"+number+".png"); - - - // compute the results, you can either use the following code, or use a Guassian to fit his_beta_fit, as nexp is very large here, then his_beta_fit is normally distributed !!!!! but we will find the resutls are the same :D - - double sum=0; - double m2s=-100000.; - double m1s=-100000.; - double cent=-100000.; - double p1s=-100000.; - double p2s=-100000.; - - for(int i=1; iGetNbinsX(); ++i) { - - sum += his_beta_fit->GetBinContent(i); - if(sum > 0.023) { // hit the -2sigam - if(m2s < -10000.) m2s=his_beta_fit->GetBinCenter(i); - if(sum > 0.159) { - if(m1s < -10000.) m1s=his_beta_fit->GetBinCenter(i); - if(sum > 0.5) { - if(cent < -10000.) cent=his_beta_fit->GetBinCenter(i); - if(sum > 0.841) { - if(p1s < -10000.) p1s=his_beta_fit->GetBinCenter(i); - if(sum > 0.977) { - if(p2s < -10000.) p2s=his_beta_fit->GetBinCenter(i); - } - } - } - } - } - } - - std::cout<<" FINAL RESULT:"<Get("metEta_h_"+jet_num+"data"); - - -// TFile* output = TFile::Open("muData.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// h_data->SetName("muData"); -// h_data->Write(); - - - - nbins = h_data->GetNbinsX(); - xmax = xmin + nxbins*(h_data->GetBinWidth(1)); - - //cout<<"num of bins: "<GetBinContent(ibin+1) << "," << h_data->GetBinError(ibin+1) << "}, "; - int nn = h_data->GetBinContent(ibin+1); - - data_Vec.push_back(nn); - - Ntotal += nn; - - } - //std::cout<< "}" << std::endl; - // cout <<" \n Total number of events before the fit" << endl; - //cout <<" Data: \t "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+templ); - - - nbins = his_mc_array->GetNbinsX(); - - //std::cout<<"test: "<Integral()<Scale(1./his_mc_array->Integral()); - //std::cout<<"test: "<GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - //std::cout << "{" << his_mc_array->GetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - } - //std::cout<< "}" << std::endl; - -} - - -void getSignalFromHis(TFile* inputFile, TString& jet_num, int& nxbins, vector& vect, vector& vect_err){ - - - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"signal"); - his_mc_array->Scale(1./his_mc_array->Integral()); - - - - -// TFile* output = TFile::Open("signal.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// his_mc_array->SetName("SignalTemplate"); -// his_mc_array->Write(); - - //std::cout << ": {" << std::endl; - for(int ibin=0; ibinGetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - vect.push_back(his_mc_array->GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - } - //std::cout<< "}" << std::endl; -} - -//------------------------------------------------------------------------- -//pseudodata -void makePseudoData(int metBin, TString sample,vector& vect_exp, vector& vect, vector& vect_err,double Nin, double jes, double q2){ -TRandom3* rng = new TRandom3(0); - - vect_exp.erase(vect_exp.begin(),vect_exp.end()); - - - -double errJES =0.; -double delta_Q2 = 0.; -// turn off single t and lumi error here -double errSinglT = 1.; -//errSinglT = 1.+rng->Gaus(0., 0.3); -double errLumi = 1.; -//errLumi = 1.+rng->Gaus(0., 0.022); - -if(sample == "ttbar" ||sample == "SinglT" ){ -errJES=sigJES[metBin-1]; -delta_Q2 = sigQ2[metBin-1]*q2 + 1.0; - -} - -if(sample == "wjets"){ -errJES=wJES[metBin-1]; -delta_Q2 = TMath::Exp(wQ2A[metBin-1]+wQ2B[metBin-1]*q2); -} - - -if(sample == "zjets"){ -errJES=zJES[metBin-1]; -delta_Q2 = TMath::Exp(zQ2A[metBin-1]+zQ2B[metBin-1]*q2); - -} - - - double delta_JES = errJES*jes + 1.0; - - - //std::cout << sample << " : "; - -//readin vector - for(int i=0; iGaus(vect_exp[i], vect_err[i]); - vect_exp[i] = thisval; - if(thisval > 0.) - vect_exp[i] = vect_exp[i]*Nin; - else - vect_exp[i] = 0.000; - }else{ - vect_exp[i] = vect_exp[i]*Nin*delta_JES*delta_Q2; - } - - //fluctuate around stat error comment out line below to turn off - //vect_exp[i] = rng->Poisson(vect_exp[i]); - //std::cout << vect_exp[i] << " ," ; - vect_exp[i] = vect_exp[i]*errLumi; - - tot_pois += vect_exp[i]; - } -//std::cout << " " << std::endl; -//std::cout << "apres: " << tot_pois << std::endl; - - -} - -void allPseudoData(vector& vect_data, vector& vect_tt, vector& vect_singl, vector& vect_w,vector& vect_z,vector& vect_qcd){ -//std::cout << "data: " << std::endl; - for(int i=0; i0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - //cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - //double r = nwjets/nzjets; - //double r_err = r*0.01; - - //f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - //Wjets constrain -// f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -// //Zjets constrain -// f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -// //QCD constrain -// f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - //Ratio Constrain - //f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); //chi4? - - - //ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); //swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -TText* doPrelim(float luminosity, float x, float y) -{ - std::ostringstream stream; - stream <<"CMS Preliminary, L = " << luminosity << " pb^{-1}"; //stream <<"CMS Preliminary, L = " << lumi << " pb^{-1} at #sqrt{7} TeV"; - TLatex* text = new TLatex(x, y, stream.str().c_str()); - - text->SetNDC(true); - text->SetTextFont(62); - text->SetTextSize(0.04); - return text; -} diff --git a/scripts/forLuke/systematicFits.cc b/scripts/forLuke/systematicFits.cc deleted file mode 100644 index 3cb62831..00000000 --- a/scripts/forLuke/systematicFits.cc +++ /dev/null @@ -1,808 +0,0 @@ -/*A C++ program to use of ROOT class TMinuit for function minimization.It shows a Maximum Likelihood fit for the mean of a binned Poisson pdf in which TMinuit minimizes - - 2*log(L). fcn passes back f = -2*ln L by reference; this is the function to minimize. - - The factor of -2 allows MINUIT to get the errors using the same recipe as for least squares, i.e., go up from the minimum by 1. - - TMinuit does not allow fcn to be a member function, and the function arguments are fixed, so the one of the only ways to bring the data into fcn is to declare a poi -nter to the data (xVecPtr) as global. - - For more info on TMinuit see root.cern.ch/root/html/TMinuit.html . - -*/ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "TLatex.h" -#include "TText.h" -#include "TLegend.h" -#include "TFile.h" -#include "TGraphAsymmErrors.h" - -#include "tdrstyle.C" - -using namespace std; -// Declare pointer to data as global (not elegant but TMinuit needs this). -vector data_Vec; //input data - -vector ttbar_Vec; //ttbar+single top template from mc -vector wjets_Vec; //wjest template from data driven method -vector zjets_Vec; //zjets template from data driven method -vector qcd_Vec; //qcd template from data drive method - -vector ttbar_err_Vec; -vector wjets_err_Vec; //wjest template from data driven method -vector zjets_err_Vec; //zjets template from data driven method -vector qcd_err_Vec; //qcd template from data drive method - - -int Ntotal; //define as global, got in getDataFromHis function -int nbins; //define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function - -//double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -double xmin = 0; -double xmax; //calculate in getDataFromHis function - -void fcn(int& npar, double* deriv, double& f, double par[], int flag); -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins); -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst, int& nxbins, vector& vect, vector& vect_err); -void getTemFromHis(TFile* inputFile, TString& templ, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); - - -TText* doPrelim(float luminosity, float x, float y); - -//double lumi = 964.6; -//double lumi = 987.2; -double lumi = 4973.4; - - double Nsignal; - double Nwjets; - double Nzjets; - double NQCD; - double NSinglT; - double Nttbar; - double NtotPass; - double NttbarUp; - double NtotPassUp; - double NttbarDown; - double NtotPassDown; - - double NttbarUpMat; - double NtotPassUpMat; - double NttbarDownMat; - double NtotPassDownMat; - - double NttbarNLO; - double NtotPassNLO; - double NttbarPOW; - double NtotPassPOW; - -//------------------------------------------------------------------------- - -int systematicFits() { -setTDRStyle(); - - - - // Choose the jet multiplicity - TString jet_num = "2b_"; - TString jet_num_temp = "ge2j"; - - TString metBin[5] = {"1","2","3","4","5"}; - -//choose what to use -TString templ = "_central"; - - - //differential histo - double xbins[6]= {1,25,45,70,100,150}; - //histograms for comaprison - //diff generators - TH1D *theor = new TH1D("theor", "", 5, xbins); - TH1D *nlo = new TH1D("nlo", "", 5, xbins); - TH1D *powheg = new TH1D("powheg", "", 5, xbins); - //syst samples - TH1D *sysup = new TH1D("sysup", "", 5, xbins); - TH1D *sysdown = new TH1D("sysdown", "", 5, xbins); - TH1D *mup = new TH1D("mup", "", 5, xbins); - TH1D *mdown = new TH1D("mdown", "", 5, xbins); - //measured - TH1D *measured = new TH1D("meas", "", 5, xbins); //muon - TH1D *ele = new TH1D("ele", "", 5, xbins); - TH1D *comb = new TH1D("comb", "", 5, xbins); - //compare histo - TH1D *nominal = new TH1D("nominal", "", 5, xbins); - - //theroy onn ttbar only due to stats (need to also change the string for w/z) - TString syst[4] = {"_qup","_qdown","_mup","_mdown"}; - - //TString syst[8] = {"_jup","_jdown","_METup","_METdown","_pup","_pdown","_bup","_bdown"}; - - -for(int sysErr = 0; sysErr < 4; sysErr++){ - -std::cout << syst[sysErr] << std::endl; - -//asymerrors - int n = 5; - double x[n]; - double y[n]; - double exl[n]; - double exh[n]; - -double theorNum = 0; -double nloNum = 0; -double powhegNum = 0; - -//syst -double upNum = 0; -double downNum = 0; -double mupNum = 0; -double mdownNum = 0; - -double theorXsect = 157.5; -double totXsect = 0; - for(int met = 0; met<5; met++){ - //for systematics - TFile* f_central = TFile::Open("PFhistosForFitting_met"+metBin[met]+templ+".root"); - TFile* f_all = TFile::Open("PFhistosForFitting_metall"+templ+".root"); - TFile* f_templates = TFile::Open("QCDetaData.root"); - - TH1D* signal = (TH1D*) f_central->Get("metEta_h_"+jet_num+"signal"); - TH1D* wjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"); - TH1D* zjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"); - TH1D* SinglT = (TH1D*) f_central->Get("metEta_h_"+jet_num+"SinglT"); - TH1D* ttbar = (TH1D*) f_central->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* QCD = (TH1D*) f_central->Get("metEta_h_"+jet_num+"QCD"); - TH1D* tt_Z = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_Z"); - TH1D* tt_W = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_W"); - TH1D* DATA = (TH1D*) f_central->Get("metEta_h_"+jet_num+"data"); - TH1D* QCData = (TH1D*) f_templates->Get("metEta_h_"+jet_num_temp); - - TH1D* ttbarAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* tt_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt"+syst[sysErr]); - //TH1D* wjets_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"+syst[sysErr]); - //TH1D* zjets_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"+syst[sysErr]); - - //for other gens - TH1D* ttbar_nlo = (TH1D*) f_central->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powheg = (TH1D*) f_central->Get("metEta_h_"+jet_num+"powheg"); - TH1D* ttbar_nloAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powhegAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"powheg"); - - //for sys up/down - - TH1D* ttbar_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbar_sysdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qdown"); - TH1D* ttbarUpAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbarDownAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qdown"); - - TH1D* ttbar_mup = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbar_mdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mdown"); - TH1D* ttbarUpAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbarDownAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mdown"); - - //Choose rebin factor... -int rebinF = 8; -// if(met==4){ -// rebinF=4; -// } - - - ttbar_sys->Rebin(rebinF); - - //tt_sys->Rebin(rebinF); - //wjets_sys->Rebin(rebinF); - //zjets_sys->Rebin(rebinF); - - ttbar_sysdown->Rebin(rebinF); - - ttbar_mup->Rebin(rebinF); - ttbar_mdown->Rebin(rebinF); - - ttbar_nlo->Rebin(rebinF); - ttbar_powheg->Rebin(rebinF); - - - signal->Rebin(rebinF); - wjets->Rebin(rebinF); - zjets->Rebin(rebinF); - QCD->Rebin(rebinF); - SinglT->Rebin(rebinF); - ttbar->Rebin(rebinF); - tt_Z->Rebin(rebinF); - tt_W->Rebin(rebinF); - DATA->Rebin(rebinF); - QCData->Rebin(rebinF/2); - - -// cout << "input params: " << endl; - //systematic samples - NttbarUp = ttbar_sys->Integral(); - NtotPassUp = ttbarUpAll->Integral(); - NttbarDown = ttbar_sysdown->Integral(); - NtotPassDown = ttbarDownAll->Integral(); - NttbarUpMat = ttbar_mup->Integral(); - NtotPassUpMat = ttbarUpAllMat->Integral(); - NttbarDownMat = ttbar_mdown->Integral(); - NtotPassDownMat = ttbarDownAllMat->Integral(); - - NttbarNLO = ttbar_nlo->Integral(); - NtotPassNLO = ttbar_nloAll->Integral(); - NttbarPOW = ttbar_powheg->Integral(); - NtotPassPOW = ttbar_powhegAll->Integral(); - - Nsignal = signal->Integral(); - Nwjets = wjets->Integral(); - Nzjets = zjets->Integral(); - NQCD = QCD->Integral(); - NSinglT = SinglT->Integral(); - Nttbar = ttbar->Integral(); - NtotPass = ttbarAll->Integral(); - - -double Ntt_Z =tt_Z->Integral(); -double Ntt_W =tt_W->Integral(); -double tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; -double Ndata = DATA->Integral(); -// cout << "all tt: " << NtotPass << endl; -// cout << "signal: " << Nsignal << endl; -// cout << "wjets: " << Nwjets<< endl; -// cout << "zjets: " << Nzjets << endl; -// cout << "qcd: " << NQCD << endl; - - //TString wstring = "wjets"+syst[sysErr]; - //TString zstring = "zjets"+syst[sysErr]; - TString wstring = "wjets"; - TString zstring = "zjets"; - TString qcdstring = ""; - - - // Read in the data and templates. - getDataFromHis(f_central, jet_num, nbins); // Get data histrogram form central selection - getSignalFromHis(f_central, jet_num, syst[sysErr], nbins, ttbar_Vec, ttbar_err_Vec);// Get ttbar, single-top histrograms form MC with entral selection - - getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); - getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); - getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); - - f_central->Close(); - f_templates->Close(); - - // Initialize minuit, set initial values etc. of parameters. - const int npar = 4; // the number of parameters - TMinuit minuit(npar); - minuit.SetFCN(fcn); - - //minuit.SetPrintLevel(1); - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - double fraction= NSinglT/Nsignal; - - int ierflg = 0; - string parName[npar] = {"ttbar+single-top", "wjets", "zjets", "qcd"}; //background parameters - double par[npar] = {Nsignal, Nwjets, Nzjets, NQCD}; //using the MC estimation as the start values 1fb - - //cout << "total data events: " << Ntotal << endl; - - for(int i=0; iGetBinWidth(met+1); - -measured->SetBinContent(met+1,xs_fit/width); -measured->SetBinError(met+1,(xs_fitup-xs_fit)/width); - -nlo->SetBinContent(met+1,nloNum/157.5/width); -powheg->SetBinContent(met+1,powhegNum/157.5/width); -theor->SetBinContent(met+1, (theorNum/157.5/width)); - -sysup->SetBinContent(met+1, (upNum/157.5/width)); -sysdown->SetBinContent(met+1, (downNum/157.5/width)); -mup->SetBinContent(met+1, (mupNum/157.5/width)); -mdown->SetBinContent(met+1, (mdownNum/157.5/width)); - - -x[met] = measured->GetBinCenter(met+1); -y[met] = xs_fit/width; -//exl[met] = measured->GetBinWidth(met+1)/2.; -//exh[met] = measured->GetBinWidth(met+1)/2.; -exl[met] = 0.; -exh[met] = 0.; -} //end of met loop - -//uncertainties***************************************************************************** -double tempStat[5] = {1.806/25./157.5, 1.888/20./157.5, 2.051/25./157.5, 1.072/30./157.5, 1.215/50./157.5}; - -double JESup[5] = {-0.000151962 , 0.000272578 , -4.23099e-05 , -3.70002e-05 , 7.25276e-06}; -double JESdown[5] = {-8.05871e-05 , -0.000135049 , -5.47969e-05 , -1.05896e-05 , 0.000126441}; - -double Qallup[5] = {0.000661542 , -0.00164854 , 0.0015185 , -0.000777495 , 4.91053e-05}; -double Qalldown[5] = {0.000976746 , -0.00126681 , 9.94392e-06 , -0.000330413 , 0.000231151}; - -double Mallup[5] = {0.00107054 , -0.00175803 , 0.000500762 , -0.000368955 , 0.000160332}; -double Malldown[5] = {0.00054994 , -0.000711093 , 0.000512741 , -0.000469302 , 4.56639e-05}; - -double singletD[5] = {3.79915e-06 , -1.64281e-05 , 1.61034e-05 , -1.38118e-05 , 4.97002e-06}; -double singletU[5] = {-3.95387e-06 , 1.7004e-05 , -1.67224e-05 , 1.4347e-05 , -5.16378e-06 }; - -double lumiD[5] = {-5.15494e-06 , -2.72603e-06 , -5.41703e-06 , 2.85952e-06 , 4.54458e-06}; -double lumiU[5] = {7.62411e-06 , -3.49747e-06 , 3.93426e-06 , -6.09136e-06 , -5.85902e-07}; - -double pdf[5] = {2.71e-05 , 3.66e-05 , 1.28e-05 , 1.33e-05 , 1.03e-05}; - -double METup[5] = {0.000177 , -0.000654 , 0.000105 , 1.24e-05 , 0.000117}; -double METdown[5] = {2.12e-05 , 0.000176 , 0.00031 , -0.000145 , -0.000149}; - -double stat[5] = {0.000370122 , 0.000482173 , 0.000393533 , 0.000199431 , 0.000133263}; - -double up[5], down[5]; - -for(int bin = 0; bin < 5; bin++ ){ -down[bin] = sqrt(pow(JESdown[bin],2)+pow(Qalldown[bin],2)+pow(Malldown[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METdown[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); -up[bin] = sqrt(pow(JESup[bin],2)+pow(Qallup[bin],2)+pow(Mallup[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METup[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); -y[bin] = y[bin]/totXsect; - -} - -//electron values for >=2btags - double eleres[5] = {0.01*0.70, 0.01*1.25, 0.01*1.08, 0.01*0.56, 0.01*0.27}; - double eleyl[5] = {sqrt(pow(0.01*0.12,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.19,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.05,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.01 ,2))}; - double eleyh[5] = {sqrt(pow(0.01*0.04,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.37,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.07,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.01 ,2))}; -//electron values for geq to 4jets -// double eleres[5] = {0.01*0.39, 0.01*0.99, 0.01*1.25, 0.01*0.73, 0.01*0.35}; -// double eleyl[5] = {sqrt(pow(0.01*0.51,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.10,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.40,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.39,2)),sqrt(pow(0.01*0.17,2)+pow(0.01*0.02 ,2))}; -// double eleyh[5] = {sqrt(pow(0.01*0.76,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.63,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.24,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.12,2)),sqrt(pow(0.01*0.08,2)+pow(0.01*0.02 ,2))}; - - //electron values******************************************************************** -TGraphAsymmErrors* grele = new TGraphAsymmErrors(n,x,eleres,exl,exh,eleyl,eleyh); - grele->SetMarkerStyle(20); - grele->SetMarkerColor(4); - grele->SetLineColor(4); - grele->SetMarkerStyle(26); - - for(int bin = 0; bin < 5; bin++){ - ele->SetBinContent(bin+1,eleres[bin]); - ele->SetBinError(bin+1,0.000001); - } - - ele->SetMarkerStyle(20); - ele->SetMarkerColor(4); - ele->SetLineColor(4); - - //muon values************************************************************************* - double eyl[5] = {down[0],down[1],down[2],down[3],down[4]}; - double eyh[5] = {up[0],up[1],up[2],up[3],up[4]}; - TGraphAsymmErrors* gr = new TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh); - gr->SetMarkerColor(1); - gr->SetMarkerStyle(20); - gr->SetFillStyle(3004); - - - TCanvas *c= new TCanvas("c","c",10,10,800,600); - - - -measured->SetMarkerStyle(20); -measured->Scale(1./ totXsect); -//std::cout << "total measured x sect: " << totXsect << std::endl; - -//cout.precision(3); -//std::cout << "temp stat: " << std::endl; -//for(int i = 0; i<5; i++){ -//std::cout << tempStat[i] << "(" << (tempStat[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -//} - - //central previous vals no trigs - double central[5] = {0.00609465 , 0.0145213 , 0.0116628 , 0.00549336 , 0.00213862}; - -//std::cout << (measured->GetBinError(1)/y[0])*100 << " , " << (measured->GetBinError(2)/y[1])*100 << " , " << (measured->GetBinError(3)/y[2])*100 << " , " << (measured->GetBinError(4)/y[3])*100 << " , " << (measured->GetBinError(5)/y[4])*100 << std::endl; - - //uncertaint write out for muon -// std::cout << "tot up: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << up[i] << "(" << (up[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } -// std::cout << "tot down: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << down[i] << "(" << (down[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } - - -//Combination!!!********************************************************************************* -//std::cout << " combined vals: " << std::endl; -//combination stuff -double val[5]; double combUp[5]; double combDown[5]; -for(int i = 0; i<5; i++){ -double valnum = (measured->GetBinContent(i+1)/pow(up[i],2))+(measured->GetBinContent(i+1)/pow(down[i],2))+(eleres[i]/pow(eleyh[i],2))+(eleres[i]/pow(eleyl[i],2)); -double den = (1./pow(up[i],2))+(1./pow(down[i],2))+(1./pow(eleyh[i],2))+(1./pow(eleyl[i],2)); -val[i] = valnum/den; - -combUp[i] = sqrt(1./(1./pow(up[i],2)+pow(eleyh[i],2))); -combDown[i] = sqrt(1./(1./pow(down[i],2)+pow(eleyl[i],2))); - -//std::cout << val[i] << " , " ; -comb->SetBinContent(i+1, val[i]); -comb->SetBinError(i+1, 0.00000000001); -} - -TGraphAsymmErrors* grcomb = new TGraphAsymmErrors(n,x,val,exl,exh,combDown,combUp); - grcomb->SetMarkerStyle(20); - grcomb->SetMarkerColor(7); - grcomb->SetLineColor(7); - grcomb->SetMarkerStyle(20); - - comb->SetMarkerStyle(20); - comb->SetMarkerColor(7); - comb->SetLineColor(7); - -//show nominal calculated values -for(int i =1; i < 6; i++){ -nominal->SetBinContent(i,central[i-1]); - } - - - //plot colors - theor->SetLineColor(kRed+1); - sysup->SetLineColor(kOrange+1); - sysdown->SetLineColor(kGreen+1); - mup->SetLineColor(kBlue+1); - mdown->SetLineColor(kYellow+1); - //theor->SetFillColor(kRed+1); - nominal->SetLineColor(kBlue+1); - - sysup->SetLineStyle(7); - sysdown->SetLineStyle(7); - mup->SetLineStyle(7); - mdown->SetLineStyle(7); - - nlo->SetLineStyle(7); - powheg->SetLineStyle(7); - nlo->SetLineColor(kBlue+1); - powheg->SetLineColor(kGreen+1); - -theor->SetMinimum(0); -theor->SetMaximum(0.02); - - -theor->Draw(); -//nominal->Draw("same"); -//measured->Draw("Esame"); -//ele->Draw("Esame"); -gr->Draw("P"); -//ele and combined -//grele->Draw("Esame"); -//comb->Draw("Esame"); -//grcomb->Draw("Esame"); - -nominal->Draw("same"); - -//systs -// sysup->Draw("same"); -// sysdown->Draw("same"); -// mup->Draw("same"); -// mdown->Draw("same"); - -//gens -//nlo->Draw("same"); -//powheg->Draw("same"); - -//too see effect of an uncertainty for input of uncertainty - -//cout.precision(4); -//too see effect of an uncertainty - -//std::cout << " output: " << std::endl; -for(int bin = 1; bin<=5; bin++){ - //std::cout << 100*(measured->GetBinContent(bin)-nominal->GetBinContent(bin))/measured->GetBinContent(bin) << "\\\% & " ; - //for table (later) - std::cout << (measured->GetBinContent(bin)-nominal->GetBinContent(bin)) << " , " ; - - -} - -std::cout << totXsect << std::endl; - -//legend - TLegend *tleg; - tleg = new TLegend(0.65,0.75,0.9,0.9); - tleg->SetTextSize(0.03); - tleg->SetBorderSize(0); - tleg->SetFillColor(10); - - - tleg->AddEntry(gr , "data '11'" , "lep"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets, #geq 2 btags)" , "lpe"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets)" , "lpe"); -// tleg->AddEntry(comb , "combined" , "lpe"); - - tleg->AddEntry(theor , "t#bar{t} (MADGRAPH)" , "l"); -// tleg->AddEntry(nlo , "t#bar{t} (MC@NLO)" , "l"); -// tleg->AddEntry(powheg , "t#bar{t} (POWHEG)" , "l"); - - //for sys -// tleg->AddEntry(sysup , "t#bar{t} Q^{2} up " , "l"); -// tleg->AddEntry(sysdown , "t#bar{t} Q^{2} down " , "l"); -// tleg->AddEntry(mup , "t#bar{t} matching up " , "l"); -// tleg->AddEntry(mdown , "t#bar{t} matching down " , "l"); -//tleg->AddEntry(nominal , "no trigger corrections" , "l"); - - tleg->Draw("same"); - - - -//titles -theor->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{#partial #sigma}{#partial MET} [GeV^{-1}]");theor->GetYaxis()->SetTitleSize(0.05); -theor->GetXaxis()->SetTitle("MET [GeV]"); theor->GetXaxis()->SetTitleSize(0.05); - - TText* textPrelim = doPrelim(lumi,0.16,0.96); - textPrelim->Draw(); - -//delete c; -} //end sys loop - -//c->SetLogy(1); - -//c->SaveAs("240712plots/eComb.png"); -//c->SaveAs("240712plots/eComb.pdf"); - -return 0; - -} - -//------------------------------------------------------------------------- - -// function to read in the data from a histogram -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins){ - - TH1F *h_data = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"data"); -Ntotal=0; - -// TFile* output = TFile::Open("muData.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// h_data->SetName("muData"); -// h_data->Write(); - - - - nbins = h_data->GetNbinsX(); - - xmax = xmin + nxbins*(h_data->GetBinWidth(1)); - - // cout<<"num of bins: "<GetBinContent(ibin+1); - - data_Vec.push_back(nn); - - Ntotal += nn; - - } - - // cout <<" \n Total number of events before the fit" << endl; - //cout <<" Data: \t "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+templ); - - //std::cout<<"test: "<Integral()<Scale(1./his_mc_array->Integral()); - //std::cout<<"test: "<GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - //std::cout << "{" << his_mc_array->GetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - } - //std::cout<< "}" << std::endl; - -} - - -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst,int& nxbins, vector& vect, vector& vect_err){ - - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"tt"+syst); - TH1F* his_mc_stop = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"SinglT"); - his_mc_array->Add(his_mc_stop); - - his_mc_array->Scale(1./his_mc_array->Integral()); - - - - -// TFile* output = TFile::Open("signal.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// his_mc_array->SetName("SignalTemplate"); -// his_mc_array->Write(); - - - for(int ibin=0; ibinGetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - } - - -} -//------------------------------------------------------------------------- - -// fcn passes back f = - 2*ln(L), the function to be minimized. not sure if N_{single top} is obtained from fitting -void fcn(int& npar, double* deriv, double& f, double par[], int flag){ - - double lnL = 0.0; - - - for (int i=0; i0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - //cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - //double r = nwjets/nzjets; - //double r_err = r*0.01; - - //f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - //Wjets constrain -// f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -// //Zjets constrain -// f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -// //QCD constrain -// f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - //Ratio Constrain - //f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); //chi4? - - - //ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); //swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -TText* doPrelim(float luminosity, float x, float y) -{ - std::ostringstream stream; - stream <<"#mu, #geq 4 jets, #geq 2 b-tags CMS Preliminary, L = 5.0 fb^{-1} @ #sqrt{s} = 7 TeV"; - - TLatex* text = new TLatex(x, y, stream.str().c_str()); - //text->SetTextAlign(33); //left - //text->SetTextAlign(22); //center - //text->SetTextAlign(11); //right -text->SetNDC(true); -text->SetTextFont(42); -text->SetTextSize(0.035); // for thesis - - return text; -} diff --git a/scripts/forLuke/systematicFits.py b/scripts/forLuke/systematicFits.py deleted file mode 100644 index 3beb5cec..00000000 --- a/scripts/forLuke/systematicFits.py +++ /dev/null @@ -1,722 +0,0 @@ -from tdrStyle import setTDRStyle -from ROOT import * -# Declare pointer to data as global (not elegant but TMinuit needs this). -data_Vec = []; #input data - -ttbar_Vec = []; #ttbar+single top template from mc -wjets_Vec = []; #wjest template from data driven method -zjets_Vec = []; #zjets template from data driven method -qcd_Vec = []; #qcd template from data drive method - -ttbar_err_Vec = []; -wjets_err_Vec = []; #wjest template from data driven method -zjets_err_Vec = []; #zjets template from data driven method -qcd_err_Vec = []; #qcd template from data drive method - - -Ntotal = 0 #define as global, got in getDataFromHis function -nbins=0 #define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function - -#double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -xmin = 0; -xmax = 0; #calculate in getDataFromHis function - - -lumi = 4973.4; - -Nsignal = 0; -Nwjets = 0 -Nzjets = 0 -NQCD = 0 -NSinglT = 0 -Nttbar = 0 -NtotPass = 0 -NttbarUp = 0 -NtotPassUp = 0 -NttbarDown = 0 -NtotPassDown = 0 - -NttbarUpMat = 0 -NtotPassUpMat = 0 -NttbarDownMat = 0 -NtotPassDownMat = 0 - -NttbarNLO = 0 -NtotPassNLO = 0 -NttbarPOW = 0 -NtotPassPOW = 0 - -#------------------------------------------------------------------------- - -def systematicFits(): - setTDRStyle(); - - - - # Choose the jet multiplicity - jet_num = "2b_"; - jet_num_temp = "ge2j"; - - metBin = ["1","2","3","4","5"] - - templ = "_central"; - - - #differential histo - xbins = [1,25,45,70,100,150] - #histograms for comaprison - #diff generators - theor = TH1D("theor", "", 5, xbins); - nlo = TH1D("nlo", "", 5, xbins); - powheg = TH1D("powheg", "", 5, xbins); - #syst samples - sysup = TH1D("sysup", "", 5, xbins); - sysdown = TH1D("sysdown", "", 5, xbins); - mup = TH1D("mup", "", 5, xbins); - mdown = TH1D("mdown", "", 5, xbins); - #measured - measured = TH1D("meas", "", 5, xbins); #muon - ele = TH1D("ele", "", 5, xbins); - comb = TH1D("comb", "", 5, xbins); - #compare histo - nominal = TH1D("nominal", "", 5, xbins); - - #theroy onn ttbar only due to stats (need to also change the string for w/z) - syst = ["_qup","_qdown","_mup","_mdown"] - - #syst[8] = {"_jup","_jdown","_METup","_METdown","_pup","_pdown","_bup","_bdown"}; - - - for sysErr in range(0,4): - print syst[sysErr] - - #asymerrors - n = 5; - x = [0]*n; - y = [0]*n; - exl = [0]*n; - exh = [0]*n; - - theorNum = 0; - nloNum = 0; - powhegNum = 0; - - #syst - upNum = 0; - downNum = 0; - mupNum = 0; - mdownNum = 0; - - theorXsect = 157.5; - totXsect = 0; - for met in range(0,5): - #for systematics - f_central = TFile.Open("PFhistosForFitting_met"+metBin[met]+templ+".root"); - f_all = TFile.Open("PFhistosForFitting_metall"+templ+".root"); - f_templates = TFile.Open("QCDetaData.root"); - - signal = f_central.Get("metEta_h_"+jet_num+"signal"); - wjets = f_central.Get("metEta_h_"+jet_num+"wjets"); - zjets = f_central.Get("metEta_h_"+jet_num+"zjets"); - SinglT = f_central.Get("metEta_h_"+jet_num+"SinglT"); - ttbar = f_central.Get("metEta_h_"+jet_num+"ttbar"); - - QCD = f_central.Get("metEta_h_"+jet_num+"QCD"); - tt_Z = f_central.Get("metEta_h_"+jet_num+"tt_Z"); - tt_W = f_central.Get("metEta_h_"+jet_num+"tt_W"); - DATA = f_central.Get("metEta_h_"+jet_num+"data"); - QCData = f_templates.Get("metEta_h_"+jet_num_temp); - - ttbarAll = f_all.Get("metEta_h_"+jet_num+"ttbar"); - - tt_sys = f_central.Get("metEta_h_"+jet_num+"tt"+syst[sysErr]); - #wjets_sys = f_central.Get("metEta_h_"+jet_num+"wjets"+syst[sysErr]); - #zjets_sys = f_central.Get("metEta_h_"+jet_num+"zjets"+syst[sysErr]); - - #for other gens - ttbar_nlo = f_central.Get("metEta_h_"+jet_num+"nlo"); - ttbar_powheg = f_central.Get("metEta_h_"+jet_num+"powheg"); - ttbar_nloAll = f_all.Get("metEta_h_"+jet_num+"nlo"); - ttbar_powhegAll = f_all.Get("metEta_h_"+jet_num+"powheg"); - - #for sys up/down - - ttbar_sys = f_central.Get("metEta_h_"+jet_num+"tt_qup"); - ttbar_sysdown = f_central.Get("metEta_h_"+jet_num+"tt_qdown"); - ttbarUpAll = f_all.Get("metEta_h_"+jet_num+"tt_qup"); - ttbarDownAll = f_all.Get("metEta_h_"+jet_num+"tt_qdown"); - - ttbar_mup = f_central.Get("metEta_h_"+jet_num+"tt_mup"); - ttbar_mdown = f_central.Get("metEta_h_"+jet_num+"tt_mdown"); - ttbarUpAllMat = f_all.Get("metEta_h_"+jet_num+"tt_mup"); - ttbarDownAllMat = f_all.Get("metEta_h_"+jet_num+"tt_mdown"); - - #Choose rebin factor... - rebinF = 8; - - ttbar_sys.Rebin(rebinF); - - #tt_sys.Rebin(rebinF); - #wjets_sys.Rebin(rebinF); - #zjets_sys.Rebin(rebinF); - - ttbar_sysdown.Rebin(rebinF); - ttbar_mup.Rebin(rebinF); - ttbar_mdown.Rebin(rebinF); - - ttbar_nlo.Rebin(rebinF); - ttbar_powheg.Rebin(rebinF); - - - signal.Rebin(rebinF); - wjets.Rebin(rebinF); - zjets.Rebin(rebinF); - QCD.Rebin(rebinF); - SinglT.Rebin(rebinF); - ttbar.Rebin(rebinF); - tt_Z.Rebin(rebinF); - tt_W.Rebin(rebinF); - DATA.Rebin(rebinF); - QCData.Rebin(rebinF/2); - - - NttbarUp = ttbar_sys.Integral(); - NtotPassUp = ttbarUpAll.Integral(); - NttbarDown = ttbar_sysdown.Integral(); - NtotPassDown = ttbarDownAll.Integral(); - NttbarUpMat = ttbar_mup.Integral(); - NtotPassUpMat = ttbarUpAllMat.Integral(); - NttbarDownMat = ttbar_mdown.Integral(); - NtotPassDownMat = ttbarDownAllMat.Integral(); - - NttbarNLO = ttbar_nlo.Integral(); - NtotPassNLO = ttbar_nloAll.Integral(); - NttbarPOW = ttbar_powheg.Integral(); - NtotPassPOW = ttbar_powhegAll.Integral(); - - Nsignal = signal.Integral(); - Nwjets = wjets.Integral(); - Nzjets = zjets.Integral(); - NQCD = QCD.Integral(); - NSinglT = SinglT.Integral(); - Nttbar = ttbar.Integral(); - NtotPass = ttbarAll.Integral(); - - - Ntt_Z =tt_Z.Integral(); - Ntt_W =tt_W.Integral(); - tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; - Ndata = DATA.Integral(); - wstring = "wjets"; - zstring = "zjets"; - qcdstring = ""; - - - # Read in the data and templates. - getDataFromHis(f_central, jet_num, nbins); # Get data histrogram form central selection - getSignalFromHis(f_central, jet_num, syst[sysErr], nbins, ttbar_Vec, ttbar_err_Vec);# Get ttbar, single-top histrograms form MC with entral selection - - getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); - getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); - getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); - - f_central.Close(); - f_templates.Close(); - - # Initialize minuit, set initial values etc. of parameters. - npar = 4; # the number of parameters - minuit = TMinuit(npar); - minuit.SetFCN(fcn); - - #minuit.SetPrintLevel(1); - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - fraction= NSinglT/Nsignal; - - ierflg = 0; - parName = ["ttbar+single-top", "wjets", "zjets", "qcd"] #background parameters - par = [Nsignal, Nwjets, Nzjets, NQCD] #using the MC estimation as the start values 1fb - - for i=0 in range(0,npar): - minuit.mnparm(i, parName[i], par[i], 10., 0, Ntotal, ierflg); - - #the following is copied from Fabian's fitting code to improve minimum, but you can comment it, it won't affect the fitting results. - # 1 standard - # 2 try to improve minimum (slower) - arglist = [0]*10; - arglist[0]=1; - minuit.mnexcm("SET STR",arglist,1,ierflg); - minuit.Migrad(); - - outpar = [0]*npar - err = [0]*npar; - - for i=0 in range(0,npar): - minuit.GetParameter(i,outpar[i],err[i]); - - xs_fit = (outpar[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb - xs_fitup = (outpar[0]+err[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb - xs_fitdown = (outpar[0]-err[0]-NSinglT)/(NtotPass/theorXsect); #=out-Nsing/lumi*Accept Nsing should probs be xsect*Accept... 1fb - - #madgraph - theorNum = (Nttbar)/(NtotPass/theorXsect); - nloNum = (NttbarNLO)/(NtotPassNLO/theorXsect); - powhegNum = (NttbarPOW)/(NtotPassPOW/theorXsect); - - #systematics - upNum = (NttbarUp)/(NtotPassUp/theorXsect); - downNum = (NttbarDown)/(NtotPassDown/theorXsect); - - mupNum = (NttbarUpMat)/(NtotPassUpMat/theorXsect); - mdownNum = (NttbarDownMat)/(NtotPassDownMat/theorXsect); - - - - totXsect += xs_fit; - - data_Vec = [] - ttbar_Vec = [] - wjets_Vec = [] - zjets_Vec = [] - qcd_Vec = [] - - ttbar_err_Vec = [] - wjets_err_Vec = [] - zjets_err_Vec = [] - qcd_err_Vec = [] - - - width = measured.GetBinWidth(met+1); - - measured.SetBinContent(met+1,xs_fit/width); - measured.SetBinError(met+1,(xs_fitup-xs_fit)/width); - - nlo.SetBinContent(met+1,nloNum/157.5/width); - powheg.SetBinContent(met+1,powhegNum/157.5/width); - theor.SetBinContent(met+1, (theorNum/157.5/width)); - - sysup.SetBinContent(met+1, (upNum/157.5/width)); - sysdown.SetBinContent(met+1, (downNum/157.5/width)); - mup.SetBinContent(met+1, (mupNum/157.5/width)); - mdown.SetBinContent(met+1, (mdownNum/157.5/width)); - - - x[met] = measured.GetBinCenter(met+1); - y[met] = xs_fit/width; - #exl[met] = measured.GetBinWidth(met+1)/2.; - #exh[met] = measured.GetBinWidth(met+1)/2.; - exl[met] = 0.; - exh[met] = 0.; - - #uncertainties***************************************************************************** - tempStat = [1.806/25./157.5, 1.888/20./157.5, 2.051/25./157.5, 1.072/30./157.5, 1.215/50./157.5]; - - JESup = [-0.000151962 , 0.000272578 , -4.23099e-05 , -3.70002e-05 , 7.25276e-06]; - JESdown = [-8.05871e-05 , -0.000135049 , -5.47969e-05 , -1.05896e-05 , 0.000126441]; - - Qallup = [0.000661542 , -0.00164854 , 0.0015185 , -0.000777495 , 4.91053e-05]; - Qalldown = [0.000976746 , -0.00126681 , 9.94392e-06 , -0.000330413 , 0.000231151]; - - Mallup = [0.00107054 , -0.00175803 , 0.000500762 , -0.000368955 , 0.000160332]; - Malldown = [0.00054994 , -0.000711093 , 0.000512741 , -0.000469302 , 4.56639e-05]; - - singletD = [3.79915e-06 , -1.64281e-05 , 1.61034e-05 , -1.38118e-05 , 4.97002e-06]; - singletU = [-3.95387e-06 , 1.7004e-05 , -1.67224e-05 , 1.4347e-05 , -5.16378e-06 ]; - - lumiD = [-5.15494e-06 , -2.72603e-06 , -5.41703e-06 , 2.85952e-06 , 4.54458e-06]; - lumiU = [7.62411e-06 , -3.49747e-06 , 3.93426e-06 , -6.09136e-06 , -5.85902e-07]; - - pdf = [2.71e-05 , 3.66e-05 , 1.28e-05 , 1.33e-05 , 1.03e-05]; - - METup = [0.000177 , -0.000654 , 0.000105 , 1.24e-05 , 0.000117]; - METdown = [2.12e-05 , 0.000176 , 0.00031 , -0.000145 , -0.000149]; - - stat = [0.000370122 , 0.000482173 , 0.000393533 , 0.000199431 , 0.000133263]; - - up = [0]*5 - down = [0]*5 - - for bin in range(0,5): - down[bin] = sqrt(pow(JESdown[bin],2)+pow(Qalldown[bin],2)+pow(Malldown[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METdown[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); - up[bin] = sqrt(pow(JESup[bin],2)+pow(Qallup[bin],2)+pow(Mallup[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METup[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); - y[bin] = y[bin]/totXsect; - - #electron values for >=2btags - eleres = [0.01*0.70, 0.01*1.25, 0.01*1.08, 0.01*0.56, 0.01*0.27]; - eleyl = [sqrt(pow(0.01*0.12,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.19,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.05,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.01 ,2))]; - eleyh = [sqrt(pow(0.01*0.04,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.37,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.07,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.01 ,2))]; - #electron values for geq to 4jets - # double eleres[5] = {0.01*0.39, 0.01*0.99, 0.01*1.25, 0.01*0.73, 0.01*0.35}; - # double eleyl[5] = {sqrt(pow(0.01*0.51,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.10,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.40,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.39,2)),sqrt(pow(0.01*0.17,2)+pow(0.01*0.02 ,2))}; - # double eleyh[5] = {sqrt(pow(0.01*0.76,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.63,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.24,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.12,2)),sqrt(pow(0.01*0.08,2)+pow(0.01*0.02 ,2))}; - - #electron values******************************************************************** - grele = TGraphAsymmErrors(n,x,eleres,exl,exh,eleyl,eleyh); - grele.SetMarkerStyle(20); - grele.SetMarkerColor(4); - grele.SetLineColor(4); - grele.SetMarkerStyle(26); - - for bin in range(0,5): - ele.SetBinContent(bin+1,eleres[bin]); - ele.SetBinError(bin+1,0.000001); - - ele.SetMarkerStyle(20); - ele.SetMarkerColor(4); - ele.SetLineColor(4); - - #muon values************************************************************************* - eyl = [down[0],down[1],down[2],down[3],down[4]]; - eyh = [up[0],up[1],up[2],up[3],up[4]]; - gr = TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh); - gr.SetMarkerColor(1); - gr.SetMarkerStyle(20); - gr.SetFillStyle(3004); - - - c= TCanvas("c","c",10,10,800,600); - - - -measured.SetMarkerStyle(20); -measured.Scale(1./ totXsect); -#std::cout << "total measured x sect: " << totXsect << std::endl; - -#cout.precision(3); -#std::cout << "temp stat: " << std::endl; -#for(int i = 0; i<5; i++){ -#std::cout << tempStat[i] << "(" << (tempStat[i]/measured.GetBinContent(i+1))*100 << "\\%)" << " & " ; -#} - - #central previous vals no trigs - double central[5] = {0.00609465 , 0.0145213 , 0.0116628 , 0.00549336 , 0.00213862}; - -#std::cout << (measured.GetBinError(1)/y[0])*100 << " , " << (measured.GetBinError(2)/y[1])*100 << " , " << (measured.GetBinError(3)/y[2])*100 << " , " << (measured.GetBinError(4)/y[3])*100 << " , " << (measured.GetBinError(5)/y[4])*100 << std::endl; - - #uncertaint write out for muon -# std::cout << "tot up: " << std::endl; -# for(int i = 0; i<5; i++){ -# std::cout << up[i] << "(" << (up[i]/measured.GetBinContent(i+1))*100 << "\\%)" << " & " ; -# } -# std::cout << "tot down: " << std::endl; -# for(int i = 0; i<5; i++){ -# std::cout << down[i] << "(" << (down[i]/measured.GetBinContent(i+1))*100 << "\\%)" << " & " ; -# } - - -#Combination!!!********************************************************************************* -#std::cout << " combined vals: " << std::endl; -#combination stuff -double val[5]; double combUp[5]; double combDown[5]; -for(int i = 0; i<5; i++){ -double valnum = (measured.GetBinContent(i+1)/pow(up[i],2))+(measured.GetBinContent(i+1)/pow(down[i],2))+(eleres[i]/pow(eleyh[i],2))+(eleres[i]/pow(eleyl[i],2)); -double den = (1./pow(up[i],2))+(1./pow(down[i],2))+(1./pow(eleyh[i],2))+(1./pow(eleyl[i],2)); -val[i] = valnum/den; - -combUp[i] = sqrt(1./(1./pow(up[i],2)+pow(eleyh[i],2))); -combDown[i] = sqrt(1./(1./pow(down[i],2)+pow(eleyl[i],2))); - -#std::cout << val[i] << " , " ; -comb.SetBinContent(i+1, val[i]); -comb.SetBinError(i+1, 0.00000000001); -} - -TGraphAsymmErrors* grcomb = TGraphAsymmErrors(n,x,val,exl,exh,combDown,combUp); - grcomb.SetMarkerStyle(20); - grcomb.SetMarkerColor(7); - grcomb.SetLineColor(7); - grcomb.SetMarkerStyle(20); - - comb.SetMarkerStyle(20); - comb.SetMarkerColor(7); - comb.SetLineColor(7); - -#show nominal calculated values -for(int i =1; i < 6; i++){ -nominal.SetBinContent(i,central[i-1]); - } - - - #plot colors - theor.SetLineColor(kRed+1); - sysup.SetLineColor(kOrange+1); - sysdown.SetLineColor(kGreen+1); - mup.SetLineColor(kBlue+1); - mdown.SetLineColor(kYellow+1); - #theor.SetFillColor(kRed+1); - nominal.SetLineColor(kBlue+1); - - sysup.SetLineStyle(7); - sysdown.SetLineStyle(7); - mup.SetLineStyle(7); - mdown.SetLineStyle(7); - - nlo.SetLineStyle(7); - powheg.SetLineStyle(7); - nlo.SetLineColor(kBlue+1); - powheg.SetLineColor(kGreen+1); - -theor.SetMinimum(0); -theor.SetMaximum(0.02); - - -theor.Draw(); -#nominal.Draw("same"); -#measured.Draw("Esame"); -#ele.Draw("Esame"); -gr.Draw("P"); -#ele and combined -#grele.Draw("Esame"); -#comb.Draw("Esame"); -#grcomb.Draw("Esame"); - -nominal.Draw("same"); - -#systs -# sysup.Draw("same"); -# sysdown.Draw("same"); -# mup.Draw("same"); -# mdown.Draw("same"); - -#gens -#nlo.Draw("same"); -#powheg.Draw("same"); - -#too see effect of an uncertainty for input of uncertainty - -#cout.precision(4); -#too see effect of an uncertainty - -#std::cout << " output: " << std::endl; -for(int bin = 1; bin<=5; bin++){ - #std::cout << 100*(measured.GetBinContent(bin)-nominal.GetBinContent(bin))/measured.GetBinContent(bin) << "\\\% & " ; - #for table (later) - std::cout << (measured.GetBinContent(bin)-nominal.GetBinContent(bin)) << " , " ; - - -} - -std::cout << totXsect << std::endl; - -#legend - TLegend *tleg; - tleg = TLegend(0.65,0.75,0.9,0.9); - tleg.SetTextSize(0.03); - tleg.SetBorderSize(0); - tleg.SetFillColor(10); - - - tleg.AddEntry(gr , "data '11'" , "lep"); -# tleg.AddEntry(ele , "e+jets (#geq 4 jets, #geq 2 btags)" , "lpe"); -# tleg.AddEntry(ele , "e+jets (#geq 4 jets)" , "lpe"); -# tleg.AddEntry(comb , "combined" , "lpe"); - - tleg.AddEntry(theor , "t#bar{t} (MADGRAPH)" , "l"); -# tleg.AddEntry(nlo , "t#bar{t} (MC@NLO)" , "l"); -# tleg.AddEntry(powheg , "t#bar{t} (POWHEG)" , "l"); - - #for sys -# tleg.AddEntry(sysup , "t#bar{t} Q^{2} up " , "l"); -# tleg.AddEntry(sysdown , "t#bar{t} Q^{2} down " , "l"); -# tleg.AddEntry(mup , "t#bar{t} matching up " , "l"); -# tleg.AddEntry(mdown , "t#bar{t} matching down " , "l"); -#tleg.AddEntry(nominal , "no trigger corrections" , "l"); - - tleg.Draw("same"); - - - -#titles -theor.GetYaxis().SetTitle("#frac{1}{#sigma} #frac{#partial #sigma}{#partial MET} [GeV^{-1}]");theor.GetYaxis().SetTitleSize(0.05); -theor.GetXaxis().SetTitle("MET [GeV]"); theor.GetXaxis().SetTitleSize(0.05); - - TText* textPrelim = doPrelim(lumi,0.16,0.96); - textPrelim.Draw(); - -#delete c; -} #end sys loop - -#c.SetLogy(1); - -#c.SaveAs("240712plots/eComb.png"); -#c.SaveAs("240712plots/eComb.pdf"); - -return 0; - -} - -#------------------------------------------------------------------------- - -# function to read in the data from a histogram -void getDataFromHis(inputFile, TString& jet_num, int& nxbins){ - - TH1F *h_data = (TH1F*) inputFile.Get("metEta_h_"+jet_num+"data"); -Ntotal=0; - -# output = TFile.Open("muData.root","UPDATE"); -# # his_mc_array.Scale(10909.); -# h_data.SetName("muData"); -# h_data.Write(); - - - - nbins = h_data.GetNbinsX(); - - xmax = xmin + nxbins*(h_data.GetBinWidth(1)); - - # cout<<"num of bins: "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile.Get("metEta_h_"+jet_num+templ); - - #std::cout<<"test: "<& vect, vector& vect_err){ - - - TH1F* his_mc_array = (TH1F*) inputFile.Get("metEta_h_"+jet_num+"tt"+syst); - TH1F* his_mc_stop = (TH1F*) inputFile.Get("metEta_h_"+jet_num+"SinglT"); - his_mc_array.Add(his_mc_stop); - - his_mc_array.Scale(1./his_mc_array.Integral()); - - - - -# output = TFile.Open("signal.root","UPDATE"); -# # his_mc_array.Scale(10909.); -# his_mc_array.SetName("SignalTemplate"); -# his_mc_array.Write(); - - - for(int ibin=0; ibin0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - #cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - #double r = nwjets/nzjets; - #double r_err = r*0.01; - - #f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - #Wjets constrain -# f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -# #Zjets constrain -# f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -# #QCD constrain -# f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - #Ratio Constrain - #f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); #chi4? - - - #ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); #swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - -} - -#########################################################################/ -def doPrelim(luminosity, x, y): - stream = "#mu, #geq 4 jets, #geq 2 b-tags CMS Preliminary, L = 5.0 fb^{-1} @ #sqrt{s} = 7 TeV"; - - text = TLatex(x, y, stream); - #text.SetTextAlign(33); #left - #text.SetTextAlign(22); #center - #text.SetTextAlign(11); #right - text.SetNDC(true); - text.SetTextFont(42); - text.SetTextSize(0.035); # for thesis - - return text; -} diff --git a/scripts/forLuke/systematicFitsExp.cc b/scripts/forLuke/systematicFitsExp.cc deleted file mode 100644 index 29e5e836..00000000 --- a/scripts/forLuke/systematicFitsExp.cc +++ /dev/null @@ -1,806 +0,0 @@ -/*A C++ program to use of ROOT class TMinuit for function minimization.It shows a Maximum Likelihood fit for the mean of a binned Poisson pdf in which TMinuit minimizes - - 2*log(L). fcn passes back f = -2*ln L by reference; this is the function to minimize. - - The factor of -2 allows MINUIT to get the errors using the same recipe as for least squares, i.e., go up from the minimum by 1. - - TMinuit does not allow fcn to be a member function, and the function arguments are fixed, so the one of the only ways to bring the data into fcn is to declare a poi -nter to the data (xVecPtr) as global. - - For more info on TMinuit see root.cern.ch/root/html/TMinuit.html . - -*/ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "TLatex.h" -#include "TText.h" -#include "TLegend.h" -#include "TFile.h" -#include "TGraphAsymmErrors.h" - -#include "tdrstyle.C" - -using namespace std; -// Declare pointer to data as global (not elegant but TMinuit needs this). -vector data_Vec; //input data - -vector ttbar_Vec; //ttbar+single top template from mc -vector wjets_Vec; //wjest template from data driven method -vector zjets_Vec; //zjets template from data driven method -vector qcd_Vec; //qcd template from data drive method - -vector ttbar_err_Vec; -vector wjets_err_Vec; //wjest template from data driven method -vector zjets_err_Vec; //zjets template from data driven method -vector qcd_err_Vec; //qcd template from data drive method - - -int Ntotal; //define as global, got in getDataFromHis function -int nbins; //define as global, also got in getDataFromHis function, and it is been used in getTemFromHis function - -//double xbins[13] = {0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4}; - - -double xmin = 0; -double xmax; //calculate in getDataFromHis function - -void fcn(int& npar, double* deriv, double& f, double par[], int flag); -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins); -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst, int& nxbins, vector& vect, vector& vect_err); -void getTemFromHis(TFile* inputFile, TString& templ, TString& jet_num, int& nxbins, vector& vect, vector& vect_err); - - -TText* doPrelim(float luminosity, float x, float y); - -//double lumi = 964.6; -//double lumi = 987.2; -double lumi = 4973.4; - - double Nsignal; - double Nwjets; - double Nzjets; - double NQCD; - double NSinglT; - double Nttbar; - double NtotPass; - double NttbarUp; - double NtotPassUp; - double NttbarDown; - double NtotPassDown; - - double NttbarUpMat; - double NtotPassUpMat; - double NttbarDownMat; - double NtotPassDownMat; - - double NttbarNLO; - double NtotPassNLO; - double NttbarPOW; - double NtotPassPOW; - -//------------------------------------------------------------------------- - -int systematicFitsExp() { -setTDRStyle(); - - - - // Choose the jet multiplicity - TString jet_num = "2b_"; - TString jet_num_temp = "ge2j"; - - TString metBin[5] = {"1","2","3","4","5"}; - -//choose what to use -TString templ = "_central"; - - - //differential histo - double xbins[6]= {1,25,45,70,100,150}; - //histograms for comaprison - //diff generators - TH1D *theor = new TH1D("theor", "", 5, xbins); - TH1D *nlo = new TH1D("nlo", "", 5, xbins); - TH1D *powheg = new TH1D("powheg", "", 5, xbins); - //syst samples - TH1D *sysup = new TH1D("sysup", "", 5, xbins); - TH1D *sysdown = new TH1D("sysdown", "", 5, xbins); - TH1D *mup = new TH1D("mup", "", 5, xbins); - TH1D *mdown = new TH1D("mdown", "", 5, xbins); - //measured - TH1D *measured = new TH1D("meas", "", 5, xbins); //muon - TH1D *ele = new TH1D("ele", "", 5, xbins); - TH1D *comb = new TH1D("comb", "", 5, xbins); - //compare histo - TH1D *nominal = new TH1D("nominal", "", 5, xbins); - - //theroy onn ttbar only due to stats (need to also change the string for w/z) - //TString syst[4] = {"_qup","_qdown","_mup","_mdown"}; - - TString syst[8] = {"_jup","_jdown","_METup","_METdown","_pup","_pdown","_bup","_bdown"}; - - -for(int sysErr = 0; sysErr < 8; sysErr++){ - -std::cout << syst[sysErr] << std::endl; - -//asymerrors - int n = 5; - double x[n]; - double y[n]; - double exl[n]; - double exh[n]; - -double theorNum = 0; -double nloNum = 0; -double powhegNum = 0; - -//syst -double upNum = 0; -double downNum = 0; -double mupNum = 0; -double mdownNum = 0; - -double theorXsect = 157.5; -double totXsect = 0; - for(int met = 0; met<5; met++){ - //for systematics - TFile* f_central = TFile::Open("PFhistosForFitting_met"+metBin[met]+templ+".root"); - TFile* f_all = TFile::Open("PFhistosForFitting_metall"+templ+".root"); - TFile* f_templates = TFile::Open("QCDetaData.root"); - - TH1D* signal = (TH1D*) f_central->Get("metEta_h_"+jet_num+"signal"); - TH1D* wjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"); - TH1D* zjets = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"); - TH1D* SinglT = (TH1D*) f_central->Get("metEta_h_"+jet_num+"SinglT"); - TH1D* ttbar = (TH1D*) f_central->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* QCD = (TH1D*) f_central->Get("metEta_h_"+jet_num+"QCD"); - TH1D* tt_Z = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_Z"); - TH1D* tt_W = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_W"); - TH1D* DATA = (TH1D*) f_central->Get("metEta_h_"+jet_num+"data"); - TH1D* QCData = (TH1D*) f_templates->Get("metEta_h_"+jet_num_temp); - - TH1D* ttbarAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"ttbar"); - - TH1D* tt_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt"+syst[sysErr]); - TH1D* wjets_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"wjets"+syst[sysErr]); - TH1D* zjets_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"zjets"+syst[sysErr]); - - //for other gens - TH1D* ttbar_nlo = (TH1D*) f_central->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powheg = (TH1D*) f_central->Get("metEta_h_"+jet_num+"powheg"); - TH1D* ttbar_nloAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"nlo"); - TH1D* ttbar_powhegAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"powheg"); - - //for sys up/down - - TH1D* ttbar_sys = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbar_sysdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_qdown"); - TH1D* ttbarUpAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qup"); - TH1D* ttbarDownAll = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_qdown"); - - TH1D* ttbar_mup = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbar_mdown = (TH1D*) f_central->Get("metEta_h_"+jet_num+"tt_mdown"); - TH1D* ttbarUpAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mup"); - TH1D* ttbarDownAllMat = (TH1D*) f_all->Get("metEta_h_"+jet_num+"tt_mdown"); - - //Choose rebin factor... -int rebinF = 8; -// if(met==4){ -// rebinF=4; -// } - - - ttbar_sys->Rebin(rebinF); - - tt_sys->Rebin(rebinF); - wjets_sys->Rebin(rebinF); - zjets_sys->Rebin(rebinF); - - ttbar_sysdown->Rebin(rebinF); - - ttbar_mup->Rebin(rebinF); - ttbar_mdown->Rebin(rebinF); - - ttbar_nlo->Rebin(rebinF); - ttbar_powheg->Rebin(rebinF); - - - signal->Rebin(rebinF); - wjets->Rebin(rebinF); - zjets->Rebin(rebinF); - QCD->Rebin(rebinF); - SinglT->Rebin(rebinF); - ttbar->Rebin(rebinF); - tt_Z->Rebin(rebinF); - tt_W->Rebin(rebinF); - DATA->Rebin(rebinF); - QCData->Rebin(rebinF/2); - - -// cout << "input params: " << endl; - //systematic samples - NttbarUp = ttbar_sys->Integral(); - NtotPassUp = ttbarUpAll->Integral(); - NttbarDown = ttbar_sysdown->Integral(); - NtotPassDown = ttbarDownAll->Integral(); - NttbarUpMat = ttbar_mup->Integral(); - NtotPassUpMat = ttbarUpAllMat->Integral(); - NttbarDownMat = ttbar_mdown->Integral(); - NtotPassDownMat = ttbarDownAllMat->Integral(); - - NttbarNLO = ttbar_nlo->Integral(); - NtotPassNLO = ttbar_nloAll->Integral(); - NttbarPOW = ttbar_powheg->Integral(); - NtotPassPOW = ttbar_powhegAll->Integral(); - - Nsignal = signal->Integral(); - Nwjets = wjets->Integral(); - Nzjets = zjets->Integral(); - NQCD = QCD->Integral(); - NSinglT = SinglT->Integral(); - Nttbar = ttbar->Integral(); - NtotPass = ttbarAll->Integral(); - - -double Ntt_Z =tt_Z->Integral(); -double Ntt_W =tt_W->Integral(); -double tot = Nttbar+NSinglT+NQCD+Nzjets+Nwjets+Ntt_Z+Ntt_W; -double Ndata = DATA->Integral(); -// cout << "all tt: " << NtotPass << endl; -// cout << "signal: " << Nsignal << endl; -// cout << "wjets: " << Nwjets<< endl; -// cout << "zjets: " << Nzjets << endl; -// cout << "qcd: " << NQCD << endl; - - TString wstring = "wjets"+syst[sysErr]; - TString zstring = "zjets"+syst[sysErr]; - TString qcdstring = ""; - - - // Read in the data and templates. - getDataFromHis(f_central, jet_num, nbins); // Get data histrogram form central selection - getSignalFromHis(f_central, jet_num, syst[sysErr], nbins, ttbar_Vec, ttbar_err_Vec);// Get ttbar, single-top histrograms form MC with entral selection - - getTemFromHis(f_central, wstring, jet_num, nbins, wjets_Vec, wjets_err_Vec); - getTemFromHis(f_central, zstring, jet_num, nbins, zjets_Vec, zjets_err_Vec); - getTemFromHis(f_templates, qcdstring, jet_num_temp, nbins, qcd_Vec, qcd_err_Vec); - - f_central->Close(); - f_templates->Close(); - - // Initialize minuit, set initial values etc. of parameters. - const int npar = 4; // the number of parameters - TMinuit minuit(npar); - minuit.SetFCN(fcn); - - //minuit.SetPrintLevel(1); - minuit.SetPrintLevel(-1); - minuit.SetErrorDef(1.); - - double fraction= NSinglT/Nsignal; - - int ierflg = 0; - string parName[npar] = {"ttbar+single-top", "wjets", "zjets", "qcd"}; //background parameters - double par[npar] = {Nsignal, Nwjets, Nzjets, NQCD}; //using the MC estimation as the start values 1fb - - //cout << "total data events: " << Ntotal << endl; - - for(int i=0; iGetBinWidth(met+1); - -measured->SetBinContent(met+1,xs_fit/width); -measured->SetBinError(met+1,(xs_fitup-xs_fit)/width); - -nlo->SetBinContent(met+1,nloNum/157.5/width); -powheg->SetBinContent(met+1,powhegNum/157.5/width); -theor->SetBinContent(met+1, (theorNum/157.5/width)); - -sysup->SetBinContent(met+1, (upNum/157.5/width)); -sysdown->SetBinContent(met+1, (downNum/157.5/width)); -mup->SetBinContent(met+1, (mupNum/157.5/width)); -mdown->SetBinContent(met+1, (mdownNum/157.5/width)); - - -x[met] = measured->GetBinCenter(met+1); -y[met] = xs_fit/width; -//exl[met] = measured->GetBinWidth(met+1)/2.; -//exh[met] = measured->GetBinWidth(met+1)/2.; -exl[met] = 0.; -exh[met] = 0.; -} //end of met loop - -//uncertainties***************************************************************************** -double tempStat[5] = {1.806/25./157.5, 1.888/20./157.5, 2.051/25./157.5, 1.072/30./157.5, 1.215/50./157.5}; - -double JESup[5] = {-0.000151962 , 0.000272578 , -4.23099e-05 , -3.70002e-05 , 7.25276e-06}; -double JESdown[5] = {-8.05871e-05 , -0.000135049 , -5.47969e-05 , -1.05896e-05 , 0.000126441}; - -double Qallup[5] = {0.000661542 , -0.00164854 , 0.0015185 , -0.000777495 , 4.91053e-05}; -double Qalldown[5] = {0.000976746 , -0.00126681 , 9.94392e-06 , -0.000330413 , 0.000231151}; - -double Mallup[5] = {0.00107054 , -0.00175803 , 0.000500762 , -0.000368955 , 0.000160332}; -double Malldown[5] = {0.00054994 , -0.000711093 , 0.000512741 , -0.000469302 , 4.56639e-05}; - -double singletD[5] = {3.79915e-06 , -1.64281e-05 , 1.61034e-05 , -1.38118e-05 , 4.97002e-06}; -double singletU[5] = {-3.95387e-06 , 1.7004e-05 , -1.67224e-05 , 1.4347e-05 , -5.16378e-06 }; - -double lumiD[5] = {-5.15494e-06 , -2.72603e-06 , -5.41703e-06 , 2.85952e-06 , 4.54458e-06}; -double lumiU[5] = {7.62411e-06 , -3.49747e-06 , 3.93426e-06 , -6.09136e-06 , -5.85902e-07}; - -double pdf[5] = {2.71e-05 , 3.66e-05 , 1.28e-05 , 1.33e-05 , 1.03e-05}; - -double METup[5] = {0.000177 , -0.000654 , 0.000105 , 1.24e-05 , 0.000117}; -double METdown[5] = {2.12e-05 , 0.000176 , 0.00031 , -0.000145 , -0.000149}; - -double stat[5] = {0.000370122 , 0.000482173 , 0.000393533 , 0.000199431 , 0.000133263}; - -double up[5], down[5]; - -for(int bin = 0; bin < 5; bin++ ){ -down[bin] = sqrt(pow(JESdown[bin],2)+pow(Qalldown[bin],2)+pow(Malldown[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METdown[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); -up[bin] = sqrt(pow(JESup[bin],2)+pow(Qallup[bin],2)+pow(Mallup[bin],2)+pow(singletD[bin],2)+pow(lumiD[bin],2)+pow(pdf[bin],2)+pow(METup[bin],2)+pow(stat[bin],2)+pow(tempStat[bin],2)); -y[bin] = y[bin]/totXsect; - -} - -//electron values for >=2btags - double eleres[5] = {0.01*0.70, 0.01*1.25, 0.01*1.08, 0.01*0.56, 0.01*0.27}; - double eleyl[5] = {sqrt(pow(0.01*0.12,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.19,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.05,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.01 ,2))}; - double eleyh[5] = {sqrt(pow(0.01*0.04,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.37,2)+pow(0.01*0.06,2)),sqrt(pow(0.01*0.03,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.07,2)+pow(0.01*0.02,2)),sqrt(pow(0.01*0.01,2)+pow(0.01*0.01 ,2))}; -//electron values for geq to 4jets -// double eleres[5] = {0.01*0.39, 0.01*0.99, 0.01*1.25, 0.01*0.73, 0.01*0.35}; -// double eleyl[5] = {sqrt(pow(0.01*0.51,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.10,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.40,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.39,2)),sqrt(pow(0.01*0.17,2)+pow(0.01*0.02 ,2))}; -// double eleyh[5] = {sqrt(pow(0.01*0.76,2)+pow(0.01*0.07 ,2)),sqrt(pow(0.01*0.63,2)+pow(0.01*0.09,2)),sqrt(pow(0.01*0.24,2)+pow(0.01*0.04 ,2)),sqrt(pow(0.01*0.02,2)+pow(0.01*0.12,2)),sqrt(pow(0.01*0.08,2)+pow(0.01*0.02 ,2))}; - - //electron values******************************************************************** -TGraphAsymmErrors* grele = new TGraphAsymmErrors(n,x,eleres,exl,exh,eleyl,eleyh); - grele->SetMarkerStyle(20); - grele->SetMarkerColor(4); - grele->SetLineColor(4); - grele->SetMarkerStyle(26); - - for(int bin = 0; bin < 5; bin++){ - ele->SetBinContent(bin+1,eleres[bin]); - ele->SetBinError(bin+1,0.000001); - } - - ele->SetMarkerStyle(20); - ele->SetMarkerColor(4); - ele->SetLineColor(4); - - //muon values************************************************************************* - double eyl[5] = {down[0],down[1],down[2],down[3],down[4]}; - double eyh[5] = {up[0],up[1],up[2],up[3],up[4]}; - TGraphAsymmErrors* gr = new TGraphAsymmErrors(n,x,y,exl,exh,eyl,eyh); - gr->SetMarkerColor(1); - gr->SetMarkerStyle(20); - gr->SetFillStyle(3004); - - - TCanvas *c= new TCanvas("c","c",10,10,800,600); - - - -measured->SetMarkerStyle(20); -measured->Scale(1./ totXsect); -//std::cout << "total measured x sect: " << totXsect << std::endl; - -//cout.precision(3); -//std::cout << "temp stat: " << std::endl; -//for(int i = 0; i<5; i++){ -//std::cout << tempStat[i] << "(" << (tempStat[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -//} - - //central previous vals no trigs - double central[5] = {0.00609465 , 0.0145213 , 0.0116628 , 0.00549336 , 0.00213862}; - -//std::cout << (measured->GetBinError(1)/y[0])*100 << " , " << (measured->GetBinError(2)/y[1])*100 << " , " << (measured->GetBinError(3)/y[2])*100 << " , " << (measured->GetBinError(4)/y[3])*100 << " , " << (measured->GetBinError(5)/y[4])*100 << std::endl; - - //uncertaint write out for muon -// std::cout << "tot up: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << up[i] << "(" << (up[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } -// std::cout << "tot down: " << std::endl; -// for(int i = 0; i<5; i++){ -// std::cout << down[i] << "(" << (down[i]/measured->GetBinContent(i+1))*100 << "\\%)" << " & " ; -// } - - -//Combination!!!********************************************************************************* -//std::cout << " combined vals: " << std::endl; -//combination stuff -double val[5]; double combUp[5]; double combDown[5]; -for(int i = 0; i<5; i++){ -double valnum = (measured->GetBinContent(i+1)/pow(up[i],2))+(measured->GetBinContent(i+1)/pow(down[i],2))+(eleres[i]/pow(eleyh[i],2))+(eleres[i]/pow(eleyl[i],2)); -double den = (1./pow(up[i],2))+(1./pow(down[i],2))+(1./pow(eleyh[i],2))+(1./pow(eleyl[i],2)); -val[i] = valnum/den; - -combUp[i] = sqrt(1./(1./pow(up[i],2)+pow(eleyh[i],2))); -combDown[i] = sqrt(1./(1./pow(down[i],2)+pow(eleyl[i],2))); - -//std::cout << val[i] << " , " ; -comb->SetBinContent(i+1, val[i]); -comb->SetBinError(i+1, 0.00000000001); -} - -TGraphAsymmErrors* grcomb = new TGraphAsymmErrors(n,x,val,exl,exh,combDown,combUp); - grcomb->SetMarkerStyle(20); - grcomb->SetMarkerColor(7); - grcomb->SetLineColor(7); - grcomb->SetMarkerStyle(20); - - comb->SetMarkerStyle(20); - comb->SetMarkerColor(7); - comb->SetLineColor(7); - -//show nominal calculated values -for(int i =1; i < 6; i++){ -nominal->SetBinContent(i,central[i-1]); - } - - - //plot colors - theor->SetLineColor(kRed+1); - sysup->SetLineColor(kOrange+1); - sysdown->SetLineColor(kGreen+1); - mup->SetLineColor(kBlue+1); - mdown->SetLineColor(kYellow+1); - //theor->SetFillColor(kRed+1); - nominal->SetLineColor(kBlue+1); - - sysup->SetLineStyle(7); - sysdown->SetLineStyle(7); - mup->SetLineStyle(7); - mdown->SetLineStyle(7); - - nlo->SetLineStyle(7); - powheg->SetLineStyle(7); - nlo->SetLineColor(kBlue+1); - powheg->SetLineColor(kGreen+1); - -theor->SetMinimum(0); -theor->SetMaximum(0.02); - - -theor->Draw(); -//nominal->Draw("same"); -//measured->Draw("Esame"); -//ele->Draw("Esame"); -gr->Draw("P"); -//ele and combined -//grele->Draw("Esame"); -//comb->Draw("Esame"); -//grcomb->Draw("Esame"); - -nominal->Draw("same"); - -//systs -// sysup->Draw("same"); -// sysdown->Draw("same"); -// mup->Draw("same"); -// mdown->Draw("same"); - -//gens -//nlo->Draw("same"); -//powheg->Draw("same"); - -//too see effect of an uncertainty for input of uncertainty - -//cout.precision(4); -//too see effect of an uncertainty - -//std::cout << " output: " << std::endl; -for(int bin = 1; bin<=5; bin++){ - //std::cout << 100*(measured->GetBinContent(bin)-nominal->GetBinContent(bin))/measured->GetBinContent(bin) << "\\\% & " ; - //for table (later) - std::cout << (measured->GetBinContent(bin)-nominal->GetBinContent(bin)) << " , "; - - -} - -std::cout << totXsect << std::endl; - -//legend - TLegend *tleg; - tleg = new TLegend(0.65,0.75,0.9,0.9); - tleg->SetTextSize(0.03); - tleg->SetBorderSize(0); - tleg->SetFillColor(10); - - - tleg->AddEntry(gr , "data '11'" , "lep"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets, #geq 2 btags)" , "lpe"); -// tleg->AddEntry(ele , "e+jets (#geq 4 jets)" , "lpe"); -// tleg->AddEntry(comb , "combined" , "lpe"); - - tleg->AddEntry(theor , "t#bar{t} (MADGRAPH)" , "l"); -// tleg->AddEntry(nlo , "t#bar{t} (MC@NLO)" , "l"); -// tleg->AddEntry(powheg , "t#bar{t} (POWHEG)" , "l"); - - //for sys -// tleg->AddEntry(sysup , "t#bar{t} Q^{2} up " , "l"); -// tleg->AddEntry(sysdown , "t#bar{t} Q^{2} down " , "l"); -// tleg->AddEntry(mup , "t#bar{t} matching up " , "l"); -// tleg->AddEntry(mdown , "t#bar{t} matching down " , "l"); -//tleg->AddEntry(nominal , "no trigger corrections" , "l"); - - tleg->Draw("same"); - - - -//titles -theor->GetYaxis()->SetTitle("#frac{1}{#sigma} #frac{#partial #sigma}{#partial MET} [GeV^{-1}]");theor->GetYaxis()->SetTitleSize(0.05); -theor->GetXaxis()->SetTitle("MET [GeV]"); theor->GetXaxis()->SetTitleSize(0.05); - - TText* textPrelim = doPrelim(lumi,0.16,0.96); - textPrelim->Draw(); - -//delete c; -} //end sys loop - -//c->SetLogy(1); - -//c->SaveAs("240712plots/eComb.png"); -//c->SaveAs("240712plots/eComb.pdf"); - -return 0; - -} - -//------------------------------------------------------------------------- - -// function to read in the data from a histogram -void getDataFromHis(TFile* inputFile, TString& jet_num, int& nxbins){ - - TH1F *h_data = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"data"); -Ntotal=0; - -// TFile* output = TFile::Open("muData.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// h_data->SetName("muData"); -// h_data->Write(); - - - - nbins = h_data->GetNbinsX(); - - xmax = xmin + nxbins*(h_data->GetBinWidth(1)); - - // cout<<"num of bins: "<GetBinContent(ibin+1); - - data_Vec.push_back(nn); - - Ntotal += nn; - - } - - // cout <<" \n Total number of events before the fit" << endl; - //cout <<" Data: \t "<& vect, vector& vect_err){ - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+templ); - - //std::cout<<"test: "<Integral()<Scale(1./his_mc_array->Integral()); - //std::cout<<"test: "<GetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - //std::cout << "{" << his_mc_array->GetBinContent(ibin+1) << "," << his_mc_array->GetBinError(ibin+1) << "}, "; - - } - //std::cout<< "}" << std::endl; - -} - - -void getSignalFromHis(TFile* inputFile, TString& jet_num, TString& syst,int& nxbins, vector& vect, vector& vect_err){ - - - TH1F* his_mc_array = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"tt"+syst); - TH1F* his_mc_stop = (TH1F*) inputFile->Get("metEta_h_"+jet_num+"SinglT"); - his_mc_array->Add(his_mc_stop); - - his_mc_array->Scale(1./his_mc_array->Integral()); - - - - -// TFile* output = TFile::Open("signal.root","UPDATE"); -// // his_mc_array->Scale(10909.); -// his_mc_array->SetName("SignalTemplate"); -// his_mc_array->Write(); - - - for(int ibin=0; ibinGetBinContent(ibin+1)); - vect_err.push_back(his_mc_array->GetBinError(ibin+1)); - - } - - -} -//------------------------------------------------------------------------- - -// fcn passes back f = - 2*ln(L), the function to be minimized. not sure if N_{single top} is obtained from fitting -void fcn(int& npar, double* deriv, double& f, double par[], int flag){ - - double lnL = 0.0; - - - for (int i=0; i0){ - nqcd = NQCD; - } - else{ - nqcd = 0.00000001; - } - double nqcd_err = nqcd*1.; - - //cout << "qcd:" << NQCD << " ,par3: " << par[3] << endl; - - //double r = nwjets/nzjets; - //double r_err = r*0.01; - - //f += (par[1]/par[2]-r)*(par[1]/par[2]-r)/r_err/r_err; - //Wjets constrain -// f += (par[1]-nwjets)*(par[1]-nwjets)/nwjets_err/nwjets_err; -// //Zjets constrain -// f += (par[2]-nzjets)*(par[2]-nzjets)/nzjets_err/nzjets_err; -// //QCD constrain -// f += (par[3]-nqcd)*(par[3]-nqcd)/nqcd_err/nqcd_err; - - //Ratio Constrain - //f += ( (par[1]/par[2] - nwjets/nzjets) / (0.3 *nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ) * ( (par[1]/par[2] - nwjets/nzjets) / (0.3*nwjets/nzjets) ); //chi4? - - - //ratio constraints - f += ( (par[2]/par[1] - nzjets/nwjets) / (0.05 *nzjets/nwjets) ) * ( (par[2]/par[1] - nzjets/nwjets) / (0.05*nzjets/nwjets) ); //swap - - - f += ((par[3]-nqcd)*(par[3]-nqcd))/nqcd_err/nqcd_err; - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -TText* doPrelim(float luminosity, float x, float y) -{ - std::ostringstream stream; - stream <<"#mu, #geq 4 jets, #geq 2 b-tags CMS Preliminary, L = 5.0 fb^{-1} @ #sqrt{s} = 7 TeV"; - - TLatex* text = new TLatex(x, y, stream.str().c_str()); - //text->SetTextAlign(33); //left - //text->SetTextAlign(22); //center - //text->SetTextAlign(11); //right -text->SetNDC(true); -text->SetTextFont(42); -text->SetTextSize(0.035); // for thesis - - return text; -} diff --git a/scripts/forLuke/systematicFits_cc.d b/scripts/forLuke/systematicFits_cc.d deleted file mode 100644 index d39f09f0..00000000 --- a/scripts/forLuke/systematicFits_cc.d +++ /dev/null @@ -1,84 +0,0 @@ - -# DO NOT DELETE - -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TMinuit.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TNamed.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TObject.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Rtypes.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/RConfig.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/RVersion.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/DllImport.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Rtypeinfo.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/snprintf.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/strlcpy.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TGenericClassInfo.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TSchemaHelper.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TStorage.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TVersionCheck.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Riosfwd.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TBuffer.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TString.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TMathBase.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TMethodCall.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TDictionary.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Property.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TCanvas.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TPad.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TVirtualPad.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttPad.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TVirtualX.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttLine.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttFill.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttText.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttMarker.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/GuiTypes.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Buttons.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TQObject.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttCanvas.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TCanvasImp.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TStyle.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAttAxis.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArrayI.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArray.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TROOT.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TDirectory.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TList.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TSeqCollection.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TCollection.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TIterator.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TDatime.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TUUID.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TF1.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TFormula.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TBits.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TObjArray.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Math/ParamFunctor.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TAxis.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArrayD.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TLine.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TMath.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TError.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/THStack.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TH1.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArrayC.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArrayS.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TArrayF.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/Foption.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TVectorFfwd.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TVectorDfwd.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TFitResultPtr.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TLatex.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TText.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TLegend.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TPave.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TBox.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TFile.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TDirectoryFile.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TMap.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/THashTable.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TUrl.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TGraphAsymmErrors.h -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/TGraph.h -./systematicFits_cc.so: tdrstyle.C -./systematicFits_cc.so: /software/root/v5.34.00/normal/include/cintdictversion.h /software/root/v5.34.00/normal/include/RVersion.h -systematicFits_cc__ROOTBUILDVERSION= 5.34/00 diff --git a/scripts/forLuke/tdrStyle.py b/scripts/forLuke/tdrStyle.py deleted file mode 100644 index 9dc2f23f..00000000 --- a/scripts/forLuke/tdrStyle.py +++ /dev/null @@ -1,156 +0,0 @@ -#include "TStyle.h" -from ROOT import TPad, TStyle, kWhite, kTRUE - -# tdrGrid: Turns the grid lines on (true) or off (false) - -def tdrGrid(tdrStyle, gridOn): - tdrStyle.SetPadGridX(gridOn); - tdrStyle.SetPadGridY(gridOn); - - -# fixOverlay: Redraws the axis - -def fixOverlay(): - gPad.RedrawAxis(); - -def setTDRStyle(): - tdrStyle = TStyle("tdrStyle","Style for P-TDR"); - -# For the canvas: - tdrStyle.SetCanvasBorderMode(0); - tdrStyle.SetCanvasColor(kWhite); - tdrStyle.SetCanvasDefH(600); #Height of canvas - tdrStyle.SetCanvasDefW(600); #Width of canvas - tdrStyle.SetCanvasDefX(0); #POsition on screen - tdrStyle.SetCanvasDefY(0); - -# For the Pad: - tdrStyle.SetPadBorderMode(0); - # tdrStyle.SetPadBorderSize(Width_t size = 1); - tdrStyle.SetPadColor(kWhite); - tdrStyle.SetPadGridX(False); - tdrStyle.SetPadGridY(False); - tdrStyle.SetGridColor(0); - tdrStyle.SetGridStyle(3); - tdrStyle.SetGridWidth(1); - -# For the frame: - tdrStyle.SetFrameBorderMode(0); - tdrStyle.SetFrameBorderSize(1); - tdrStyle.SetFrameFillColor(0); - tdrStyle.SetFrameFillStyle(0); - tdrStyle.SetFrameLineColor(1); - tdrStyle.SetFrameLineStyle(1); - tdrStyle.SetFrameLineWidth(1); - -# For the histo: - # tdrStyle.SetHistFillColor(1); - # tdrStyle.SetHistFillStyle(0); - tdrStyle.SetHistLineColor(1); - tdrStyle.SetHistLineStyle(0); - tdrStyle.SetHistLineWidth(1); - # tdrStyle.SetLegoInnerR(Float_t rad = 0.5); - # tdrStyle.SetNumberContours(Int_t number = 20); - - tdrStyle.SetEndErrorSize(2); -# tdrStyle.SetErrorMarker(20); - tdrStyle.SetErrorX(0.); - - tdrStyle.SetMarkerStyle(20); - -#For the fit/function: - tdrStyle.SetOptFit(1); - tdrStyle.SetFitFormat("5.4g"); - tdrStyle.SetFuncColor(2); - tdrStyle.SetFuncStyle(1); - tdrStyle.SetFuncWidth(1); - -#For the date: - tdrStyle.SetOptDate(0); - # tdrStyle.SetDateX(Float_t x = 0.01); - # tdrStyle.SetDateY(Float_t y = 0.01); - -# For the statistics box: - tdrStyle.SetOptFile(0); - tdrStyle.SetOptStat(0); # To display the mean and RMS: SetOptStat("mr"); - tdrStyle.SetStatColor(kWhite); - tdrStyle.SetStatFont(42); - tdrStyle.SetStatFontSize(0.025); - tdrStyle.SetStatTextColor(1); - tdrStyle.SetStatFormat("6.4g"); - tdrStyle.SetStatBorderSize(1); - tdrStyle.SetStatH(0.1); - tdrStyle.SetStatW(0.15); - # tdrStyle.SetStatStyle(Style_t style = 1001); - # tdrStyle.SetStatX(Float_t x = 0); - # tdrStyle.SetStatY(Float_t y = 0); - -# Margins: - tdrStyle.SetPadTopMargin(0.05); - tdrStyle.SetPadBottomMargin(0.13); - tdrStyle.SetPadLeftMargin(0.16); - tdrStyle.SetPadRightMargin(0.02); - -# For the Global title: - - tdrStyle.SetOptTitle(0); - tdrStyle.SetTitleFont(42); - tdrStyle.SetTitleColor(1); - tdrStyle.SetTitleTextColor(1); - tdrStyle.SetTitleFillColor(10); - tdrStyle.SetTitleFontSize(0.05); - # tdrStyle.SetTitleH(0); # Set the height of the title box - # tdrStyle.SetTitleW(0); # Set the width of the title box - # tdrStyle.SetTitleX(0); # Set the position of the title box - # tdrStyle.SetTitleY(0.985); # Set the position of the title box - # tdrStyle.SetTitleStyle(Style_t style = 1001); - # tdrStyle.SetTitleBorderSize(2); - -# For the axis titles: - - tdrStyle.SetTitleColor(1, "XYZ"); - tdrStyle.SetTitleFont(42, "XYZ"); - tdrStyle.SetTitleSize(0.06, "XYZ"); - # tdrStyle.SetTitleXSize(Float_t size = 0.02); # Another way to set the size? - # tdrStyle.SetTitleYSize(Float_t size = 0.02); - tdrStyle.SetTitleXOffset(0.9); - tdrStyle.SetTitleYOffset(1.25); - # tdrStyle.SetTitleOffset(1.1, "Y"); # Another way to set the Offset - -# For the axis labels: - - tdrStyle.SetLabelColor(1, "XYZ"); - tdrStyle.SetLabelFont(42, "XYZ"); - tdrStyle.SetLabelOffset(0.007, "XYZ"); - tdrStyle.SetLabelSize(0.05, "XYZ"); - -# For the axis: - - tdrStyle.SetAxisColor(1, "XYZ"); - tdrStyle.SetStripDecimals(kTRUE); - tdrStyle.SetTickLength(0.03, "XYZ"); - tdrStyle.SetNdivisions(510, "XYZ"); - tdrStyle.SetPadTickX(1); # To get tick marks on the opposite side of the frame - tdrStyle.SetPadTickY(1); - -# Change for log plots: - tdrStyle.SetOptLogx(0); - tdrStyle.SetOptLogy(0); - tdrStyle.SetOptLogz(0); - -# Postscript options: - tdrStyle.SetPaperSize(20.,20.); - # tdrStyle.SetLineScalePS(Float_t scale = 3); - # tdrStyle.SetLineStyleString(Int_t i, const char* text); - # tdrStyle.SetHeaderPS(const char* header); - # tdrStyle.SetTitlePS(const char* pstitle); - - # tdrStyle.SetBarOffset(Float_t baroff = 0.5); - # tdrStyle.SetBarWidth(Float_t barwidth = 0.5); - # tdrStyle.SetPaintTextFormat(const char* format = "g"); - # tdrStyle.SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - # tdrStyle.SetTimeOffset(Double_t toffset); - # tdrStyle.SetHistMinimumZero(kTRUE); - - tdrStyle.cd(); - return tdrStyle diff --git a/scripts/forLuke/tdrstyle.C b/scripts/forLuke/tdrstyle.C deleted file mode 100644 index cf781e21..00000000 --- a/scripts/forLuke/tdrstyle.C +++ /dev/null @@ -1,157 +0,0 @@ -#include "TStyle.h" - -// tdrGrid: Turns the grid lines on (true) or off (false) - -void tdrGrid(bool gridOn) { - tdrStyle->SetPadGridX(gridOn); - tdrStyle->SetPadGridY(gridOn); -} - -// fixOverlay: Redraws the axis - -void fixOverlay() { - gPad->RedrawAxis(); -} - -void setTDRStyle() { - TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - tdrStyle->SetCanvasBorderMode(0); - tdrStyle->SetCanvasColor(kWhite); - tdrStyle->SetCanvasDefH(600); //Height of canvas - tdrStyle->SetCanvasDefW(600); //Width of canvas - tdrStyle->SetCanvasDefX(0); //POsition on screen - tdrStyle->SetCanvasDefY(0); - -// For the Pad: - tdrStyle->SetPadBorderMode(0); - // tdrStyle->SetPadBorderSize(Width_t size = 1); - tdrStyle->SetPadColor(kWhite); - tdrStyle->SetPadGridX(false); - tdrStyle->SetPadGridY(false); - tdrStyle->SetGridColor(0); - tdrStyle->SetGridStyle(3); - tdrStyle->SetGridWidth(1); - -// For the frame: - tdrStyle->SetFrameBorderMode(0); - tdrStyle->SetFrameBorderSize(1); - tdrStyle->SetFrameFillColor(0); - tdrStyle->SetFrameFillStyle(0); - tdrStyle->SetFrameLineColor(1); - tdrStyle->SetFrameLineStyle(1); - tdrStyle->SetFrameLineWidth(1); - -// For the histo: - // tdrStyle->SetHistFillColor(1); - // tdrStyle->SetHistFillStyle(0); - tdrStyle->SetHistLineColor(1); - tdrStyle->SetHistLineStyle(0); - tdrStyle->SetHistLineWidth(1); - // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); - // tdrStyle->SetNumberContours(Int_t number = 20); - - tdrStyle->SetEndErrorSize(2); -// tdrStyle->SetErrorMarker(20); - tdrStyle->SetErrorX(0.); - - tdrStyle->SetMarkerStyle(20); - -//For the fit/function: - tdrStyle->SetOptFit(1); - tdrStyle->SetFitFormat("5.4g"); - tdrStyle->SetFuncColor(2); - tdrStyle->SetFuncStyle(1); - tdrStyle->SetFuncWidth(1); - -//For the date: - tdrStyle->SetOptDate(0); - // tdrStyle->SetDateX(Float_t x = 0.01); - // tdrStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - tdrStyle->SetOptFile(0); - tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); - tdrStyle->SetStatColor(kWhite); - tdrStyle->SetStatFont(42); - tdrStyle->SetStatFontSize(0.025); - tdrStyle->SetStatTextColor(1); - tdrStyle->SetStatFormat("6.4g"); - tdrStyle->SetStatBorderSize(1); - tdrStyle->SetStatH(0.1); - tdrStyle->SetStatW(0.15); - // tdrStyle->SetStatStyle(Style_t style = 1001); - // tdrStyle->SetStatX(Float_t x = 0); - // tdrStyle->SetStatY(Float_t y = 0); - -// Margins: - tdrStyle->SetPadTopMargin(0.05); - tdrStyle->SetPadBottomMargin(0.13); - tdrStyle->SetPadLeftMargin(0.16); - tdrStyle->SetPadRightMargin(0.02); - -// For the Global title: - - tdrStyle->SetOptTitle(0); - tdrStyle->SetTitleFont(42); - tdrStyle->SetTitleColor(1); - tdrStyle->SetTitleTextColor(1); - tdrStyle->SetTitleFillColor(10); - tdrStyle->SetTitleFontSize(0.05); - // tdrStyle->SetTitleH(0); // Set the height of the title box - // tdrStyle->SetTitleW(0); // Set the width of the title box - // tdrStyle->SetTitleX(0); // Set the position of the title box - // tdrStyle->SetTitleY(0.985); // Set the position of the title box - // tdrStyle->SetTitleStyle(Style_t style = 1001); - // tdrStyle->SetTitleBorderSize(2); - -// For the axis titles: - - tdrStyle->SetTitleColor(1, "XYZ"); - tdrStyle->SetTitleFont(42, "XYZ"); - tdrStyle->SetTitleSize(0.06, "XYZ"); - // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // tdrStyle->SetTitleYSize(Float_t size = 0.02); - tdrStyle->SetTitleXOffset(0.9); - tdrStyle->SetTitleYOffset(1.25); - // tdrStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset - -// For the axis labels: - - tdrStyle->SetLabelColor(1, "XYZ"); - tdrStyle->SetLabelFont(42, "XYZ"); - tdrStyle->SetLabelOffset(0.007, "XYZ"); - tdrStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - tdrStyle->SetAxisColor(1, "XYZ"); - tdrStyle->SetStripDecimals(kTRUE); - tdrStyle->SetTickLength(0.03, "XYZ"); - tdrStyle->SetNdivisions(510, "XYZ"); - tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - tdrStyle->SetPadTickY(1); - -// Change for log plots: - tdrStyle->SetOptLogx(0); - tdrStyle->SetOptLogy(0); - tdrStyle->SetOptLogz(0); - -// Postscript options: - tdrStyle->SetPaperSize(20.,20.); - // tdrStyle->SetLineScalePS(Float_t scale = 3); - // tdrStyle->SetLineStyleString(Int_t i, const char* text); - // tdrStyle->SetHeaderPS(const char* header); - // tdrStyle->SetTitlePS(const char* pstitle); - - // tdrStyle->SetBarOffset(Float_t baroff = 0.5); - // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); - // tdrStyle->SetPaintTextFormat(const char* format = "g"); - // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // tdrStyle->SetTimeOffset(Double_t toffset); - // tdrStyle->SetHistMinimumZero(kTRUE); - - tdrStyle->cd(); - -} diff --git a/scripts/makeDiffVariablesPlots.py b/scripts/makeDiffVariablesPlots.py deleted file mode 100644 index 8f022a21..00000000 --- a/scripts/makeDiffVariablesPlots.py +++ /dev/null @@ -1,94 +0,0 @@ -import tools.PlottingUtilities as plotting -from ROOT import * -import sys - -def GetHist( histName , file ): - hist = file.Get( histName ) - if( not hist): - print "ERROR: histogram " + histName + " not found in " + file.GetName() - print "exiting..." - sys.exit() - return hist - -if __name__ == "__main__": - gROOT.Reset() - gStyle.SetHistMinimumZero(1) - gStyle.SetOptStat(0) - gStyle.SetErrorX(0.4) - - path = "/Users/phzss/work/Top_Analysis/TTbar+MET/compare_variables/" - input_path = path + "root_files_full_selection_except_btags/" - output_path = path + "plots_full_selection_except_btags/" - - ttjet_madgraph_file = input_path + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET.root" - ttjet_mcatnlo_file = input_path + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_MCatNLO.root" - ttjet_powheg_file = input_path + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_POWHEG.root" - ttjet_pythia_file = input_path + "TTJet_5050pb_PFElectron_PFMuon_PF2PATJets_PFMET_PYTHIA6.root" - - file_madgraph = TFile(ttjet_madgraph_file) - file_mcatnlo = TFile(ttjet_mcatnlo_file) - file_powheg = TFile(ttjet_powheg_file) - file_pythia = TFile(ttjet_pythia_file) - - variables = ['M3', 'HT', 'HT_lepton', 'HT_lepton_MET', 'deltaR_lepton_MET', 'leptons_invariant_mass', 'leptonic_W_pt', 'MET_pt', 'MET_phi', 'MET_1st_jet_pt', - 'deltaPhi_lepton_2jets', 'invariant_mass_lepton_1bjet', 'deltaPhi_lepton_closest_bjet', 'deltaPhi_lepton_MET', - 'deltaPhi_lepton_2bjets', 'invariant_mass_lepton_2bjet', 'invariant_mass_2bjets', 'deltaPhi_2bjets', 'MET_bjets_pt', 'deltaPhi_MET_2bjets'] - - for variable in variables: - hist_madgraph = GetHist ("DiffVariablesAnalyser/" + variable, file_madgraph) - hist_mcatnlo = GetHist ("DiffVariablesAnalyser/" + variable, file_mcatnlo) - hist_powheg = GetHist ("DiffVariablesAnalyser/" + variable, file_powheg) - hist_pythia = GetHist ("DiffVariablesAnalyser/" + variable, file_pythia) - - if not variable == 'HT' and not variable== 'HT_lepton' and not variable== 'HT_lepton_MET': - hist_madgraph.Rebin(10) - hist_mcatnlo.Rebin(10) - hist_powheg.Rebin(10) - hist_pythia.Rebin(10) - - canvas = TCanvas() - hist_madgraph.SetLineColor(kBlack) - hist_mcatnlo.SetLineColor(kRed) - hist_powheg.SetLineColor(kBlue) - hist_pythia.SetLineColor(kGreen) - - hist_madgraph.SetLineWidth(2) - hist_mcatnlo.SetLineWidth(2) - hist_powheg.SetLineWidth(2) - hist_pythia.SetLineWidth(2) - - hist_madgraph.SetMarkerSize(2) - hist_mcatnlo.SetMarkerSize(2) - hist_powheg.SetMarkerSize(2) - hist_pythia.SetMarkerSize(2) - #hist_madgraph.SetMarkerStyle(20) - - hist_madgraph.Sumw2() - hist_mcatnlo.Sumw2() - hist_powheg.Sumw2() - hist_pythia.Sumw2() - - hist_madgraph.Scale(1/hist_madgraph.Integral()) - hist_mcatnlo.Scale(1/hist_mcatnlo.Integral()) - hist_powheg.Scale(1/hist_powheg.Integral()) - hist_pythia.Scale(1/hist_pythia.Integral()) - - hist_madgraph.Draw("E1") - hist_mcatnlo.Draw('E1 same') - hist_powheg.Draw('E1 same') - hist_pythia.Draw('E1 same') - - if variable == 'MET_phi': - legend = plotting.create_legend(x0=0.72, y0 = 0.90, x1=0.84, y1=0.80) - elif variable == 'deltaPhi_2bjets': - legend = plotting.create_legend(x0=0.42, y0 = 0.90, x1=0.54, y1=0.80) - else: - legend = plotting.create_legend(x0=0.72, y0 = 0.90, x1=0.84, y1=0.75) - legend.SetTextSize(0.03) - legend.AddEntry(hist_madgraph, 't#bar{t} (MADGRAPH)', 'l') - legend.AddEntry(hist_mcatnlo, 't#bar{t} (MC@NLO)', 'l') - legend.AddEntry(hist_powheg, 't#bar{t} (POWHEG)', 'l') - legend.AddEntry(hist_pythia, 't#bar{t} (PYTHIA6)', 'l') - legend.Draw() - - canvas.SaveAs(output_path+variable + ".pdf") diff --git a/scripts/makeMETplots.py b/scripts/makeMETplots.py deleted file mode 100644 index d3ce216e..00000000 --- a/scripts/makeMETplots.py +++ /dev/null @@ -1,97 +0,0 @@ -import tools.PlottingUtilities as plotting -from ROOT import * -import sys - -def GetHist( histName , file ): - hist = file.Get( histName ) - if( not hist): - print "ERROR: histogram " + histName + " not found in " + file.GetName() - print "exiting..." - sys.exit() - return hist - -if __name__ == "__main__": - gROOT.Reset() - gStyle.SetHistMinimumZero(1) - gStyle.SetOptStat(0) - gStyle.SetErrorX(0.4) - - path = "/Users/phzss/work/Top_Analysis/TTbar+MET/MET_corr_test/hists/" - input_path = path - output_path = "/Users/phzss/work/Top_Analysis/TTbar+MET/MET_corr_test/plots/" - - ttjet_nominal_file = input_path + "TTJet_nominal.root" - ttjet_sysshift_file = input_path + "TTJet_sysshift.root" - ttjet_type0_file = input_path + "TTJet_type0.root" - ttjet_sysshift_type0_file = input_path + "TTJet_sysshift_type0.root" - - file_nominal = TFile(ttjet_nominal_file) - file_sysshift = TFile(ttjet_sysshift_file) - file_type0 = TFile(ttjet_type0_file) - file_sysshift_type0 = TFile(ttjet_sysshift_type0_file) - - mets = ['patMETsPFlow', 'patType1CorrectedPFMet', 'patType1p2CorrectedPFMet', 'recoMetPFlow', 'GenMET' ] - variables = ['MET_phi', 'MET'] - bjet_bins = ['0btag', '1btag', '2btags', '3btags', '4orMoreBtags' ] - - for met in mets: - for variable in variables: - for bjet_bin in bjet_bins: - hist_nominal = GetHist ("METAnalysis/" + met +"/" + variable + "_" + bjet_bin, file_nominal) - hist_sysshift = GetHist ("METAnalysis/" + met +"/" + variable + "_" + bjet_bin, file_sysshift) - hist_type0 = GetHist ("METAnalysis/" + met +"/" + variable + "_" + bjet_bin, file_type0) - hist_sysshift_type0 = GetHist ("METAnalysis/" + met +"/" + variable + "_" + bjet_bin, file_sysshift_type0) - - if variable == 'MET': - rebin_value = 10 - else: - rebin_value = 4 - - hist_nominal.Rebin(rebin_value) - hist_sysshift.Rebin(rebin_value) - hist_type0.Rebin(rebin_value) - hist_sysshift_type0.Rebin(rebin_value) - - canvas = TCanvas() - hist_nominal.SetLineColor(kBlack) - hist_sysshift.SetLineColor(kRed) - hist_type0.SetLineColor(kBlue) - hist_sysshift_type0.SetLineColor(kGreen) - - hist_nominal.SetLineWidth(2) - hist_sysshift.SetLineWidth(2) - hist_type0.SetLineWidth(2) - hist_sysshift_type0.SetLineWidth(2) - - hist_nominal.SetMarkerSize(2) - hist_sysshift.SetMarkerSize(2) - hist_type0.SetMarkerSize(2) - hist_sysshift_type0.SetMarkerSize(2) - - hist_type0.Draw() - hist_sysshift.Draw('same') - hist_sysshift_type0.Draw('same') - hist_nominal.Draw('same') - - if variable == 'MET': - hist_nominal.SetAxisRange(0,300, "X") - hist_sysshift.SetAxisRange(0,300, "X") - hist_type0.SetAxisRange(0,300, "X") - hist_sysshift_type0.SetAxisRange(0,300, "X") - - hist_type0.Draw() - hist_sysshift.Draw('same') - hist_sysshift_type0.Draw('same') - hist_nominal.Draw('same') - - legend = plotting.create_legend(x0=0.72, y0 = 0.90, x1=0.84, y1=0.75) - legend.SetTextSize(0.03) - legend.AddEntry(hist_nominal, 't#bar{t} nominal', 'l') - legend.AddEntry(hist_sysshift, 't#bar{t} sys_shift', 'l') - legend.AddEntry(hist_type0, 't#bar{t} type0', 'l') - legend.AddEntry(hist_sysshift_type0, 't#bar{t} sys_shift+type0', 'l') - legend.Draw() - - canvas.SaveAs(output_path + met +"_" + variable + "_" + bjet_bin + ".pdf") - - diff --git a/scripts/makePrettyPlots.py b/scripts/makePrettyPlots.py deleted file mode 100644 index 92a44c64..00000000 --- a/scripts/makePrettyPlots.py +++ /dev/null @@ -1,41 +0,0 @@ -''' -Created on Nov 22, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch - -important features: - -- read MC and data histograms and combine them -- set styles and colors -- allow switches for log-scale, cumulitative histograms, underflow/overflow bins, error sources - -''' - -import tools.PlottingUtilities as plotting -import FILES -import ROOTFileReader as reader -import QCDRateEstimation - -def plot(histpath, qcdShapeFrom, qcdShapeForSystematics, qcdRateEstimate, rebin=1, suffixes=[]): - inputFiles = FILES.files - #get histograms - if len(suffixes) > 0: - for suffix in suffixes: - hist = histpath + '_' + suffix - histograms = reader.getHistogramDictionary(histpath, inputFiles) - else: - histograms = reader.getHistogramDictionary(histpath, inputFiles) - - -if __name__ == "__main__": - inputFiles = FILES.files - estimateQCD = QCDRateEstimation.estimateQCDWithRelIso - plot(histpath='TTbarEplusJetsPlusMetAnalysis/Ref selection/MET/patMETsPFlow/Angle_lepton_MET', - qcdShapeFrom ='TTbarEplusJetsPlusMetAnalysis/Ref selection/QCDConversions/MET/patMETsPFlow/Angle_lepton_MET', - qcdShapeForSystematics = 'TTbarEplusJetsPlusMetAnalysis/Ref selection/QCD non iso e+jets/MET/patMETsPFlow/Angle_lepton_MET', - qcdRateEstimate=estimateQCD, - rebin=1, - suffixes=['0btag', '1btag', '2orMoreBtags']) - diff --git a/scripts/measureCrossSection.py b/scripts/measureCrossSection.py deleted file mode 100644 index 5b6f3d98..00000000 --- a/scripts/measureCrossSection.py +++ /dev/null @@ -1,2422 +0,0 @@ -from __future__ import division -from ROOT import * -from ROOT import TPaveText, kRed, TH1F, Double, TMinuit, Long, kGreen, gROOT, TCanvas, kMagenta, kBlue, TGraphAsymmErrors, TMath -from ROOT import kAzure, kYellow, kViolet, THStack, gStyle -from math import sqrt -from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf, RooMCStudy, RooFit, RooMsgService -import ROOT -import FILES -import tools.ROOTFileReader as FileReader -from array import array -import tools.PlottingUtilities as plotting -import tools.FileUtilities as fileutils -#import QCDRateEstimation -from copy import deepcopy -import numpy -from tools.Timer import Timer -import QCDRateEstimation -from optparse import OptionParser -from tools.ColorPrinter import colorstr -import json -from config.sampleSummations import qcd_samples, muon_qcd_samples, singleTop_samples, wplusjets_samples, zplusjets_samples, allMC_samples, signal_samples, vplusjets_samples -from sets import Set -import sys -correctionFactors = None -acceptanceFactors = None -contaminationFactors = None -savePath = "/storage/TopQuarkGroup/results/AN-13-015_V2/DiffXSectionMeasurement/unfolding/" -outputFormat_tables = 'latex' #other option: twiki -outputFormat_plots = ['png', 'pdf'] - -#analysisType = 'EPlusJets' -used_data = 'SingleElectron' -data_label = {'EPlusJets':'SingleElectron', 'MuPlusJets':'SingleMu', 'Combination': 'Combination'} -#analysis_folder = 'TTbar_plus_X_analysis/EPlusJets' -rebin = 20 -qcdLabel = 'QCDFromData' -metType = 'patMETsPFlow' -normalisation = None -vectors = None -N_Events = {} -N_ttbar_by_source = {} -DEBUG = False -use_RooFit = False -constrains = { - qcdLabel: {'enabled':False, 'value': 1}, - 'ratio_Z_W': {'enabled':False, 'value': 0.05}, - 'W+Jets': {'enabled':False, 'value': 0.3}, - 'DYJetsToLL': {'enabled':False, 'value': 0.3}, -# 'Di-Boson': {'enabled':False, 'value': 0.3}, - } -fit_index = 0 - -scale_factors = { - 'luminosity':1, - 'SingleTop':1, - 'TTJet':1, - 'W+Jets':1, - 'DYJetsToLL':1, -# 'POWHEG':7483496 / 3393627, - 'POWHEG':6920475 / 21666179, -# 'PYTHIA6':7483496 / 1089625, -# 'MCatNLO':7483496 / 3437894, - 'MCatNLO':6920475 / 32739786 - } - -metbins = [ - '0-25', - '25-45', - '45-70', - '70-100', - '100-150', - '150-inf' - ] -metbin_widths = { - '0-25':25, - '25-45':20, - '45-70':25, - '70-100':30, - '100-150':50, - '150-inf':50 - } -MET_LATEX = "E_{T}^{miss}" -metbin_latex = { - '0-25':'0 #leq %s < 25 GeV' % MET_LATEX, - '25-45':'25 #leq %s < 45 GeV' % MET_LATEX, - '45-70':'45 #leq %s < 70 GeV' % MET_LATEX, - '70-100':'70 #leq %s < 100 GeV' % MET_LATEX, - '100-150':'100 #leq %s < 150 GeV' % MET_LATEX, - '150-inf':'%s #geq 150 GeV' % MET_LATEX, - } - -metbin_latex_tables = { - '0-25':'0--25~\GeV', - '25-45':'25--45~\GeV', - '45-70':'45--70~\GeV', - '70-100':'70--100~\GeV', - '100-150':'100--150~\GeV', - '150-inf':'$\\geq 150$~\GeV' - } - -doBinByBinUnfolding = False - -metsystematics_sources = [ - "patType1p2CorrectedPFMetElectronEnUp", - "patType1p2CorrectedPFMetElectronEnDown", - "patType1p2CorrectedPFMetMuonEnUp", - "patType1p2CorrectedPFMetMuonEnDown", - "patType1p2CorrectedPFMetTauEnUp", - "patType1p2CorrectedPFMetTauEnDown", - "patType1p2CorrectedPFMetJetResUp", - "patType1p2CorrectedPFMetJetResDown", - "patType1p2CorrectedPFMetJetEnUp", - "patType1p2CorrectedPFMetJetEnDown", - "patType1p2CorrectedPFMetUnclusteredEnUp", - "patType1p2CorrectedPFMetUnclusteredEnDown" - ] - -metsystematics_sources_latex = { - "patType1p2CorrectedPFMetElectronEnUp":'Electron energy $+1\sigma$', - "patType1p2CorrectedPFMetElectronEnDown":'Electron energy $-1\sigma$', - "patType1p2CorrectedPFMetMuonEnUp":'Muon energy $+1\sigma$', - "patType1p2CorrectedPFMetMuonEnDown":'Muon energy $-1\sigma$', - "patType1p2CorrectedPFMetTauEnUp":'Tau energy $+1\sigma$', - "patType1p2CorrectedPFMetTauEnDown":'Tau energy $-1\sigma$', - "patType1p2CorrectedPFMetJetResUp":'Jet resolution $+1\sigma$', - "patType1p2CorrectedPFMetJetResDown":'Jet resolution $-1\sigma$', - "patType1p2CorrectedPFMetJetEnUp":'Jet energy $+1\sigma$', - "patType1p2CorrectedPFMetJetEnDown":'Jet energy $-1\sigma$', - "patType1p2CorrectedPFMetUnclusteredEnUp":'Unclustered energy $+1\sigma$', - "patType1p2CorrectedPFMetUnclusteredEnDown":'Unclustered energy $-1\sigma$' - } - -BjetBinsLatex = {'0btag':'0 b-tags', '0orMoreBtag':'#geq 0 b-tags', '1btag':'1 b-tags', - '1orMoreBtag':'#geq 1 b-tags', - '2btags':'2 b-tags', '2orMoreBtags':'#geq 2 b-tags', - '3btags':'3 b-tags', '3orMoreBtags':'#geq 3 b-tags', - '4orMoreBtags':'#geq 4 b-tags'} - -doSymmetricErrors = True -N_QCD = 14856 -bjetbin = '0orMoreBtag' -metbin = metbins[0] -current_source = 'None' - -def MinuitFitFunction(nParameters, gin, f, par, iflag): - global normalisation, vectors, qcdLabel - lnL = 0.0 - input_vectors = zip(vectors[used_data], - vectors['Signal'], - vectors['V+Jets'], -# vectors['W+Jets'], -# vectors['DYJetsToLL'], - vectors[qcdLabel], -# vectors['Di-Boson'] - ) - -# for data, signal, wjets, zjets, qcd, diBoson in input: -# for data, signal, wjets, zjets, qcd in input_vectors: - for data, signal, vjets, qcd in input_vectors: - #signal = ttjet + singleTop - x_i = par[0] * signal + par[1] * vjets + par[2] * qcd# + par[4] * diBoson#expected number of events in each bin - data = data * normalisation[used_data] - if (data != 0) and (x_i != 0): - L = TMath.Poisson(data, x_i) - lnL += TMath.log(L) - f[0] = -2.0 * lnL - - #constrains -# ratio of Z/W to 5% -# if constrains['ratio_Z_W']['enabled']: -# ratio_Z_W = normalisation['DYJetsToLL'] / normalisation['W+Jets'] -# if ratio_Z_W == 0 or par[1] == 0: -# f[0] += 1 -# else: -# f[0] += ((par[2] / par[1] - ratio_Z_W) / (constrains['ratio_Z_W']['value'] * ratio_Z_W)) ** 2 -# if constrains['W+Jets']['enabled']: -# f[0] += ((par[1] - normalisation['W+Jets']) / (constrains['W+Jets']['value'] * normalisation['W+Jets'])) ** 2 -# if constrains['DYJetsToLL']['enabled']: -# f[0] += ((par[2] - normalisation['DYJetsToLL']) / (constrains['DYJetsToLL']['value'] * normalisation['DYJetsToLL'])) ** 2 - if constrains[qcdLabel]['enabled']: - f[0] += ((par[2] - N_QCD) / (constrains[qcdLabel]['value'] * N_QCD)) ** 2 -# if constrains['Di-Boson']['enabled']: -# f[0] += ((par[4] - normalisation['Di-Boson']) / (constrains['Di-Boson']['value'] * normalisation['Di-Boson'])) ** 2 - -def createFitHistogram(fitvalues, fiterrors, templates): - global fit_index - fit = TH1F('fit_' + str(fit_index), 'fit', len(templates['Signal']), 0, 3) - fit_index += 1 - bin_i = 1 - input_vectors = zip(vectors['Signal'], - vectors['V+Jets'], - vectors[qcdLabel], - ) - for signal, vjets, qcd in input_vectors: - value = fitvalues[0] * signal + fitvalues[1] * vjets + fitvalues[2] * qcd #+ fitvalues[4] * diBoson - error = sqrt((fiterrors[0] * signal) ** 2 + (fiterrors[1] * vjets) ** 2 + (fiterrors[2] * qcd) ** 2) - fit.SetBinContent(bin_i, value) - fit.SetBinError(bin_i, error) - bin_i += 1 - return fit.Clone() - -def getFittedNormalisation(vectors_={}, normalisation_={}): - global normalisation, vectors, bjetbin - normalisation = normalisation_ - vectors = vectors_ - - #setup minuit - numberOfParameters = 3#4#5 - gMinuit = TMinuit(numberOfParameters) - gMinuit.SetFCN(MinuitFitFunction) - gMinuit.SetPrintLevel(-1) - #Error definition: 1 for chi-squared, 0.5 for negative log likelihood - gMinuit.SetErrorDef(1) - #error flag for functions passed as reference.set to as 0 is no error - errorFlag = Long(2) - - N_total = normalisation[used_data] * 2 - N_min = 0 -# N_total = 1e6 -# N_min = -N_total - - N_QCD = normalisation[qcdLabel] -# N_QCD = normalisation['QCD'] - if DEBUG: - print len(vectors[used_data]), len(vectors['Signal']), len(vectors['W+Jets']), len(vectors['DYJetsToLL']), len(vectors['QCDFromData']) - print "Total number of data events before the fit: ", N_total - N_signal = normalisation['TTJet'] + normalisation['SingleTop'] - gMinuit.mnparm(0, "N_signal(ttbar+single_top)", N_signal, 10.0, N_min, N_total, errorFlag) - gMinuit.mnparm(1, "V+Jets", normalisation['V+Jets'], 10.0, N_min, N_total, errorFlag) -# gMinuit.mnparm(1, "W+Jets", normalisation['W+Jets'], 10.0, N_min, N_total, errorFlag) -# gMinuit.mnparm(2, "DYJetsToLL", normalisation['DYJetsToLL'], 10.0, N_min, N_total, errorFlag) - gMinuit.mnparm(2, "QCD", N_QCD, 10.0, N_min, N_total, errorFlag) -# gMinuit.mnparm(4, "Di-Boson", normalisation['Di-Boson'], 10.0, 0, N_total, errorFlag) - - arglist = array('d', 10 * [0.]) - #minimisation strategy: 1 standard, 2 try to improve minimum (a bit slower) - arglist[0] = 2 - #minimisation itself - gMinuit.mnexcm("SET STR", arglist, 1, errorFlag) - gMinuit.Migrad() - - fitvalues, fiterrors = [], [] - for index in range(numberOfParameters): - temp_par = Double(0) - temp_err = Double(0) - gMinuit.GetParameter(index, temp_par, temp_err) - fitvalues.append(temp_par) - fiterrors.append(temp_err) - - N_ttbar = fitvalues[0] - normalisation['SingleTop'] - N_ttbar_err = (fitvalues[0] - normalisation['SingleTop']) * fiterrors[0] / fitvalues[0] - if (normalisation['V+Jets'] != 0): - N_ZPlusJets = fitvalues[1] - (fitvalues[1] * normalisation['W+Jets'] / normalisation['V+Jets']) - else: - N_ZPlusJets = fitvalues[1] - #the error appears twice in the above calculation -> E(N_Z) = E(N_V)*sqrt(2) - N_ZPlusJets_err = fiterrors[0] / fitvalues[1] * N_ZPlusJets - if (normalisation['V+Jets'] != 0): - N_WPlusJets = fitvalues[1] - (fitvalues[1] * normalisation['DYJetsToLL'] / normalisation['V+Jets']) - else: - N_WPlusJets = fitvalues[1] - N_WPlusJets_err = fiterrors[0] / fitvalues[1] * N_WPlusJets - - N_SingleTop = fitvalues[0] - (fitvalues[0] * normalisation['TTJet'] / normalisation['Signal']) - N_SingleTop_err = fiterrors[0] / fitvalues[0] * N_SingleTop * sqrt(2) - result = {'Signal': {'value': fitvalues[0], 'error':fiterrors[0]}, - 'Signal Before Fit': {'value': N_signal, 'error':0}, - 'V+Jets': {'value': fitvalues[1], 'error':fiterrors[0]}, - 'W+Jets': {'value': N_WPlusJets, 'error':N_WPlusJets_err}, - 'DYJetsToLL': {'value': N_ZPlusJets, 'error':N_ZPlusJets_err}, - qcdLabel: {'value': fitvalues[2], 'error':fiterrors[2]}, -# 'Di-Boson': {'value': fitvalues[4], 'error':fiterrors[4]}, - 'TTJet': {'value': N_ttbar, 'error' : N_ttbar_err}, - used_data: {'value': normalisation[used_data], 'error':0}, - 'SingleTop': {'value': N_SingleTop, 'error':N_SingleTop_err}, - 'SingleTop Before Fit': {'value': normalisation['SingleTop'], 'error':0}, - 'TTJet Before Fit': {'value': normalisation['TTJet'], 'error':0}, - 'QCD Before Fit': {'value': normalisation[qcdLabel], 'error':0}, - 'V+Jets BeforeFit': {'value': normalisation['V+Jets'], 'error':0}, - 'W+Jets BeforeFit': {'value': normalisation['W+Jets'], 'error':0}, - 'DYJetsToLL Before Fit': {'value': normalisation['DYJetsToLL'], 'error':0}, - 'SumMC': {'value': sum(fitvalues), 'error':sqrt(fiterrors[0] ** 2 + fiterrors[1] ** 2 + fiterrors[2] ** 2)}, - 'SumMC Before Fit': {'value': normalisation['V+Jets'] + normalisation[qcdLabel] + N_signal, 'error':0}, - 'fit': createFitHistogram(fitvalues, fiterrors, vectors), - 'vectors':vectors} - if current_source == 'central': - result.update({ - #other generators - 'POWHEG': {'value': normalisation['POWHEG'] * scale_factors['POWHEG'], 'error':0}, -# 'PYTHIA6': {'value': normalisation['PYTHIA6'] * scale_factors['PYTHIA6'], 'error':0}, - 'MCatNLO': {'value': normalisation['MCatNLO'] * scale_factors['MCatNLO'], 'error':0}, - }) - return result - -def normaliseHistograms(histograms, normalisation): - for histogramName, histogram in histograms.iteritems(): - histogram = plotting.normalise(histogram) - histogram.Scale(normalisation[histogramName]) - return histograms - -def getPDFs(histograms): - h_data = histograms[used_data] - temp_tt = histograms['TTJet'] - temp_wj = histograms['W+Jets'] -# temp_wj.Add(histograms['W2Jets']) -# temp_wj.Add(histograms['W3Jets']) -# temp_wj.Add(histograms['W4Jets']) - temp_zj = histograms['DYJetsToLL'] - temp_qcd = histograms[qcdLabel] - temp_stop = histograms['SingleTop'] - temp_signal = temp_tt.Clone('Signal') - temp_signal.Add(temp_stop) - temp_VPlusJets = temp_zj.Clone('V+jets') - temp_VPlusJets.Add(temp_wj) - - leptonAbsEta = RooRealVar("leptonAbsEta", "leptonAbsEta", 0., 3.) - variables = RooArgList() - variables.add(leptonAbsEta) - vars_set = RooArgSet() - vars_set.add(leptonAbsEta) - - data = RooDataHist("data", "dataset with leptonAbsEta", variables, h_data) - rh_tt = RooDataHist("rh_tt", "tt", variables, temp_tt); - rh_wj = RooDataHist("rh_wj", "wj", variables, temp_wj); - rh_zj = RooDataHist("rh_zj", "zj", variables, temp_zj); - rh_VJ = RooDataHist("rh_VJ", "VJ", variables, temp_VPlusJets); - rh_qcd = RooDataHist("rh_qcd", "qcd", variables, temp_qcd); - rh_stop = RooDataHist("rh_stop", "singletop", variables, temp_stop); - rh_signal = RooDataHist("rh_signal", "signal", variables, temp_signal); - roodatahists = [data, rh_VJ, rh_qcd, rh_signal] - - pdfs = {} - pdfs[used_data] = data - pdfs['TTJet'] = RooHistPdf("pdf_tt", "Signal pdf", vars_set, rh_tt, 0); - pdfs['W+Jets'] = RooHistPdf ("pdf_wj", "W+jets pdf", vars_set, rh_wj, 0); - pdfs['DYJetsToLL'] = RooHistPdf ("pdf_zj", "Z+jets pdf", vars_set, rh_zj, 0); - pdfs['V+Jets'] = RooHistPdf ("pdf_VJ", "Z+jets pdf", vars_set, rh_VJ, 0); - pdfs['QCD'] = RooHistPdf("pdf_qcd", "QCD pdf ", vars_set, rh_qcd, 0); - pdfs['SingleTop'] = RooHistPdf("pdf_stop", "single top pdf", vars_set, rh_stop, 0); - pdfs['Signal'] = RooHistPdf("pdf_signal", "single top pdf", vars_set, rh_signal, 0); - return pdfs, leptonAbsEta, variables, vars_set, roodatahists - - -def getFittedNormalisation_RooFit(histograms, normalisation_={}, vectors_={}): - global used_data, normalisation, vectors - normalisation = normalisation_ - vectors = vectors_ - histograms = normaliseHistograms(histograms, normalisation) - histograms['V+Jets'] = histograms['W+Jets'].Clone('VPlusJets') - histograms['V+Jets'].Add(histograms['DYJetsToLL']) - normalisation['V+Jets'] = normalisation['W+Jets'] + normalisation['DYJetsToLL'] - normalisation['Signal'] = normalisation['TTJet'] + normalisation['SingleTop'] - pdfs, leptonAbsEta, variables, vars_set, roodatahists = getPDFs(histograms) - N_total = normalisation[used_data] - N_total = 2 * N_total - N_min = 0 - #variables to be fitted - N_VPlusJets = RooRealVar ("nVJ", "number of Z+jets bgnd events", normalisation['V+Jets'], N_min, N_total, "event"); - N_QCD = RooRealVar("nqcd", "number of QCD bgnd events", normalisation[qcdLabel], N_min, normalisation[qcdLabel] * 2, "event"); - N_Signal = RooRealVar("nSignal", "number of single top + ttbar events", normalisation['Signal'], N_min, N_total, "event"); - - model = RooAddPdf("model", "Signal + V+Jets + QCD", - RooArgList(pdfs['Signal'], pdfs['V+Jets'], pdfs['QCD']), - RooArgList(N_Signal, N_VPlusJets, N_QCD)) - fitResult = model.fitTo(pdfs[used_data], RooFit.Minimizer("Minuit2", "Migrad"), RooFit.NumCPU(2), RooFit.Extended(True), - RooFit.SumW2Error(False), RooFit.Strategy(2), - #verbosity - RooFit.PrintLevel(-1), RooFit.Warnings(DEBUG), RooFit.Verbose(DEBUG)) -# if DEBUG: -# print len(vectors[used_data]), len(vectors['Signal']), len(vectors['W+Jets']), len(vectors['DYJetsToLL']), len(vectors['QCDFromData']) -# print "Total number of data events before the fit: ", N_total - - - N_ttbar = N_Signal.getVal() - normalisation['SingleTop'] - N_ttbar_err = (N_Signal.getVal() - normalisation['SingleTop']) * N_Signal.getError() / N_Signal.getVal() - N_ZPlusJets = N_VPlusJets.getVal() - (N_VPlusJets.getVal() * normalisation['W+Jets'] / normalisation['V+Jets']) - N_ZPlusJets_err = N_VPlusJets.getError() / N_VPlusJets.getVal() * N_ZPlusJets - N_WPlusJets = N_VPlusJets.getVal() - (N_VPlusJets.getVal() * normalisation['DYJetsToLL'] / normalisation['V+Jets']) - N_WPlusJets_err = N_VPlusJets.getError() / N_VPlusJets.getVal() * N_WPlusJets - - N_SingleTop = N_Signal.getVal() - (N_Signal.getVal() * normalisation['TTJet'] / normalisation['Signal']) - N_SingleTop_err = N_Signal.getError() / N_Signal.getVal() * N_SingleTop * sqrt(2) - result = {'Signal': {'value': N_Signal.getVal(), 'error':N_Signal.getError()}, - 'Signal Before Fit': {'value': normalisation['Signal'], 'error':0}, - 'V+Jets': {'value': N_VPlusJets.getVal(), 'error':N_VPlusJets.getError()}, - 'W+Jets': {'value': N_WPlusJets, 'error':N_WPlusJets_err}, - 'DYJetsToLL': {'value': N_ZPlusJets, 'error':N_ZPlusJets_err}, - qcdLabel: {'value': N_QCD.getVal(), 'error':N_QCD.getError()}, -# 'Di-Boson': {'value': fitvalues[4], 'error':fiterrors[4]}, - 'TTJet': {'value': N_ttbar, 'error' : N_ttbar_err}, - used_data: {'value': normalisation[used_data], 'error':0}, - 'SingleTop': {'value': N_SingleTop, 'error':N_SingleTop_err}, - 'SingleTop Before Fit': {'value': normalisation['SingleTop'], 'error':0}, - 'TTJet Before Fit': {'value': normalisation['TTJet'], 'error':0}, - 'QCD Before Fit': {'value': normalisation[qcdLabel], 'error':0}, - 'V+Jets BeforeFit': {'value': normalisation['V+Jets'], 'error':0}, - 'W+Jets BeforeFit': {'value': normalisation['W+Jets'], 'error':0}, - 'DYJetsToLL Before Fit': {'value': normalisation['DYJetsToLL'], 'error':0}, - 'SumMC': {'value': N_Signal.getVal() + N_VPlusJets.getVal() + N_QCD.getVal() , 'error':sqrt(N_Signal.getError() ** 2 + N_VPlusJets.getError() ** 2 + N_QCD.getError() ** 2)}, - 'SumMC Before Fit': {'value': normalisation['V+Jets'] + normalisation[qcdLabel] + normalisation['Signal'], 'error':0}, - 'fit': createFitHistogram_RooFit(histograms, normalisation, N_Signal, N_VPlusJets, N_QCD), - 'vectors':vectors} - if current_source == 'central': - result.update({ - #other generators - 'POWHEG': {'value': normalisation['POWHEG'] * scale_factors['POWHEG'], 'error':0}, -# 'PYTHIA6': {'value': normalisation['PYTHIA6'] * scale_factors['PYTHIA6'], 'error':0}, - 'MCatNLO': {'value': normalisation['MCatNLO'] * scale_factors['MCatNLO'], 'error':0}, - }) - return result - -def createFitHistogram_RooFit(histograms, normalisation, N_Signal, N_VPlusJets, N_QCD): - global fit_index - nBins = histograms[used_data].GetNbinsX() - hists = normaliseHistograms({'Signal':histograms['Signal'], 'V+Jets':histograms['V+Jets'], qcdLabel:histograms[qcdLabel]}, - {'Signal':N_Signal.getVal(), 'V+Jets':N_VPlusJets.getVal(), qcdLabel:N_QCD.getVal()}) - h_signal = hists['Signal'] - h_VPlusJets = hists['V+Jets'] - h_QCD = hists[qcdLabel] - - fit = TH1F('fit_' + str(fit_index), 'fit', nBins, 0, 3) - fit_index += 1 - - for bin_i in range(1, nBins): - nSignal = h_signal.GetBinContent(bin_i) - nVPlusJets = h_VPlusJets.GetBinContent(bin_i) - nQCD = h_QCD.GetBinContent(bin_i) - value = nSignal + nVPlusJets + nQCD - #bin-by-bin error - relErrorSignal = getRelativeError(N_Signal.getVal(), N_Signal.getError()) - relErrorVPlusJets = getRelativeError(N_VPlusJets.getVal(), N_VPlusJets.getError()) - relErrorQCD = getRelativeError(N_QCD.getVal(), N_QCD.getError()) - error = sqrt((relErrorSignal * nSignal) ** 2 + (relErrorVPlusJets * nVPlusJets) ** 2 + (relErrorQCD * nQCD) ** 2) - fit.SetBinContent(bin_i, value) - fit.SetBinError(bin_i, error) - return fit.Clone() - -def measureNormalisationIn(histogram, analysis): - global bjetbin, used_data - used_data = data_label[analysis] - normalisation = getNormalisation(histogram) - if DEBUG: - print current_source, ':', normalisation['W+Jets'] - templates = getTemplates(histogram) - vectors = vectorise(templates) - if analysis == 'EPlusJets': - qcdHistForEstimation = 'TTbar_plus_X_analysis/' + analysis + '/QCD e+jets PFRelIso/Binned_MET_Analysis/patType1CorrectedPFMet_bin_%s/electron_pfIsolation_03_%s' - qcdHistForEstimation = qcdHistForEstimation % (metbin, bjetbin) - qcdResult = QCDRateEstimation.estimateQCDWithRelIso(FILES.files, qcdHistForEstimation) - normalisation[qcdLabel] = qcdResult['estimate'] - else: - normalisation[qcdLabel] = normalisation['QCD_Pt-15to20_MuEnrichedPt5'] * 1.21 -# print 'MuQCD normalisation:', normalisation[qcdLabel] -# normalisation[qcdLabel] = normalisation[qcdLabel]*1.21 - - if DEBUG: - printNormalisation(normalisation) - fitted_result = None - if use_RooFit: - fitted_result = getFittedNormalisation_RooFit(histogram, normalisation, vectors) - else: - fitted_result = getFittedNormalisation(vectors, normalisation) - if DEBUG: - printFittedResult(fitted_result) - return fitted_result - -def measureNormalisationIncludingSystematics(histograms, analysis): - global current_source, used_data - fitted_results = {} - print 'Performing central measurement' - timer = Timer() - current_source = 'central' - histogram = histograms['central'] - use_QCDFromData = 'QCDFromData_Conversions' - if analysis == 'MuPlusJets': - use_QCDFromData = 'QCDFromData_AntiIsolated' - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['central'] = measureNormalisationIn(histogram, analysis) - print '>' * 80, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - print 'Performing measurement of systematic uncertainties (lumi, electron efficiency, single top cross-section)' - - if analysis == 'EPlusJets': - #electron efficiency += 3% - current_source = 'Electron Efficiency' - scale_factors['luminosity'] = 1. + 0.03 - fitted_results['Electron Efficiency +'] = measureNormalisationIn(histogram, analysis) - scale_factors['luminosity'] = 1. - 0.03 - fitted_results['Electron Efficiency -'] = measureNormalisationIn(histogram, analysis) - else: - #Muon efficiency += 3% TODO: change number - current_source = 'Muon Efficiency' - scale_factors['luminosity'] = 1. + 0.03 - fitted_results['Muon Efficiency +'] = measureNormalisationIn(histogram, analysis) - scale_factors['luminosity'] = 1. - 0.03 - fitted_results['Muon Efficiency -'] = measureNormalisationIn(histogram, analysis) - #luminosity uncertainty +- 2.2% - current_source = 'luminosity' - scale_factors['luminosity'] = 1. + 0.022 - fitted_results['Luminosity +'] = measureNormalisationIn(histogram, analysis) - scale_factors['luminosity'] = 1. - 0.022 - fitted_results['Luminosity -'] = measureNormalisationIn(histogram, analysis) - scale_factors['luminosity'] = 1.#reset - #single top cross-section: +-30% - current_source = 'singleTop' - scale_factors['SingleTop'] = 1. + 0.3 - fitted_results['SingleTop +'] = measureNormalisationIn(histogram, analysis) - scale_factors['SingleTop'] = 1. - 0.3 - fitted_results['SingleTop -'] = measureNormalisationIn(histogram, analysis) - scale_factors['SingleTop'] = 1.#reset - print '>' * 80, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - print 'Performing measurement of QCD shape uncertainty, JES and PU uncertainties' - if analysis == 'EPlusJets': - #QCD shape - current_source = 'QCD shape' - histogram['QCDFromData'] = histogram['QCDFromData_AntiIsolated'] - fitted_results['QCD shape'] = measureNormalisationIn(histogram, analysis) - timer.restart() - print '>' * 80, 'completed in %.2fs' % timer.elapsedTime() - #jet energy scale - current_source = 'JES' - histogram = histograms['JES+'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['JES+'] = measureNormalisationIn(histogram, analysis) - histogram = histograms['JES-'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['JES-'] = measureNormalisationIn(histogram, analysis) - #inelastic cross-section for pile-up calculation +- 5% - current_source = 'PileUp' - histogram = histograms['PileUp+'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['PileUp+'] = measureNormalisationIn(histogram, analysis) - histogram = histograms['PileUp-'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['PileUp-'] = measureNormalisationIn(histogram, analysis) - print '>' * 60, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - - print 'Performing measurement of B-tag and light jet uncertainties' - current_source = 'BJets' - histogram = histograms['BJet+'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['BJet+'] = measureNormalisationIn(histogram, analysis) - histogram = histograms['BJet-'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['BJet-'] = measureNormalisationIn(histogram, analysis) - current_source = 'LightJets' - histogram = histograms['LightJet+'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['LightJet+'] = measureNormalisationIn(histogram, analysis) - histogram = histograms['LightJet-'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - fitted_results['LightJet-'] = measureNormalisationIn(histogram, analysis) - print '>' * 60, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - - print 'Performing measurement of matching and scale systematic uncertainties' - #matching threshold ttbar: 20 GeV -> 10 GeV & 40GeV - current_source = 'TTJet matching' - histogram = histograms['central'] - histogram['QCDFromData'] = histogram[use_QCDFromData] - ttjet_temp = deepcopy(histogram['TTJet']) - histogram['TTJet'] = histogram['TTJets-matchingup'] - scale_factors['TTJet'] = N_Events[analysis]['TTJet'] / N_Events[analysis]['TTJets-matchingup'] - fitted_results['TTJet matching +'] = measureNormalisationIn(histogram, analysis) - histogram['TTJet'] = histogram['TTJets-matchingdown'] - scale_factors['TTJet'] = N_Events[analysis]['TTJet'] / N_Events[analysis]['TTJets-matchingdown'] - fitted_results['TTJet matching -'] = measureNormalisationIn(histogram, analysis) - #Q^2 scale ttbar - current_source = 'TTJet scale' - histogram['TTJet'] = histogram['TTJets-scaleup'] - scale_factors['TTJet'] = N_Events[analysis]['TTJet'] / N_Events[analysis]['TTJets-scaleup'] - fitted_results['TTJet scale +'] = measureNormalisationIn(histogram, analysis) - histogram['TTJet'] = histogram['TTJets-scaledown'] - scale_factors['TTJet'] = N_Events[analysis]['TTJet'] / N_Events[analysis]['TTJets-scaledown'] - fitted_results['TTJet scale -'] = measureNormalisationIn(histogram, analysis) - #reset - scale_factors['TTJet'] = 1 - histogram['TTJet'] = ttjet_temp - #matching threshold W+Jets - current_source = 'V+Jets matching' - zjets_temp = deepcopy(histogram['DYJetsToLL']) - wjets_temp = deepcopy(histogram['W+Jets']) - vjets_temp = deepcopy(histogram['V+Jets']) - - histogram['W+Jets'] = histogram['WJets-matchingup'] - histogram['DYJetsToLL'] = histogram['ZJets-matchingup'] - histogram['V+Jets'] = histogram['W+Jets'] - histogram['V+Jets'].Add(histogram['DYJetsToLL']) - scale_factors['W+Jets'] = N_Events[analysis]['W+Jets'] / N_Events[analysis]['WJets-matchingup'] - scale_factors['DYJetsToLL'] = N_Events[analysis]['DYJetsToLL'] / N_Events[analysis]['ZJets-matchingup'] - fitted_results['V+Jets matching +'] = measureNormalisationIn(histogram, analysis) - - histogram['W+Jets'] = histogram['WJets-matchingdown'] - histogram['DYJetsToLL'] = histogram['ZJets-matchingdown'] - histogram['V+Jets'] = histogram['W+Jets'] - histogram['V+Jets'].Add(histogram['DYJetsToLL']) - scale_factors['W+Jets'] = N_Events[analysis]['W+Jets'] / N_Events[analysis]['WJets-matchingdown'] - scale_factors['DYJetsToLL'] = N_Events[analysis]['DYJetsToLL'] / N_Events[analysis]['ZJets-matchingdown'] - fitted_results['V+Jets matching -'] = measureNormalisationIn(histogram, analysis) - #Q^2 scale W+Jets - current_source = 'V+Jets scale' - histogram['W+Jets'] = histogram['WJets-scaleup'] - histogram['DYJetsToLL'] = histogram['ZJets-scaleup'] - histogram['V+Jets'] = histogram['W+Jets'] - histogram['V+Jets'].Add(histogram['DYJetsToLL']) - scale_factors['W+Jets'] = N_Events[analysis]['W+Jets'] / N_Events[analysis]['WJets-scaleup'] - scale_factors['DYJetsToLL'] = N_Events[analysis]['DYJetsToLL'] / N_Events[analysis]['ZJets-scaleup'] - fitted_results['V+Jets scale +'] = measureNormalisationIn(histogram, analysis) - - histogram['W+Jets'] = histogram['WJets-scaledown'] - histogram['DYJetsToLL'] = histogram['ZJets-scaledown'] - histogram['V+Jets'] = histogram['W+Jets'] - histogram['V+Jets'].Add(histogram['DYJetsToLL']) - scale_factors['W+Jets'] = N_Events[analysis]['W+Jets'] / N_Events[analysis]['WJets-scaledown'] - scale_factors['DYJetsToLL'] = N_Events[analysis]['DYJetsToLL'] / N_Events[analysis]['ZJets-scaledown'] - fitted_results['V+Jets scale -'] = measureNormalisationIn(histogram, analysis) - #reset - scale_factors['W+Jets'] = 1 - scale_factors['DYJetsToLL'] = 1 - histogram['W+Jets'] = wjets_temp - histogram['DYJetsToLL'] = zjets_temp - histogram['V+Jets'] = vjets_temp - print '>' * 60, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - print 'Performing measurement of MET systematic uncertainties' - for source in metsystematics_sources: - current_source = source - histogram = histograms[source] - histogram['QCDFromData'] = histogram[use_QCDFromData] - if 'JetRes' in source: - histogram['QCDFromData'] = histograms['central'][use_QCDFromData] - histogram[used_data] = histograms['central'][used_data] - fitted_results[source] = measureNormalisationIn(histogram, analysis) - print '>' * 60, 'completed in %.2fs' % timer.elapsedTime() - timer.restart() - - print 'Performing measurement of PDF uncertainties' - histogram_pdf = histograms['PDFWeights'] - histogram = histograms['central'] - histogram['QCDFromData'] = histograms['central'][use_QCDFromData] - ttjet_temp = deepcopy(histogram['TTJet']) - #scale_factors['TTJet'] = 7490162 / 6093274 - for index in range(1, 45): - pdf = 'TTJet_%d' % index - current_source = pdf - histogram['TTJet'] = histogram_pdf[pdf] - fitted_results['PDFWeights_%d' % index] = measureNormalisationIn(histogram, analysis) - #reset - scale_factors['TTJet'] = 1. - histogram['TTJet'] = ttjet_temp - print '>' * 60, 'completed in %.2fs' % timer.elapsedTime() - return fitted_results - histogram = None - - -def combineResults(result_A, result_B): - combination = {} - measurements = result_A.keys() - measurements.extend(result_B.keys()) - measurements = Set(measurements) - for measurement in measurements: - value_A = None - value_B = None - #get the measurement if it exists - #if it doesn't use central result - if result_A.has_key(measurement): - value_A = result_A[measurement] - else: - value_A = result_A['central'] - - if result_B.has_key(measurement): - value_B = result_B[measurement] - else: - value_B = result_B['central'] - result = combineValues(value_A, value_B) - combination[measurement] = result - #entries of each result are showin in - #getFittedNormalisation - return combination - - -def combineValues(value_A, value_B): - global qcdLabel - measurements = value_A.keys() - measurements.extend(value_A.keys()) - measurements = Set(measurements) - - result = {} - for measurement in measurements: - combination_function = combineMeasurements - if measurement == 'fit': - combination_function = combineFits - elif measurement == 'vectors': - combination_function = combineVectors - if measurement in value_A.keys() and measurement in value_B.keys(): - result[measurement] = combination_function(value_A[measurement], value_B[measurement]) - elif measurement in value_A.keys() and not measurement in value_B.keys(): - result[measurement] = value_A[measurement] - else: - result[measurement] = value_B[measurement] - -# result = {'Signal': combineMeasurements(value_A['Signal'], value_B['Signal']), -# 'Signal Before Fit': combineMeasurements(value_A['Signal Before Fit'], value_B['Signal Before Fit']), -# 'V+Jets': combineMeasurements(value_A['V+Jets'], value_B['V+Jets']), -# 'W+Jets': combineMeasurements(value_A['W+Jets'], value_B['W+Jets']), -# 'DYJetsToLL': combineMeasurements(value_A['DYJetsToLL'], value_B['DYJetsToLL']), -# qcdLabel: combineMeasurements(value_A[qcdLabel], value_B[qcdLabel]), -# 'TTJet': combineMeasurements(value_A['TTJet'], value_B['TTJet']), -# #TODO -# 'Combination': combineMeasurements(value_A['Signal'], value_B['Signal']), -# 'SingleTop':combineMeasurements(value_A['SingleTop'], value_B['SingleTop']), -# 'SingleTop Before Fit': combineMeasurements(value_A['SingleTop Before Fit'], value_B['SingleTop Before Fit']), -# 'TTJet Before Fit': combineMeasurements(value_A['TTJet Before Fit'], value_B['TTJet Before Fit']), -# 'QCD Before Fit': combineMeasurements(value_A['QCD Before Fit'], value_B['QCD Before Fit']), -# 'V+Jets BeforeFit': combineMeasurements(value_A['V+Jets BeforeFit'], value_B['V+Jets BeforeFit']), -# 'W+Jets BeforeFit': combineMeasurements(value_A['W+Jets BeforeFit'], value_B['W+Jets BeforeFit']), -# 'DYJetsToLL Before Fit': combineMeasurements(value_A['DYJetsToLL Before Fit'], value_B['DYJetsToLL Before Fit']), -# 'SumMC': combineMeasurements(value_A['SumMC'], value_B['SumMC']), -# 'SumMC Before Fit': combineMeasurements(value_A['SumMC Before Fit'], value_B['SumMC Before Fit']), -# 'fit': combineFits(value_A['fit'], value_B['fit']), -# 'vectors':combineVectors(value_A['vectors'], value_B['vectors'])} - return result - -def combineMeasurements(measurement_A, measurement_B): - value_A = measurement_A['value'] - value_B = measurement_B['value'] - error_A = measurement_A['error'] - error_B = measurement_B['error'] - combined_value = value_A + value_B -# relError_A = 0 -# if not value_A == 0: -# relError_A = error_A/value_A -# relError_B = 0 -# if not value_B == 0: -# relError_B = error_B/value_B -# combined_error = sqrt(relError_A**2 + relError_B**2)*combined_value - combined_error = sqrt(error_A ** 2 + error_B ** 2) - return {'value': combined_value, 'error':combined_error} - -def combineFits(measurement_A, measurement_B): - combined_fit = measurement_A.Clone('combined_fit' + str(fit_index)) - combined_fit.Add(measurement_B) - return combined_fit - -def combineVectors(measurement_A, measurement_B): - combined_vector = {} - for sample in measurement_A.keys(): - sum_entries = 0 - combined_vector[sample] = [] - for entry_A, entry_B in zip(measurement_A[sample], measurement_B[sample]): - sum_entries += entry_A - sum_entries += entry_B - combined_vector[sample].append(entry_A + entry_B) - #normalise to 1 (template) - for entry in combined_vector[sample]: - if not sum_entries == 0: - entry = entry / sum_entries - return combined_vector - -def NormalisationAnalysis(): - global metbins, metsystematics_sources, N_Events, metbin, doBinByBinUnfolding, metType, used_data - analysisTimer = Timer() - - setNEvents(bjetbin, 'EPlusJets') - setNTtbar(bjetbin, 'EPlusJets') - setNEvents(bjetbin, 'MuPlusJets') - setNTtbar(bjetbin, 'MuPlusJets') - - result_electrons = {} - result_muons = {} - result_combined = {} - result_simultaniousFit = {} - for metbin in metbins: - metbinTimer = Timer() - #loadfiles - histogramCollection = getHistograms(bjetbin, metbin, 'EPlusJets') - histogramCollection_muons = getHistograms(bjetbin, metbin, 'MuPlusJets') - - #sum samples - histogramCollection['central'] = sumSamples(histogramCollection['central']) - histogramCollection['JES-'] = sumSamples(histogramCollection['JES-']) - histogramCollection['JES+'] = sumSamples(histogramCollection['JES+']) - histogramCollection['PileUp-'] = sumSamples(histogramCollection['PileUp-']) - histogramCollection['PileUp+'] = sumSamples(histogramCollection['PileUp+']) - histogramCollection['BJet-'] = sumSamples(histogramCollection['BJet-']) - histogramCollection['BJet+'] = sumSamples(histogramCollection['BJet+']) - histogramCollection['LightJet-'] = sumSamples(histogramCollection['LightJet-']) - histogramCollection['LightJet+'] = sumSamples(histogramCollection['LightJet+']) - histogramCollection_muons['central'] = sumSamples(histogramCollection_muons['central']) - histogramCollection_muons['JES-'] = sumSamples(histogramCollection_muons['JES-']) - histogramCollection_muons['JES+'] = sumSamples(histogramCollection_muons['JES+']) - histogramCollection_muons['PileUp-'] = sumSamples(histogramCollection_muons['PileUp-']) - histogramCollection_muons['PileUp+'] = sumSamples(histogramCollection_muons['PileUp+']) - histogramCollection_muons['BJet-'] = sumSamples(histogramCollection_muons['BJet-']) - histogramCollection_muons['BJet+'] = sumSamples(histogramCollection_muons['BJet+']) - histogramCollection_muons['LightJet-'] = sumSamples(histogramCollection_muons['LightJet-']) - histogramCollection_muons['LightJet+'] = sumSamples(histogramCollection_muons['LightJet+']) - for source in metsystematics_sources: - histogramCollection[source] = sumSamples(histogramCollection[source]) - histogramCollection_muons[source] = sumSamples(histogramCollection_muons[source]) - print 'Getting fitted normalisation for metbin=', metbin, 'electron channel' - result_electrons[metbin] = measureNormalisationIncludingSystematics(histogramCollection, 'EPlusJets') - print 'Getting fitted normalisation for metbin=', metbin, 'muon channel' - result_muons[metbin] = measureNormalisationIncludingSystematics(histogramCollection_muons, 'MuPlusJets') - - if doBinByBinUnfolding: - print 'Performing unfolding' - result_electrons[metbin] = performUnfolding(result_electrons[metbin], metbin, 'EPlusJets') - result_muons[metbin] = performUnfolding(result_muons[metbin], metbin, 'MuPlusJets') - #combineResults the numbers - result_combined[metbin] = combineResults(result_electrons[metbin], result_muons[metbin]) - print 'Result for metbin=', metbin, 'completed in %.2fs' % metbinTimer.elapsedTime() - print 'Analysis in bjetbin=', bjetbin, 'finished in %.2fs' % analysisTimer.elapsedTime() - return result_electrons, result_muons, result_combined, result_simultaniousFit - -def performUnfolding(results, metbin, analysis): - global correctionFactors, acceptanceFactors, contaminationFactors - #corrections for bin migration - correctionFactor_POWHEG = correctionFactors[analysis]['POWHEG'][metType][metbin] -# correctionFactor_PYTHIA = correctionFactors[analysis]['PYTHIA6'][metType][metbin] - correctionFactor_MCATNLO = correctionFactors[analysis]['MCatNLO'][metType][metbin] - acceptanceFactor_POWHEG = acceptanceFactors[analysis]['POWHEG'][metbin] -# acceptanceFactor_PYTHIA = acceptanceFactors[analysis]['PYTHIA6'][metbin] - acceptanceFactor_MCATNLO = acceptanceFactors[analysis]['MCatNLO'][metbin] - contaminationFactor_POWHEG = contaminationFactors[analysis]['POWHEG'][metbin] -# contaminationFactor_PYTHIA = contaminationFactors[analysis]['PYTHIA6'][metbin] - contaminationFactor_MCATNLO = contaminationFactors[analysis]['MCatNLO'][metbin] - corrections_POWHEG = correctionFactor_POWHEG * acceptanceFactor_POWHEG * contaminationFactor_POWHEG -# corrections_PYTHIA = correctionFactor_PYTHIA * acceptanceFactor_PYTHIA * contaminationFactor_PYTHIA - corrections_MCATNLO = correctionFactor_MCATNLO * acceptanceFactor_MCATNLO * contaminationFactor_MCATNLO - for measurement in results.keys(): - correctionFactor_MADGRAPH = correctionFactors[analysis]['TTJet'][metType][metbin] - acceptanceFactor_MADGRAPH = acceptanceFactors[analysis]['TTJet'][metbin] - contaminationFactor_MADGRAPH = contaminationFactors[analysis]['TTJet'][metbin] - if measurement in metsystematics_sources: - correctionFactor_MADGRAPH = correctionFactors[analysis]['TTJet'][measurement][metbin] - if 'TTJets-' in measurement: - correctionFactor_MADGRAPH = correctionFactors[analysis][measurement][metType][metbin] - acceptanceFactor_MADGRAPH = acceptanceFactors[analysis][measurement][metbin] - contaminationFactor_MADGRAPH = contaminationFactors[analysis][measurement][metbin] - corrections_MADGRAPH = correctionFactor_MADGRAPH * acceptanceFactor_MADGRAPH * contaminationFactor_MADGRAPH - results[measurement]['TTJet corrected'] = deepcopy(results[measurement]['TTJet']) - results[measurement]['TTJet Before Fit corrected'] = deepcopy(results[measurement]['TTJet Before Fit']) - results[measurement]['TTJet corrected']['value'] = results[measurement]['TTJet']['value'] * corrections_MADGRAPH - results[measurement]['TTJet corrected']['error'] = results[measurement]['TTJet']['error'] * corrections_MADGRAPH - results[measurement]['TTJet Before Fit corrected']['value'] = results[measurement]['TTJet Before Fit']['value'] * corrections_MADGRAPH - if measurement == 'central': - results[measurement]['POWHEG corrected'] = deepcopy(results[measurement]['POWHEG']) -# results[measurement]['PYTHIA6 corrected'] = deepcopy(results[measurement]['PYTHIA6']) - results[measurement]['MCatNLO corrected'] = deepcopy(results[measurement]['MCatNLO']) - results[measurement]['POWHEG corrected']['value'] = results[measurement]['POWHEG']['value'] * corrections_POWHEG -# results[measurement]['PYTHIA6 corrected']['value'] = results[measurement]['PYTHIA6']['value'] * corrections_PYTHIA - results[measurement]['MCatNLO corrected']['value'] = results[measurement]['MCatNLO']['value'] * corrections_MCATNLO - return results - -def CrossSectionAnalysis(input_results, analysis): - global N_ttbar_by_source - result = {} - theoryXsection = 157.5 - suffix = '' - if doBinByBinUnfolding: - suffix = ' corrected' - for metbin in metbins: - result[metbin] = {} -# width = metbin_widths[metbin] - for measurement in input_results[metbin].keys(): - result_ttbar = input_results[metbin][measurement]['TTJet' + suffix] - madgraph_ttbar = input_results[metbin][measurement]['TTJet Before Fit' + suffix]['value'] - value, error = result_ttbar['value'], result_ttbar['error'] - if not analysis == 'Combination': - n_ttbar = N_ttbar_by_source[analysis][measurement] - else: - n_ttbar = N_ttbar_by_source['EPlusJets'][measurement] + N_ttbar_by_source['MuPlusJets'][measurement] - scale = theoryXsection / n_ttbar - result[metbin][measurement] = {'value': value * scale, - 'error':error * scale, - #replace these with GenMET - 'MADGRAPH':madgraph_ttbar * scale} - if measurement == 'central': - result[metbin][measurement].update( - {'POWHEG':input_results[metbin][measurement]['POWHEG' + suffix]['value'] * scale, -# 'PYTHIA6':input_results[metbin][measurement]['PYTHIA6' + suffix]['value'] * scale, - 'MCatNLO':input_results[metbin][measurement]['POWHEG' + suffix]['value'] * scale}) - return result - - -def NormalisedCrossSectionAnalysis(input_results): - global doBinByBinUnfolding - result = {} - sums = {'central':{}, 'MADGRAPH':{}, 'POWHEG':{}, 'MCatNLO':{} } #'PYTHIA6':{}, 'MCatNLO':{} } - if doBinByBinUnfolding: - suffix = ' corrected' - else: - suffix = '' - for metbin in metbins: - result[metbin] = {} - for measurement in input_results[metbin].keys(): - if not sums['central'].has_key(measurement): - sums['central'][measurement] = input_results[metbin][measurement]['TTJet' + suffix]['value'] - sums['MADGRAPH'][measurement] = input_results[metbin][measurement]['TTJet Before Fit' + suffix]['value'] - if measurement == 'central': - sums['POWHEG'][measurement] = input_results[metbin][measurement]['POWHEG' + suffix]['value'] -# sums['PYTHIA6'][measurement] = input_results[metbin][measurement]['PYTHIA6' + suffix]['value'] - sums['MCatNLO'][measurement] = input_results[metbin][measurement]['MCatNLO' + suffix]['value'] - else: - sums['central'][measurement] += input_results[metbin][measurement]['TTJet' + suffix]['value'] - sums['MADGRAPH'][measurement] += input_results[metbin][measurement]['TTJet Before Fit' + suffix]['value'] - if measurement == 'central': - sums['POWHEG'][measurement] += input_results[metbin][measurement]['POWHEG' + suffix]['value'] - # sums['PYTHIA6'][measurement] += input_results[metbin][measurement]['PYTHIA6' + suffix]['value'] - sums['MCatNLO'][measurement] += input_results[metbin][measurement]['MCatNLO' + suffix]['value'] - - for metbin in metbins: - result[metbin] = {} - width = metbin_widths[metbin] - scale = 1 / width - for measurement in input_results[metbin].keys(): - result_ttbar = input_results[metbin][measurement]['TTJet' + suffix] - madgraph_ttbar = input_results[metbin][measurement]['TTJet Before Fit' + suffix]['value'] * scale - value, error = result_ttbar['value'] * scale, result_ttbar['error'] * scale - - result[metbin][measurement] = {'value': value / sums['central'][measurement], - 'error':error / sums['central'][measurement], - 'MADGRAPH':madgraph_ttbar / sums['MADGRAPH'][measurement]} - if measurement == 'central': - result[metbin][measurement].update( - {'POWHEG':input_results[metbin][measurement]['POWHEG' + suffix]['value'] / sums['POWHEG'][measurement] * scale, -# 'PYTHIA6':input_results[metbin][measurement]['PYTHIA6' + suffix]['value'] / sums['PYTHIA6'][measurement] * scale, - 'MCatNLO':input_results[metbin][measurement]['MCatNLO' + suffix]['value'] / sums['MCatNLO'][measurement] * scale}) - return result - -def getHistograms(bjetbin, metbin, analysis): - print 'Getting histograms for bjetbin =', bjetbin, 'metbin=', metbin, 'and analysis=', analysis - global metsystematics_sources, rebin, metType - base = 'TTbar_plus_X_analysis/' + analysis + '/' - - distribution = base + 'Ref selection/Binned_MET_Analysis/%s_bin_%s/electron_absolute_eta_%s' % (metType, metbin, bjetbin) - qcdDistribution = base + 'QCDConversions/Binned_MET_Analysis/%s_bin_%s/electron_absolute_eta_0btag' % (metType, metbin) - qcdDistribution2 = base + 'QCD non iso e+jets/Binned_MET_Analysis/%s_bin_%s/electron_absolute_eta_0btag' % (metType, metbin) - if analysis == "MuPlusJets": - distribution = base + 'Ref selection/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_%s' % (metType, metbin, bjetbin) - qcdDistribution = base + 'QCD non iso mu+jets/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_0btag' % (metType, metbin) - qcdDistribution2 = base + 'QCD non iso mu+jets/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_0btag' % (metType, metbin) - - used_data = data_label[analysis] - histogramCollection = {} - histogramCollection['central'] = FileReader.getHistogramDictionary(distribution, FILES.files) - histogramCollection['central']['QCDFromData_Conversions'] = FileReader.getHistogramFromFile(qcdDistribution, FILES.files[used_data]) - histogramCollection['central']['QCDFromData_AntiIsolated'] = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files[used_data]) - histogramCollection['JES-'] = FileReader.getHistogramDictionary(distribution, FILES.files_JES_down) - histogramCollection['JES-']['QCDFromData_Conversions'] = FileReader.getHistogramFromFile(qcdDistribution, FILES.files_JES_down[used_data]) - histogramCollection['JES-']['QCDFromData_AntiIsolated'] = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files_JES_down[used_data]) - histogramCollection['JES+'] = FileReader.getHistogramDictionary(distribution, FILES.files_JES_up) - histogramCollection['JES+']['QCDFromData_Conversions'] = FileReader.getHistogramFromFile(qcdDistribution, FILES.files_JES_up[used_data]) - histogramCollection['JES+']['QCDFromData_AntiIsolated'] = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files_JES_up[used_data]) - histogramCollection['PileUp-'] = FileReader.getHistogramDictionary(distribution, FILES.files_PU_down) - histogramCollection['PileUp-']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['PileUp-']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - histogramCollection['PileUp+'] = FileReader.getHistogramDictionary(distribution, FILES.files_PU_up) - histogramCollection['PileUp+']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['PileUp+']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - histogramCollection['PDFWeights'] = FileReader.getHistogramDictionary(distribution, FILES.files_PDF_weights) - histogramCollection['BJet-'] = FileReader.getHistogramDictionary(distribution, FILES.files_BJet_down) - histogramCollection['BJet-']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['BJet-']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - histogramCollection['BJet+'] = FileReader.getHistogramDictionary(distribution, FILES.files_BJet_up) - histogramCollection['BJet+']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['BJet+']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - histogramCollection['LightJet-'] = FileReader.getHistogramDictionary(distribution, FILES.files_LightJet_down) - histogramCollection['LightJet-']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['LightJet-']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - histogramCollection['LightJet+'] = FileReader.getHistogramDictionary(distribution, FILES.files_LightJet_up) - histogramCollection['LightJet+']['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection['LightJet+']['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - - for source in metsystematics_sources: - distribution = base + 'Ref selection/Binned_MET_Analysis/%s_bin_%s/electron_absolute_eta_%s' % (source, metbin, bjetbin) - qcdDistribution = base + 'QCDConversions/Binned_MET_Analysis/%s_bin_%s/electron_absolute_eta_0btag' % (source, metbin) - if analysis == "MuPlusJets": - distribution = base + 'Ref selection/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_%s' % (source, metbin, bjetbin) - qcdDistribution = base + 'QCD non iso mu+jets/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_0btag' % (source, metbin) - qcdDistribution2 = base + 'QCD non iso mu+jets/Binned_MET_Analysis/%s_bin_%s/muon_absolute_eta_0btag' % (source, metbin) - if not 'JER' in source: - histogramCollection[source] = FileReader.getHistogramDictionary(distribution, FILES.files) - histogramCollection[source]['QCDFromData_Conversions'] = FileReader.getHistogramFromFile(qcdDistribution, FILES.files[used_data]) - histogramCollection[source]['QCDFromData_AntiIsolated'] = FileReader.getHistogramFromFile(qcdDistribution2, FILES.files[used_data]) - else: - mcFiles = deepcopy(FILES.files) - mcFiles.pop('SingleElectron')#removes data - mcFiles.pop('SingleMu')#removes data - histogramCollection[source] = FileReader.getHistogramDictionary(distribution, FILES.files) - histogramCollection[source]['QCDFromData_Conversions'] = deepcopy(histogramCollection['central']['QCDFromData_Conversions']) - histogramCollection[source]['QCDFromData_AntiIsolated'] = deepcopy(histogramCollection['central']['QCDFromData_AntiIsolated']) - - muonQCD_corrections = FileReader.getHistogramFromFile('etaAbs_ge2j_tight', 'data/etaAbs_ge2j_tight.root') - #initial binning 0.05, target: 0.2 - muonQCD_corrections.Rebin(4) - muQCD = FileReader.getHistogramFromFile('etaAbs_ge2j_data', 'data/QCD_data_mu.root') - for source in histogramCollection.keys(): - hists = histogramCollection[source] - hists = plotting.rebin(hists, rebin)#rebin to 200 bins - hists = plotting.setYTitle(hists, title="Events/%.2f" % (0.02 * rebin)) - - if analysis == "MuPlusJets" and not source in ['PDFWeights']: - hists['QCDFromData_Conversions'] = muQCD.Clone() - hists['QCDFromData_AntiIsolated'] = muQCD.Clone() - #correction for muon QCD -# if analysis == "MuPlusJets" and not source in ['PDFWeights']: -# -# muQCD = hists['QCDFromData_AntiIsolated']#both plots are identical -# nbins = muQCD.GetNbinsX() -# -# for bin_i in range(1, nbins + 1): -# correction = muonQCD_corrections.GetBinContent(bin_i) -# value = muQCD.GetBinContent(bin_i) -# muQCD.SetBinContent(bin_i, value * correction) -# -# hists['QCDFromData_Conversions'] = muQCD -# hists['QCDFromData_AntiIsolated'] = muQCD - - #sum samples - histogramCollection['central'] = sumSamples(histogramCollection['central']) - histogramCollection['JES-'] = sumSamples(histogramCollection['JES-']) - histogramCollection['JES+'] = sumSamples(histogramCollection['JES+']) - histogramCollection['PileUp-'] = sumSamples(histogramCollection['PileUp-']) - histogramCollection['PileUp+'] = sumSamples(histogramCollection['PileUp+']) - histogramCollection['BJet-'] = sumSamples(histogramCollection['BJet-']) - histogramCollection['BJet+'] = sumSamples(histogramCollection['BJet+']) - histogramCollection['LightJet-'] = sumSamples(histogramCollection['LightJet-']) - histogramCollection['LightJet+'] = sumSamples(histogramCollection['LightJet+']) - for source in metsystematics_sources: - histogramCollection[source] = sumSamples(histogramCollection[source]) - return histogramCollection - -def setNEvents(bjetbin, analysis): - global N_Events, metType - - histname = 'TTbar_plus_X_analysis/' + analysis + '/Ref selection/Electron/electron_AbsEta_' + bjetbin - if analysis == 'MuPlusJets': - histname = 'TTbar_plus_X_analysis/' + analysis + '/Ref selection/Muon/muon_AbsEta_' + bjetbin - -# unbinnedHist = FileReader.getHistogramDictionary('TTbar_plus_X_analysis/'+ analysis + '/Ref selection/MET/' + met + '/MET_' + bjetbin, -# FILES.files) - unbinnedHist = FileReader.getHistogramDictionary(histname, FILES.files) - unbinnedHist['W+Jets'] = plotting.sumSamples(unbinnedHist, wplusjets_samples) - unbinnedHist['DYJetsToLL'] = plotting.sumSamples(unbinnedHist, zplusjets_samples) - unbinnedHist['V+Jets'] = plotting.sumSamples(unbinnedHist, vplusjets_samples) - N_Events[analysis] = {} - - N_Events[analysis]['TTJet'] = unbinnedHist['TTJet'].Integral() - N_Events[analysis]['W+Jets'] = unbinnedHist['W+Jets'].Integral() - N_Events[analysis]['DYJetsToLL'] = unbinnedHist['DYJetsToLL'].Integral() - #remove V+Jets - N_Events[analysis]['V+Jets'] = unbinnedHist['V+Jets'].Integral() - - N_Events[analysis]['TTJets-matchingup'] = unbinnedHist['TTJets-matchingup'].Integral() - N_Events[analysis]['TTJets-matchingdown'] = unbinnedHist['TTJets-matchingdown'].Integral() - N_Events[analysis]['TTJets-scaleup'] = unbinnedHist['TTJets-scaleup'].Integral() - N_Events[analysis]['TTJets-scaledown'] = unbinnedHist['TTJets-scaledown'].Integral() - - N_Events[analysis]['WJets-matchingup'] = unbinnedHist['WJets-matchingup'].Integral() - N_Events[analysis]['WJets-matchingdown'] = unbinnedHist['WJets-matchingdown'].Integral() - N_Events[analysis]['WJets-scaleup'] = unbinnedHist['WJets-scaleup'].Integral() - N_Events[analysis]['WJets-scaledown'] = unbinnedHist['WJets-scaledown'].Integral() - - N_Events[analysis]['ZJets-matchingup'] = unbinnedHist['ZJets-matchingup'].Integral() - N_Events[analysis]['ZJets-matchingdown'] = unbinnedHist['ZJets-matchingdown'].Integral() - N_Events[analysis]['ZJets-scaleup'] = unbinnedHist['ZJets-scaleup'].Integral() - N_Events[analysis]['ZJets-scaledown'] = unbinnedHist['ZJets-scaledown'].Integral() - -def setNTtbar(bjetbin, analysis): - global N_ttbar_by_source, metType - N_ttbar_by_source[analysis] = {} - histname = 'TTbar_plus_X_analysis/' + analysis + '/Ref selection/Electron/electron_AbsEta_' + bjetbin - if analysis == 'MuPlusJets': - histname = 'TTbar_plus_X_analysis/' + analysis + '/Ref selection/Muon/muon_AbsEta_' + bjetbin - - getHist = FileReader.getHistogramFromFile - central = getHist(histname, FILES.files['TTJet']).Integral() - sameAsCentral = ['central', 'SingleTop +', 'SingleTop -', 'QCD shape', 'TTJet matching +', 'TTJet matching -', - 'TTJet scale +', 'TTJet scale -', 'W+Jets matching +', 'W+Jets matching -', 'W+Jets scale +', - 'W+Jets scale -', 'Z+Jets matching +', 'Z+Jets matching -', 'Z+Jets scale +', 'Z+Jets scale -', - 'V+Jets matching +', 'V+Jets matching -', 'V+Jets scale +', 'V+Jets scale -'] - for source in sameAsCentral: - N_ttbar_by_source[analysis][source] = central - - N_ttbar_by_source[analysis]['Electron Efficiency +'] = central * (1. + 0.03) - N_ttbar_by_source[analysis]['Electron Efficiency -'] = central * (1. - 0.03) - N_ttbar_by_source[analysis]['Muon Efficiency +'] = central * (1. + 0.03) - N_ttbar_by_source[analysis]['Muon Efficiency -'] = central * (1. - 0.03) - N_ttbar_by_source[analysis]['Luminosity +'] = central * (1. + 0.022) - N_ttbar_by_source[analysis]['Luminosity -'] = central * (1. - 0.022) - N_ttbar_by_source[analysis]['JES-'] = getHist(histname, FILES.files_JES_down['TTJet']).Integral() - N_ttbar_by_source[analysis]['JES+'] = getHist(histname, FILES.files_JES_up['TTJet']).Integral() - N_ttbar_by_source[analysis]['PileUp-'] = getHist(histname, FILES.files_PU_down['TTJet']).Integral() - N_ttbar_by_source[analysis]['PileUp+'] = getHist(histname, FILES.files_PU_up['TTJet']).Integral() - N_ttbar_by_source[analysis]['BJet-'] = getHist(histname, FILES.files_BJet_down['TTJet']).Integral() - N_ttbar_by_source[analysis]['BJet+'] = getHist(histname, FILES.files_BJet_up['TTJet']).Integral() - N_ttbar_by_source[analysis]['LightJet-'] = getHist(histname, FILES.files_LightJet_down['TTJet']).Integral() - N_ttbar_by_source[analysis]['LightJet+'] = getHist(histname, FILES.files_LightJet_up['TTJet']).Integral() - - - for index in range(1, 45): - filename = 'TTJet_%d' % index - pdf = 'PDFWeights_%d' % index - N_ttbar_by_source[analysis][pdf] = getHist(histname, FILES.files_PDF_weights[filename]).Integral() - - - for source in metsystematics_sources: -# histname = 'TTbar_plus_X_analysis/'+ analysis + '/Ref selection/MET/%s/MET_%s' % (source, bjetbin) - N_ttbar_by_source[analysis][source] = central#getHist(histname, FILES.files['TTJet']).Integral() - -def prepareHistogramCollections(histogramCollection): - global metsystematics_sources - -def printNormalisation(normalisation_): - global qcdLabel, metbin, current_source - sumMC = normalisation_['SumMC'] - normalisation_['QCD'] + normalisation_[qcdLabel] - print '*' * 120 - print 'MET bin: ', metbin - print 'source:', current_source - print "Input parameters:" - print 'signal (ttbar+single top):', normalisation_['TTJet'] + normalisation_['SingleTop'] - print 'W+Jets:', normalisation_['W+Jets'] - print 'Z+Jets:', normalisation_['DYJetsToLL'] - print qcdLabel, ':', normalisation_[qcdLabel] - print 'SingleTop :', normalisation_['SingleTop'] - print 'TTJet :', normalisation_['TTJet'] -# print 'Di-Boson:', normalisation_['Di-Boson'] - print 'SumMC:', sumMC - print 'Total data', normalisation_[used_data] - if not normalisation_[used_data] == 0: - print '(N_{data} - N_{SumMC})/N_{data}', (normalisation_[used_data] - sumMC) / normalisation_[used_data] - print '*' * 120 - -def printFittedResult(fitted_result): - global current_source - sumMC = sum([fitted_result['Signal']['value'], - fitted_result['W+Jets']['value'], - fitted_result['DYJetsToLL']['value'], - fitted_result[qcdLabel]['value'], -# fitted_result['Di-Boson'] - ] - ) - print '*' * 120 - print 'MET bin: ', metbin - print 'source:', current_source - print "Fit values:" - print 'signal (ttbar+single top):', fitted_result['Signal']['value'], '+-', fitted_result['Signal']['error'] - print 'W+Jets:', fitted_result['W+Jets']['value'], '+-', fitted_result['W+Jets']['error'] - print 'Z+Jets:', fitted_result['DYJetsToLL']['value'], '+-', fitted_result['DYJetsToLL']['error'] - print 'QCD:', fitted_result[qcdLabel]['value'], '+-', fitted_result[qcdLabel]['error'] - print 'SingleTop (no fit):', fitted_result['SingleTop']['value'], '+-', fitted_result['SingleTop']['error'] - print 'TTJet (signal fit - SingleTop):', fitted_result['TTJet']['value'], '+-', fitted_result['TTJet']['error'] -# print 'Di-Boson:', fitted_result['Di-Boson']['value'], '+-', fitted_result['Di-Boson']['error'] - print 'SumMC:', sumMC - N_data = fitted_result[used_data]['value'] - print 'Total data:', N_data - print '(N_{data} - N_{SumMC})/N_{data}:', (N_data - sumMC) / N_data - print '*' * 120 - -def getNormalisation(histograms): - global scale_factors - normalisation_ = {} - for sample in histograms.keys(): -# if sample == 'W+Jets': -# print histograms[sample].Integral(), histograms[sample].GetName() - normalisation_[sample] = histograms[sample].Integral() - if not sample in ['SingleElectron', 'SingleMu', 'QCDFromData']: - normalisation_[sample] = normalisation_[sample] * scale_factors['luminosity'] - if sample in scale_factors.keys(): - normalisation_[sample] = normalisation_[sample] * scale_factors[sample] - return normalisation_ - -def getTemplates(histograms): - templates = {} - for sample in histograms.keys(): - hist = deepcopy(histograms[sample].Clone()) -# hist.Sumw2() - templates[sample] = plotting.normalise(hist) - return templates - -def vectorise(histograms): - values = {} -# errors = {} - for sample in histograms.keys(): - hist = histograms[sample] - nBins = hist.GetNbinsX() - for bin_i in range(1, nBins + 1): - if not values.has_key(sample): - values[sample] = [] - values[sample].append(hist.GetBinContent(bin_i)) - return values - -def printNormalisationResult(result, analysis, toFile=True): - global metbins - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' - rows = {} - header = 'Sample' - for metbin in metbins: - header += '& N_{events}^(fit) \met bin %s~\GeV' % metbin - for source in result[metbin].keys(): - results = result[metbin][source] - if not rows.has_key(source): - rows[source] = {} - - for sample in results.keys(): - if sample == 'fit' or sample == 'vectors': - continue - fitresult = results[sample] - if DEBUG: - print fitresult - row = rows[source] - text = ' $%(value)f \pm %(error)f$' % fitresult + '(%.2f' % (getRelativeError(fitresult['value'], fitresult['error']) * 100) + '\%)' - if row.has_key(sample): - row[sample].append(text) - else: - row[sample] = [sample, text] - header += '\\\\ \n' - printout += 'Central measurement \n\n' - printout += header - printout += '\hline\n' - for sample in sorted(rows['central'].keys()): - results = rows['central'][sample] - for result in results: - printout += result + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - printout += '\hline\n\n' - if DEBUG: - print printout - - for source in sorted(rows.keys()): - if source == 'central': - continue - printout += source + ' measurement \n\n' - printout += header - printout += '\hline \n' - for sample in sorted(rows[source].keys()): - results = rows[source][sample] - for result in results: - printout += result + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - printout += '\hline \n\n' - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - - fileutils.writeStringToFile(printout, savePath + analysis + '_normalisation_result' + unfolding + '_' + bjetbin + '.tex') -# output_file = open(savePath + analysis + '_normalisation_result' + unfolding + '_' + bjetbin + '.tex', 'w') -# output_file.write(printout) -# output_file.close() - else: - print printout - -def getRelativeError(value, error): - relativeError = 0 - if not value == 0: - relativeError = error / value - return relativeError - -def sumSamples(hists): - hists['QCD'] = plotting.sumSamples(hists, qcd_samples) - hists['SingleTop'] = plotting.sumSamples(hists, singleTop_samples) -# hists['Di-Boson'] = plotting.sumSamples(hists, diboson_samples) - hists['W+Jets'] = plotting.sumSamples(hists, wplusjets_samples) - hists['DYJetsToLL'] = plotting.sumSamples(hists, zplusjets_samples) - #TODO: DO NOT SUM W/Z- bosons and signal here as it will be impossible to vary them for the fit!! - hists['V+Jets'] = plotting.sumSamples(hists, vplusjets_samples) - hists['SumMC'] = plotting.sumSamples(hists, allMC_samples) - hists['Signal'] = plotting.sumSamples(hists, signal_samples) - return hists - -#change to calculate uncertainties -def calculateTotalUncertainty(results, ommitTTJetsSystematics=False): - pdf_min, pdf_max = calculatePDFErrors(results) - pdf_min, pdf_max = 0, 0 - centralResult = results['central'] - if centralResult.has_key('TTJet'): - centralResult = results['central']['TTJet'] - centralvalue, centralerror = centralResult['value'], centralResult['error'] - totalMinus, totalPlus = pdf_min ** 2 , pdf_max ** 2 - totalMinus_err, totalPlus_err = 0, 0 - totalMETMinus, totalMETPlus = 0, 0 - totalMETMinus_err, totalMETPlus_err = 0, 0 - uncertainty = {} - for source in results.keys(): - if source == 'central' or 'PDFWeights_' in source: - continue - if ommitTTJetsSystematics and source in ['TTJet scale -', 'TTJet scale +', 'TTJet matching -', 'TTJet matching +']: - continue - result = results[source] - if result.has_key('TTJet'): - result = results['central']['TTJet'] - value, error = result['value'], result['error'] - diff = abs(value) - abs(centralvalue) - diff_error = sqrt((centralerror / centralvalue) ** 2 + (error / value) ** 2) * abs(diff) - uncertainty[source] = {'value':diff, 'error':diff_error} - if diff > 0: - totalPlus += diff ** 2 - totalPlus_err += diff_error ** 2 - else: - totalMinus += diff ** 2 - totalMinus_err += diff_error ** 2 - - if source in metsystematics_sources: - if diff > 0: - totalMETPlus += diff ** 2 - totalMETPlus_err += diff_error ** 2 - else: - totalMETMinus += diff ** 2 - totalMETMinus_err += diff_error ** 2 - - total = sqrt(totalPlus + totalMinus) - total_error = sqrt(totalPlus_err + totalMinus_err) - totalPlus, totalMinus, totalPlus_err, totalMinus_err = (sqrt(totalPlus), sqrt(totalMinus), - sqrt(totalPlus_err), sqrt(totalMinus_err)) - - totalMETPlus, totalMETMinus, totalMETPlus_err, totalMETMinus_err = (sqrt(totalMETPlus), sqrt(totalMETMinus), - sqrt(totalMETPlus_err), sqrt(totalMETMinus_err)) - uncertainty['Total+'] = {'value':totalPlus, 'error':totalPlus_err} - uncertainty['Total-'] = {'value':totalMinus, 'error':totalMinus_err} - uncertainty['Total'] = {'value':total, 'error':total_error} - uncertainty['TotalMETUnc+'] = {'value':totalMETPlus, 'error':totalMETPlus_err} - uncertainty['TotalMETUnc-'] = {'value':totalMETMinus, 'error':totalMETMinus_err} - uncertainty['PDFWeights+'] = {'value':pdf_max, 'error':0} - uncertainty['PDFWeights-'] = {'value':pdf_min, 'error':0} - - return uncertainty - #uncertainty = {total, totalMinu, totalPlus, PDFs ....} - #keys = sources + total, totalMinu, totalPlus, PDFs - central -# return total, totalMinus, totalPlus - -def printNormalisationResultsForTTJetWithUncertanties(result, analysis, toFile=True): - global metbins - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' -# rows = {} - printout += '\met bin & N_{t\\bar{t}}^{fit} \\\\ \n' - printout += '\hline\n' - uncertainties = {} - for metbin in metbins: - centralresult = result[metbin]['central']['TTJet'] - uncertainty = calculateTotalUncertainty(result[metbin]) - uncertainty['Total+']['value'], uncertainty['Total-']['value'] = symmetriseErrors(uncertainty['Total+']['value'], uncertainty['Total-']['value']) - formatting = (metbin, centralresult['value'], centralresult['error'], uncertainty['Total+']['value'], uncertainty['Total-']['value']) - text = '%s~\GeV & $%f \pm %.f (fit)^{+%f}_{-%.f} (sys)$ \\\\ \n' % formatting - printout += text - - for source, value in uncertainty.iteritems(): - unc_result = value - if not uncertainties.has_key(source): - uncertainties[source] = '\n' - uncertainties[source] += '=' * 60 - uncertainties[source] = '\n' - uncertainties[source] += 'Results for %s region, source = %s\n' % (bjetbin, source) - uncertainties[source] += '=' * 60 - uncertainties[source] += '\n' - formatting = (metbin, - unc_result['value'], - unc_result['error'], - ('%.2f' % (unc_result['value'] / centralresult['value'] * 100)) + '\%') - text = '%s~\GeV & $%f \pm %f (fit) (%s of central result)$ \\\\ \n' % formatting - uncertainties[source] += text - - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - for source, value in uncertainties.iteritems(): - printout += value -# output_file = open(savePath + analysis + '_normalisation_TTJet_result' + unfolding + '_' + bjetbin + '.tex', 'w') -# output_file.write(printout) -# output_file.close() - fileutils.writeStringToFile(printout, savePath + analysis + '_normalisation_TTJet_result' + unfolding + '_' + bjetbin + '.tex') - else: - print printout - -def printCrossSectionResult(result, analysis, toFile=True): - global metbins - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' - rows = {} - header = 'Measurement' - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - header += '& $\sigma_{meas}$ \met bin %s~\GeV' % metbin - for source in result[metbin].keys(): - fitresult = result[metbin][source] - relativeError = getRelativeError(fitresult['value'], fitresult['error']) - text = ' $%.2f \pm %.2f$ pb' % (fitresult['value'] * scale, fitresult['error'] * scale) + '(%.2f' % (relativeError * 100) + '\%)' - if rows.has_key(source): - rows[source].append(text) - else: - rows[source] = [source, text] - - header += '\\\\ \n' - printout += header - printout += '\hline\n' - for item in rows['central']: - printout += item + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - - for source in sorted(rows.keys()): - if source == 'central': - continue - for item in rows[source]: - printout += item + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - printout += '\hline \n\n' - - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - fileutils.writeStringToFile(printout, savePath + analysis + '_crosssection_result' + unfolding + '_' + bjetbin + '.tex') -# output_file = open(savePath + analysis + '_crosssection_result' + unfolding + '_' + bjetbin + '.tex', 'w') -# output_file.write(printout) -# output_file.close() - else: - print printout - -def printCrossSectionResultsForTTJetWithUncertanties(result, analysis, toFile=True): - global metbins - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' -# rows = {} - printout += '\met bin & $\sigma{meas}$ \\\\ \n' - printout += '\hline\n' - uncertainties = {} - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult = result[metbin]['central'] - uncertainty = calculateTotalUncertainty(result[metbin]) - uncertainty['Total+']['value'], uncertainty['Total-']['value'] = symmetriseErrors(uncertainty['Total+']['value'], uncertainty['Total-']['value']) - formatting = (metbin, centralresult['value'] * scale, centralresult['error'] * scale, - uncertainty['Total+']['value'] * scale, uncertainty['Total-']['value'] * scale) - text = '%s~\GeV & $%.2f \pm %.2f (fit)^{+%.2f}_{-%.2f} (sys)$ pb \\\\ \n' % formatting - printout += text - - for source, value in uncertainty.iteritems(): - unc_result = value - if not uncertainties.has_key(source): - uncertainties[source] = '\n' - uncertainties[source] += '=' * 60 - uncertainties[source] = '\n' - uncertainties[source] += 'Results for %s region, source = %s\n' % (bjetbin, source) - uncertainties[source] += '=' * 60 - uncertainties[source] += '\n' - formatting = (metbin, - unc_result['value'] * scale, - unc_result['error'] * scale, - ('%.2f' % (unc_result['value'] / centralresult['value'] * 100)) + '\%') - text = '%s~\GeV & $%.2f \pm %.2f (fit) (%s of central result)$ \\\\ \n' % formatting - uncertainties[source] += text - - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - for source, value in uncertainties.iteritems(): - printout += value - fileutils.writeStringToFile(printout, savePath + analysis + '_crosssection_main_result' + unfolding + '_' + bjetbin + '.tex') - else: - print printout - -def calculatePDFErrors(results): - centralResult = results['central'] - if centralResult.has_key('TTJet'): - centralResult = results['central']['TTJet'] - centralvalue = centralResult['value'] - negative = [] - positive = [] - - for index in range(1, 45): - weight = 'PDFWeights_%d' % index - result = results[weight] - if result.has_key('TTJet'): - result = results[weight]['TTJet'] - value = result['value'] - if index % 2 == 0: #even == negative - negative.append(value) - else: - positive.append(value) - pdf_max = numpy.sqrt(sum(max(x - centralvalue, y - centralvalue, 0) ** 2 for x, y in zip(negative, positive))) - pdf_min = numpy.sqrt(sum(max(centralvalue - x, centralvalue - y, 0) ** 2 for x, y in zip(negative, positive))) - return pdf_min, pdf_max - - -def plotNormalisationResults(results, analysis): - global metbins - for metbin in metbins: - for measurement, result in results[metbin].iteritems(): - if not measurement == 'central' and not measurement == 'QCD shape': - continue -# result = results[metbin]['central'] -# fit = result['fit'] - # fitvalues = result['fitvalues'] - templates = result['vectors'] - plots = {} - plot_templates = {} - - used_data = data_label[analysis] - samples = [ - used_data, - 'V+Jets', -# 'W+Jets', -# 'DYJetsToLL', - qcdLabel, - # 'Di-Boson', - 'Signal' -# 'TTJet', -# 'SingleTop' - ] - colors = { - used_data:0, - 'V+Jets':kGreen - 3, -# 'W+Jets':kGreen - 3, -# 'DYJetsToLL':kAzure - 2, - qcdLabel:kYellow, - # 'Di-Boson':kWhite, - 'Signal':kRed + 1, -# 'TTJet':kRed + 1, -# 'SingleTop': kMagenta - } - for sample in samples: - template = templates[sample] - plot = TH1F(sample + metbin + bjetbin + measurement + analysis, sample, 13, 0, 2.6) - plot_template = TH1F(sample + metbin + bjetbin + measurement + analysis + '_template', sample, 13, 0, 2.6) - bin_i = 1 - for value in template: - plot.SetBinContent(bin_i, value) - plot_template.SetBinContent(bin_i, value) - bin_i += 1 - plot.Scale(result[sample]['value']) - # plot.Rebin(rebin) - plot.SetYTitle('Events/0.2') - plot_template.SetYTitle('normalised to unit area/0.2') - if analysis == 'EPlusJets': - plot.SetXTitle('|#eta(e)|') - plot_template.SetXTitle('|#eta(e)|') - else: - plot.SetXTitle('|#eta(#mu)|') - plot_template.SetXTitle('|#eta(#mu)|') - plot.SetMarkerStyle(20) - - - if not sample == used_data: - plot.SetFillColor(colors[sample]) -# plot.SetLineColor(colors[sample]) - plot_template.SetLineColor(colors[sample]) - plot_template.SetLineWidth(5) - plots[sample] = plot - plot_templates[sample] = plot_template - plots['Background'] = plots['V+Jets'].Clone() - plots['Background'] += plots[qcdLabel] - c = TCanvas("Fit_" + metbin + bjetbin + measurement + analysis, "Differential cross section", 1600, 1200) - max_y = plots[used_data].GetMaximum() - plots[used_data].SetMaximum(max_y * 1.5) - plots[used_data].Draw('error') - mcStack = THStack("MC", "MC") - # mcStack.Add(plots['Di-Boson']); -# mcStack.Add(plots[qcdLabel]); -# mcStack.Add(plots['V+Jets']); - mcStack.Add(plots['Background']); - mcStack.Add(plots['Signal']); -# mcStack.Add(plots['DYJetsToLL']); -# mcStack.Add(plots['W+Jets']); -# mcStack.Add(plots['SingleTop']); -# mcStack.Add(plots['TTJet']); - mcStack.Draw('hist same') -# fit.Draw('same') - plots[used_data].Draw('error same') - - legend = plotting.create_legend(x0=0.65, y0 = 0.95, x1=0.94, y1=0.55) - legend.AddEntry(plots[used_data], "data", 'P') - legend.AddEntry(plots['Signal'], 't#bar{t} + Single-Top', 'F') -# legend.AddEntry(plots['TTJet'], 't#bar{t}', 'F') -# legend.AddEntry(plots['SingleTop'], 'Single-Top', 'F') - legend.AddEntry(plots['Background'], 'background', 'F') -# legend.AddEntry(plots['V+Jets'], 'V+Jets', 'F') -# legend.AddEntry(plots['W+Jets'], 'W#rightarrowl#nu', 'F') -# legend.AddEntry(plots['DYJetsToLL'], 'Z/#gamma*#rightarrowl^{+}l^{-}', 'F') -# legend.AddEntry(plots[qcdLabel], 'QCD/#gamma + jets', 'F') - - # legend.AddEntry(plots['Di-Boson'], 'VV + X', 'F') - legend.Draw() - metLabel = TPaveText(0.2, 0.8, 0.6, 0.95, "NDC") - mytext = TPaveText(0.5, 0.97, 1, 1.01, "NDC") - channelLabel = TPaveText(0.18, 0.97, 0.5, 1.01, "NDC") - if analysis == 'EPlusJets': - channelLabel.AddText("e, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'MuPlusJets': - channelLabel.AddText("#mu, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'Combination': - channelLabel.AddText("combined, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - - mytext.AddText("CMS Preliminary, L = %.1f fb^{-1} @ #sqrt{s} = 8 TeV" % (5.8)); - metLabel.AddText(metbin_latex[metbin]) - mytext.SetFillStyle(0) - mytext.SetBorderSize(0) - mytext.SetTextFont(42) - mytext.SetTextAlign(13) - - metLabel.SetFillStyle(0) - metLabel.SetBorderSize(0) - metLabel.SetTextFont(42) - metLabel.SetTextAlign(13) - - channelLabel.SetFillStyle(0) - channelLabel.SetBorderSize(0) - channelLabel.SetTextFont(42) - channelLabel.SetTextAlign(13) - mytext.Draw() - metLabel.Draw() - channelLabel.Draw() - - prefix = 'EPlusJets_electron' - if analysis == 'MuPlusJets': - prefix = 'MuPlusJets_muon' - elif analysis == 'EPlusJets': - prefix = 'EPlusJets_electron' - else: - prefix = analysis - plotting.saveAs(c, prefix + '_AbsEta_fit_' + measurement + '_' + metbin + '_' + bjetbin, - outputFormat_plots, - savePath + measurement) - c = TCanvas(prefix + '_AbsEta_templates_' + metbin + bjetbin + measurement, "Differential cross section", 1600, 1200) -# max_y = plot_templates['TTJet'].GetMaximum() -# plot_templates['TTJet'].SetMaximum(max_y * 1.5) -# plot_templates['TTJet'].Draw('hist') - max_y = plot_templates['Signal'].GetMaximum() - plot_templates['Signal'].SetMaximum(max_y * 1.5) - plot_templates['Signal'].Draw('hist') - plot_templates[qcdLabel].Draw('hist same') -# plot_templates['DYJetsToLL'].Draw('hist same') -# plot_templates['W+Jets'].Draw('hist same') - plot_templates['V+Jets'].Draw('hist same') -# plot_templates['SingleTop'].Draw('hist same') - - legend = plotting.create_legend(x0=0.696, y0 = 0.95, x1=0.94, y1=0.65) - legend.AddEntry(plot_templates['Signal'], 't#bar{t} + Single-Top', 'L') -# legend.AddEntry(plot_templates['TTJet'], 't#bar{t}', 'L') -# legend.AddEntry(plot_templates['SingleTop'], 'Single-Top', 'L') - legend.AddEntry(plot_templates['V+Jets'], 'V+Jets', 'L') -# legend.AddEntry(plot_templates['W+Jets'], 'W#rightarrowl#nu', 'L') -# legend.AddEntry(plot_templates['DYJetsToLL'], 'Z/#gamma*#rightarrowl^{+}l^{-}', 'L') - legend.AddEntry(plot_templates[qcdLabel], 'QCD/#gamma + jets', 'L') - - # legend.AddEntry(plots['Di-Boson'], 'VV + X', 'F') - legend.Draw() - mytext.Draw() - metLabel.Draw() - channelLabel.Draw() - - plotting.saveAs(c, prefix + '_AbsEta_templates_' + measurement + '_' + metbin + '_' + bjetbin, - outputFormat_plots, - savePath + measurement) - -def plotCrossSectionResults(result, analysis, compareToSystematic=False): - - arglist = array('d', [0, 25, 45, 70, 100, 150, 200]) - c = TCanvas("test", "Differential cross section", 1600, 1200) - plot = TH1F("measurement_" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}} [pb GeV^{-1}]', len(arglist) - 1, arglist) - plotMADGRAPH = TH1F("measurement_MC_MADGRAPH" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}}', len(arglist) - 1, arglist) - plotPOWHEG = TH1F("measurement_MC_POWHEG" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}}', len(arglist) - 1, arglist) -# plotPYTHIA6 = TH1F("measurement_MC_PYTHIA6" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}}', len(arglist) - 1, arglist) - plotnoCorr_mcatnlo = TH1F("measurement_MC_MCatNLO" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}}', len(arglist) - 1, arglist) - plot.GetXaxis().SetTitleSize(0.05) - plot.GetYaxis().SetTitleSize(0.05) - plot.SetMinimum(0) - plot.SetMaximum(80) - plot.SetMarkerSize(2) - plot.SetMarkerStyle(20) - plotMADGRAPH.SetLineColor(kRed + 1) - plotMADGRAPH.SetLineStyle(7) - plotPOWHEG.SetLineColor(kBlue) - plotPOWHEG.SetLineStyle(7) -# plotPYTHIA6.SetLineColor(kGreen + 4) -# plotPYTHIA6.SetLineStyle(7) - plotnoCorr_mcatnlo.SetLineColor(kMagenta + 3) - plotnoCorr_mcatnlo.SetLineStyle(7) - - legend = plotting.create_legend() - legend.AddEntry(plot, 'data', 'P') - if compareToSystematic: - legend.AddEntry(plotMADGRAPH, 't#bar{t} (Q^{2} down)', 'l') - legend.AddEntry(plotPOWHEG, 't#bar{t} (Q^{2} up)', 'l') -# legend.AddEntry(plotPYTHIA6, 't#bar{t} (matching down)', 'l') - legend.AddEntry(plotnoCorr_mcatnlo, 't#bar{t} (matching up)', 'l') - else: - legend.AddEntry(plotMADGRAPH, 't#bar{t} (MADGRAPH)', 'l') - legend.AddEntry(plotPOWHEG, 't#bar{t} (POWHEG)', 'l') -# legend.AddEntry(plotPYTHIA6, 't#bar{t} (PYTHIA6)', 'l') - legend.AddEntry(plotnoCorr_mcatnlo, 't#bar{t} (MC@NLO)', 'l') - - bin_i = 1 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult = result[metbin]['central'] - plot.SetBinContent(bin_i, centralresult['value'] * scale) - if compareToSystematic: - plotMADGRAPH.SetBinContent(bin_i, result[metbin]['TTJet scale -']['MADGRAPH'] * scale) - plotPOWHEG.SetBinContent(bin_i, result[metbin]['TTJet scale +']['MADGRAPH'] * scale) -# plotPYTHIA6.SetBinContent(bin_i, result[metbin]['TTJet matching -']['MADGRAPH'] * scale) - plotnoCorr_mcatnlo.SetBinContent(bin_i, result[metbin]['TTJet matching +']['MADGRAPH'] * scale) - else: - plotMADGRAPH.SetBinContent(bin_i, centralresult['MADGRAPH'] * scale) - plotPOWHEG.SetBinContent(bin_i, centralresult['POWHEG'] * scale) -# plotPYTHIA6.SetBinContent(bin_i, centralresult['PYTHIA6'] * scale) - plotnoCorr_mcatnlo.SetBinContent(bin_i, centralresult['MCatNLO'] * scale) - bin_i += 1 - plotAsym = TGraphAsymmErrors(plot) - plotStatErr = TGraphAsymmErrors(plot) - bin_i = 0 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult = result[metbin]['central'] - uncertainty = calculateTotalUncertainty(result[metbin], compareToSystematic) - uncertainty['Total+']['value'], uncertainty['Total-']['value'] = symmetriseErrors(uncertainty['Total+']['value'], uncertainty['Total-']['value']) - error_up = sqrt(centralresult['error'] ** 2 + uncertainty['Total+']['value'] ** 2) * scale - error_down = sqrt(centralresult['error'] ** 2 + uncertainty['Total-']['value'] ** 2) * scale - plotAsym.SetPointEYhigh(bin_i, error_up) - plotAsym.SetPointEYlow(bin_i, error_down) - plotStatErr.SetPointEYhigh(bin_i, centralresult['error']) - plotStatErr.SetPointEYlow(bin_i, centralresult['error']) - bin_i += 1 - plotAsym.SetLineWidth(3) -# plotStatErr.SetLineStyle(2) - plotStatErr.SetLineWidth(3) -# plotAsym.SetMarkerSize(2) -# plotAsym.SetMarkerStyle(20) - plot.Draw('P') -# gStyle.SetErrorX(0.4) - plotMADGRAPH.Draw('hist same') - plotPOWHEG.Draw('hist same') -# plotPYTHIA6.Draw('hist same') - plotnoCorr_mcatnlo.Draw('hist same') - gStyle.SetEndErrorSize(20) - plotStatErr.Draw('same P') -# gStyle.SetEndErrorSize(0) - plotAsym.Draw('same P Z') - legend.Draw() - mytext = TPaveText(0.5, 0.97, 1, 1.01, "NDC") - channelLabel = TPaveText(0.18, 0.97, 0.5, 1.01, "NDC") - if analysis == 'EPlusJets': - channelLabel.AddText("e, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'MuPlusJets': - channelLabel.AddText("#mu, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'Combination': - channelLabel.AddText("combined, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - mytext.AddText("CMS Preliminary, L = %.1f fb^{-1} at #sqrt{s} = 8 TeV" % (5.8)); - - mytext.SetFillStyle(0) - mytext.SetBorderSize(0) - mytext.SetTextFont(42) - mytext.SetTextAlign(13) - - channelLabel.SetFillStyle(0) - channelLabel.SetBorderSize(0) - channelLabel.SetTextFont(42) - channelLabel.SetTextAlign(13) - mytext.Draw() - channelLabel.Draw() - - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - prefix = analysis - if compareToSystematic: - plotting.saveAs(c, prefix + '_diff_MET_xsection_compareSystematics' + unfolding + '_' + bjetbin, outputFormat_plots, savePath) - else: - plotting.saveAs(c, prefix + '_diff_MET_xsection' + unfolding + '_' + bjetbin, outputFormat_plots, savePath) - -def printNormalisedCrossSectionResult(result, analysis, toFile=True): - global metbins - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' - rows = {} - header = 'Measurement' - for metbin in metbins: - header += '& $\sigma_{meas}$ \met bin %s~\GeV' % metbin_latex_tables[metbin] -# width = metbin_widths[metbin] - for source in result[metbin].keys(): - fitresult = result[metbin][source] - scale = 100 - relativeError = getRelativeError(fitresult['value'], fitresult['error']) -# 0--25~\GeV & $\left(0.61 \pm 0.03 \text{ (fit)} \pm 0.06 \text{ (syst.)}\right) \times 10^{-2}\, \GeV^{-1}$\\ - text = ' $(%.2f \pm %.2f) \cdot 10^{-2}$ ' % (fitresult['value'] * scale, fitresult['error'] * scale) + '(%.2f' % (relativeError * 100) + '\%)' -# text = ' $%.2f \pm %.2f $ ' % (fitresult['value']*scale,fitresult['error']*scale) + '(%.2f' % (relativeError * 100) + '\%)' - if rows.has_key(source): - rows[source].append(text) - else: - rows[source] = [source, text] - - header += '\\\\ \n' - printout += header - printout += '\hline\n' - for item in rows['central']: - printout += item + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - - for source in sorted(rows.keys()): - if source == 'central': - continue - for item in rows[source]: - printout += item + '&' - printout = printout.rstrip('&') - printout += '\\\\ \n' - printout += '\hline \n\n' - - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - output_file = open(savePath + analysis + '_normalised_crosssection_result' + unfolding + '_' + bjetbin + '.tex', 'w') - output_file.write(printout) - output_file.close() - else: - print printout - -def printNormalisedCrossSectionResultsForTTJetWithUncertanties(result, analysis, toFile=True): - global metbins, doBinByBinUnfolding - printout = '\n' - printout += '=' * 60 - printout = '\n' - printout += 'Results for %s region\n' % bjetbin - printout += '=' * 60 - printout += '\n' -# rows = {} - printout += '\met bin & $\sigma{meas}$ \\\\ \n' - printout += '\hline\n' - uncertainties = {} - header = 'Uncertainty' - for metbin in metbins: - header += '&\met bin %s' % metbin_latex_tables[metbin] -# width = metbin_widths[metbin] - centralresult = result[metbin]['central'] - uncertainty = calculateTotalUncertainty(result[metbin]) - uncertainty['Total+']['value'], uncertainty['Total-']['value'] = symmetriseErrors(uncertainty['Total+']['value'], uncertainty['Total-']['value']) - scale = 100# / width - formatting = (metbin_latex_tables[metbin], centralresult['value'] * scale, - centralresult['error'] * scale, uncertainty['Total+']['value'] * scale, - uncertainty['Total-']['value'] * scale) - text = '%s & $%.2f \pm %.2f (fit)^{+%.2f}_{-%.2f} (sys) \cdot 10^{-2}$\\\\ \n' % formatting - if doSymmetricErrors: - formatting = (metbin_latex_tables[metbin], centralresult['value'] * scale, - centralresult['error'] * scale, uncertainty['Total+']['value'] * scale) - text = '%s & $\\left(%.2f \\pm %.2f \\text{ (fit)} \pm %.2f \\text{ (syst.)}\\right) \\times 10^{-2}\, \\GeV^{-1}$\\\\ \n' % formatting - #0--25~\GeV & $\left(0.61 \pm 0.03 \text{ (fit)} \pm 0.06 \text{ (syst.)}\right) \times 10^{-2}\, \GeV^{-1}$\\ - printout += text - for source in uncertainty.keys(): - unc_result = uncertainty[source] - if not uncertainties.has_key(source): - if source in metsystematics_sources: - uncertainties[source] = metsystematics_sources_latex[source] + ' & ' - else: - uncertainties[source] = source + ' & ' - relativeError = getRelativeError(centralresult['value'], unc_result['value']) -# text = ' $(%.2f \pm %.2f) \cdot 10^{-2} $ ' % (unc_result['value']*scale,unc_result['error']*scale) + '(%.2f' % (relativeError * 100) + '\%) &' - text = '%.2f' % (relativeError * 100) + '\% &' -# text = ' $%.2f \pm %.2f $ ' % (unc_result['value']*scale,unc_result['error']*scale) + '(%.2f' % (relativeError * 100) + '\%) &' - uncertainties[source] += text - - if toFile: - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - output_file = open(savePath + analysis + '_normalised_crosssection_main_result' + unfolding + '_' + bjetbin + '.tex', 'w') - output_file.write(printout) - header += '\\\\ \n' - output_file.write(header) - for source in sorted(uncertainties.keys()): - value = uncertainties[source] - value = value.rstrip('&') - value += '\\\\ \n' - output_file.write(value) - output_file.close() - else: - print printout - -def plotNormalisedCrossSectionResults(result, analysis, compareToSystematic=False): - - arglist = array('d', [0, 25, 45, 70, 100, 150, 200]) - c = TCanvas("test", "Differential cross section", 1600, 1200) - plot = TH1F("measurement_" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist) - 1, arglist) - plotMADGRAPH = TH1F("measurement_MC_MADGRAPH" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist) - 1, arglist) - plotPOWHEG = TH1F("measurement_MC_POWHEG" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist) - 1, arglist) -# plotPYTHIA6 = TH1F("measurement_MC_PYTHIA6" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist) - 1, arglist) - plotnoCorr_mcatnlo = TH1F("measurement_MC_MCatNLO" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist) - 1, arglist) - plot.GetXaxis().SetTitleSize(0.05) - plot.GetYaxis().SetTitleSize(0.05) - plot.SetMinimum(0) - plot.SetMaximum(0.02) - plot.SetMarkerSize(2) - plot.SetMarkerStyle(20) - plotMADGRAPH.SetLineColor(kRed + 1) -# plotMADGRAPH.SetLineWidth(2) - plotMADGRAPH.SetLineStyle(7) - plotPOWHEG.SetLineColor(kBlue) - plotPOWHEG.SetLineStyle(7) -# plotPOWHEG.SetLineWidth(2) -# plotPYTHIA6.SetLineColor(kGreen + 4) -# plotPYTHIA6.SetLineStyle(7) -# plotPYTHIA6.SetLineWidth(2) - plotnoCorr_mcatnlo.SetLineColor(kMagenta + 3) -# plotnoCorr_mcatnlo.SetLineWidth(2) - plotnoCorr_mcatnlo.SetLineStyle(7) - legend = plotting.create_legend(x0=0.6, y1=0.5) - legend.AddEntry(plot, 'data', 'P') - if compareToSystematic: - legend.AddEntry(plotMADGRAPH, 't#bar{t} (Q^{2} down)', 'l') - legend.AddEntry(plotPOWHEG, 't#bar{t} (Q^{2} up)', 'l') -# legend.AddEntry(plotPYTHIA6, 't#bar{t} (matching down)', 'l') - legend.AddEntry(plotnoCorr_mcatnlo, 't#bar{t} (matching up)', 'l') - else: - legend.AddEntry(plotMADGRAPH, 't#bar{t} (MADGRAPH)', 'l') - legend.AddEntry(plotPOWHEG, 't#bar{t} (POWHEG)', 'l') -# legend.AddEntry(plotPYTHIA6, 't#bar{t} (PYTHIA6)', 'l') - legend.AddEntry(plotnoCorr_mcatnlo, 't#bar{t} (MC@NLO)', 'l') - bin_i = 1 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult = result[metbin]['central'] - plot.SetBinContent(bin_i, centralresult['value'] * scale) - if compareToSystematic: - plotMADGRAPH.SetBinContent(bin_i, result[metbin]['TTJet scale -']['MADGRAPH'] * scale) - plotPOWHEG.SetBinContent(bin_i, result[metbin]['TTJet scale +']['MADGRAPH'] * scale) -# plotPYTHIA6.SetBinContent(bin_i, result[metbin]['TTJet matching -']['MADGRAPH'] * scale) - plotnoCorr_mcatnlo.SetBinContent(bin_i, result[metbin]['TTJet matching +']['MADGRAPH'] * scale) - else: - plotMADGRAPH.SetBinContent(bin_i, centralresult['MADGRAPH'] * scale) - plotPOWHEG.SetBinContent(bin_i, centralresult['POWHEG'] * scale) -# plotPYTHIA6.SetBinContent(bin_i, centralresult['PYTHIA6'] * scale) - plotnoCorr_mcatnlo.SetBinContent(bin_i, centralresult['MCatNLO'] * scale) - bin_i += 1 - plotAsym = TGraphAsymmErrors(plot) - plotStatErr = TGraphAsymmErrors(plot) - bin_i = 0 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult = result[metbin]['central'] - uncertainty = calculateTotalUncertainty(result[metbin], compareToSystematic) - uncertainty['Total+']['value'], uncertainty['Total-']['value'] = symmetriseErrors(uncertainty['Total+']['value'], uncertainty['Total-']['value']) - error_up = sqrt(centralresult['error'] ** 2 + uncertainty['Total+']['value'] ** 2) * scale - error_down = sqrt(centralresult['error'] ** 2 + uncertainty['Total-']['value'] ** 2) * scale - if DEBUG: - print centralresult['error'], uncertainty['Total+']['value'], error_up - print centralresult['error'], uncertainty['Total-']['value'], error_down - plotStatErr.SetPointEYhigh(bin_i, centralresult['error']) - plotStatErr.SetPointEYlow(bin_i, centralresult['error']) - plotAsym.SetPointEYhigh(bin_i, error_up) - plotAsym.SetPointEYlow(bin_i, error_down) - bin_i += 1 - plotAsym.SetLineWidth(3) -# plotStatErr.SetLineStyle(2) - plotStatErr.SetLineWidth(3) - - plot.Draw('P') -# gStyle.SetErrorX(0.4) - plotMADGRAPH.Draw('hist same') - plotPOWHEG.Draw('hist same') -# plotPYTHIA6.Draw('hist same') - plotnoCorr_mcatnlo.Draw('hist same') - gStyle.SetEndErrorSize(20) - plotStatErr.Draw('same P') -# gStyle.SetEndErrorSize(0) - plotAsym.Draw('same P Z') - legend.Draw() - mytext = TPaveText(0.5, 0.97, 1, 1.01, "NDC") - channelLabel = TPaveText(0.18, 0.97, 0.5, 1.01, "NDC") - if analysis == 'EPlusJets': - channelLabel.AddText("e, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'MuPlusJets': - channelLabel.AddText("#mu, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - elif analysis == 'Combination': - channelLabel.AddText("combined, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - mytext.AddText("CMS Preliminary, L = %.1f fb^{-1} at #sqrt{s} = 8 TeV" % (5.8)); - - mytext.SetFillStyle(0) - mytext.SetBorderSize(0) - mytext.SetTextFont(42) - mytext.SetTextAlign(13) - - channelLabel.SetFillStyle(0) - channelLabel.SetBorderSize(0) - channelLabel.SetTextFont(42) - channelLabel.SetTextAlign(13) - mytext.Draw() - if not analysis == 'Combination': - channelLabel.Draw() - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - if compareToSystematic: - plotting.saveAs(c, analysis + '_diff_MET_norm_xsection_compareSystematics' + unfolding + '_' + bjetbin, outputFormat_plots, savePath) - else: - plotting.saveAs(c, analysis + '_diff_MET_norm_xsection' + unfolding + '_' + bjetbin, outputFormat_plots, savePath) - -def plotNormalisedCrossSectionResultsAllChannels(result_electron, result_muon, result_combined): - arglist_electron = array('d', [0, 15, 45, 60, 100, 140, 180]) - arglist_muon = array('d', [0, 35, 45, 80, 100, 160, 200]) - arglist_combined = array('d', [0, 25, 45, 70, 100, 150, 200]) - c = TCanvas("test", "Differential cross section", 1600, 1200) - plot_electron = TH1F("electron_measurement_" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist_electron) - 1, arglist_electron) - plot_muon = TH1F("muon_measurement_" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist_muon) - 1, arglist_muon) - plot_combined = TH1F("combined_measurement_" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{1}{#sigma} #frac{d#sigma}{dE_{T}^{miss}} [GeV^{-1}]', len(arglist_combined) - 1, arglist_combined) - plotMADGRAPH = TH1F("measurement_MC_MADGRAPH" + bjetbin, 'Differential cross section; E_{T}^{miss} [GeV];#frac{#partial#sigma}{dE_{T}^{miss}}', len(arglist_combined) - 1, arglist_combined) - plot_combined.GetXaxis().SetTitleSize(0.05) - plot_combined.GetYaxis().SetTitleSize(0.05) - plot_combined.SetMinimum(0) - plot_combined.SetMaximum(0.02) - plot_combined.SetMarkerSize(2) - plot_combined.SetMarkerStyle(20) - - plot_electron.SetMarkerStyle(21); - plot_electron.SetMarkerColor(4) - plot_electron.SetLineColor(4) - plot_electron.SetMarkerSize(2) - - plot_muon.SetMarkerStyle(22); - plot_muon.SetMarkerColor(kAzure - 9) - plot_muon.SetLineColor(7) - plot_muon.SetMarkerSize(2) - - plotMADGRAPH.SetLineColor(kRed + 1) - - legend = plotting.create_legend(x0=0.6, y1=0.5) - legend.AddEntry(plot_electron, 'e+jets', 'P') - legend.AddEntry(plot_muon, '#mu+jets', 'P') - legend.AddEntry(plot_combined, 'combined', 'P') - legend.AddEntry(plotMADGRAPH, 'MADGRAPH', 'l') - bin_i = 1 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult_electron = result_electron[metbin]['central'] - centralresult_muon = result_muon[metbin]['central'] - centralresult_combined = result_combined[metbin]['central'] - plot_electron.SetBinContent(bin_i, centralresult_electron['value'] * scale) - plot_muon.SetBinContent(bin_i, centralresult_muon['value'] * scale) - plot_combined.SetBinContent(bin_i, centralresult_combined['value'] * scale) - plotMADGRAPH.SetBinContent(bin_i, centralresult_combined['MADGRAPH'] * scale) - bin_i += 1 - plotAsym_electron = TGraphAsymmErrors(plot_electron) - plotStatErr_electron = TGraphAsymmErrors(plot_electron) - plotAsym_muon = TGraphAsymmErrors(plot_muon) - plotStatErr_muon = TGraphAsymmErrors(plot_muon) - plotAsym_combined = TGraphAsymmErrors(plot_combined) - plotStatErr_combined = TGraphAsymmErrors(plot_combined) - - plotAsym_electron.SetLineColor(4) - plotAsym_muon.SetLineColor(kAzure - 9) - -# plotStatErr_electron.SetLineStyle(2) -# plotStatErr_muon.SetLineStyle(2) -# plotStatErr_combined.SetLineStyle(2) - - plotAsym_electron.SetLineWidth(3) - plotStatErr_electron.SetLineWidth(3) - plotAsym_muon.SetLineWidth(3) - plotStatErr_muon.SetLineWidth(3) - plotAsym_combined.SetLineWidth(3) - plotStatErr_combined.SetLineWidth(3) - bin_i = 0 - for metbin in metbins: -# width = metbin_widths[metbin] - scale = 1# / width - centralresult_electron = result_electron[metbin]['central'] - centralresult_muon = result_muon[metbin]['central'] - centralresult_combined = result_combined[metbin]['central'] - - uncertainty_electron = calculateTotalUncertainty(result_electron[metbin]) - uncertainty_electron['Total+']['value'], uncertainty_electron['Total-']['value'] = symmetriseErrors(uncertainty_electron['Total+']['value'], uncertainty_electron['Total-']['value']) - error_up_electron = sqrt(centralresult_electron['error'] ** 2 + uncertainty_electron['Total+']['value'] ** 2) * scale - error_down_electron = sqrt(centralresult_electron['error'] ** 2 + uncertainty_electron['Total-']['value'] ** 2) * scale - - uncertainty_muon = calculateTotalUncertainty(result_muon[metbin]) - uncertainty_muon['Total+']['value'], uncertainty_muon['Total-']['value'] = symmetriseErrors(uncertainty_muon['Total+']['value'], uncertainty_muon['Total-']['value']) - error_up_muon = sqrt(centralresult_muon['error'] ** 2 + uncertainty_muon['Total+']['value'] ** 2) * scale - error_down_muon = sqrt(centralresult_muon['error'] ** 2 + uncertainty_muon['Total-']['value'] ** 2) * scale - - uncertainty_combined = calculateTotalUncertainty(result_combined[metbin]) - uncertainty_combined['Total+']['value'], uncertainty_combined['Total-']['value'] = symmetriseErrors(uncertainty_combined['Total+']['value'], uncertainty_combined['Total-']['value']) - error_up_combined = sqrt(centralresult_combined['error'] ** 2 + uncertainty_combined['Total+']['value'] ** 2) * scale - error_down_combined = sqrt(centralresult_combined['error'] ** 2 + uncertainty_combined['Total-']['value'] ** 2) * scale - - plotAsym_electron.SetPointEYhigh(bin_i, error_up_electron) - plotAsym_electron.SetPointEYlow(bin_i, error_down_electron) - - plotAsym_muon.SetPointEYhigh(bin_i, error_up_muon) - plotAsym_muon.SetPointEYlow(bin_i, error_down_muon) - - plotAsym_combined.SetPointEYhigh(bin_i, error_up_combined) - plotAsym_combined.SetPointEYlow(bin_i, error_down_combined) - - plotStatErr_electron.SetPointEYhigh(bin_i, centralresult_electron['error']) - plotStatErr_electron.SetPointEYlow(bin_i, centralresult_electron['error']) - - plotStatErr_muon.SetPointEYhigh(bin_i, centralresult_muon['error']) - plotStatErr_muon.SetPointEYlow(bin_i, centralresult_muon['error']) - - plotStatErr_combined.SetPointEYhigh(bin_i, centralresult_combined['error']) - plotStatErr_combined.SetPointEYlow(bin_i, centralresult_combined['error']) - - - bin_i += 1 - plot_combined.Draw('P') -# gStyle.SetErrorX(0.4) - plotMADGRAPH.Draw('hist same') - gStyle.SetEndErrorSize(20) - plotStatErr_electron.Draw('same P') - plotStatErr_muon.Draw('same P') - plotStatErr_combined.Draw('same P') -# gStyle.SetEndErrorSize(0) - plotAsym_electron.Draw('same P Z') - plotAsym_muon.Draw('same P Z') - plotAsym_combined.Draw('same P Z') - legend.Draw() - mytext = TPaveText(0.5, 0.97, 1, 1.01, "NDC") - channelLabel = TPaveText(0.18, 0.97, 0.5, 1.01, "NDC") - channelLabel.AddText("combined, %s, %s" % ("#geq 4 jets", BjetBinsLatex[bjetbin])) - mytext.AddText("CMS Preliminary, L = %.1f fb^{-1} at #sqrt{s} = 8 TeV" % (5.8)); - - mytext.SetFillStyle(0) - mytext.SetBorderSize(0) - mytext.SetTextFont(42) - mytext.SetTextAlign(13) - - channelLabel.SetFillStyle(0) - channelLabel.SetBorderSize(0) - channelLabel.SetTextFont(42) - channelLabel.SetTextAlign(13) - mytext.Draw() - #channelLabel.Draw() - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - plotting.saveAs(c, 'AllChannels_diff_MET_norm_xsection' + unfolding + '_' + bjetbin, outputFormat_plots, savePath) - -def getMeasurementAndErrors(input_result): - result = {} -# skipErrors = ['PDFWeights_%d' % index for index in range(1, 45)] -# skipErrors.append('central')#skip central value! - for metbin in metbins: - result[metbin] = {} - current = input_result[metbin] - central = current['central'] - result[metbin]['measurement'] = central - uncertainties = calculateTotalUncertainty(current) - result[metbin].update(uncertainties) - - return result - -def saveAsJSON(result, filename): - unfolding = '_unfolded' - if not doBinByBinUnfolding: - unfolding = '' - #remove fit from list - for metbin in metbins: - result[metbin]['measurement']['fit'] = 'cannot encode' - output_file = open(savePath + filename + unfolding + '_' + bjetbin + '_JSON.txt', 'w') - output_file.write(json.dumps(result, indent=4, skipkeys=True)) - output_file.close() - -def getCorrections(analysis): - from purityAndStability_METbins import fileTemplate - inputFileName = fileTemplate % (analysis, bjetbin) - print 'Loading correction factors from:' - print inputFileName - return fileutils.readJSONFile(inputFileName) - -def loadAcceptanceCorrections(analysis): - temp = 'data/acceptanceFactors/acceptanceFactors_%s_2orMoreBtags_JSON.txt' - inputFileName = temp % analysis - print 'Loading acceptance correction factors from:' - print inputFileName - return fileutils.readJSONFile(inputFileName) - -def loadContaminationCorrections(analysis): - temp = 'data/contaminationFactors/contaminationFactors_%s_2orMoreBtags_JSON.txt' - inputFileName = temp % analysis - print 'Loading contamination correction factors from:' - print inputFileName - return fileutils.readJSONFile(inputFileName) - -def setMETSystematics(metType): - global metsystematics_sources, metsystematics_sources_latex - prefix = '' - if metType == 'patMETsPFlow': - prefix = 'patPFMet' - elif metType == 'patType1CorrectedPFMet': - prefix = 'patType1CorrectedPFMet' - else: - prefix = 'patType1p2CorrectedPFMet' - metsystematics_sources = [ - prefix + "ElectronEnUp", - prefix + "ElectronEnDown", - prefix + "MuonEnUp", - prefix + "MuonEnDown", - prefix + "TauEnUp", - prefix + "TauEnDown", - prefix + "JetResUp", - prefix + "JetResDown", - prefix + "JetEnUp", - prefix + "JetEnDown", - prefix + "UnclusteredEnUp", - prefix + "UnclusteredEnDown" - ] - - metsystematics_sources_latex = { - prefix + "ElectronEnUp":'Electron energy $+1\sigma$', - prefix + "ElectronEnDown":'Electron energy $-1\sigma$', - prefix + "MuonEnUp":'Muon energy $+1\sigma$', - prefix + "MuonEnDown":'Muon energy $-1\sigma$', - prefix + "TauEnUp":'Tau energy $+1\sigma$', - prefix + "TauEnDown":'Tau energy $-1\sigma$', - prefix + "JetResUp":'Jet resolution $+1\sigma$', - prefix + "JetResDown":'Jet resolution $-1\sigma$', - prefix + "JetEnUp":'Jet energy $+1\sigma$', - prefix + "JetEnDown":'Jet energy $-1\sigma$', - prefix + "UnclusteredEnUp":'Unclustered energy $+1\sigma$', - prefix + "UnclusteredEnDown":'Unclustered energy $-1\sigma$' - } - -def symmetriseErrors(error1, error2): - if not doSymmetricErrors: - return error1, error2 - - error1, error2 = abs(error1), abs(error2) - if error1 > error2: - return error1, error1 - - return error2, error2 - -if __name__ == '__main__': - DEBUG = False - completeAnalysisTimer = Timer() - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - RooMsgService.instance().setGlobalKillBelow(RooFit.FATAL) - - plotting.setStyle() - - parser = OptionParser() - parser.add_option("-b", "--bjetbin", dest="bjetbin", default='2m', - help="set b-jet multiplicity for analysis. Options: exclusive: 0-3, inclusive (N or more): 0m, 1m, 2m, 3m, 4m") - parser.add_option("-m", "--metType", dest="metType", default='type1', - help="set MET input for analysis.") - parser.add_option("-u", "--unfolding", - action="store_false", dest="unfolding", default=True, - help="use unfolding of MET") - parser.add_option("-r", "--rooFit", - action="store_true", dest="useRooFit", default=False, - help="Use RooFit for fitting") - parser.add_option("-t", "--test", - action="store_true", dest="test", default=False, - help="Test analysis on first met bin only") - parser.add_option("-c", "--constrain", dest="constrain", default=' ', #default='QCD,Z/W', - help="Sets which constrains to use. Constrains separated by commas: QCD, Z/W, ZJets, WJets, VV") - parser.add_option("-a", "--analysisType", dest="analysisType", default='EPlusJets', - help="set analysis type: EPlusJets or MuPlusJets") - #more for: plot templates, plot fits - translateOptions = { - '0':'0btag', - '1':'1btag', - '2':'2btags', - '3':'3btags', - '0m':'0orMoreBtag', - '1m':'1orMoreBtag', - '2m':'2orMoreBtags', - '3m':'3orMoreBtags', - '4m':'4orMoreBtags', - #mettype: - 'pf':'patMETsPFlow', - 'type1':'patType1CorrectedPFMet', - 'type1p2':'patType1p2CorrectedPFMet' - } - - (options, args) = parser.parse_args() - bjetbin = translateOptions[options.bjetbin] - metType = translateOptions[options.metType] - doBinByBinUnfolding = options.unfolding - use_RooFit = options.useRooFit - - setMETSystematics(metType) - - from purityAndStability_METbins import fileTemplate - inputFileName = fileTemplate % ('EPlusJets', bjetbin) - correctionFactors, acceptanceFactors, contaminationFactors = {}, {}, {} -# correctionFactors['EPlusJets'] = getCorrections('EPlusJets') -# correctionFactors['MuPlusJets'] = getCorrections('MuPlusJets') -# acceptanceFactors['EPlusJets'] = loadAcceptanceCorrections('EPlusJets') -# acceptanceFactors['MuPlusJets'] = loadAcceptanceCorrections('MuPlusJets') -# contaminationFactors['EPlusJets'] = loadContaminationCorrections('EPlusJets') -# contaminationFactors['MuPlusJets'] = loadContaminationCorrections('MuPlusJets') - test = options.test - constrains[qcdLabel]['enabled'] = ('QCD' in options.constrain) - constrains['ratio_Z_W']['enabled'] = ('Z/W' in options.constrain) - constrains['W+Jets']['enabled'] = ('WJets' in options.constrain) - constrains['DYJetsToLL']['enabled'] = ('ZJets' in options.constrain) -# constrains['Di-Boson']['enabled'] = ('VV' in options.constrain) - - savePath = "/storage/results/plots/AN-13-015_V1/DiffMETMeasurement/unfolding/%s/" % metType - if test: - metbins = ['25-45'] - savePath = "/storage/results/plots/testing2/%s/" % metType - if use_RooFit: - savePath = "/storage/results/plots/testing/%s/" % metType -# savePath = "/storage/results/plots/testing2/%s/" % metType -# doBinByBinUnfolding = True - print colorstr('Analysis options:', 'DARK_RED') - print colorstr('B-tag bin:', 'RED'), bjetbin - print colorstr('MET type:', 'RED'), metType - print colorstr('Use unfolding:', 'RED'), doBinByBinUnfolding - print colorstr('Test only:', 'RED'), test - print colorstr('Using RooFit:', 'RED'), use_RooFit - print 'Constrains on fit:', options.constrain - for sample, constrain in constrains.iteritems(): - print sample, ': enabled = ' + str(constrain['enabled']) + ', value = ' + str(constrain['value'] * 100) + '%' - print 'Results will be saved to:' - print savePath - - normalisation_result_electron, normalisation_result_muon, normalisation_result_combined, normalisation_result_simultaniousFit = NormalisationAnalysis() - - printNormalisationResult(normalisation_result_electron, 'EPlusJets') - printNormalisationResultsForTTJetWithUncertanties(normalisation_result_electron, 'EPlusJets') - plotNormalisationResults(normalisation_result_electron, 'EPlusJets') - - printNormalisationResult(normalisation_result_muon, 'MuPlusJets') - printNormalisationResultsForTTJetWithUncertanties(normalisation_result_muon, 'MuPlusJets') - plotNormalisationResults(normalisation_result_muon, 'MuPlusJets') - - printNormalisationResult(normalisation_result_combined, 'Combination') - printNormalisationResultsForTTJetWithUncertanties(normalisation_result_combined, 'Combination') -# plotNormalisationResults(normalisation_result_combined, 'Combination') - - crosssection_result_electron = CrossSectionAnalysis(normalisation_result_electron, 'EPlusJets') - printCrossSectionResult(crosssection_result_electron, 'EPlusJets') - printCrossSectionResultsForTTJetWithUncertanties(crosssection_result_electron, 'EPlusJets') - plotCrossSectionResults(crosssection_result_electron, 'EPlusJets') - plotCrossSectionResults(crosssection_result_electron, 'EPlusJets', compareToSystematic=True) - - crosssection_result_muon = CrossSectionAnalysis(normalisation_result_muon, 'MuPlusJets') - printCrossSectionResult(crosssection_result_muon, 'MuPlusJets') - printCrossSectionResultsForTTJetWithUncertanties(crosssection_result_muon, 'MuPlusJets') - plotCrossSectionResults(crosssection_result_muon, 'MuPlusJets') - plotCrossSectionResults(crosssection_result_muon, 'MuPlusJets', compareToSystematic=True) - - crosssection_result_combined = CrossSectionAnalysis(normalisation_result_combined, 'Combination') - printCrossSectionResult(crosssection_result_combined, 'Combination') - printCrossSectionResultsForTTJetWithUncertanties(crosssection_result_combined, 'Combination') - plotCrossSectionResults(crosssection_result_combined, 'Combination') - plotCrossSectionResults(crosssection_result_combined, 'Combination', compareToSystematic=True) -# - gStyle.SetTitleYOffset(1.6) - gStyle.SetPadLeftMargin(0.18) - gStyle.SetTitleXOffset(1.0) - normalised_crosssection_result_electron = NormalisedCrossSectionAnalysis(normalisation_result_electron) - printNormalisedCrossSectionResult(normalised_crosssection_result_electron, 'EPlusJets') - printNormalisedCrossSectionResultsForTTJetWithUncertanties(normalised_crosssection_result_electron, 'EPlusJets') - plotNormalisedCrossSectionResults(normalised_crosssection_result_electron, 'EPlusJets') - plotNormalisedCrossSectionResults(normalised_crosssection_result_electron, 'EPlusJets', compareToSystematic=True) -# - normalised_crosssection_result_muon = NormalisedCrossSectionAnalysis(normalisation_result_muon) - printNormalisedCrossSectionResult(normalised_crosssection_result_muon, 'MuPlusJets') - printNormalisedCrossSectionResultsForTTJetWithUncertanties(normalised_crosssection_result_muon, 'MuPlusJets') - plotNormalisedCrossSectionResults(normalised_crosssection_result_muon, 'MuPlusJets') - plotNormalisedCrossSectionResults(normalised_crosssection_result_muon, 'MuPlusJets', compareToSystematic=True) - - normalised_crosssection_result_combined = NormalisedCrossSectionAnalysis(normalisation_result_combined) - printNormalisedCrossSectionResult(normalised_crosssection_result_combined, 'Combination') - printNormalisedCrossSectionResultsForTTJetWithUncertanties(normalised_crosssection_result_combined, 'Combination') - plotNormalisedCrossSectionResults(normalised_crosssection_result_combined, 'Combination') - plotNormalisedCrossSectionResults(normalised_crosssection_result_combined, 'Combination', compareToSystematic=True) - - plotNormalisedCrossSectionResultsAllChannels(normalised_crosssection_result_electron, normalised_crosssection_result_muon, normalised_crosssection_result_combined) - - saveAsJSON(result=getMeasurementAndErrors(normalisation_result_electron), filename="EPlusJets_normalisation_result") - saveAsJSON(result=getMeasurementAndErrors(crosssection_result_electron), filename="EPlusJets_crosssection_result") - saveAsJSON(result=getMeasurementAndErrors(normalised_crosssection_result_electron), filename="EPlusJets_normalised_crosssection_result") - - saveAsJSON(result=getMeasurementAndErrors(normalisation_result_muon), filename="MuPlusJets_normalisation_result") - saveAsJSON(result=getMeasurementAndErrors(crosssection_result_muon), filename="MuPlusJets_crosssection_result") - saveAsJSON(result=getMeasurementAndErrors(normalised_crosssection_result_muon), filename="MuPlusJets_normalised_crosssection_result") - print 'Complete Analysis in bjetbin=', bjetbin, 'finished in %.2fs' % completeAnalysisTimer.elapsedTime() - - diff --git a/scripts/plots/muPlusJets/GenJetHT_vs_GenParton_1btag.png b/scripts/plots/muPlusJets/GenJetHT_vs_GenParton_1btag.png deleted file mode 100644 index bce869fc9acc2955536708d5f6367e590bd7e956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13550 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 diff --git a/scripts/plots/muPlusJets/RecoHT_lep_met_vs_GenHT_lep_met_1btag.png b/scripts/plots/muPlusJets/RecoHT_lep_met_vs_GenHT_lep_met_1btag.png deleted file mode 100644 index 510b90982ff6ff53ef27aac244af383a9cd3a8dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13815 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 diff --git a/scripts/plots/muPlusJets/RecoHT_lep_vs_GenHT_lep_1btag.png b/scripts/plots/muPlusJets/RecoHT_lep_vs_GenHT_lep_1btag.png deleted file mode 100644 index 1a9651e16a042369528040aba47c490e4ca4458f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13438 zcmb_@c|6o>-~TsGQL+>wOOjJ0OJvP<(w@DUu{J~@`-oK&{xH$ExxU|PuFvPaeZ-lYUgX^)wg-YB z-piNHU4mlCS*<%g1YUMI8C^UFUcsLqXRFZ=bQrpP?hHI6V{XW-aMc(s z72@_$!S#UjaBQl`NJGFvZjA1T)uU$5T2a-R=X;HR>ppV-4%2tC?q-f5FeD$9=i^2UM11Dv=XH6K3Ay58&$eiHEJcOXy;m;a!}|e5inCZLe~0@xI^AinvtXAv0&`a}C+7K887 z;$1Ayc3;R(t2+hx>Pv~?TnxDzPr?!9`(C{|0$p!3APz;L{modPlRCwxo}&#;D#q@t z=)eg45|wli_V{;^;pH}3sDoTU{vPQvuj=+A#iZ{$6N$NP+|}2%xQ>|)p@&OqDz=-q z!u5ToWXeX3bfmI*9R_T~5B2@v_F{B*4lFiwUcA+q5~Pn3pC4S2D2c{Bb%~d~L#Ua!P2BI( z;@9rm>paqT;AKyp*S&?xwEUd@LKWFu#Znx6{KzRq7c=;#26IQH_B2$c&I-gFntPWRJ_ozb~^Wuy5 zUF-I|kwv`+#5NQjS#7q(`W_|zB$!-eJ1y9}~+8BoGC z8JvcQnE2^HWMWb*vkHHLSc3OxZrc$>e`c`KIgO5lxAugy(#IulEy8N8Ja~8`^?4%+ zbnmwqoX9;Cd^|CA=rkUR3clUcUcJz*axthhlJy1O5YCdJN!D21q5i$n4)M)s@qVsV zxa6%f6FG8*+{Kfy`Iwr{FOhoCNF*h=*vyWp%vyB#O7OBtP9YxcZGV8s^w*59tYGH- z%i0wli`Y+tupUs!qo-U8I3d?3vhWTJBRs|M1q6|AawCd!!ZxkRLXa4zpL{uyyjXz}eP@vEmUr>LRUmf#srY^}y_tHh>$j3VkKCKRf-ZmpW_eA*2wUMPqFAqH(yfvuI)p1SKeRWndUh z4pe%0zuRyY4{LK5fyl* z0Vc0G;VlVy`iZ2s3E*NJtu2j;aP9|7O$|1!q zo}`NxMsMw{ZIDqW*qGVpfjIA=pr-jJT>h5`&h9OK4*~^a9KT22Q?AvwP;5TeLq~B- zYXpkMe3cP4{9c8};rt}V`Dl;i2=xn02BUG-7dm{uM4^Jmu{UsQu|(-d_!UF$0{@;9 zQgkDv$(PyF#wTi&E1FK|>-}117k{TPwg_{SxyBVGt8HtBn7&*Yv|`f#!Yz%f%CKY& zezZ7gt~ipga0zL`-+s>_W-x?CQq^g8!X$^%p+`m(g693ld5-z9T~Fp{^~#|ahT~;| z$@ULV~bt}wCl7^D~+?5 z>7kx!ee~x0I(p%=C#$b1Q7k5Z|J}NuJ4%MxiJI2=-E))9FSRl8+X1faI_jMyS@?Ms zTVaDkP=@LGHapby^2uOD(`0VZfau3^Z{J& z!*S7zOIKq_vl|KHqF8*ZS;`5{0|uCb5A5JKp{M{s9KO?plK<^suFZO3QH$zQ-qjrq zv2WL}nf7jTjxC1;J{^{vOlZ?D34_&SB*?56{cz2bzXlC|Lnzj8vIqjF}faGJ?dZC zuAyPFvO5!zT(INM&HurZQt*SS@1L5MBR5@js8!{zfUH$dpqD(@r=ZoR-(InMDGBtp z0@!q(ndpvRpib$tW|xuV#*>4kQ?ziuzcvIjzYTh7RPbZhoT`HFP{XHh%G)-Za%Rt} zg+rgF`&aNmgm?E%B#**TAD2HFS(F4&Q<2t=qZ=zq%E z;W(U>r2#6}!%QYdV5~&DaOHc2gJOJ+7v7>?rAPn z&OsrAtQ*7&P=l=2xqRHr>6j;0SCA$|n`%J9de5V>eYi2K%WKXC8)t5WN?y%&jRS(bc3VEoCi%!d z$k(LvG=fWW@7b`R!*_iv0pbwXNxu*s-=`nyOgSX}%gD~48Ll5MQNxoT`BXN8jY)3y zrE$|_-IIRq;XS|d$nSVWZlo9R*C2KytWt$`LW9bbMQZtxNm%86V!cq6gR_3Q`8F+&R;APvc8_IN`r0YK>YCD0A-8msdls25vALJs zJ_L1E7acAX>>5C3jSsmsY|YP7f|h zL9#*ZqxDsID_O4!FP%5rTOUKCaSwpTF`bRdcGsp=GAtgJFf8VEydy?-WjZptYobL_q!D)EzygC#ma*MKVn-edCB27&>H7{^kUjFnM zCT#fb6g>1AAH=A`&y2}96RS*BJZDuOZ&}MX6GH^PwK}Dvu zRmabo_4qT2W~#=f%GdQ{`+jL)4%FR8xvESqXBk9%4{o+E8p;6wiJ}2TF(k6tLF zcU6PFn@8TYt^gfk@X#EPER=12o9-r=z7@;Q+5t_y!2T+$hXBuqU4u(b(CP_Z6vD$= z%c6zqD(z4pnw$#_x&7p=DTKm{aKbs8& zPIs?}!%7Qr(^dGHs=5WNjxklkv_<3%KnGPiy!qBu1cFL;yFpTGE6?pE)2?(C*{E-0a^i1p5dx8zRhgoO||xwA?o~ z<=7_r3n>|_nR$=4P2$rAhkm)Mz;>=a&hJ~nxN||FTWabPEzb(iQPoA08r!y6w<{a&TzM4dNgSkf6P0DwlX0 zAMHo9bmC%Trw={XQrDj@l;w!x(v8U4Xt3*%o`yGa z7AI$UsB0)bM=rh!?<#5PX6{pk(&*OA%&;d1k^@Um?<*`N?}#F4wG9NgJxp7r5tlD2 zJg@VUG~@u{qIDo@An{rJhgM0ambUFnGSH$fP>4<+pX=GDw0X8X*gs|K z>^7{|;-^4Vjjp#*hRbJTf=(XffjSi%7hw`6>A8>kzxVkwX5YF5V3Ugukg-<}ve}8g z7ekp{*rPSMI2@*SooY{DX04h60`u`Cb{bQ5(?SFqsr{A;D_3~pCbSm{@nDnog9EUh z-2lK28usX&4PQ{ro@Tb0RN8Stc7x4%fVjiIxrN8p@W|IcKqNsS4)ad1(0Fu9gPP*@ z!RF;({7fcfL<%^d=btQPkKO2)_ze31aLagmvT6u z&U0p$P1#LB1r!4mkqVrkh({iXlN7?68E}?kvC+T|oWO^Zdre5M9N&v#59O!0F_cT^Ttal(77AToLV-f%jChm zHH>afy}a#@VtZ8*o%LHSv(K;n-VUx=thBtiaVY)PQ9uW>Jk+)I7QZ`4v;VFTgL6aR z`bHIZj1&o^)oM{`J zzP2RFAj_g={&5ZKn!dFiGd=pZHSoql%@s2^9z?1QlRt_cm=S#|;kW!YV^6?JYKa5r zqEVW`zqx0^&1?PJUX)&7f~}Q(cHeK<7ZMo8;M~~+MbUFiyA4cVrXyqF=H)nC8T9#f z)=$rC{xf|`Eu+I_3V|qpU^&fZjy_h{>2&>C?DW8$-6|GG*{ak084Huh(X7Jm9J_Yw}~hBA`rO( z$NjE2&m)m~Z{=FH$BT93*GFv`j5E&k* z4cFwkS}5%%18+9#u;z*?-54}qJL;AIpO1kcF6Y!V3Lu0rj^V$ZwB_R&UiICLPUPiS zhahgIIm9IfHC>qfNJWr!2t7*PekZbjq1# zMygwMT-eA1@40obSH(nk zq?=#Et#T6h2mvSn^r)``ouj^^Y&|P|BRE<>!{v&XS?+#zrDVsG_kq`9Gake-94GXb zHHu}aQt%ocz5;AuN~2N!=}eQ3q>TRiq4?WU#j>Ef$rK%o>qhNV*yzf4P{04hkTr&P zwS)VrDPoG`{Gg1X!`zJ`*ZGxo$p-sys)FgD6ZCGUt8Q}ri;H_DAWT)>h%6OFN*kVR z8$(Bq#<8S{a|mEv{I?eGl!zg)X7DovudLg90Ik-ltimg&fJ1WL;x^JM*_qpsUdoL~ zefB3KuW3fU_M$k7rsW-E6aPX*0OdnwuS~C+{yeN)1ppD&PVS}H1v#E^K3wWB&mhkN z4~$bwm(4{|n^S3lNUT|`V?NHEE_g7q?bD)^P#A8chEH|VO6WYdu4@H zmEbi#o>G{yJ=vH_iRFZ>p0O4gXal1-oLgF+8{0G<9eBgCGwFrxmol@qkL|y~QwpaL zyvTum;SuM6jHU(OVlI{?&hUc;Uh{Rs%4@!~riYN!n7ywzRxvma{)m>4uWV0wT&v~V z)2kNT*=&`C*UQlUlhk9Zy!JxY!V5ztBxB7Mo#pxQOIhN$0YYtZKJe0BoSzPjC+p?r zOlZnPR&*z8aeAMY#mmL_mF|Qxx~F1rUwg_jSW=~5Jj>L1SA@?$*1wdeGBYsBEE9*` z+0{sPZKzu=e5KNV*4CT4+g;`MyqEv>9jqlx;=3M33k(n*o(c-eN`A?hs&!iH0dCSf z0f@6JNxt2)Q?k$C0=V@ui32sX(cH(n8Xw(4O865z>yK`3-@?)>TOHcQ z`1@U)u*!z9)Si2fflf2R=*=hoT@g&krNKqAB>x8uy8rLq}$$vXAvzt!+{ zQ{lyP^@A$eWAtMOIIu6U|2aRo9NqqUi>raT!Dg+y5vg$|P>r$&%VamAp(;I4XW{rj z!CToy?e>4Fe|IBpz%Hxs6asQ68%Wo)+@rrY0v;r1^0Y3GO*`Y+dNuMhJ05Y1?cb~h z*1#8>7X?3~!I!u&vJqfi4c<<_e^tZk0Bb2)cAFpUXBe)x+)HQgS(4hg7SP7@N&m`M zl1{py(f-5@|0~(@f8q(55A@m#`L-hCUvBpSpN>|j;-8Db_HQrUacf18)JhdW9djcR z@Aco(NKT3Q5ubBO>Q~}(aOmUA%avSS2&IqRx<38dmKSk~gn4r=pChXD>Sh2ENk< zk5CgwY4D@g9s#3Q$8!f%BodjA?%NVF?5Pqk%&@{t8uEhh=JtoJ+AZO=%#H(g4A$*Knar-y>i5}>haWw?#2ozJ2`xsNG0b9l^S=lzs1-3#S)LDBBJ(Ok!9go{^O@Gn+1nf?HOO+#!O* zF-q6ld3?He^dIM`W z+_|Oe1_*OWc6*?kE({uuP5e&8=iqSc!oHQ}B9`cKwi$sidD*kPShp}!g*oKJSa>PA z&8gpkF>D;J%Eiz4Nx&|`2UUlpc~_bnU47m?u=!c! zR=Iw)B?_*vFIH!J+7*&a_<@&qG2ixa3!|;%0n!p^R;84=SVmr^HPnDrp{?PxJmhy4 zRN<@f_mA$cTfvkn@>`{=H=;!9XW_GSGK-mz8A+e%K(>r&QhoL|Bm@=4Z(B_zN`&DE z#?^U2sY2xvf)Y||nJ!R6=Ak+>)X1AF`L_F*Imv=O_p@AK9UQ$sE3|Y!4sXlXbF}c2 z8-XW320c=1unwfB-Ra$G(Nr-J=j!liG0s02s9$#t9A0G9Y*Q~<7ua8{>_M6 zI9$9o&A(E}!0eF2&lJ(zVhgfAZLvj7&F70q&XUKmdH@blbSua!X3c18DjmdQdAUwr zZuL2GRd^$vrp>1h#;ubl%0XXF`U3N}<958E^tI#DRq@!Ff;Lk#;Re9yoV>$>esok$ z9m8@q$ey&21mF~g3$da<7~G0X9Hu(7q65OQ23u(FAF!=)2ojQI&jQRl-Qph^{PW10 zAzUaP@~JI+4Ugvtsw2k%4P(Pc(Oh*O_Pi3CP;t3Y)-Us90LP~Rd(R`I32`+@mMwyg zyt%!+7litY`!L7^J0OBOi`cBqg=cM^I1r$1!(8ZZGk90r$OsOu`II$0Jf(^D56?o% zKjx@;JpOu1#PHoUB@h^_2^4%^ZSgyTiv9-e!}y|MLX>4OLTYb4=1KzPRCuJjNYxZgQ+ zM629p*4BK2=EjP6QA%@>CUsmBy_}xTl$+fh^>3*C@52m7g;h(}rGR(E&GSVf_Aj(Q zy$yuiuk5#8SN2|5NvDF1AukyWha@ets(u{X6VBnw{}&k<$_2)emsJIsJ>tOa_=8>4 zRbdJs3(VEl(~K4XOsH5?8^bGXg;0NJ$@ZK@D)<}C*;*4w;Nkac4v6jdbEwD_dIeo& zlk3qJ0M^?yaOPw~*;wrjFzi^%%en=i=~`8eVTHgj#m_MZwrv#YVMXPFw79aTV{E8b zg$#k)?3T9b{s89oTsiXO+&f@46Lvycf}s0Q2#qIKQ3jMlrC$_$avke(


?74ks0 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 aeFv4VxixNc^T^0R=LkDL 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 diff --git a/scripts/plots/muPlusJets/Recoleptonic_W_pt_vs_Genleptonic_W_pt_1btag.png b/scripts/plots/muPlusJets/Recoleptonic_W_pt_vs_Genleptonic_W_pt_1btag.png deleted file mode 100644 index d40266173a594f62c20f20e280ebb50e4cc1518a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12036 zcmcI~c{r4B`}d8?l2F--sASC=N!D*9vM)1^+ zV2rUOF@|9T5 zD^3B3`Tsc}l`IEecsize4r<`U*5H`vhGiNF&lc11sVm3=pKvC1ZfiQV^SzU=jbNv) z(`n1WdcQEZXo6x7s{CZn>ekN1*kBT6AF6z>SlkbdcqDom zSFe=lA>M^vHah$kxzL%*4ul<&g1(HmE!pap?+F%7Ae#}WQ0Nd$FBjWGi8}l)BS1VZ z_T)V%5D2+|RNgydO>t-!bXAou-r6&$LGYM4`k^ApyaI^f5I`;+IBx5LovIKq8ZxvM zB#Oi<09p!p3klVV6kYzk1@!^bdk>lWvd4sME5kULeS#(vw}!q!)Z9fAd{&qZJ@>)Z^WHPMsIcGH!BC~= zl;B3zl}8OqOod>!)+%YyQXZk4k3qcsVWT6}-WfsSL{v0<^ozTwaFzV7cV8#TEXpUL zQ-c~!B1;FI1uwfTvIF7|r*mJ%pR1lv#@HOw%T$VW@)htP(61*L|H>1jL9W8pu7x4x z!+nrBsO50J?N8{#^hJ1o$XAmM#)mxy)kO=I!bmC{gC0`cHZ{qZ$53;3@0CUQ;k=*v zGHzlz_Z%~@{226wLLXZKT6>(cR>xfL)f(MRL6W&%s(z#}=NEoDl|*VbZY)W$dV?hR z881hl=<&gRs>w51>C@iV$!-c*$V#mG0{eRA(Rze3goo=s+?3nMuL?6i+P zq|h^?;%s32*a5w)LY=d=RIPqTZHtnKa}%bOHZ6)hH;|nTtLqi6hokREf)FbFzg9vJ%628L` z_52|02_>tL!-5sxIX?RGu8Dnj!7sw3n4ZnqIHanQ=$>-B1}?x<3NeY;>**+Lyr1WK zf@8If!z!1wkmeekpwZiD!p08Ft$aEvUHt zoOyp>X-e^LzsT=359IStpWuTYGmn=&>E$Ra;YQg%bdD|NNg&A`J=ihpaj~Y)A1$M& z(_6h(M;}J&v7~pk>d+FB74e4aUq5Y~oN^5LcG5xmZHWXk>gVU&(O3QwY?E>5g`WfQ z$fSM>{Nv2bf!hmHQrTzCEkQWpTeLKUZb&;=BH#lY;jjgHZYUr=LW@IAjus9Prk60) zigQ9%Lr_j2AI$L5y^VwSk-GgxhvK)A{BWP4Kr81(airl@UQfXyk&dVMsHKCzWUn+I zv_mzHb4BsC3w8S=04%04)lQ4mWFlkOThGxKI~?TI9?P{(_85^4^0EL)ZeZdR?(ky;`7fzVI>Uw>a*$B$zM&OxRc3)U^oe z=?aj^Qs6qdpJ=27h$g`5){>q;_W+xM-ewB#iZ_(?*=*c*1C#bA(wR+jdC@XV0G#kq zNc_3dBqRHC1gc0e7aK5fDdWnvQCTIb9Q$p-qb>f8ogG^Yht8FY@z=ArA@}OQ`QB0B zwTTxgHY0Y)>`cjUh^PU=GikarUoNBQtWo~woz1o^iKyGkSbKiG^r6k})>v+6bMnq} zwh~0TkyfGD6Ht~OSifHpn4Br#hC-qEgJs)jm7ZXy0X~3SKVV^C2|HM=63U9NDv|eI zhZ~f+8<4YO&QS8Z&&5#JdRka5tYSnh>-7vjjS7Dj@aq$kw6~bW?ARKHtnXyRcFO6t zL;f7KMLd&6+)(N!GE?VVi5X=Pb5&otu91^G;>ZJN<-Ewdb=;T@$W?ALgaI)#`;h=} zT;LxEQ*mTQ(fi8|Ez6Pd;12UY(}L9bMJhpBQ1Sr4Z)*RI)@NJN;UMNG2E9eo!Nh5GQMRBdZFAl`B11>|Oi zOs-nsZXhaaZEsrxn!3dK$ai4k4)+rFv`;I z<~<4o0uPO#SXhUuV!QpIh97Pimi=cItl$w;gVS42iFn~py(E%#_@+vf14H4RM*te=Tikf8J^=Ky!++ZQB*?1`^OS{)J)rx`izEv%k zXhU#krnjS)-y)qB?F2hD$ikNrdPA2{{`-4=LxOLf!pa%}mw|j{r6$);srM_cDiO#r z%pT};ox<1q%^f<~PeCHj%K=)*HEE%VK~-L3+b^7HhS3>@1CTX$|1mAzo4qfS;xi9H zC)i`&96%})QU0{|eYo8O>~i@vVIc5?;gBabt*|1u%fi_99patMZonkSZM zpwawg+Irko8!YUTH5BT{@6QHsrcEx@R4W#bR*^Mk&!`xk#{W8#{nqBByRF=@aV63E zZb}r|4Bpa4Pldk==bW%)zGcvoF+vqbmX%o1EcA@^%2-f?2@2^uaV2|l38Nte9sFg5 ztA|2o!=uZd*#}z=DjtBQd3ripoi34~DjK`>b0Z3}lh_Hk#i{ zch@_2(Xsk{NzVv;l26LNEDLg;04qmj ze;~_D^}O#ffUFPhdUxg{tKF7^apz%GPx~EUxH=qwuhcl0v0d&9l5DcH*F>jBsp6r42(uvcZP2-z(C> zGQ&#m-D(bJX}(-h^Rw}_5p-R+Y6jtBx=VO1q4UU`7#FnFoeN48K)MEvQ^4p?imSHH z)t9;x0w4Og$53czXY}Hb4&qc@X(5^Jxy}5>t^IuDLu@gbcEhC+tm9As2sLvqMiNmC zN_M+}K+FeeA;UP-<$}-e4gutI6D3wqQ8dprhf!o0Sb=qDAlFiUiR2Ly9yrYdOyWRX z!QOo#Ln({s(rx^1i&u?aSG>dRWrtK7M_c>UVX{GNb~MApezPZNm|So z(NmV^aV;Yb%vp8ZiUefM>Y_1h(sWglx~#(#s5qihWdLbuyY=(s7BZ7YP;i|t&ZLX?-qY}8cMA!S`g}LK^Gx+YD4whIM0T#6qItG z5x))X&H(9>gDJ%NnLY$eU+9ovfnglPj}3T09GyST;7Gmi&L#av$4SeN?~Z@^r-%GfiQZ;y1TMNQ7Dix_{?=$$$!1d!PWODqLeKTdbb zJ$g}ay?{sSfE1LfYPX&^<62RYqZg8gveGN`UZ5N%@C6vN1Xe+dx|XdjXX_9JdPya~)G>ynJ>V3dGK1j3W9^L;IgIV?P4` z=hNuz3fA=Wl?wlTK&vtchl3gtS-gPwAKRP?UUPCe(J4DOord1mSpLa0*+89!vQ8Kf zGr+pu|EdItk-8`eRtdhNK_v=_?YC}&G;cr!Qh`L$Jyy!S&w(YjxzljnhY#}rX9$aF zHC#8+#u=`Ekb=5kUoklVzE;zVW*3kEyA<^P?fMjC!>{ji#zPfl71{-)(f-9<2VVnG zwKSbmc?&|y!cc>5mss$_T9q}AA=1jF0tcYBf-cy{e`+3MTi%YZ8kS@AY{0k*1CJ2l zEc{$8o-jpzqqTF7suZ;1PS6%av`D*S2l#pCjf8+!HjvTuDC1{tZ1V&9+4Go}3n=BD zYTf?KqE|d8ItZL)==}G&-GY7g7UxPp;uD8_c`M_m2V)Jr z+!1&6u4c>A|Elh;_Cxig&L7{Y3{_s006w7A%KL&@QC{iOti=4wz5=cWbh+e|9X9AI z1tqjFpE{AUexT)HKgyB$WgnSA+pq20;Pl1cNZHd^| zuuI0L*C#$>70Z>~N}M%V8V{l$yQQ;4N#aZ}V76C`-1nn;gs|32Nn!l+M$nR6eMBJ= z`CO3o<%0~MKYB;y4&sM)0*EC=vICFQVJ`d~fjMnERQJo+%nTG^j*GI81i zw*F>{Xyk)n0(D3Gj)K%3B4Tzc)iaz_^>uK` z+Fu@cnx69PZPCKv!OhX>3!TPWk2?dM1~sPkeDtQ46NTS?0Bdc)CsUy+(bD5R=yxe# zDcupd9ibot6U_W6_Gm`*+2EQ#f$E17HdZ6(y^{a~ZeGa{>X;UuGZ!xLF}BFyga)sX ztso_~u$)+}LRHv+ODgzUip61zZ`?Qd!dc#qq8XL*asbso@<6}>Dfr!2n2CD7G3Ox| z{sM=grqh?%UWd^Nk^5!8>noT&4-UI0`$hz1_?Uk$QS7O%Y>i@?-CSr^n7?zV%-Dh# ztn^w)aQ`gw%iQ=w{FbG@P?cnMi9ljGW7N%^>FPM~Wo~J1SL_R7FPG03Nq!5WcN^ZC zd84}hnR$t^>9nk3vpn^VH$7G=WNwsLH=|CDR=CKo~+i= zde}8!vIx)k&fNt50Z2=tvVW^JP@h!KZhDkSEY6MtMw_+3%eaPhvi zVO+O0Gx1j(3VFn2D=@nO-G^NT&cYY^hV7qDxg$n>lTZC9SVz4jA1r#7=RRY6o|1m} z>b>}dC{&GJkqnrz0XGj@qb_%Zxazj};pV5*lTHcDX#EV=Z;AB#x)%)lT~gBSWdnLw zqCd#>^>*5c#UBF$K$NPo>y@SEo z%e+BF)A*4wb6dVt53lE1Aayd(`!t)ilTlbOqv}7UhHa~y0GIot`9S?XU^03h3mJlu z&M5<}#pZtp%W2-X-$0MYyxFG3I|GUQtRlReA-oIFH_o}Ex7ody=STQ7rQcnyl%el zfK9D=Ns!lC;_3(8da8Ma&M9fK1Nx@ZDafZKiTS@!{t;E>#4lwa)|gz>wG%opdW z>!h*bS3}!m&1WwhEbW2>(cO$AqXv=gEBzQWgdU=B$|h~L)3Lg%P=)CTg+8!%Oas>q z&nxPBR=0{froRrKgn#6$q8`w#%Ik;If5WoWWjLgHa#MoBp_ zNW3eEcQYtlZQdGE+iymR|JX3Oc#itFogErHPJC>S~p-0Xf#UV#ybj$w{q^%glah+zI>ClPq0g0}+j-I<1PiCv1akmw$ z@a6>qHL2%QjvN4uj_minH7p=TF2}(Te#~;EfBlc|TFJ)+0RcS3De9EoL6xOg@MHOM z{(P4#t>?neMS@n`-l2o-pVziHR`U7XKwYUa{&j@PxNrmIl?ZB}B7vN-`ZA8} zo^D~JwdCU19@+5MrvS1qn83wMm&!t>U- z;0{(zp>{{p6QYk^9!;mZL7|jkrcdl+QDFwE8}+%n>v zVUr3!^x(>u6(QqquxuOv8Y<5>V?XB@a{%H-)nMg|k@_c{Y1(Xa1kk#N>0`F-eX@aY z4SR>VR=@)sWzYMo;ck?8*LOdy3f=yOGh`B(9n&0iNWU{TYOF9Dfk6;fio-}TXF?Dr zX^ z76gf=?`xkn8vz2XDFlL1`mTH>tK_%D^K}&Le9;1?B2Keei`OX4(*@fr<*?b^XVCqp zGF-^&ie_nq)6Q<6Q>iG&$HL~d;cn}Fpmc$`V zhG0il?V(Wr6^@v}VCtx!rz2m7s)23ZrS^QAcDhWPZvWid?^v-fZlhfyp{83;bV9`u zo0a$UkM~DM5|XcNcm-VvF2;xQ6`}mdGs@gK3n}Fand_IDShGthtng>91Exa~dA>s) z&I>t(zd)llsN$0(H=sO}ZRM}ne#TGCUz z>z4soNW;-Bu>o@jXASf#Dg21001PXK@p0)IbH;bhGtCP#0spE-+ggH$=1%3Zm`m4g zAf^b%or4i38=nFm1*EY&CSub(&+-~!VV;gm7L}sgQ@wT4R z)dM%LHRZJB!2?6jbF9?W7@UB(Bd&gmKMBXkD0&#l@ftK&#D~`&VJctWTDde{brKAN zR`=7EAtZV2Z(bZ=tK@Inyh;s!u*Utjg*x|V_B|L&Zkin>ER9pT7(^-7Ape>24xi|` zE(X>Msm}WWwgYFF=;#piCqzmCN1ctH+TZIa=QU8z`~_%A3jr}An~n>6bhA^CP0o>t zu&`E`W12{=ECwhn`$ZPH(nV+rT)UlDgNna>b<(39O4mR9DGiP%M zoWQ^1(P?N4O@G(u6=AAMW*~_XD?GmqD(Ik%y{%wU!w$Em#xJF5Ouz{TCtybht)UgM#A}hiDtH*n<}_NwU<2s zY55*uMb;hVim_e;du#Q7+}I9ylB5o&D%P?C$z~;EGakWC7No!RhPa`TalRUeO^Z(! zgNqX=1?b2K<<@WP&0auBBplOSuUMwpD8bEakLg08LKA*F1maILtF(a^3uKPfXG`c0 z!thb|g2XAhxf4o>hIP9^tvinQ;zzx|49X9m<)7~<2wbUE0oXp23@NZL)CV1ya{~&E33)Jp^1wJLuUkvnig-ZU!U9|I2=&5#F zD$`t-<ZTPaObxxh^`t+b_Xl}~WiEqcXcP$LPG;FnPpKJh#OgyW+S5(GN5-3i*v zWDS*5SD>J)LloEph$q<8xq(oSS1NBCZ*bd1gb7LrRbKdW50x9B<5aeD7JwjD!5$Nr zquqK8LOLV)GK087CQ#+Yp)_IAa^_fJ4b`#tP&^)MGK>oVr9%35?fi$K0JXDpgfYWRa4;Ja8dCN;hSYNRmst2?cWzP<0Tpe@=_doHZ# z@f8*@*{TR3NW~R{eFRxRS%TCs@tTOj*6#_ef$ot|V?LdH zJ<1`u5sDZ=bbUrdy)IyHP5ILFo=y{y*mUroew>25Ki-_#Pl^Vff+ToHU`K&%xPKS7 zudSdS;b`dfRgzf^ld`MJ!mex$vRl_0$}jxDr%6OdEKi}TA;}U5Yyg>(Z%WUaF!ju8hRIlrXTDK_@gjVv`!8^ zY{NDzKa7GW@^@$1>}{PJTk7<`P=0Txn*Zzk|7&#k`@8=gCv;~(oFITe)=x3OHO#m* zeg=|%F_RZX&S*ZG$3C3y4XrRZ5n`wW$;vul0x?Te}=gN;$ zjIJgf9HtwdRT!yd9vYkvcFn86()+KrUC;Kv+&s&LdZ4wm<+Xj^(8Y*nJ0?Lordod} z98IAwPpA!{4@a@kqXDEbs>7VN`C)nvEobialf}rfJ*?IE({jw)LIF$jFC@JR7UZ|l zk~_+BNA@r7xUUht2xi?YMXUI_nTGAG%~hYk%)4=ejS+H?K&*K7izu#zzRL} z=>w&5_85^!$6`fDi|Hn_D4iE5SS_$}EJ;*}x_HTk?T_G!#TS^!HnovTT1wUv-5&LB zaAFm1aJzf(vi=E&dxVXhNg?-GGk=H$)YCqgT-pnjFZE&rMBpAG-rFkZB=x$VyVxez zT}Q!R?GIjYwFGON>+CegvuahS^39v<#|<((npJE+miJ>w1Xv1KM+U&*U!Ksl#yos++xmBEb2snK8+ zBs~{s%&NZP)jca{@$z%slP!Pjz@1|8-cKQM0seN_^|j&rU9SS%o1ZNacCnh#a{c@V zg+F@LXMPdBMa0uhA`Pc_ooOPl6#{OfqP`=&JWU6&ulGz-x+-6Ip6=gPQNSkB2x7zok}7 zxq6Fvd4t9FHcUxVzuOU2KN-QKbbtJ_p)-g4GLW-#t*;!pAM&RFUj9?UP1Bd((R@MsiYR9Z$6x1;+b z+X8Zl?83BT@L8oe))HywXa_mB?Fqg1T9$O)LZPlOIWvwG7&M?9>@kbaDl8d+J$*Ee)*dFx%bt&k!4F)NPl?9fPc;|FZsZ; z_>S2Zotuy0%{3=>fOK-n;J;)b*c|wGy8l1i zh7P*0$D^O(4U~GS^W}zBTo=70=cAU-!i;Sd536H%6Z1!2vT4@y&-vZD+-`pIEGU{e z8gM}4|Hw>l7{2Dr*Sy5O9Z zCGwxX}cZL3Ro};h-3%x_wIEXY}{^rY>_)OBWM|1F5d~R(Y$hx)OeQgjr zNep@b!)h%*!NPygQ%P`ab%n_3fJGe`B?({bTz&KMNT?oN)6by)I&sezqaly3qzXl+ zIxQEXa5-nKX7s1JpQH&!Q6^!gE~MIjptndO)n<3#WvuY|``=!6-bf0HCyi(%Ukf8n zqjB(ss5Q@)QF>>Rm~TN#5-AH4W}SdzI*S;5+k`!JVtpa+|A}+1s0s$o&*deQ|7)jue#74T99wK+FmamL|~`};s~ zEO};JOOrs&jNbHkwXvPLzDLZjDePC$&$0}a@f=Ka|1&b&Yc=y-mm(+wlb+@mIgHh} zP@-}^gqDhd-K{u<2ur!UD+@eB>dpn6N9;e&@Go^5VkCH0@eMfg5c#`S3-GwOG$@@pXBkePJh}B zRq#NP#!RO6&ww(sO8+fA<>+#f2b-~N+*FIN(0L?sOyrz|Vw(WpkyBqc(x?a#`wP5R zqMhmR^4sc909|ZdW~K6kaKmLbb+@$^S3n>C77?_y5kY(J8a>jZ-|F;RS`5MBK*P4m2A+lQ2rFw#g3^im%9U!zw8TIID^No$v|hzOJ@+Ml zx&oKttzFmM{MX&CS9hYtS~l0-6wO$1qBfs5^*-aF;OCC{;`_GDHgt@J=z=b~Yh$&& z+7?mvB~Dr0Nwc!bOVOmFp7~!>=Pm0_lxKfQB6N02hLL0gH&wLf&DPdc|VkKA4-^LjTSbt&H{!bmmzrIE{ a=ny#jRrG1^gPp_d7mcmXmm6Na`+op0O!1Qd diff --git a/scripts/printCutFlow.py b/scripts/printCutFlow.py deleted file mode 100644 index 56466fcd..00000000 --- a/scripts/printCutFlow.py +++ /dev/null @@ -1,151 +0,0 @@ -''' -Created on Dec 1, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch - -The AnalysisTools produce a 2D histogram with the cut flow for each sample which is saved in the histogram file -First dimension is the cut-stage, second dimension the jet-bin (== 1, ==2, ==3, >=4) - -printCutFlow reads 2D histogram -outputFormat = CSV|plain|twiki|latex -''' - -from __future__ import division -from ROOT import * -import tools.ROOTFileReader as FileReader -import tools.PlottingUtilities as plotting -import FILES -from math import sqrt -import QCDRateEstimation - -cuts = None -cuts_electrons = [ - "Skim", # - "Event cleaning and HLT", # - "Electron", # - "Muon Veto", # - "Electron veto", # - "Conversion veto", # - "$\geq 3$ jets", # - "$\geq 4$ jets", # - "$\geq 1$ CSV b-tag", # - "$\geq 2$ CSV b-tag" # - ] - -cuts_muons = [ - "Skim", # - "Event cleaning and HLT", # - "Muon", # - "Electron veto", # - "Muon Veto", # - "$\geq 3$ jets", # - "$\geq 4$ jets", # - "$\geq 1$ CSV b-tag", # - "$\geq 2$ CSV b-tag" # - ] - -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 getEventNumbers(hists, histname, hist_1mBtag, hist_2mBtag): - eventNumbers = [] - errorValues = [] - for step in range(len(cuts)): - events = {} - errors = {} - for sample in hists.keys(): - events[sample] = hists[sample][histname].GetBinContent(step + 1) - errors[sample] = hists[sample][histname].GetBinError(step + 1) - if step == len(cuts) - 2: - events[sample] = hists[sample][hist_1mBtag].Integral() - entries = hists[sample][hist_1mBtag].GetEntries() - if not entries == 0: - errors[sample] = sqrt(entries) / entries * events[sample] - else: - errors[sample] = 0 - if step == len(cuts) - 1: - events[sample] = hists[sample][hist_2mBtag].Integral() - entries = hists[sample][hist_2mBtag].GetEntries() - if not entries == 0: - errors[sample] = sqrt(entries) / entries * events[sample] - else: - errors[sample] = 0 - eventNumbers.append(events) - errorValues.append(errors) - return eventNumbers, errorValues - - -if __name__ == "__main__": - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - cuts = cuts_electrons - print '=' * 120 - print 'TTbarEplusJetsRefSelection' - printCutFlow('EventCount/TTbarEplusJetsRefSelection', 'EPlusJets') - print '=' * 120 - cuts = cuts_muons - print '=' * 120 - print 'TTbarMuPlusJetsRefSelection' - printCutFlow('EventCount/TTbarMuPlusJetsRefSelection', 'MuPlusJets') - print '=' * 120 diff --git a/scripts/printNTupleContent.py b/scripts/printNTupleContent.py deleted file mode 100644 index 5759ad93..00000000 --- a/scripts/printNTupleContent.py +++ /dev/null @@ -1,7 +0,0 @@ -''' -Created on Jan 4, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' diff --git a/scripts/purityAndStability_METbins.py b/scripts/purityAndStability_METbins.py deleted file mode 100644 index 756b8150..00000000 --- a/scripts/purityAndStability_METbins.py +++ /dev/null @@ -1,199 +0,0 @@ -''' -Created on Aug 1, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' - -import FILES -import tools.ROOTFileReader as FileReader -from ROOT import gROOT -import tools.FileUtilities as FileUtils - -fileTemplate = 'data/correctionFactors/correctionFactors_%s_%s_JSON.txt' -samples = [ - 'TTJet', - 'POWHEG', - 'PYTHIA6', - 'MCatNLO', - 'TTJets-matchingdown', - 'TTJets-matchingup', - 'TTJets-scaledown', - 'TTJets-scaleup', - ] - -metbins = [ - '0-25', - '25-45', - '45-70', - '70-100', - '100-inf' - ] - -metTypes = ['patMETsPFlow', 'patType1CorrectedPFMet', 'patType1p2CorrectedPFMet' ] -metsystematics_sources = [ - "patType1p2CorrectedPFMetElectronEnUp", - "patType1p2CorrectedPFMetElectronEnDown", - "patType1p2CorrectedPFMetMuonEnUp", - "patType1p2CorrectedPFMetMuonEnDown", - "patType1p2CorrectedPFMetTauEnUp", - "patType1p2CorrectedPFMetTauEnDown", - "patType1p2CorrectedPFMetJetResUp", - "patType1p2CorrectedPFMetJetResDown", - "patType1p2CorrectedPFMetJetEnUp", - "patType1p2CorrectedPFMetJetEnDown", - "patType1p2CorrectedPFMetUnclusteredEnUp", - "patType1p2CorrectedPFMetUnclusteredEnDown", - "patType1CorrectedPFMetElectronEnUp", - "patType1CorrectedPFMetElectronEnDown", - "patType1CorrectedPFMetMuonEnUp", - "patType1CorrectedPFMetMuonEnDown", - "patType1CorrectedPFMetTauEnUp", - "patType1CorrectedPFMetTauEnDown", - "patType1CorrectedPFMetJetResUp", - "patType1CorrectedPFMetJetResDown", - "patType1CorrectedPFMetJetEnUp", - "patType1CorrectedPFMetJetEnDown", - "patType1CorrectedPFMetUnclusteredEnUp", - "patType1CorrectedPFMetUnclusteredEnDown", - "patPFMetElectronEnUp", - "patPFMetElectronEnDown", - "patPFMetMuonEnUp", - "patPFMetMuonEnDown", - "patPFMetTauEnUp", - "patPFMetTauEnDown", - "patPFMetJetResUp", - "patPFMetJetResDown", - "patPFMetJetEnUp", - "patPFMetJetEnDown", - "patPFMetUnclusteredEnUp", - "patPFMetUnclusteredEnDown", - ] -metTypes.extend(metsystematics_sources) - -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 - -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 saveToFile(correctionFactors, analysisType, bjetbin): - stringForFile = '' - fileName = fileTemplate % (analysisType, bjetbin) - stringForFile += str(correctionFactors) + '\n' - import json - stringForFile = json.dumps(correctionFactors, sort_keys=True, indent=4) - FileUtils.writeStringToFile(stringForFile, fileName) - - -if __name__ == "__main__": - from optparse import OptionParser - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - - - parser = OptionParser() - parser.add_option("-b", "--bjetbin", dest="bjetbin", default='2m', - help="set b-jet multiplicity for analysis. Options: exclusive: 0-3, inclusive (N or more): 0m, 1m, 2m, 3m, 4m") - parser.add_option("-a", "--analysisType", dest="analysisType", default='EPlusJets', - help="set analysis type: EPlusJets or MuPlusJets") - parser.add_option("-t", "--test", - action="store_true", dest="test", default=False, - help="Run test") - translateOptions = { - '0':'0btag', - '1':'1btag', - '2':'2btags', - '3':'3btags', - '0m':'0orMoreBtag', - '1m':'1orMoreBtag', - '2m':'2orMoreBtags', - '3m':'3orMoreBtags', - '4m':'4orMoreBtags', - } - - (options, args) = parser.parse_args() - bjetbin = translateOptions[options.bjetbin] - analysisType = options.analysisType - - correctionFactors = {} - for sample in samples: - correctionFactors[sample] = {} - for metType in metTypes: -# variables = getMETVariables(analysisType, sample, metType, bjetbin) - variables = getMETVariablesFrom2DPlot(analysisType, sample, metType, bjetbin) - correctionFactors[sample][metType] = variables['correctionFactors'] - saveToFile(correctionFactors, analysisType, bjetbin) - diff --git a/scripts/purityAndStability_METbins_V0.py b/scripts/purityAndStability_METbins_V0.py deleted file mode 100644 index d74d3b56..00000000 --- a/scripts/purityAndStability_METbins_V0.py +++ /dev/null @@ -1,163 +0,0 @@ -''' -Created on Aug 1, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' - -import FILES -import tools.ROOTFileReader as FileReader -from ROOT import gROOT - -fileTemplate = 'data/correctionFactors/correctionFactors_%s_%s_JSON.txt' -samples = [ - 'TTJet', - 'POWHEG', - 'PYTHIA6', - 'MCatNLO', - 'TTJets-matchingdown', - 'TTJets-matchingup', - 'TTJets-scaledown', - 'TTJets-scaleup', - ] - -metbins = [ - '0-25', - '25-45', - '45-70', - '70-100', - '100-inf' - ] - -metTypes = ['PFMET', 'patType1CorrectedPFMet', 'patType1p2CorrectedPFMet' ] -metsystematics_sources = [ - "patType1p2CorrectedPFMetElectronEnUp", - "patType1p2CorrectedPFMetElectronEnDown", - "patType1p2CorrectedPFMetMuonEnUp", - "patType1p2CorrectedPFMetMuonEnDown", - "patType1p2CorrectedPFMetTauEnUp", - "patType1p2CorrectedPFMetTauEnDown", - "patType1p2CorrectedPFMetJetResUp", - "patType1p2CorrectedPFMetJetResDown", - "patType1p2CorrectedPFMetJetEnUp", - "patType1p2CorrectedPFMetJetEnDown", - "patType1p2CorrectedPFMetUnclusteredEnUp", - "patType1p2CorrectedPFMetUnclusteredEnDown", - "patType1CorrectedPFMetElectronEnUp", - "patType1CorrectedPFMetElectronEnDown", - "patType1CorrectedPFMetMuonEnUp", - "patType1CorrectedPFMetMuonEnDown", - "patType1CorrectedPFMetTauEnUp", - "patType1CorrectedPFMetTauEnDown", - "patType1CorrectedPFMetJetResUp", - "patType1CorrectedPFMetJetResDown", - "patType1CorrectedPFMetJetEnUp", - "patType1CorrectedPFMetJetEnDown", - "patType1CorrectedPFMetUnclusteredEnUp", - "patType1CorrectedPFMetUnclusteredEnDown", - "patPFMetElectronEnUp", - "patPFMetElectronEnDown", - "patPFMetMuonEnUp", - "patPFMetMuonEnDown", - "patPFMetTauEnUp", - "patPFMetTauEnDown", - "patPFMetJetResUp", - "patPFMetJetResDown", - "patPFMetJetEnUp", - "patPFMetJetEnDown", - "patPFMetUnclusteredEnUp", - "patPFMetUnclusteredEnDown", - ] -metTypes.extend(metsystematics_sources) - - -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 saveToFile(correctionFactors, analysisType, bjetbin): - stringForFile = '' - fileName = fileTemplate % (analysisType, bjetbin) - stringForFile += str(correctionFactors) + '\n' - import json - stringForFile = json.dumps(correctionFactors, sort_keys=True, indent=4) - outputFile = open(fileName, 'w') - outputFile.write(stringForFile) - outputFile.close() - - -if __name__ == "__main__": - from optparse import OptionParser - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - - - parser = OptionParser() - parser.add_option("-b", "--bjetbin", dest="bjetbin", default='2m', - help="set b-jet multiplicity for analysis. Options: exclusive: 0-3, inclusive (N or more): 0m, 1m, 2m, 3m, 4m") - parser.add_option("-a", "--analysisType", dest="analysisType", default='EPlusJets', - help="set analysis type: EPlusJets or MuPlusJets") - parser.add_option("-t", "--test", - action="store_true", dest="test", default=False, - help="Run test") - translateOptions = { - '0':'0btag', - '1':'1btag', - '2':'2btags', - '3':'3btags', - '0m':'0orMoreBtag', - '1m':'1orMoreBtag', - '2m':'2orMoreBtags', - '3m':'3orMoreBtags', - '4m':'4orMoreBtags', - } - - (options, args) = parser.parse_args() - bjetbin = translateOptions[options.bjetbin] - analysisType = options.analysisType -# base = 'TTbarPlusMetAnalysis/' + analysisType + '/Ref selection/BinnedMETAnalysis/' - -# bjetbin = '2orMoreBtags' -# bjetbins = ['0orMoreBtags', '1orMoreBtags', '2orMoreBtags'] -# metType = 'PFMET' - - correctionFactors = {} - for sample in samples: - correctionFactors[sample] = {} - for metType in metTypes: - variables = getMETVariables(analysisType, sample, metType, bjetbin) - correctionFactors[sample][metType] = variables['correctionFactors'] - saveToFile(correctionFactors, analysisType, bjetbin) - diff --git a/scripts/purityAndStability_METbins_old.py b/scripts/purityAndStability_METbins_old.py deleted file mode 100644 index 1beae0c1..00000000 --- a/scripts/purityAndStability_METbins_old.py +++ /dev/null @@ -1,165 +0,0 @@ -''' -Created on Aug 1, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' -from tools import Styles -import FILES -import tools.ROOTFileReader as FileReader - -from ROOT import * -#import HistGetter -#import HistPlotter -#import inputFiles -from array import* -import os - -samples = [ - 'TTJet', -# 'POWHEG', -# 'PYTHIA6', -# 'MCatNLO' - ] - -metBins = [ - '0-24', - '25-44', - '45-69', - '70-99', - '100-inf' - ] - -metTypes = [ -# 'patMETsPFlow', - 'patType1CorrectedPFMet', -# 'patType1p2CorrectedPFMet' - ] - -bJetBins = [ -# '0btag', -# '0orMoreBtag', -# '1btag', -# '1orMoreBtag', - '2orMoreBtags' - ] - -outputFolder = "/storage/phjaj/Plots/" #REMEMBER TO CHANGE -outputFolder = "/storage/results/plots/" #REMEMBER TO CHANGE -#saveAs = HistPlotter.saveAs - -if __name__ == "__main__": - base = 'TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/' - base = 'TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/' -# base = "METAnalysis/" - - - gROOT.Reset() - gROOT.ForceStyle() - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 5001;') - - 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'} -# title1.AddText("e, #geq4 jets, #geq2 b-tags") - title1.AddText("#mu, #geq4 jets, #geq2 b-tags") - title2.AddText("CMS Simulation, L = 5.1fb^{-1} at #sqrt{s} = 7 TeV") - - hist.GetXaxis().SetTitle("generated MET [GeV]") - hist.GetYaxis().SetTitle("reconstructed MET [GeV]") - hist.SetTitle("") - -# metBins = {0:[0, 24], 1:[25, 44], 2:[45, 69], 3:[70, 99], 4:[100, "inf"]} -# -# for c in range (len(metBins)): -# cutBinX1 = hist.GetXaxis().FindBin(metBins[c][0]) -# cutBinY1 = hist.GetYaxis().FindBin(metBins[c][0]) -# if metBins[c][1] != "inf": -# cutBinX2 = hist.GetXaxis().FindBin(metBins[c][1]) -# cutBinY2 = hist.GetYaxis().FindBin(metBins[c][1]) -# elif metBins[c][1] == "inf": -# cutBinX2 = hist.GetNbinsX()+1 -# cutBinY2 = hist.GetNbinsY()+1 -# -# nReco = hist.Integral(0, hist.GetNbinsX()+1, cutBinY1, cutBinY2) -# nGen = hist.Integral(cutBinX1, cutBinX2, 0, hist.GetNbinsY()+1) -# nRecoPlusnGen = hist.Integral(cutBinX1, cutBinX2, cutBinY1, cutBinY2) -# -# purity = nRecoPlusnGen/nReco -# stability = nRecoPlusnGen/nGen -# correctionFactor1 = nGen/nReco -# correctionFactor2 = purity/stability -# -# outputFile.write("mettype = " + metType + "\n") -# outputFile.write("bin: " + str(metBins[c]) + "\n") -# outputFile.write("purity = " + str(purity) + "\n") -# outputFile.write("stability = " + str(stability) + "\n") -# outputFile.write("correctionFactor1 = nGen/nReco = " + str(correctionFactor1) + "\n") -# outputFile.write("correctionFactor2 = purity/stability = " + str(correctionFactor2) + "\n") -# -# if metType == "patType1p2CorrectedPFMet": -# bJetStart = 55 -# elif metType == "patType1CorrectedPFMet": -# bJetStart = 53 -# elif metType == "patMETsPFlow": -# bJetStart = 43 -# -# outputFile.write(histFile[bJetStart:] + " nReco = " + str(nReco) + "\n") -# outputFile.write(histFile[bJetStart:] + " nGen = " + str(nGen) + "\n") -# outputFile.write(histFile[bJetStart:] + " nRecoPlusnGen = " + str(nRecoPlusnGen) + "\n\n") - - canvas = TCanvas("canvas", "canvas", 1600, 1200) - #canvas.SetRightMargin(0.04) - outputFilename = histFile - hist.Draw("COLZ") - title1.Draw() - title2.Draw() - print "Saving canvas", path + "/" + metType + "_RecoMET_vs_GenMET_" + bJetBin + ".root" - canvas.SaveAs(path + "/" + metType + "_RecoMET_vs_GenMET_" + bJetBin + "_withoutMETbinLines.pdf") - - lineX1 = TLine(25, 0, 25, 300) - lineX1.Draw() - lineX2 = TLine(45, 0, 45, 300) - lineX2.Draw() - lineX3 = TLine(70, 0, 70, 300) - lineX3.Draw() - lineX4 = TLine(100, 0, 100, 300) - lineX4.Draw() - lineY1 = TLine(0, 25, 300, 25) - lineY1.Draw() - lineY2 = TLine(0, 45, 300, 45) - lineY2.Draw() - lineY3 = TLine(0, 70, 300, 70) - lineY3.Draw() - lineY4 = TLine(0, 100, 300, 100) - lineY4.Draw() - canvas.SaveAs(path + "/" + metType + "_RecoMET_vs_GenMET_" + bJetBin + "_withMETbinLines.pdf") diff --git a/scripts/roofittest2.py b/scripts/roofittest2.py deleted file mode 100644 index 9041e0a8..00000000 --- a/scripts/roofittest2.py +++ /dev/null @@ -1,136 +0,0 @@ -''' -Created on Aug 18, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' -#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') -temp_VPlusJets.Add(temp_wj) -n_ttbar = temp_tt.Integral() -n_wj = temp_wj.Integral() -n_VJ = temp_VPlusJets.Integral() -n_zj = temp_zj.Integral() -n_stop = temp_stop.Integral() -n_qcd = 1 -REBIN = 20 -n_signal = n_ttbar + n_stop -temp_VPlusJets.Rebin(REBIN) -temp_tt.Rebin(REBIN) -temp_wj.Rebin(REBIN) -temp_zj.Rebin(REBIN) -temp_stop.Rebin(REBIN) -temp_qcd.Rebin(REBIN) -temp_qcd2.Rebin(REBIN) -temp_qcd.Scale(n_qcd / temp_qcd.Integral()) -temp_qcd2.Scale(n_qcd/temp_qcd2.Integral()) -temp_signal = temp_tt.Clone('signal') -temp_signal.Add(temp_stop) - -leptonAbsEta = RooRealVar("leptonAbsEta", "leptonAbsEta", 0., 3.) -variables = RooArgList() -variables.add(leptonAbsEta) -vars_set = RooArgSet() -vars_set.add(leptonAbsEta) -n_event_obs = h_data.Integral(); -lowerBound = -10 * sqrt(n_event_obs); -lowerBound = 0 -upperBound = n_event_obs + 10 * sqrt(n_event_obs); -upperBound = n_event_obs -n_init = n_event_obs / 2.; -data = RooDataHist("data", "dataset with leptonAbsEta", variables, h_data) -rh_tt = RooDataHist("rh_tt", "tt", variables, temp_tt); -rh_wj = RooDataHist("rh_wj", "wj", variables, temp_wj); -rh_zj = RooDataHist("rh_zj", "zj", variables, temp_zj); -rh_VJ = RooDataHist("rh_VJ", "VJ", variables, temp_VPlusJets); -rh_qcd = RooDataHist("rh_qcd", "qcd", variables, temp_qcd); -rh_qcd2 = RooDataHist("rh_qcd", "qcd", variables, temp_qcd2); -rh_stop = RooDataHist("rh_stop", "singletop", variables, temp_stop); -rh_signal = RooDataHist("rh_signal", "signal", variables, temp_signal); - -pdf_tt = RooHistPdf("pdf_tt", "Signal pdf", vars_set, rh_tt, 0); -pdf_wj = RooHistPdf ("pdf_wj", "W+jets pdf", vars_set, rh_wj, 0); -pdf_zj = RooHistPdf ("pdf_zj", "Z+jets pdf", vars_set, rh_zj, 0); -pdf_VJ = RooHistPdf ("pdf_VJ", "Z+jets pdf", vars_set, rh_VJ, 0); -pdf_qcd = RooHistPdf("pdf_qcd", "QCD pdf ", vars_set, rh_qcd, 0); -pdf_qcd2 = RooHistPdf("pdf_qcd", "QCD pdf ", vars_set, rh_qcd2, 0); -pdf_stop = RooHistPdf("pdf_stop", "single top pdf", vars_set, rh_stop, 0); -pdf_signal = RooHistPdf("pdf_signal", "single top pdf", vars_set, rh_signal, 0); - -ntt = RooRealVar ("ntt", "number of tt signal events", n_ttbar, lowerBound, upperBound, "event"); -nwj = RooRealVar ("nwj", "number of W+jets bgnd events", n_wj, lowerBound, upperBound, "event"); -nzj = RooRealVar ("nzj", "number of Z+jets bgnd events", n_zj, lowerBound, upperBound, "event"); -nVJ = RooRealVar ("nVJ", "number of Z+jets bgnd events", n_VJ, lowerBound, upperBound, "event"); -nqcd = RooRealVar("nqcd", "number of QCD bgnd events", n_qcd, lowerBound, upperBound, "event"); -nstop = RooRealVar("nstop", "number of single top bgnd events", n_stop, lowerBound, upperBound, "event"); -nSignal = RooRealVar("nSignal", "number of single top + ttbar events", n_stop + n_ttbar, lowerBound, upperBound, "event"); -model = RooAddPdf("model", "sig+wj+zj+qcd+stop", - RooArgList(pdf_signal, pdf_VJ, pdf_qcd), - RooArgList(nSignal, nVJ, nqcd)) ; -fitResult = model.fitTo(data, RooFit.Minimizer("Minuit2", "Migrad"), - RooFit.NumCPU(8), RooFit.Extended(True), - RooFit.SumW2Error(False), RooFit.Strategy(2), - #verbosity - RooFit.PrintLevel(-1), RooFit.Warnings(False), RooFit.Verbose(False)) - -#ntt_fit = ntt.getVal(); -nSignal_fit = nSignal.getVal(); -nwj_fit = nwj.getVal(); -#nzj_fit = nzj.getVal(); -nVJ_fit = nVJ.getVal(); -nqcd_fit = nqcd.getVal(); -#nstop_fit = nstop.getVal(); - - -nSignal_fiterr = nSignal.getError(); -#ntt_fiterr = ntt.getError(); -nwj_fiterr = nwj.getError(); -nVJ_fiterr = nVJ.getError(); -nqcd_fiterr = nqcd.getError(); -#nstop_fiterr = nstop.getError(); - -print "Total events in signal region: ", n_event_obs; -print 'DATA:', n_event_obs -print 'N_tt:', n_ttbar -print 'N_signal', n_signal -print 'N_WJ:', n_wj -print 'N_VJ:', n_VJ -print 'N_sTop:', n_stop -print 'N_QCD:', n_qcd -print 'SumMC:', n_signal + n_VJ + n_qcd -print "nSignal fitted: %d +/- %d" % (nSignal_fit, nSignal_fiterr) -#print "ntt fitted: ", ntt_fit, " +/- ", ntt_fiterr; -#print "nwj fitted: %d +/- %d" %( nwj_fit, nwj_fiterr) -print "VJ fitted: %d +/- %d" % (nVJ_fit, nVJ_fiterr) -print "nqcd fitted: %d +/- %d" % (nqcd_fit, nqcd_fiterr) -#print "nstop fitted: ", nstop_fit, " +/- ", nstop_fiterr; -#print 'SumMC:', ntt_fit + nwj_fit + nzj_fit + nqcd_fit + nstop_fit -print 'SumMC: %d' % (nSignal_fit + nVJ_fit + nqcd_fit) diff --git a/scripts/startElectronAnalysis.sh b/scripts/startElectronAnalysis.sh deleted file mode 100755 index c3d3a9fe..00000000 --- a/scripts/startElectronAnalysis.sh +++ /dev/null @@ -1,7 +0,0 @@ -nohup BAT BristolAnalysis/Tools/python/electronAnalysis_specificMCOnly.py >&electronMC.log & -nohup BAT BristolAnalysis/Tools/python/electronAnalysis_DataOnly.py &> electronData.log & -nohup BAT BristolAnalysis/Tools/python/leptonAnalysis_CommonMCWithoutBigSamples.py &> leptonMC_smallSamples.log & -nohup BAT BristolAnalysis/Tools/python/leptonAnalysis_WPlusJetsMC.py &> leptonMC_WJets.log & -nohup BAT BristolAnalysis/Tools/python/leptonAnalysis_DYPlusJetsMC.py &> leptonMC_DYJets.log & -nohup BAT BristolAnalysis/Tools/python/leptonAnalysis_TTbar.py &> leptonMC_TTJets.log & - diff --git a/scripts/startMeasurement.sh b/scripts/startMeasurement.sh deleted file mode 100644 index aa37894d..00000000 --- a/scripts/startMeasurement.sh +++ /dev/null @@ -1,5 +0,0 @@ -python measureCrossSection.py -m type1 -b 0 &> measure_0btag.log & -python measureCrossSection.py -m type1 -b 0m &> measure_0orMoreBTags.log & -python measureCrossSection.py -m type1 -b 1 &> measure_1btag.log & -python measureCrossSection.py -m type1 -b 1m &> measure_1orMoreBTags.log & -python measureCrossSection.py -m type1 -b 2m &> measure_2orMoreBTags.log & diff --git a/scripts/tdrstyle.C b/scripts/tdrstyle.C deleted file mode 100644 index ce431063..00000000 --- a/scripts/tdrstyle.C +++ /dev/null @@ -1,157 +0,0 @@ -#include "TStyle.h" - -// tdrGrid: Turns the grid lines on (true) or off (false) - -// void tdrGrid(bool gridOn) { -// tdrStyle->SetPadGridX(gridOn); -// tdrStyle->SetPadGridY(gridOn); -// } - -// fixOverlay: Redraws the axis - -//void fixOverlay() { -// gPad->RedrawAxis(); -//} - -void setTDRStyle() { - TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); - -// For the canvas: - tdrStyle->SetCanvasBorderMode(0); - tdrStyle->SetCanvasColor(kWhite); - tdrStyle->SetCanvasDefH(600); //Height of canvas - tdrStyle->SetCanvasDefW(600); //Width of canvas - tdrStyle->SetCanvasDefX(0); //POsition on screen - tdrStyle->SetCanvasDefY(0); - -// For the Pad: - tdrStyle->SetPadBorderMode(0); - // tdrStyle->SetPadBorderSize(Width_t size = 1); - tdrStyle->SetPadColor(kWhite); - tdrStyle->SetPadGridX(false); - tdrStyle->SetPadGridY(false); - tdrStyle->SetGridColor(0); - tdrStyle->SetGridStyle(3); - tdrStyle->SetGridWidth(1); - -// For the frame: - tdrStyle->SetFrameBorderMode(0); - tdrStyle->SetFrameBorderSize(1); - tdrStyle->SetFrameFillColor(0); - tdrStyle->SetFrameFillStyle(0); - tdrStyle->SetFrameLineColor(1); - tdrStyle->SetFrameLineStyle(1); - tdrStyle->SetFrameLineWidth(1); - -// For the histo: - // tdrStyle->SetHistFillColor(1); - // tdrStyle->SetHistFillStyle(0); - tdrStyle->SetHistLineColor(1); - tdrStyle->SetHistLineStyle(0); - tdrStyle->SetHistLineWidth(1); - // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); - // tdrStyle->SetNumberContours(Int_t number = 20); - - tdrStyle->SetEndErrorSize(2); -// tdrStyle->SetErrorMarker(20); - tdrStyle->SetErrorX(0.); - - tdrStyle->SetMarkerStyle(20); - -//For the fit/function: - tdrStyle->SetOptFit(1); - tdrStyle->SetFitFormat("5.4g"); - tdrStyle->SetFuncColor(2); - tdrStyle->SetFuncStyle(1); - tdrStyle->SetFuncWidth(1); - -//For the date: - tdrStyle->SetOptDate(0); - // tdrStyle->SetDateX(Float_t x = 0.01); - // tdrStyle->SetDateY(Float_t y = 0.01); - -// For the statistics box: - tdrStyle->SetOptFile(0); - tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); - tdrStyle->SetStatColor(kWhite); - tdrStyle->SetStatFont(42); - tdrStyle->SetStatFontSize(0.025); - tdrStyle->SetStatTextColor(1); - tdrStyle->SetStatFormat("6.4g"); - tdrStyle->SetStatBorderSize(1); - tdrStyle->SetStatH(0.1); - tdrStyle->SetStatW(0.15); - // tdrStyle->SetStatStyle(Style_t style = 1001); - // tdrStyle->SetStatX(Float_t x = 0); - // tdrStyle->SetStatY(Float_t y = 0); - -// Margins: - tdrStyle->SetPadTopMargin(0.05); - tdrStyle->SetPadBottomMargin(0.13); - tdrStyle->SetPadLeftMargin(0.16); - tdrStyle->SetPadRightMargin(0.12); - -// For the Global title: - - tdrStyle->SetOptTitle(0); - tdrStyle->SetTitleFont(42); - tdrStyle->SetTitleColor(1); - tdrStyle->SetTitleTextColor(1); - tdrStyle->SetTitleFillColor(10); - tdrStyle->SetTitleFontSize(0.05); - // tdrStyle->SetTitleH(0); // Set the height of the title box - // tdrStyle->SetTitleW(0); // Set the width of the title box - // tdrStyle->SetTitleX(0); // Set the position of the title box - // tdrStyle->SetTitleY(0.985); // Set the position of the title box - // tdrStyle->SetTitleStyle(Style_t style = 1001); - // tdrStyle->SetTitleBorderSize(2); - -// For the axis titles: - - tdrStyle->SetTitleColor(1, "XYZ"); - tdrStyle->SetTitleFont(42, "XYZ"); - tdrStyle->SetTitleSize(0.06, "XYZ"); - // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? - // tdrStyle->SetTitleYSize(Float_t size = 0.02); - //tdrStyle->SetTitleXOffset(1.5); - //tdrStyle->SetTitleYOffset(3.5); - tdrStyle->SetTitleOffset(3.5, "Y"); // Another way to set the Offset - -// For the axis labels: - - tdrStyle->SetLabelColor(1, "XYZ"); - tdrStyle->SetLabelFont(42, "XYZ"); - tdrStyle->SetLabelOffset(0.05, "XYZ"); - tdrStyle->SetLabelSize(0.05, "XYZ"); - -// For the axis: - - tdrStyle->SetAxisColor(1, "XYZ"); - tdrStyle->SetStripDecimals(kTRUE); - tdrStyle->SetTickLength(0.03, "XYZ"); - tdrStyle->SetNdivisions(510, "XYZ"); - tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame - tdrStyle->SetPadTickY(1); - -// Change for log plots: - tdrStyle->SetOptLogx(0); - tdrStyle->SetOptLogy(0); - tdrStyle->SetOptLogz(0); - -// Postscript options: - tdrStyle->SetPaperSize(20.,20.); - // tdrStyle->SetLineScalePS(Float_t scale = 3); - // tdrStyle->SetLineStyleString(Int_t i, const char* text); - // tdrStyle->SetHeaderPS(const char* header); - // tdrStyle->SetTitlePS(const char* pstitle); - - // tdrStyle->SetBarOffset(Float_t baroff = 0.5); - // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); - // tdrStyle->SetPaintTextFormat(const char* format = "g"); - // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - // tdrStyle->SetTimeOffset(Double_t toffset); - // tdrStyle->SetHistMinimumZero(kTRUE); - - tdrStyle->cd(); - -} diff --git a/scripts/testOutput.png b/scripts/testOutput.png deleted file mode 100644 index 6bd44642be9fc80f134532888b76ecb30fae4fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46647 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 N2?+VN>FC+Z{{(u35{Uo+ diff --git a/scripts/tools/ColorPrinter.py b/scripts/tools/ColorPrinter.py deleted file mode 100644 index 3ba6d5d0..00000000 --- a/scripts/tools/ColorPrinter.py +++ /dev/null @@ -1,58 +0,0 @@ -''' -Created on Aug 4, 2012 - -@author: lkreczko -''' -CODE = { - 'ENDC':0, # RESET COLOR - 'BOLD':1, - 'UNDERLINE':4, - 'BLINK':5, - 'INVERT':7, - 'CONCEALD':8, - 'STRIKE':9, - 'GREY30':90, - 'GREY40':2, - 'GREY65':37, - 'GREY70':97, - 'GREY20_BG':40, - 'GREY33_BG':100, - 'GREY80_BG':47, - 'GREY93_BG':107, - 'DARK_RED':31, - 'RED':91, - 'RED_BG':41, - 'LIGHT_RED_BG':101, - 'DARK_YELLOW':33, - 'YELLOW':93, - 'YELLOW_BG':43, - 'LIGHT_YELLOW_BG':103, - 'DARK_BLUE':34, - 'BLUE':94, - 'BLUE_BG':44, - 'LIGHT_BLUE_BG':104, - 'DARK_MAGENTA':35, - 'PURPLE':95, - 'MAGENTA_BG':45, - 'LIGHT_PURPLE_BG':105, - 'DARK_CYAN':36, - 'AUQA':96, - 'CYAN_BG':46, - 'LIGHT_AUQA_BG':106, - 'DARK_GREEN':32, - 'GREEN':92, - 'GREEN_BG':42, - 'LIGHT_GREEN_BG':102, - 'BLACK':30, -} - -def termcode(num): - return '\033[%sm' % num - -def colorstr(text, color): - if color in CODE.keys(): - return termcode(CODE[color]) + text + termcode(CODE['ENDC']) - else: - return text - - diff --git a/scripts/tools/CrossSectionMeasurement.py b/scripts/tools/CrossSectionMeasurement.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/tools/ErrorCalculation.py b/scripts/tools/ErrorCalculation.py deleted file mode 100644 index b602de6b..00000000 --- a/scripts/tools/ErrorCalculation.py +++ /dev/null @@ -1,3 +0,0 @@ - -def getResultFromConstantRatio(result, ratio): - return 0, 0 \ No newline at end of file diff --git a/scripts/tools/ErrorSources.py b/scripts/tools/ErrorSources.py deleted file mode 100644 index 389280d9..00000000 --- a/scripts/tools/ErrorSources.py +++ /dev/null @@ -1,14 +0,0 @@ -''' -Created on Dec 1, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch - -Provides error sources for histograms: -- QCD estimation error -- QCD shape error -- b-tagging error (only for b-tagged hists), flat (in theory only up to 250GeV) -- lumi error, flat -- JEC error? Flat? -''' diff --git a/scripts/tools/FileUtilities.py b/scripts/tools/FileUtilities.py deleted file mode 100644 index 5e3cef83..00000000 --- a/scripts/tools/FileUtilities.py +++ /dev/null @@ -1,27 +0,0 @@ -import os -import json - -def createFolderIfDoesNotExist(path): - if not os.path.exists(path): - os.makedirs(path) - -def writeStringToFile(string, filename): - path = getPath(filename) - createFolderIfDoesNotExist(path) - #write file - output_file = open(filename, 'w') - output_file.write(string) - output_file.close() - -def getPath(filenameWithPath): - absolutePath = os.path.abspath(filenameWithPath) - filename = absolutePath.split('/')[-1] - path = absolutePath.replace(filename, '') - return path - -def readJSONFile(filename): - inputfile = open(filename, 'r') - inputJSON = ''.join(inputfile.readlines()) - objects = json.loads(inputJSON) - inputfile.close() - return objects \ No newline at end of file diff --git a/scripts/tools/Fitter.py b/scripts/tools/Fitter.py deleted file mode 100644 index 7acc7869..00000000 --- a/scripts/tools/Fitter.py +++ /dev/null @@ -1,82 +0,0 @@ -from ROOT import RooRealVar, RooDataHist, RooArgList, RooHistPdf, RooArgSet, RooAddPdf, RooMCStudy, RooFit -import PlottingUtilities as plotting - -class Fitter: - results = {} - templates = {} - normalisation = {} - dataLabel = '' - - def __init__(self): - pass - - def fit(self, histograms = {}, dataLabel = 'data'): - self.dataLabel = dataLabel - self.templates = self.generateTemplatesAndNormalisation(histograms) - - def generateTemplatesAndNormalisation(self, histograms): - for sample, histogram in histograms.iteritems(): - self.normalisation[sample] = histogram.Integral() - temp = histogram.Clone(sample + '_' + 'template') - self.templates[sample] = plotting.normalise(temp) - - def getResults(self): - return self.results - - def getResult(self, label): - return self.results[label] - - -class RooFitter(Fitter): - pdfs = {} - variableName = '' - minX = 0 - maxX = 0 - - def __init__(self, variableName, minX, maxX): - Fitter.__init__(self) - self.variableName = variableName - self.minX = minX - self.maxX = maxX - - def fit(self, histograms = {}, dataLabel = 'data', signalLabel = 'TTJet'): - self.dataLabel = dataLabel - self.signalLabel = signalLabel - - def generatePDFs(self, histograms): - pass - -class TMinuitFitter(Fitter): - def __init__(self): - Fitter.__init__(self) - - -def goodnessOfFit(fitter): - pass - - - -#TODO: move bkgN to list -# 1 data, 1 signal and N background histograms -def performFitInLeptonAbsEta(data_histogram, signal_histogram, bkg1_histogram, bkg2_histogram): - N_Data = data_histogram.Integral() - N_signal = signal_histogram.Integral() - N_bkg1 = bkg1_histogram.Integral() - N_bkg2 = bkg2_histogram.Integral() - leptonAbsEta = RooRealVar("leptonAbsEta", "leptonAbsEta", 0., 3.) - variables = RooArgList() - variables.add(leptonAbsEta) - variable_set = RooArgSet() - variable_set.add(leptonAbsEta) - - lowerBound = 0 - upperBound = N_Data*2 - - data_RooDataHist = RooDataHist("data", "dataset with leptonAbsEta", variables, data_histogram) - signal_RooDataHist = RooDataHist("rh_signal", "signal", variables, signal_histogram); - bkg1_RooDataHist = RooDataHist("rh_bkg1", "bkg1", variables, bkg1_histogram); - bkg2_RooDataHist = RooDataHist("rh_bkg2", "bkg2", variables, bkg2_histogram); - - signal_RooHistPdf = RooHistPdf("pdf_signal", "Signal PDF", variable_set, signal_RooDataHist, 0) - signal_RooHistPdf = RooHistPdf("pdf_signal", "Signal PDF", variable_set, signal_RooDataHist, 0) - diff --git a/scripts/tools/Log.py b/scripts/tools/Log.py deleted file mode 100644 index c2fb6743..00000000 --- a/scripts/tools/Log.py +++ /dev/null @@ -1,6 +0,0 @@ - - -def logErrorMessage(msg): - print '=' * 60 - print 'An error occurred:', msg - print '=' * 60 \ No newline at end of file diff --git a/scripts/tools/NTuples.py b/scripts/tools/NTuples.py deleted file mode 100644 index bf817bfe..00000000 --- a/scripts/tools/NTuples.py +++ /dev/null @@ -1,7 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' diff --git a/scripts/tools/PlottingUtilities.py b/scripts/tools/PlottingUtilities.py deleted file mode 100644 index 42b03abc..00000000 --- a/scripts/tools/PlottingUtilities.py +++ /dev/null @@ -1,269 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' -from ROOT import TLegend, TCanvas, TPaveText, gROOT -import Styles -import FileUtilities -qcd_samples = [ 'QCD_Pt-20to30_BCtoE', - 'QCD_Pt-30to80_BCtoE', - 'QCD_Pt-80to170_BCtoE', - 'QCD_Pt-20to30_EMEnriched', - 'QCD_Pt-30to80_EMEnriched', - 'QCD_Pt-80to170_EMEnriched', - 'GJets_HT-40To100', - 'GJets_HT-100To200', - 'GJets_HT-200'] -singleTop_samples = [ 'T_tW-channel', - 'T_t-channel', - 'T_s-channel', - 'Tbar_tW-channel', - 'Tbar_t-channel', - 'Tbar_s-channel'] -wplusjets_samples = [ 'W1Jet', 'W2Jets', 'W3Jets', 'W4Jets'] -diboson_samples = [ 'WWtoAnything', 'WZtoAnything', 'ZZtoAnything'] -signal_samples = [ 'TTJet', 'SingleTop'] -allMC_samples = [ 'TTJet', 'DYJetsToLL', 'QCD', 'Di-Boson', 'W+Jets', 'SingleTop'] - -defaultCanvasWidth = 1600 -defaultCanvasHeight = 1200 - -class Plot(): - ''' - Plot unites the tuning parameters for plot style - ''' - def __init__(self): - self.rebin = 1 - self.scale = 1 - self.UserRange = (0, 0) - self.name = "" - self.location = "" - self.jetBins = [] - self.bJetBins = [] - self.qcdShapeFrom = "" - self.qcdEstimate = 0 - -def compareShapes(histograms=[], histogramlables=[], styles=[], maxfactor = 1.3): - leg = TLegend(0.6, 0.7, 0.94, 0.92); - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - AddLegendEntry = leg.AddEntry - - c = TCanvas("compareShapes", 'compareShapes', defaultCanvasWidth, defaultCanvasHeight) - c.cd() - - for hist, label, style in zip(histograms,histogramlables,styles): - hist.Sumw2() - hist = normalise(hist) - hist.SetLineColor(style['color']) - hist.SetLineWidth(4) - - AddLegendEntry(hist, label, "f") - - index = 0 - maximum = getMax(histograms) - for hist in histograms: - if index == 0: - hist.GetYaxis().SetRangeUser(0, maximum*maxfactor) - hist.Draw('histe') - else: - hist.Draw('histe same') - index += 1 - - return c, leg - -def create_cms_label(lumiInInvPb, njet="4orMoreJets", nbjet="0orMoreBtag", channel="e"): - jetBinsLatex = {'0jet':'0 jet', '0orMoreJets':'#geq 0 jets', '1jet':'1 jet', '1orMoreJets':'#geq 1 jet', - '2jets':'2 jets', '2orMoreJets':'#geq 2 jets', '3jets':'3 jets', '3orMoreJets':'#geq 3 jets', - '4orMoreJets':'#geq 4 jets'} - - BjetBinsLatex = {'0btag':'0 b-tags', '0orMoreBtag':'#geq 0 b-tags', '1btag':'1 b-tags', - '1orMoreBtag':'#geq 1 b-tags', - '2btags':'2 b-tags', '2orMoreBtags':'#geq 2 b-tags', - '3btags':'3 b-tags', '3orMoreBtags':'#geq 3 b-tags', - '4orMoreBtags':'#geq 4 b-tags'} - - mytext = TPaveText(0.35, 0.7, 0.7, 0.93, "NDC") - mytext.AddText("CMS Preliminary") - mytext.AddText("%.2f fb^{-1} at #sqrt{s} = 7 TeV" % (lumiInInvPb / 1000)) - if njet != "": - mytext.AddText(channel + ", %s, %s" % (jetBinsLatex[njet], BjetBinsLatex[nbjet])) - - mytext.SetFillStyle(0); - mytext.SetBorderSize(0); - mytext.SetTextFont(42); - mytext.SetTextAlign(13); - - return mytext - -def create_legend(x0=0.696, y0 = 0.95, x1=0.94, y1=0.55): -# legend = TLegend(0.6, 0.7, 0.94, 0.92); - legend = TLegend(x0, y0, x1, y1) - legend.SetBorderSize(0); - legend.SetLineStyle(0); - legend.SetTextFont(42); - legend.SetFillStyle(0); - return legend - -def saveAs(canvas, name, outputFormats=['png'], outputFolder=''): - canvas.RedrawAxis() - if not outputFolder == '' and not outputFolder.endswith('/'): - outputFolder += '/' - for outputFormat in outputFormats: - fullFileName = outputFolder + name + '.' + outputFormat - if '/' in fullFileName: - path = fullFileName[:fullFileName.rfind('/')] - FileUtilities.createFolderIfDoesNotExist(path) - - canvas.SaveAs(fullFileName) - -def normalise(histogram): - if histogram and histogram.Integral() > 0: - histogram.Scale(1 / histogram.Integral()) - return histogram - -def rebin(hists, nbins, histname = ''): - for sample in hists.keys(): - if isinstance(hists[sample], dict): - if len(hists[sample].keys()) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].Rebin(nbins) - elif hists[sample].has_key(histname): - hists[sample][histname].Rebin(nbins) - else: - hists[sample].Rebin(nbins) - return hists - -def setXRange(hists, limits=(0, 5000), histname=''): - for sample in hists.keys(): - if len(hists[sample].keys()) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - if hists[sample][name] and hists[sample][name].GetXaxis(): - hists[sample][name].GetXaxis().SetRangeUser(limits[0], limits[1]) - else: - print "Can't find histogram", sample, name - elif hists[sample].has_key(histname): - if hists[sample][name]: - hists[sample][histname].GetXaxis().SetRangeUser(limits[0], limits[1]); - else: - print "Can't find histogram", sample, name - return hists - -def setYRange(hists, limits=(0, 5000), histname=''): - for sample in hists.keys(): - if len(hists[sample].keys()) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - if hists[sample][name] and hists[sample][name].GetYaxis(): - hists[sample][name].GetYaxis().SetRangeUser(limits[0], limits[1]) - else: - print "Can't find histogram", sample, name - elif hists[sample].has_key(histname): - if hists[sample][name]: - hists[sample][histname].GetYaxis().SetRangeUser(limits[0], limits[1]); - else: - print "Can't find histogram", sample, name - return hists - -def setXTitle(hists, title, histname=''): - for sample in hists.keys(): - if isinstance(hists[sample], dict): - if len(hists[sample].keys()) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].SetXTitle(title) - elif hists[sample].has_key(histname): - hists[sample][histname].SetXTitle(title); - else: - hists[sample].SetXTitle(title); - return hists - -def setYTitle(hists, title, histname=''): - for sample in hists.keys(): - if isinstance(hists[sample], dict): - if len(hists[sample].keys()) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].SetYTitle(title) - elif hists[sample].has_key(histname): - hists[sample][histname].SetYTitle(title); - else: - hists[sample].SetYTitle(title); - return hists - -def setStyle(): - tdrStyle = Styles.tdrStyle.getStyle() - - #slight adaptation - tdrStyle.SetPadRightMargin(0.05); #originally was 0.02, too narrow! - tdrStyle.SetStatH(0.2); - #tdrStyle.SetOptStat(1110);//off title - tdrStyle.SetOptStat(0);#off title - tdrStyle.SetOptFit(0);#off title -# tdrStyle.SetTitleYOffset(1.6); - tdrStyle.cd(); - gROOT.ForceStyle(); - -def getMax(histograms): - maximum = 0 - for hist in histograms: - current_max = hist.GetMaximum() - if current_max > maximum: - maximum = current_max - return maximum -#Usage: -#histograms['summedSample'] = sumSamples(histograms, ['sample1','sample2', 'sample3']) -def sumSamples(histograms = {}, samplesToSum = []): - summedHists = {} - summedHist = None - doubleDictionary = False - - for sample in samplesToSum: - hists = histograms[sample] - if isinstance(hists, dict): - doubleDictionary = True - for histname, hist in hists.iteritems(): - if summedHists.has_key(histname): - summedHists[histname] += hist - else: - summedHists[histname] = hist - else: - if summedHist: - summedHist += hists - else: - summedHist = hists - if doubleDictionary: - return summedHists - else: - return summedHist - - -def plot(histograms = [], data = 0, makeStack = True, outputFormats = ['png', 'pdf'], normalise = False, ratio = False ): - pass \ No newline at end of file diff --git a/scripts/tools/Printer.py b/scripts/tools/Printer.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/tools/ROOTFileReader.py b/scripts/tools/ROOTFileReader.py deleted file mode 100644 index 2c6560f2..00000000 --- a/scripts/tools/ROOTFileReader.py +++ /dev/null @@ -1,99 +0,0 @@ -from ROOT import TFile, gROOT -import tools.Log as Log -from config.sampleSummations import btag_bins_inclusive, btag_sums - -openRootFile = TFile.Open -gcd = gROOT.cd -#Reads a single histogram from a single file -def getHistogramFromFile(histname, filename): - rootFile = TFile.Open(filename) - getHist = rootFile.Get - testIfFalidFile(rootFile, filename) - - btag_found = '' - for btag in btag_bins_inclusive: - if btag in histname: - btag_found = btag - break - rootHist = None -# sumEvents = 0 - if btag_found == '': - rootHist = getHist(histname) - if not isValidHist(rootHist, histname, filename): - return - else: - listOfExclusiveBins = btag_sums[btag_found] - exclhists = [] - - for excbin in listOfExclusiveBins: - hist = getHist(histname.replace(btag_found, excbin)) - if not isValidHist(hist, histname.replace(btag_found, excbin), filename): - return - exclhists.append(hist) - rootHist = exclhists[0].Clone() - - for hist in exclhists[1:]: - rootHist.Add(hist) - - gcd() - histogram = rootHist.Clone() - rootFile.Close() - - return histogram -def testIfFalidFile(rootFile, filename): - if not rootFile: - Log.logErrorMessage('Could not find rootFile: ' + filename) - -def isValidHist(rootHist, histname, filename): - if not rootHist: - Log.logErrorMessage('Histogram \n"%s" \ncould not be found in rootFile:\n%s' % (histname, filename)) - return False - return True - -#Reads a single histogram from each given rootFile -#and returns a dictionary with the same naming as 'files' -def getHistogramDictionary(histname, files={}): - hists = {} - for sample, filename in files.iteritems(): - hists[sample] = getHistogramFromFile(histname, filename) - return hists - -#Reads a list of histograms from each given file -def getHistogramsFromFiles(histnames=[], files={}, verbose = False): - histograms = {} - nHistograms = 0 - for sample, filename in files.iteritems(): - rootFile = openRootFile(filename) - getHist = rootFile.Get - histograms[sample] = {} - for histname in histnames: - btag_found = '' - for btag in btag_bins_inclusive: - if btag in histname: - btag_found = btag - break - rootHist = None - if btag_found == '': - rootHist = getHist(histname) - if not isValidHist(rootHist, histname, filename): - continue - else: - listOfExclusiveBins = btag_sums[btag_found] - exclhists = [] - for excbin in listOfExclusiveBins: - hist = getHist(histname.replace(btag_found, excbin)) - if not isValidHist(hist, histname.replace(btag_found, excbin), filename): - continue - exclhists.append(hist) - rootHist = exclhists[0].Clone() - for hist in exclhists[1:]: - rootHist.Add(hist) - gcd() - nHistograms += 1 - histograms[sample][histname] = rootHist.Clone() - if verbose and nHistograms % 5000 == 0: - print 'Read', nHistograms, 'histograms' - rootFile.Close() - return histograms - - diff --git a/scripts/tools/ROOTFileWriter.py b/scripts/tools/ROOTFileWriter.py deleted file mode 100644 index e854345a..00000000 --- a/scripts/tools/ROOTFileWriter.py +++ /dev/null @@ -1,8 +0,0 @@ -def writeHistogramDictionaryToFile(histDictionary, fileName, mode = 'w'): - pass - - -def getPath(pathWithObject): - objectName = pathWithObject.split('/')[-1] - path = pathWithObject.replace(objectName, '') - return path \ No newline at end of file diff --git a/scripts/tools/Styles.py b/scripts/tools/Styles.py deleted file mode 100644 index 5e800783..00000000 --- a/scripts/tools/Styles.py +++ /dev/null @@ -1,153 +0,0 @@ -''' -Created on Jan 4, 2012 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' -from ROOT import TStyle, kWhite, kTRUE - -class tdrStyle(): - - @staticmethod - def getStyle(): - tdrStyle = TStyle("tdrStyle","Style for P-TDR"); - - # For the canvas: - tdrStyle.SetCanvasBorderMode(0); - tdrStyle.SetCanvasColor(kWhite); - tdrStyle.SetCanvasDefH(600); #Height of canvas - tdrStyle.SetCanvasDefW(600); #Width of canvas - tdrStyle.SetCanvasDefX(0); #POsition on screen - tdrStyle.SetCanvasDefY(0); - - # For the Pad: - tdrStyle.SetPadBorderMode(0); - # tdrStyle.SetPadBorderSize(Width_t size = 1); - tdrStyle.SetPadColor(kWhite); - tdrStyle.SetPadGridX(False); - tdrStyle.SetPadGridY(False); - tdrStyle.SetGridColor(0); - tdrStyle.SetGridStyle(3); - tdrStyle.SetGridWidth(1); - - # For the frame: - tdrStyle.SetFrameBorderMode(0); - tdrStyle.SetFrameBorderSize(1); - tdrStyle.SetFrameFillColor(0); - tdrStyle.SetFrameFillStyle(0); - tdrStyle.SetFrameLineColor(1); - tdrStyle.SetFrameLineStyle(1); - tdrStyle.SetFrameLineWidth(1); - - # For the histo: - # tdrStyle.SetHistFillColor(1); - # tdrStyle.SetHistFillStyle(0); - tdrStyle.SetHistLineColor(1); - tdrStyle.SetHistLineStyle(0); - tdrStyle.SetHistLineWidth(1); - # tdrStyle.SetLegoInnerR(Float_t rad = 0.5); - # tdrStyle.SetNumberContours(Int_t number = 20); - - tdrStyle.SetEndErrorSize(2); - # tdrStyle.SetErrorMarker(20); - tdrStyle.SetErrorX(0.); - - tdrStyle.SetMarkerStyle(20); - - #For the fit/function: - tdrStyle.SetOptFit(1); - tdrStyle.SetFitFormat("5.4g"); - tdrStyle.SetFuncColor(2); - tdrStyle.SetFuncStyle(1); - tdrStyle.SetFuncWidth(1); - - #For the date: - tdrStyle.SetOptDate(0); - # tdrStyle.SetDateX(Float_t x = 0.01); - # tdrStyle.SetDateY(Float_t y = 0.01); - - # For the statistics box: - tdrStyle.SetOptFile(0); - tdrStyle.SetOptStat(0); # To display the mean and RMS: SetOptStat("mr"); - tdrStyle.SetStatColor(kWhite); - tdrStyle.SetStatFont(42); - tdrStyle.SetStatFontSize(0.025); - tdrStyle.SetStatTextColor(1); - tdrStyle.SetStatFormat("6.4g"); - tdrStyle.SetStatBorderSize(1); - tdrStyle.SetStatH(0.1); - tdrStyle.SetStatW(0.15); - # tdrStyle.SetStatStyle(Style_t style = 1001); - # tdrStyle.SetStatX(Float_t x = 0); - # tdrStyle.SetStatY(Float_t y = 0); - - # Margins: - tdrStyle.SetPadTopMargin(0.05); - tdrStyle.SetPadBottomMargin(0.13); - tdrStyle.SetPadLeftMargin(0.16); - tdrStyle.SetPadRightMargin(0.02); - - # For the Global title: - - tdrStyle.SetOptTitle(0); - tdrStyle.SetTitleFont(42); - tdrStyle.SetTitleColor(1); - tdrStyle.SetTitleTextColor(1); - tdrStyle.SetTitleFillColor(10); - tdrStyle.SetTitleFontSize(0.05); - # tdrStyle.SetTitleH(0); # Set the height of the title box - # tdrStyle.SetTitleW(0); # Set the width of the title box - # tdrStyle.SetTitleX(0); # Set the position of the title box - # tdrStyle.SetTitleY(0.985); # Set the position of the title box - # tdrStyle.SetTitleStyle(Style_t style = 1001); - # tdrStyle.SetTitleBorderSize(2); - - # For the axis titles: - - tdrStyle.SetTitleColor(1, "XYZ"); - tdrStyle.SetTitleFont(42, "XYZ"); - tdrStyle.SetTitleSize(0.06, "XYZ"); - # tdrStyle.SetTitleXSize(Float_t size = 0.02); # Another way to set the size? - # tdrStyle.SetTitleYSize(Float_t size = 0.02); - tdrStyle.SetTitleXOffset(0.9); - tdrStyle.SetTitleYOffset(1.25); - # tdrStyle.SetTitleOffset(1.1, "Y"); # Another way to set the Offset - - # For the axis labels: - - tdrStyle.SetLabelColor(1, "XYZ"); - tdrStyle.SetLabelFont(42, "XYZ"); - tdrStyle.SetLabelOffset(0.007, "XYZ"); - tdrStyle.SetLabelSize(0.05, "XYZ"); - - # For the axis: - - tdrStyle.SetAxisColor(1, "XYZ"); - tdrStyle.SetStripDecimals(kTRUE); - tdrStyle.SetTickLength(0.03, "XYZ"); - tdrStyle.SetNdivisions(510, "XYZ"); - tdrStyle.SetPadTickX(1); # To get tick marks on the opposite side of the frame - tdrStyle.SetPadTickY(1); - - # Change for log plots: - tdrStyle.SetOptLogx(0); - tdrStyle.SetOptLogy(0); - tdrStyle.SetOptLogz(0); - - # Postscript options: - tdrStyle.SetPaperSize(20.,20.); - # tdrStyle.SetLineScalePS(Float_t scale = 3); - # tdrStyle.SetLineStyleString(Int_t i, const char* text); - # tdrStyle.SetHeaderPS(const char* header); - # tdrStyle.SetTitlePS(const char* pstitle); - - # tdrStyle.SetBarOffset(Float_t baroff = 0.5); - # tdrStyle.SetBarWidth(Float_t barwidth = 0.5); - # tdrStyle.SetPaintTextFormat(const char* format = "g"); - # tdrStyle.SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - # tdrStyle.SetTimeOffset(Double_t toffset); - # tdrStyle.SetHistMinimumZero(kTRUE); - - tdrStyle.cd(); - return tdrStyle diff --git a/scripts/tools/Table.py b/scripts/tools/Table.py deleted file mode 100644 index 60914414..00000000 --- a/scripts/tools/Table.py +++ /dev/null @@ -1,15 +0,0 @@ - -#Class to represent a table and manipulate the string representation -class Table(): - #create a table with a header (first row) and a footer (last row) - def __init__(self, header = True, footer = False): - self.rows = [] - - def addrow(self, row): - self.rows.append(row) - - def convertToTwikiEntry(self): - pass - - def convertToLatex(self): - pass \ No newline at end of file diff --git a/scripts/tools/Timer.py b/scripts/tools/Timer.py deleted file mode 100644 index 5b016a79..00000000 --- a/scripts/tools/Timer.py +++ /dev/null @@ -1,13 +0,0 @@ - -from time import clock - -class Timer(): - - def __init__(self): - self.current_time = clock() - - def elapsedTime(self): - return clock() - self.current_time - - def restart(self): - self.current_time = clock() diff --git a/scripts/tools/Trigger.py b/scripts/tools/Trigger.py deleted file mode 100644 index bf817bfe..00000000 --- a/scripts/tools/Trigger.py +++ /dev/null @@ -1,7 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' diff --git a/scripts/tools/WPlusJetsEstimation.py b/scripts/tools/WPlusJetsEstimation.py deleted file mode 100644 index bf817bfe..00000000 --- a/scripts/tools/WPlusJetsEstimation.py +++ /dev/null @@ -1,7 +0,0 @@ -''' -Created on Nov 23, 2011 - -@author: Lukasz Kreczko - -Email: Lukasz.Kreczko@cern.ch -''' diff --git a/scripts/tools/__init__.py b/scripts/tools/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/verifyNTupleProduction.py b/scripts/verifyNTupleProduction.py deleted file mode 100644 index e19a3338..00000000 --- a/scripts/verifyNTupleProduction.py +++ /dev/null @@ -1,4 +0,0 @@ -#test if the skim is as expected -#test the isolation distribution of (loose) leptons, show max isolation value! -#print list of found triggers -#print list of not found triggers \ No newline at end of file diff --git a/scripts/workspace_electron_channel_2orMoreBtags.py b/scripts/workspace_electron_channel_2orMoreBtags.py deleted file mode 100644 index f8a40d87..00000000 --- a/scripts/workspace_electron_channel_2orMoreBtags.py +++ /dev/null @@ -1,28 +0,0 @@ -from ROOT import RooWorkspace - -workspace = RooWorkspace("electron_channel_2orMoreBtags") - -workspace.factory('lepton_AbsoluteEta[0]') -workspace.factory('lumi[0]') - -workspace.factory('n_signal[2200,0,10000]') -workspace.factory('n_VPlusJets[200,0,10000]') -workspace.factory('n_QCD[10,0,10000]') -workspace.factory('sum::yield(n_signal,n_VPlusJets,n_QCD)') - -workspace.factory( "Poisson::model_core(n,yield)" ) - -workspace.factory( "lumi[0]" ); - -# cross section - parameter of interest -workspace.factory( "xsec[0,0,0.1]" ); - -# selection efficiency * acceptance -workspace.factory( "efficiency[0]" ); - -# signal yield -workspace.factory( "prod::nsig(lumi,xsec,efficiency)" ); -workspace.factory( "Uniform::prior(xsec)" ) -workspace.Print() - -workspace.SaveAs('electron_channel_2orMoreBtags.root') \ No newline at end of file diff --git a/scripts_old/.cvsignore b/scripts_old/.cvsignore deleted file mode 100644 index 13771a85..00000000 --- a/scripts_old/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -mc_only_18Nov10_23h14m -.cvsignore diff --git a/scripts_old/EstimateQCD.py b/scripts_old/EstimateQCD.py deleted file mode 100644 index 22cfc69c..00000000 --- a/scripts_old/EstimateQCD.py +++ /dev/null @@ -1,653 +0,0 @@ -from __future__ import division - -import HistGetter -import HistPlotter -from tdrStyle import * -from ROOT import * -from math import pow, exp, sqrt -from copy import deepcopy -from array import array -import inputFiles - -class QCDEstimator: - luminosity = 1091.45#pb-1 - mc_luminosity = 1091.45#pb-1 - luminosity_unit = 'pb-1' - scale = luminosity / mc_luminosity - jetBins = [#'0jet', '0orMoreJets', '1jet', '1orMoreJets', '2jets', '2orMoreJets', - '3jets', '3orMoreJets', '4orMoreJets'] - jetBinsLatex = {'0jet':'0 jet', '0orMoreJets':'#geq 0 jets', '1jet':'1 jet', '1orMoreJets':'#geq 1 jet', - '2jets':'2 jets', '2orMoreJets':'#geq 2 jets', '3jets':'3 jets', '3orMoreJets':'#geq 3 jets', - '4orMoreJets':'#geq 4 jets'} - binWidth = 0.01 - rebin = 10 - fitRangesClosureTest = [ ( 0.1, 0.9 ), ( 0.1, 1.0 ), ( 0.1, 1.1 ), - ( 0.2, 0.9 ), ( 0.2, 1.0 ), ( 0.2, 1.1 ), - ( 0.3, 0.9 ), ( 0.3, 1.0 ), ( 0.3, 1.1 )] - - fitRangesEstimation = [ #( 0.1, 1.1 ), - ( 0.2, 1.6 ), - ( 0.3, 1.6 ), - ( 0.4, 1.6 )] - signalRegion = ( 0, 0.1 ) - maxValue = 1.6 - pfIsoHistogramPrefix = 'QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_' - pfIsoControlRegionHistogramPrefix = 'QCDStudy/QCDest_PFIsolation_controlRegion_'#WithMETCutAndAsymJetCuts_' - relIsoHistogramPrefix = 'QCDStudy/QCDest_CombRelIso_' - pfIsoResults = {} - relIsoResults = {} - allPfIsoResults = {} - allRelIsoResults = {} - - useEntryAsData = 'data' - constrainFit = False - numberOfFreeParameters = 0 - - currentFitRange = ( 0.1, 1.6 ) - currentFitFuntion = 'gaus' - currentJetBin = jetBins[-1] - - outputFormat = 'png' - outputFolder = '' - - def __init__( self, files ): - self.files = files -# HistGetter.samplefiles = files - self.histograms = {} -# self.histGetter = HistGetter() - HistPlotter.setStyle() - self.getHistograms() - self.applyStyleAndCreateStack() - - for bin in self.jetBins: - self.pfIsoResults[bin] = {'actualNumberOfQCDEvents': 0, 'estimatedNumberOfQCDEvents':0, - 'fitFunction': None, 'fitParameters': {}, 'numberOfAllDataEvents':0, - 'numberOfAllMCEvents':0} - self.relIsoResults[bin] = {'actualNumberOfQCDEvents': 0, 'estimatedNumberOfQCDEvents':0, - 'fitFunction': None, 'fitParameters': {}, 'numberOfAllDataEvents':0, - 'numberOfAllMCEvents':0} - - def getHistograms( self ): - relIsoHists = [self.relIsoHistogramPrefix + jetbin for jetbin in self.jetBins] - pfIsoHists = [self.pfIsoHistogramPrefix + jetbin for jetbin in self.jetBins] - pfIsoControlHists = [self.pfIsoControlRegionHistogramPrefix + jetbin for jetbin in self.jetBins] - allHists = relIsoHists - allHists.extend( pfIsoHists ) - allHists.extend( pfIsoControlHists ) - #print allHists -# HistGetter.hists = allHists - - self.histograms = HistGetter.getHistsFromFiles(allHists, self.files); - self.histograms = HistGetter.addSampleSum( self.histograms ) - - def applyStyleAndCreateStack( self ): -# self.histograms = HistPlotter.applyDefaultStylesAndColors(self.histograms) - samplesOfInterest = ['data', 'qcd', 'zjets', 'wjets', 'singleTop', 'ttbar', 'allMC'] - colors = {'ttbar' : kRed + 1, - 'wjets' : kGreen - 3, - 'zjets' : kAzure - 2, - 'qcd' : kYellow, - 'singleTop' : kMagenta} -# - mcStack = {} - for sample in samplesOfInterest:#sample - for histname in self.histograms[sample].keys(): - self.histograms[sample][histname].Rebin( self.rebin ) - if not sample in ['data', 'allMC']: - self.histograms[sample][histname].Scale( self.scale ) - self.histograms[sample][histname].SetFillStyle( 1001 ) - self.histograms[sample][histname].SetFillColor( colors[sample] ) -## if sample == 'ttbar': -## self.histograms[sample][histname].Scale( 1.15 ) - if not mcStack.has_key( histname ): - mcStack[histname] = THStack( "MC_" + histname, "MC_" + histname ); - mcStack[histname].Add( self.histograms[sample][histname] ) - if sample == 'allMC': - self.histograms[sample][histname].Scale( self.scale ) -# else: -# self.histograms[sample][histname].SetMarkerStyle( 8 ); -# -# - self.histograms['MCStack'] = mcStack -# HistPlotter.setStyle() - self.setStyle() - print "=" * 40 - print "data integrated luminosity:", self.luminosity, self.luminosity_unit - print "MC integrated luminosity:", self.mc_luminosity, self.luminosity_unit - print "MC scale factor: ", self.scale - print '=' * 40 - - - def setStyle( self ): - tdrstyle = setTDRStyle(); - tdrstyle.SetPadRightMargin( 0.05 )#originally was 0.02, too narrow! - tdrStyle.SetStatH( 0.2 ); - tdrStyle.SetOptStat( 0 );#off title - tdrStyle.SetOptFit( 0 );#off title - tdrStyle.cd(); - gROOT.ForceStyle(); - gStyle.SetTitleH( 0.1 ); - gStyle.SetStatH( 0.22 ); #0.24); - gStyle.SetStatW( 0.22 ); #0.26); - gStyle.SetOptStat( 1 ); #on stat - gStyle.SetLineScalePS( 2 ); #D=3 - gStyle.SetOptFit( 112 ); - - - def doClosureTests( self, function = 'gaus' ): - self.useEntryAsData = 'allMC' - self.currentFitFuntion = function - - for fitRange in self.fitRangesClosureTest: - self.currentFitRange = fitRange - for bin in self.jetBins: - self.currentJetBin = bin - self.EstimateJetBin( bin ) - self.plot( self.pfIsoHistogramPrefix + bin, self.pfIsoResults[bin] ) -# self.plot( self.relIsoHistogramPrefix + bin, self.relIsoResults[bin] ) - self.allPfIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.pfIsoResults ) -# self.allRelIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.relIsoResults ) - self.plotClosureTest( self.pfIsoHistogramPrefix, self.allPfIsoResults ) -# self.plotClosureTest( self.relIsoHistogramPrefix, self.allRelIsoResults ) - - - def doEstimate( self, function = 'gaus' ): - self.useEntryAsData = 'data' - self.currentFitFuntion = function - - for fitRange in self.fitRangesEstimation: - self.currentFitRange = fitRange - for bin in self.jetBins: - self.currentJetBin = bin - self.EstimateJetBin( bin ) - self.plot( self.pfIsoHistogramPrefix + bin, self.pfIsoResults[bin] ) - self.plot( self.relIsoHistogramPrefix + bin, self.relIsoResults[bin] ) - self.allPfIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.pfIsoResults ) - self.allRelIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.relIsoResults ) - - def EstimateJetBin( self, jetbin ): -# fitRange = self.currentFitRange - function = self.currentFitFuntion - - QCD = self.histograms['qcd'] - data = self.histograms[self.useEntryAsData] - allMC = self.histograms['allMC'] - pfIsoHist = self.pfIsoHistogramPrefix + jetbin - relIsoHist = self.relIsoHistogramPrefix + jetbin - - self.pfIsoResults[jetbin]['actualNumberOfQCDEvents'] = QCD[pfIsoHist].GetBinContent(1) - self.pfIsoResults[jetbin]['numberOfAllDataEvents'] = data[pfIsoHist].GetBinContent(1) - self.pfIsoResults[jetbin]['numberOfAllMCEvents'] = allMC[pfIsoHist].GetBinContent(1) - - pfIsoFit = self.doFit( data[pfIsoHist] ) - self.pfIsoResults[jetbin]['fitFunction'] = pfIsoFit - self.pfIsoResults[jetbin]['fitParameters'] = self.getFitParameters( pfIsoFit ) - estimate = 0 - if pfIsoFit: - estimate = pfIsoFit.Integral( self.signalRegion[0], self.signalRegion[1] ) / ( self.binWidth * self.rebin ) - - self.pfIsoResults[jetbin]['estimatedNumberOfQCDEvents'] = estimate - -#---------------------------------------------------------------------------------------------------------------------- - self.relIsoResults[jetbin]['actualNumberOfQCDEvents'] = QCD[relIsoHist].GetBinContent(1) - self.relIsoResults[jetbin]['numberOfAllDataEvents'] = data[relIsoHist].GetBinContent(1) - self.relIsoResults[jetbin]['numberOfAllMCEvents'] = allMC[relIsoHist].GetBinContent(1) - - relIsoFit = self.doFit( data[relIsoHist] ) - self.relIsoResults[jetbin]['fitFunction'] = relIsoFit - self.relIsoResults[jetbin]['fitParameters'] = self.getFitParameters( relIsoFit ) - - estimate = relIsoFit.Integral( self.signalRegion[0], self.signalRegion[1] ) / ( self.binWidth * self.rebin ) - self.relIsoResults[jetbin]['estimatedNumberOfQCDEvents'] = estimate - - - - def doFit( self, histogram ): - function = self.currentFitFuntion - fitRange = self.currentFitRange - - if not self.constrainFit: - histogram.Fit( function, "Q0", "ah", fitRange[0], fitRange[1] ) - - else: - ff = TF1( function, function, 0, 1 ); - self.numberOfFreeParameters = ff.GetNumberFreeParameters(); - - return histogram.GetFunction( function ) - - def plot( self, histname, results ): - data = self.histograms[self.useEntryAsData][histname] - mcStack = self.histograms['MCStack'][histname] - fitFunction = results['fitFunction'] - if not fitFunction: - print 'no fitfunction found' - return; - - data.GetXaxis().SetRangeUser( 0, self.maxValue - 0.01 ); - fitFunction.SetLineColor( kRed ); - fitFunction.SetLineWidth( 2 ) - - fitFunction2 = fitFunction.Clone() - fitFunction2.SetLineColor( kBlue ); - fitFunction2.SetRange( self.signalRegion[0], self.signalRegion[1] ); - - fitFunction3 = fitFunction.Clone() - fitFunction3.SetLineColor( kBlue ); - fitFunction3.SetLineStyle( kDashed ); - fitFunction3.SetRange( self.signalRegion[1], self.currentFitRange[0] ); - - canvas = TCanvas( "c1", "Iso fit", 1200, 900 ) - data.Draw(); - - max = 0 - if mcStack.GetMaximum() > data.GetBinContent( 1 ): - max = mcStack.GetMaximum()*1.1 - else: - max = data.GetBinContent( 1 ) * 1.1 - - data.GetYaxis().SetRangeUser( 0, max ); - data.SetXTitle( "Relative Isolation" ); - data.SetYTitle( "Events/0.1" ); - # draw mc - mcStack.Draw( "hist same" ); - data.Draw( "ae same" ); - - fitFunction.Draw( "same" ); - fitFunction2.Draw( "same" ); - fitFunction3.Draw( "same" ); - - label = self.add_cms_label( self.currentJetBin ) - label.Draw() - - legend = self.add_legend( histname ) -# legend.Draw() - - if self.currentFitFuntion == "pol1": - out = "%s_fit_linear_from_0%.0f_%s" % ( histname, self.currentFitRange[0] * 10.0, self.useEntryAsData ); - else: - out = "%s_fit_%s_from_%1.1f_to_%1.1f_%s" % ( histname, self.currentFitFuntion, self.currentFitRange[0], - self.currentFitRange[1], self.useEntryAsData ); -# if self.outputFormat == 'pdf': -# canvas.SaveAs( '%s.eps' % out ); -# gROOT.ProcessLine( ".!ps2pdf -dEPSCrop %s.eps" % out ); -# gROOT.ProcessLine( ".!rm -f %s.eps" % out ); -# else: - canvas.SaveAs( '%s/%s.%s' % ( self.outputFolder, out, self.outputFormat ) ) - - canvas.Close(); #crucial! - - - def plotClosureTest( self, histname, results ): - c2 = TCanvas( "c2", "QCD estimates", 1080, 1080 ); - x = array( 'd', [3, 4] ) - jetBinsOfInterest = [#'1jet', - #'2jets', - '3jets', '4orMoreJets'] - function = self.currentFitFuntion - - gStyle.SetMarkerSize( 1.7 ); - gStyle.SetMarkerStyle( 20 ); - c2.SetTopMargin( 0.1 ); -# c2.SetLeftMargin( 0.12 ); - c2.SetRightMargin( 0.35 ); - - y = {} - for fitRange in self.fitRangesClosureTest: - range = '%1.1f-%1.1f' % fitRange - y[range] = [] - for bin in jetBinsOfInterest: - - est = results[range][bin]['estimatedNumberOfQCDEvents'] - true = results[range][bin]['actualNumberOfQCDEvents'] - variation = 0 - if not true == 0: - variation = ( est - true ) / true -# if bin == '4orMoreJets': -# print bin, fitRange -# print est, true, variation - y[range].append( variation ) - nbins = 3 - gr1 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[0]] ) ) - gr2 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[1]] ) ) - gr3 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[2]] ) ) - gr4 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[3]] ) ) - gr5 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[4]] ) ) - gr6 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[5]] ) ) - gr7 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[6]] ) ) - gr8 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[7]] ) ) - gr9 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[8]] ) ) - - gr1.SetMarkerColor( kGreen + 1 ); - gr2.SetMarkerColor( kGreen + 2 ); - gr3.SetMarkerColor( kGreen + 3 ); - gr4.SetMarkerColor( kAzure + 7 ); - gr5.SetMarkerColor( kAzure - 3 ); - gr6.SetMarkerColor( kBlue ); - gr7.SetMarkerColor( kOrange ); - gr8.SetMarkerColor( kOrange - 1 ); - gr9.SetMarkerColor( kOrange - 6 ); - - gStyle.SetTitleW( 0.9 ); - gStyle.SetTitleH( 0.05 ) - - h = None - if function == "gaus": - h = TH1D( "h", "Variation of QCD estimates with fit range (Gaussian)", 4, 0.5, 4.5 ); - elif function == "pol3": - h = TH1D( "h", "Variation of QCD estimates with fit range (Pol3)", 4, 0.5, 4.5 ); - elif function == "pol1": - h = TH1D( "h", "Variation of QCD estimates with fit range (Pol1)", 4, 0.5, 4.5 ); - elif function == "landau": - h = TH1D( "h", "Variation of QCD estimates with fit range (Landau)", 4, 0.5, 4.5 ); - - h.SetStats( kFALSE ); # no statistics - h.Draw(); - h.SetYTitle( "Deviation = (N_{QCD,est}-N_{QCD,true})/N_{QCD,true}" ); - h.GetYaxis().SetRangeUser( -1, 1 ); - h.GetXaxis().SetRangeUser( 2.5, 5.5 ); -# h.GetXaxis().SetBinLabel( 1, "1j" ); - h.GetXaxis().SetBinLabel( 2, "2j" ); - h.GetXaxis().SetBinLabel( 3, "3j" ); - h.GetXaxis().SetBinLabel( 4, "#geq4j" ); - h.GetXaxis().SetLabelSize( 0.07 ); - h.GetYaxis().SetTitleOffset( 1.3 ); - - gr1.Draw( "P" ); - gr2.Draw( "P" ); #to superimpose graphs, do not re-draw axis - gr3.Draw( "P" ); - gr4.Draw( "P" ); - gr5.Draw( "P" ); - gr6.Draw( "P" ); - gr7.Draw( "P" ); - gr8.Draw( "P" ); - gr9.Draw( "P" ); - - c2.SetGrid( 1, 1 ); - - leg = TLegend( 0.65, 0.1, 0.98, 0.9 ); - leg.SetFillColor( 0 ); - leg.AddEntry( gr1, "Free: 0.1-0.9", "p" ); - leg.AddEntry( gr2, "Free: 0.1-1.0", "p" ); - leg.AddEntry( gr3, "Free: 0.1-1.1", "p" ); - leg.AddEntry( gr4, "Free: 0.2-0.9", "p" ); - leg.AddEntry( gr5, "Free: 0.2-1.0", "p" ); - leg.AddEntry( gr6, "Free: 0.2-1.1", "p" ); - leg.AddEntry( gr7, "Free: 0.3-0.9", "p" ); - leg.AddEntry( gr8, "Free: 0.3-1.0", "p" ); - leg.AddEntry( gr9, "Free: 0.3-1.1", "p" ); - - leg.Draw(); - - c2.SaveAs( "%s/%s_qcd_estimate_%s.%s" % ( self.outputFolder, histname, function, self.outputFormat ) ) - - setRange = h.GetYaxis().SetRangeUser - saveAs = c2.SaveAs - for limit in [1, 2, 3, 6, 8]: - setRange( -limit, limit ); - saveAs( "%s/%s_qcd_estimate_%s_zoom_%d.%s" % ( self.outputFolder, histname, function, limit, self.outputFormat ) ); - - def getFitParameters( self, fitFunction ): - fitParameters = {'chi2':-1, 'numberOfdegreesOfFreedom': 0, 'constrain1': 0, 'constrain2': 0, - 'constrain3': 0, 'constrain4': 0} - if fitFunction: - fitParameters['chi2'] = fitFunction.GetChisquare() - fitParameters['numberOfdegreesOfFreedom'] = fitFunction.GetNDF() - return fitParameters - - def doConstrainedFit( self, histogram, function = 'gaus', limits = ( 0.1, 1.6 ) ): - fitFunction = None - if function == 'gaus': - fitFunction = TF1( "gaus", "gaus", 0, 2 ); - elif function == 'pol3': - fitFunction = TF1( "pol3", "[0] * ( 1 + [1]*x + [2]*x^2 + [3]*x^3 )", 0, 2 ); - elif function == 'landau': - fitFunction = TF1( "landau", "landau", 0, 2 ) - - - myFitResult = data.Fit( function, "Q0", "ah", limits[0], limits[1] ); - - def add_cms_label( self, njet = "" ): - - mytext = TPaveText( 0.3, 0.8, 0.6, 0.93, "NDC" ); - mytext.AddText( "CMS Preliminary" ); - mytext.AddText( "%.1f pb^{-1} at #sqrt{s} = 7 TeV" % self.luminosity ); - if njet != "": - mytext.AddText( "e+jets, %s" % self.jetBinsLatex[njet] ) - mytext.SetFillStyle( 0 ); - mytext.SetBorderSize( 0 ); - mytext.SetTextFont( 42 ); - mytext.SetTextAlign( 13 ); - return mytext - - def add_legend( self, histname ): - function = self.currentFitFuntion - - tt = self.histograms['ttbar'][histname] - wj = self.histograms['wjets'][histname] - zj = self.histograms['zjets'][histname] - data = self.histograms['data'][histname] - QCD = self.histograms['qcd'][histname] - stop = self.histograms['singleTop'][histname] - - leg = TLegend( 0.64, 0.4, 0.9, 0.9 ); - leg.SetFillStyle( 0 ); - leg.SetBorderSize( 0 ); - leg.SetTextFont( 42 ); - - # Here I define coloured lines for use in the legend - blue = TF1( "blue", "pol0", 0, 1 ); - red = TF1( "red", "pol0", 0, 1 ); - - blue.SetLineColor( kBlue ); - red.SetLineColor( kRed ); - - red.SetLineWidth( 2 ); - blue.SetLineWidth( 2 ); - - blue.SetLineStyle( kDashed ); - - # Add entry to legend - if self.useEntryAsData == 'data': - leg.AddEntry( data, "Data", "LP" ); - else: - leg.AddEntry( data, "All MC events", "LP" ); - if function == "pol1": - leg.AddEntry( red, "Linear Fit", "l" ); - elif function == "expo": - leg.AddEntry( red, "Exponenetial Fit", "l" ); - elif function == "gaus": - leg.AddEntry( red, "Gaussian Fit", "l" ); - - leg.AddEntry( blue, "Extrapolation", "l" ); - leg.AddEntry( tt, "t#bar{t}", "F" ); - leg.AddEntry( stop, "Single-Top", "F" ); - leg.AddEntry( wj, "W#rightarrowl#nu", "F" ); - leg.AddEntry( zj, "Z/#gamma*#rightarrowl^{+}l^{-}", "F" ); - leg.AddEntry( QCD, "QCD & #gamma+jets", "F" ); - leg.Draw() - return ( leg, red, blue ) - - def printResults( self, results ): - #self.printJetBinResults( results, '3jets' ) - #print '=' * 60 - #self.printJetBinResults( results, '3orMoreJets' ) - #print '=' * 60 - self.printJetBinResults( results, '4orMoreJets' ) - print '=' * 60 - - - def printJetBinResults( self, results, jetBin ): - estimate = 0 - estimate2 = 0 - predicted = results[results.keys()[0]][jetBin]['actualNumberOfQCDEvents'] - allData = results[results.keys()[0]][jetBin]['numberOfAllDataEvents'] - allMC = results[results.keys()[0]][jetBin]['numberOfAllMCEvents'] - - if jetBin == '4orMoreJets': - print 'Estimation for >= 4 jets' - elif jetBin == '3orMoreJets': - print 'Estimation for >= 3 jets' - elif jetBin == '3jets': - print 'Estimation for == 3 jets' - print 'predicted number of QCD events', predicted - for fitRange in self.fitRangesEstimation: - range = '%1.1f-%1.1f' % fitRange - est = results[range][jetBin]['estimatedNumberOfQCDEvents'] - true = results[range][jetBin]['actualNumberOfQCDEvents'] - variation = ( est - true ) / true - estimate += est - estimate2 += est * est - - - print - print 'estimated number of QCD events' - print 'for range', range, ': ', - print est - print - mean = estimate / len( self.fitRangesEstimation ) - mean2 = estimate2 / len( self.fitRangesEstimation ) - error = sqrt( ( mean2 - mean * mean ) / len( self.fitRangesEstimation ) ) - print 'average estimate', mean, '+-', error - weight = estimate / len( self.fitRangesEstimation ) / predicted - print 'average weight factor', weight - print 'Total number of data in signal bin(<0.1)', allData - print 'Total number of MC in signal bin(<0.1) before reweighting QCD', allMC - print 'Total number of MC in signal bin(<0.1) after reweighting QCD', ( allMC - predicted ) + predicted * weight - - def plotControlRegionComparison( self ): - for bin in self.jetBins: - hist = self.pfIsoHistogramPrefix + bin - histControl = self.pfIsoControlRegionHistogramPrefix + bin - QCD_control = self.histograms['qcd'][histControl] - QCD = self.histograms['qcd'][hist] - nQCD_Control = QCD_control.Integral() - nQCD = QCD.Integral() - if nQCD_Control > 0: - QCD_control.Scale( 1 / nQCD_Control ) - if nQCD > 0: - QCD.Scale( 1 / nQCD ) - QCD_control.SetFillStyle( 3004 ) - QCD.GetXaxis().SetRangeUser( 0., self.maxValue - 0.01 ) - - max = 0 - if QCD.GetMaximum() > QCD_control.GetMaximum(): - max = QCD.GetMaximum()*1.1 - else: - max = QCD_control.GetMaximum()*1.1 - - QCD.GetYaxis().SetRangeUser( 0., max ) - - canvas = TCanvas( "c1", "Shape comparision", 1200, 900 ) - QCD.Draw() - QCD_control.Draw( 'same' ) - label = self.add_cms_label( bin ) - label.Draw() - - leg = TLegend( 0.64, 0.4, 0.9, 0.9 ); - leg.SetFillStyle( 0 ); - leg.SetBorderSize( 0 ); - leg.SetTextFont( 42 ); - leg.AddEntry( QCD_control, 'QCD control region' ) - leg.AddEntry( QCD, 'QCD standard selection' ) - leg.Draw() - - canvas.SaveAs( '%s/%s_shapeComparison.%s' % ( self.outputFolder, hist, self.outputFormat ) ) - - def plotSpecial( self, histname, results, fitRanges ): - data = self.histograms[self.useEntryAsData][histname] - mcStack = self.histograms['MCStack'][histname] - jetBin = HistPlotter.getJetBin(histname) - fitStart = 0.2 - fitfunctions = [] - for fitRange in fitRanges: - fitStart = float(fitRange[:3]) - fitFunction = results[fitRange][jetBin]['fitFunction'] - - if not fitFunction: - print 'no fitfunction found' - return; - fitFunction.SetLineColor( kRed ); - fitFunction.SetLineWidth( 2 ) - - fitFunction2 = fitFunction.Clone() - fitFunction2.SetLineColor( kBlue ); - fitFunction2.SetRange( self.signalRegion[0], self.signalRegion[1] ); - - fitFunction3 = fitFunction.Clone() - fitFunction3.SetLineColor( kBlue ); - fitFunction3.SetLineStyle( kDashed ); - fitFunction3.SetRange( self.signalRegion[1], fitStart ); - fitfunctions.append(fitFunction) - fitfunctions.append(fitFunction2) - fitfunctions.append(fitFunction3) - - data.GetXaxis().SetRangeUser( 0, self.maxValue - 0.01 ); - - canvas = TCanvas( "c1", "Iso fit", 1200, 900 ) - data.Draw(); - - max = 0 - if mcStack.GetMaximum() > data.GetBinContent( 1 ): - max = mcStack.GetMaximum()*1.1 - else: - max = data.GetBinContent( 1 ) * 1.1 - - data.GetYaxis().SetRangeUser( 0, max ); - data.SetXTitle( "Relative Isolation" ); - data.SetYTitle( "Events/0.1" ); - # draw mc - mcStack.Draw( "hist same" ); - data.Draw( "ae same" ); -# data.GetYaxis().Draw('same') - - for fitFunction in fitfunctions: - fitFunction.Draw( "same" ); - - label = self.add_cms_label( jetBin ) - label.Draw() - - legend = self.add_legend( histname ) -# legend.Draw() - - if self.currentFitFuntion == "pol1": - out = "%s_fit_linear_%s" % ( histname, self.useEntryAsData ); - else: - out = "%s_fit_%s_%s" % ( histname, self.currentFitFuntion, self.useEntryAsData ); -# if self.outputFormat == 'pdf': -# canvas.SaveAs( '%s.eps' % out ); -# gROOT.ProcessLine( ".!ps2pdf -dEPSCrop %s.eps" % out ); -# gROOT.ProcessLine( ".!rm -f %s.eps" % out ); -# else: - - HistPlotter.saveAs(canvas, '%s/%s' % (self.outputFolder, out), ['png', 'pdf'] ) -# canvas.SaveAs( '%s/%s.%s' % ( self.outputFolder, out, self.outputFormat ) ) - - canvas.Close(); #crucial! -if __name__ == '__main__': - gROOT.SetBatch( True ) - gROOT.ProcessLine( 'gErrorIgnoreLevel = 3001;' ) - - path = '/storage/results/2011/' - - q = QCDEstimator( inputFiles.files ) - QCDEstimator.outputFolder = '/storage/results/plots/ElectronHad/' - QCDEstimator.outputFormat = 'pdf' - function = 'gaus' - - q.doEstimate( function ) - print '=' * 60 - print 'ParticleFlowIsolation results' - q.printResults( q.allPfIsoResults ) -# q.plot('QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_', q.allPfIsoResults['0.2-1.1']['3jets']) - fitRanges = ['0.2-1.6','0.3-1.6','0.4-1.6'] - q.plotSpecial('QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_3jets', q.allPfIsoResults, fitRanges) - #q.pfIsoHistogramPrefix = 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts' -# print 'Relative isolation results' -# q.printResults( q.allRelIsoResults ) -# print '=' * 60 - - -# print 'Starting closure tests' -# q.doClosureTests( function ) - q.plotControlRegionComparison() - diff --git a/scripts_old/EstimateQCD2.py b/scripts_old/EstimateQCD2.py deleted file mode 100644 index e5998c14..00000000 --- a/scripts_old/EstimateQCD2.py +++ /dev/null @@ -1,752 +0,0 @@ -from __future__ import division - -import HistGetter -import HistPlotter -from tdrStyle import * -from ROOT import * -from math import pow, exp, sqrt -from copy import deepcopy -from array import array -import inputFiles - -class QCDEstimator: - luminosity = 1091.45#349.007#pb-1 - mc_luminosity = 1091.45#pb-1 - luminosity_unit = 'pb-1' - scale = luminosity / mc_luminosity - jetBins = ['0jet', '0orMoreJets', '1jet', '1orMoreJets', '2jets', '2orMoreJets', '3jets', '3orMoreJets', '4orMoreJets'] - jetBins = HistPlotter.allBjetBins - jetBinsLatex = {'0jet':'0 jet', '0orMoreJets':'#geq 0 jets', '1jet':'1 jet', '1orMoreJets':'#geq 1 jet', - '2jets':'2 jets', '2orMoreJets':'#geq 2 jets', '3jets':'3 jets', '3orMoreJets':'#geq 3 jets', - '4orMoreJets':'#geq 4 jets'} - jetBinsLatex = HistPlotter.BjetBinsLatex - binWidth = 0.01 - rebin = 1 - fitRangesClosureTest = [ ( 0.1, 0.9 ), ( 0.1, 1.0 ), ( 0.1, 1.1 ), - ( 0.2, 0.9 ), ( 0.2, 1.0 ), ( 0.2, 1.1 ), - ( 0.3, 0.9 ), ( 0.3, 1.0 ), ( 0.3, 1.1 )] - - fitRangesEstimation = [# ( 0.1, 1.1 ), - ( 0.2, 1.6 ), - ( 0.3, 1.6 ), - ( 0.4, 1.6 )] - signalRegion = ( 0, 0.1 ) - maxValue = 1.6 - pfIsoHistogramPrefix = 'QCDStudy/QCDest_PFIsolation_WithMETCutAndAsymJetCuts_' - pfIsoHistogramPrefix = 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_' - pfIsoControlRegionHistogramPrefix = 'QCDStudy/QCDest_PFIsolation_controlRegion2_WithMETCutAndAsymJetCuts_' - relIsoHistogramPrefix = 'QCDStudy/QCDest_CombRelIso_' - pfIsoResults = {} - relIsoResults = {} - allPfIsoResults = {} - allRelIsoResults = {} - - useEntryAsData = 'data' - constrainFit = False - numberOfFreeParameters = 0 - - currentFitRange = ( 0.1, 1.6 ) - currentFitFuntion = 'gaus' - currentJetBin = jetBins[-1] - - outputFormat = 'pdf' - outputFolder = '' - - def __init__( self, files ): - self.files = files -# HistGetter.samplefiles = files - self.histograms = {} -# self.histGetter = HistGetter() - HistPlotter.setStyle() - self.getHistograms() - self.applyStyleAndCreateStack() - - for bin in self.jetBins: - self.pfIsoResults[bin] = {'actualNumberOfQCDEvents': 0, 'estimatedNumberOfQCDEvents':0, - 'fitFunction': None, 'fitParameters': {}, 'numberOfAllDataEvents':0, - 'numberOfAllMCEvents':0} - self.relIsoResults[bin] = {'actualNumberOfQCDEvents': 0, 'estimatedNumberOfQCDEvents':0, - 'fitFunction': None, 'fitParameters': {}, 'numberOfAllDataEvents':0, - 'numberOfAllMCEvents':0} - - def getHistograms( self ): -# relIsoHists = [self.relIsoHistogramPrefix + jetbin for jetbin in self.jetBins] - pfIsoHists = [self.pfIsoHistogramPrefix + jetbin for jetbin in self.jetBins] -# pfIsoControlHists = [self.pfIsoControlRegionHistogramPrefix + jetbin for jetbin in self.jetBins] -# allHists = relIsoHists - allHists = [] - allHists.extend( pfIsoHists ) -# allHists.extend( pfIsoControlHists ) - #print allHists -# HistGetter.hists = allHists - - self.histograms = HistGetter.getHistsFromFiles(allHists, self.files); - self.histograms = HistGetter.addSampleSum( self.histograms ) - - def applyStyleAndCreateStack( self ): -# self.histograms = HistPlotter.applyDefaultStylesAndColors(self.histograms) - samplesOfInterest = ['data', 'qcd', 'zjets', 'wjets', 'singleTop', 'ttbar', 'allMC'] - colors = {'ttbar' : kRed + 1, - 'wjets' : kGreen - 3, - 'zjets' : kAzure - 2, - 'qcd' : kYellow, - 'singleTop' : kMagenta} -# - mcStack = {} - for sample in samplesOfInterest:#sample - for histname in self.histograms[sample].keys(): - self.histograms[sample][histname].Rebin( self.rebin ) - if not sample in ['data', 'allMC']: - self.histograms[sample][histname].Scale( self.scale ) - self.histograms[sample][histname].SetFillStyle( 1001 ) - self.histograms[sample][histname].SetFillColor( colors[sample] ) -## if sample == 'ttbar': -## self.histograms[sample][histname].Scale( 1.15 ) - if not mcStack.has_key( histname ): - mcStack[histname] = THStack( "MC_" + histname, "MC_" + histname ); - mcStack[histname].Add( self.histograms[sample][histname] ) - if sample == 'allMC': - self.histograms[sample][histname].Scale( self.scale ) -# else: -# self.histograms[sample][histname].SetMarkerStyle( 8 ); -# -# - self.histograms['MCStack'] = mcStack -# HistPlotter.setStyle() - self.setStyle() - print "=" * 40 - print "data integrated luminosity:", self.luminosity, self.luminosity_unit - print "MC integrated luminosity:", self.mc_luminosity, self.luminosity_unit - print "MC scale factor: ", self.scale - print '=' * 40 - - - def setStyle( self ): - tdrstyle = setTDRStyle(); - tdrstyle.SetPadRightMargin( 0.05 )#originally was 0.02, too narrow! - tdrStyle.SetStatH( 0.2 ); - tdrStyle.SetOptStat( 0 );#off title - tdrStyle.SetOptFit( 0 );#off title - tdrStyle.cd(); - gROOT.ForceStyle(); - gStyle.SetTitleH( 0.1 ); - gStyle.SetStatH( 0.22 ); #0.24); - gStyle.SetStatW( 0.22 ); #0.26); - gStyle.SetOptStat( 1 ); #on stat - gStyle.SetLineScalePS( 2 ); #D=3 - gStyle.SetOptFit( 112 ); - - - def doClosureTests( self, function = 'gaus' ): - self.useEntryAsData = 'allMC' - self.currentFitFuntion = function - - for fitRange in self.fitRangesClosureTest: - self.currentFitRange = fitRange - for bin in self.jetBins: - self.currentJetBin = bin - self.EstimateJetBin( bin ) - self.plot( self.pfIsoHistogramPrefix + bin, self.pfIsoResults[bin] ) -# self.plot( self.relIsoHistogramPrefix + bin, self.relIsoResults[bin] ) - self.allPfIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.pfIsoResults ) -# self.allRelIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.relIsoResults ) - self.plotClosureTest( self.pfIsoHistogramPrefix, self.allPfIsoResults ) -# self.plotClosureTest( self.relIsoHistogramPrefix, self.allRelIsoResults ) - - - def doEstimate( self, function = 'gaus' ): - self.useEntryAsData = 'data' - self.currentFitFuntion = function - - for fitRange in self.fitRangesEstimation: - self.currentFitRange = fitRange - for bin in self.jetBins: - self.currentJetBin = bin - self.EstimateJetBin( bin ) - self.plot( self.pfIsoHistogramPrefix + bin, self.pfIsoResults[bin] ) -# self.plot( self.relIsoHistogramPrefix + bin, self.relIsoResults[bin] ) - self.allPfIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.pfIsoResults ) -# self.allRelIsoResults['%1.1f-%1.1f' % fitRange] = deepcopy( self.relIsoResults ) - - def EstimateJetBin( self, jetbin ): -# fitRange = self.currentFitRange - function = self.currentFitFuntion - - QCD = self.histograms['qcd'] - data = self.histograms[self.useEntryAsData] - allMC = self.histograms['allMC'] - pfIsoHist = self.pfIsoHistogramPrefix + jetbin - relIsoHist = self.relIsoHistogramPrefix + jetbin - - self.pfIsoResults[jetbin]['actualNumberOfQCDEvents'] = QCD[pfIsoHist].GetBinContent(1) - self.pfIsoResults[jetbin]['numberOfAllDataEvents'] = data[pfIsoHist].GetBinContent(1) - self.pfIsoResults[jetbin]['numberOfAllMCEvents'] = allMC[pfIsoHist].GetBinContent(1) - - pfIsoFit = self.doFit( data[pfIsoHist] ) - self.pfIsoResults[jetbin]['fitFunction'] = pfIsoFit - self.pfIsoResults[jetbin]['fitParameters'] = self.getFitParameters( pfIsoFit ) - estimate = 0 - if pfIsoFit: - estimate = pfIsoFit.Integral( self.signalRegion[0], self.signalRegion[1] ) / ( self.binWidth * self.rebin ) - - self.pfIsoResults[jetbin]['estimatedNumberOfQCDEvents'] = estimate - -#---------------------------------------------------------------------------------------------------------------------- -# self.relIsoResults[jetbin]['actualNumberOfQCDEvents'] = QCD[relIsoHist].GetBinContent(1) -# self.relIsoResults[jetbin]['numberOfAllDataEvents'] = data[relIsoHist].GetBinContent(1) -# self.relIsoResults[jetbin]['numberOfAllMCEvents'] = allMC[relIsoHist].GetBinContent(1) -# -# relIsoFit = self.doFit( data[relIsoHist] ) -# self.relIsoResults[jetbin]['fitFunction'] = relIsoFit -# self.relIsoResults[jetbin]['fitParameters'] = self.getFitParameters( relIsoFit ) -# -# estimate = relIsoFit.Integral( self.signalRegion[0], self.signalRegion[1] ) / ( self.binWidth * self.rebin ) -# self.relIsoResults[jetbin]['estimatedNumberOfQCDEvents'] = estimate - - - - def doFit( self, histogram ): - function = self.currentFitFuntion - fitRange = self.currentFitRange - - if not self.constrainFit: - histogram.Fit( function, "Q0", "ah", fitRange[0], fitRange[1] ) - - else: - ff = TF1( function, function, 0, 1 ); - self.numberOfFreeParameters = ff.GetNumberFreeParameters(); - - return histogram.GetFunction( function ) - - def plot( self, histname, results ): - data = self.histograms[self.useEntryAsData][histname] - mcStack = self.histograms['MCStack'][histname] - fitFunction = results['fitFunction'] - if not fitFunction: - print 'no fitfunction found' - return; - - data.GetXaxis().SetRangeUser( 0, self.maxValue - 0.01 ); - fitFunction.SetLineColor( kRed ); - fitFunction.SetLineWidth( 2 ) - - fitFunction2 = fitFunction.Clone() - fitFunction2.SetLineColor( kBlue ); - fitFunction2.SetRange( self.signalRegion[0], self.signalRegion[1] ); - - fitFunction3 = fitFunction.Clone() - fitFunction3.SetLineColor( kBlue ); - fitFunction3.SetLineStyle( kDashed ); - fitFunction3.SetRange( self.signalRegion[1], self.currentFitRange[0] ); - - canvas = TCanvas( "c1", "Iso fit", 1200, 900 ) - data.Draw(); - - max = 0 - if mcStack.GetMaximum() > data.GetBinContent( 1 ): - max = mcStack.GetMaximum()*1.1 - else: - max = data.GetBinContent( 1 ) * 1.1 - - data.GetYaxis().SetRangeUser( 0, max ); - data.SetXTitle( "Relative Isolation" ); - data.SetYTitle( "Events/0.1" ); - # draw mc - mcStack.Draw( "hist same" ); - data.Draw( "ae same" ); - - fitFunction.Draw( "same" ); - fitFunction2.Draw( "same" ); - fitFunction3.Draw( "same" ); - - label = self.add_cms_label( self.currentJetBin ) - label.Draw() - - legend = self.add_legend( histname ) -# legend.Draw() - - if self.currentFitFuntion == "pol1": - out = "%s_fit_linear_from_0%.0f_%s" % ( histname, self.currentFitRange[0] * 10.0, self.useEntryAsData ); - else: - out = "%s_fit_%s_from_%1.1f_to_%1.1f_%s" % ( histname, self.currentFitFuntion, self.currentFitRange[0], - self.currentFitRange[1], self.useEntryAsData ); -# if self.outputFormat == 'pdf': -# canvas.SaveAs( '%s.eps' % out ); -# gROOT.ProcessLine( ".!ps2pdf -dEPSCrop %s.eps" % out ); -# gROOT.ProcessLine( ".!rm -f %s.eps" % out ); -# else: - canvas.SaveAs( '%s/%s.%s' % ( self.outputFolder, out, self.outputFormat ) ) - - canvas.Close(); #crucial! - - def plotSpecial( self, histname, results, fitRanges ): - data = self.histograms[self.useEntryAsData][histname] - mcStack = self.histograms['MCStack'][histname] - bjetBin = HistPlotter.getBjetBin(histname) - fitStart = 0.2 - fitfunctions = [] - for fitRange in fitRanges: - fitStart = float(fitRange[:3]) - fitFunction = results[fitRange][bjetBin]['fitFunction'] - - if not fitFunction: - print 'no fitfunction found' - return; - fitFunction.SetLineColor( kRed ); - fitFunction.SetLineWidth( 2 ) - - fitFunction2 = fitFunction.Clone() - fitFunction2.SetLineColor( kBlue ); - fitFunction2.SetRange( self.signalRegion[0], self.signalRegion[1] ); - - fitFunction3 = fitFunction.Clone() - fitFunction3.SetLineColor( kBlue ); - fitFunction3.SetLineStyle( kDashed ); - fitFunction3.SetRange( self.signalRegion[1], fitStart ); - fitfunctions.append(fitFunction) - fitfunctions.append(fitFunction2) - fitfunctions.append(fitFunction3) - - data.GetXaxis().SetRangeUser( 0, self.maxValue - 0.01 ); - - canvas = TCanvas( "c1", "Iso fit", 1200, 900 ) - data.Draw(); - - max = 0 - if mcStack.GetMaximum() > data.GetBinContent( 1 ): - max = mcStack.GetMaximum()*1.1 - else: - max = data.GetBinContent( 1 ) * 1.1 - - data.GetYaxis().SetRangeUser( 0, max ); - data.SetXTitle( "Relative Isolation" ); - data.SetYTitle( "Events/0.1" ); - # draw mc - mcStack.Draw( "hist same" ); - data.Draw( "ae same" ); -# data.GetYaxis().Draw('same') - - for fitFunction in fitfunctions: - fitFunction.Draw( "same" ); - - label = self.add_cms_label( bjetBin ) - label.Draw() - - legend = self.add_legend( histname ) -# legend.Draw() - - if self.currentFitFuntion == "pol1": - out = "%s_fit_linear_%s" % ( histname, self.useEntryAsData ); - else: - out = "%s_fit_%s_%s" % ( histname, self.currentFitFuntion, self.useEntryAsData ); -# if self.outputFormat == 'pdf': -# canvas.SaveAs( '%s.eps' % out ); -# gROOT.ProcessLine( ".!ps2pdf -dEPSCrop %s.eps" % out ); -# gROOT.ProcessLine( ".!rm -f %s.eps" % out ); -# else: - - HistPlotter.saveAs(canvas, '%s/%s' % (self.outputFolder, out), ['png', 'pdf'] ) -# canvas.SaveAs( '%s/%s.%s' % ( self.outputFolder, out, self.outputFormat ) ) - - canvas.Close(); #crucial! - - - def plotClosureTest( self, histname, results ): - c2 = TCanvas( "c2", "QCD estimates", 1080, 1080 ); - x = array( 'd', [1, 2, 3] ) -# jetBinsOfInterest = [#'1jet', -# '2jets', '3jets', '4orMoreJets'] - - jetBinsOfInterest = HistPlotter.exclusiveBjetBins - function = self.currentFitFuntion - - gStyle.SetMarkerSize( 1.7 ); - gStyle.SetMarkerStyle( 20 ); - c2.SetTopMargin( 0.1 ); - c2.SetLeftMargin( 0.12 ); - c2.SetRightMargin( 0.35 ); - - y = {} - for fitRange in self.fitRangesClosureTest: - range = '%1.1f-%1.1f' % fitRange - y[range] = [] - for bin in jetBinsOfInterest: - - est = results[range][bin]['estimatedNumberOfQCDEvents'] - true = results[range][bin]['actualNumberOfQCDEvents'] - variation = 0 - if not true == 0: - variation = ( est - true ) / true - y[range].append( variation ) -# if bin == '1btag': -# print bin, fitRange -# print est, true, variation - nbins = 3 - gr1 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[0]] ) ) - gr2 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[1]] ) ) - gr3 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[2]] ) ) - gr4 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[3]] ) ) - gr5 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[4]] ) ) - gr6 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[5]] ) ) - gr7 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[6]] ) ) - gr8 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[7]] ) ) - gr9 = TGraph( nbins, x, array( 'd', y['%1.1f-%1.1f' % self.fitRangesClosureTest[8]] ) ) - - gr1.SetMarkerColor( kGreen + 1 ); - gr2.SetMarkerColor( kGreen + 2 ); - gr3.SetMarkerColor( kGreen + 3 ); - gr4.SetMarkerColor( kAzure + 7 ); - gr5.SetMarkerColor( kAzure - 3 ); - gr6.SetMarkerColor( kBlue ); - gr7.SetMarkerColor( kOrange ); - gr8.SetMarkerColor( kOrange - 1 ); - gr9.SetMarkerColor( kOrange - 6 ); - - gStyle.SetTitleW( 0.9 ); - gStyle.SetTitleH( 0.05 ) - - h = None - if function == "gaus": - h = TH1D( "h", "Variation of QCD estimates with fit range (Gaussian)", 4, 0.5, 4.5 ); - elif function == "pol3": - h = TH1D( "h", "Variation of QCD estimates with fit range (Pol3)", 4, 0.5, 4.5 ); - elif function == "pol1": - h = TH1D( "h", "Variation of QCD estimates with fit range (Pol1)", 4, 0.5, 4.5 ); - elif function == "landau": - h = TH1D( "h", "Variation of QCD estimates with fit range (Landau)", 4, 0.5, 4.5 ); - - h.SetStats( kFALSE ); # no statistics - h.Draw(); - h.SetYTitle( "Deviation = (N_{QCD,est}-N_{QCD,true})/N_{QCD,true}" ); - h.GetYaxis().SetRangeUser( -1, 1 ); - h.GetXaxis().SetRangeUser( 0.5, 2.5 ); - h.GetXaxis().SetBinLabel( 1, "0btags" ); - h.GetXaxis().SetBinLabel( 2, "1btags" ); - h.GetXaxis().SetBinLabel( 3, "2btags" ); -# h.GetXaxis().SetBinLabel( 4, "3btags" ); - h.GetXaxis().SetLabelSize( 0.07 ); - h.GetYaxis().SetTitleOffset( 1.3 ); - - gr1.Draw( "P" ); - gr2.Draw( "P" ); #to superimpose graphs, do not re-draw axis - gr3.Draw( "P" ); - gr4.Draw( "P" ); - gr5.Draw( "P" ); - gr6.Draw( "P" ); - gr7.Draw( "P" ); - gr8.Draw( "P" ); - gr9.Draw( "P" ); - - c2.SetGrid( 1, 1 ); - - leg = TLegend( 0.65, 0.1, 0.98, 0.9 ); - leg.SetFillColor( 0 ); - leg.AddEntry( gr1, "Free: 0.1-0.9", "p" ); - leg.AddEntry( gr2, "Free: 0.1-1.0", "p" ); - leg.AddEntry( gr3, "Free: 0.1-1.1", "p" ); - leg.AddEntry( gr4, "Free: 0.2-0.9", "p" ); - leg.AddEntry( gr5, "Free: 0.2-1.0", "p" ); - leg.AddEntry( gr6, "Free: 0.2-1.1", "p" ); - leg.AddEntry( gr7, "Free: 0.3-0.9", "p" ); - leg.AddEntry( gr8, "Free: 0.3-1.0", "p" ); - leg.AddEntry( gr9, "Free: 0.3-1.1", "p" ); - - leg.Draw(); - - c2.SaveAs( "%s/%s_qcd_estimate_%s.%s" % ( self.outputFolder, histname, function, self.outputFormat ) ) - - setRange = h.GetYaxis().SetRangeUser - saveAs = c2.SaveAs - for limit in [1, 2, 3, 6, 8]: - setRange( -limit, limit ); - saveAs( "%s/%s_qcd_estimate_%s_zoom_%d.%s" % ( self.outputFolder, histname, function, limit, self.outputFormat ) ); - - def getFitParameters( self, fitFunction ): - fitParameters = {'chi2':-1, 'numberOfdegreesOfFreedom': 0, 'constrain1': 0, 'constrain2': 0, - 'constrain3': 0, 'constrain4': 0} - if fitFunction: - fitParameters['chi2'] = fitFunction.GetChisquare() - fitParameters['numberOfdegreesOfFreedom'] = fitFunction.GetNDF() - return fitParameters - - def doConstrainedFit( self, histogram, function = 'gaus', limits = ( 0.1, 1.6 ) ): - fitFunction = None - if function == 'gaus': - fitFunction = TF1( "gaus", "gaus", 0, 2 ); - elif function == 'pol3': - fitFunction = TF1( "pol3", "[0] * ( 1 + [1]*x + [2]*x^2 + [3]*x^3 )", 0, 2 ); - elif function == 'landau': - fitFunction = TF1( "landau", "landau", 0, 2 ) - - - myFitResult = data.Fit( function, "Q0", "ah", limits[0], limits[1] ); - - def add_cms_label( self, njet = "" ): - - mytext = TPaveText( 0.3, 0.8, 0.6, 0.93, "NDC" ); - mytext.AddText( "CMS Preliminary" ); - mytext.AddText( "%.1f pb^{-1} at #sqrt{s} = 7 TeV" % self.luminosity ); - if njet != "": - mytext.AddText( "e+jets, %s" % self.jetBinsLatex[njet] ) - mytext.SetFillStyle( 0 ); - mytext.SetBorderSize( 0 ); - mytext.SetTextFont( 42 ); - mytext.SetTextAlign( 13 ); - return mytext - - def add_legend( self, histname ): - function = self.currentFitFuntion - - tt = self.histograms['ttbar'][histname] - wj = self.histograms['wjets'][histname] - zj = self.histograms['zjets'][histname] - data = self.histograms['data'][histname] - QCD = self.histograms['qcd'][histname] - stop = self.histograms['singleTop'][histname] - - leg = TLegend( 0.64, 0.4, 0.9, 0.9 ); - leg.SetFillStyle( 0 ); - leg.SetBorderSize( 0 ); - leg.SetTextFont( 42 ); - - # Here I define coloured lines for use in the legend - blue = TF1( "blue", "pol0", 0, 1 ); - red = TF1( "red", "pol0", 0, 1 ); - - blue.SetLineColor( kBlue ); - red.SetLineColor( kRed ); - - red.SetLineWidth( 2 ); - blue.SetLineWidth( 2 ); - - blue.SetLineStyle( kDashed ); - - # Add entry to legend - if self.useEntryAsData == 'data': - leg.AddEntry( data, "Data", "LP" ); - else: - leg.AddEntry( data, "All MC events", "LP" ); - if function == "pol1": - leg.AddEntry( red, "Linear Fit", "l" ); - elif function == "expo": - leg.AddEntry( red, "Exponenetial Fit", "l" ); - elif function == "gaus": - leg.AddEntry( red, "Gaussian Fit", "l" ); - - leg.AddEntry( blue, "Extrapolation", "l" ); - leg.AddEntry( tt, "t#bar{t}", "F" ); - leg.AddEntry( stop, "Single-Top", "F" ); - leg.AddEntry( wj, "W#rightarrowl#nu", "F" ); - leg.AddEntry( zj, "Z/#gamma*#rightarrowl^{+}l^{-}", "F" ); - leg.AddEntry( QCD, "QCD & #gamma+jets", "F" ); - leg.Draw() - return ( leg, red, blue ) - - def printResults( self, results ): - self.printJetBinResults( results, '0btag' ) - print '=' * 60 - self.printJetBinResults( results, '1btag' ) - print '=' * 60 - self.printJetBinResults( results, '2btags' ) - print '=' * 60 - self.printJetBinResults( results, '3btags' ) - print '=' * 60 - - self.printJetBinResults( results, '0orMoreBtag' ) - print '=' * 60 - self.printJetBinResults( results, '1orMoreBtag' ) - print '=' * 60 - self.printJetBinResults( results, '2orMoreBtags' ) - print '=' * 60 - self.printJetBinResults( results, '3orMoreBtags' ) - print '=' * 60 - self.printJetBinResults( results, '4orMoreBtags' ) - print '=' * 60 - - def printTwikiTable(self, results): - - summary = self.getSummeryOfAllResults(results) - - estimates = (summary['0btag'][0], summary['0btag'][1], - summary['1btag'][0], summary['1btag'][1], - summary['2btags'][0], summary['2btags'][1], - summary['3btags'][0], summary['3btags'][1], - summary['4orMoreBtags'][0], summary['4orMoreBtags'][1]) - predictions = (summary['0btag'][2], - summary['1btag'][2], - summary['2btags'][2], - summary['3btags'][2], - summary['4orMoreBtags'][2]) - print '| * * | *0 b-tag* | *1 b-tag* | *2 b-tags* | *3 b-tags* | *4 b-tags* |' - print '| estimate | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f|' %estimates - print '| expected | %.2f | %.2f | %.2f | %.2f | %.2f |' % predictions - - - estimates = (summary['0orMoreBtag'][0], summary['0orMoreBtag'][1], - summary['1orMoreBtag'][0], summary['1orMoreBtag'][1], - summary['2orMoreBtags'][0], summary['2orMoreBtags'][1], - summary['3orMoreBtags'][0], summary['3orMoreBtags'][1], - summary['4orMoreBtags'][0], summary['4orMoreBtags'][1]) - predictions = (summary['0orMoreBtag'][2], - summary['1orMoreBtag'][2], - summary['2orMoreBtags'][2], - summary['3orMoreBtags'][2], - summary['4orMoreBtags'][2]) - print '| * * | *>=0 b-tag* | *>= 1 b-tag* | *>=2 b-tags* | *>=3 b-tags* | *>=4 b-tags* |' - print '| estimate | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f|' %estimates - print '| expected | %.2f | %.2f | %.2f | %.2f | %.2f |' % predictions - - - def getSummeryOfAllResults(self, results): - summary = {} - summary['0btag'] = self.getSummaryOfResult(results, '0btag') - summary['1btag'] = self.getSummaryOfResult(results, '1btag') - summary['2btags'] = self.getSummaryOfResult(results, '2btags') - summary['3btags'] = self.getSummaryOfResult(results, '3btags') - - summary['0orMoreBtag'] = self.getSummaryOfResult(results, '0orMoreBtag') - summary['1orMoreBtag'] = self.getSummaryOfResult(results, '1orMoreBtag') - summary['2orMoreBtags'] = self.getSummaryOfResult(results, '2orMoreBtags') - summary['3orMoreBtags'] = self.getSummaryOfResult(results, '3orMoreBtags') - summary['4orMoreBtags'] = self.getSummaryOfResult(results, '4orMoreBtags') - return summary - - def getSummaryOfResult(self, results, bin): - estimate = 0 - estimate2 = 0 - predicted = results[results.keys()[0]][bin]['actualNumberOfQCDEvents'] - allData = results[results.keys()[0]][bin]['numberOfAllDataEvents'] - allMC = results[results.keys()[0]][bin]['numberOfAllMCEvents'] - - for fitRange in self.fitRangesEstimation: - range = '%1.1f-%1.1f' % fitRange - est = results[range][bin]['estimatedNumberOfQCDEvents'] - true = results[range][bin]['actualNumberOfQCDEvents'] - variation = est - if not true == 0: - variation = ( est - true ) / true - estimate += est - estimate2 += est * est - - mean = estimate / len( self.fitRangesEstimation ) - mean2 = estimate2 / len( self.fitRangesEstimation ) - error = sqrt( ( mean2 - mean * mean ) / len( self.fitRangesEstimation ) ) - weight = 0 - if not predicted == 0: - weight = estimate / len( self.fitRangesEstimation ) / predicted - - return (mean, error, predicted) - - def printJetBinResults( self, results, jetBin ): - estimate = 0 - estimate2 = 0 - predicted = results[results.keys()[0]][jetBin]['actualNumberOfQCDEvents'] - allData = results[results.keys()[0]][jetBin]['numberOfAllDataEvents'] - allMC = results[results.keys()[0]][jetBin]['numberOfAllMCEvents'] - print jetBin - if jetBin == '4orMoreJets': - print 'Estimation for >= 4 jets' - elif jetBin == '3orMoreJets': - print 'Estimation for >= 3 jets' - elif jetBin == '3jets': - print 'Estimation for == 3 jets' - print 'predicted number of QCD events', predicted - for fitRange in self.fitRangesEstimation: - range = '%1.1f-%1.1f' % fitRange - est = results[range][jetBin]['estimatedNumberOfQCDEvents'] - true = results[range][jetBin]['actualNumberOfQCDEvents'] - variation = est - if not true == 0: - variation = ( est - true ) / true - estimate += est - estimate2 += est * est - - - print - print 'estimated number of QCD events' - print 'for range', range, ': ', - print est - print - mean = estimate / len( self.fitRangesEstimation ) - mean2 = estimate2 / len( self.fitRangesEstimation ) - error = sqrt( ( mean2 - mean * mean ) / len( self.fitRangesEstimation ) ) - print 'average estimate', mean, '+-', error - weight = 0 - if not predicted == 0: - weight = estimate / len( self.fitRangesEstimation ) / predicted - print 'average weight factor', weight - print 'Total number of data in signal bin(<0.1)', allData - print 'Total number of MC in signal bin(<0.1) before reweighting QCD', allMC - print 'Total number of MC in signal bin(<0.1) after reweighting QCD', ( allMC - predicted ) + predicted * weight - - def plotControlRegionComparison( self ): - for bin in self.jetBins: - hist = self.pfIsoHistogramPrefix + bin - histControl = self.pfIsoControlRegionHistogramPrefix + bin - QCD_control = self.histograms['qcd'][histControl] - QCD = self.histograms['qcd'][hist] - nQCD_Control = QCD_control.Integral() - nQCD = QCD.Integral() - if nQCD_Control > 0: - QCD_control.Scale( 1 / nQCD_Control ) - if nQCD > 0: - QCD.Scale( 1 / nQCD ) - QCD_control.SetFillStyle( 3004 ) - QCD.GetXaxis().SetRangeUser( 0., self.maxValue - 0.01 ) - - max = 0 - if QCD.GetMaximum() > QCD_control.GetMaximum(): - max = QCD.GetMaximum()*1.1 - else: - max = QCD_control.GetMaximum()*1.1 - - QCD.GetYaxis().SetRangeUser( 0., max ) - - canvas = TCanvas( "c1", "Shape comparision", 1200, 900 ) - QCD.Draw() - QCD_control.Draw( 'same' ) - label = self.add_cms_label( bin ) - label.Draw() - - leg = TLegend( 0.64, 0.4, 0.9, 0.9 ); - leg.SetFillStyle( 0 ); - leg.SetBorderSize( 0 ); - leg.SetTextFont( 42 ); - leg.AddEntry( QCD_control, 'QCD control region' ) - leg.AddEntry( QCD, 'QCD standard selection' ) - leg.Draw() - - canvas.SaveAs( '%s/%s_shapeComparison.%s' % ( self.outputFolder, hist, self.outputFormat ) ) - - -if __name__ == '__main__': - gROOT.SetBatch( True ) - gROOT.ProcessLine( 'gErrorIgnoreLevel = 3001;' ) - - path = '/storage/results/2011/' - - q = QCDEstimator( inputFiles.files ) - QCDEstimator.outputFolder = '/storage/results/plots/ElectronHad/' - QCDEstimator.outputFormat = 'png' - function = 'expo' - - q.doEstimate( function ) - print '=' * 60 - print 'ParticleFlowIsolation results' - q.printTwikiTable(q.allPfIsoResults) -# q.printResults( q.allPfIsoResults ) - fitRanges = ['0.2-1.6','0.3-1.6','0.4-1.6'] - q.plotSpecial('QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_0btag', q.allPfIsoResults, fitRanges) - q.plotSpecial('QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_1btag', q.allPfIsoResults, fitRanges) - q.plotSpecial('QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_2btags', q.allPfIsoResults, fitRanges) -# q.plot('QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_3orMoreBtags', q.allPfIsoResults['0.2-1.1']['3orMoreBtags']) - #q.pfIsoHistogramPrefix = 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts' -# print 'Relative isolation results' -# q.printResults( q.allRelIsoResults ) -# print '=' * 60 - - -# print 'Starting closure tests' - q.doClosureTests( function) -# q.plotControlRegionComparison() - diff --git a/scripts_old/HistGetter.py b/scripts_old/HistGetter.py deleted file mode 100644 index 9ec80b82..00000000 --- a/scripts_old/HistGetter.py +++ /dev/null @@ -1,251 +0,0 @@ -from ROOT import * -#from math import fsum -btag_bins_inclusive = ['0orMoreBtag', '1orMoreBtag', '2orMoreBtags', '3orMoreBtags'] -btag_sums = { - '0orMoreBtag':['0btag', '1btag', '2btags', '3btags', '4orMoreBtags'], - '1orMoreBtag':['1btag', '2btags', '3btags', '4orMoreBtags'], - '2orMoreBtags':['2btags', '3btags', '4orMoreBtags'], - '3orMoreBtags':['3btags', '4orMoreBtags'] - } - -def getHistsFromFiles( histnames = [], files = {}, bJetBins = [], jetBins = [] ): - TFileOpen = TFile.Open - allHists = {} - gcd = gROOT.cd - - if bJetBins and jetBins: - print 'enabling both binnings at the same time is not supported!' - return [] - - if bJetBins: - histnames = [name + '_' + bjetBin for name in histnames for bjetBin in bJetBins] - - if jetBins: - histnames = [name + '_' + jetBin for name in histnames for jetBin in jetBins] - - for sample, filename in files.iteritems(): - file = TFileOpen( filename ) - if not file: - print "Could not find file:", filename - return - allHists[sample] = {} - fg = file.Get - gcd() - rootHist = None - for hist in histnames: - btag_found = '' - for btag in btag_bins_inclusive: - if btag in hist: - btag_found = btag - break - if btag_found == '': - rootHist = fg(hist) - if not rootHist: - print filename - print 'sample:', sample, ',hist:', hist, "could not be found." - continue - else: - listOfExclusiveBins = btag_sums[btag_found] - exclhists = [] - for excbin in listOfExclusiveBins: - fhist = fg(hist.replace(btag_found, excbin)) - if not fhist: - print filename - print 'sample:', sample, ',hist:', hist, "could not be found." - continue - exclhists.append(fhist) - rootHist = exclhists[0].Clone() - for fhist in exclhists[1:]: - rootHist.Add(fhist) -# fhist = fg( hist ) -# if not fhist: -# print filename -# print 'sample:', sample, ',hist:', hist, "could not be found." -# continue - allHists[sample][hist] = rootHist.Clone() - return allHists - -def sumHistograms(listOfHistograms): - if not listOfHistograms: - return None - newHistogram = listOfHistograms[0].Clone() - for histogram in listOfHistograms[1:]: - newHistogram.Add(histogram) - return newHistogram - - -def addSampleSum( hists = {} ): - qcdList = {} - mc_all_list = {} - singleTopList = {} - wjets = {} - - qcdSamples = ['bce1', 'bce2', 'bce3', 'enri1', 'enri2', 'enri3', 'pj1', 'pj2', 'pj3'] - allMCSamples = ['ttbar', 'wjets', 'zjets', 'bce1', 'bce2', 'bce3', 'enri1', - 'enri2', 'enri3', 'pj1', 'pj2', 'pj3', 'T_TuneZ2_tW-channel', 'T_TuneZ2_t-channel', 'T_TuneZ2_s-channel', - 'Tbar_TuneZ2_tW-channel', 'Tbar_TuneZ2_t-channel', 'Tbar_TuneZ2_s-channel'] - singleTopSamples = ['T_TuneZ2_tW-channel', 'T_TuneZ2_t-channel', 'T_TuneZ2_s-channel', - 'Tbar_TuneZ2_tW-channel', 'Tbar_TuneZ2_t-channel', 'Tbar_TuneZ2_s-channel'] - wjetsSamples = ['W1Jet', 'W2Jets', 'W3Jets', 'W4Jets'] - - - for sample, histlist in hists.iteritems(): - for histname, hist in histlist.iteritems(): - if sample in qcdSamples: - if not qcdList.has_key( histname ): - qcdList[histname] = hist.Clone( 'qcd' ) - else: - qcdList[histname].Add( hist ) - - if sample in allMCSamples: - if not mc_all_list.has_key( histname ): - mc_all_list[histname] = hist.Clone( 'all_mc' ) - else: - mc_all_list[histname].Add( hist ) - - if sample in singleTopSamples: - if not singleTopList.has_key( histname ): - singleTopList[histname] = hist.Clone( 'singleTop' ) - else: - singleTopList[histname].Add( hist ) - if sample in wjetsSamples: - if not wjets.has_key( histname ): - wjets[histname] = hist.Clone( 'wjets' ) - else: - wjets[histname].Add( hist ) - - hists['qcd'] = qcdList - hists['allMC'] = mc_all_list - hists['singleTop'] = singleTopList - hists['wjets'] = wjets - return hists - -def makeDetailedMCStack( hists ): - - allMCSamples = ['bce1', 'bce2', 'bce3', 'enri1', - 'enri2', 'enri3', 'pj1', 'pj2', 'pj3', 'zjets', 'wjets','T_TuneZ2_tW-channel', 'T_TuneZ2_t-channel', 'T_TuneZ2_s-channel', - 'Tbar_TuneZ2_tW-channel', 'Tbar_TuneZ2_t-channel', 'Tbar_TuneZ2_s-channel', 'ttbar' ] - - hists['allMCDetailed'] = makeStack( hists, allMCSamples ) - return hists -# mcStack = {} -# -# for sample in allMCSamples: -# if hists.has_key(sample): -# histlist = hists[sample] -# for histname, hist in histlist.iteritems(): -# if sample in allMCSamples: -# if not mcStack.has_key( histname ): -# mcStack[histname] = THStack("MC", "MC") -# mcStack[histname].Add( hist ) -# hists['allMCDetailed'] = mcStack -# return hists - -def makeMCStack( hists ): - - allMCSamples = ['qcd', 'zjets', 'wjets', 'singleTop', 'ttbar'] - hists['allMCStack'] = makeStack( hists, allMCSamples ) - return hists - -def makeStack( hists, samples ): - mcStack = {} - - for sample in samples: - if hists.has_key( sample ): - histlist = hists[sample] - for histname, hist in histlist.iteritems(): - if not mcStack.has_key( histname ): - mcStack[histname] = THStack( "MC", "MC" ) - mcStack[histname].Add( hist ) - - return mcStack - -def addJetSum( hists ): - allhists = ['QCDest_CombRelIso_0jet', 'QCDest_CombRelIso_1jet', 'QCDest_CombRelIso_2jets', - 'QCDest_CombRelIso_3jets', 'QCDest_CombRelIso_4orMoreJets'] - oneOrMore = ['QCDest_CombRelIso_1jet', 'QCDest_CombRelIso_2jets', - 'QCDest_CombRelIso_3jets', 'QCDest_CombRelIso_4orMoreJets'] - twoOrMore = ['QCDest_CombRelIso_2jets', - 'QCDest_CombRelIso_3jets', 'QCDest_CombRelIso_4orMoreJets'] - threeOrMore = ['QCDest_CombRelIso_3jets', 'QCDest_CombRelIso_4orMoreJets'] - - addUp = addUpHistograms - for sample, histlist in hists.iteritems(): - if( len( hists[sample].keys() ) == 0 ): - continue - hists[sample]['QCDest_CombRelIso_0orMoreJets'] = addUp( hists[sample], allhists ) - hists[sample]['QCDest_CombRelIso_1orMoreJets'] = addUp( hists[sample], oneOrMore ) - hists[sample]['QCDest_CombRelIso_2orMoreJets'] = addUp( hists[sample], twoOrMore ) - hists[sample]['QCDest_CombRelIso_3orMoreJets'] = addUp( hists[sample], threeOrMore ) - return hists - -def addUpHistograms( dictOfHists, histsToAdd ): - hist = dictOfHists[histsToAdd[0]].Clone() - hadd = hist.Add - [hadd( h ) for name, h in dictOfHists.iteritems() if name in histsToAdd[1:]] - return hist - - -def joinHistogramDictionaries(listOfDicts): - joinedDicts = {} - for histDict in listOfDicts: - for sample, hists in histDict.iteritems(): - if not joinedDicts.has_key(sample): - joinedDicts[sample] = {} - - for histname, hist in hists.iteritems(): - joinedDicts[sample][histname] = hist - return joinedDicts - -if __name__ == "__main__": - histnames = ['QCDest_CombRelIso_0jet', 'QCDest_CombRelIso_1jet', 'QCDest_CombRelIso_2jets', - 'QCDest_CombRelIso_3jets', 'QCDest_CombRelIso_4orMoreJets'] - files = {'data':"/storage/workspace/BristolAnalysisTools/outputfiles/new/data_35pb_PFElectron_PF2PATJets_PFMET.root", - 'ttbar' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/ttjet_35pb_PFElectron_PF2PATJets_PFMET.root", - 'wjets' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/wj_35pb_PFElectron_PF2PATJets_PFMET.root", - 'zjets' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/zj_35pb_PFElectron_PF2PATJets_PFMET.root", -# 'bce1' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/bce1_35pb.root", - 'bce2' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/bce2_35pb_PFElectron_PF2PATJets_PFMET.root", - 'bce3' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/bce3_35pb_PFElectron_PF2PATJets_PFMET.root", - 'enri1' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/enri1_35pb_PFElectron_PF2PATJets_PFMET.root", - 'enri2' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/enri2_35pb_PFElectron_PF2PATJets_PFMET.root", - 'enri3' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/enri3_35pb_PFElectron_PF2PATJets_PFMET.root", - 'pj1' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/pj1_35pb_PFElectron_PF2PATJets_PFMET.root", - 'pj2' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/pj2_35pb_PFElectron_PF2PATJets_PFMET.root", - 'pj3' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/pj3_35pb_PFElectron_PF2PATJets_PFMET.root"} -# 'tW' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/tW_35pb_PFElectron_PF2PATJets_PFMET.root", -# 'tchan' : "/storage/workspace/BristolAnalysisTools/outputfiles/new/tchan_35pb_PFElectron_PF2PATJets_PFMET.root"} -# HistGetter.samplefiles = files -# HG = HistGetter() -# HG.setStyle() - hists = getHistsFromFiles( histnames, files ) - hists = addSampleSum( hists ) - hists = addJetSum( hists ) - qcdSamples = ['bce1', 'bce2', 'bce3', 'enri1', 'enri2', 'enri3', 'pj1', 'pj2', 'pj3'] - allMCSamples = ['ttbar', 'wjets', 'zjets', 'tW', 'tchan', 'bce1', 'bce2', 'bce3', 'enri1', - 'enri2', 'enri3', 'pj1', 'pj2', 'pj3'] - singleTopSamples = ['tW', 'tchan'] - - nqcd = 0 - nstop = 0 - nmc = 0 - nqcd = sum( [hists[sample]['QCDest_CombRelIso_0jet'].Integral() for sample in qcdSamples if hists.has_key( sample )] ) -# nstop = sum([hists[sample][0].Integral() for sample in singleTopSamples if hists.has_key(sample)]) - nmc = sum( [hists[sample]['QCDest_CombRelIso_0jet'].Integral() for sample in allMCSamples if hists.has_key( sample )] ) - print hists['qcd']['QCDest_CombRelIso_0jet'].Integral(), nqcd -# print hists['singleTop'][0].Integral(), nstop - print hists['allMC']['QCDest_CombRelIso_0jet'].Integral(), nmc - print - print hists['allMC']['QCDest_CombRelIso_0orMoreJets'].Integral(), hists['allMC']['QCDest_CombRelIso_0jet'].Integral() - print hists['allMC']['QCDest_CombRelIso_1orMoreJets'].Integral(), hists['allMC']['QCDest_CombRelIso_1jet'].Integral() - print hists['allMC']['QCDest_CombRelIso_2orMoreJets'].Integral(), hists['allMC']['QCDest_CombRelIso_2jets'].Integral() - print hists['allMC']['QCDest_CombRelIso_3orMoreJets'].Integral(), hists['allMC']['QCDest_CombRelIso_3jets'].Integral() - print hists['allMC']['QCDest_CombRelIso_4orMoreJets'].Integral() - print hists['allMC'].keys() - c = [] - for histname, hist in hists['allMC'].iteritems(): - c.append( TCanvas( "cname" + histname, histname, 800, 600 ) ) - c[-1].cd() - hist.Draw() - - a = raw_input() diff --git a/scripts_old/HistPlotter.py b/scripts_old/HistPlotter.py deleted file mode 100644 index 31bc9921..00000000 --- a/scripts_old/HistPlotter.py +++ /dev/null @@ -1,238 +0,0 @@ -from __future__ import division -from tdrStyle import * -from ROOT import gROOT, kRed, kGreen, kAzure, kBlue, kYellow, kMagenta, kTeal, kCyan, kOrange, TPaveText, TCanvas -import os - - -inclusiveJetBins = [ - "0orMoreJets", - "1orMoreJets", - "2orMoreJets", - "3orMoreJets" , - "4orMoreJets"] - -exclusiveJetBins = [ - "0jet", - "1jet", - "2jets", - "3jets"] - -inclusiveBjetBins = [ - "0orMoreBtag", - "1orMoreBtag", - "2orMoreBtags", - "3orMoreBtags", - '4orMoreBtags' ] - -exclusiveBjetBins = [ - '0btag', - "1btag", - "2btags", - "3btags"] - -allJetBins = [] -allJetBins.extend(inclusiveJetBins) -allJetBins.extend(exclusiveJetBins) - -allBjetBins = [] -allBjetBins.extend(inclusiveBjetBins) -allBjetBins.extend(exclusiveBjetBins) - -jetBinsLatex = {'0jet':'0 jet', '0orMoreJets':'#geq 0 jets', '1jet':'1 jet', '1orMoreJets':'#geq 1 jet', - '2jets':'2 jets', '2orMoreJets':'#geq 2 jets', '3jets':'3 jets', '3orMoreJets':'#geq 3 jets', - '4orMoreJets':'#geq 4 jets'} - -BjetBinsLatex = {'0btag':'0 b-tags', '0orMoreBtag':'#geq 0 b-tags', '1btag':'1 b-tags', - '1orMoreBtag':'#geq 1 b-tags', - '2btags':'2 b-tags', '2orMoreBtags':'#geq 2 b-tags', - '3btags':'3 b-tags', '3orMoreBtags':'#geq 3 b-tags', - '4orMoreBtags':'#geq 4 b-tags'} - -def setStyle(): - tdrStyle = setTDRStyle(); - - #slight adaptation - tdrStyle.SetPadRightMargin( 0.05 ); #originally was 0.02, too narrow! - tdrStyle.SetStatH( 0.2 ); - #tdrStyle.SetOptStat(1110);//off title - tdrStyle.SetOptStat( 0 );#off title - tdrStyle.SetOptFit( 0 );#off title - tdrStyle.cd(); - gROOT.ForceStyle(); - - -def rebin( hists, nbins, histname ): - for sample in hists.keys(): - if len( hists[sample].keys() ) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].Rebin( nbins ) - elif hists[sample].has_key( histname ): - hists[sample][histname].Rebin( nbins ) - return hists - -def setXRange( hists, limits = ( 0, 5000 ), histname = '' ): - for sample in hists.keys(): - if len( hists[sample].keys() ) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - if hists[sample][name] and hists[sample][name].GetXaxis(): - hists[sample][name].GetXaxis().SetRangeUser( limits[0], limits[1] ) - else: - print "Can't find histogram", sample, name - elif hists[sample].has_key( histname ): - if hists[sample][name]: - hists[sample][histname].GetXaxis().SetRangeUser( limits[0], limits[1] ); - else: - print "Can't find histogram", sample, name - return hists - - -def setXTitle( hists, title, histname = '' ): - for sample in hists.keys(): - if len( hists[sample].keys() ) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].SetXTitle( title ) - elif hists[sample].has_key( histname ): - hists[sample][histname].SetXTitle( title ); - return hists - -def setYTitle( hists, title, histname = '' ): - for sample in hists.keys(): - if len( hists[sample].keys() ) == 0 or 'Stack' in sample: - continue - if '*' in histname: - nameToken = histname.replace('*', '') - histlist = hists[sample] - for name in histlist.keys(): - if nameToken in name: - hists[sample][name].SetYTitle( title ) - elif hists[sample].has_key( histname ): - hists[sample][histname].SetYTitle( title ); - return hists - -# for sample in hists.keys(): -# if len( hists[sample].keys() ) == 0 or not hists[sample].has_key( histname ) or not len( limits ) == 2: -# continue -# hists[sample][histname].GetXaxis().SetRangeUser( limits[0], limits[1] ); -# return hists - -def applyDefaultStylesAndColors( hists ): - defaultColors = {'data':0, - 'ttbar' : kRed + 1, - 'wjets' : kGreen - 3, - 'zjets' : kAzure - 2, - 'bce1' : kRed-7, - 'bce2' : kRed-8, - 'bce3' : kRed-9, - 'enri1' : kBlue-7, - 'enri2' : kBlue-8, - 'enri3' : kBlue-9, - 'pj1' : kYellow-7, - 'pj2' : kYellow-8, - 'pj3' : kYellow-9, - 'qcd': kYellow, - 'singleTop': kMagenta, - 'Zprime500': kTeal - 9, - 'Zprime750': kBlue - 6, - 'Zprime1000': 28, - 'Zprime1250': kCyan - 5, - 'Zprime1500': kOrange + 1, } - - for sample, histlist in hists.iteritems(): - if not sample in defaultColors.keys(): - continue - for histname, hist in histlist.iteritems(): - hists[sample][histname].SetFillColor( defaultColors[sample] ) - if histname == 'data': - hists[sample][histname].SetMarkerStyle( 8 ) - elif 'Zprime' in histname: - hists[sample][histname].SetFillStyle( 0 ) - hists[sample][histname].SetLineColor( defaultColors[sample] ) - else: - hists[sample][histname].SetFillStyle( 1001 ); - hists[sample][histname].SetFillColor( defaultColors[sample] ) - - return hists - -def get_cms_label( lumiInInvPb, njet = "4orMoreJets", nbjet = "0orMoreBtag", channel = "e" ): - mytext = TPaveText( 0.5, 0.97, 1, 1.01, "NDC" ) - channelLabel = TPaveText( 0.15, 0.965, 0.4, 1.01, "NDC" ) - channelLabel.AddText(channel + ", %s, %s" % (jetBinsLatex[njet], BjetBinsLatex[nbjet] )) - mytext.AddText( "CMS Preliminary, L = %.1f fb^{-1} at #sqrt{s} = 8 TeV" % (lumiInInvPb/1000.)); -# if njet != "": -# mytext.AddText( channel + ", %s, %s" % (jetBinsLatex[njet], BjetBinsLatex[nbjet] )) - - mytext.SetFillStyle( 0 ); - mytext.SetBorderSize( 0 ); - mytext.SetTextFont( 42 ); - mytext.SetTextAlign( 13 ); - - channelLabel.SetFillStyle( 0 ); - channelLabel.SetBorderSize( 0 ); - channelLabel.SetTextFont( 42 ); - channelLabel.SetTextAlign( 13 ); - - return mytext, channelLabel - -def getJetBin(histname): - for bin in allJetBins: - if bin in histname: - return bin - if 'ThreeJet' in histname: - return '3jets' - #default - return '4orMoreJets' - -def getBjetBin(histname): - for bin in allBjetBins: - if bin in histname: - return bin - #default - return '0orMoreBtag' - -def getChannel(histname): - if 'Muon' in histname or 'MuPlusJets' in histname: - return '#mu' - else: - return 'e' - -def normalise(histogram): - if histogram and histogram.Integral() > 0: - histogram.Scale(1/histogram.Integral()) - return histogram - -def saveAs(canvas, name, outputFormats= ['png'], outputFolder = ''): - canvas.RedrawAxis() - if not outputFolder == '' and not outputFolder.endswith('/'): - outputFolder += '/' - for outputFormat in outputFormats: - fullFileName = outputFolder + name + '.' + outputFormat - if '/' in fullFileName: - path = fullFileName[:fullFileName.rfind('/')] - createFolderIfDoesNotExist(path) - - canvas.SaveAs(fullFileName) - -def createFolderIfDoesNotExist(path): - if not os.path.exists(path): - os.makedirs(path) - -def plotHistAndFits(data, mcStack, fits): - canvas = TCanvas( "c1", "plot with fits", 1920, 1080 ) - - - diff --git a/scripts_old/PlotHelper.py b/scripts_old/PlotHelper.py deleted file mode 100644 index 03c4714b..00000000 --- a/scripts_old/PlotHelper.py +++ /dev/null @@ -1,58 +0,0 @@ -from tdrStyle import * - -inclusiveJetBins = [ - "0orMoreJets", - "1orMoreJets", - "2orMoreJets", - "3orMoreJets" , - "4orMoreJets"] - -exclusiveJetBins = [ - "0jet", - "1jet", - "2jets", - "3jets"] - -inclusiveBjetBins = [ - "0orMoreBtag", - "1orMoreBtag", - "2orMoreBtags", - "3orMoreBtags", - '4orMoreBtags' ] - -exclusiveBjetBins = [ - '0btag', - "1btag", - "2btags", - "3btags"] - -allJetBins = [] -allJetBins.extend(inclusiveJetBins) -allJetBins.extend(exclusiveJetBins) - -allBjetBins = [] -allBjetBins.extend(inclusiveBjetBins) -allBjetBins.extend(exclusiveBjetBins) - -jetBinsLatex = {'0jet':'0 jet', '0orMoreJets':'#geq 0 jets', '1jet':'1 jet', '1orMoreJets':'#geq 1 jet', - '2jets':'2 jets', '2orMoreJets':'#geq 2 jets', '3jets':'3 jets', '3orMoreJets':'#geq 3 jets', - '4orMoreJets':'#geq 4 jets'} - -BjetBinsLatex = {'0btag':'0 b-tags', '0orMoreBtag':'#geq 0 b-tags', '1btag':'1 b-tags', - '1orMoreBtag':'#geq 1 b-tags', - '2btags':'2 b-tags', '2orMoreBtags':'#geq 2 b-tags', - '3btags':'3 b-tags', '3orMoreBtags':'#geq 3 b-tags', - '4orMoreBtags':'#geq 4 b-tags'} - -def setStyle(): - tdrStyle = setTDRStyle(); - - #slight adaptation - tdrStyle.SetPadRightMargin( 0.05 ); #originally was 0.02, too narrow! - tdrStyle.SetStatH( 0.2 ); - #tdrStyle.SetOptStat(1110);//off title - tdrStyle.SetOptStat( 0 );#off title - tdrStyle.SetOptFit( 0 );#off title - tdrStyle.cd(); - gROOT.ForceStyle(); - diff --git a/scripts_old/QCDEstimation.py b/scripts_old/QCDEstimation.py deleted file mode 100644 index 6933a09b..00000000 --- a/scripts_old/QCDEstimation.py +++ /dev/null @@ -1,350 +0,0 @@ -from __future__ import division -from ROOT import * -from math import fsum - -from HistPlotter import inclusiveBjetBins, exclusiveBjetBins, allBjetBins, rebin -from HistGetter import getHistsFromFiles, addSampleSum -import inputFiles - -ufloatEnabled = True -try: - from uncertainties import ufloat - from uncertainties import umath -except: - print "Could not find uncertainties package, please install for full functionality" - print 'http://packages.python.org/uncertainties/' - ufloatEnabled = False - - -fitRangesClosureTest = [ (0.1, 0.9), (0.1, 1.0), (0.1, 1.1), - (0.2, 0.9), (0.2, 1.0), (0.2, 1.1), - (0.3, 0.9), (0.3, 1.0), (0.3, 1.1)] - -rebinRelIso = 10 - - -def doFit(histogram, function, fitRange):#, constrainFit = False): - histogram = histogram.Clone('fitting') - numberOfFreeParameters = -1 - fit = None - - histogram.Fit(function, "Q0", "ah", fitRange[0], fitRange[1]) - fit = histogram.GetFunction(function) - if fit: - return fit.Clone() - else: - return None - -def estimateQCDFrom(histogramForEstimation, function='expo', - fitRanges=[(0.2, 1.6), (0.3, 1.6), (0.4, 1.6)]): - - histogramForEstimation = histogramForEstimation.Clone('tmp') - - binWidthOfOriginalHIstoram = 0.01 - rebinOfOriginalHistogram = rebinRelIso - signalRegion = (0., 0.1) - estimate = 0 - estimate2 = 0 - relFitError = 0 - histogramForEstimation.Rebin(rebinOfOriginalHistogram) - for fitrange in fitRanges: - fit = None - fit = doFit(histogramForEstimation, function, fitrange) - if fit: - est = fit.Integral(signalRegion[0], signalRegion[1]) / (binWidthOfOriginalHIstoram * rebinOfOriginalHistogram) - for parErr in range(0, fit.GetNumberFreeParameters()): - par = fit.GetParameter(parErr) - err = fit.GetParError(parErr) - if not par == 0: - relFitError += (err / par) ** 2 -# print par, err - estimate += est - estimate2 += est * est - - - mean = estimate / len(fitRanges) - mean2 = estimate2 / len(fitRanges) - error = 0 - if not (mean2 - mean * mean) == 0: - error = sqrt((mean2 - mean * mean) / 2) - if not mean == 0: - return (mean, sqrt(relFitError + (error / mean) ** 2) * mean) - else: - return (0, 0) - -def getQCDEstimateFor(histogramForEstimation='QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_DR03_0orMoreBtag', function='expo', - fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]): - estimate, absoluteError = estimateQCDFrom(histogramForEstimation, function, fitRanges=[fitRange]) - - relativeError = 0 - if not estimate == 0: - relativeError = absoluteError / estimate - relativeErrorSquared = relativeError ** 2 - - systematicErrorFromOtherFitRanges = 0 - for currentRange in additionFitRanges: - est, err = estimateQCDFrom(histogramForEstimation, function, fitRanges=[currentRange]) - deviation = est - estimate - if not estimate == 0: - relativeErrorSquared += (deviation / estimate) ** 2 - -# statisticalErrorSquared = 0 -# if not estimate == 0: -# statisticalErrorSquared = 1 / estimate -# relativeErrorSquared += statisticalErrorSquared - - relativeError = sqrt(relativeErrorSquared) - absoluteError = relativeError * estimate - - return estimate, absoluteError - -def getQCDEstimate(datafile, - histogramForEstimation='QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_DR03', - bjetBin='', function='expo', - fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]): - bias = 0.45 - bias = 0 - reductionFromBias = 1 - bias - if bjetBin: - histogramForEstimation = histogramForEstimation + '_' + bjetBin - files = {'data': datafile} - hists = [histogramForEstimation] - hists = getHistsFromFiles(hists, files) - histogramForEstimation = hists['data'][histogramForEstimation] - estimate, absoluteError = getQCDEstimateFor(histogramForEstimation, function, fitRange=fitRange, additionFitRanges=additionFitRanges) - estimate = estimate * reductionFromBias - absoluteError = absoluteError * reductionFromBias - absoluteError = sqrt(absoluteError ** 2 + (estimate * bias) ** 2) - return estimate, absoluteError - - -def getIntegral(histogram, integralRange=(0, 0.1)): - firstBin = histogram.GetXaxis().FindBin(integralRange[0]) - lastBin = histogram.GetXaxis().FindBin(integralRange[1]) - - integral = 0 - absoluteError = Double(0) - integral = histogram.IntegralAndError(firstBin, lastBin, absoluteError) - - return integral, absoluteError - - -def getPerformanceOnMC(files, histogramForEstimation='QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_DR03', bjetBin='', function='expo', - fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]): - if bjetBin: - histogramForEstimation = histogramForEstimation + '_' + bjetBin - - hists = [histogramForEstimation] - hists = getHistsFromFiles(hists, files) - hists = addSampleSum(hists) - - histogramForComparison = hists['qcd'][histogramForEstimation] - histogramForEstimation = hists['allMC'][histogramForEstimation] - - - estimate, absoluteError = getQCDEstimateFor(histogramForEstimation, function, fitRange=fitRange, additionFitRanges=additionFitRanges) - - qcdInSignalRegion, qcdError = getIntegral(histogramForComparison, (0, 0.1)) - - 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) - - return result - - -def getShapeErrorHistogram(files, - histogramForShape = 'topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets', - histogramForComparison = 'topReconstruction/backgroundShape/mttbar_antiIsolated_withMETAndAsymJets', - rebin = 1, - suffix = ''): - files = {'data': files['data']} -# histogramForShape = 'topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets' -# histogramForComparison = 'topReconstruction/backgroundShape/mttbar_antiIsolated_withMETAndAsymJets' -# suffixes = allBjetBins -# rebin = 50 - - errors = None - -# for suffix in suffixes: -# if suffix in histname: - if not suffix == '': - histogramForShape = histogramForShape + '_' + suffix - histogramForComparison = histogramForComparison + '_' + suffix - - hists = [histogramForShape, histogramForComparison] - hists = getHistsFromFiles(hists, files) - histogramForShape = hists['data'][histogramForShape] - histogramForComparison = hists['data'][histogramForComparison] - histogramForShape.Sumw2() - histogramForComparison.Sumw2() - - histogramForShape.Rebin(rebin) - histogramForComparison.Rebin(rebin) - - nShape = histogramForShape.Integral() - nCompare = histogramForComparison.Integral() - - if nShape > 0 and nCompare > 0: - histogramForShape.Scale(1 / nShape) - histogramForComparison.Scale(1 / nCompare) - - errors = histogramForShape.Clone('ShapeErrors') - errors.Add(histogramForComparison, -1)#subtraction - for bin in range(1, errors.GetNbinsX()): - errors.SetBinContent(bin, fabs(errors.GetBinContent(bin))) - errors.Divide(histogramForShape) - - return errors - -#def combineErrorsFromHistogramList(): -# pass - -def createErrorHistogram(mcHistograms, qcdHistogram, relativeQCDEstimationError, shapeErrorHistogram): - errorHist = qcdHistogram.Clone("ErrorHist") - - for bin in range(1, errorHist.GetNbinsX()): - nQCD = qcdHistogram.GetBinContent(bin) - nMC = 0 - for hist in mcHistograms: - nMC += hist.GetBinContent(bin) - err = relativeQCDEstimationError - if shapeErrorHistogram: - shapeErr = shapeErrorHistogram.GetBinContent(bin) - shapeErrStat = shapeErrorHistogram.GetBinError(bin) - shapeErr = fabs(shapeErr) + shapeErrStat - err = sqrt(err * err + shapeErr * shapeErr) - errorHist.SetBinContent(bin, nMC) - errorHist.SetBinError(bin, err * nQCD) - return errorHist - - -def compareFitFunctions(datafile, histogramForEstimation, functions, fitRange=(0.3, 1.6)): - files = {'data': datafile} - hists = [histogramForEstimation] - hists = getHistsFromFiles(hists, files) - histogramForEstimation = hists['data'][histogramForEstimation] - - result = {} - for function in functions: - fit = doFit(histogramForEstimation, function, fitRange) - ndof = fit.GetNDF() - chi2 = fit.GetChisquare() - result[function] = {'NDOF': ndof, 'Chi2':chi2} - return result - -def doComparisonFitFunctions(files): - functions = ['expo', 'gaus', 'pol1'] - print 'Comparison between fit functions' - fitRanges = [(0.2, 1.6), (0.3, 1.6), (0.4, 1.6)] - - averageChi2 = {} - averageNDOF = {} - btags = ['0btag', '1btag', '2orMoreBtags'] - for function in functions: - averageChi2[function] = 0 - averageNDOF[function] = 0 - - for fitRange in fitRanges: - result = compareFitFunctions(files['data'], histogramForEstimation='QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_3jets', functions=functions, - fitRange=fitRange) - - print '| * 3jets, 1 btag* | *fit range (%.1f, %1.f)*|||' % fitRange - print '| *fit function* | *Chi^2* | *NDoF* | *Chi^2/NDoF* |' - for function, values in result.iteritems(): - chi2 = values['Chi2'] - ndof = values['NDOF'] - averageChi2[function] += chi2 - averageNDOF[function] += ndof - print '| %s | %.3f | %d | %.3f |' % (function, chi2, ndof, chi2 / ndof) - - for btag in btags: - result = compareFitFunctions(files['data'], histogramForEstimation='QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_DR03_%s' % btag, functions=functions, - fitRange=fitRange) - print '| * 4jets, %s* | *fit range (%.1f, %1.f)*|||' % (btag, fitRange[0], fitRange[1]) - print '| *fit function* | *Chi^2* | *NDoF* | *Chi^2/NDoF* |' - for function, values in result.iteritems(): - chi2 = values['Chi2'] - ndof = values['NDOF'] - averageChi2[function] += chi2 - averageNDOF[function] += ndof - print '| %s | %.3f | %d | %.3f |' % (function, chi2, ndof, chi2 / ndof) - - print '| *average over all regions and fit ranges* ||||' - print '| *fit function* | *Chi^2* | *NDoF* | *Chi^2/NDoF* |' - N_measurements = len(fitRanges) * (len(btags) + 1) - for function, values in result.iteritems(): - chi2 = averageChi2[function] / N_measurements - ndof = averageNDOF[function] / N_measurements - print '| %s | %.3f | %d | %.3f |' % (function, chi2, ndof, chi2 / ndof) - - - -def doEstimation(files, function, hist): -# print 'QCD estimation in relative isolation using', function, 'function' -# est, err = getQCDEstimate(files['data'], histogramForEstimation='QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_3jets', function=function, -# fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]) -# print '| *region* | *NQCD, exp* | *Nest* | *scale factor* |' -# print '| 3j1t | --- | %.1f ± %.1f | --- |' % (est, err) -# print 'Final QCD estimate (==3jet, %s): %.1f +- %.1f' % ('1 b-tag', est, err) - - for btag in ['0btag', '1btag', '2orMoreBtags']: - tag = 0 - if '0' in btag: - tag= 0 - elif '1' in btag: - tag = 1 - elif '2' in btag: - tag = 2 - - est, err = getQCDEstimate(files['data'], histogramForEstimation= hist + '_%s' % btag, function=function, - fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]) -# print 'Final QCD estimate (>=4jet, %s): %.1f +- %.1f' % (btag, est, err) - print '| 4j%dt | --- | %.1f +- %.1f | --- |' % (tag, est, err) - -def doMCPerformance(files, function, hist): -# print 'Performance on MC using', function, 'function' -# result = getPerformanceOnMC(files, -# histogramForEstimation='QCDStudy/QCDest_PFIsolation_1btag_WithMETCutAndAsymJetCuts_3jets', -# function=function, -# fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]) -# est, err = result['estimate'] -# N_qcd, N_qcd_error = result['qcdInSignalRegion'] -# performance, performanceError = result['performance'] - print '| *region* | *NQCD, true* | *Nest* | *(Nest - NQCD, true)/NQCD, true* |' -# print '| (==3jet, %s) | %.1f +- %.1f | %.1f +- %.1f | %.3f +- %.3f |' % ('1 b-tag', N_qcd, N_qcd_error, est, err, performance, performanceError) -# hist = 'TTbarEplusJetsPlusMetAnalysis/Ref + AsymJets selection/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03' - for btag in ['0btag', '1btag', '2orMoreBtags']: - result = getPerformanceOnMC(files, - histogramForEstimation=hist + '_%s' % btag, function=function, - fitRange=(0.3, 1.6), additionFitRanges=[(0.2, 1.6), (0.4, 1.6)]) - est, err = result['estimate'] - N_qcd, N_qcd_error = result['qcdInSignalRegion'] - performance, performanceError = result['performance'] - print '| (>=4jet, %s) | %.1f +- %.1f | %.1f +- %.1f | %.3f +- %.3f |' % (btag, N_qcd, N_qcd_error, est, err, performance, performanceError) - -if __name__ == '__main__': - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - - files = inputFiles.files - function = 'expo' - hist = 'TTbarEplusJetsPlusMetAnalysis/Ref + AsymJets selection/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03' - -# doEstimation(files, function, hist) -# print "MC performance" -# doMCPerformance(files, function, hist) - -# doComparisonFitFunctions(files) - - - - - - diff --git a/scripts_old/QCD_ConversionControlRegion_0btag.pdf b/scripts_old/QCD_ConversionControlRegion_0btag.pdf deleted file mode 100644 index 405766c69c51f78dfb3f75e2e46fac1d86f9a7eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17593 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 PZifNCRI&+cqRaAsVS1CP diff --git a/scripts_old/QCD_ConversionControlRegion_0btag.png b/scripts_old/QCD_ConversionControlRegion_0btag.png deleted file mode 100644 index 6bee0101533b78bb19fa20b1b2999db7ab504605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46132 zcmb5WcU)7=_AeYo!9r0Huuv2fRI1Xu1w>Rp9!=;)kluyR2`C5x3W`bz1P}$J_g(^s zAO;8!V`x%^&_W9kAcWir&vVZ2p7Xx%=e?JIc9K1NX3fl+wbu8$)+X|St`^&oGe;m0 z2%GjDjlUoeW)%qJ!23h{!7rww(i`ByY;{jd16;x1)~&i=2;>|@TjRzf-;{;lCZ&08 zm6weB$IlGV(;p^1WPNbe)rNK3LgL+`maC^>{ehR+r4{Z9ZM;mY&mfoU{Do(!G+jnV zV|RCn3(Sm9*AvpY7}o?L`-9-pG$AGo?JK8G=WHjVkext)fG2YGXzlXwohZn~oY!v;`;EbM(H}?owIO3H`P3hr zn|%Uy@{qA}Hb#ZfP*TC+OtW^ccl@zh`X_nrC)SR=Jpe(36t#|tT`LIT{Nsn%iGpB> z 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

Navigation

- plots/HLTStudy/ -
    - -
-

Images

- - -

- - Based on a template by Sarfraz Shoukat

- - diff --git a/scripts_old/plots/MttbarAnalysis/index.html b/scripts_old/plots/MttbarAnalysis/index.html deleted file mode 100644 index a1769039..00000000 --- a/scripts_old/plots/MttbarAnalysis/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - plots/MttbarAnalysis - - - -

Navigation

- plots/MttbarAnalysis/ -
    - -
-

Images

- - -

- - Based on a template by Sarfraz Shoukat

- - diff --git a/scripts_old/plots/allplots.py b/scripts_old/plots/allplots.py deleted file mode 100644 index a80e4e66..00000000 --- a/scripts_old/plots/allplots.py +++ /dev/null @@ -1,23 +0,0 @@ -## This file contains all the necessary calls to the rootplot API to produce -## the same set of plots that were created from the command-line. - -## You can use this file to intercept the objects and manipulate them before -## the figure is saved, making any custom changes that are not possible from -## the command-line. - -## 'objects' is a python dictionary containing all the elements used in the -## plot, including 'hists', 'legend', etc. -## ex: objects['hists'] returns a list of histograms - -try: - ## the normal way to import rootplot - from rootplot import plot, plotmpl -except ImportError: - ## special import for CMSSW installations of rootplot - from PhysicsTools.PythonAnalysis.rootplot import plot, plotmpl - -import os -os.chdir('..') # return to the directory with the ROOT files - -figure, objects = plotmpl('/scratch/results/histogramFiles/data_3934.08pb_PFElectron_PF2PATJets_PFMET.root', '/scratch/results/histogramFiles/NewCode/TTJet_1959.75pb_PFElectron_PF2PATJets_PFMET.root', '/scratch/results/histogramFiles/NewCode/WJetsToLNu_1959.75pb_PFElectron_PF2PATJets_PFMET.root', 'topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', 'rootplotmpl_config.py', rebin=50, xmin=1000.0, data=1, stack=True, underflow=True) -figure.savefig('plots/topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', transparent=False, dpi=80) diff --git a/scripts_old/plots/allplots_multi.py b/scripts_old/plots/allplots_multi.py deleted file mode 100644 index 4c0fef23..00000000 --- a/scripts_old/plots/allplots_multi.py +++ /dev/null @@ -1,51 +0,0 @@ -## This file is the same as allplots.py, except that it uses multiprocessing -## to make better use of machines with multiple cores - -try: - ## the normal way to import rootplot - from rootplot import plot, plotmpl - from rootplot.core import report_progress -except ImportError: - ## special import for CMSSW installations of rootplot - from PhysicsTools.PythonAnalysis.rootplot import plot, plotmpl - from PhysicsTools.PythonAnalysis.rootplot.core import report_progress -import ROOT -import multiprocessing as multi -from Queue import Empty - -import os -os.chdir('..') # return to the directory with the ROOT files - -calls = [] - -calls.append(""" -figure, objects = plotmpl('/scratch/results/histogramFiles/data_3934.08pb_PFElectron_PF2PATJets_PFMET.root', '/scratch/results/histogramFiles/NewCode/TTJet_1959.75pb_PFElectron_PF2PATJets_PFMET.root', '/scratch/results/histogramFiles/NewCode/WJetsToLNu_1959.75pb_PFElectron_PF2PATJets_PFMET.root', 'topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', 'rootplotmpl_config.py', rebin=50, xmin=1000.0, data=1, stack=True, underflow=True) -figure.savefig('plots/topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', transparent=False, dpi=80) -""") - - -queue = multi.JoinableQueue() -qglobals = multi.Manager().Namespace() -qglobals.nfinished = 0 -qglobals.ntotal = len(calls) -for call in calls: - queue.put(call) - -def qfunc(queue, qglobals): - while True: - try: mycall = queue.get(timeout=5) - except (Empty, IOError): break - exec(mycall) - ROOT.gROOT.GetListOfCanvases().Clear() - qglobals.nfinished += 1 - report_progress(qglobals.nfinished, qglobals.ntotal, - 'plots', 'png') - queue.task_done() - -for i in range(8): - p = multi.Process(target=qfunc, args=(queue, qglobals)) - p.daemon = True - p.start() -queue.join() -report_progress(len(calls), len(calls), 'plots', 'png') -print '' diff --git a/scripts_old/plots/index.html b/scripts_old/plots/index.html deleted file mode 100644 index 6fa4272c..00000000 --- a/scripts_old/plots/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - plots - - - -

Navigation

- plots/ - -

Images

- - -

- - Based on a template by Sarfraz Shoukat

- - diff --git a/scripts_old/plots/topReconstruction/index.html b/scripts_old/plots/topReconstruction/index.html deleted file mode 100644 index f8674ba7..00000000 --- a/scripts_old/plots/topReconstruction/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - plots/topReconstruction - - - -

Navigation

- plots/topReconstruction/ -
    - -
-

Images

- - -
- -

- - Based on a template by Sarfraz Shoukat

- - diff --git a/scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag.png b/scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag.png deleted file mode 100644 index 8f3938bef2aacc97b3804c3deb4a6fa0574be8e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24242 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 diff --git a/scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_2orMoreBtags.png b/scripts_old/plots/topReconstruction/mttbar_withMETAndAsymJets_2orMoreBtags.png deleted file mode 100644 index 83812b0c18f9495c6f31f25c55247d2d78bb91a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27213 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 z 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 O40KJlr2XJ<;=cj*e1hiy diff --git a/scripts_old/prescaleTableParser.py b/scripts_old/prescaleTableParser.py deleted file mode 100644 index 6fe5a742..00000000 --- a/scripts_old/prescaleTableParser.py +++ /dev/null @@ -1,72 +0,0 @@ -import csv -import sys - -''' Summarises the results given by the makeHLTPrescaleTable.py script in -https://twiki.cern.ch/twiki/bin/viewauth/CMS/HLTriggerTools#make_HLTPrescaleTable_py -''' - -def getTriggers(csvFileName): - file = open(csvFileName, 'rb') - data = csv.reader(file, delimiter = ';') - fieldNames = getFieldNames(data) - triggers, prescaledTriggers = createTriggerDictionaries(fieldNames) - - reader = csv.DictReader( file, fieldnames = fieldNames ,delimiter = ';') - triggers, prescaledTriggers = fillTriggers(reader, triggers, prescaledTriggers) - return triggers, prescaledTriggers - -def getFieldNames(data): - fieldNames = [] - for row in data: - #look for first row starting with 'run' - if len(row) > 0 and row[0] == 'run': - fieldNames = row#this has the format: run, '', listoftriggers - break - return fieldNames - -def createTriggerDictionaries(fieldNames): - triggers = {} - prescaledTriggers = {} - for name in fieldNames[2:]: - triggers[name] = [] - prescaledTriggers[name] = {'prescale': '', 'runs': []} - return triggers, prescaledTriggers - -def fillTriggers(data, triggers, prescaledTriggers): - for row in data: - for name, value in row.iteritems(): - if not name == '' or not name == 'run':#ommit emtpy and run columns - if value == '1':#exists in the menu and has prescale = 1 - if triggers.has_key(name): - triggers[name].append(row['run']) - elif value:#exists in the menu and has prescale !=1 - if prescaledTriggers.has_key(name): - prescaledTriggers[name]['prescale'] = value - prescaledTriggers[name]['runs'].append(row['run']) - return triggers, prescaledTriggers - - -def printTriggersAsTwikiTable(triggers, prescaledTriggers): - print '| *trigger* | *runs* |' - for key in sorted(triggers.keys()): - runs = sorted(triggers[key]) - if len(runs) > 0: - print '| =%s= |' % key, runs[0], '-', runs[-1], '|' - - print - print '| *trigger* | *runs* | *prescales* |' - for key in sorted(prescaledTriggers.keys()): - runs =sorted(prescaledTriggers[key]['runs']) - prescale = prescaledTriggers[key]['prescale'] - if len(runs) > 0: - print '| =%s= |' % key, runs[0], '-', runs[-1], '|', prescale, '|' - - -if __name__ == "__main__": - csvFileName = '/Users/lkreczko/Dropbox/Documents/Analysis/trigger/out2.csv' - if len(sys.argv) > 1: - csvFileName = sys.argv[1] - triggers, prescaledTriggers = getTriggers(csvFileName) - printTriggersAsTwikiTable(triggers, prescaledTriggers) - - \ No newline at end of file diff --git a/scripts_old/printCutFlow.py b/scripts_old/printCutFlow.py deleted file mode 100644 index a818dfc0..00000000 --- a/scripts_old/printCutFlow.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import division -from numpy import arange -from tdrStyle import * -from ROOT import * -#from QCDEstimation import getQCDEstimate#, estimateQCDFor -import QCDEstimation - -import HistPlotter -import HistGetter -import inputFiles - - -cuts = None -cuts_electrons = [ - "All events after skim", - "Event cleaning and High Level Trigger", - "exactly one isolated electron", - "loose muon veto", - "di-lepton veto", - "Conversion veto", - ">= 3 jets", - ">= 4 jets", - ">=1 CSV b-tag", - ">=2 CSV b-tag" - ] - -cuts_muons = [ - "All events after skim", - "Event cleaning and High Level Trigger", - "exactly one isolated muon", - "loose lepton veto", - "di-lepton veto", - ">= 3 jets", - ">= 4 jets", - ">=1 CSV b-tag", - ">=2 CSV b-tag" - ] - -samples = [ - 'ttbar', 'W1Jet', 'W2Jets', 'W3Jets', 'W4Jets', 'zjets', - 'data', 'qcd', 'singleTop'] - -def printCutFlow(hist, analysis): - files = inputFiles.files - hist_1mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/MET/patMETsPFlow/MET_1orMoreBtag' - hist_2mBtag = 'TTbarPlusMetAnalysis/' + analysis + '/Ref selection/MET/patMETsPFlow/MET_2orMoreBtags' - hists = [hist, #due to b-tag scale factors these are not as simple any more - hist_1mBtag, - hist_2mBtag - ] - hists = HistGetter.getHistsFromFiles(hists, files, bJetBins=[]) - hists = HistGetter.addSampleSum(hists) -# histname3 = 'EventCount/TTbarEplusJetsSelection_2orMoreBtags' - - header = "| Step | TTJet | W+jets | DY + Jets | single top | QCD | Sum MC | Data |" - row = " | %s | %d | %d | %d | %d | %d| %d | %d | " - print header - - numbers = getEventNumbers(hists, hist, hist_1mBtag, hist_2mBtag)# + '_0orMoreBtag') - for step in range(len(cuts)): - nums = numbers[step] - sumMC = nums['ttbar'] + nums['wjets'] + nums['zjets'] + nums['singleTop'] + nums['qcd'] - print row % (cuts[step], nums['ttbar'], nums['wjets'], nums['zjets'], nums['singleTop'], nums['qcd'], sumMC, nums['data']) - -def getEventNumbers(hists, histname, hist_1mBtag, hist_2mBtag): - eventNumbers = [] - for step in range(len(cuts)): - events = {} - events['wjets'] = hists['wjets'][histname].GetBinContent(step + 1) - for sample in samples: - events[sample] = hists[sample][histname].GetBinContent(step + 1) - if step == len(cuts) - 2: - events[sample] = hists[sample][hist_1mBtag].Integral() - if step == len(cuts) - 1: - events[sample] = hists[sample][hist_2mBtag].Integral() - eventNumbers.append(events) - return eventNumbers - - -if __name__ == "__main__": - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - cuts = cuts_electrons - print '='*120 - print 'TTbarEplusJetsRefSelection' - printCutFlow('EventCount/TTbarEplusJetsRefSelection', 'EPlusJets') - print '='*120 - cuts = cuts_muons - print '='*120 - print 'TTbarMuPlusJetsRefSelection' - printCutFlow('EventCount/TTbarMuPlusJetsRefSelection', 'MuPlusJets') - print '='*120 diff --git a/scripts_old/readMergeLog.py b/scripts_old/readMergeLog.py deleted file mode 100644 index 2492d13f..00000000 --- a/scripts_old/readMergeLog.py +++ /dev/null @@ -1,34 +0,0 @@ - -mergeLog = file('merge.log') - -groups = [] -groupIndex = 0 -foundStart = False -for line in mergeLog.readlines(): - - if line.startswith('hadd'): - print '='*200 - foundStart = True - groups.append([]) - #split by space - input = line.split(' ') - #first 3 entries are command, parameter and output file, rest are the input files - outputfile = input[2] -# inputfiles = input[3:] - print 'Output file:', outputfile -# for file in inputfiles: -# print file - - if line.startswith('Sources and Target'): - foundStart = False - groupIndex += 1 - print '='*200 - - if foundStart: - if line.startswith('Source file'): - input = line.split(' ') - file = input[3].replace('\n', '') - groups[groupIndex].append(file) - print file - -print 'Number of groups:', len(groups) \ No newline at end of file diff --git a/scripts_old/remove_duplicates b/scripts_old/remove_duplicates deleted file mode 100644 index 58bbbe9c..00000000 --- a/scripts_old/remove_duplicates +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/python -''' -Created on 1 Jun 2010 - -@author: kreczko - -Email: kreczko@cern.ch -''' - -from optparse import OptionParser -import os -import copy - -duplicates = [] -duplicateFiles = {} - -def getUniqueFiles(files): - if listContainsDuplicates(files): - findDuplicates(files) - else: - return files - uniqueFiles = copy.copy(files) - for values in duplicateFiles.itervalues(): - for value in values: - uniqueFiles.remove(value) - values.sort() - uniqueFiles.append(values[-1]) - return uniqueFiles - -def listContainsDuplicates(list): - seen = [] - for item in list: - jobnumber = extractJobnumber(item) - if jobnumber in seen: - duplicates.append(jobnumber) - else: - seen.append(jobnumber) - return len(duplicates) >0 - -def findDuplicates(files): - for file in files: - for job in duplicates: - if job == extractJobnumber(file): - addDuplicate(job, file) - -def extractJobnumber(file): - jobnumber = file.split('_')[-3] - return int(jobnumber) - -def addDuplicate(jobnumber, file): - if not duplicateFiles.has_key(jobnumber): - duplicateFiles[jobnumber] = [] - duplicateFiles[jobnumber].append(file) - -def removeDuplicates(path, files): - print 'Number of file in path:', len(files) - files.sort() - uniqueFiles = getUniqueFiles(files) - uniqueFiles.sort() - print 'Number of unique files', len(uniqueFiles) - filesToRemove = [file for file in files if not file in uniqueFiles] - print 'Number of duplicate files:', len(filesToRemove) - [remove(path + file) for file in filesToRemove] - -def remove(file): - print 'removing',file - os.remove(file) - -if __name__ == "__main__": - parser = OptionParser() - (options, args) = parser.parse_args() - if len(args) >0: - path = args[0] - files = os.listdir(path) - removeDuplicates(path, files) - else: - print 'File path was not specified. Use script "./remove_duplicates path"' \ No newline at end of file diff --git a/scripts_old/remove_duplicates.py b/scripts_old/remove_duplicates.py deleted file mode 100755 index 05630cb8..00000000 --- a/scripts_old/remove_duplicates.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/python -''' -Created on 1 Jun 2010 - -@author: kreczko - -Email: kreczko@cern.ch -''' - -from optparse import OptionParser -import os -import copy - -duplicates = [] -duplicateFiles = {} - -def getUniqueFiles(files): - if listContainsDuplicates(files): - findDuplicates(files) - else: - return files - uniqueFiles = copy.copy(files) - for values in duplicateFiles.itervalues(): - for value in values: - if value in uniqueFiles: - uniqueFiles.remove(value) - values.sort() - uniqueFiles.append(values[-1]) - return uniqueFiles - -def listContainsDuplicates(list): - seen = [] - for item in list: - jobnumber = extractJobnumber(item) - if jobnumber in seen: - duplicates.append(jobnumber) - else: - seen.append(jobnumber) - return len(duplicates) >0 - -def findDuplicates(files): - for file in files: - for job in duplicates: - if job == extractJobnumber(file): - addDuplicate(job, file) - -def extractJobnumber(file): - jobnumber = file.split('_')[-3] - return int(jobnumber) - -def addDuplicate(jobnumber, file): - if not duplicateFiles.has_key(jobnumber): - duplicateFiles[jobnumber] = [] - duplicateFiles[jobnumber].append(file) - -def removeDuplicates(path, files): - print 'Number of file in path:', len(files) - files.sort() - uniqueFiles = getUniqueFiles(files) - uniqueFiles.sort() - print 'Number of unique files', len(uniqueFiles) - filesToRemove = [file for file in files if not file in uniqueFiles] - print 'Number of duplicate files:', len(filesToRemove) - [remove(path + file) for file in filesToRemove] - -def remove(file): - print 'removing',file - os.remove(file) - -if __name__ == "__main__": - parser = OptionParser() - (options, args) = parser.parse_args() - if len(args) >0: - path = args[0] - files = os.listdir(path) - removeDuplicates(path, files) - else: - print 'File path was not specified. Use script "./remove_duplicates path"' \ No newline at end of file diff --git a/scripts_old/rootplot_config.py b/scripts_old/rootplot_config.py deleted file mode 100644 index 0a460541..00000000 --- a/scripts_old/rootplot_config.py +++ /dev/null @@ -1,204 +0,0 @@ -import ROOT # allows access to ROOT colors (e.g. ROOT.kRed) - -############################################################################## -######## About Config Files ################################################## - -## This file can be generated by running 'rootplot --config' - -## Options are loaded in the following order: -## 1. from the command line -## 2. from the default configuration file -## 3. from ~/.rootplotrc -## 4. from configuration files specified on the command-line -## This leads to two major points worth understanding: -## 1. you may delete any lines you like in this file and they will still -## be loaded correctly from the default -## 2. values specified here will superceed the same options from the -## command-line -## Therefore, you could set, for example, 'xerr = True' in this file, -## and x-errorbars will always be drawn, regardless of whether '--xerr' is -## given on the command-line or not. You can do this with any of the command- -## line options, but note that dashes are translated to underscores, so -## '--ratio-split=1' becomes 'ratio_split = 1'. - -## Most global style options like default line widths can be set through -## a rootlogon.C, as described at: -## http://root.cern.ch/drupal/content/how-create-or-modify-style - -############################################################################## -######## Specifying Files and Targets ######################################## - -## You can specify the files to run on through the 'filenames' variable rather -## than entering them at the command-line, for example: -## filenames = ['histTTbar.root', 'histZmumu.root'] - -## Likewise, you can specify target histograms or directories here rather than -## on the command-line, for example: -## targets = ['barrel/15to20', 'barrel/20to30'] - -## You might also want to specify fancy labels for the legend here rather -## than on the command-line: -## legend_entries = [r'#bar{t}t', r'Z#rightarrow#mu#mu'] - -############################################################################## -######## Different Options for Different Targets ############################# - -## Leave these lists empty to have them automatically filled according to the -## command-line options. Any list that is filled must be at least as long -## as the number of targets or it will throw an error. - -line_colors = [] # normally filled by options.colors -fill_colors = [] # normally filled by options.colors -marker_colors = [] # normally filled by options.colors -marker_sizes = [] # in pixels -line_styles = [] # 1 (solid), 2 (dashed), 3 (dotted), 4 (dashdot), ... -fill_styles = [] # 0 (hollow), 1001 (solid), 2001 (hatched), ... -draw_commands = [] # a TH1::Draw option, include 'stack' to make stacked - -############################################################################## -######## Global Style Options ################################################ - -## Colors can be specified as (r, g, b) tuples (with range 0. to 1. or range -## 0 to 255), or ROOT color constants (ROOT.kBlue or 600) - -colors = [ - ## a default set of contrasting colors the author happens to like - ( 82, 124, 219), # blue - (212, 58, 143), # red - (231, 139, 77), # orange - (145, 83, 207), # purple - (114, 173, 117), # green - ( 67, 77, 83), # dark grey - ] - -## Used when --marker_styles is specified; more info available at: -## http://root.cern.ch/root/html/TAttMarker.html -marker_styles = [ - 4, # circle - 25, # square - 26, # triangle - 5, # x - 30, # five-pointed star - 27, # diamond - 28, # cross - 3, # asterisk - ] - -#### Styles for --data -data_color = (255,0,0) # black -mc_color = (50, 150, 150) # used when there are exactly 2 targets; set to - # None to pick up the normal color -data_marker = 8 # marker style (circle) - -#### Settings for --ratio-split or --efficiency-split -ratio_max = None -ratio_min = None -ratio_fraction = 0.3 # Fraction of the canvas that bottom plot occupies -ratio_label = 'Ratio to %(ratio_file)s' # Label for the bottom plot -efficiency_label = 'Efficiency vs. %(ratio_file)s' - -#### Titles produced by --area-normalize and --normalize -area_normalized_title = 'Fraction of Events in Bin' -target_normalized_title = 'Events Normalized to %(norm_file)s' - -#### Overflow and underflow text labels -overflow_text = ' Overflow' -underflow_text = ' Underflow' - -#### Define how much headroom to add to the plot -top_padding_factor = 1.2 -top_padding_factor_log = 5. # used when --logy is set - -#### Plotting options based on histogram names -## Apply options to histograms whose names match regular expressions -## The tuples are of the form (option_name, value_to_apply, list_of_regexs) -## ex: to rebin by 4 all histograms containing 'pt' or starting with 'eta': -## ('rebin', 4, ['.*pt.*', 'eta.*']) -options_by_histname = [ - ('area_normalize', True, []), - ] - -#### Legend -legend_width = 0.38 # Fraction of canvas width -legend_entry_height = 0.05 # Fraction of canvas height -max_legend_height = 0.4 # Fraction of canvas height -legend_left_bound = 0.20 # For left justification -legend_right_bound = 0.95 # For right justification -legend_upper_bound = 0.91 # For top justification -legend_lower_bound = 0.15 # For bottom justification -legend_codes = { 1 : 'upper right', - 2 : 'upper left', - 3 : 'lower left', - 4 : 'lower right', - 5 : 'right', - 6 : 'center left', - 7 : 'center right', - 8 : 'lower center', - 9 : 'upper center', - 10 : 'center', - } - -#### Page numbers -numbering_size_root = 0.03 # Fraction of canvas width -numbering_align_root = 33 # Right-top adjusted -numbering_x_root = 0.97 # Fraction of canvas width -numbering_y_root = 0.985 # Fraction of canvas height - -#### Draw style for TGraph -draw_graph = 'ap' - -#### This code snippet will be executed after the histograms have all -#### been drawn, allowing you to add decorations to the canvas -decoration_root = ''' -## Draw a line to indicate a cut -#line = ROOT.TLine(5.,0.,5.,9.e9) -#line.Draw() -## Add a caption -#tt = ROOT.TText() -#tt.DrawTextNDC(0.6, 0.15, "CMS Preliminary") -''' - -############################################################################## -######## HTML Output ######################################################### - -#### Number of columns for images in HTML output -ncolumns_html = 2 - -#### Provide a template for the html index files -html_template=r''' - - - - - - %(path)s - - - -

Navigation

- %(back_nav)s -
    - %(forward_nav)s -
-

Images

- %(plots)s -

- - Based on a template by Sarfraz Shoukat

- - -''' diff --git a/scripts_old/rootplotmpl_config.py b/scripts_old/rootplotmpl_config.py deleted file mode 100644 index 6ea3adf3..00000000 --- a/scripts_old/rootplotmpl_config.py +++ /dev/null @@ -1,225 +0,0 @@ -import ROOT # allows access to ROOT colors (e.g. ROOT.kRed) - -############################################################################## -######## About Config Files ################################################## - -## This file can be generated by running 'rootplotmpl --config' - -## Options are loaded in the following order: -## 1. from the command line -## 2. from the default configuration file -## 3. from ~/.rootplotmplrc -## 4. from configuration files specified on the command-line -## This leads to two major points worth understanding: -## 1. you may delete any lines you like in this file and they will still -## be loaded correctly from the default -## 2. values specified here will superceed the same options from the -## command-line -## Therefore, you could set, for example, 'xerr = True' in this file, -## and x-errorbars will always be drawn, regardless of whether '--xerr' is -## given on the command-line or not. You can do this with any of the command- -## line options, but note that dashes are translated to underscores, so -## '--ratio-split=1' becomes 'ratio_split = 1'. - -## Most global style options like default line widths can be set through -## a matplotlibrc, as described at: -## http://matplotlib.sourceforge.net/users/customizing.html - -############################################################################## -######## Specifying Files and Targets ######################################## - -## You can specify the files to run on through the 'filenames' variable rather -## than entering them at the command-line, for example: -filenames = ['/scratch/results/histogramFiles/data_3934.08pb_PFElectron_PF2PATJets_PFMET.root', - '/scratch/results/histogramFiles/NewCode/TTJet_1959.75pb_PFElectron_PF2PATJets_PFMET.root', - '/scratch/results/histogramFiles/NewCode/WJetsToLNu_1959.75pb_PFElectron_PF2PATJets_PFMET.root'] - -## Likewise, you can specify target histograms or directories here rather than -## on the command-line, for example: -#targets = ['topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag'] - -## You might also want to specify fancy labels for the legend here rather -## than on the command-line: -legend_entries = ['data', r'$t\bar{t}$', 'W+Jets'] - -############################################################################## -######## Different Options for Different Targets ############################# - -## Leave these lists empty to have them automatically filled according to the -## command-line options. Any list that is filled must be at least as long -## as the number of targets or it will throw an error. - -line_colors = [] # normally filled by options.colors -fill_colors = [] # normally filled by options.colors -marker_colors = [] # normally filled by options.colors -errorbar_colors = [] # color for bars around the central value -marker_sizes = [] # in points -line_styles = [] # 'solid', 'dashed', 'dashdot', 'dotted' -plot_styles = [] # 'bar', 'hist', 'errorbar', 'stack' -alphas = [] # transparencies for fills (value from 0 to 1) - -############################################################################## -######## Global Style Options ################################################ - -## Colors can be specified as (r, g, b) tuples (with range 0. to 1. or range -## 0 to 255), ROOT color constants (ROOT.kBlue or 600), or any matplotlib -## color specification (names like 'blue' or 'b') - -colors = [ - ## a default set of contrasting colors the author happens to like - ( 82, 124, 219), # blue - (212, 58, 143), # red - (231, 139, 77), # orange - (145, 83, 207), # purple - (114, 173, 117), # green - ( 67, 77, 83), # dark grey - ] - -## Used when --marker_styles is specified; more info available at: -## http://matplotlib.sourceforge.net/api/ -## artist_api.html#matplotlib.lines.Line2D.set_marker -marker_styles = [ - 'o', 's', '^', 'x', '*', 'D', 'h', '1' - ] - -#### Styles for --data -data_color = (0,0,0) # black -mc_color = (50, 150, 150) # used when there are exactly 2 targets; set to - # None to pick up the normal color -data_marker = 'o' # marker style - -#### Settings for --ratio-split or --efficiency-split -ratio_max = None -ratio_min = None -ratio_fraction = 0.3 # Fraction of the canvas that bottom plot occupies -ratio_label = 'Ratio to %(ratio_file)s' # Label for the bottom plot -efficiency_label = 'Efficiency vs. %(ratio_file)s' - -#### Titles produced by --area-normalize and --normalize -area_normalized_title = 'Fraction of Events in Bin' -target_normalized_title = 'Events Normalized to %(norm_file)s' - -#### Overflow and underflow text labels -overflow_text = ' Overflow' -underflow_text = ' Underflow' -overflow_size = 'small' -overflow_alpha = 0.5 - -#### Define how much headroom to add to the plot -top_padding_factor = 1.2 -top_padding_factor_log = 5. # used when --logy is set - -#### Plotting options based on histogram names -## Apply options to histograms whose names match regular expressions -## The tuples are of the form (option_name, value_to_apply, list_of_regexs) -## ex: to rebin by 4 all histograms containing 'pt' or starting with 'eta': -## ('rebin', 4, ['.*pt.*', 'eta.*']) -options_by_histname = [ - ('area_normalize', True, []), - ] - -#### Legend -#### These options will override legend_location, allowing more precise control -## Upper right corner of legend in figure coordinates -legend_figure_bbox = None # [1.0, 1.0] for legend outside the axes -## Upper right corner of legend in axes coordinates -legend_axes_bbox = None - -#### Page numbers -numbering_size_mpl = 'small' -numbering_ha_mpl = 'right' -numbering_va_mpl = 'top' -numbering_x_mpl = 0.98 # Fraction of canvas width -numbering_y_mpl = 0.98 # Fraction of canvas height - -#### Rotation for text x-axis labels -xlabel_rotation = -15 -xlabel_alignment = 'left' -xlabel_alignmenth = 'bottom' # For barh - -#### Convert ROOT symbols to proper LaTeX, for matplotlib plotting -## By default, matplotlib renders only symbols between $'s as TeX, but if -## you enable the 'text.usetex' matplotlibrc setting, then everything is handled -## by the LaTeX engine on your system, in which case you can go wild with TeX. - -## ROOT-type strings on left get replaced with LaTeX strings on the right -replace = [ - # some defaults that should work for most cases - (' pt ' , r' $p_\mathrm{T}$ '), - ('pT ' , r'$p_\mathrm{T}$ '), - (' pT' , r' $p_\mathrm{T}$'), - ('p_{T}' , r'$p_\mathrm{T}$'), - ('E_{T}' , r'$E_\mathrm{T}$'), - ('#eta' , r'$\eta$'), - ('#phi' , r'$\phi$'), - ('fb^{-1}' , r'$\mathrm{fb}^{-1}$'), - ('pb^{-1}' , r'$\mathrm{pb}^{-1}$'), - ('<' , r'$<$'), - ('>' , r'$>$'), - ('#' , r''), - ] - -## If you include 'use_regexp' as the first item, the patterns to be replaced -## will function as regular expressions using python's re module rather than -## as simple text. The example below turn's ROOT's superscript and subscript -## syntax into LaTeX: - -## replace = [ -## ('use_regexp', True), -## (r'\^\{(.*)\}', r'$^{\1}$'), -## (r'\_\{(.*)\}', r'$_{\1}$'), -## ] - -#### A function that will be executed after all histograms have been drawn. -#### It can be used to add extra decorations to your figure. -def decoration_mpl(figure, axeses, path, options, hists): - #### Draw a line to indicate a cut - ## axeses[0].axvline(5., color='red', linestyle='--') - #### Add a caption - ## figure.text(0.6, 0.15, "CMS Preliminary") - return - -############################################################################## -######## HTML Output ######################################################### - -#### Number of columns for images in HTML output -ncolumns_html = 2 - -#### Provide a template for the html index files -html_template=r''' - - - - - - %(path)s - - - -

Navigation

- %(back_nav)s -
    - %(forward_nav)s -
-

Images

- %(plots)s -

- - Based on a template by Sarfraz Shoukat

- - -''' diff --git a/scripts_old/rootplottest.py b/scripts_old/rootplottest.py deleted file mode 100644 index ab5baa43..00000000 --- a/scripts_old/rootplottest.py +++ /dev/null @@ -1,35 +0,0 @@ -#import matplotlib -## matplotlib.use("PDF") ## Include this line to make PDF output -#matplotlib.rc('text', usetex=True) -#matplotlib.rc('font', family="serif", serif="palatino") -from matplotlib import pyplot as plt -import ROOT -import rootplot.root2matplotlib as r2m -from random import gauss - -th1f_1 = ROOT.TH1F("hpt1", "Distribution of pT;pT;Events", 40, 0, 8) -th1f_2 = ROOT.TH1F("hpt2", "Distribution of pT;pT;Events", 40, 0, 8) -for i in range(2500): - th1f_1.Fill(gauss(4, 1.)) - th1f_2.Fill(gauss(6, 1.)) - -cmap = plt.get_cmap('Set3') -colors = [cmap(i/5.) for i in range(5)] - -plt.figure(1, (6, 4)) -ax1 = plt.axes() -replace = [('pT', r'$p_\mathrm{T}$')] -hist1 = r2m.Hist(th1f_1) -hist2 = r2m.Hist(th1f_2) -stack = r2m.HistStack() - -stack.add(hist1, color='b', label=r"$Z\rightarrow \mu\mu$") -stack.add(hist2, color='r', label=r"$t\bar{t}$") -stack.hist(histtype='barstacked') -#stack.barstack() -stack.show_titles(replacements=replace) -plt.legend(loc='upper right') -plt.xlim(0,8) - -plt.show() -plt.savefig('second') ## Include this line to save image \ No newline at end of file diff --git a/scripts_old/run.sh b/scripts_old/run.sh deleted file mode 100644 index b7823b7a..00000000 --- a/scripts_old/run.sh +++ /dev/null @@ -1,103 +0,0 @@ -## -## This run script is used to fit RelIso using exponential (or linear) function -## in various jet bins, using fit_data_Njet.C -## -############################################################################### - - -##======================= -## -## Inclusive jet bin -## -##======================= - -##----------------- -## Fit Njet >= 0 -##----------------- -echo "Alljet Gaus" >> MyEstimates.txt -# (1) fit allj, norm mc to luminosity -root -q -n 'fit_data_Njet.C("all",1)' >& res_allj_normToLumi.txt -# (2) fit allj, norm mc to data -##root -q -n 'fit_data_Njet.C("allj",2)' >& res_allj_normToData.txt - - - -echo "1m-jet Gaus" >> MyEstimates.txt -##----------------- -## Fit Njet >= 1 ('1mj' means 1 or more jet) -##----------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("1mj",1)' >& res_1mj_normToLumi.txt -# (2) norm mc to data -##root -q -n 'fit_data_Njet.C("1mj",2)' >& res_1mj_normToData.txt - -echo "2m-jet Gaus" >> MyEstimates.txt -##----------------- -## Fit Njet >= 2 -##----------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("2mj",1)' >& res_2mj_normToLumi.txt -# (2) norm mc to data -##root -q -n 'fit_data_Njet.C("2mj",2)' >& res_2mj_normToData.txt - -echo "3m-jet Gaus" >> MyEstimates.txt -##----------------- -## Fit Njet >= 3 -##----------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("3mj",1)' >& res_3mj_normToLumi.txt -# (2) norm mc to data -##root -q -n 'fit_data_Njet.C("3mj",2)' >& res_3mj_normToData.txt - -echo "4m-jet Gaus" >> MyEstimates.txt -##----------------- -## Fit Njet >= 4 -##----------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("4orMoreJets",1)' >& res_4mj_normToLumi.txt -# (2) norm mc to data -#root -q -n 'fit_data_Njet.C("4orMoreJets",2)' >& res_4mj_normToData.txt - - - - - - - -##======================= -## -## Exclusive jet bin -## -##======================= - -echo "0 jet Gaus" >> MyEstimates.txt -##---------------- -## Fit Njet = 0 -##---------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("0jet",1)' >& res_0j_normToLumi.txt -# (2) norm mc to data -#root -q -n 'fit_data_Njet.C("0jet",2)' >& res_0j_normToData.txt - -echo "1 jet Gaus" >> MyEstimates.txt -##---------------- -## Fit Njet = 1 -##---------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("1jet",1)' >& res_1j_normToLumi.txt -# (2) norm mc to data -#root -q -n 'fit_data_Njet.C("1jet",2)' >& res_1j_normToData.txt - -echo "2 jet Gaus" >> MyEstimates.txt -##---------------- -## Fit Njet = 2 -##---------------- -# (1) norm mc to luminosity -root -q -n 'fit_data_Njet.C("2jets",1)' >& res_2j_normToLumi.txt -# (2) norm mc to data -#root -q -n 'fit_data_Njet.C("2jets",2)' >& res_2j_normToData.txt - -echo "3 jet Gaus" >> MyEstimates.txt -root -q -n 'fit_data_Njet.C("3jets",1)' >& res_3j_normToLumi.txt -echo "4 jet Gaus" >> MyEstimates.txt -root -q -n 'fit_data_Njet.C("4j",1)' >& res_4j_normToLumi.txt diff --git a/scripts_old/run_mc.sh b/scripts_old/run_mc.sh deleted file mode 100644 index b9b147cc..00000000 --- a/scripts_old/run_mc.sh +++ /dev/null @@ -1,94 +0,0 @@ -## -## 15 Jul 2010 -## -## * This is the run script to plot/fit RelIso using only MC events. -## * It calls fit_new.C and perform gaussian fit over all permutations of fit ranges, -## and make 2 version of plots: one zoomed-in on y-axis and the other not. -## -## * plot_qcd_estimate.C -## -## * It creates the following directories to store the output: -## mc_only_[DT]/nofit -## mc_only_[DT]/gaus_free12j_fix34j -## mc_only_[DT]/gaus_mean_0.3to0.6_12j_fix34j -## mc_only_[DT]/gaus_mean_0.4to0.6_12j_fix34j -## [DT] above means Date and Time, ie the time stamp of when the dir is created. -## -## * The time stamp format can be changed below by adapting the mytime variable. -## -##################################################################################### - -# main dir -dir=mc_only - -# To add time stamp to "mc_only" -#mytime=`date "+%d%m%y_%Hh%Mm"` ## produces eg '150710_13h55m' for 13 July 2010, 1.55pm -mytime=`date "+%d%h%y_%Hh%Mm"` ## produces eg '15Jul10_13h55m' for 13 July 2010, 1.55pm -dir=${dir}_$mytime - -# subdirectories -sd1=nofit -sd2=gaus_free12j_fix34j -sd3=gaus_mean_0.3to0.6_12j_fix34j -sd4=gaus_mean_0.4to0.6_12j_fix34j - -# create directories -mkdir -p $dir/$sd1 -mkdir -p $dir/$sd2 -mkdir -p $dir/$sd3 -mkdir -p $dir/$sd4 - - -# plot without fit -echo "plot without fit" -echo " op: $dir/$sd1" -root -q -b 'run_fit_none.cc(1,0)' >& fit_none.txt -mv -f *QCD_reliso*.pdf fit_none.txt $dir/$sd1 - - - -# Fit: gaus, no constrain in 1,2j, constrain in 3,4j -echo "Fit gaus" -echo " op: $dir/$sd2" -root -q -b 'run_fit.cc(1,0)' >& fit_res_gaus.txt -so animate_gaus.sh -mv -f *pdf *txt *gif $dir/$sd2 - - -# Fit gaus, constrain mean in 1,2j mean:0.3-1.6, fix 3,4j -#echo "Fit gaus, constrain mean in 1,2j (0.3-1.6)" -#echo " op: $dir/$sd3" -#root -q -b 'run_fit_mean12j_geq03.cc(1,0)' >& fit_res_mean12j_geq03.txt -#so animate_gaus.sh -#mv -f *pdf *txt *gif $dir/$sd3 - - -# Fit gaus, constrain mean in 1,2j mean:0.4-1.6, fix 3,4j -#echo "Fit gaus, constrain mean in 1,2j (0.4-1.6)" -#echo " op: $dir/$sd4" -#root -q -b 'run_fit_mean12j_geq04.cc(1,0)' >& fit_res_mean12j_geq04.txt -#so animate_gaus.sh -#mv -f *pdf *txt *gif $dir/$sd4 - -rm -f *eps -echo done - - - -############################### -# # -# Some notes on the workflow # -# # -# # -############################### -# -# run_fit.cc calls fit_new.C, and runs the "fit" function for each fit range. For each case, -# it plots 6 histograms for alljet, 0 jet, 1 jet...4mjets. -# In doing so, it calculates estimates of the QCD in the signal region, and outputs the estimates -# to fit_res_gaus.txt, and the relative deviations ([est-true]/true) to est_free_gaus.txt. -# plot_qcd_estimate.C is then called, which reads in the values from est_free_gaus.txt, and plots these. -# It does this for unconstrained fits, or for constrained fits. -# -# -# -# diff --git a/scripts_old/second.png b/scripts_old/second.png deleted file mode 100644 index a1efd3131ba2a5e090c45ada89a172826746f412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3273 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRzEX7WqAsj$Z!;#Vf4nJ@F#*W;|lxbnG6g(*`6+rAr*7pUN>Z9P~bUWaA5!Qhl^xXxPFzLKcmCI&~Ttq z7O3^l;RYZn$;`ySkix^kz%ap3fq}u{*r?!WfQ%-F(Tp%!GK`jrqcy^4Z8%yRj@E{w hwc%)Oh`lz{dl}BLCe3Z5DX=TS;OXk;vd$@?2>=9N;%oo_ diff --git a/scripts_old/shapeRatio_conversions_NonIsolatedElectrons_electron_eta_0btag.pdf b/scripts_old/shapeRatio_conversions_NonIsolatedElectrons_electron_eta_0btag.pdf deleted file mode 100644 index b98d3f23897bbcb34dfca7a5c810d1d6b046966a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15051 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 V-z>q4_?Mt+xL-UDF&zU^{sV)%egOag diff --git a/scripts_old/shape_comparison_electron_eta_NonIso_0btag.pdf b/scripts_old/shape_comparison_electron_eta_NonIso_0btag.pdf deleted file mode 100644 index 695378a1cbd81cdd9659910daee7420e6cb20df8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14824 zcmd5@30#cZ`>#}(_Oy}Zjc8gl^Ul_^r@cs{g`{n&DZ|vHCWTgtc2S~5Drq5mE-kJr zq=XPjBr3XDvSq2n@4Qo!mbo{5KG)x$&xbSTJ?DAO`JU%I%Q??kNHI2D4674R3)|Z3 z8&EKWg_!Q^P&zs&jNK+b8iX;TvZxHEHwr_cdeZ_R0%%}^!dM5g7<6Co8$b9P`Dn%T z1nunuXq=BIJv|i7*AtQ4_~`nu8>G!K?PQeaVC zmot4W0+_B?cNW!K-Otkt^jk{X6vXuR3>f6BJYsmn5yPYSGd*l+ENBe|Km%dyXu&LJ z6vmY4%R*3rFs3l1flL~da1eQ@goiYTN(2bT4i$+IjNpm1Btb9&0aDa}U^Zx=NQPiG zo}j1+!N?$x2B1Go;*?wFj_9yfM9F`-C1lgL4*ZH zVU|;UfDD*|k|8yKhO_|)(tT(Fi!Fc{(LKPJd_9<+bYE`>vx@G!#5aJ>sTi>w$Sfzp z4L6>fA(P?xbG#4~C&3HPo!4Y$$Ci&tuq2FRX-;Eoq_OB8)SsIjTL34)i^!GNVrzE> zeM2DaCwY$C?1M_=UxkIlo#)RlA$vbfVv-vF%y4oOMRv&~_>xERHDU(((`o)c3F$}$ z^%Ib4a^W<|MMN~vB<2QVxv`wY8ctTjj8ZW}U@k`ZO>PM%scPU+y2f^sk2{kwLUFNm z@?=osqE2j>K2+bI6AQN5pA5TEs>G4%=Vc5uu{)I&Fk%jD`!N}!qjbhNNZ8f|AqVW~ zkafWr(>BsQXf|es&cprzViE_LVulPb+x|NLFhOjaG&C*Nj> zXA01$cn)7+k?|b9KndYFe1S#AbNB*_OyKYZW}U#{3(Pu!!xxx!0*5aUAp(alSYHB% zFIW}=;EO_B1PTC^z+sHTLj(?EfDwVi7?^w_oAJoC{jsar?j2`IFjiESKRtL2GC1IU zApQi7?9BPfRyZ)mh86&HmIrY9088MifX{Sa7W*R(7&;pVX~Gy&Is^C|7*huDQ;ccAIiP_x4`2Z&(MJSj9;?!U zv#YUtf}>!;az;GKvpeP&t&@{1OTjL^NXeazE_rf9+^0xmVHHhHl3GtA6gGk;Wmth(Fp@O)AgH_i+76bf6 z3cm^>(m0546G5aH2csgeQbwP%=9_)FAbnePnrPb-$|Dx#a8CSvjb??Y%DqB26S1>e zEW4#=Sm!SHEBqkgRo{`2l_qIg6Jgr6Kd-=GC3ww)KZ%DuJ0QgBKfxEa*3yQdtbU-x1#fH z&KE7O`qjct392e8Z;crNO5xR&vyOKhQ$PGIF>cpRi79%#f;{yHrAxSA^uwk62aJIJ z8I&VX_(gIAcHNL5A*G?+Mw$?(f7@-wL%VGb*lT<%)9VCmGcQSBm#z^IcjM_eCsH{c z3AVx=(&~t6;3yQ1y1}adHY7+BNzBh8Q6;b=JYef|+~NubqFnzS z3`DIW>IJc3zeWRd7mNQ63>wNNLnzN+UBECH&m2UqaFL83F~UFXk>3Rd`M;73J}DBB zQuB;YnIHE^!9L|taUHEdPqxw3}&(TwYbJ1Iz zYwtQYgtQ6DTSjVC-`i*Doo0FRyz%h`t-8r4UaimUirwj`L2MQOdbfJcrJ8+h!Mc}v z&tGLW2Rukg%`t15`msmWjR)lbhjNj!9|77wN!c%fb(GV?9aijrEM@{Wrly-0iSwy> z<|JRI`5yBYBu-P~b>FvDF()Iz;C+ExlBW4%sXS7;(4q)6RHNLG-WE2PyO#@Yh!Ot{ z;y5vGn*W^z8?iehnniM*j36=3W{b&W(NC z-@5WcL6mmPMe|p!ou*2acCYRAlHb}VPPr*teTFEjJGDCHvIU<{b5r*sxqA=29M7A! zM(;mkeQp;2gM`Od&hhVcdqY2#(x&a)aTKl4*B!l1?)%b~t#(@y)Z(-+ z{!JEqzFopvHz_18q+r1SzZ_4Jsp$?bh)?LF|31WVxC!m34n^Dd5>~in6Dk`@HeQ-{ zjFMw?JJ)DeZEbR%XtMhGFymdAZ5C~zU(ovK4~fbf+Ood(SKN_pRq7#KoOko9J~gcK zO+Z^+6!F~>%>#G5JklewO;2BZq#Y}^Lu7gFVOyuYTM7k(cI00=>Zgj1e)yJ#+1O3J zQUA95mU~FhpWB#E)=%S?6;gCh+pm^a!a_@-0C}=_(KO?~V{S$6iMus7_qBANrHNV^spC_PeTS&IX|P_`wrt?^ zc!tuFxUAQN@xpKO04KC-KkETLz5hAXVy-`ViSYLJzQ@~S z9>obp%km#^PjJwvKGuZCJ;(`@+_dI~%=X=VO`)Z8kL+xDnIkuCVag$+y|Kxb=*vBaUYL#Gc5H#pPBc=aJ+mf&lY4`|(#K8^}hOooI6WVf} zT^vnYrDPE6aW=@n-9T74rg%uxc3wT^cyHH0>-Rk$a<7RMR7ERQwrcP1eVuszY_?PH z)iZA+G54!9n3?Y^Ph}Q{z4v|`yE)KbVTtpWIiWLc+Xek{(>#}22sLg!a|8cC*+IF* z%Ou)rfB$_Em9H{~C6fYEBHmfVhR>AbUEt={W@Zt~@3G69UXWh6t1!JVQ_;Z+e?uox z=Z4PGSlZkLiB!U;jyVjU1jp;{u@386mpVl%Hs2Hact$hoeO{%K&@PeNu}O%>6{qBy z$YqTt3~~mKm_Us4%fy?z!-f0LJclaUx*Q(kGN}2wL%rd}CO-3hnJRMWTWdVkjf`{` zhzqHRtlXbaA{66qP$((WQlZ%8gdb--xM27?2MBB6B9B71~^AZ8*`2z z%F7jx34;xZwo^`4*`Wm6s{h;D}U-f+5>qQFjn)3H0>ADT|#pGtY&`$NO&sX*Lt-GA_S5Od%o#hxjC1`qzy6jcp<0~QAuBdJ|28#4 z8WW4U>ECW`v-VVIeN4wJW{q-H3jWaHH9nQibr%#An|pg>+?MB^Ror>H;P9&BhXlKx zNxAVbJGm;c-xeJG#Hj|XF;Q@2oQNE%3!4CUXP$y`>fOFVl<`huJ@!M?6IgzpnySZw zdTdxK;qrZxl?VL`%bC_5{;dtp=F`&-KRWDx^!@R8^z_R`jW_Jh&N{y#Z3Q6 z5f=>q-$o$t#P&lcxdO!pi<|WK#;sXn)%f65hb+I)$rIw*(y7L`s#}BRmiT?xm-1Ax z!%9F*eA^20RU|+cel4uG;w>>j_ojf5dcu0v&VAa-cRw96rN+~4ZH)7mbP$X+rQgLB zS*BKre_k6`V&QbpW)E{F0sq{7zX5gnnyrr1=}WenxOIhD^X&)!+HS30tL}58R5@em zPF9WBhF4Qx7WRBM>Xz@Dj^&x=qcy+<^ohfq-*zy915wWecaFv@G?())5x(9pofO;H zzHy$b!F&UL{utq8gDH}VA>l30)+KLzR(z>lCGlE?)Ojb*0sVKLRyT3gtqHBGAN%I` z?3{aXQ@fLn8og)=*>sL_C*zI`^ZSgKA!|y)+Xb|5)UV%^dOXK>+gI^DtvSz@XWNzQ zxON=6?9xD%o9>Zqk{N70`$LpoasA!Q8CzcL|MuASjVYs8tZzr5UNCd*BG*s$o)3;( zH=Y3wXGEh5_BUp$oWB~inXC{nv!&Xp+Nj!T&$nw%d#)ZX=@tIZ>~;iSebXm$}#RReX4z``nOKiV<4PA1+U(eG}kjBX`urwKWrF;vEC z?zPY|6qYCP^bXPStIWP${#Q5kR~^Pote%Jy#>A0agjDWK)Y`al_B97+ez+CqN}49yI7RDD@z*al~D_GtzhH9y~bfb%qslcCEhm?927GcizvF?7wg!tX@B)mtIyr@OQ$QI_sTv_ku3$ zo!4JsbF-lL4`bP7F`Ih*&wl+PpJXm^Q=bxLdeUd{QdB`y>1Bsyi#JTq&5-d3fA|q| ztq0@vOuL&FY?CXHvU`19=amPZ{zckxryGM^E831)l)XY9P45VKVQIeTkIIAOHCBPg zRBJQLFFdsU`+HW!?v&}u-75E*{!rQTzKFVNdO>s3p0tFZin!AShYaHi4>{i zw#Gt)ZQsS^mAyZVZx%@-mlQLnQ}&}Z14kj z9@)mlu74tFRTE}b!!mXJE}Bbf&wOZ$+MjSsU%S~{>BH)a#P&N$$wJPOp|0*RrN@1& zEqV$9bv+n%=oi`U@zV$H#Axo5xwi62d~%ebYgE!FJfCyop+nwL##eK`e93yUt+s1* zWSm)E{PTxZr)kzI)m=pjW+IyFYE~Gnq*UiZ{oJJmMl&W6q92BEt7E(Mm~1;mKb3hMiKV)?{ZEsHSbjaj|_<54K4iUQV~VLN%{S%Ul*=g9s{8aoV0i)1)yX5 z5gM}A5ymroxRJBH|C`hLQp^oTEWvc3zZD$Nkm^>%^Oqq_cTR5s8b6y zO(?=|j)19D#JOZXML=$;*`3T6n{}^s#q^Z^<+3wQE2oh7X|t4lG>P_U^WA&Ax<^az zJDQobF-uC0z1he(ztO%tPj}Bu$2!KPvfu~zr43`A@5ZOAM<{1lFq1lsNNGv4s{@!x zGK>p#VgaQ>r-Xa4StZAKNnEBhB@epNf$;h)cny)j!7$P)CoeAw~!W)USQ zUpx9$;#uMpMU>5zJKrBqS$NI(qlbwsfl`vS^n<3VT9n#K;=IhJaz*uusqrl*>@H9Qas@Mb=U#X5 z^Qhu=zR*|P?DtpjCWCUulsR& z72fqaR5=s=*o~GYWozk^VdK_7z_5QcIIL?(<;yHc z1qA;pP(B1&ouFszZ7y9Rl38$akOle-oe%Ug^~o@FYfwBwWp^0*Hb_%GwTazfQ?ZpT zijh%mlUX3u#2MjWlZMJcVjjg-@^{&jD3G4c$gp9vUxai715V5*St*>LTMm*L{8q4f zu*WPgLon{tVcLn_Q!f?JUF!8(^4G80A^+v7p6sU<4`<(b_T_!26YJVv51gH+-=kkB ztG!c~A?1C)&4zcEYC<_93mc^jB1~4R(r+5<)Y#G^s>7J}B4M`gGzT<(~6Z z5!Nf}kscM-#$Ei#x7(S4FzW?XmBRGb`hvYMf6J?OLeB~Nz7+F^7Y>N(GE%dx9P4-J zv^-kT*QF)4;qB=gM^A~WUY@%;o8i01X6=H;z}=l0YYu()xo|Z6(f!;ViH7m7`ikcm ziD}2-kM-I=Rm#w|Jg}8@eq-&2>qiYul9L$Wvidh4O}i@@>eP?Yzy4@i>D}V}tyR{z zASqPlORc+q)x$wj-i8iSgL-xb%0K%aF4abBx9blmvR+@;RkYa5M{`}>iZw2ucZ6x- z7H98B4Iv)Q_Hli>L;bAS=kI^^zyH$p^qa)DKp zGaW?sS6W23w0(}!dd*)RR@>>yES25foZtIA`lFrZVSRngvhZ`Rdb)aQK^F#kyH!hG ztIknUy8k97rHd; z8?Pp`UO`+_)`5Deb57}Em4Qx%Aa z_@N*()M2$FRsO7{n32m4@_ zQHRSvvT=VL?hKEK-q!Q-A`Fxajw=l#)-6Fn5hg9@vI!%XD;3p-(T#5)=A4Pt-P(*uuVmi%)&qa~bn zBb@JGf0`Ex3lWJZ?C>9mL?nXbVJ~R74!Pk&{y@INbuh^I8eIqDahl-tXH+}n0o2%b zSS*eNVt_I2@FZ~RF{%!WB_c91rjA4!U#CF=!TXqYWG;L)HOKXZVUSHdrZ0>Gkik(woQB5y9Qt*gBHN*!f~%4K8CLYmD!!Ngg+59F{bWFAhf1u1Ajr-13dX z9tSGNw1e?PB$aziUm|j&Gp3G=q^ysw!^6k}f-!XjF#6Nk;kt&35TS=k8VdIj-LmK3kDiEB(r^VUk#$hI7~G_ z06n%H8C+wJt0Rn;XR?OoxOSTCTa(dzH3{P}03tNDFW9|cH;*1O4EEbt48ZOHFA~PI z!^4{6We7J?4p{zFIs?2ELNvB5eKQTwFW_{52~^%-TyNp)#e@JDg9<)?MfGQ~H4%&_ O5s0XT3r(y|QU3#8HZ;)y diff --git a/scripts_old/shape_comparison_electron_eta_NonIso_0btag.png b/scripts_old/shape_comparison_electron_eta_NonIso_0btag.png deleted file mode 100644 index 04645ac5e2c04891bc5c23ec51fc613135dea99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32020 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 F{V!41A|C(% diff --git a/scripts_old/tdrStyle.py b/scripts_old/tdrStyle.py deleted file mode 100644 index 9dc2f23f..00000000 --- a/scripts_old/tdrStyle.py +++ /dev/null @@ -1,156 +0,0 @@ -#include "TStyle.h" -from ROOT import TPad, TStyle, kWhite, kTRUE - -# tdrGrid: Turns the grid lines on (true) or off (false) - -def tdrGrid(tdrStyle, gridOn): - tdrStyle.SetPadGridX(gridOn); - tdrStyle.SetPadGridY(gridOn); - - -# fixOverlay: Redraws the axis - -def fixOverlay(): - gPad.RedrawAxis(); - -def setTDRStyle(): - tdrStyle = TStyle("tdrStyle","Style for P-TDR"); - -# For the canvas: - tdrStyle.SetCanvasBorderMode(0); - tdrStyle.SetCanvasColor(kWhite); - tdrStyle.SetCanvasDefH(600); #Height of canvas - tdrStyle.SetCanvasDefW(600); #Width of canvas - tdrStyle.SetCanvasDefX(0); #POsition on screen - tdrStyle.SetCanvasDefY(0); - -# For the Pad: - tdrStyle.SetPadBorderMode(0); - # tdrStyle.SetPadBorderSize(Width_t size = 1); - tdrStyle.SetPadColor(kWhite); - tdrStyle.SetPadGridX(False); - tdrStyle.SetPadGridY(False); - tdrStyle.SetGridColor(0); - tdrStyle.SetGridStyle(3); - tdrStyle.SetGridWidth(1); - -# For the frame: - tdrStyle.SetFrameBorderMode(0); - tdrStyle.SetFrameBorderSize(1); - tdrStyle.SetFrameFillColor(0); - tdrStyle.SetFrameFillStyle(0); - tdrStyle.SetFrameLineColor(1); - tdrStyle.SetFrameLineStyle(1); - tdrStyle.SetFrameLineWidth(1); - -# For the histo: - # tdrStyle.SetHistFillColor(1); - # tdrStyle.SetHistFillStyle(0); - tdrStyle.SetHistLineColor(1); - tdrStyle.SetHistLineStyle(0); - tdrStyle.SetHistLineWidth(1); - # tdrStyle.SetLegoInnerR(Float_t rad = 0.5); - # tdrStyle.SetNumberContours(Int_t number = 20); - - tdrStyle.SetEndErrorSize(2); -# tdrStyle.SetErrorMarker(20); - tdrStyle.SetErrorX(0.); - - tdrStyle.SetMarkerStyle(20); - -#For the fit/function: - tdrStyle.SetOptFit(1); - tdrStyle.SetFitFormat("5.4g"); - tdrStyle.SetFuncColor(2); - tdrStyle.SetFuncStyle(1); - tdrStyle.SetFuncWidth(1); - -#For the date: - tdrStyle.SetOptDate(0); - # tdrStyle.SetDateX(Float_t x = 0.01); - # tdrStyle.SetDateY(Float_t y = 0.01); - -# For the statistics box: - tdrStyle.SetOptFile(0); - tdrStyle.SetOptStat(0); # To display the mean and RMS: SetOptStat("mr"); - tdrStyle.SetStatColor(kWhite); - tdrStyle.SetStatFont(42); - tdrStyle.SetStatFontSize(0.025); - tdrStyle.SetStatTextColor(1); - tdrStyle.SetStatFormat("6.4g"); - tdrStyle.SetStatBorderSize(1); - tdrStyle.SetStatH(0.1); - tdrStyle.SetStatW(0.15); - # tdrStyle.SetStatStyle(Style_t style = 1001); - # tdrStyle.SetStatX(Float_t x = 0); - # tdrStyle.SetStatY(Float_t y = 0); - -# Margins: - tdrStyle.SetPadTopMargin(0.05); - tdrStyle.SetPadBottomMargin(0.13); - tdrStyle.SetPadLeftMargin(0.16); - tdrStyle.SetPadRightMargin(0.02); - -# For the Global title: - - tdrStyle.SetOptTitle(0); - tdrStyle.SetTitleFont(42); - tdrStyle.SetTitleColor(1); - tdrStyle.SetTitleTextColor(1); - tdrStyle.SetTitleFillColor(10); - tdrStyle.SetTitleFontSize(0.05); - # tdrStyle.SetTitleH(0); # Set the height of the title box - # tdrStyle.SetTitleW(0); # Set the width of the title box - # tdrStyle.SetTitleX(0); # Set the position of the title box - # tdrStyle.SetTitleY(0.985); # Set the position of the title box - # tdrStyle.SetTitleStyle(Style_t style = 1001); - # tdrStyle.SetTitleBorderSize(2); - -# For the axis titles: - - tdrStyle.SetTitleColor(1, "XYZ"); - tdrStyle.SetTitleFont(42, "XYZ"); - tdrStyle.SetTitleSize(0.06, "XYZ"); - # tdrStyle.SetTitleXSize(Float_t size = 0.02); # Another way to set the size? - # tdrStyle.SetTitleYSize(Float_t size = 0.02); - tdrStyle.SetTitleXOffset(0.9); - tdrStyle.SetTitleYOffset(1.25); - # tdrStyle.SetTitleOffset(1.1, "Y"); # Another way to set the Offset - -# For the axis labels: - - tdrStyle.SetLabelColor(1, "XYZ"); - tdrStyle.SetLabelFont(42, "XYZ"); - tdrStyle.SetLabelOffset(0.007, "XYZ"); - tdrStyle.SetLabelSize(0.05, "XYZ"); - -# For the axis: - - tdrStyle.SetAxisColor(1, "XYZ"); - tdrStyle.SetStripDecimals(kTRUE); - tdrStyle.SetTickLength(0.03, "XYZ"); - tdrStyle.SetNdivisions(510, "XYZ"); - tdrStyle.SetPadTickX(1); # To get tick marks on the opposite side of the frame - tdrStyle.SetPadTickY(1); - -# Change for log plots: - tdrStyle.SetOptLogx(0); - tdrStyle.SetOptLogy(0); - tdrStyle.SetOptLogz(0); - -# Postscript options: - tdrStyle.SetPaperSize(20.,20.); - # tdrStyle.SetLineScalePS(Float_t scale = 3); - # tdrStyle.SetLineStyleString(Int_t i, const char* text); - # tdrStyle.SetHeaderPS(const char* header); - # tdrStyle.SetTitlePS(const char* pstitle); - - # tdrStyle.SetBarOffset(Float_t baroff = 0.5); - # tdrStyle.SetBarWidth(Float_t barwidth = 0.5); - # tdrStyle.SetPaintTextFormat(const char* format = "g"); - # tdrStyle.SetPalette(Int_t ncolors = 0, Int_t* colors = 0); - # tdrStyle.SetTimeOffset(Double_t toffset); - # tdrStyle.SetHistMinimumZero(kTRUE); - - tdrStyle.cd(); - return tdrStyle diff --git a/scripts_old/test.png b/scripts_old/test.png deleted file mode 100644 index c4682f8bfb90752e0142625fb00bf22af5e47b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21685 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 TjM>|O;mhFZ>gTe~DWM4faBsEv diff --git a/scripts_old/test.py b/scripts_old/test.py deleted file mode 100644 index d6771367..00000000 --- a/scripts_old/test.py +++ /dev/null @@ -1,25 +0,0 @@ -from ROOT import * - -c1 = TCanvas("c1","c1",600,400); -# create/fill draw h1 -gStyle.SetOptStat(kFALSE); -h1 = TH1F("h1","Superimposing two histograms with different scales",100,-3,3); - -for i in range(0,10000): - h1.Fill(gRandom.Gaus(0,1)); -h1.Draw(); - - - -h1.Fit('gaus', "Q0", "ah", -3, 3) -fit = h1.GetFunction('gaus') -fit.Draw('same') -c1.Update(); -print 'Number of parameter errors', len(fit.GetParErrors()) - -errors = fit.GetParErrors() -for i in range(0, 10): - print 'Error No. %d:' % i, errors[i] - -print fit.GetNumberFreeParameters() - diff --git a/scripts_old/testPyROOT.py b/scripts_old/testPyROOT.py deleted file mode 100644 index 7bc30d28..00000000 --- a/scripts_old/testPyROOT.py +++ /dev/null @@ -1,53 +0,0 @@ -from ROOT import * -import sys - - -xlimits = [0, 100] -xTitle = 'test X' -yTitle = 'test Y' - -c = TCanvas("cname", 'cname', 1080, 1080) -pad1 = TPad("pad1", "The pad with the function",0.0,0.2,1.0,1.0); -pad2 = TPad("pad2","The pad with the histogram",0.0,0.0,1.0,0.2); -pad1.Draw() -pad2.Draw() - -pad1.cd() - -hFrame = (pad1.cd()).DrawFrame(xlimits[0],-.1,xlimits[1],1.1) -hFrame.GetXaxis().SetTitle(xTitle) -hFrame.GetYaxis().SetTitle(yTitle) -hFrame.Draw() -upper = TLine(xlimits[0],1.,xlimits[1],1.) -lower = TLine(xlimits[0],0.,xlimits[1],0.) -cut = TLine(30., 0., 30., 1.) -cut.SetLineColor(1) -upper.SetLineColor(4) -lower.SetLineColor(4) -upper.DrawLine(xlimits[0],1.,xlimits[1],1.) ; -lower.DrawLine(xlimits[0],0.,xlimits[1],0.) ; -cut.DrawLine(30., 0., 30., 1.) - -tex = TLatex(0.18,1,"Just Testing"); -tex.SetNDC(); -tex.SetTextAlign(13); -tex.SetTextFont(42); -tex.SetTextSize(0.04); -tex.SetLineWidth(2); -tex.Draw(); - -pad2.cd() -hFrame = (pad2.cd()).DrawFrame(xlimits[0],0.,xlimits[1],2) -hFrame.GetXaxis().SetTitle(xTitle) -hFrame.GetYaxis().SetTitle(yTitle) -hFrame.Draw() -upper = TLine(xlimits[0],1.,xlimits[1],1.) -cut = TLine(30., -2., 30., 2.) -cut.SetLineColor(1) -upper.SetLineColor(4) -upper.DrawLine(xlimits[0],1.,xlimits[1],1.) ; -cut.DrawLine(30., -2., 30., 2.) - - -c.SaveAs("testSplit.pdf") -c.SaveAs("testSplit.png") \ No newline at end of file diff --git a/scripts_old/testRootPlot.py b/scripts_old/testRootPlot.py deleted file mode 100644 index e66878fe..00000000 --- a/scripts_old/testRootPlot.py +++ /dev/null @@ -1,13 +0,0 @@ -from rootplot.core import plotmpl, plot, rootplot, rootplotmpl -import inputFiles - -data = inputFiles.files['data'] -ttbar = inputFiles.files['ttbar'] -print data -print ttbar -#rootplotmpl(data, ttbar, path='topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', output='plots', rebin=50, range = (0,1), data=1, -# fill=True, data_marker = 8, data_color=(255,0,0), legend_entries='data, ttbar', -# xmin=300, xmax=2500, overflow=True, underflow = True) - -rootplotmpl(data, output='plots') -#plotmpl(data, ttbar, 'topReconstruction/mttbar_withMETAndAsymJets_0orMoreBtag', output='plots', debug = True, ext = 'png', hist=True) \ No newline at end of file

;OmR7&7e?a#^%$e6Ppqr zA{NS`s@_p=kavB^_;8LwDV{fz;AwjnRFmkOGSdCI_$W7utDVtm$s^MY&0zyuVZ=Jy zGtYRX&QuvTP)oFqe768n**(j*Ygpv0afppyioD6Adc=QX-Ob*R)h7`gl%emud@jNL z+lR7gdyHTS*W(gxb-+MO~Mo>05a5Bx%qH1AZZ&MGI;%5AoPkRW3(`E$p40ga+fp zQ*w>C^*N2xpKpBZ*aEqO=xvGOuz{er_f=}7GGvd(4OfXB>VT$>ho_}H@NP=h6Wx;qnG{MZi{u5rAo+x|->0-s~&B%6Q zhM}v@gWE==n9%D+?yp8QZGnB}g3%uXd#Cf|6JO8%;@W0>-XZ^OlZriwJxr!Eqqhl3c~l)<>N)N3$t;mMcn-QOS@}Ux1G#e@6|M4 zx>DR%R`br;%Zcm(7f3!kK@B7`W%wv^;qJWk+7ars0Gyc0l3MN(2<3uOFe*TC3af7P zLlv8s@O7Uf(cc8f?jQPL)AD^8m<^V%iWL^UleRP#=qrn624?lcf&R1d5`bJoxU z^D2MaY6DMG5{43()i;t9SS@Kjd4vKz`xTLeV&?4|WUFrDL^@*-^W6r{ICC-upe3E(P#M%>AGe z>X*_^oNmBKt0kkEgW^PE2<ALmzq=}Vt1R00P6RzhEM0vz4rw3CVc`pwvmOx;! zRO{LAsFh2U%a?qilJnU$mA0VWrv`9>B1qU6FP>|&n7L#XKC3Zz!ia6VEBW%fyOwVY zb6?@^0wTj;@gNt9#Ep*OO^`VBSOXpj>sA;sMXM}{GP=hJSN?+~|F|17{FsIFAx&6i z{LH+;Vvf`F86F+}%B9(a4Bv(>S@dzGq?0ub?a@Env3)ZK^1JwM<6K?&+_qXY%T=Qg zZ0>@D9(fE>b4dj7ebjUsm>j@uVKRu@DriurWL$@*Cx-mn z4eFW2yuz^}ESM^3$uVbWr1U|VmfE~1YApH1e~y6$+yBY8i)<&r9u95_d-`A966>N5 zyt19}@O7p31ts|aFv45t_pDLb=tKn{1>xf{UV<^jK%rrS^X?A^(0B(Gmtn!|4)D(? zQ3>ctTx}+&VoGq47)Jh>><{a!e6x7l-a=%mv)1t~IZvFah;$kDBDEDL+=FKiZ&m$U z6yt|go6Y7P@yK0fX=atk#Pop0RM(E1oo@T;U0ICd`{c_)0USA^wAU8Zr8(fDU!YSJzRJNibdY#?hJ94k3ctug2;xoZy zyhB_3_qyzEetRK6n|=O3Alb2+@dKV5WZenEf*rJ2LC(!%fkW`24b6?EwGUK>tgq?o ztF_&MtNGwHH}v=+HyiT^A!Cxdu=?3%hJ&Y6IkSsEAPD&0y>b?Oy@NuH5{<{!RffPfQBMgVyZ`K)ft>M5>iuo`7(2VwZ_G`0y^#j_0PfB~{Lchj()KRAMg zb5FtiRPKA7Z;!Ez&bLjt=VE0nboSWIw2l?B@iuq-{0`qqJ;xUCGz_aUCx^acA*aF` zKI2@rOYo@~y)PX9>}FaxF`ADWKzA_9>h2aU2@j`{x4PPUMWB}^)!}>YwS3enSO_(< zc{o7!p!P<2h;5HDI^5~4)!x;|HKQNB(G*lnUvw@&eH^#cvUDNt5mr%2o~V&5Rr0&$ zKq-K}^~&YYhnl26&Dv0oMw4nJUQHlRBY8}3`F}9dw>EHpSN`K_KRq&WTj(J!+W`)> zDELY~1$Xckbk2Z`_QG)hJ;7jy(UmEYY-&)$k8r8&R!(6`hCL-G0W1t_59x8Ve@}Hr z4jNRpbxXY0CkcJ6)AB{Mt>%Rrb|5Dj_NQjmiQ{kN1u&|}rekjbDW0Q_U_^z{oLf*C zPy4ON-0NfpL1!>lYxhO<4#yZ2drTNPUOAiKz&F}(xDc+wnwDy*MWlee3WhlThWjY3 z=*hnTD_vW#;$lTvli8)=;aNA+)Dvk)1M=&ZcV=VLP4Ak#$s^D;`{g~_c7Y|$@=qb4 zk&QBFNPJrW$?*oO3?Ntr2)a7LCdw41rjo5p%6FfBBz)6(Y~}kNVTW%AMdAP9z9={G zqtTVKVRdVN&4tjic4fP(W1j$vRpm<8zEDLKZ+?mY!`jM1se!$J_yp`d>tT!^iE%>< z51hJYoUfeCb_fV>FnwkX37b(G5VrJ)jINn7CRw5Q7FFM8=fPzd1~=T!nGT8=EedrK zIkeI`*uQ)d1K0f)+GpFX?7;FcFN`$TKThuNq31H|_9tn&jzeA#d)B?!h`FO%al@=- z9R1Yupcdl~Dr1Us)C>H=2Mk&NXiqObbtn$g>y(CRp;;&mNe3b@XYsbxnGiSyyq zg%sS?lH*XbpE_dOXJejffv+&#T>TWBvv{I1tN(|uk)RM_MUm7(o)73cJ!1007aL(+ zp-RVr^Wf(9-In^6F7u+5=bqhc+N~NO)zuf@yc*x)XkSxMJGMgD*#a?!4og9X6M;3O ztR+wExPo{$08HQimOUuMzcKZ%TI@*$ARmiGuHuQIbz@+N-1wcej`~FZ1kQhv!ggul z0bk+l_1r;WD3hsOY={yQidk>xYO{s{d(+P`aazUW*K>>CHhlTh)_?^_(AQ0wS64fD zO-k~L0AIxulU^9u8iv1R{a3p~ligJ|-*9I{Vk2)13>*O5NZFUW+=*eo4c%2%S`-V^hXUnDY)qA z%#B5IpcOfu-Mn-M4K*g7DUgCw49n&(3St4<(n3H=RW4}2&*iN*Tj}csw29l+uN_C@hEEg8J@d9o~2C=hOQ66mB_^spj84hda+;I z)%_<)rL~I>FheT(n|$g1NdQ`w>{#Sqq2AKxp}Q^W!D0tet20as{_<0u24YSrvK5;S z5iD;*{3NN7lh6L6O*t;;VWa}7zD8#5FiGE8GNwRmfnk0wkw?I;07^CV|HZ=|JX_>4 zs`BcZUZX(lm!d$!CuJw*+Wj6O9sQ;otzw<8;6t6--8dpTY9{ z83CfH`n7SSaQOd0n$eKDvC;dY3@4z(8Dmifu;gZ(kxtP1phgc($3bG)9kkJluLl~> z{hIIc*AH~n0_UEAwVY+mbRsZbd*No!HQEJhz_{K&Mwku@vV#3QyZiA*<9enIf9$cq z8Z%!f@x;ZYCBD-BNYDPsZoMu*BIoDp6)g|_c%~MsVJuXloU6^Dh4d|= z*I#>R=_LWn8v=D|^;?TRDez*qu$_kMGC*)8yR4cLr!PWcXRw1(1L%Pt~r(6+c=s{)D;&&KC<_{(awm>WN(MA0Qo zS^q?jx1%s30Hi7gzd7KyV4eZz1)DJ>(e&t|4(?`Yafxm*x+|60_6f&ATBqfC@Dq3B zfqL*;V8u4d?@u9nfUKnZW6c*su|H?Vi4uvbYJ`@6H`p7Abu}u>+1*qLR88sNh%i3gWuvQF=w)|lZ8%i#0R*cY&gG#OW1y2$^-4- z*t8RYpM!y%@Ryv-SrM)YfZN)UW>0$rQ{3L95f3t-PJad)g4%GR8?b`FKlqd>W_^bT zZwBV_iuw^kclrz4&6cq&t*SisAOUmESduggUbm$A_;G74(H4a=T!ggEI1AM0Q=HM2 z7-b*|ro!>SZ0oReUS$E>po%TX0EfNjc!YRxjNHG^=IBDM>CapM;Y3xi4eg5E2HN== zQ=55Vcn6N3DyaWq;4K=laXV151uHTwjXLHohDR;JIe9zw8cUio4|=7FJiIT*;kh6a6yxCgn7pH{-xDA0K%FEe6+1 zX5*R)8(Iy(pkeJia%hYT|A)Sj5tL4L;qtY&5uK*|9({2@Vm?N^iB4Byb4o8{yZ%F} zOFos+@xQuLtzsg0uEj!K1(*ZQo~v_*6w*4lEO;s%TPRaBklP(dFtY}cPT~PS%%AuU zIUY-|Vz(`2uIrw1`>N(DW}7Dum(*XCgF|RLWqGCs6_=2~26!A@+aDHNc)6uSUXV-y zUWJR-*Uk7AbIPs3#Jhs$c<6YJ2i6GKUC_(xRDLsh|J|;t=-Fd(3;AFkCm*$QJ_6QG zta58;&g4v+VjF*Qrc$nV%opHe-Cr7>?1riYu!h+lX0Ml$OopBxD0+Qg6#AdRN)D7$Vvfxm zVd*ym3h_W{eT??T4gvgrc=Tp&w8JfB$;uPG33NBoiPS2&Jx%ZaFzWKG9F|oqjq*@H zaHRWtM{2~i6u>vH+BWup)7f-}C$HC}Zs33P*F27Z=>lq;$2PJ%B9FENcTbrVooNJq z;`#i8y>>4O$x`6MRMIy8`ssNU^S}ghat}n}^~UFAEF;y&v8Ur`F>Q5LJP|;Pe~39{ zR4y;oN{LzZ{eHJg!_ojN#f&bx4Q*5=ihc`c@S=SG)t`~_5kME_sQ`qB^lsig4naO- zau^QD9$Z}Ff0gCEYp{0$Ez<0?7*D{Y{M=eTlG3bW)AdTmA7GGSYjWrcX5ZfbF$n&k zgebYSUvoZt=b%kVeVxZ|X7+0kbn>c7DIOi$-r3!9I@n6a5RL=Iy5nQsl>JO1*nc*t zd416~kn>+ZTge(9X1p_{A^2Z2u$LVedyL@u>)3_omOfHH+>x1`eEl4=MJkw4lYHw5 zWc%j36gcIn>xVD@{rL6Vp7<7xoOH<(MqR6WO^;#`cdv61ImuOm{$|$|z>-GHyaOyA zP}e>Kev{5ipFWQ2_%DY3oSOhEq)&f4yNX!E|C)F0r$%LT{cqVK(#4tf`(N5(v}5nl z{GMgz|C584{I^_4iRQb+oS{xU;j&`ZImihb9wY)sG6WX>7Y6EFlN%@AlLHZ$WwR?ih1S`+{*&N*=7p}!>;bhj z0efoPz#^Srm45+PO;3XtH9Re!+an<=I=_YH4!+o8{zc+dDh!eensCgLP;9e zzZZAx$`fEm&Z{mS2fFD^x~eg5X-lIqO8dZla>#~hw+#%$QKLO(H3ilV8UafIGOEBn zmlye8U*YlhHVTs~34FwfQS019C63C?{!-Km-wD)aVF^9>asA$Qi+v}({p$$m!)vRv zE7N-SFIe#d$X}Q)J}Q9m1$T~k&aDx@Go#jb@oN#CYg28+E>yqQT1y+(ID$s_`%IVf z*v;)G!%mSA&<^-WOIvR;Y{b9}&O?rR8Rnxh8nuxtg<79hfC6)2TB`t2WoDSyuio<@ z16}M4tdB8gjt~|DlfBo~w;R+t1DU&tS75~oBbR6bpC1i7x_)J@&$DVY&18= zybaKkh}=q7JE=OW52a31d)qxz@vWF)_px#@1f{E+8WB$ybdfQ8d(#@H)&L{>C#2BF zXAUtWk|3IVReWa3Yfkti(#*@tQjfH&f*~h@Gpo!CX`-fD6D3?E!Kdy$$+d|rm(h(L$8S=ZFbptGrgdG&o+uq*(uB4Zj7jbdKc6a!FL}yFuO-}OQDG;k&@tg}PCe@I2dK10H- zQ`a8X8_KY>C_7Jn_R*04FmSw=1_q&NV-Vu*B<=imNPBEZLB z+S#F9^Wf8s7p|sx!KL~{xQirEt_3lUcQ;TwUgBpp)t|J zlzYJFI>|-U$Dv<{Ft$Zym6H1%C;80Iks$5!3^nBWdhD7gGG}0uH5BhjrxS(JQOyD_-b&_$wIhx`OLkBrK{~^i1jq0Ew}9<_2;%D_`i9~jqF#17e}->3QK-?;$YTbx zk~?K92RWAl?fqm00oi_R!OscCwM-Ow>V08r9s!aK>pSq58K|Aj0Rl+C8fi=P+S|oL zV%oAc6=+{gsP@_O0IXhKZvS7R3ATkZH0DUcK*`A7k`!^5xYrT3w>u@>rd3cTb!Lri3l2ifmNdSHgHX*uU`mpWl$%E|KvkB_-v1mjvlSQ!5f~7t zEJ3%WT5_4_xw8PLMvpKvncGO@Z5R(7J7U&hNB(%eO+5dHE=iR5y#02usV2#En=m{& zdN;SEe{})SeRr*`Em2|%s6D*nUO2o*!0?NSN=qv923dMTgfhWL7NGo8T z8e)o3O8oMcz0(F^ecWTfZeOxmAoV%T30z?wR_JT@*PFRo9;G=#e`vDV$F+rLRg?Rv z#L8-JOLx4EFfX(*3nS~rR@C7Qa^0S1@!fgW!{qIzPmKl3FmYlxJhwC{#0+ZqZ!-x{ zb%1Bbp~@WEN*a4N=i#7Plry7BwmJFPPt<>#h!=J~E0Zi9U>_7VV;d`{WYd0GXkcv@ z>jH(`G6;;0Mzai>Pk;XRlP;ba@D{W2c5us}7n308-`0{pIL)CP=(PBIk?3aZL(yOD znpVd&^lpx!ZnYLTV-LisuZbG2O_(Dm06iR+Jlfy4&;P1zH4?5z2gEg4>xWv zh!V$dmAUchzk9BsNXz@W+^s8|jfQH&kqe&k2$A>lpX3H6pWk6lhNVNWOcBWep84o#Wzt&l-2V=MfjV`*oW|6Q+gxDu2=V5FutNkJyiJpODiT` zFxD2VMxWAu5~guyi3r^iM}=7&Rw=RLVMUbKXKoFn9p6OjzCHRoN;%7|rQpKZW`^7h z>oImCs?tOc5N}5qM1E4lXsRUvBdRKX&TUk#%&Vl)4bhrl`jqW&VZRP70IpZmpu5Sw z4@2em+_uWg4~}@{DjEy%l|~{9k|2V9rX11pm_vAO4RQXrgaTeU%SE-%ekOC-c&Yt% zVs5yS_7r+-aCUJhQfuO}(m$3rAQgb|65D6mIeV^dy1y0IwB99${glY4JI56{b4~eU zn|rQEj{tNC1SVpYXYGMc%wTH|L>cTYGHlM`*q7P?nECD^GC4L9g_~}rb-eNZlzWn# zvF;WhKtr=^2PV6((Sm1Ai((Z)kNUUQ?nA4UD0rbnLn$g2aa#u~W!P-aQ(xO)N2QZhhLDqOWc&2zP7YI|~hoGRB;JL(# zQu_wynR%f$W(T+}Xsgno_|xpyuUFjW4!qJI_7?EjbpU2pc{xWqwmiNyS&bQ$Fzm^- z6?MQid?MpULA)|+=4K#E@;w)RVeyTgGfXj&QSL_pE-6(?ph>caV1QL+t~TsJy3UBJq-*`f05kJ&*Ni^?;2p*IK6}Ro>(kh5AxH*e8E}bU;kgBLo{++9q-JE%5z; zR#{zmAY(1*xo&B1zmzFWm|1x~`R#Ksur6sFxl$r$jsIRk{BE@+t31?5%=XIwJiy(7V28VHTL7w(tB+mi~u6; zKSuPPD52oJ#^OVYh-+2Nd=$tu=$?z(EsEpgs74UkBI-w&&Xz97G%d`}SInQxpG~PL zq3Dzsl1PH|Z+XbZ`OW){PjQxl$PI^i%0F>0`3z&^T&!9_V5y1dvFf3niTqwlw2%z6)P0?~Mj3<#=2W zf{aKycv@= zOmB+jv*=@jSyH9IPj}5=8Kx6H1^sAn5KP;wI=UG_8bE^8MF8DheC_C#!_6m zQgqe!EP87MB|U~XAVYr`ldA3Rxt$eOAdXYy5|aqb+I*931^}ma^QDTl*34vIPhb;{ zC079BEZKYYDag|~k3D)0E$JrgbhErTi`GtEH8{%u5!imS_-y31GIrn1MOx?;uJ!9Ds>6G;B^ zDY$M<=|-z7XWxN4Rxg3;h{!o4KT>;g^Zf$$3We46HrB0rC#X$e*Xvq}Cq^-w37vb! zZwG;FGKb{QJYSyDla+k+&<20Mp9F|x%T4=ZgL<9VTA|z5pB)0kh%_W8etAMi24%JuAo&CB&2twi$ z?|e5N`ieM?(Ew*SL=c@~d9mY4!X=Z@mCzbUW#@Orr`F@)i!TOFWWVmJ@vo>8um5-} z%2M1XDeJueM!WALxady=Qr<~5h~iCbj%-ajR#ZwF*3dWEdCjYdsP#lKP5pxMcp zPA(DwqtvoPe{gB%bDUP~q;jgHXiq?tJy9N|N+)UHSHTELpG2c?O+ZO>P=$x+yojb0D-;LRe+lX&{|izSTOw=x4MswAKL0RttYYwGRM zX2`<;Nfjhl>%Sw$P|%|uy2896Swe}?7x{yS_d3jpvCCGdb~ zeEZRhvs*h96cnXVrMgrwz6pEWMeOV(09O(*?5wcevkWxSZoVO+9X_Ka%54UjO>t<3f0P0t)*54scV z&tOqJq`N^=O3aLaF!l_yaW$#jh)$a*%OJWs*uu9RDfZJjx?X$Q=3kwAj0+ zgRbXKq(mOohDiRy2iYSBK&)}lZ(Gn%1lTBm`0DqUhYW)p7fl|JIM#iWSfI-a1e>q? zuaN=doBFqX#@-VW0Pi-f|3H#~!x+u?B>Rs9(l;vu?00wWz zjT3fYaXh(hnSL;8-#PqjQC)&KPMZji$khG!0`Z*x%2DrgqZp8CZ3ggvY z&@za*Cocn70${N}j7bX#dnfzJiN>JRH@p1?ZOUlzrA6jXt50^_!XO3;U=9Q2#hc~C z5vP$YWuHNl0$!HWm)+>dBY**Cz|^vU;k3l#o_h_@YfaTWR8``DD`j^VDRT@s4sYsB z)Q2nm=oYL#j>z<1{8R#Bf-`I#A)N2(JmjtXf(Y$(pDtiE4m3f^azBtY5Bzr)1O;F& z4SosiCI2ZDO}>9xXV4rE{xR5pOWOovZ|pt!wTnd33jPP1pcqphpK%K|_3m%G1(Xfp zNqzd;M$M|92z3QLmfvUQe=LG#EPwG6)*tNn_X><6Tm(wz+?n4_L!hg%_hQ`NeE)k< zUX5RxKB)#os2rvK8Xz_9?lIP}B?~~9OqbT^_9^yaOPfMR6yO8upMo49N%;dew{hac z2`8RQj1z!4)0b0d#vSh8?_Jt*9s9Lm=u|LCZeGT zJ~}JC0E~SsUj4NEV>fWj;vm?9?gwS6bv>h>;X~aT@ebEe1RtTHoqVWRHgJZfAILZY zcZ}=_6Ta8YxK;0rvN8Ka_^yTnC>&o5GB+^ZLQwk8?a3Br=Lo6oX;3LtmDrkW?+9VdyaE_dJpVs@Oqk4N07#2| zjvM#ndbg4X)TtR~~@9 zI%F*A%GBsxqsm(~&JwMP@-k`}AhRy6WVe!x%aR*lmiF}~Y;OQ)l&^XhfR(|td{SPU z^S~VNnM!oavOk)K3$Z<1|Nf`o9`x?myyMm4dU;Fu*n~e(ws>Pl59=0V3pHv|@OHt%TDutR(L3(3Nn;S$Z+RWCj2%Y5CTWxZMNX;0gQooo~T>dz1EilUmi= z@LG&jtpsqwW-^nLq)~g{*>VA#&X(*=(wz?Og2x>2j}!G)eS`HfCkW(~ajU-m22=fe z-)`Oa8|8a}tss8U{=7l}gV^?|Z*@5h z^Rqx67&^HLsJwRE6J#XB0xI~`k6fgUwQmP!7}ta3a*7*!XG-h6{h4%PdXB)_PccQy z=vCcii>?^C*dq@FU~eNAMOYrK>9awc{yfnXE&ctgKd|*Ia2q%F$Sdn@b2<9MBPZ9y zn>g^me@&M3+5{6r^v=va*=#601BCp`OgOjZNlX`HtJ3vOyd*sB9TH!}teg^eyx%ob zJVj$`mK@meyUHX_)*BV43RG>| z;@~ceC#zLTZf@=nz)1rP}f&4hPhu5`0 zcJYZPyF8A%PDh63HhfX;+8#Pi$4hn9m_E<8))#SQV?GL(haT(|99bsQ*SP!gpiLmK z*fRJv11`0tDTHlqZl0-ch0mbk9SECDcchUIC-OYs($3V3%DV4e<+)*n|I5p}qSA4q zk=0dMJJ-^rP#bgHjz2c!X4(gkJAG_2a1u{sdUi9s;q_i4ZFfZ!&d#}o+?Da1F33Gp z2xHPOb)0ZFasVRS%7VaU1De_==Z0%DwqdivJzR3yN^U@-0Z2-Pje!N((xP}!T!^ja z`>gv(0DPpreFqzQ4qbE?czn@}(M?$_vULufO`vb9_{vhDHo9IHOB;u8RJ8Ty_)@Gl z@!NbNU0K26l`Ayki9Itvnrh_T@>LV<@YK)luElmb}R> zgzyx?%lv0SS~Mrz_5%D=gS*vDiiG1LQQysx)FV>m1a@8-rRuTm?_X#^LQo2;Z}unH39e1hw@RAtT{ zYJ?YkSZRm`AS6C6j5!Hz+w8L$Hx>2{*vQZt@Wmaax`Wv4HV*{4a|`)e|aTk zM{K28?+xiIsE6l2JE~0+iql;?F8%3C=>s#Bd?bBigXvTVn@nOzPHUCg@_1vk-U3&$ zT+w)(T5E0AvNso5`H5%Hs2?Kh6tvc;wB|r)!A0I{a%Y?{9fxx3QU79UlXehMWa83m z|NSndvz?L79Y9|P{w|M+>)mSP%6wi84UxH679C%_Cb{d-Io*oyfs|H^%=#_TdK>&* zoY8k)W}4#$zq|OH(D#7adjZ&9F}wbhobyTdJwV6M0KB47s~i$!era7o*WR_TY5qu_ z?a;z!{nuupO*4P-8=L*sFwyb%a3B=u;U?bLd-D)CnG!J2NiA6QoNa2>M}ALaskXh} zu<$mo&m|`VsAf2JZ2p|t5e$Hnw-(bWX~8!8F~E7t&U5v3qvvFUdXCvJq0-5xN>U9G z#6a(oGtf>BaR+1K{D=N2OxNP&;#OyI9^%y7Fdk`;*rw+)(Nr-$F3g>6Y6oBt;+mP- z6T`e^>&zUwH}k)b{%2&WX&K;v0Sr8uqJ)X+TRBQnKxs zg#}wWwy@A?V-^Rlh^%#kq^!Rdzl3b)#vCi^RB_6kXToi_@yBCN+F$^M!gsArMToN8 z1#!&!0aBIME0(fe+xk{O z$ZVI8&{s;SF8#*BYq@O$=G&DKogj-Hq=bLGoFTw{t!~_O%YA~6yKwS@(S1k7FUanS zSxOfocaU*_G_|#6N?Y|xt(#N!nfb+}y|u!Pol1Xy;2%VaxcP_=O$DdUqRb3|7h@0rpnC@fqnaGPJO z)0WK)6CUrJ$v>`n341ZlGO=3#^Zi2>)g$EU1B8=>G!osPRuH8laJzUmVh6w0qt-u! z;eQ}K2Fj16&3$iYFNQd12NVhQX~V?XzI>K;e$gJpT(PP?ZSCER|Cl9QV*V;LUZe}7 z8!TPnvlBs~U#ZdSMdpuQ9e)_jrb5%*ZEDhk2IbtayfboKRRW2s%-7s+?=^5GKPu|< zeiOCJZ+&-Bj^V%Z91sR@Qo@p5sW;vcA51v~_H$>TPq_!kU^2X*r8~abaL)!wH(L&?TIcdW(*BQXaMMasx1>3Q}&fbs~}2keCvO~u_SYXBT-oA);d{pCEk3yyn1J` z{9rYnl|UHLx|RJh7Qwv$L9OduYGCg}?S}V&qlUuOq#&>B{J9jGd!h`ygJ<1W?;%bO z{tt{vbF10n+5}QVC5nx!a;;S&*=MtF7h_S_w-4LG4jjRxO2le|@Pd|9%k1}}_}$@J^04OIl>pOREn!5Z1+?T4-D)86e|q1`kB^nw`F9v zCD(TY9ij_j)8iVWO3!*Ox|PSXVuR4W#x$J6R{p=WtdHBu^m-UjF-vg+1JTfXrZ zD!PvzKk~f|!jNeWV?M^JW`bm8N@*LZ{QieicX8O-_Q~ltjr|A}Rn^2PmpR1tat-H; zz7LJL+VOj{`5mpTtxX1}I3EOk0p7@YP%BWYA&}os!jaurPN0{sWK+_r8sZl1sKdI! zaG(Ggv+sIGBYHLg;QEFY?hd1Y(Y*SrF2DhT#b3f6HND1^teg!>u_nY2@m{bf1?$9F zVBpVnf1|P=Q5CVzsmMBN=;^-N`l%FuEf-!by#l3kmS#}_rPfzyF)=s`ELTIH4cyLB zwc%ac_p5R$=6}G9)N|N|yYhhcSk0A=RYo8|zCK5_x8OPWuwQMr_v46}0Wz+h|B5BX zxo-)zuFYYY~Wza{RFLFzV&fyo~JlH zkK_IyUiDL|4YdI5S->EMz+G-7>G2Z8H_OXM(&d*bdu|&G#iy6MsU=Ts412+A&(Jxc z;}r0!$(PG|r%KYqhiu=>ufMLAEtQ7x{}sB%X&^TE=YFL6DkwXE8|Y4KL>RhQu>#aM zdFA80MW1Kp)J^MWYZYapU9+F-nLfj?fTCL-*bPJZo4z{7!=OPKtqgRhgnr_pux9s+2_xf#XzszN8pi!7J$*|* zHM-A6_}nwjM>i;S9cL4tLb=k;o<`AbW7bt(nHJ2>+m}0Lq()|Dol8;*RGH_d+3P%L z@)#DMkPxT-+h_P+6+@lnZes8pQ^6NttC}n zj;(y&EeaWOKm?<|iIBpr$Ck^LABT}Dy*Ikm79&?Q8;4eD74M#Tpg;U97r*FX!ThEA z#Qfr5pz0Q0RSTPc$jKbpaqV9N5mg;N`>r;U@7m4TdFPq&N4ebAQt(U)*TfSTt4XOu zgQFN@1oR+496j}w|JA>2LWnOpymFpL^|5i&wG2+4t8`XQ;0^4)t1k(c6J74#t}I|v zxH~0vV-f4Y)!+NDv|fSU(cxcA_-49zr;m<0QI$X-MSVeHe#31J9-rWElil8{&#aQq z`y&WpIa>rD*U~7uDXHsZzQ&n ziT!AX27g~cnUp1Pv)$BE$ZeM3iOzXFD%8f30?%lS(Qa{U!#0+Gx#t8wDqL)o6TKld zU0=z21QQXY`GU&r(`gcx883k9|FS|osF0=}z?LRbF=<6s&ZY*z6CVR2G|KK@7^;j< zy4HXyUeq&F&em8QXCLeQteg`BTD0@U#!g6dPwc@88kmq1k^6Hy$h`Q3V;|~7U&-@Y zy-fH$G-tR7D?5BCmukXH< z?Q2`1EEIWt9?o8#xyxo#WNMatFLG5H0;(@ZUtpVtYs2{s!pP|cTbsuoI$9BAJJbqBX6H)RT*>mC|!4Tu?JiU}Sd zyFhx{5#T5B7ooS4XuoVf`brF>_z7l=ELrFsgnePdJ`B33(qL)}nu+TG&>$7n4#5|C zUk}jPFe4CphQ$FaxIF|Q)&?NqazCh1d?TC9T~;R%MNvEgYg!BGjaij?0$x7>A|}f> z`PvGS9XCCwj00~cn9iie-FbO^!y|>pVWKht_U%eiD926-#U?)sLIi@rucyF)g$H4J z=RnmPNIwS4!51}s#1r=36Z8!$Zn<0aY4$NdK48`tL0qX<7>eoW%78Fe9yDfHu?#en zSc-hImSr%G0+iQRDD5uVBG%i>h?VJ+DuiZ_$%1-d=YbziMDvg*%t(pUx=Qs3NTO~o z`sbzEPgx@(z*f_y0(rLYiy^bE_aK1V{A>XsNOeNsNW)rXE|?J|sf}kK-2VOyR9k5i zuiA#?3^L|n21Q3MpKXMjDvv)`P(NKJ-R?({19_>YFY{~i>ehb9)1PH0Xx;Rr)AK4r zp*Tjyq)veo6hDW-=52Xd? z71^zO(nWJGt&G+6@1XkzoT^z$e89QeLZCMg82odV1t0M)6CXR zwe+=$jyW@(o4%J_fe*9~-vI2dV7CTfX%MVc*e0dBG9>wg@t^~g9YbXdRcL^8h?Xl! zt?BGR1{t4bZ$kL<+08bCl(r=(H-iP81Cqy5Am|y}-U!OA-@5|k35C?$<^;G9&b8mY zaPStxiKN@GUUGpapyoTCBmGNlQ=f2jga$}$ug8XXN4;&I3aiQ3_QzGAw)`Xb5#t7# zAAbZ>Ae5fmRq?GkP(7)VtE{vy+W2XA@x+qW~q;WiYKW_8yu9~s4h-8p}-T}G_ zy^aP}pw?g61;n8Mgrbn%uV5BkFGqUZTT7GR&A&$4+#8FUhquK0r{=1!+1SyP_Pove z6lm_e>ce7as!eWVEXXuS3jjArvcqEYWvIdIBA8Di_aYg?4<;Q3wV zb8F@xsVxFo^}Fd^$j|DzSGa-S29cm)y11)+0>$dTEW7}IGKq9e0UBGI4gl!m=CJw; zYaYZ!pw3O`{}ovKn_L(2kww3O0la*qmPUq@xzf+^{!9ov(|Bw?LZd|!n=kJbbFWAP z*o?j_!Om;u;;uiF(PBYD83#`LSLUL*QD%fyM(Q)3{u&40^fI@lfKRicB_Q?9#Ag^Z zF87ZF%U^6~n9|C^>px&ySai*9i@yhUo?rBuU(d%o79=M{YA|L2HWY{}^cU6d^|bZQ zIignkVxXHFz1}~tD)V}2Yj71!@Q_uYkx$tnJI)?-decT1tj{X9rOeYC{<+^kU_oRg zVRdb2s0-!$xB^TVU&#&$>9uRkMPH_#vaa5WA}R7UQhfe=HE?Y^)FF4l*L}xT93|C7 z?sDfxxyBkd6jbT9VcP{0DLFa1q586X7{l3z*LvBtvIA1u!~Lh&Dp zbGJ{=oF6IQy3^>M15UC9so0eUd`f`e+txG2rhsjO|=CT`q76r+ApsEtN zwmbdxd>en~lM_HUL+Vo{c1nTZn`E}wO$NIi3@TB2BWh}F08vMpz#agzf+_^!Nl<-c zWfZ8m_iNz{x;R#Dk#LU%1c#;tfkw3{3^CM;(I_K@v*4e%b8fJ&MfS=F1YLA;j8Kasrg2cgK->fxpKhv zB&O#xgy@s_vrb4z3sDllXoj;u3}}BmKwNoqOte^MEjQ4TS^1}s zz^OB!1xAedZFGcHcEJ=#4(2ohib>;HWP1>B*UCWI;r`HZkH`NqPLKQjgZQRt3Nwdt0k$DK7|6>YoA7GU=1DzczAy_MixdM>D%8Qciz%8&y9;h*$#_ zJrqyxYXIBpdvg-12kU)9;!K{72b-tt&4vXsMX>*nb1oh3!t1}i4Mj;ciqk2rKz-xi zq>0doXD7{A5q}D8kW0%W_3HSq$wg>bQST4k{9gpoP_#`YjT$8E{v_nA0W;!00H1620Wx)_01w1M?LO8tvYAqEojzk|Co591!w$Y-CmASn-+3=PO; z0U4xFj>_E~QsKh%Yk(Yr1Xb(U@{K$KDFMe>1A@f3Ed8KDEI(CH%~A}~XMTRw&8};` z9&1l~&`)I=09qY z5BP0>v{NAM|M&S3Uy1fh!!H>=wIQ#X*fu+j2PagLps1#NYEgw2y zEw3OiCSlv4gF3oX$P4S+KlI}HkCQ0CpZQciBY`L74x8yjnbFBv4iqo#V0HlX1Ou=6 z3?1wC@w1RSTyy0b{&B{={$l-=dNUnPly5dSCA==|t+;P4cQC5NnjjqzCw<9;F`m8Y zBfS;)wT)&hVXm)$&u0X@({(LgOS7OoXk_hW+{hi5-6Zf;pgaFa3Qe_JaeL#c41W`SP&{r`G<@_4Abucx1ir=$&0mh>o!L5XZp;*o3>V;RPh(8%^+$TC!xGGu8XONlaK z%w!!I8A`|=V~mWgY)xZd(irl)-|>9j_xJg{?|<*-^Zqs8nfcy(&pqedbM86!o^zOq zqhf|O^(sZo0nh!+4nf+g<};35R&T{->n1NO;o}eBs?5|2Cf;1P zBKi*95kw9r^j1V{pA03BDQ9ScifdV6hMJ5v@~O8U&|p9Y1^nCA+g{#H>9y!yosj(W zV!8bWitXXodHC#G7;Hb$*xz`NM%Sp?s8jP}|kqsMX79G3RiqaLfs{Y4-eZ3oNoU-O@O&thOo&N;XeD|0@ zE^RxPI*gZwodf6p^V#6tmEjGag~?tEN!Ty391-!j5BM8h!{PNR;V;g>>X7zFt-(3( zFfm&THg|Gdqj6`cvw}C%Q7Mht4)M>kkYP|c`^=prj zRpM}VQsiYvIjpU(u;8YOfjWWbh%{Z_9}FJ*)N(}lU67*SQ6la$F2R8Ia;Q0nXDr@E z?MJ4h1V6;Pi0Lx+f)|`!p&lBf!DE*7=0e)AOdVgESX<2+Dk(g12TCV1m62{emItbt zui%cHI0R|9x}iUapIRw3eM~aee?NGoPqLM-xdRsyK{&w6Lltt0hMO|A5fG}MJ5`Q5 z=AmY`7-J3^!t}r$y)P^-mBeP*P)K3rW(X!Zt<`N+JMRS^ za<17vve)o~(o&?zBL&PAVWr-IJmswzRiSju$W9r&~Snlzq$D?azFd$a0+`Jq86 zf;V%|hvkztzDW)9*RR579WV($1~6xm5pdIW>cs?%BBs(k1E1~_wkjWnP?dXZ@m_4k zcC7h#hg|q>h4ODB`T|!Bu$2?ED1l78W@|^#+7pWkQ)MfLNzWR$(Ee%?eoyGGy7ps+ z*NR+ImQJmYt!6qFC9MV}8kL?9tCw8NqxWG32QxHV!}{Rr-FKypgBwm2i5#bj8nwewz4$~)PXP!_*A{GO`DnZHrKbVDTbJ*z0+?f9POXw-#+E; zevmyoC8d8qVsiJ>tBba}^nKW(;Hd{995Sc6(;sOMk;*WaJ%xz@TNDG2EtzPHl${8m z7bmwHtEsGv-R=MGPRGJIAq6B$B>?AJ9?_@#$@n?~-sKf!_(_YEF#q_6R+V@BN86?& zY*H1AV)Gx0$K`@5kY-AMs)J@V3n#F&A_k~ zJ$_lXQEMWeRJ=&&d7K*1LIflVM_5%hh4BHD7Uwd)sVeJVLH_-2IAo@Uj5H7|@(Z3Z zWnlQZeGh`itU+VZy@n+hq4|$ik=Q=chYL~(kZ>3qpF6K6y%goy{KHLDd%RB3vHu;Q z;k%yG?G=~IkS>W{I{`xl$ZR#-w-@=hDZyi#k$-i^{4P60JW-2NWaJ@Rze%dSv)^oG z33pEp%zJk!vPS7oKjU2eL!7Bah2zE^tF^e=H;uyT7WWCa(Di`f<_}Gzmwq|}F{{lo zRvPOU@oxI?6nfjquoBhbCc;r{GDt>aX1_ZU*2Q<}c^M`sDu^$xc zucih3o6}sY6F+u%?z|JkSWf z*uUsj(QI->7=d^& zs*yPAUD?5IuQus@qLr-YDmk3m5v4n(s~q040^!VeAZSSs+_F2T)E#fez$B5*c{B0S z)Lr#{BMPE^f{j|#6T1!<7HZ8&Y#mynLs&W9**el^pJOK_kX)dd-<32f=KbE5QIS4Y zmng>m^`d%9^vasf!YK4=A|8!jrjfm^YK#VVfC$m#cxL=7wv&4VvKxac$Gm>fcRNd* z{cB&GNc`FhXfBroWD4)tU&)iRlJXiT(@D0}=$nN*J-JZvDlKnvSOR(1lmg-w0a3#Cygo@KK`o0*qBq8(deQK_f1=QJ>F;<2VTefogOdx?H z3m+M{v?{5ukjR?B4JYXcH@!r{oRj*=W_}%`HL)FJ7=e9WwMI%{LS~5Dw7URhPz7o zUNVudN0m1>#qxk6d*`dsR@T=dSNV2FrSkjRvV$0jq&*=d|H)CHDuRDTIjuhw7-<44 z`ogt_BTP{sxAJl$zZ?202|1|d9ruv1wM(t6?R;loHhcA{XT-5g8`&7B?-nww$~RS-lC?f?MHCm^V%t{KmFExT&AfbKZHe~p9+w1 zSuHlB>12yZU=J>q%4LBt)OSnfK#2c(9{4Qn;7FV=q$QP&habKc2m6pT$C8<2ds!k! zColMM9?k;Zfrl)tvk;SA{86l<-sTn>nmHoMHI_j3QDxy#^m_&AS(xp5@&NqdN7SPs zkL{nma?g_b^d4{;>ckHUC~O?`-3zFG*cIW1!{3NKe~?&p6AsjwhZ= zzXWv|85nWL$zLU=g?Y1F65G*{K+1kC;dfBQPpDCAL>4IcJa>}U#}3v~B+Az@vL@-E z$s*pgaNOsNkGA&~iKr4GjX&xoP23hp*Y`tt3Sh8O*O0@|=l`^zpiR_&7*zk~ug@UG z1oa6Pb^e(P0wDj!6SUr$*)b!nvb5|qnKe% zZKmB%+dts&?AtmeLxqW4>8`bH6)pEv$Uu+NvzIIHhv_QfmMVe)h!`*kKW{B@GoG5YED zz`OKu|Gmg|7askK8`YNnka-MDFAYCr%*Zl zxQK@c#Mw?_mXz)09dE^D*_F730?j!3vZJz`v|${b62RA5>X2rOnyn6vwd!Hgu^PaJ z0n;q5dx?GF;}d{)KW1&y89+$#dM{-boZ*>)=MvBvMsa;ve$z?{TWyN>LNP+cb(lt) zH_;(uE9y@o`Wi4ur*){*SuVBqP*{aGSH8u#mKsVQ;0~ z`@#Kf$uBGgVlqHKbq(@Serc|G_Lm);q zbd3}H$=Ic-AyymW;Jv+@zK8%+{Y$jxe*KFFXoLIGjS4OceD#r9lF!0{>_mrOkID3V25#trF`u$$N~uPVo;+86S)Ca)xa;B2z-P}1SKWR3PdgOtyY3hT zmk{Xzo6L3RG@6n*()Q)o@tV=W%Tw)sa;WyS*vlr;U;k{{0N3y~`7!`iX%)%wR<+Eb zYo{nvTo0-c`yP8vyegIh`8B|?3mCKwGkA5~GD%%EEYu^!Idm8kW|G&ry8anA$y+t& zdWY=dS0*BCEoPQ~>l7pvozzj`k;Tt8dk69Ak$hjS2OA0|frXnKgwruK#um1~iv;~p zx|tCaGCO%+T`i!`5d%=pdNe?IF7PadrJXKHpPQTd#*yl$>geKF~fn_cXlezG?+s38!p`Ysi6J;7kw zi{>{fzRz@x3fB7p`JHBhVgyTvG`KF@=b`&kf96+n$_^mD^L9V%=tNT5RLokUtvh)R zvfD*9Wje*Tl9k{)5@sS6yFVGcH+z5~&!(hzfmH1%2GNI5oI^*B(eqz%j5hRPGrA0p8zx-KrYH<_ogZF#qi5eH?nsTM6WoLT7Y<6IO^S_B3^U(}RMu1XW!=q*>&Zm3s1sGwUI@nW^ej*xsRh#@3p(hc&ouPK z(Ar?j%h@(LF1Bt5-? z#}=#1Np5%zLJWD>lGR_6Wa5fv6@&yVVY4q-t6{iRL`N~Pvo8mpkN7?om-++B0-j~0 zb)b1lb_WkQn0RSEBnST=l=Oc)Q2#f5|7>HM!}g1AzL(_UA#jWh%?(KU&UgO}xZew< diff --git a/scripts_old/__init__.py b/scripts_old/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts_old/animate_gaus.sh b/scripts_old/animate_gaus.sh deleted file mode 100644 index c7f44dc5..00000000 --- a/scripts_old/animate_gaus.sh +++ /dev/null @@ -1,34 +0,0 @@ - -## convert pdf to gif -#for i in \ -# fit_zoom_fixPara_gaus_r0.2to1.0 \ -# fit_zoom_fixPara_gaus_r0.2to1.2 \ -# fit_zoom_fixPara_gaus_r0.2to1.4 \ -# fit_zoom_fixPara_gaus_r0.3to1.1 \ -# fit_zoom_fixPara_gaus_r0.3to1.3 \ -# fit_zoom_fixPara_gaus_r0.3to1.5 \ -# fit_zoom_fixPara_gaus_r0.4to1.2 \ -# fit_zoom_fixPara_gaus_r0.4to1.4 \ -# fit_zoom_fixPara_gaus_r0.4to1.6 -#do -# convert ${i}.pdf ${i}.gif -#done - -## create animated gif -convert -delay 200 \ - fit_zoom_fixPara_gaus_r0.2to1.0.gif \ - fit_zoom_fixPara_gaus_r0.2to1.2.gif \ - fit_zoom_fixPara_gaus_r0.2to1.4.gif \ - fit_zoom_fixPara_gaus_r0.3to1.1.gif \ - fit_zoom_fixPara_gaus_r0.3to1.3.gif \ - fit_zoom_fixPara_gaus_r0.3to1.5.gif \ - fit_zoom_fixPara_gaus_r0.4to1.2.gif \ - fit_zoom_fixPara_gaus_r0.4to1.4.gif \ - fit_zoom_fixPara_gaus_r0.4to1.6.gif \ - -loop 0 \ - play_fitPara_gaus.gif - -## clear up the individual gif -#rm -rf fit*gif - -#echo done diff --git a/scripts_old/bTagPlots.py b/scripts_old/bTagPlots.py deleted file mode 100644 index 5f4e5404..00000000 --- a/scripts_old/bTagPlots.py +++ /dev/null @@ -1,392 +0,0 @@ -from ROOT import * -import HistGetter -import HistPlotter -import inputFiles -from array import* - -#outputFormats = ['png', 'pdf'] -outputFormats = ['root'] -outputFolder = "/storage/phjaj/Plots/" -#print outputFolder -saveAs = HistPlotter.saveAs -algos = ["CombinedSecondaryVertex", "CombinedSecondaryVertexMVA", - "JetBProbability", "JetProbability", - "SimpleSecondaryVertexHighEfficiency", "SimpleSecondaryVertexHighPurity", - "SoftElectronByIP3d", "SoftElectronByPt", - "SoftMuon", "SoftMuonByIP3d", "SoftMuonByPt", - "TrackCountingHighEfficiency", "TrackCountingHighPurity"] -jets=["allJets", "bQuarkJets", "cQuarkJets", "gluonJets", "udsQuarkJets"] - -def makeBTagPlots(hists, rebin=1): - - #Scaled individual Plots - stage 1 - print 'Plotting individual btag histograms' - gStyle.SetOptStat(001111111) - for name, hist in hists.iteritems(): - entries = hist.Integral(0, hist.GetNbinsX() + 1) - if entries == 0: - print name - else: - hist.Scale(1.0 / entries) - canvas = TCanvas("canvas", "canvas", 800, 800) - hist.GetXaxis().SetTitle("Discriminator Value") - hist.GetYaxis().SetTitle("Number of Jets") - hist.Draw() - outputFilename = name + "_discriminator" - print "Saving canvas", name - saveAs(canvas, outputFilename, outputFormats, outputFolder) - - #Scaled combined plots - stage 2 - print 'Plotting combined btag histograms' - gStyle.SetOptStat(001111111) - for algo in algos: - canvas = TCanvas("canvas", "canvas", 800, 800) - legend = TLegend(0.7, 0.15, 0.85, 0.35) - jets = ["allJets", "bQuarkJets", "cQuarkJets", "gluonJets", "udsQuarkJets"] - for jet in jets: - for name, hist in hists.iteritems(): - #print name - outputFilename = "BJetAnalysis/" + algo + "_discriminator_combined" - if name == "BJetAnalysis/" + algo + "_" + jet: - #print algo - #print jet - #print name - #print jets.index(jet) - hist.SetLineColor(jets.index(jet) + 1) - hist.SetTitle(algo + "_discriminator_combined") - hist.GetXaxis().SetTitle("Discriminator Value") - hist.GetYaxis().SetTitle("Number of Jets") - legend.AddEntry(hist, algo + "_" + jet + "_discriminator", "l") - if jets.index(jet) == 0: - hist.Draw() - else: - hist.Draw("same") - legend.Draw() - print "Saving canvas", outputFilename - saveAs(canvas, outputFilename, outputFormats, outputFolder) - -def makeEfficiencyPlots(): - #Efficiency Plots - stage 1 - print 'Plotting individual btag efficiencies' - gStyle.SetOptStat(001111111) - #loop through root file (and histogram) for each algorithm for each jet type - - for algo in algos: - #for single efficiency plots - cutValues = array ('f', []) - efficiencies = array ('f', []) - graphs1 = [] - - #for combined efficiency plots - multiGraph2 = TMultiGraph() - legend2 = TLegend(0.7, 0.15, 0.85, 0.35) - - for jet in jets: - inputFilename = "/storage/phjaj/Plots/BJetAnalysis/" + algo + "_" + jet + "_discriminator.root" # e.g. csv_disc_bjets.root, csv_disc_cjets.root etc. - #file = TFile(inputFilename) - #canvas = file.Get("canvas") - #hist = canvas.FindObject(algo + "_" + jet + "_discriminator") - #hist = TH1D(file.canvas.FindObject(algo + "_" + jet)) - print algo + "_" + jet + "_discriminator" - file = TFile.Open(inputFilename) -# hist = TH1D(file.canvas.FindObject(algo + "_disc_" + jet)) - hist = TH1D(file.canvas.FindObject(algo + "_" + jet)) - #efficiencyHist = hist.Clone() #clone the original histogram for this particular algorithm for this particular jet - - #loop through bins (cut values) - entries = hist.Integral(0, hist.GetNbinsX() + 1) - max = hist.GetNbinsX() - for bin in range(1, max + 1): #bin 1 to bin 1000 - check! - #print "bin = ", bin - efficiency = hist.Integral(bin, max) / entries #integral from bin to max divided by the total - cutValue = hist.GetXaxis().GetBinLowEdge(bin) - #print cutValue, efficiency - efficiencies.append(efficiency) - cutValues.append(cutValue) - canvas1 = TCanvas("canvas1", "canvas1", 800, 800) - #print "efficiencies = ", efficiencies, len(efficiencies) - #print "cutValues = ", cutValues, len(cutValues) - print max, len(cutValues), len(efficiencies) - gr = TGraph(max, cutValues, efficiencies) # - check! - outputFilename1 = "BJetAnalysis/" + algo + "_" + jet + "_efficiency" - gr.SetTitle(algo + "_" + jet + "_efficiency") - gr.GetXaxis().SetTitle("Discriminator Cut Value") - gr.GetYaxis().SetTitle("Jet Efficiency") - gr.SetMarkerColor(jets.index(jet) + 1) - gr.SetLineColor(jets.index(jet) + 1) - gr.SetMarkerStyle(33) - gr.SetMarkerSize(0.75) - gr.Draw("AP") - graphs1.append(gr) #Add graph to array to plot all 4 jets on the same canvas later below - multiGraph2.Add(graphs1[jets.index(jet)]) - #print "multiGraph = ", multiGraph - legend2.AddEntry(graphs1[jets.index(jet)], algo + "_" + jet + "_efficiency", "l") - print graphs1 - print "Saving canvas", outputFilename1 - saveAs(canvas1, outputFilename1, outputFormats, outputFolder) - cutValues = array ('f', []) - efficiencies = array ('f', []) - #bJetEfficiencies = array ('f', []) - #cJetEfficiencies = array ('f', []) - #gluonJetEfficiencies = array ('f', []) - #udsJetEfficiencies = array ('f', []) - canvas2 = TCanvas("canvas1", "canvas1", 800, 800) - outputFilename2 = "BJetAnalysis/" + algo + "_efficiency_combined" - multiGraph2.Draw("AP") - legend2.Draw() - multiGraph2.SetTitle(algo + "_efficiency_combined") - multiGraph2.GetXaxis().SetTitle("Discriminator Cut Value") - multiGraph2.GetYaxis().SetTitle("Jet Efficiency") - saveAs(canvas2, outputFilename2, outputFormats, outputFolder) - - - #plot non-b jet efficiencies against b-jet efficiency for all non-b-jets for each algorithm - print "Plotting non-b jet efficiency against b-jet efficiency" - gStyle.SetOptStat(001111111) - #loop through root file (and histogram) for each algorithm for each jet type - bJetEfficiencies = array ('f', []) - cJetEfficiencies = array ('f', []) - gluonJetEfficiencies = array ('f', []) - udsJetEfficiencies = array ('f', []) - graphs3 = [] - #print graphs1 - for algo in algos: - print algo - for jet in jets: - inputFilename = "/storage/phjaj/Plots/BJetAnalysis/" + algo + "_" + jet + "_efficiency.root" # e.g. csv_disc_bjets.root, csv_disc_cjets.root etc. - file = TFile.Open(inputFilename) - -# gr = file.canvas1.GetPrimitive("Graph") - gr = TGraph(file.canvas.FindObject(algo + "_" + jet)) -# print "type = ", type(gr) - #gr.Draw() -# print algo, " ", jet - n = gr.GetN() - yValues = gr.GetY() - for i in range(n): - if jet == "bQuarkJets": - bJetEfficiencies.append(yValues[i]) - if jet == "cQuarkJets": - cJetEfficiencies.append(yValues[i]) - if jet == "gluonJets": - gluonJetEfficiencies.append(yValues[i]) - if jet == "udsQuarkJets": - udsJetEfficiencies.append(yValues[i]) - legend3 = TLegend(0.7, 0.15, 0.85, 0.35) - gr1 = TGraph(max, bJetEfficiencies, cJetEfficiencies) - gr1.SetMarkerColor(jets.index("cQuarkJets") + 1) - gr1.SetLineColor(jets.index("cQuarkJets") + 1) - gr1.SetLineWidth(2) - gr1.SetMarkerStyle(33) - gr1.SetMarkerSize(0.75) - legend3.AddEntry(gr1, algo + "cQuarkJets_efficiency", "p") - gr2 = TGraph(max, bJetEfficiencies, gluonJetEfficiencies) - gr2.SetMarkerColor(jets.index("gluonJets") + 1) - gr2.SetLineColor(jets.index("gluonJets") + 1) - gr2.SetLineWidth(2) - gr2.SetMarkerStyle(33) - gr2.SetMarkerSize(0.75) - legend3.AddEntry(gr2, algo + "gluonJets_efficiency", "p") - gr3 = TGraph(max, bJetEfficiencies, udsJetEfficiencies) - gr3.SetMarkerColor(jets.index("udsQuarkJets") + 1) - gr3.SetLineColor(jets.index("udsQuarkJets") + 1) - gr3.SetLineWidth(2) - gr3.SetMarkerStyle(33) - gr3.SetMarkerSize(0.75) - legend3.AddEntry(gr3, algo + "udsQuarkJets_efficiency", "p") - graphs3.append(gr1) - graphs3.append(gr2) - graphs3.append(gr3) - print graphs3 - canvas3 = TCanvas("canvas3", "canvas3", 800, 800) - multiGraph3 = TMultiGraph() - for i in range(len(graphs3)): - print graphs3[i] - multiGraph3.Add(graphs3[i]) - print multiGraph3 - multiGraph3.Draw("AP") - legend3.Draw() - multiGraph3.SetTitle(algo + "_nonBJetEfficiency_v_BJetEfficiency") - multiGraph3.GetXaxis().SetTitle("B-Jet Efficiency") - multiGraph3.GetYaxis().SetTitle("Non-B-Jet Efficiency") - outputFilename3 = "/BJetAnalysis/" + algo + "_nonBJetEfficiency_v_bJetEfficiency" - saveAs(canvas3, outputFilename3, outputFormats, outputFolder) - bJetEfficiencies = array ('f', []) - cJetEfficiencies = array ('f', []) - gluonJetEfficiencies = array ('f', []) - udsJetEfficiencies = array ('f', []) - graphs3 = [] - - #plot uds jet efficiencies against b-jet efficiency for all algorithms - print "Plotting non-b jet efficiency against b-jet efficiency" - gStyle.SetOptStat(001111111) - #loop through root file (and histogram) for each algorithm for each jet type - - bJetEfficiencies = {} - udsJetEfficiencies = {} - - graphs4 = [] - #print graphs1 - for algo in algos: - print algo - for jet in jets: - inputFilename = "/storage/phjaj/Plots/BJetAnalysis/" + algo + "_" + jet + "_efficiency.root" # e.g. csv_disc_bjets.root, csv_disc_cjets.root etc. - file = TFile.Open(inputFilename) - gr = file.canvas1.GetPrimitive("Graph") - print "type = ", type(gr) - #gr.Draw() - print algo, " ", jet - n = gr.GetN() - yValues = gr.GetY() - - b = array('f', []) - uds = array('f', []) - - for i in range(n): - if jet == "bQuarkJets": - b.append(yValues[i]) - if jet == "udsQuarkJets": - uds.append(yValues[i]) - if b: - bJetEfficiencies[algo] = b - if uds: - udsJetEfficiencies[algo] = uds - legend4 = TLegend(0.7, 0.15, 0.85, 0.35) - print len(bJetEfficiencies[algo]) - print len(udsJetEfficiencies[algo]) - - gr = TGraph(max, bJetEfficiencies[algo], udsJetEfficiencies[algo]) - - gr.SetMarkerColor(algos.index(algo) + 1) - #gr.SetLineColor(algos.index(algo) + 1) - #gr.SetLineWidth(2) - gr.SetMarkerStyle(algos.index(algo) + 20) - gr.SetMarkerSize(0.75) - graphs4.append(gr) - #print graphs4 - canvas4 = TCanvas("canvas4", "canvas4", 800, 800) - multiGraph4 = TMultiGraph() - for i in range(len(graphs4)): - #print graphs4[i] - multiGraph4.Add(graphs4[i]) - legend4.AddEntry(graphs4[i], algos[i] + "_efficiency", "p") - #print multiGraph4 - multiGraph4.Draw("AP") - legend4.Draw() - multiGraph4.SetTitle("UDS-JetEfficiency_v_B-JetEfficiency") - multiGraph4.GetXaxis().SetTitle("B-Jet Efficiency") - multiGraph4.GetYaxis().SetTitle("UDS-Jet Efficiency") - outputFilename4 = "/BJetAnalysis/udsJetEfficiency_v_bJetEfficiency" - print "Saving canvas", outputFilename4 - saveAs(canvas4, outputFilename4, outputFormats, outputFolder) - - -def setStyles(dataPlot, mcPlot): - mcPlot.SetLineColor(2) - mcPlot.SetMarkerColor(2) - mcPlot.SetMarkerStyle(22) - -def getLegend(dataPlot, mcPlot): - leg = TLegend(0.7, 0.2, 0.8, 0.3) - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - leg.AddEntry(dataPlot, 'data', 'P') - leg.AddEntry(mcPlot, 'MC', 'P') - return leg - -def getCaption(): - tex = TLatex(0.18, 1, "CMS Preliminary 2011, #sqrt{s} = 7 TeV, L = 4.69 fb^{-1}"); - tex.SetNDC(); - tex.SetTextAlign(13); - tex.SetTextFont(42); - tex.SetTextSize(0.04); - tex.SetLineWidth(2); - return tex - -if __name__ == '__main__': - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 5001;') - - files = inputFiles.files - - histNames = [ - 'BJetAnalysis/CombinedSecondaryVertex_allJets', - 'BJetAnalysis/CombinedSecondaryVertex_bQuarkJets', - 'BJetAnalysis/CombinedSecondaryVertex_cQuarkJets', - 'BJetAnalysis/CombinedSecondaryVertex_gluonJets', - 'BJetAnalysis/CombinedSecondaryVertex_udsQuarkJets', - 'BJetAnalysis/CombinedSecondaryVertexMVA_allJets', - 'BJetAnalysis/CombinedSecondaryVertexMVA_bQuarkJets', - 'BJetAnalysis/CombinedSecondaryVertexMVA_cQuarkJets', - 'BJetAnalysis/CombinedSecondaryVertexMVA_gluonJets', - 'BJetAnalysis/CombinedSecondaryVertexMVA_udsQuarkJets', - 'BJetAnalysis/JetBProbability_allJets', - 'BJetAnalysis/JetBProbability_bQuarkJets', - 'BJetAnalysis/JetBProbability_cQuarkJets', - 'BJetAnalysis/JetBProbability_gluonJets', - 'BJetAnalysis/JetBProbability_udsQuarkJets', - 'BJetAnalysis/JetProbability_allJets', - 'BJetAnalysis/JetProbability_bQuarkJets', - 'BJetAnalysis/JetProbability_cQuarkJets', - 'BJetAnalysis/JetProbability_gluonJets', - 'BJetAnalysis/JetProbability_udsQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighEfficiency_allJets', - 'BJetAnalysis/SimpleSecondaryVertexHighEfficiency_bQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighEfficiency_cQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighEfficiency_gluonJets', - 'BJetAnalysis/SimpleSecondaryVertexHighEfficiency_udsQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighPurity_allJets', - 'BJetAnalysis/SimpleSecondaryVertexHighPurity_bQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighPurity_cQuarkJets', - 'BJetAnalysis/SimpleSecondaryVertexHighPurity_gluonJets', - 'BJetAnalysis/SimpleSecondaryVertexHighPurity_udsQuarkJets', - 'BJetAnalysis/SoftElectronByIP3d_allJets', - 'BJetAnalysis/SoftElectronByIP3d_bQuarkJets', - 'BJetAnalysis/SoftElectronByIP3d_cQuarkJets', - 'BJetAnalysis/SoftElectronByIP3d_gluonJets', - 'BJetAnalysis/SoftElectronByIP3d_udsQuarkJets', - 'BJetAnalysis/SoftElectronByPt_allJets', - 'BJetAnalysis/SoftElectronByPt_bQuarkJets', - 'BJetAnalysis/SoftElectronByPt_cQuarkJets', - 'BJetAnalysis/SoftElectronByPt_gluonJets', - 'BJetAnalysis/SoftElectronByPt_udsjets', - 'BJetAnalysis/SoftMuon_allJets', - 'BJetAnalysis/SoftMuon_bQuarkJets', - 'BJetAnalysis/SoftMuon_cQuarkJets', - 'BJetAnalysis/SoftMuon_gluonJets', - 'BJetAnalysis/SoftMuon_udsQuarkJets', - 'BJetAnalysis/SoftMuonByIP3d_allJets', - 'BJetAnalysis/SoftMuonByIP3d_bQuarkJets', - 'BJetAnalysis/SoftMuonByIP3d_cQuarkJets', - 'BJetAnalysis/SoftMuonByIP3d_gluonJets', - 'BJetAnalysis/SoftMuonByIP3d_udsQuarkJets', - 'BJetAnalysis/SoftMuonByPt_allJets', - 'BJetAnalysis/SoftMuonByPt_bQuarkJets', - 'BJetAnalysis/SoftMuonByPt_cQuarkJets', - 'BJetAnalysis/SoftMuonByPt_gluonJets', - 'BJetAnalysis/SoftMuonByPt_udsQuarkJets', - 'BJetAnalysis/TrackCountingHighEfficiency_allJets', - 'BJetAnalysis/TrackCountingHighEfficiency_bQuarkJets', - 'BJetAnalysis/TrackCountingHighEfficiency_cQuarkJets', - 'BJetAnalysis/TrackCountingHighEfficiency_gluonJets', - 'BJetAnalysis/TrackCountingHighEfficiency_udsQuarkJets', - 'BJetAnalysis/TrackCountingHighPurity_allJets', - 'BJetAnalysis/TrackCountingHighPurity_bQuarkJets', - 'BJetAnalysis/TrackCountingHighPurity_cQuarkJets', - 'BJetAnalysis/TrackCountingHighPurity_gluonJets', - 'BJetAnalysis/TrackCountingHighPurity_udsQuarkJets', - ] - - - bTagFiles = {} - - #bTagFiles['data'] = inputFiles.files['data'] - bTagFiles['ttbar'] = '/storage/results/histogramfiles/TTJet_50000pb_PFElectron_PFMuon_PF2PATJets_PFMET.root' - - #histNames = ['BJetAnalysis/' + histName for histName in histNames] - HistPlotter.setStyle() - hists = HistGetter.getHistsFromFiles(histNames, bTagFiles) #returns a dictionary of form {histname:hist} - makeBTagPlots(hists['ttbar']) - makeEfficiencyPlots() diff --git a/scripts_old/calculateRatio.py b/scripts_old/calculateRatio.py deleted file mode 100644 index 4b154573..00000000 --- a/scripts_old/calculateRatio.py +++ /dev/null @@ -1,57 +0,0 @@ -from uncertainties import ufloat -from math import sqrt - -reductionRelIso = ufloat((1.394, 0.878)) - -ThreeJet1b_A = ufloat((263.3,134.8)) -ThreeJet1b_B = ufloat((720,102.1)) -ThreeJet1b_B = ThreeJet1b_B/reductionRelIso - -FourJet0b_A = ufloat((812.3,217.6)) -FourJet0b_B = ufloat((1097.3,185.53)) -FourJet0b_B = FourJet0b_B/reductionRelIso - -FourJet1b_A = ufloat((157.2,100.2)) -FourJet1b_B = ufloat((398.7,42.6)) -FourJet1b_B = FourJet1b_B/reductionRelIso - -FourJet2b_A = ufloat((15.3,84.7)) -FourJet2b_B = ufloat((58.7, 30.0)) -FourJet2b_B = FourJet2b_B/reductionRelIso - -#correct errors for bias -#ThreeJet1b_B = ufloat((ThreeJet1b_B.nominal_value,sqrt(ThreeJet1b_B.std_dev()**2 + (ThreeJet1b_B.nominal_value*biasrelIso)**2))) -#FourJet0b_B = ufloat((FourJet0b_B.nominal_value,sqrt(FourJet0b_B.std_dev()**2 + (FourJet0b_B.nominal_value*biasrelIso)**2))) -#FourJet1b_B = ufloat((FourJet1b_B.nominal_value,sqrt(FourJet1b_B.std_dev()**2 + (FourJet1b_B.nominal_value*biasrelIso)**2))) -#FourJet2b_B = ufloat((FourJet2b_B.nominal_value,sqrt(FourJet2b_B.std_dev()**2 + (FourJet2b_B.nominal_value*biasrelIso)**2))) - - - -ratio3j1t = ThreeJet1b_A/ThreeJet1b_B -ratio4j0t = FourJet0b_A/FourJet0b_B -ratio4j1t = FourJet1b_A/FourJet1b_B -ratio4j2t = FourJet2b_A/FourJet2b_B - -ThreeJ1t = (ThreeJet1b_A.nominal_value, ThreeJet1b_A.std_dev(), ThreeJet1b_B.nominal_value, ThreeJet1b_B.std_dev(), - ratio3j1t.nominal_value, ratio3j1t.std_dev(), ((1-ratio3j1t)/ratio3j1t.std_dev()).nominal_value) - -FourJ0t = (FourJet0b_A.nominal_value, FourJet0b_A.std_dev(), FourJet0b_B.nominal_value, FourJet0b_B.std_dev(), - ratio4j0t.nominal_value, ratio4j0t.std_dev(), ((1-ratio4j0t)/ratio4j0t.std_dev()).nominal_value) - -FourJ1t = (FourJet1b_A.nominal_value, FourJet1b_A.std_dev(), FourJet1b_B.nominal_value, FourJet1b_B.std_dev(), - ratio4j1t.nominal_value, ratio4j1t.std_dev(), ((1-ratio4j1t)/ratio4j1t.std_dev()).nominal_value) - -FourJ2t = (FourJet2b_A.nominal_value, FourJet2b_A.std_dev(), FourJet2b_B.nominal_value, FourJet2b_B.std_dev(), - ratio4j2t.nominal_value, ratio4j2t.std_dev(), ((1-ratio4j2t)/ratio4j2t.std_dev()).nominal_value) - -print '| * signal region* | *estimate mT* | *estimate relative isolation* | *ratio* | *# std deviations from 1* |' -print '| 3j1t | %.1f ± %.1f | %.1f ± %.1f | %.2f ± %.2f | %.2f |' % ThreeJ1t -print '| 4j0t | %.1f ± %.1f | %.1f ± %.1f | %.2f ± %.2f | %.2f |' % FourJ0t -print '| 4j1t | %.1f ± %.1f | %.1f ± %.1f | %.2f ± %.2f | %.2f |' % FourJ1t -print '| 4j2t | %.1f ± %.1f | %.1f ± %.1f | %.2f ± %.2f | %.2f |' % FourJ2t - - -#print '3j1t', ratio3j1t, '(1-ratio)/error', (1-ratio3j1t)/ratio3j1t.std_dev() -#print '4j0t', ratio4j0t, '(1-ratio)/error', (1-ratio4j0t)/ratio4j0t.std_dev() -#print '4j1t', ratio4j1t, '(1-ratio)/error', (1-ratio4j1t)/ratio4j1t.std_dev() -#print '4j2t', ratio4j2t, '(1-ratio)/error', (1-ratio4j2t)/ratio4j2t.std_dev() \ No newline at end of file diff --git a/scripts_old/copyGridFolder b/scripts_old/copyGridFolder deleted file mode 100644 index 8e0ae2b9..00000000 --- a/scripts_old/copyGridFolder +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python -''' -Created on 7 Jun 2010 - -@author: kreczko - -Email: kreczko@cern.ch -''' -import sys, os -try: - import subprocess -except: - print "You have to use Python 2.4 or higher" - sys.exit(0) -from optparse import OptionParser - -srmBase = 'srm://srm-cms.cern.ch:8443/srm/managerv2?SFN=/castor/cern.ch/cms' -srmBaseCopy = 'srm://srm-cms.cern.ch:8443/srm/managerv2?SFN=' - -def getFiles(gridFolder, input): - if gridFolder.endswith('/'): - gridFolder = gridFolder.rstrip('/') - input = input.rstrip(' ') - fileLinesOnly = input[input.find(gridFolder) + len(gridFolder):] - fileLines = fileLinesOnly.split('\n')[1:] - fileLines = [fileLine.lstrip(' ') for fileLine in fileLines] - files = [line.split(' ')[1] for line in fileLines if len(line.split(' ')) == 2] - files.sort() - return files - -def listFiles(gridFolder): - output = subprocess.Popen(['srmls', srmBase + gridFolder], stdout=subprocess.PIPE).communicate()[0] - return output - -def copySrm(file): - ommitExisting = '-overwrite_mode=WHEN_FILES_ARE_DIFFERENT' - protocolVersion = '-srm_protocol_version=2' - output = subprocess.Popen(['srmcp', ommitExisting, protocolVersion, srmBase + file], stdout=subprocess.PIPE).communicate()[0] - return '' - -def copylcg(file, to): - print '>> lcg-cp ' + srmBaseCopy + file + ' ' + to - output = subprocess.Popen(['lcg-cp', srmBaseCopy + file, to], stdout=subprocess.PIPE).communicate()[0] - return output - -if __name__ == '__main__': - - parser = OptionParser() - (options, args) = parser.parse_args() - if len(args) > 0: - path = args[0] - filelist = listFiles(path) - for file in getFiles(path, filelist): - filename = file.split('/')[-1] - if not os.path.exists(filename): - to = os.getcwd() + '/' + filename - print 'Copying file', srmBase + file - copylcg(file, to) - print - else: - print filename, 'already exists' - else: - print 'Copy path was not specified. Use script "./copyGridFolder path"' diff --git a/scripts_old/deleteGridFolder b/scripts_old/deleteGridFolder deleted file mode 100644 index 6c980e43..00000000 --- a/scripts_old/deleteGridFolder +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -''' -Created on 7 Jun 2010 - -@author: kreczko - -Email: kreczko@cern.ch -''' -import sys -try: - import subprocess -except: - print "You have to use Python 2.4 or higher" - sys.exit(0) -from optparse import OptionParser -files = [] -directories = [] - -srmBase = 'srm://lcgse02.phy.bris.ac.uk:8444/srm/managerv2?SFN=' - -def getFiles(gridFolder, input): - if gridFolder.endswith('/'): - gridFolder = gridFolder.rstrip('/') - input = input.rstrip(' ') - fileLinesOnly = input[input.find(gridFolder)+len(gridFolder):] - fileLines = fileLinesOnly.split('\n')[1:] - fileLines = [fileLine.lstrip(' ') for fileLine in fileLines] - files = [line.split(' ')[1] for line in fileLines if len(line.split(' ')) == 2] - files.sort() - return files - -def listFiles(gridFolder): - output = subprocess.Popen(['srmls', srmBase + gridFolder], stdout = subprocess.PIPE).communicate()[0] - return output - -def delete(file): - output = subprocess.Popen(['srmrm', srmBase + file], stdout = subprocess.PIPE).communicate()[0] - return output - -def deleteFolder(folder): - output = subprocess.Popen(['srmrmdir', srmBase + folder], stdout = subprocess.PIPE).communicate()[0] - return output - -def deleteGridFolder(path): - filelist = listFiles(path) - for file in getFiles(path, filelist): - print delete(file) - print deleteFolder(path) - -if __name__ == '__main__': - - parser = OptionParser() - parser.add_option("-r", "--recursive", - action="store_true", dest="recursive", default=False, - help="delete grid folder recursively") - - (options, args) = parser.parse_args() - if len(args) >0 and not options['recursive']: - path = args[0] - deleteGridFolder(path) - elif len(args) >0 and options['recursive']: - pass - - else: - print 'Delete path was not specified. Use script "./deleteGridFolder path"' diff --git a/scripts_old/delete_gpfs_dir.py b/scripts_old/delete_gpfs_dir.py deleted file mode 100644 index 5045e790..00000000 --- a/scripts_old/delete_gpfs_dir.py +++ /dev/null @@ -1,74 +0,0 @@ -try: - import subprocess -except: - print "You have to use Python 2.4 or higher" - sys.exit(0) -from optparse import OptionParser -import os - - -files = [] -directories = [] - -SEbase = 'srm://lcgse02.phy.bris.ac.uk:8444/srm/managerv2?SFN=/cms/' -gpfsBase = '/gpfs_phys/storm/cms/' - -def delete(file): - output = subprocess.Popen(['srmrm', srmBase + file], stdout=subprocess.PIPE).communicate()[0] - return output - -def listDirectory(path): - - dirlist = os.listdir(path) - - isFile = os.path.isfile - isDir = os.path.isdir - - for item in dirlist: - newPath = path + '/' + item - if isFile(newPath): - files.append(newPath) - elif isDir(newPath): - directories.append(newPath) - listDirectory(newPath) - -def deleteFiles(files): - for file in files: - file = file.replace(gpfsBase, SEbase) - print 'deleting file:', file - output = subprocess.Popen(['srmrm', file], stdout=subprocess.PIPE).communicate()[0] - -def deleteFolder(folder): - print 'deleting folder:', folder - output = subprocess.Popen(['srmrmdir', '-recursive', folder], stdout=subprocess.PIPE).communicate()[0] - return output - -def printTotalSize(path): - output = subprocess.Popen(['du', '-sch', path], stdout=subprocess.PIPE).communicate()[0] - print output - -if __name__ == '__main__': - parser = OptionParser() - parser.add_option("-r", "--recursive", - action="store_true", dest="recursive", default=False, - help="delete gpfs folder recursively") - - (options, args) = parser.parse_args() - if len(args) > 0 and vars(options)['recursive']: - path = args[0] - print 'getting files' -# print os.listdir(path) - printTotalSize(path) - listDirectory(path) - deleteFiles(files) - deleteFolder(path.replace(gpfsBase, SEbase)) - print 'number of files:', len(files) - if len(files) > 0: - print 'first file:', files[0] - - print 'number of directories:', len(directories) - if len(directories) > 0: - print 'first dir', directories[0] - - else: - print 'Delete path was not specified. Use script "./deleteGridFolder path"' diff --git a/scripts_old/detailed_MC_conversions.png b/scripts_old/detailed_MC_conversions.png deleted file mode 100644 index b0eb4ebfdc6bdefd2a19c1dda018e7d6c9556bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31979 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 diff --git a/scripts_old/diffJSON b/scripts_old/diffJSON deleted file mode 100644 index da2730de..00000000 --- a/scripts_old/diffJSON +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import sys -import json - -if __name__ == "__main__": - if len(sys.argv) == 3: - print 'OK' - else: - print 'Usage:' - print 'diffJSON json1 json2' diff --git a/scripts_old/fileInfo.py b/scripts_old/fileInfo.py deleted file mode 100644 index fc443713..00000000 --- a/scripts_old/fileInfo.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/python -''' -Created on 1 Jun 2010 - -@author: kreczko - -Email: kreczko@cern.ch -''' - -from optparse import OptionParser -import os -import copy -import glob -import sys -import ROOT -rootFile = ROOT.TFile - -duplicates = [] -duplicateFiles = {} - -def getROOTFiles(path): - path += "/*.root" - files = glob.glob(path) - return files - -def getUniqueFiles(files): - if listContainsDuplicates(files): - findDuplicates(files) - else: - return files - uniqueFiles = copy.copy(files) - for values in duplicateFiles.itervalues(): - for value in values: - if value in uniqueFiles: - uniqueFiles.remove(value) - values.sort() - uniqueFiles.append(values[-1]) - return uniqueFiles - -def listContainsDuplicates(list): - seen = [] - for item in list: - jobnumber = extractJobnumber(item) - if jobnumber in seen: - duplicates.append(jobnumber) - else: - seen.append(jobnumber) - return len(duplicates) >0 - -def findDuplicates(files): - for file in files: - for job in duplicates: - if job == extractJobnumber(file): - addDuplicate(job, file) - -def extractJobnumber(file): - jobnumber = file.split('_')[-3] - number = 0 - try: - number = int(jobnumber) - except: - print "Could not find the job number for" - print file - print 'exiting...' - sys.exit(-1) - return number - -def addDuplicate(jobnumber, file): - if not duplicateFiles.has_key(jobnumber): - duplicateFiles[jobnumber] = [] - duplicateFiles[jobnumber].append(file) - -def getDuplicateFiles(allFiles, uniqueFiles): - filesToRemove = [file for file in allFiles if not file in uniqueFiles] - return filesToRemove - -def checkFiles(files): - goodFiles = [] - badFiles = [] - - for file in files: - if checkFile(file): - goodFiles.append(file) - else: - badFiles.append(file) - - return goodFiles, badFiles - -def checkFile(file): - passesCheck = False - - try: - openFile = rootFile.Open(file) - if openFile: - passesCheck = True - except: - print "Could not open ROOT file" - - return passesCheck - - -if __name__ == "__main__": - ROOT.gROOT.SetBatch(True) - ROOT.gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - parser = OptionParser() - parser.add_option("-c", "--check", - action="store_false", dest="check", default=True, - help="check if files are valid files ") - (options, args) = parser.parse_args() - if len(args) >0: - - path = args[0] - files = getROOTFiles(path) - files.sort() - if options.check: - print 'checking files' - good, bad = checkFiles(files) - print 'Number of good files', len(good) - print 'Number of bad files', len(bad) - uniqueFiles = getUniqueFiles(files) - uniqueFiles.sort() - duplicateFiles = getDuplicateFiles(files, uniqueFiles) - print 'Number of file in path:', len(files) - print 'Number of unique files', len(uniqueFiles) - print 'Number of duplicate files:', len(duplicateFiles) - if len(duplicateFiles) > 0: - print 'Files to remove:' - for file in duplicateFiles: - print path + file - if options['check']: - print 'check files' - else: - print 'File path was not specified. Use script "./remove_duplicates path"' - -#print a list of -#Files in 'Folder' -# FileName, size, reason to delete -#Do you want to delete these files? (Y/N) [need valid grid certificate]: \ No newline at end of file diff --git a/scripts_old/first.png b/scripts_old/first.png deleted file mode 100644 index 6fc7ba4f836ed978f7e1e7fbe9d3aad34f28370c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18952 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 DO^S&8 diff --git a/scripts_old/firstrep.png b/scripts_old/firstrep.png deleted file mode 100644 index b40549650f1d56509cab5f39740c306305f577d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6985 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", ">=1jet", ">=2jets", ">=3jets" ] - - # 0-jet - data_0jet = fdata.Get("QCDest_CombRelIso_0jet"); - QCD_0jet = fbce2.Get("QCDest_CombRelIso_0jet"); - QCD_0jet.Add( fbce3.Get("QCDest_CombRelIso_0jet")); - QCD_0jet.Add( fenri1.Get("QCDest_CombRelIso_0jet")); - QCD_0jet.Add( fenri2.Get("QCDest_CombRelIso_0jet")); - QCD_0jet.Add( fenri3.Get("QCDest_CombRelIso_0jet")); - pj_0jet = fpj1.Get("QCDest_CombRelIso_0jet"); - pj_0jet.Add( fpj2.Get(Form("QCDest_CombRelIso_0jet", nj))); - pj_0jet.Add( fpj3.Get(Form("QCDest_CombRelIso_0jet", nj))); - wj_0jet = fwjets.Get("QCDest_CombRelIso_0jet"); - zj_0jet = fzjets.Get("QCDest_CombRelIso_0jet"); - tt_0jet = fttbar.Get("QCDest_CombRelIso_0jet"); - stop_0jet = fsTopTW.Get("QCDest_CombRelIso_0jet"); - stop_0jet.Add( fsToptC.Get("QCDest_CombRelIso_0jet")); - mc_0jet = QCD_0jet.Clone("sumMC_0jet"); - mc_0jet.Add(pj_0jet); - mc_0jet.Add(wj_0jet); - mc_0jet.Add(zj_0jet); - mc_0jet.Add(tt_0jet); - mc_0jet.Add(stop_0jet); - - # 1-jet - data_1jet = fdata.Get("QCDest_CombRelIso_1jet"); - QCD_1jet = fbce2.Get("QCDest_CombRelIso_1jet"); - QCD_1jet.Add( fbce3.Get("QCDest_CombRelIso_1jet")); - QCD_1jet.Add( fenri1.Get("QCDest_CombRelIso_1jet")); - QCD_1jet.Add( fenri2.Get("QCDest_CombRelIso_1jet")); - QCD_1jet.Add( fenri3.Get("QCDest_CombRelIso_1jet")); - pj_1jet = fpj1.Get("QCDest_CombRelIso_1jet"); - pj_1jet.Add( fpj2.Get(Form("QCDest_CombRelIso_1jet", nj))); - pj_1jet.Add( fpj3.Get(Form("QCDest_CombRelIso_1jet", nj))); - wj_1jet = fwjets.Get("QCDest_CombRelIso_1jet"); - zj_1jet = fzjets.Get("QCDest_CombRelIso_1jet"); - tt_1jet = fttbar.Get("QCDest_CombRelIso_1jet"); - stop_1jet = fsTopTW.Get("QCDest_CombRelIso_1jet"); - stop_1jet.Add( fsToptC.Get("QCDest_CombRelIso_1jet")); - mc_1jet = QCD_1jet.Clone("sumMC_1jet"); - mc_1jet.Add(pj_1jet); - mc_1jet.Add(wj_1jet); - mc_1jet.Add(zj_1jet); - mc_1jet.Add(tt_1jet); - mc_1jet.Add(stop_1jet); - - # 2-jet - data_2jets = fdata.Get("QCDest_CombRelIso_2jets"); - QCD_2jets = fbce2.Get("QCDest_CombRelIso_2jets"); - QCD_2jets.Add( fbce3.Get("QCDest_CombRelIso_2jets")); - QCD_2jets.Add( fenri1.Get("QCDest_CombRelIso_2jets")); - QCD_2jets.Add( fenri2.Get("QCDest_CombRelIso_2jets")); - QCD_2jets.Add( fenri3.Get("QCDest_CombRelIso_2jets")); - pj_2jets = fpj1.Get("QCDest_CombRelIso_2jets"); - pj_2jets.Add( fpj2.Get(Form("QCDest_CombRelIso_2jets", nj))); - pj_2jets.Add( fpj3.Get(Form("QCDest_CombRelIso_2jets", nj))); - wj_2jets = fwjets.Get("QCDest_CombRelIso_2jets"); - zj_2jets = fzjets.Get("QCDest_CombRelIso_2jets"); - tt_2jets = fttbar.Get("QCDest_CombRelIso_2jets"); - stop_2jets = fsTopTW.Get("QCDest_CombRelIso_2jets"); - stop_2jets.Add( fsToptC.Get("QCDest_CombRelIso_2jets")); - mc_2jets = QCD_2jets.Clone("sumMC_2jets"); - mc_2jets.Add(pj_2jets); - mc_2jets.Add(wj_2jets); - mc_2jets.Add(zj_2jets); - mc_2jets.Add(tt_2jets); - mc_2jets.Add(stop_2jets); - - # 3-jet - data_3jets = fdata.Get("QCDest_CombRelIso_3jets"); - QCD_3jets = fbce2.Get("QCDest_CombRelIso_3jets"); - QCD_3jets.Add( fbce3.Get("QCDest_CombRelIso_3jets")); - QCD_3jets.Add( fenri1.Get("QCDest_CombRelIso_3jets")); - QCD_3jets.Add( fenri2.Get("QCDest_CombRelIso_3jets")); - QCD_3jets.Add( fenri3.Get("QCDest_CombRelIso_3jets")); - pj_3jets = fpj1.Get("QCDest_CombRelIso_3jets"); - pj_3jets.Add( fpj2.Get(Form("QCDest_CombRelIso_3jets", nj))); - pj_3jets.Add( fpj3.Get(Form("QCDest_CombRelIso_3jets", nj))); - wj_3jets = fwjets.Get("QCDest_CombRelIso_3jets"); - zj_3jets = fzjets.Get("QCDest_CombRelIso_3jets"); - tt_3jets = fttbar.Get("QCDest_CombRelIso_3jets"); - stop_3jets = fsTopTW.Get("QCDest_CombRelIso_3jets"); - stop_3jets.Add( fsToptC.Get("QCDest_CombRelIso_3jets")); - mc_3jets = QCD_3jets.Clone("sumMC_3jets"); - mc_3jets.Add(pj_3jets); - mc_3jets.Add(wj_3jets); - mc_3jets.Add(zj_3jets); - mc_3jets.Add(tt_3jets); - mc_3jets.Add(stop_3jets); - - # >=4-jet - data_4orMoreJets = fdata.Get("QCDest_CombRelIso_4orMoreJets"); - QCD_4orMoreJets = fbce2.Get("QCDest_CombRelIso_4orMoreJets"); - QCD_4orMoreJets.Add( fbce3.Get("QCDest_CombRelIso_4orMoreJets")); - QCD_4orMoreJets.Add( fenri1.Get("QCDest_CombRelIso_4orMoreJets")); - QCD_4orMoreJets.Add( fenri2.Get("QCDest_CombRelIso_4orMoreJets")); - QCD_4orMoreJets.Add( fenri3.Get("QCDest_CombRelIso_4orMoreJets")); - pj_4orMoreJets = fpj1.Get("QCDest_CombRelIso_4orMoreJets"); - pj_4orMoreJets.Add( fpj2.Get(Form("QCDest_CombRelIso_4orMoreJets", nj))); - pj_4orMoreJets.Add( fpj3.Get(Form("QCDest_CombRelIso_4orMoreJets", nj))); - wj_4orMoreJets = fwjets.Get("QCDest_CombRelIso_4orMoreJets"); - zj_4orMoreJets = fzjets.Get("QCDest_CombRelIso_4orMoreJets"); - tt_4orMoreJets = fttbar.Get("QCDest_CombRelIso_4orMoreJets"); - stop_4orMoreJets = fsTopTW.Get("QCDest_CombRelIso_4orMoreJets"); - stop_4orMoreJets.Add( fsToptC.Get("QCDest_CombRelIso_4orMoreJets")); - mc_4orMoreJets = QCD_4orMoreJets.Clone("sumMC_4orMoreJets"); - mc_4orMoreJets.Add(pj_4orMoreJets); - mc_4orMoreJets.Add(wj_4orMoreJets); - mc_4orMoreJets.Add(zj_4orMoreJets); - mc_4orMoreJets.Add(tt_4orMoreJets); - mc_4orMoreJets.Add(stop_4orMoreJets); - - # First make clone of 4orMoreJets since this will be added for all cases - data = data_4orMoreJets.Clone("data"); - mc = mc_4orMoreJets.Clone("mc"); - QCD = QCD_4orMoreJets.Clone("QCD"); - pj = pj_4orMoreJets.Clone("pj"); - wj = wj_4orMoreJets.Clone("wj"); - zj = zj_4orMoreJets.Clone("zj"); - tt = tt_4orMoreJets.Clone("tt"); - stop = stop_4orMoreJets.Clone("stop"); - - #---------------------------------- - # >=0jet: 0jet+1jet+2jets+3jets+4orMoreJets = all - # >=1jet: 1jet+2jets+3jets+4orMoreJets - # >=2jets: 2jets+3jets+4orMoreJets - # >=3jets: 3jets+4orMoreJets - # >=4j: 4orMoreJets = 4orMoreJets - #---------------------------------- - - # Add 1jet - if (nj == "1mj"): - data.Add(data_1jet); - mc.Add(mc_1jet); - QCD.Add(QCD_1jet); - pj.Add(pj_1jet); - wj.Add(wj_1jet); - zj.Add(zj_1jet); - tt.Add(tt_1jet); - stop.Add(stop_1jet); - - # Add 2jets - if (nj == "1mj" or nj == "2mj"): - data.Add(data_2jets); - mc.Add(mc_2jets); - QCD.Add(QCD_2jets); - pj.Add(pj_2jets); - wj.Add(wj_2jets); - zj.Add(zj_2jets); - tt.Add(tt_2jets); - stop.Add(stop_2jets); - - # Add 3jets - data.Add(data_3jets); - mc.Add(mc_3jets); - QCD.Add(QCD_3jets); - pj.Add(pj_3jets); - wj.Add(wj_3jets); - zj.Add(zj_3jets); - tt.Add(tt_3jets); - stop.Add(stop_3jets); - - print "-----------------------------------" - print " DATA nEntries Integral" - print "-----------------------------------" - print ' '*10,"0jet",' '*10,data_0jet.GetEntries(),' '*10,data_0jet.Integral() - print ' '*10,"1jet",' '*10,data_1jet.GetEntries(),' '*10,data_1jet.Integral() - print ' '*10,"2jets",' '*10,data_2jets.GetEntries(),' '*10,data_2jets.Integral() - print ' '*10,"3jets",' '*10,data_3jets.GetEntries(),' '*10,data_3jets.Integral() - print ' '*10,">=4j",' '*10,data_4orMoreJets.GetEntries(),' '*10 ,data_4orMoreJets.Integral() - print "-----------------------------------" - print ' '*10,ijlabel[ijet],' '*10,data.GetEntries(),' '*10,data.Integral() - print "-----------------------------------" - - return 0; - - -def make_QCDnormToEstimate_plot(): - - c1 = TCanvas("c1", "RelIso fit", 600, 400);#,"",500,500); - - data.GetXaxis().SetRangeUser(0, 1.6 - 0.01); - if (nj == "2jets"): - data.GetYaxis().SetRangeUser(0, 16.); - - # draw data - data.Draw(); - if (nj == "all" and YMAX_all > 0): - data.GetYaxis().SetRangeUser(0, YMAX_all); - if (nj == "1mj" and YMAX_1mj > 0): - data.GetYaxis().SetRangeUser(0, YMAX_1mj); - if (nj == "2mj" and YMAX_2mj > 0): - data.GetYaxis().SetRangeUser(0, YMAX_2mj); - if (nj == "3mj" and YMAX_3mj > 0): - data.GetYaxis().SetRangeUser(0, YMAX_3mj); - if (nj == "4orMoreJets" and YMAX_4orMoreJets > 0): - data.GetYaxis().SetRangeUser(0, YMAX_4orMoreJets); - - # draw mc - mcStack.Draw("ahist same"); - data.Draw("ae same"); - data.Draw("axis same"); - - # Add "CMS Preliminary", integrated luminosity and sqrt(s), and legend - add_cms_label(intlumi, nj); - add_legend_nofit(); - - out = Form("ele_reliso_normToLumi_QCDnormToEst_%s", nj); - - print "out: ",out - c1.SaveAs(Form("%s.C", out)); - c1.SaveAs(Form("%s.eps", out)); - gROOT.ProcessLine(Form(".!ps2pdf -dEPSCrop %s.eps", out)); - gROOT.ProcessLine(Form(".!rm -f %s.eps", out)); - - c1.Close(); #crucial! - - -#------------------------------------------------------------------------------ -# -# main fit code -# -#------------------------------------------------------------------------------ - -def fit_njet(function = "pol1", Fit_From_user = 0.1): - - firstTime = True; - print "\nSwitched from chi2 fit to likelihood fit (better with low stats)\n" - - # Try: 0.1, 0.2 - Fit_From = Fit_From_user; - print "-----------------------" - print " FIT: ",function," range ",Fit_From,"--1.6" - print "-----------------------" - - lw = 2; #line width (function) - - - c1 = TCanvas("c1", "RelIso fit", 600, 400);#,"",500,500); - - - # gStyle.SetOptStat(1110);#off title - - - data.GetXaxis().SetRangeUser(0, 1.6 - 0.01); - if (nj == "2jets"): - # data_max = data.GetMaximum(); - data.GetYaxis().SetRangeUser(0, 18.); - # MET>25 - # data.GetYaxis().SetRangeUser(0,50.); - - - #data.SetTitleFont(42,"XY"); - # data.GetYaxis().SetTitleOffset(1.5); - - data.Draw(); - if (firstTime): - YMAX_all = 2 * data.GetMaximum(); - firstTime = False; - - #if(nj=="all" and YMAX_all>0) data.GetYaxis().SetRangeUser( 0,YMAX_all ); - data.GetYaxis().SetRangeUser(0, YMAX_all); - -# /* -# if(nj=="all" and YMAX_all>0) data.GetYaxis().SetRangeUser(0,YMAX_all); -# if(nj=="1mj" and YMAX_1mj >0) data.GetYaxis().SetRangeUser(0,YMAX_1mj); -# if(nj=="2mj" and YMAX_2mj >0) data.GetYaxis().SetRangeUser(0,YMAX_2mj); -# if(nj=="3mj" and YMAX_3mj >0) data.GetYaxis().SetRangeUser(0,YMAX_3mj); -# if(nj=="4orMoreJets" and YMAX_4orMoreJets >0) data.GetYaxis().SetRangeUser(0,YMAX_4orMoreJets); -# */ - - # draw mc - # mc.Draw("ahist same"); - mcStack.Draw("ahist same"); - data.Draw("ae same"); - data.Draw("axis same"); - - print "Fit Range: ",Fit_From,"-1.6" - - # TFitResultPtr myFitResult = data.Fit("pol1","0S","ah",Fit_From,1.6); # <----Fit Range - # const char *func = Form("%s", function); - - # Fit options used: - # L : likelihood method - # S : store fit results - # 0 : do not draw - myFitResult = data.Fit(function, "0SL", "ah", Fit_From, 1.6); # <----Fit Range - print "func ",function - # Fit line in red - # myf = data.GetFunction("pol1"); - myf = data.GetFunction(function); - myf.SetLineColor(kRed); - myf.SetLineWidth(lw); - - # Extrapolation in dashed blue - myf2 = myf.Clone(); #range 0-0.1 - myf2.SetLineColor(kBlue); - myf2.SetLineStyle(kDashed); - myf2.SetLineWidth(lw); - myf2.SetRange(0, Fit_From); - - myf.Draw("same"); - myf2.Draw("same"); - - # Get estimate from extrapolation - n_extrap = myf2.Integral(0, 0.1) / 0.1; #note divided by bin width=0.1 - - p0 = myf.GetParameter(0); - p1 = myf.GetParameter(1); - e0 = myf.GetParError(0); - e1 = myf.GetParError(1); - - chi2 = myFitResult.Chi2(); - ndf = myFitResult.Ndf(); - - print "------------" - print "Fit results" - print "------------" - print "n extrap = ",n_extrap - print "p0 = ",p0," +/- ",e0 - print "p1 = ",p1," +/- ",e1 - print "chi2/ndf = ",chi2," / ",ndf - - # Constructfunctions to see how estimate varies within fit parameter - # uncertainties, ie error of p0 and p1 - - # vary p0 (normalization) - # newF1_up =TF1("pol1","pol1",0,1.6); - newF1_up =TF1(function, function, 0, 1.6); - newF1_up.SetParameters(p0 + e0, p1); - newF1_up.SetLineColor(kGreen); - newF1_up.SetLineWidth(lw); - #newF1_up.SetLineStyle(kDashed); - #newF1_up.Draw("same"); - - # newF1_down =TF1("pol1","pol1",0,1.6); - newF1_down =TF1(function, function, 0, 1.6); - newF1_down.SetParameters(p0 - e0, p1); - newF1_down.SetLineColor(kGreen); - newF1_down.SetLineWidth(lw); - #newF1_down.SetLineStyle(kDashed); - #newF1_down.Draw("same"); - -# /* -# # vary p1 (gradient) -# newF2_up =TF1("pol1","pol1",0,1.6); -# newF2_up.SetParameters(p0, p1+e1); -# newF2_up.SetLineColor(kViolet); -# newF2_up.SetLineWidth(lw); -# #newF2_up.SetLineStyle(kDashed); -# #newF2_up.Draw("same"); -# -# newF2_down =TF1("pol1","pol1",0,1.6); -# newF2_down.SetParameters(p0, p1-e1); -# newF2_down.SetLineColor(kViolet); -# newF2_down.SetLineWidth(lw); -# #newF2_down.SetLineStyle(kDashed); -# #newF2_down.Draw("same"); -# */ - - # Get theestimates - est_1 = newF1_up.Integral(0, 0.1) / 0.1; - est_2 = newF1_down.Integral(0, 0.1) / 0.1; - #est_3 = newF2_up.Integral(0,0.1)/0.1; - #est_4 = newF2_down.Integral(0,0.1)/0.1; - print "n extrap (p0 + e0, p1 ) = ",est_1 - print "n extrap (p0 - e0, p1 ) = ",est_2 - #print "n extrap (p0 , p1 + e1) = ",est_3 - #print "n extrap (p0 , p1 - e1) = ",est_4 - - # take the maximum deviation as the uncertainty - est_unc = 0; - if (fabs(est_1 - n_extrap) > est_unc): - est_unc = fabs(est_1 - n_extrap); - if (fabs(est_2 - n_extrap) > est_unc): - est_unc = fabs(est_2 - n_extrap); - #if( fabs(est_3 - n_extrap) > est_unc ) est_unc = fabs(est_3 - n_extrap); - #if( fabs(est_4 - n_extrap) > est_unc ) est_unc = fabs(est_4 - n_extrap); - - print "Take the maximum deviation as the uncertainty of the QCD estimate." - print "--------------------------------------------" - print " RESULT: ",function," ",Fit_From,"-1.6" - print "--------------------------------------------" - # prout MC prediction for QCD + photon+jets - if (normMode == 1): - print "\n QCD predicted = ",QCD.Integral(0, 1)," (Lumi)" - TheEstimates,"\n QCD predicted = ",QCD.Integral(0, 1)," (Lumi)" - print "\n QCD estimate = ",n_extrap," +/- ",est_unc," (vary p0)" - TheEstimates," QCD estimate = ",n_extrap," +/- ",est_unc," (vary p0)" - - #---------------------- - # error propagation - #---------------------- - N = 0; - sigmaN = 0; - - if (function == "pol1"): - c = p0; - m = p1; - - eC = e0; - eM = e1; - - N = 0.05 * m + c; - sigmaN = TMath.Hypot(0.05 * eM, eC); - - elif (function == "expo"): - a = p0; - b = p1; - eA = e0; - eB = e1; - - x2 = 0.1; - - exp_ab = exp(a + 0.1 * b); - exp_a = exp(a); - - N = 10 / b * (exp_ab - exp_a); - - # del(N)/del(a/b) - dNda = 1 / (b * x2) * (exp_ab - exp_a); - dNdb = -1 / (b * b * x2) * (exp_ab - exp_a) + 1 / b * exp_ab; - - # Note: sigma(N) = sqrt( dNda^2*eA^2 + dBdb^2*eB^2 ) - sigmaN = TMath.Hypot(dNda * eA, dNdb * eB); - elif (function == "gaus"): - p2 = myf.GetParameter(2); - e2 = myf.GetParError(2); - # Not finished. Calculated estimate is wrong. - print "\n-. Error propagation for Gaussian not yet implemented!" - #calculate_gaus_unc(p0,p1,p2); - - print "\n QCD estimate = ",N; - print " +/- ",sigmaN," (error propagation)\n\n"; - print "--------------------------------------------" - - # Add "CMS Preliminary", integrated luminosity and sqrt(s), and legend - add_cms_label(intlumi, nj); - # add_fit_res( Fit_From, chi2, ndf ); - add_legend(function); - - # save as eps, then convert to pdf - print "Fit_From=",Fit_From - out; - if (function == "pol1"): - out = Form("ele_reliso_fit_%s_linear_from_0%.0f", nj, Fit_From * 10.0); - else: - out = Form("ele_reliso_fit_%s_%s_from_0%.0f", function, nj, Fit_From * 10.0); - - if (normMode == 1): - out += "_normToLumi"; - else: - out += "_normToData"; - - print "out: ",out - c1.SaveAs(Form("%s.C", out)); #save as C++ root macro - c1.SaveAs(Form("%s.eps", out)); - gROOT.ProcessLine(Form(".!ps2pdf -dEPSCrop %s.eps", out)); - gROOT.ProcessLine(Form(".!rm -f %s.eps", out)); - - c1.Close(); #crucial! - -def calculate_gaus_unc(a, b, c): - - # This formula gives wrong results. ?? - print "a: ",a - print "b: ",b - print "c: ",c - x1 = 0.1; - exp1 = exp(-0.5 * pow((x1 - b) / c, 2)); - exp2 = exp(-0.5 * pow(b / c, 2)); - est = -a * c * c / x1 * (exp1 / (x1 - b) + exp2 / b); - #print "est: "<< est - -#------------------------------------------------------------------------------------ - -def ScaleMCtoEstimate(nj_user = "all", estimate): - #aim: scale QCD in signal region to data estimate and compare MC to data - nj = nj_user; - setStyle(); - getHisto(); - - data.GetXaxis().SetRangeUser(0, 1.6); - - tempCan =TCanvas("tempCan", "tempCan", 600, 400); - data.Draw(""); - data.SetMaximum(2 * data.GetMaximum()); - - myStack =THStack("myStack", "myMC stack"); - mcQCD = QCD.Integral(0, 1); - print mcQCD - QCD.Scale(estimate / mcQCD);#setes QCD to estimate - #QCD.Add(pj); - - myStack.Add(QCD); - myStack.Add(pj); - myStack.Add(stop); - myStack.Add(zj); - myStack.Add(wj); - myStack.Add(tt); - myStack.Draw("ahist same"); -# /* -# QCD.Draw("hist same"); -# pj.Draw("hist same"); -# wj.Draw("hist same"); -# zj.Draw("hist same"); -# tt.Draw("hist same"); -# stop.Draw("hist same"); -# */ - - data.Draw("ae same"); - data.Draw("axis same"); - - #mcStack.Draw("ahist same"); - #data.Draw("ae same"); - tempCan.SaveAs(Form("MCQCDscaledtoData_%s.pdf", nj_user)); - tempCan.Close(); - - # cout< maxSize: - maxSize = size - totalSize += size - return {'min': minSize, 'max': maxSize, 'total': totalSize} - - -if __name__ == "__main__": - args = sys.argv - if not len(args) == 2: - print "Please specify a folder to analyze." - sys.exit() - - path = sys.argv[1] - files = getROOTFiles(path) - sizes = getFileSizes(files) - print 'Total size of files: %.3f MB' % (sizes['total']/10**6) - print 'Number of files: %d'% len(files) - print 'Minimal file size: %.3f MB'% (sizes['min']/10**6) - print 'Maximal file size: %.3f MB'% (sizes['max']/10**6) - print 'Average file size: %.3f MB'% (sizes['total']/10**6/len(files)) - print 'target max file size: 250MB', '=> scale factor =', (10**9)/4/sizes['max'] \ No newline at end of file diff --git a/scripts_old/getHLTSuggestion.py b/scripts_old/getHLTSuggestion.py deleted file mode 100644 index b4b70050..00000000 --- a/scripts_old/getHLTSuggestion.py +++ /dev/null @@ -1,115 +0,0 @@ -''' -Created on Mar 5, 2011 - -@author: lkreczko -''' -from __future__ import division -from ROOT import * - - -triggers = [ - #========== 2011 data ============== - #ElectronHad PD - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet40_BTagIP_v', #12 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30_v', #13 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralDiJet30_v', #14 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30_v', #15 - #renaming for 1E33 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30_BTagIP_v', #16 - 'HLT_Ele25_CaloIdVT_TrkIdT_DiCentralJet30_v',#17 - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30_v', #18 - 'HLT_Ele25_CaloIdVT_TrkIdT_QuadCentralJet30_v', #19 - #new iso triggers: - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30_BTagIP_v',#20 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30_v',#21 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_DiCentralJet30_v',#22 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30_v',#23 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralJet30_v',#24 - #Higgs trigger - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30_CentralJet25_PFMHT20_v',#25 - #EWK triggers - 'HLT_Ele25_WP80_PFMT40_v',#26 - 'HLT_Ele27_WP70_PFMT40_PFMHT20_v',#27 - #SingleElectron PD - 'HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v', #28 - 'HLT_Ele25_CaloIdL_CaloIsoVL_TrkIdVL_TrkIsoVL_v',#29 - 'HLT_Ele32_CaloIdVL_CaloIsoVL_TrkIdVL_TrkIsoVL_v',#30 - 'HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v',#31 - #5E33 change to PF jets @ HLT - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_DiCentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralPFJet30_v', - #control triggers - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_TrkIdT_DiCentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralPFJet30_v', - 'HLT_Ele25_CaloIdVT_TrkIdT_QuadCentralPFJet30_v', - #Muon Triggers - #SingleMuon - last unprescaled in 1E33 menu - 'HLT_Mu15_v', - 'HLT_Mu20_v', - 'HLT_IsoMu17_v', - 'HLT_IsoMu15_v', - 'HLT_IsoMu24_v', - 'HLT_IsoMu24_eta2p1_v', - 'HLT_IsoMu30_eta2p1_v', - #MuHad - 'HLT_IsoMu17_CentralJet40_BTagIP_v', #32 - 'HLT_Mu17_CentralJet30_v', #33 - 'HLT_Mu17_CentralJet40_BTagIP_v', #34 - 'HLT_Mu17_DiCentralJet30_v', #35 - 'HLT_Mu17_TriCentralJet30_v', #36 - #2E33 - 'HLT_IsoMu17_CentralJet30_BTagIP_v', - 'HLT_IsoMu17_CentralJet30_v', - 'HLT_IsoMu17_DiCentralJet30_v', - 'HLT_IsoMu17_QuadCentralJet30_v', - 'HLT_IsoMu17_TriCentralJet30_v', - #3E33 - added eta requirement @ L1 - 'HLT_IsoMu17_eta2p1_CentralJet30_BTagIP_v', - 'HLT_IsoMu17_eta2p1_CentralJet30_v', - 'HLT_IsoMu17_eta2p1_DiCentralJet30_v', - 'HLT_IsoMu17_eta2p1_QuadCentralJet30_v', - 'HLT_IsoMu17_eta2p1_TriCentralJet30_v', - #5E33 change to PF jets @ HLT - 'HLT_IsoMu17_eta2p1_CentralPFJet30_v', - 'HLT_IsoMu17_eta2p1_DiCentralPFJet30_v', - 'HLT_IsoMu17_eta2p1_TriCentralPFJet30_v', - 'HLT_IsoMu17_eta2p1_QuadCentralPFJet30_v', - #control triggers - 'HLT_Mu17_eta2p1_CentralPFJet30_v', - 'HLT_Mu17_eta2p1_DiCentralPFJet30_v', - 'HLT_Mu17_eta2p1_TriCentralPFJet30_v', - 'HLT_Mu17_eta2p1_QuadCentralPFJet30_v', - ] - -if __name__ == '__main__': - gROOT.SetBatch(1); - chain = TChain("rootTupleTree/tree"); - - chain.Add("/storage/TopQuarkGroup/data/MuHad/nTuple_v4c_Run2011A-05Aug2011-v1_GoldenJSON_muonSkim/*.root"); - chain.Add("/storage/TopQuarkGroup/data/MuHad/nTuple_v4c_Run2011A-May10ReReco-v1_GoldenJSON_muonSkim/*.root"); - chain.Add("/storage/TopQuarkGroup/data/MuHad/nTuple_v4d_Run2011A-PromptReco-v4_GoldenJSON_muonSkim/*.root"); - chain.Add("/storage/TopQuarkGroup/data/MuHad/nTuple_v4d_Run2011A-PromptReco-v6_GoldenJSON_muonSkim/*.root"); - chain.Add("/storage/TopQuarkGroup/data/MuHad/nTuple_v4d_Run2011B-PromptReco-v1_GoldenJSON_muonSkim/*.root"); - chain.SetBranchStatus("*", 0); - chain.SetBranchStatus("Event.Run", 1); - chain.SetBranchStatus("Trigger.HLTPrescales", 1); - muPlus3Jets = triggers.index('HLT_Mu17_TriCentralJet30_v') - muPlus3JetsUnprescaledRuns = [] - - mu3JetsAdd = muPlus3JetsUnprescaledRuns.append - - print 'Starting analysis' - for event in chain: - getVar = event.__getattr__ - prescales = getVar("Trigger.HLTPrescales") - run = getVar("Event.Run") - if not prescales[muPlus3Jets] == 1: - mu3JetsAdd(run) - print 'Finished analysis' - muPlus3JetsUnprescaledRuns.sort() - print muPlus3JetsUnprescaledRuns[0] - - \ No newline at end of file diff --git a/scripts_old/getSkimEfficiency.py b/scripts_old/getSkimEfficiency.py deleted file mode 100644 index 8481f19f..00000000 --- a/scripts_old/getSkimEfficiency.py +++ /dev/null @@ -1,140 +0,0 @@ -from __future__ import division - -from optparse import OptionParser -import sys -from fileInfo import * -from ROOT import * -from mergeROOTFilesWithCompression import getProcess - -pathToSkimHist = "EventFilter/EventCounter" -pathToEventTree = "rootTupleTree/tree" - -def getSkimmedEvents(files): - skimInfo = getSkimInfo(files) - skimHist = skimInfo[0] - - #TODO: do this part dynamic in case the skim changes. The skim has the names set for the bins! - numberOfTotalEvents = skimHist.GetBinContent(1) - numberOfEventsPassingHBHENoiseFilter = skimHist.GetBinContent(2) - numberOfEventsPassingScrapingVeto = skimHist.GetBinContent(3) - numberOfEventsHavingGoodPrimaryVertex = skimHist.GetBinContent(4) - numberOfEventsPassingElectronCuts = skimHist.GetBinContent(5) - numberOfEventsPassingJetCuts = skimHist.GetBinContent(6) - - numberOfEventsAfterAllFilters = skimInfo[1] - electronSkimEfficiency = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents - TotalSkimEfficiency = numberOfEventsAfterAllFilters / numberOfTotalEvents - - - dataSetDescription, totals, lastStep = {}, {}, {} - dataSetDescription['numberOfEvents'] = numberOfTotalEvents - dataSetDescription['numberOfEventsAfterSkim'] = numberOfEventsAfterAllFilters - dataSetDescription['totalSkimEfficiency'] = dataSetDescription['numberOfEventsAfterSkim'] / dataSetDescription['numberOfEvents'] - dataSetDescription['HBHENoiseFilter'] = int(numberOfEventsPassingHBHENoiseFilter) - dataSetDescription['ScrapingVeto'] = int(numberOfEventsPassingScrapingVeto) - dataSetDescription['GoodPrimaryVertex'] = int(numberOfEventsHavingGoodPrimaryVertex) - dataSetDescription['ElectronCuts'] = int(numberOfEventsPassingElectronCuts) - dataSetDescription['JetCuts'] = int(numberOfEventsPassingJetCuts) - - - totals['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents - totals['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfTotalEvents - totals['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfTotalEvents - totals['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfTotalEvents - totals['JetCuts'] = numberOfEventsPassingJetCuts / numberOfTotalEvents - - lastStep['HBHENoiseFilter'] = numberOfEventsPassingHBHENoiseFilter / numberOfTotalEvents - lastStep['ScrapingVeto'] = numberOfEventsPassingScrapingVeto / numberOfEventsPassingHBHENoiseFilter - lastStep['GoodPrimaryVertex'] = numberOfEventsHavingGoodPrimaryVertex / numberOfEventsPassingScrapingVeto - lastStep['ElectronCuts'] = numberOfEventsPassingElectronCuts / numberOfEventsHavingGoodPrimaryVertex - lastStep['JetCuts'] = numberOfEventsPassingJetCuts / numberOfEventsPassingElectronCuts - - return dataSetDescription, totals, lastStep - -# return {'total': numberOfTotalEvents, -# 'skimmed':numberOfEventsAfterAllFilters, -# 'electronSkimEfficiency':electronSkimEfficiency, -# 'afterSkimAndNoiseFilter':numberOfEventsAfterAllFilters, -# 'totalSkimEfficiency':TotalSkimEfficiency} - -def getSkimInfo(files): - skimHist = None - eventBranch = None - eventTree = None - n_skim = 0 - TfOpen = TFile.Open - gcd = gROOT.cd - - for file in files: - f = TfOpen(file) - gcd() - eventTree = f.Get(pathToEventTree) - if eventTree is None: - print 'Could not find tree', pathToEventTree, 'in file', file - else: - eventBranch = eventTree.GetBranch('Event.Number') - - if eventBranch is None: - print 'Could not find branch', pathToEventTree + '/Event.Number', 'in file', file - else: - n_skim += eventBranch.GetEntries() - - if skimHist is None: - skimHist = f.Get(pathToSkimHist) - if skimHist is None: - print 'Could not find histogram', pathToSkimHist, 'in file', file - continue - else: - hist = f.Get(pathToSkimHist) - if hist is None: - print 'Could not find histogram', pathToSkimHist, 'in file', file - continue - skimHist.Add(hist) - return (skimHist, n_skim) - - -def formatSkimEfficiencies(dataSetDescription, totals, lastStep): - print 'Local merged files:', dataSetDescription['path'] - print - print 'Total number of files:', int(dataSetDescription['numberOfFiles']) - print - print 'Process recognised:', dataSetDescription['process'] - print - print 'Total number of events:', int(dataSetDescription['numberOfEvents']) - print - print - print '| *Filter Name* | *# passing* | *efficiency(total) in %* | *efficiency(last step) in %* |' - print '| HBHENoiseFilter | ', dataSetDescription['HBHENoiseFilter'], '| ', totals['HBHENoiseFilter'], '| ', lastStep['HBHENoiseFilter'], '|' - print '| ScrapingVeto | ', dataSetDescription['ScrapingVeto'], '| ', totals['ScrapingVeto'], '| ', lastStep['ScrapingVeto'], '|' - print '| GoodPrimaryVertex | ', dataSetDescription['GoodPrimaryVertex'], '| ', totals['GoodPrimaryVertex'], '| ', lastStep['GoodPrimaryVertex'], '|' - print '| ElectronCuts | ', dataSetDescription['ElectronCuts'], '| ', totals['ElectronCuts'], '| ', lastStep['ElectronCuts'], '|' - print '| JetCuts | ', dataSetDescription['JetCuts'], '| ', totals['JetCuts'], '| ', lastStep['JetCuts'], '|' - print '| total | ', int(dataSetDescription['numberOfEventsAfterSkim']), '| ', - print dataSetDescription['totalSkimEfficiency'], '| --- |' - - - -if __name__ == "__main__": - args = sys.argv - if not len(args) == 2: - print "Please specify a folder to merge files in." - sys.exit() - - path = sys.argv[1] - files = getROOTFiles(path) - dataSetDescription, totals, lastStep = getSkimmedEvents(files) - dataSetDescription['numberOfFiles'] = len(files) - dataSetDescription['process'] = getProcess(files[0]) - dataSetDescription['path'] = path - formatSkimEfficiencies(dataSetDescription, totals, lastStep) - -# print '=' * 100 -# print '{0:70} : {1:15d}'.format('Total number of files', len(files)) -# print '{0:70} : {1:15s}'.format('Process recognised', getProcess(files[0])) -# print '{0:70} : {1:15d}'.format('Total number of events', int(events['total'])) -# print '{0:70} : {1:15d}'.format('Number of events after electron skim', int(events['skimmed'])) -# print '{0:70} : {1:15d}'.format('Number of events after electron skim and HBHE noise filter', events['afterSkimAndNoiseFilter']) -# print -# print '{0:70} : {1:15f}'.format('Electron skim efficiency', events['electronSkimEfficiency']) -# print '{0:70} : {1:15f}'.format('Total skim efficiency', events['totalSkimEfficiency']) -# print '=' * 100 diff --git a/scripts_old/getTriggerReport.py b/scripts_old/getTriggerReport.py deleted file mode 100644 index 8768edac..00000000 --- a/scripts_old/getTriggerReport.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import division -import sys -import glob - -def triggerInfo(trigger, logString): - logString = logString.replace('\n', '') - #remove empty entries - entries = [token for token in logString.split(' ') if not token == ''] - info = {} - info['name'] = entries[-1] - info['eventsTotal'] = entries[3] - info['eventsPassed'] = entries[4] - info['eventsFailed'] = entries[5] - info['efficiency'] = entries[4] / entries[3] - return info - -def readTriggerSummaryTable(filename): - lookForLine = 'TrigReport ---------- Path Summary ------------' - stopLookingLine = '\n' - - file = open(filename) - adding = False - triggerLog = [] - - for line in file.readlines(): - if lookForLine in line: - adding = True - - if adding == True and stopLookingLine == line: - break - - if adding: - triggerLog.append(line.replace('\n', '')) - file.close() - #remove the header of the table - triggerLog = triggerLog[2:] - - return triggerLog - -def trimmTriggerTable(triggerTable): - for index in range(len(triggerTable)): - row = triggerTable[index] - #remove first 3 columns: TrigReport Trig Bit# - row = row.replace('\n', '') - row = [token for token in row.split(' ') if not token == ''] - row = row[3:] - - columns = parseColumns(row) - - triggerTable[index] = columns - return triggerTable - -def parseColumns(row): - if len(row) < 5: - print "Unknown row, can't parse" - return {} - columns = {'total': int(row[0]), - 'passed': int(row[1]), - 'failed':int(row[2]), - 'errors':int(row[3]), - 'trigger':row[4]} - return columns - -def parseTriggerTable(triggerTable): - triggers = {} - for row in triggerTable: - triggerName = row['trigger'] - del row['trigger'] - triggers[triggerName] = row - return triggers - -def mergeParsedTriggerTables(triggerTable1, triggerTable2): - mergedTriggerTable = triggerTable1 - - for trigger, entries in triggerTable1.iteritems(): - if not triggerTable2.has_key(trigger): - print 'trying to merge two different triggertables!' - return - - for entry, value in entries.iteritems(): - mergedTriggerTable[trigger][entry] += triggerTable2[trigger][entry] - return mergedTriggerTable - - -def printParsedTriggerTable(triggerTable): - keys = triggerTable.keys() - keys.sort() - print 'Trigger', '\t\t', 'passed', '\t', 'failed'#, '\t\t', 'total' - for key in keys: - entries = triggerTable[key] - - - print key, '\t\t', entries['passed'], '\t', entries['failed']#, '\t\t', entries['total'] - -if __name__ == "__main__": - files = ['/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_1.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_2.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_3.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_4.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_5.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_6.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_7.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_8.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_9.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_10.log', - '/storage/workspaceTutorial/BristolAnalysisTools/scripts/test_run163374_11.log'] - - if len(sys.argv) > 1: - files = sys.argv[1:] - if len(files) == 1: - if '*' in files[0]: - files = glob.glob(files[0]) - triggerTables = [] - for file in files: - triggerTable = readTriggerSummaryTable(file) - triggerTable = trimmTriggerTable(triggerTable) - parsedT = parseTriggerTable(triggerTable) - triggerTables.append(parsedT) - - mergedTriggers = triggerTables[0] - - if len(triggerTables) > 1: - for triggerTable in triggerTables[1:]: - mergedTriggers = mergeParsedTriggerTables(mergedTriggers, triggerTable) - -# for trigger, entries in mergedTriggers.iteritems(): -# print trigger, '=', entries - - printParsedTriggerTable(mergedTriggers) - diff --git a/scripts_old/inputFiles.py b/scripts_old/inputFiles.py deleted file mode 100644 index 7e0a54e3..00000000 --- a/scripts_old/inputFiles.py +++ /dev/null @@ -1,64 +0,0 @@ -lumi = 10000 -folder = '/storage/TopQuarkGroup/results/histogramfiles/2012_v9a' -#folder = '/storage/results/histogramfiles/AN-12-241_V3/PU_down' -#folder = '/storage/results/histogramfiles/AN-12-241_V3/PU_up' -identifier = 'PFElectron_PFMuon_PF2PATJets_PFMET' -#identifier = 'PFElectron_PFMuon_PF2PATJets_PFMET_PU_64600mb' -#identifier = 'PFElectron_PFMuon_PF2PATJets_PFMET_PU_71400mb' - -files = { - 'SingleElectron':"%s/SingleElectron_%dpb_%s.root" % (folder, lumi, identifier), - 'SingleMu':"%s/SingleMu_%dpb_%s.root" % (folder, lumi, identifier), - 'TTJet' : "%s/TTJet_%dpb_%s.root" %(folder, lumi, identifier), - 'WJetsToLNu' : "%s/WJetsToLNu_%dpb_%s.root" %(folder, lumi, identifier), - 'W1Jet' : "%s/W1Jet_%dpb_%s.root" %(folder, lumi, identifier), - 'W2Jets' : "%s/W2Jets_%dpb_%s.root" %(folder, lumi, identifier), - 'W3Jets' : "%s/W3Jets_%dpb_%s.root" %(folder, lumi, identifier), - 'W4Jets' : "%s/W4Jets_%dpb_%s.root" %(folder, lumi, identifier), - 'DYJetsToLL' : "%s/DYJetsToLL_%dpb_%s.root" %(folder, lumi, identifier), - 'DY1JetsToLL' : "%s/DY1JetsToLL_%dpb_%s.root" %(folder, lumi, identifier), - 'DY2JetsToLL' : "%s/DY2JetsToLL_%dpb_%s.root" %(folder, lumi, identifier), - 'DY3JetsToLL' : "%s/DY3JetsToLL_%dpb_%s.root" %(folder, lumi, identifier), - 'DY4JetsToLL' : "%s/DY4JetsToLL_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_20_30_BCtoE' : "%s/QCD_Pt_20_30_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_30_80_BCtoE' : "%s/QCD_Pt_30_80_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_80_170_BCtoE' : "%s/QCD_Pt_80_170_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_170_250_BCtoE' : "%s/QCD_Pt_170_250_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_250_350_BCtoE' : "%s/QCD_Pt_250_350_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_350_BCtoE' : "%s/QCD_Pt_350_BCtoE_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_20_30_EMEnriched' : "%s/QCD_Pt_20_30_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_30_80_EMEnriched' : "%s/QCD_Pt_30_80_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_80_170_EMEnriched' : "%s/QCD_Pt_80_170_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_170_250_EMEnriched' : "%s/QCD_Pt_170_250_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_250_350_EMEnriched' : "%s/QCD_Pt_250_350_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt_350_EMEnriched' : "%s/QCD_Pt_350_EMEnriched_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-20_MuEnrichedPt-15' : "%s/QCD_Pt_20_MuEnrichedPt_15_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-15to20_MuEnrichedPt5' : "%s/QCD_Pt-15to20_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-20to30_MuEnrichedPt5' : "%s/QCD_Pt-20to30_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-30to50_MuEnrichedPt5' : "%s/QCD_Pt-30to50_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-50to80_MuEnrichedPt5' : "%s/QCD_Pt-50to80_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-80to120_MuEnrichedPt5' : "%s/QCD_Pt-80to120_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-120to170_MuEnrichedPt5' : "%s/QCD_Pt-120to170_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-170to300_MuEnrichedPt5' : "%s/QCD_Pt-170to300_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-470to600_MuEnrichedPt5' : "%s/QCD_Pt-470to600_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-300to470_MuEnrichedPt5' : "%s/QCD_Pt-300to470_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), -# 'QCD_Pt-600to800_MuEnrichedPt5' : "%s/QCD_Pt-600to800_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-800to1000_MuEnrichedPt5' : "%s/QCD_Pt-800to1000_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), - 'QCD_Pt-1000_MuEnrichedPt5' : "%s/QCD_Pt-1000_MuEnrichedPt5_%dpb_%s.root" %(folder, lumi, identifier), -# 'pj1' : "%s/GJets_HT-40To100_%dpb_%s.root" %(folder, lumi, identifier), -# 'pj2' : "%s/GJets_HT-100To200_%dpb_%s.root" %(folder, lumi, identifier), -# 'pj3' : "%s/GJets_HT-200_%dpb_%s.root" %(folder, lumi, identifier), - 'GJets_HT-200To400' : "%s/GJets_HT-200To400_%dpb_%s.root" %(folder, lumi, identifier), - 'GJets_HT-400ToInf' : "%s/GJets_HT-400ToInf_%dpb_%s.root" %(folder, lumi, identifier), -# 'ww' : "%s/WWtoAnything_%dpb_%s.root" %(folder, lumi, identifier), -# 'wz' : "%s/WZtoAnything_%dpb_%s.root" %(folder, lumi, identifier), -# 'zz' : "%s/ZZtoAnything_%dpb_%s.root" %(folder, lumi, identifier), - 'T_tW-channel' : "%s/T_tW-channel_%dpb_%s.root" %(folder, lumi, identifier), - 'T_t-channel' : "%s/T_t-channel_%dpb_%s.root" %(folder, lumi, identifier), - 'T_s-channel' : "%s/T_s-channel_%dpb_%s.root" %(folder, lumi, identifier), - 'Tbar_tW-channel' : "%s/Tbar_tW-channel_%dpb_%s.root" %(folder, lumi, identifier), - 'Tbar_t-channel' : "%s/Tbar_t-channel_%dpb_%s.root" %(folder, lumi, identifier), - 'Tbar_s-channel' : "%s/Tbar_s-channel_%dpb_%s.root" %(folder, lumi, identifier), -# 'TTbarZIncl' : "%s/TTbarZIncl_%dpb_%s.root" %(folder, lumi, identifier), -# 'TTbarInclWIncl' : "%s/TTbarInclWIncl_%dpb_%s.root" %(folder, lumi, identifier), - } diff --git a/scripts_old/log.terr b/scripts_old/log.terr deleted file mode 100644 index df1802ed..00000000 --- a/scripts_old/log.terr +++ /dev/null @@ -1,28 +0,0 @@ -Method ':_getFiberPtrId ()' in assembly 'C:\windows\assembly\GAC_32\Microsoft.Xna.Framework\4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.dll' contains native code that cannot be executed by Mono in modules loaded from byte arrays. The assembly was probably created using C++/CLI. - - -Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Terraria.Main ---> System.TypeInitializationException: An exception was thrown by the type initializer for ---> .ModuleLoadException: The C++ module failed to load. - ---> System.MissingMethodException: Method contains unsupported native code - at (wrapper managed-to-native) :_getFiberPtrId () - at ..LanguageSupport._Initialize (.LanguageSupport* ) [0x00000] in :0 - at ..LanguageSupport.Initialize (.LanguageSupport* ) [0x00000] in :0 - --- End of inner exception stack trace --- - at ..LanguageSupport.Initialize (.LanguageSupport* ) [0x00000] in :0 - at ..cctor () [0x00000] in :0 - --- End of inner exception stack trace --- - at Terraria.Main..cctor () [0x00000] in :0 - --- End of inner exception stack trace --- - at Terraria.Program.Main (System.String[] args) [0x00000] in :0 - -Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for Terraria.Main ---> System.TypeInitializationException: An exception was thrown by the type initializer for ---> .ModuleLoadException: The C++ module failed to load. - ---> System.MissingMethodException: Method contains unsupported native code - at (wrapper managed-to-native) :_getFiberPtrId () - at ..LanguageSupport._Initialize (.LanguageSupport* ) [0x00000] in :0 - at ..LanguageSupport.Initialize (.LanguageSupport* ) [0x00000] in :0 - --- End of inner exception stack trace --- - at ..LanguageSupport.Initialize (.LanguageSupport* ) [0x00000] in :0 - at ..cctor () [0x00000] in :0 - --- End of inner exception stack trace --- - at Terraria.Main..cctor () [0x00000] in :0 - --- End of inner exception stack trace --- - at Terraria.Program.Main (System.String[] args) [0x00000] in :0 diff --git a/scripts_old/makeCutFlow.py b/scripts_old/makeCutFlow.py deleted file mode 100644 index 0b70701c..00000000 --- a/scripts_old/makeCutFlow.py +++ /dev/null @@ -1,193 +0,0 @@ -from multiprocessing import Process - -from ROOT import * - -def getHLTCut(): - hltTriggers = [ - #2010 data RunA + RunB - 'HLT_Ele10_LW_L1R', #0 - 'HLT_Ele15_SW_L1R', #1 - 'HLT_Ele15_SW_CaloEleId_L1R', #2 - 'HLT_Ele17_SW_CaloEleId_L1R', #3 - 'HLT_Ele17_SW_EleId_L1R', #4 - 'HLT_Ele17_SW_LooseEleId_L1R', #5 - 'HLT_Ele17_SW_TightEleIdIsol_L1R_v1', #6 - 'HLT_Ele17_SW_TightEleId_L1R', #7 - 'HLT_Ele17_SW_TighterEleIdIsol_L1R_v1', #8 - 'HLT_Ele17_SW_TighterEleId_L1R_v1', #9 - 'HLT_Ele22_SW_TighterEleId_L1R', #10 - 'HLT_Ele27_SW_TightCaloEleIdTrack_L1R_v1', #11 - #========== 2011 data ============== - #ElectronHad PD - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet40_BTagIP', #12 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30', #13 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralDiJet30', #14 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30', #15 - #renaming for 1E33 - 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30_BTagIP', #16 - 'HLT_Ele25_CaloIdVT_TrkIdT_DiCentralJet30', #17 - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30', #18 - 'HLT_Ele25_CaloIdVT_TrkIdT_QuadCentralJet30', #19 - #new iso triggers: - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30_BTagIP',#20 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30', #21 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_DiCentralJet30', #22 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30', #23 - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralJet30', #24 - #Higgs trigger - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30_CentralJet25_PFMHT20', #25 - #EWK triggers - 'HLT_Ele25_WP80_PFMT40', #26 - 'HLT_Ele27_WP70_PFMT40_PFMHT20', #27 - - - #SingleElectron PD - 'HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT', #28 - 'HLT_Ele25_CaloIdL_CaloIsoVL_TrkIdVL_TrkIsoVL', #29 - 'HLT_Ele32_CaloIdVL_CaloIsoVL_TrkIdVL_TrkIsoVL', #30 - 'HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT', #31 - ] - - result = "Trigger.HLTResults[%d] > 0" % hltTriggers.index('HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30') - HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30 = "((Event.Run >= 160404 && Event.Run <= 163869) && " + result + ')' - - result = "Trigger.HLTResults[%d] > 0" % hltTriggers.index('HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30') - HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30 = "((Event.Run > 163869 && Event.Run <= 165633) && " + result + ')' - - result = "Trigger.HLTResults[%d] > 0" % hltTriggers.index('HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30') - HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30 = "((Event.Run > 165633) && " + result + ')' - hltCut = TCut(HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30 + '||' + HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30 + '||' + HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30) - return hltCut - -def getElectronCut(): - electronPt = TCut("selectedPatElectronsLoosePFlow.Pt > 30") - electronIsoCut = TCut("((selectedPatElectronsLoosePFlow.PFGammaIso + selectedPatElectronsLoosePFlow.PfChargedHadronIso + selectedPatElectronsLoosePFlow.PfNeutralHadronIso)/selectedPatElectronsLoosePFlow.Pt) > 0.1") - electronID = TCut("selectedPatElectronsLoosePFlow.PassID >= 32") - electronD0 = TCut("fabs(selectedPatElectronsLoosePFlow.dB) < 0.02") - electronZDistance = TCut("fabs(selectedPatElectronsLoosePFlow.VtxDistZ) < 1") - electronEta = TCut("fabs(selectedPatElectronsLoosePFlow.Eta) < 2.5") - electronNotInCrack = TCut("(( fabs(selectedPatElectronsLoosePFlow.SCEta) < 1.4442) || ( fabs(selectedPatElectronsLoosePFlow.SCEta) > 1.5660)") - goodPFIsoElectronCut = TCut(electronPt) - goodPFIsoElectronCut += electronIsoCut - goodPFIsoElectronCut += electronID - goodPFIsoElectronCut += electronD0 - goodPFIsoElectronCut += electronZDistance - goodPFIsoElectronCut += electronEta - - - onlyOnegoodPFIsoElectronCut = TCut("Sum$(%s) == 1" % goodPFIsoElectronCut.GetTitle()) - return onlyOnegoodPFIsoElectronCut - - -def getLooseMuonVeto(): - muonPt = TCut("selectedPatMuonsLoosePFlow.Pt > 10") - muonPt = TCut("selectedPatMuonsLoosePFlow.Pt > 10") - muonPt = TCut("selectedPatMuonsLoosePFlow.Pt > 10") -def enableVariables(chain): - setStatus = chain.SetBranchStatus - setStatus("*", 0); - setStatus("Event.Run", 1); - setStatus("Event.Number", 1); - setStatus("Event.LumiSection", 1) - setStatus("Trigger.HLTResults", 1) - setStatus("selectedPatElectronsLoosePFlow.Pt", 1) - setStatus("selectedPatElectronsLoosePFlow.PFGammaIso", 1) - setStatus("selectedPatElectronsLoosePFlow.PfChargedHadronIso", 1) - setStatus("selectedPatElectronsLoosePFlow.PfNeutralHadronIso", 1) - setStatus("selectedPatElectronsLoosePFlow.PassID", 1) - setStatus("selectedPatElectronsLoosePFlow.dB", 1) - setStatus("selectedPatElectronsLoosePFlow.VtxDistZ", 1) - setStatus("selectedPatElectronsLoosePFlow.Eta", 1) - setStatus("selectedPatElectronsLoosePFlow.SCEta", 1) - - - -def getCutResult(chain, cut): - nEvents = chain.Draw("Event.Run", cut) - return nEvents - -def getCutFlow(chain): - cutflow = [] - hltCut = getHLTCut() - electronCut = getElectronCut() - upToElectronCut = TCut(hltCut) - upToElectronCut+= electronCut - hltResult = getCutResult(chain, hltCut) - onlyOneGoodElectron = getCutResult(chain, hltCut + electronCut) - cutflow.append( ('HLT',hltResult)) - cutflow.append( ('== 1 isolated good electron',onlyOneGoodElectron)) - return cutflow - -def getCutFlowMulti(listOfChains): - jobs = [] - for chain in listOfChains: - p = Process(target = getCutFlow, args = (chain,)) - jobs.append(p) - p.start() - - result = 0 - for job in jobs: - job.join() -# pool = Pool(processes=2) # start n worker processes -# results = [pool.apply_async(getCutFlow, [chain]) for chain in lis] -# result = sum(pool.map(getCutFlow, listOfChains)) - return result - -if __name__ == '__main__': - chain = TChain("rootTupleTree/tree") -# chain1 = TChain("rootTupleTree/tree") -# chain2 = TChain("rootTupleTree/tree") -# chain3 = TChain("rootTupleTree/tree") -# chain4 = TChain("rootTupleTree/tree") -# chain5 = TChain("rootTupleTree/tree") -# chain6 = TChain("rootTupleTree/tree") - -# chain1.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-May10ReReco_GoldenJSON/db3f92ba514324d173b9a1664acdc31b/*.root");#203.815529928 pb-1 -# chain1.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_exclRereco/db3f92ba514324d173b9a1664acdc31b/*.root");#294.450534905 pb-1 -# -# chain2.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_24.06.11-01.07.11/4ee1203e97f9a00957561f563636708a/*.root");#94 pb-1 -# chain2.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_10.06.11-17.06.11/c43a0fd1e74060a8f9608df5f5bafba0/*.root");#216.429549292 pb-1 -# chain2.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_01.07.11-06.07.11/4ee1203e97f9a00957561f563636708a/*.root");#115 pb-1 -# chain4.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_17.06.11-24.06.11/4ee1203e97f9a00957561f563636708a/*.root");#166 pb-1 - - -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-May10ReReco_GoldenJSON/db3f92ba514324d173b9a1664acdc31b/*.root");#203.815529928 pb-1 -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_exclRereco/db3f92ba514324d173b9a1664acdc31b/*.root");#294.450534905 pb-1 -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_10.06.11-17.06.11/c43a0fd1e74060a8f9608df5f5bafba0/*.root");#216.429549292 pb-1 -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_17.06.11-24.06.11/4ee1203e97f9a00957561f563636708a/*.root");#166 pb-1 -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_24.06.11-01.07.11/4ee1203e97f9a00957561f563636708a/*.root");#94 pb-1 -# chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_01.07.11-06.07.11/4ee1203e97f9a00957561f563636708a/*.root");#115 pb-1 - - #test file - chain.Add("/storage/TopQuarkGroup/data/ElectronHad/nTuple_v2b_Run2011-PromptReco_GoldenJSON_01.07.11-06.07.11/4ee1203e97f9a00957561f563636708a/ElectronHad_nTuple_42x_data_1_1_lNO.root");#115 pb-1 - - gROOT.ProcessLine("gErrorIgnoreLevel = 3001;"); - gROOT.SetBatch(True) - - - - - - watch = TStopwatch() - watch.Start() - cutflow = getCutFlow(chain) - watch.Stop() - watch.Print() - - for name, value in cutflow: - print name, ' ', value - -# watch.Reset() -# watch.Start() -# print getCutFlowMulti([chain1, chain2]) -# watch.Stop() -# watch.Print() - -#print HLT_Ele25_CaloIdVT_TrkIdT_CentralTriJet30 -#print HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30 -#print HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30 -#print -#print hltCut.GetTitle() - - - \ No newline at end of file diff --git a/scripts_old/makeHLTPlots.py b/scripts_old/makeHLTPlots.py deleted file mode 100644 index c9058c5d..00000000 --- a/scripts_old/makeHLTPlots.py +++ /dev/null @@ -1,157 +0,0 @@ -from ROOT import * -import HistGetter -import HistPlotter -import inputFiles - -outputFormats = ['png', 'pdf'] -outputFolder = '/storage/results/plots/ElectronHad/' -saveAs = HistPlotter.saveAs - -triggers = [ -# 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30', -# 'HLT_Ele25_CaloIdVT_TrkIdT_DiCentralJet30', - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30', -# 'HLT_Ele25_CaloIdVT_TrkIdT_QuadCentralJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_DiCentralJet30', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralPFJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralJet30' - ] - -triggerVariables = ['jet_pt', - 'jet_eta', - 'jet_phi', - 'jet_eta_PtGT45', - 'jet_phi_PtGT45'] -triggerModifiers = ['visited', 'fired'] - -def makeHLTPlots(hists, rebin=1): - print 'Making HLT plots' - data = hists['data'] - ttbar = hists['ttbar'] - - plots = ['HLTStudy/' + trigger + '/' + variable for trigger in triggers for variable in triggerVariables] - efficiency = {} - mc_efficiency = {} - - for jetbin in HistPlotter.allJetBins: - for plot in plots: #make all plots - if 'Quad' in plot and not '4' in jetbin:#only >=4 jet bin for QuadJet trigger - continue - - elif 'Tri' in plot and ((not '3' in jetbin and not '4' in jetbin) or '3orMoreJets' in jetbin): - #only ==3, >=4 jet bins for TriJet trigger - continue - elif 'Di' in plot and not '2' in jetbin: - continue - - print plot + '_' + jetbin - - fired = data[plot + '_' + 'fired_' + jetbin] - visited = data[plot + '_' + 'visited_' + jetbin] - mc_fired = ttbar[plot + '_' + 'fired_' + jetbin] - mc_visited = ttbar[plot + '_' + 'visited_' + jetbin] - # calculate the sum of weights for correct error calculation - #http://root.cern.ch/root/html/TH1.html#TH1:Sumw2 - fired.Sumw2() - visited.Sumw2() - mc_fired.Sumw2() - mc_visited.Sumw2() - - xlimits, xTitle, yTitle, fitfunction, fitRange = getParams(plot, rebin) - - fired.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - visited.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - mc_fired.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - mc_visited.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - - fired.Rebin(rebin) - visited.Rebin(rebin) - mc_fired.Rebin(rebin) - mc_visited.Rebin(rebin) - - efficiency[plot + jetbin] = TEfficiency(fired, visited) - mc_efficiency[plot + jetbin] = TEfficiency(mc_fired, mc_visited) - eff = efficiency[plot + jetbin].Clone("Copy") - mceff = mc_efficiency[plot + jetbin].Clone("CopyMC") - setStyles(eff, mceff) - - saveName = plot + '_' + 'efficiency' - saveName = saveName.replace('Jet30/', 'Jet30_') - - legend = getLegend(eff, mceff) - caption = getCaption() - - c = TCanvas("cname" + plot + jetbin, 'cname', 900, 900) - eff.Draw('P0') - mceff.Draw('SAMEP0') - legend.Draw('same') - caption.Draw('same') - saveAs(c, saveName + '_' + jetbin, outputFolder = outputFolder) - -def getParams(plot, rebin): - xlimits = [10,200] - xTitle = 'jet p_{T} (GeV)' - yTitle = 'efficiency/(GeV)' - fitfunction = '' - fitRange = [-9999, 9999] - if 'jet_pt' in plot: - xlimits = [10,200] - xTitle = 'jet p_{T} (GeV)' - yTitle = 'efficiency/(%d GeV)' % (1*rebin) - fitfunction = "[0]*exp([1]*exp([2]*x))" - fitRange = [20,200] - elif 'jet_eta' in plot: - xlimits = [-3,3] - xTitle = 'jet #eta (GeV)' - yTitle = 'efficiency/(%0.1f)' % (0.1*rebin) - fitfunction = 'pol2' - fitRange = [-3,3] - elif 'jet_phi' in plot: - xlimits = [-4.,4.] - xTitle = 'jet #phi (GeV)' - yTitle = 'efficiency/(%0.1f)' % (0.1*rebin) - fitfunction = 'pol0' - fitRange = [-3.1,3.1] - return xlimits, xTitle, yTitle, fitfunction, fitRange - -def setStyles(dataPlot, mcPlot): - mcPlot.SetLineColor(2) - mcPlot.SetMarkerColor(2) - mcPlot.SetMarkerStyle(22) - -def getLegend(dataPlot, mcPlot): - leg = TLegend(0.7, 0.2, 0.8, 0.3) - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - leg.AddEntry(dataPlot, 'data', 'P') - leg.AddEntry(mcPlot, 'MC', 'P') - return leg - -def getCaption(): - tex = TLatex(0.18,1,"CMS Preliminary 2011, #sqrt{s} = 7 TeV, L = 4.69 fb^{-1}"); - tex.SetNDC(); - tex.SetTextAlign(13); - tex.SetTextFont(42); - tex.SetTextSize(0.04); - tex.SetLineWidth(2); - return tex - -if __name__ == '__main__': - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - - files = inputFiles.files - - hltFiles = {} - - hltFiles['data'] = inputFiles.files['data'] - hltFiles['ttbar'] = inputFiles.files['ttbar'] - - triggerPlots = ['HLTStudy/' + trigger + '/' + variable + '_' + modifier for trigger in triggers for variable in triggerVariables for modifier in triggerModifiers] - HistPlotter.setStyle() - hists = HistGetter.getHistsFromFiles(triggerPlots, hltFiles, jetBins=HistPlotter.allJetBins) - makeHLTPlots(hists) diff --git a/scripts_old/makePlots.py b/scripts_old/makePlots.py deleted file mode 100644 index 64eca1ef..00000000 --- a/scripts_old/makePlots.py +++ /dev/null @@ -1,810 +0,0 @@ -from __future__ import division -from ROOT import * -import HistGetter -import HistPlotter -from time import sleep -from math import isnan -from copy import deepcopy - -import inputFiles -import QCDEstimation -outputFormats = [ - 'png', - 'pdf' - ] -outputFolder = '/storage/results/plots/ElectronHad/' -saveAs = HistPlotter.saveAs -triggers = [ -# 'HLT_Ele25_CaloIdVT_TrkIdT_CentralJet30', -# 'HLT_Ele25_CaloIdVT_TrkIdT_DiCentralJet30', - 'HLT_Ele25_CaloIdVT_TrkIdT_TriCentralJet30', -# 'HLT_Ele25_CaloIdVT_TrkIdT_QuadCentralJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_CentralJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_DiCentralJet30', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralJet30', - 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_TriCentralPFJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralPFJet30', -# 'HLT_Ele25_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_QuadCentralJet30' - ] - -triggerVariables = ['jet_pt', - 'jet_eta', - 'jet_phi', - 'jet_eta_PtGT30', - 'jet_phi_PtGT30', - 'jet_eta_PtGT35', - 'jet_phi_PtGT35', - 'jet_eta_PtGT40', - 'jet_phi_PtGT40', - 'jet_eta_PtGT45', - 'jet_phi_PtGT45'] -triggerModifiers = ['visited', 'fired'] - -def plotControlRegion(hists): - conversions = 'TTbarPlusMetAnalysis/EPlusJets/QCDConversions/Electron/electron_AbsEta_0btag' - leg = TLegend(0.2, 0.6, 0.5, 0.92); - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - for sample in hists.keys(): - hists[sample][conversions].Sumw2() - - data = hists['ElectronHad'][conversions] - QCD = hists['bce1'][conversions] + hists['bce2'][conversions] + hists['bce3'][conversions] - QCD += hists['enri1'][conversions] + hists['enri2'][conversions] + hists['enri3'][conversions] - QCD += hists['pj1'][conversions] + hists['pj2'][conversions] + hists['pj3'][conversions] - otherMC = hists['W1Jet'][conversions] + hists['W2Jets'][conversions] + hists['W3Jets'][conversions] + hists['W4Jets'][conversions] - otherMC += hists['zjets'][conversions] + hists['ww'][conversions] + hists['wz'][conversions] + hists['zz'][conversions] - otherMC += hists['T_TuneZ2_tW-channel'][conversions] + hists['T_TuneZ2_t-channel'][conversions] + hists['T_TuneZ2_s-channel'][conversions] - otherMC += hists['Tbar_TuneZ2_tW-channel'][conversions] + hists['Tbar_TuneZ2_t-channel'][conversions] + hists['Tbar_TuneZ2_s-channel'][conversions] - otherMC += hists['ttbar'][conversions] - data.SetMarkerStyle(8); - QCD.SetFillColor(kYellow) - otherMC.SetFillColor(kRed + 1) - - qcdErrors = QCD.Clone() - - qcdErrors.SetFillColor(kGray + 3) - qcdErrors.SetMarkerStyle(0) - qcdErrors.SetFillStyle(3001); - mytext = TPaveText(0.5, 0.97, 1, 1.01, "NDC") - channelLabel = TPaveText(0.2, 0.97, 0.5, 1.01, "NDC") - channelLabel.AddText("e, #geq 4 jets, 0 b-tag") - mytext.AddText("CMS Preliminary, L = %.1f fb^{-1} at #sqrt{s} = 7 TeV" % (5.1)); - - mytext.SetFillStyle(0) - mytext.SetBorderSize(0) - mytext.SetTextFont(42) - mytext.SetTextAlign(13) - - channelLabel.SetFillStyle(0) - channelLabel.SetBorderSize(0) - channelLabel.SetTextFont(42) - channelLabel.SetTextAlign(13) - - leg.AddEntry(data, 'data', 'f') - leg.AddEntry(QCD, 'QCD MC', 'f') - leg.AddEntry(otherMC, 'other MC', 'f') - leg.AddEntry(qcdErrors, 'QCD uncertainty (stat.)', 'f') - mcStack = THStack("MC", "MC") - mcStack.Add(QCD) - mcStack.Add(otherMC) - - data.SetMaximum(mcStack.GetMaximum()*1.4) - c = TCanvas("test", 'test', 1600, 1200) - - data.Draw('error') - mcStack.Draw('hist same') - gStyle.SetErrorX(0.5); - qcdErrors.Draw('E2 same') - data.Draw('error same') - leg.Draw() - mytext.Draw() - channelLabel.Draw() - saveAs(c, 'QCD_ConversionControlRegion_0btag', outputFormats) - -def compareQCDControlRegionsInData(hists, bJetBins): - dataHists = hists['ElectronHad'] -# saveAs = HistPlotter.saveAs - - leg = TLegend(0.696, 0.6, 0.94, 0.92); - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - - AddLegendEntry = leg.AddEntry - alreadyAdded = False - var = 'electron_eta' - bin = '0btag' - normConv = dataHists['TTbarPlusMetAnalysis/EPlusJets/QCDConversions/Electron/electron_AbsEta_' + bin] - normAnti = dataHists['TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/Electron/electron_AbsEta_' + bin] - -# normConv.SetYTitle("normalised to unit area/(5 GeV)"); - normConv.SetYTitle("normalised to unit area/(0.2 GeV)"); -# normConv.SetYTitle("normalised to unit area/0.05"); - - normConv.Sumw2() -# normContr.Sumw2() - normAnti.Sumw2() - - - normConv = HistPlotter.normalise(normConv) -# normContr = HistPlotter.normalise(normContr) - normAnti = HistPlotter.normalise(normAnti) - - diff = normConv.Clone() - diff.Divide(normAnti) -# line = TLine(0, 1, 500, 1) - line = TLine(-3, 1, 3, 1) - line.SetLineColor(1) - line.SetLineWidth(4) - - - c = TCanvas("cname", 'cname', 1200, 900) - diff.SetYTitle("conversions/non-iso electrons /0.2GeV"); -# diff.SetYTitle("iso/non-iso trigger /0.05"); - diff.GetXaxis().SetRangeUser(-3, 3); -# diff.GetXaxis().SetRangeUser(0, 2); - diff.Draw('error') - line.Draw('same') - saveAs(c, 'shapeRatio_conversions_NonIsolatedElectrons_electron_eta' + '_' + bin , outputFormats) -# saveAs(c, 'shapeRatio_'+ var +'_NonIsolatedTriggers' + '_' + bin , outputFormats) - del c - - c = TCanvas("cname3", 'cname3', 1200, 900) - - normConv.SetFillColor(kYellow) - normConv.SetFillStyle(1001) - -# normContr.SetFillColor(kAzure - 2) -# normContr.SetFillStyle(3005) - - normAnti.SetFillColor(kRed + 1) - normAnti.SetFillStyle(3004) - normConv.GetYaxis().SetRangeUser(0, 0.2); - normConv.GetXaxis().SetRangeUser(-3, 3); -# normConv.GetXaxis().SetRangeUser(0, 2); - normConv.Draw('hist') -# normContr.Draw('hist same') - normAnti.Draw('hist same') - - if not alreadyAdded: - AddLegendEntry(normConv, "conversions", "f"); -# AddLegendEntry(normConv, "iso e+jets", "f"); -# AddLegendEntry(normContr, "fake electrons", "f"); -# AddLegendEntry(normAnti, "non isolated electrons", "f"); - AddLegendEntry(normAnti, "non iso e+jets", "f"); - alreadyAdded = True - - leg.Draw() - saveAs(c, 'shape_comparison_'+ var + '_NonIso_' + bin , outputFormats) - del c - - del leg - -def plotControlRegionComparision(normConv, normContr, normAnti): - pass - -def plotQCDEstimationFits(allHists, bJetBins): -# saveAs = HistPlotter.saveAs - - leg = TLegend(0.696, 0.35, 0.94, 0.92); - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - - AddLegendEntry = leg.AddEntry - alreadyAdded = False - for bin in bJetBins: - histname = 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_' + bin - data = allHists['data'][histname] - allMC = allHists['allMC'][histname] - -def plotTopReconstruction(files): - pass - -def plotMttbar(): - pass - -def getControlRegionsFor(hist): - pass - -def plotHLTStudy(hists, suffix = '', rebin = 1): - data = hists['data'] - ttbar = hists['ttbar'] - - #create a dictionary for each sample - # dic[trigger] = {'fitfunction':'', 'parameters':[(param, error), ...], 'sfFunction':'', sfParams} - - plots = ['HLTStudy/' + trigger + '/' + variable for trigger in triggers for variable in triggerVariables] -# saveAs = HistPlotter.saveAs - efficiency = {} - mc_efficiency = {} - infos = {} - mcInfos = {} - gStyle.SetOptFit( 112 ); - for jetbin in HistPlotter.allJetBins: - for plot in plots: - if 'Quad' in plot: - if not '4' in jetbin: - continue - - elif 'Tri' in plot: - if not '3jets' in jetbin and not '4' in jetbin: - continue - elif 'Di' in plot: - if not '2jet' in jetbin: - continue - else: - if not '1jet' in jetbin: - continue - print plot + '_' + jetbin - fired = data[plot + '_' + 'fired_' + jetbin] - visited = data[plot + '_' + 'visited_' + jetbin] - mc_fired = ttbar[plot + '_' + 'fired_' + jetbin] - mc_visited = ttbar[plot + '_' + 'visited_' + jetbin] - - fired.Sumw2() - visited.Sumw2() - mc_fired.Sumw2() - mc_visited.Sumw2() - - if not infos.has_key(plot + '_' + jetbin): - infos[plot + '_' + jetbin] = {} - mcInfos[plot + '_' + jetbin] = {} -# print fired.GetNbinsX() -# print visited.GetNbinsX() -# print mc_fired.GetNbinsX() -# print mc_visited.GetNbinsX() -# -# print fired.GetNbinsX() -# print visited.GetNbinsX() -# print mc_fired.GetNbinsX() -# print mc_visited.GetNbinsX() - - xlimits = [10,200] - xTitle = 'jet p_{T} (GeV)' - yTitle = 'efficiency/(GeV)' - fitfunction = '' - decimals = 2 - variable = 'p_{T}' - if 'jet_pt' in plot: - xlimits = [10,200] - xTitle = 'jet p_{T} (GeV)' - yTitle = 'efficiency/(%d GeV)' % (1*rebin) - fitfunction = "[0]*exp([1]*exp([2]*x))" - scaleFactorFitFunction = "[0]*exp([1]*exp([2]*x))" -# scaleFactorFitFunction = "[0]*exp([1]*exp([2]*x) - [3]*exp([4]*x))" - fitRange = [20,200] - variable = 'p_{T}' - elif 'jet_eta' in plot: - xlimits = [-3,3] - xTitle = 'jet #eta (GeV)' - yTitle = 'efficiency/(%0.1f)' % (0.1*rebin) - fitfunction = '[0]*x*x + [1]*x + [2]' - scaleFactorFitFunction = fitfunction - fitRange = [-3,3] - variable = '#eta' - elif 'jet_phi' in plot: - xlimits = [-4.,4.] - xTitle = 'jet #phi (GeV)' - yTitle = 'efficiency/(%0.1f)' % (0.1*rebin) - fitfunction = '[0]' - decimals = 4 - scaleFactorFitFunction = fitfunction - fitRange = [-3.1,3.1] - variable = '#phi' - - fired.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - visited.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - mc_fired.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - mc_visited.GetXaxis().SetRangeUser(xlimits[0], xlimits[1]) - - fired.Rebin(rebin) - visited.Rebin(rebin) - mc_fired.Rebin(rebin) - mc_visited.Rebin(rebin) - -# print fired.GetNbinsX() -# print visited.GetNbinsX() -# print mc_fired.GetNbinsX() -# print mc_visited.GetNbinsX() - efficiency[plot + jetbin] = TEfficiency(fired, visited) - mc_efficiency[plot + jetbin] = TEfficiency(mc_fired, mc_visited) - eff = efficiency[plot + jetbin].Clone("Copy") - mceff = mc_efficiency[plot + jetbin].Clone("CopyMC") -# efficiency.Rebin(rebin) -# mc_efficiency.Rebin(rebin) - f1= TF1("f1",fitfunction,fitRange[0],fitRange[1]); - f2= TF1("f2",fitfunction,fitRange[0],fitRange[1]); - f3= TF1("f3",scaleFactorFitFunction,fitRange[0],fitRange[1]); - - if 'jet_pt' in plot: - f1.SetParLimits(0,0.8,1.0); - f1.SetParLimits(1,-100,-1); - f1.SetParLimits(2,-1,-0.01); - - f2.SetParLimits(0,0.8,1.0); - f2.SetParLimits(1,-100,-1); - f2.SetParLimits(2,-1,-0.01); - - f3.SetParLimits(2,-1,-0.01); - - if "_CentralJet" in plot: - f1.SetParLimits(0,0,1.0); - f2.SetParLimits(0,0,1.0); - - if 'jet_eta' in plot: - f1.SetParLimits(0,-0.2,0.0); - f1.SetParLimits(1,-1,-1); - f1.SetParLimits(2, 0.2,1.1); - - f2.SetParLimits(0,-0.2,0.0); - f2.SetParLimits(1,-1,-1); - f2.SetParLimits(2, 0.2,1.1); - - f1.SetLineWidth(2); - f1.SetLineColor(1); - f2.SetLineWidth(2); - f2.SetLineColor(2); - f3.SetLineWidth(2); - f3.SetLineColor(2); - - efficiency[plot + jetbin].Fit(f1); - mc_efficiency[plot + jetbin].Fit(f2); - axis = mceff.GetTotalHistogram().GetXaxis() - - scaleFactor = TH1F(fired.Clone("MCfired")) - scaleFactor.Multiply(mc_visited) - scaleFactor.Divide(visited) - scaleFactor.Divide(mc_fired) - - mceff.SetLineColor(2) - mceff.SetMarkerColor(2) - mceff.SetMarkerStyle(22) -# mceff.SetMarkerSize(2) -# eff.SetMarkerSize(2) - mceff.SetLineWidth(3) - eff.SetLineWidth(3) - - saveName = plot + '_' + 'efficiency' - if not suffix == '': - saveName += '_' + suffix - saveName = saveName.replace('Jet30/', 'Jet30_') - -# c = TCanvas("cname" + plot + jetbin, 'cname', 900, 900) - c = TCanvas("cname" + plot + jetbin, 'cname', 1080, 1080) - -# pad1 = TPad("pad1", "The pad with the function",0.03,0.2,0.98,0.98); -# pad2 = TPad("pad2","The pad with the histogram",0.03,0.02,0.98,0.19); - pad1 = TPad("pad1", "The pad with the function",0.0,0.2,1.0,1.0); - pad2 = TPad("pad2","The pad with the histogram",0.0,0.0,1.0,0.2); - pad1.Draw() - pad2.Draw() - - pad1.cd() - - - hFrame = (pad1.cd()).DrawFrame(xlimits[0],-.1,xlimits[1],1.1) - hFrame.GetXaxis().SetTitle(xTitle) - hFrame.GetYaxis().SetTitle(yTitle) - hFrame.Draw() - upper = TLine(xlimits[0],1.,xlimits[1],1.) - lower = TLine(xlimits[0],0.,xlimits[1],0.) - cut = TLine(30., 0., 30., 1.) - cut.SetLineColor(1) - upper.SetLineColor(4) - lower.SetLineColor(4) - upper.DrawLine(xlimits[0],1.,xlimits[1],1.) ; - lower.DrawLine(xlimits[0],0.,xlimits[1],0.) ; - cut.DrawLine(30., 0., 30., 1.) - - - eff.Draw('SAMEP0') - mceff.Draw('SAMEP0') -# leg.Draw('same') - f1.DrawCopy('same') - f2.DrawCopy('same') -# - tex = TLatex(0.18,1,"CMS Preliminary 2011, #sqrt{s} = 7 TeV, L = 4.69 fb^{-1}"); - tex.SetNDC(); - tex.SetTextAlign(13); - tex.SetTextFont(42); - tex.SetTextSize(0.04); - tex.SetLineWidth(2); - tex.Draw(); - - #f1.GetFunction? If yes, color-code the functions - strFit = fitfunction - strFit = strFit.replace('x*x', 'x^{2}') - strFit = strFit.replace('[0]', str(round(f1.GetParameter(0), decimals))) - strFit = strFit.replace('[1]', str(round(f1.GetParameter(1), decimals))) - strFit = strFit.replace('[2]', str(round(f1.GetParameter(2), decimals))) - strFit = strFit.replace('+ -', '-') - strFit = strFit.replace('- -', '+') - strFit = '#epsilon(' + variable + ') = ' + strFit - fitData = strFit - - strFit = fitfunction - strFit = strFit.replace('x*x', 'x^{2}') - strFit = strFit.replace('[0]', str(round(f2.GetParameter(0), decimals))) - strFit = strFit.replace('[1]', str(round(f2.GetParameter(1), decimals))) - strFit = strFit.replace('[2]', str(round(f2.GetParameter(2), decimals))) - strFit = strFit.replace('+ -', '-') - strFit = strFit.replace('- -', '+') - strFit = '#epsilon(' + variable + ') = ' + strFit - fitMC = strFit - - tex2 = TLatex(0.18,0.28,fitData); - tex2.SetNDC(); - tex2.SetTextAlign(13); - tex2.SetTextFont(42); - tex2.SetTextSize(0.06); - tex2.SetLineWidth(2); - tex2.Draw(); - - tex3 = TLatex(0.18,0.2,fitMC); - tex3.SetNDC(); - tex3.SetTextAlign(13); - tex3.SetTextFont(42); - tex3.SetTextSize(0.06); - tex3.SetLineWidth(2); - tex3.SetTextColor(2) - tex3.Draw(); - - leg = TLegend(0.4, 0.4, 0.6, 0.6) - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); -# leg.SetTextSize(0.08) - leg.SetFillStyle(0); - leg.AddEntry(eff, 'data', 'P') - leg.AddEntry(mceff, 'MC', 'P') - leg.Draw('same') - - pad2.cd() - hFrame = (pad2.cd()).DrawFrame(xlimits[0],0,xlimits[1],2) - hFrame.GetXaxis().SetTitle(xTitle) - yTitle = yTitle.replace('efficiency', 'scale factor') - hFrame.GetYaxis().SetTitle(yTitle) - hFrame.Draw() - upper = TLine(xlimits[0],1.,xlimits[1],1.) -# lower = TLine(xlimits[0],0.,xlimits[1],0.) - cut = TLine(30., 0., 30., 2.) - cut.SetLineColor(1) - upper.SetLineColor(1) - lower.SetLineColor(4) - upper.DrawLine(xlimits[0],1.,xlimits[1],1.) ; -# lower.DrawLine(xlimits[0],0.,xlimits[1],0.) ; - cut.DrawLine(30., 0., 30., 2.) - - #replace this fit with results from the data and MC fit -# sfitfunction = f1/f2 - #scaleFactor.Fit(f3) - scaleFactor.Fit(f3) -# print 'here', f3.GetParameter(0), f3.GetParameter(1), f3.GetParameter(2) - scaleFactor.GetYaxis().SetRangeUser(0., 3.); - scaleFactor.SetLineColor(4) - scaleFactor.SetMarkerColor(4) - scaleFactor.Draw('SAMEP0') - strFit = scaleFactorFitFunction - strFit = strFit.replace('x*x', 'x^{2}') - strFit = strFit.replace('[0]', str(round(f3.GetParameter(0), decimals))) - strFit = strFit.replace('[1]', str(round(f3.GetParameter(1), decimals))) - strFit = strFit.replace('[2]', str(round(f3.GetParameter(2), decimals))) - strFit = strFit.replace('[3]', str(round(f3.GetParameter(3), decimals))) - strFit = strFit.replace('[4]', str(round(f3.GetParameter(4), decimals))) - strFit = strFit.replace('+ -', '-') - strFit = strFit.replace('- -', '+') - - tex4 = TLatex(0.2,0.8,strFit); - tex4.SetNDC(); - tex4.SetTextAlign(13); - tex4.SetTextFont(42); - tex4.SetTextSize(0.3); - tex4.SetLineWidth(2); - tex4.SetTextColor(2) - tex4.Draw(); - f3.DrawCopy("same") - - #infos - infos[plot + '_' + jetbin]['fitFunction'] = fitfunction - infos[plot + '_' + jetbin]['sfFitFunction'] = scaleFactorFitFunction - mcInfos[plot + '_' + jetbin]['fitFunction'] = fitfunction - infos[plot + '_' + jetbin]['chi2'] = f1.GetChisquare() - infos[plot + '_' + jetbin]['ndof'] = f1.GetNumberFreeParameters() - infos[plot + '_' + jetbin]['sfchi2'] = f1.GetChisquare() - infos[plot + '_' + jetbin]['sfndof'] = f1.GetNumberFreeParameters() - infos[plot + '_' + jetbin]['params'] = [] - infos[plot + '_' + jetbin]['sfParams'] = [] - mcInfos[plot + '_' + jetbin]['params'] = [] - mcInfos[plot + '_' + jetbin]['chi2'] = f1.GetChisquare() - mcInfos[plot + '_' + jetbin]['ndof'] = f1.GetNumberFreeParameters() - - for i in range(f1.GetNpar()): - par, err = f1.GetParameter(i), f1.GetParError(i) - infos[plot + '_' + jetbin]['params'].append((par, err)) - - for i in range(f2.GetNpar()): - par, err = f2.GetParameter(i), f2.GetParError(i) - mcInfos[plot + '_' + jetbin]['params'].append((par, err)) - - for i in range(f3.GetNpar()): - par, err = f3.GetParameter(i), f3.GetParError(i) - infos[plot + '_' + jetbin]['sfParams'].append((par, err)) - -# eff.DrawClone('P0') -# f1.Draw("SAME"); - - saveAs(c, saveName + '_' + jetbin + '_Fall11', outputFolder = outputFolder,outputFormats= outputFormats) - del hFrame - del c - del f1 - del f2 - del f3 - del efficiency - del mc_efficiency - return infos, mcInfos - - -def makeQCDErrorPlot(files, hists): - errors = QCDEstimation.getShapeErrorHistogram('topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets_0orMoreBtag', files) -# systematicEstimationError = QCDEstimation.doClosureTestFor(files, 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_1btag') -# qcdEstimate = QCDEstimation.estimateQCDFor('', files['data'], 'QCDStudy/PFIsolation_WithMETCutAndAsymJetCuts_1btag') -# print 'QCD estimation:', qcdEstimate -# print 'Systematic uncertainty for this b-jet bin:', systematicEstimationError - gStyle.SetErrorX(0.5); - - if errors: - errors.GetXaxis().SetRangeUser(250, 3000) - - c = TCanvas("cname3", 'cname3', 1200, 900) - -# errors.DrawCopy("hist"); - errors.SetFillColor(kBlack) - errors.SetMarkerStyle(0) -# errors.SetFillStyle(1001) - errors.SetFillStyle(3013); - errors.DrawCopy('E2') - saveAs(c, 'shape_errors_0orMoreBtag' , outputFormats) - - controlHist = hists['data']['topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets_0orMoreBtag'] - nTotalControl = controlHist.Integral() - shapeError = 0 - errorlist = [] - binlist = [] - for bin in range(1, errors.GetNbinsX()): - err = fabs(errors.GetBinContent(bin) + errors.GetBinError(bin)) - errorlist.append(err) - binValue = errors.GetBinCenter(bin) - errors.GetBinWidth(bin)/2 - binlist.append(binValue) - controlEntries = controlHist.GetBinContent(bin) - - shapeError += (err*controlEntries/nTotalControl)**2 -# if binValue >= 200 and binValue <= 2000: -# print 'relative error:', err -# print 'bin start:', binValue - print 'Total shape error: ', sqrt(shapeError) - print binlist - print errorlist - gStyle.SetErrorX(0.); - -def compareShapesTwoData(dataOld, dataNew): - hists = ['topReconstruction/mttbar_withMETAndAsymJets', - 'topReconstruction/mttbar_3jets_withMETAndAsymJets', - ] - histsOld = HistGetter.getHistsFromFiles(hists, {'data': dataOld}, bJetBins=HistPlotter.allBjetBins) - histsNew = HistGetter.getHistsFromFiles(hists, {'data': dataNew}, bJetBins=HistPlotter.allBjetBins) - - - leg = TLegend(0.696, 0.35, 0.94, 0.92); - leg.SetBorderSize(0); - leg.SetLineStyle(0); - leg.SetTextFont(42); - leg.SetFillStyle(0); - - AddLegendEntry = leg.AddEntry - alreadyAdded = False - - for bin in HistPlotter.allBjetBins: - for hist in hists: - current = hist + '_' + bin - currentOld = histsOld['data'][current] - currentNew = histsNew['data'][current] - currentOld.Rebin(50) - currentNew.Rebin(50) - if currentOld.Integral() > 0: - currentOld.Scale(1000/currentOld.Integral()) - if currentNew.Integral(): - currentNew.Scale(1000/currentNew.Integral()) - - c = TCanvas("cname3", 'cname3', 1200, 900) - c.SetLogy(1) - currentOld.SetFillColor(2) - currentOld.SetFillStyle(3004) - - currentNew.SetFillColor(4) - currentNew.SetFillStyle(3005) - - currentOld.GetXaxis().SetRangeUser(250, 3000); - currentOld.Draw('hist') - currentNew.Draw('hist same') - - if not alreadyAdded: - AddLegendEntry(currentOld, "old JEC", "f"); - AddLegendEntry(currentNew, "new JEC", "f"); - alreadyAdded = True - - leg.Draw() - saveAs(c, current + '_shape_comparison' , outputFormats) - del c - -def printHLTOutput(infos, mcInfos): -# TODO: create dictionary scaleFunction[trigger][ptThreshold][function|error] - keys = infos.keys() - previous = '' - for hlt in sorted(keys): - trigger = hlt.split('/')[1] - suffix = hlt.split('/')[-1] - jetbin = suffix.split('_')[-1] - variable = suffix.split('_')[1] - ptThreshold = '' - if 'PtGT' in suffix: - ptThreshold = '(' + suffix.split('_')[2] + ')' - if not trigger == previous: - print '='*10, trigger, '='*10 - previous = trigger - print '='*30 - print 'Fit functions for jet bin', jetbin, 'and variable', variable, ptThreshold -# print 'Fit function for data' - fitfunction = infos[hlt]['sfFitFunction'] - params = infos[hlt]['sfParams'] - function = fitfunction - upperFunction = function - lowerFunction = function - errorFunction = function - for i in range(len(params)): - param = params[i][0] - err = params[i][1] - upper = param + err - lower = param - err - if not 'pol' in function: - function = function.replace('[%d]'%i, str(param)) - upperFunction = upperFunction.replace('[%d]'%i, str(upper)) - lowerFunction = lowerFunction.replace('[%d]'%i, str(lower)) - errorFunction = errorFunction.replace('[%d]'%i, '±' + str(err)) - -# print 'Upper boundary' -# print upperFunction -# chi2 = infos[hlt]['sfchi2'] -# ndof = infos[hlt]['sfndof'] -# print 'central fit, chi2:', chi2, 'ndof:', ndof, 'chi2/ndof', chi2/ndof -# print function -# print 'Lower boundary' -# print lowerFunction - - fitRange = [-3.1,3.1] - if variable == 'pt': - fitRange = [20,200] - elif variable == 'eta': - fitRange = [-3,3] - - print 'variable', variable - print '| =%s= | %s | %s |' % (trigger, function, errorFunction) - - - c = TCanvas("cname", 'cname', 1200, 900) - f1 = TF1('f1', upperFunction, fitRange[0], fitRange[1]) - f2 = TF1('f2', function, fitRange[0], fitRange[1]) - f3 = TF1('f3', lowerFunction, fitRange[0], fitRange[1]) - f1.SetLineColor(2) - f2.SetLineColor(1) - f3.SetLineColor(4) - - f1.Draw() - f2.Draw('same') - f3.Draw('same') - - saveAs(c, hlt + '_scaleFactor', - outputFolder = outputFolder,outputFormats= outputFormats) - - - - -if __name__ == '__main__': - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 5001;') - - files = inputFiles.files - -# hltFiles = {} -# hltFiles['data'] = '/storage/results/histogramFiles/data_1959.75pb_PFElectron_PF2PATJets_PFMET.root' -# hltFiles['ttbar'] = '/storage/results/histogramFiles/TTJet_1959.75pb_PFElectron_PF2PATJets_PFMET.root' -# -# hltFiles['data'] = inputFiles.files['data'] -# hltFiles['ttbar'] = inputFiles.files['ttbar'] - - qcdPlots = [#MET -# 'TTbarEplusJetsPlusMetAnalysis/Ref selection/QCDConversions/MET/patType1CorrectedPFMet/MET', -# 'TTbarEplusJetsPlusMetAnalysis/Ref selection/QCD non iso e+jets/MET/patType1CorrectedPFMet/MET', - 'TTbarPlusMetAnalysis/EPlusJets/QCDConversions/Electron/electron_AbsEta', - 'TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/Electron/electron_AbsEta', -# 'TTbarEplusJetsPlusMetAnalysis/Ref + AsymJets selection/QCD non iso e+jets, non iso trigger/MET/patMETsPFlow/MET', -# 'TTbarEplusJetsPlusMetAnalysis/Ref + AsymJets selection/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03', -# 'TTbarEplusJetsPlusMetAnalysis/Ref + AsymJets selection/QCD e+jets PFRelIso, non iso trigger/Electron/electron_pfIsolation_03' - ] -# triggerPlots = ['HLTStudy/' + trigger + '/' + variable + '_' + modifier for trigger in triggers for variable in triggerVariables for modifier in triggerModifiers] - - HistPlotter.setStyle() - hists = HistGetter.getHistsFromFiles(qcdPlots, files, bJetBins=['0btag']) -# hists = HistGetter.getHistsFromFiles(triggerPlots, hltFiles, jetBins=HistPlotter.allJetBins) -# hists = HistGetter.addSampleSum( hists ) -# -# hists = HistPlotter.applyDefaultStylesAndColors( hists ) -# -# hists = HistPlotter.rebin(hists, 50, 'mttbar*') -# hists = HistPlotter.setXRange(hists, (300, 1800), 'mttbar*') -### -# hists = HistPlotter.setXTitle(hists, 'm(t#bar{t})/GeV', 'mttbar*') -# hists = HistPlotter.setYTitle(hists, 'Events/(50 GeV)', 'mttbar*') -# -# hists = HistGetter.makeMCStack( hists ) -# hists = HistGetter.makeDetailedMCStack( hists ) - -# hists = HistPlotter.rebin(hists, 5, 'MET*') -# hists = HistPlotter.setXTitle(hists, 'MET/GeV', 'MET*') -# hists = HistPlotter.setYTitle(hists, 'Events/(5 GeV)', 'MET*') - hists = HistPlotter.rebin(hists, 10, 'electron_AbsEta*') - hists = HistPlotter.setXTitle(hists, '|#eta(e)|', 'electron_AbsEta*') - hists = HistPlotter.setYTitle(hists, 'Events/(0.1 GeV)', 'electron_AbsEta*') -# hists = HistPlotter.rebin(hists, 5, '*pfIsolation*') -# hists = HistPlotter.setXTitle(hists, 'pf rel. iso', '*pfIsolation*') -# hists = HistPlotter.setYTitle(hists, 'Events/(0.05)', '*pfIsolation*') -# compareQCDControlRegionsInData(dataHists=hists['data'], bJetBins=HistPlotter.inclusiveBjetBins) -# compareQCDControlRegionsInData(hists=hists, bJetBins=['0btag']) - plotControlRegion(hists) -# compareShapesTwoData( -# '/storage/results/histogramFiles/PAS3/data_1091.45pb_PFElectron_PF2PATJets_PFMET.root', -# '/storage/results/histogramFiles/CiCElectron ID/data_1611.95pb_PFElectron_PF2PATJets_PFMET.root' -# ) -# makeQCDErrorPlot(files, hists) -# infos, mcInfos = plotHLTStudy(hists, rebin = 5) -# printHLTOutput(infos, mcInfos) - -# -# c = TCanvas("cname4", 'cname4', 1200, 900) -# histname = 'topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets_0orMoreBtag' -# hist = hists['allMCDetailed'][histname] -# hists['enri1'][histname].GetYaxis().SetRangeUser(0, hist.GetMaximum()*1.4); -# hists['enri1'][histname].Draw('hist') -# hist.Draw('hist same') -# -# entries = hists['enri3'][histname].GetEntries() -# events = hists['enri3'][histname].Integral() -# print entries, events, events/entries -# print QCDEstimation.getIntegral(hists['enri3'][histname], (350, 400)) -# -# leg = TLegend(0.696, 0.35, 0.94, 0.92); -# leg.SetBorderSize(0); -# leg.SetLineStyle(0); -# leg.SetTextFont(42); -# leg.SetFillStyle(0); -# -# leg.AddEntry(hists['enri1'][histname], "QCD EMEnr. 20to30", "f"); -# leg.AddEntry(hists['enri2'][histname], "QCD EMEnr. 30to80", "f"); -# leg.AddEntry(hists['enri3'][histname], "QCD EMEnr. 80to170", "f"); -# leg.AddEntry(hists['bce1'][histname], "QCD BCToE. 20to30", "f"); -# leg.AddEntry(hists['bce2'][histname], "QCD BCToE. 30to80", "f"); -# leg.AddEntry(hists['bce3'][histname], "QCD BCToE. 80to170", "f"); -# leg.AddEntry(hists['pj1'][histname], "QCD #gamma + jets 40to100", "f"); -# leg.AddEntry(hists['pj2'][histname], "QCD #gamma + jets 100to200", "f"); -# leg.AddEntry(hists['pj3'][histname], "QCD #gamma + jets 200toINF", "f"); -# leg.Draw() -# c.RedrawAxis() -# -# c.SaveAs('detailed_MC_conversions.png') - - diff --git a/scripts_old/makeShinyPlots.py b/scripts_old/makeShinyPlots.py deleted file mode 100644 index 5b336f7b..00000000 --- a/scripts_old/makeShinyPlots.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python - -# 0. Set ROOT into batch mode -# 1. set TDR style -# 2. read histograms from list (list including paths in file) - - -import ROOT -import HistPlotter - - -def plotFromFiles(files, plots): - pass - -def plotFromFolders(file, folders, plots): - pass - -def plotFromTargets(file, targets, plots): - pass - - -if '__main__' in __name__: - ROOT.gROOT.SetBatch(1) - HistPlotter.setStyle() \ No newline at end of file diff --git a/scripts_old/mcNTuple.txt b/scripts_old/mcNTuple.txt deleted file mode 100644 index c8f95473..00000000 --- a/scripts_old/mcNTuple.txt +++ /dev/null @@ -1,548 +0,0 @@ ----++ MC content -Size of event: 6.232 KB +- 0.011 ----+++ BeamSpot -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *BeamSpot* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !BeamSpot.WidthX | 6.335 | 0.681 | 9.30 | 2.752 | 0.04% | -| !BeamSpot.WidthXError | 6.336 | 0.681 | 9.30 | 2.771 | 0.04% | -| !BeamSpot.WidthY | 6.335 | 0.682 | 9.29 | 2.752 | 0.04% | -| !BeamSpot.WidthYError | 6.336 | 0.681 | 9.30 | 2.771 | 0.04% | -| !BeamSpot.X0 | 6.335 | 0.682 | 9.29 | 2.736 | 0.04% | -| !BeamSpot.X0Error | 6.336 | 0.681 | 9.30 | 2.756 | 0.04% | -| !BeamSpot.Y0 | 6.335 | 0.682 | 9.29 | 2.736 | 0.04% | -| !BeamSpot.Y0Error | 6.336 | 0.681 | 9.31 | 2.756 | 0.04% | -| !BeamSpot.Z0 | 6.335 | 0.682 | 9.29 | 2.736 | 0.04% | -| !BeamSpot.Z0Error | 6.336 | 0.681 | 9.30 | 2.756 | 0.04% | -| !BeamSpot.dxdz | 6.335 | 0.682 | 9.29 | 2.744 | 0.04% | -| !BeamSpot.dxdzError | 6.336 | 0.681 | 9.30 | 2.764 | 0.04% | -| !BeamSpot.dydz | 6.335 | 0.681 | 9.30 | 2.744 | 0.04% | -| !BeamSpot.dydzError | 6.336 | 0.681 | 9.31 | 2.764 | 0.04% | -| !BeamSpot.sigmaZ | 6.335 | 0.682 | 9.30 | 2.752 | 0.04% | -| !BeamSpot.sigmaZError | 6.336 | 0.681 | 9.30 | 2.771 | 0.04% | -| *Total* | 95.032 | 10.221 | 9.30 | 1183.106 | 0.56% | -%ENDTWISTY% - ----+++ Event -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *Event* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !Event.Bunch | 1.155 | 0.007 | 155.27 | 1.502 | 0.00% | -| !Event.LumiSection | 1.156 | 0.010 | 114.11 | 1.525 | 0.00% | -| !Event.MagneticField | 2.306 | 0.011 | 210.95 | 1.561 | 0.00% | -| !Event.Number | 1.156 | 0.504 | 2.29 | 1.506 | 0.03% | -| !Event.Orbit | 1.155 | 0.007 | 155.27 | 1.502 | 0.00% | -| !Event.PDFWeights | 4.036 | 0.646 | 6.25 | 2.717 | 0.04% | -| !Event.PileUpInteractions | 7.486 | 1.421 | 5.27 | 2.787 | 0.08% | -| !Event.PileUpOriginBX | 7.485 | 0.689 | 10.87 | 2.771 | 0.04% | -| !Event.ProcessID | 1.156 | 0.115 | 10.02 | 1.518 | 0.01% | -| !Event.PtHat | 2.305 | 0.009 | 266.54 | 1.529 | 0.00% | -| !Event.Run | 1.155 | 0.007 | 154.07 | 1.494 | 0.00% | -| !Event.Time | 2.305 | 0.764 | 3.02 | 1.525 | 0.04% | -| !Event.isData | 0.293 | 0.007 | 43.49 | 1.500 | 0.00% | -| !Event.rho | 2.305 | 2.185 | 1.05 | 1.521 | 0.12% | -| *Total* | 34.300 | 6.376 | 5.38 | 17611.845 | 0.35% | -%ENDTWISTY% - ----+++ GenJet -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *GenJet* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !GenJet.Charge | 17.199 | 1.115 | 15.43 | 2.842 | 0.06% | -| !GenJet.EMF | 17.199 | 13.652 | 1.26 | 2.830 | 0.74% | -| !GenJet.Energy | 17.199 | 13.719 | 1.25 | 2.842 | 0.75% | -| !GenJet.Eta | 17.199 | 9.072 | 1.90 | 2.830 | 0.49% | -| !GenJet.HADF | 17.199 | 13.512 | 1.27 | 2.834 | 0.74% | -| !GenJet.Mass | 17.199 | 8.521 | 2.02 | 2.834 | 0.46% | -| !GenJet.Phi | 17.199 | 9.115 | 1.89 | 2.830 | 0.50% | -| !GenJet.Pt | 17.199 | 8.497 | 2.02 | 2.826 | 0.46% | -| !GenJet.Px | 17.199 | 13.951 | 1.23 | 2.826 | 0.76% | -| !GenJet.Py | 17.199 | 13.951 | 1.23 | 2.826 | 0.76% | -| !GenJet.Pz | 17.199 | 13.966 | 1.23 | 2.826 | 0.76% | -| *Total* | 171.987 | 117.956 | 1.46 | 6486.887 | 6.43% | -%ENDTWISTY% - ----+++ Genmetextrue -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *Genmetextrue* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !GenMETExTrue | 6.335 | 3.182 | 1.99 | 2.740 | 0.17% | -%ENDTWISTY% - ----+++ Genmeteytrue -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *Genmeteytrue* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !GenMETEyTrue | 6.335 | 3.183 | 1.99 | 2.740 | 0.17% | -%ENDTWISTY% - ----+++ GenParticle -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *GenParticle* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !GenParticle.Energy | 61.507 | 50.883 | 1.21 | 2.178 | 2.77% | -| !GenParticle.Eta | 61.506 | 32.061 | 1.92 | 2.166 | 1.75% | -| !GenParticle.MotherIndex | 32.769 | 1.928 | 16.99 | 1.904 | 0.11% | -| !GenParticle.NumDaught | 32.769 | 5.675 | 5.77 | 1.896 | 0.31% | -| !GenParticle.PdgId | 32.768 | 2.802 | 11.69 | 1.881 | 0.15% | -| !GenParticle.Phi | 61.506 | 31.726 | 1.94 | 2.166 | 1.73% | -| !GenParticle.Pt | 61.506 | 30.338 | 2.03 | 2.162 | 1.65% | -| !GenParticle.Px | 61.506 | 51.941 | 1.18 | 2.162 | 2.83% | -| !GenParticle.Py | 61.506 | 51.942 | 1.18 | 2.162 | 2.83% | -| !GenParticle.Pz | 61.506 | 51.596 | 1.19 | 2.162 | 2.81% | -| !GenParticle.Status | 32.769 | 1.401 | 23.39 | 1.885 | 0.08% | -| !GenParticle.VX | 61.506 | 2.540 | 24.22 | 2.162 | 0.14% | -| !GenParticle.VY | 61.506 | 2.519 | 24.42 | 2.162 | 0.14% | -| !GenParticle.VZ | 61.506 | 2.928 | 21.01 | 2.162 | 0.16% | -| *Total* | 684.633 | 269.398 | 2.54 | 285470.462 | 14.69% | -%ENDTWISTY% - ----+++ Trigger -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *Trigger* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !Trigger.HLTBits | 278.780 | 10.633 | 26.22 | 6.873 | 0.58% | -| !Trigger.HLTNames | 461.569 | 3.814 | 121.03 | 11.271 | 0.21% | -| !Trigger.HLTPrescales | 40.815 | 0.932 | 43.77 | 1.971 | 0.05% | -| !Trigger.HLTPrescalesOther | 84.498 | 1.360 | 62.15 | 2.459 | 0.07% | -| !Trigger.HLTResults | 40.815 | 1.376 | 29.67 | 1.963 | 0.08% | -| !Trigger.HLTResultsOther | 84.498 | 1.606 | 52.63 | 2.451 | 0.09% | -| !Trigger.L1PhysBits | 151.177 | 7.910 | 19.11 | 4.287 | 0.43% | -| !Trigger.L1TechBits | 77.600 | 1.550 | 50.07 | 2.354 | 0.08% | -| *Total* | 940.973 | 18.547 | 50.73 | 17568.610 | 1.01% | -%ENDTWISTY% - ----+++ goodOfflinePrimaryVertices -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *goodOfflinePrimaryVertices* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !goodOfflinePrimaryVertices.Chi2 | 17.158 | 8.681 | 1.98 | 2.834 | 0.47% | -| !goodOfflinePrimaryVertices.IsFake | 10.599 | 1.176 | 9.01 | 2.861 | 0.06% | -| !goodOfflinePrimaryVertices.NDF | 17.158 | 8.610 | 1.99 | 2.830 | 0.47% | -| !goodOfflinePrimaryVertices.NTracks | 10.599 | 3.301 | 3.21 | 2.865 | 0.18% | -| !goodOfflinePrimaryVertices.NTracksW05 | 10.599 | 3.258 | 3.25 | 2.877 | 0.18% | -| !goodOfflinePrimaryVertices.Rho | 17.158 | 13.062 | 1.31 | 2.830 | 0.71% | -| !goodOfflinePrimaryVertices.X | 17.157 | 7.663 | 2.24 | 2.822 | 0.42% | -| !goodOfflinePrimaryVertices.XErr | 17.158 | 13.714 | 1.25 | 2.834 | 0.75% | -| !goodOfflinePrimaryVertices.Y | 17.157 | 7.516 | 2.28 | 2.822 | 0.41% | -| !goodOfflinePrimaryVertices.YErr | 17.158 | 13.714 | 1.25 | 2.834 | 0.75% | -| !goodOfflinePrimaryVertices.Z | 17.157 | 9.270 | 1.85 | 2.822 | 0.51% | -| !goodOfflinePrimaryVertices.ZErr | 17.158 | 13.716 | 1.25 | 2.834 | 0.75% | -| *Total* | 169.057 | 95.000 | 1.78 | 17162.926 | 5.18% | -%ENDTWISTY% - ----+++ goodPatJets -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *goodPatJets* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !goodPatJets.Charge | 16.761 | 8.673 | 1.93 | 2.861 | 0.47% | -| !goodPatJets.CombinedSVBJetTag | 16.762 | 1.121 | 14.95 | 2.904 | 0.06% | -| !goodPatJets.CombinedSVMVABJetTag | 16.763 | 1.122 | 14.94 | 2.916 | 0.06% | -| !goodPatJets.EMF | 16.760 | 8.104 | 2.07 | 2.850 | 0.44% | -| !goodPatJets.Energy | 16.761 | 13.298 | 1.26 | 2.861 | 0.73% | -| !goodPatJets.EnergyRaw | 16.761 | 13.296 | 1.26 | 2.873 | 0.73% | -| !goodPatJets.Eta | 16.760 | 8.796 | 1.91 | 2.850 | 0.48% | -| !goodPatJets.HADF | 16.761 | 8.254 | 2.03 | 2.854 | 0.45% | -| !goodPatJets.JECUnc | 16.761 | 1.120 | 14.97 | 2.861 | 0.06% | -| !goodPatJets.JetBProbabilityBTag | 16.762 | 8.493 | 1.97 | 2.912 | 0.46% | -| !goodPatJets.JetProbabilityBTag | 16.762 | 7.555 | 2.22 | 2.908 | 0.41% | -| !goodPatJets.L1OffJEC | 16.761 | 11.380 | 1.47 | 2.869 | 0.62% | -| !goodPatJets.L2L3ResJEC | 16.761 | 1.120 | 14.96 | 2.877 | 0.06% | -| !goodPatJets.L2RelJEC | 16.761 | 12.943 | 1.29 | 2.869 | 0.71% | -| !goodPatJets.L3AbsJEC | 16.761 | 13.189 | 1.27 | 2.869 | 0.72% | -| !goodPatJets.Mass | 16.761 | 8.295 | 2.02 | 2.854 | 0.45% | -| !goodPatJets.PartonFlavour | 10.400 | 2.407 | 4.32 | 2.830 | 0.13% | -| !goodPatJets.PassLooseID | 10.399 | 1.066 | 9.76 | 2.822 | 0.06% | -| !goodPatJets.PassTightID | 10.399 | 1.080 | 9.63 | 2.822 | 0.06% | -| !goodPatJets.Phi | 16.760 | 8.849 | 1.89 | 2.850 | 0.48% | -| !goodPatJets.Pt | 16.760 | 8.256 | 2.03 | 2.846 | 0.45% | -| !goodPatJets.PtRaw | 16.761 | 8.315 | 2.02 | 2.857 | 0.45% | -| !goodPatJets.Px | 16.760 | 13.496 | 1.24 | 2.846 | 0.74% | -| !goodPatJets.Py | 16.760 | 13.496 | 1.24 | 2.846 | 0.74% | -| !goodPatJets.Pz | 16.760 | 13.516 | 1.24 | 2.846 | 0.74% | -| !goodPatJets.SigmaEta | 16.761 | 13.294 | 1.26 | 2.869 | 0.72% | -| !goodPatJets.SigmaPhi | 16.761 | 13.274 | 1.26 | 2.869 | 0.72% | -| !goodPatJets.SimpleSecondaryVertexHighEffBTag | 16.764 | 3.323 | 5.05 | 2.963 | 0.18% | -| !goodPatJets.SimpleSecondaryVertexHighPurBTag | 16.764 | 2.717 | 6.17 | 2.963 | 0.15% | -| !goodPatJets.SoftElectronBJetTag | 16.762 | 1.122 | 14.94 | 2.912 | 0.06% | -| !goodPatJets.SoftMuonBJetTag | 16.762 | 1.877 | 8.93 | 2.896 | 0.10% | -| !goodPatJets.SoftMuonNoIPBJetTag | 16.762 | 1.122 | 14.94 | 2.912 | 0.06% | -| !goodPatJets.TrackCountingHighEffBTag | 16.763 | 7.986 | 2.10 | 2.932 | 0.44% | -| !goodPatJets.TrackCountingHighPurBTag | 16.763 | 7.349 | 2.28 | 2.932 | 0.40% | -| !goodPatJets.fHPD | 16.761 | 8.281 | 2.02 | 2.854 | 0.45% | -| !goodPatJets.fRBX | 16.761 | 8.274 | 2.03 | 2.854 | 0.45% | -| !goodPatJets.n90Hits | 10.399 | 3.287 | 3.16 | 2.807 | 0.18% | -| !goodPatJets.resEMF | 16.761 | 8.102 | 2.07 | 2.861 | 0.44% | -| *Total* | 594.725 | 268.576 | 2.21 | 15041.044 | 14.65% | -%ENDTWISTY% - ----+++ goodPatJetsCA8PF -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *goodPatJetsCA8PF* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !goodPatJetsCA8PF.BestVertexTrackAssociationFactor | 14.689 | 11.168 | 1.32 | 2.963 | 0.61% | -| !goodPatJetsCA8PF.BestVertexTrackAssociationIndex | 9.365 | 1.163 | 8.05 | 2.900 | 0.06% | -| !goodPatJetsCA8PF.Charge | 14.686 | 7.510 | 1.96 | 2.861 | 0.41% | -| !goodPatJetsCA8PF.ChargedEmEnergyFraction | 14.688 | 2.415 | 6.08 | 2.928 | 0.13% | -| !goodPatJetsCA8PF.ChargedEmEnergyFractionRAW | 14.688 | 2.416 | 6.08 | 2.939 | 0.13% | -| !goodPatJetsCA8PF.ChargedHadronEnergyFraction | 14.688 | 7.066 | 2.08 | 2.943 | 0.39% | -| !goodPatJetsCA8PF.ChargedHadronEnergyFractionRAW | 14.689 | 7.068 | 2.08 | 2.955 | 0.39% | -| !goodPatJetsCA8PF.ChargedHadronMultiplicity | 9.364 | 2.542 | 3.68 | 2.877 | 0.14% | -| !goodPatJetsCA8PF.ChargedMuEnergyFraction | 14.688 | 1.928 | 7.62 | 2.928 | 0.11% | -| !goodPatJetsCA8PF.ChargedMultiplicity | 9.363 | 2.541 | 3.68 | 2.854 | 0.14% | -| !goodPatJetsCA8PF.ClosestVertex3DIndex | 9.363 | 2.041 | 4.59 | 2.857 | 0.11% | -| !goodPatJetsCA8PF.ClosestVertexWeighted3DSeparation | 14.689 | 11.396 | 1.29 | 2.967 | 0.62% | -| !goodPatJetsCA8PF.ClosestVertexWeightedXYSeparation | 14.689 | 1.092 | 13.46 | 2.967 | 0.06% | -| !goodPatJetsCA8PF.ClosestVertexWeightedZSeparation | 14.689 | 1.091 | 13.46 | 2.963 | 0.06% | -| !goodPatJetsCA8PF.ClosestVertexXYIndex | 9.363 | 1.054 | 8.89 | 2.857 | 0.06% | -| !goodPatJetsCA8PF.ClosestVertexZIndex | 9.363 | 1.053 | 8.89 | 2.854 | 0.06% | -| !goodPatJetsCA8PF.ElectronEnergyFraction | 14.688 | 3.079 | 4.77 | 2.924 | 0.17% | -| !goodPatJetsCA8PF.ElectronMultiplicity | 9.363 | 1.375 | 6.81 | 2.857 | 0.07% | -| !goodPatJetsCA8PF.Energy | 14.686 | 11.340 | 1.30 | 2.861 | 0.62% | -| !goodPatJetsCA8PF.EnergyRaw | 14.686 | 11.337 | 1.30 | 2.873 | 0.62% | -| !goodPatJetsCA8PF.Eta | 14.685 | 7.563 | 1.94 | 2.850 | 0.41% | -| !goodPatJetsCA8PF.JECUnc | 14.686 | 1.089 | 13.49 | 2.861 | 0.06% | -| !goodPatJetsCA8PF.JetBProbabilityBTag | 14.687 | 7.395 | 1.99 | 2.912 | 0.40% | -| !goodPatJetsCA8PF.JetProbabilityBTag | 14.687 | 6.765 | 2.17 | 2.908 | 0.37% | -| !goodPatJetsCA8PF.L1OffJEC | 14.686 | 11.014 | 1.33 | 2.869 | 0.60% | -| !goodPatJetsCA8PF.L2L3ResJEC | 14.686 | 1.089 | 13.49 | 2.877 | 0.06% | -| !goodPatJetsCA8PF.L2RelJEC | 14.686 | 10.735 | 1.37 | 2.869 | 0.59% | -| !goodPatJetsCA8PF.L3AbsJEC | 14.686 | 10.510 | 1.40 | 2.869 | 0.57% | -| !goodPatJetsCA8PF.Mass | 14.686 | 7.121 | 2.06 | 2.854 | 0.39% | -| !goodPatJetsCA8PF.MuonEnergyFraction | 14.687 | 1.929 | 7.62 | 2.908 | 0.11% | -| !goodPatJetsCA8PF.MuonMultiplicity | 9.363 | 1.283 | 7.30 | 2.842 | 0.07% | -| !goodPatJetsCA8PF.NConstituents | 9.362 | 2.783 | 3.36 | 2.830 | 0.15% | -| !goodPatJetsCA8PF.NeutralEmEnergyFraction | 14.688 | 7.195 | 2.04 | 2.928 | 0.39% | -| !goodPatJetsCA8PF.NeutralEmEnergyFractionRAW | 14.688 | 7.197 | 2.04 | 2.939 | 0.39% | -| !goodPatJetsCA8PF.NeutralHadronEnergyFraction | 14.688 | 7.012 | 2.09 | 2.943 | 0.38% | -| !goodPatJetsCA8PF.NeutralHadronEnergyFractionRAW | 14.689 | 7.015 | 2.09 | 2.955 | 0.38% | -| !goodPatJetsCA8PF.NeutralHadronMultiplicity | 9.364 | 2.160 | 4.34 | 2.877 | 0.12% | -| !goodPatJetsCA8PF.NeutralMultiplicity | 9.363 | 2.559 | 3.66 | 2.854 | 0.14% | -| !goodPatJetsCA8PF.PartonFlavour | 9.362 | 2.187 | 4.28 | 2.830 | 0.12% | -| !goodPatJetsCA8PF.PassLooseID | 9.362 | 1.052 | 8.90 | 2.822 | 0.06% | -| !goodPatJetsCA8PF.PassTightID | 9.362 | 1.056 | 8.86 | 2.822 | 0.06% | -| !goodPatJetsCA8PF.Phi | 14.685 | 7.598 | 1.93 | 2.850 | 0.41% | -| !goodPatJetsCA8PF.PhotonEnergyFraction | 14.688 | 7.199 | 2.04 | 2.916 | 0.39% | -| !goodPatJetsCA8PF.PhotonMultiplicity | 9.363 | 2.524 | 3.71 | 2.850 | 0.14% | -| !goodPatJetsCA8PF.Pt | 14.685 | 7.120 | 2.06 | 2.846 | 0.39% | -| !goodPatJetsCA8PF.PtRaw | 14.686 | 7.118 | 2.06 | 2.857 | 0.39% | -| !goodPatJetsCA8PF.Px | 14.685 | 11.510 | 1.28 | 2.846 | 0.63% | -| !goodPatJetsCA8PF.Py | 14.685 | 11.510 | 1.28 | 2.846 | 0.63% | -| !goodPatJetsCA8PF.Pz | 14.685 | 11.521 | 1.27 | 2.846 | 0.63% | -| !goodPatJetsCA8PF.SimpleSecondaryVertexHighEffBTag | 14.689 | 3.180 | 4.62 | 2.963 | 0.17% | -| !goodPatJetsCA8PF.SimpleSecondaryVertexHighPurBTag | 14.689 | 2.586 | 5.68 | 2.963 | 0.14% | -| !goodPatJetsCA8PF.TrackCountingHighEffBTag | 14.688 | 7.299 | 2.01 | 2.932 | 0.40% | -| !goodPatJetsCA8PF.TrackCountingHighPurBTag | 14.688 | 6.953 | 2.11 | 2.932 | 0.38% | -| *Total* | 683.872 | 272.334 | 2.51 | 14619.207 | 14.85% | -%ENDTWISTY% - ----+++ goodPatJetsPFlow -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *goodPatJetsPFlow* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !goodPatJetsPFlow.BestVertexTrackAssociationFactor | 14.277 | 10.775 | 1.33 | 2.963 | 0.59% | -| !goodPatJetsPFlow.BestVertexTrackAssociationIndex | 9.159 | 1.144 | 8.01 | 2.900 | 0.06% | -| !goodPatJetsPFlow.Charge | 14.274 | 7.277 | 1.96 | 2.861 | 0.40% | -| !goodPatJetsPFlow.ChargedEmEnergyFraction | 14.276 | 2.309 | 6.18 | 2.928 | 0.13% | -| !goodPatJetsPFlow.ChargedEmEnergyFractionRAW | 14.276 | 2.311 | 6.18 | 2.939 | 0.13% | -| !goodPatJetsPFlow.ChargedHadronEnergyFraction | 14.277 | 6.871 | 2.08 | 2.943 | 0.37% | -| !goodPatJetsPFlow.ChargedHadronEnergyFractionRAW | 14.277 | 6.873 | 2.08 | 2.955 | 0.37% | -| !goodPatJetsPFlow.ChargedHadronMultiplicity | 9.158 | 2.403 | 3.81 | 2.877 | 0.13% | -| !goodPatJetsPFlow.ChargedMuEnergyFraction | 14.276 | 1.852 | 7.71 | 2.928 | 0.10% | -| !goodPatJetsPFlow.ChargedMultiplicity | 9.157 | 2.402 | 3.81 | 2.854 | 0.13% | -| !goodPatJetsPFlow.ClosestVertex3DIndex | 9.157 | 2.007 | 4.56 | 2.857 | 0.11% | -| !goodPatJetsPFlow.ClosestVertexWeighted3DSeparation | 14.277 | 11.005 | 1.30 | 2.967 | 0.60% | -| !goodPatJetsPFlow.ClosestVertexWeightedXYSeparation | 14.277 | 1.100 | 12.98 | 2.967 | 0.06% | -| !goodPatJetsPFlow.ClosestVertexWeightedZSeparation | 14.277 | 1.100 | 12.98 | 2.963 | 0.06% | -| !goodPatJetsPFlow.ClosestVertexXYIndex | 9.157 | 1.065 | 8.60 | 2.857 | 0.06% | -| !goodPatJetsPFlow.ClosestVertexZIndex | 9.157 | 1.065 | 8.60 | 2.854 | 0.06% | -| !goodPatJetsPFlow.ElectronEnergyFraction | 14.276 | 2.951 | 4.84 | 2.924 | 0.16% | -| !goodPatJetsPFlow.ElectronMultiplicity | 9.157 | 1.362 | 6.72 | 2.857 | 0.07% | -| !goodPatJetsPFlow.Energy | 14.274 | 10.933 | 1.31 | 2.861 | 0.60% | -| !goodPatJetsPFlow.EnergyRaw | 14.274 | 10.931 | 1.31 | 2.873 | 0.60% | -| !goodPatJetsPFlow.Eta | 14.274 | 7.294 | 1.96 | 2.850 | 0.40% | -| !goodPatJetsPFlow.JECUnc | 14.274 | 1.097 | 13.01 | 2.861 | 0.06% | -| !goodPatJetsPFlow.JetBProbabilityBTag | 14.276 | 7.222 | 1.98 | 2.912 | 0.39% | -| !goodPatJetsPFlow.JetProbabilityBTag | 14.275 | 6.776 | 2.11 | 2.908 | 0.37% | -| !goodPatJetsPFlow.L1OffJEC | 14.274 | 10.498 | 1.36 | 2.869 | 0.57% | -| !goodPatJetsPFlow.L2L3ResJEC | 14.274 | 1.097 | 13.01 | 2.877 | 0.06% | -| !goodPatJetsPFlow.L2RelJEC | 14.274 | 10.350 | 1.38 | 2.869 | 0.56% | -| !goodPatJetsPFlow.L3AbsJEC | 14.274 | 10.151 | 1.41 | 2.869 | 0.55% | -| !goodPatJetsPFlow.Mass | 14.274 | 6.878 | 2.08 | 2.854 | 0.38% | -| !goodPatJetsPFlow.MuonEnergyFraction | 14.275 | 1.851 | 7.71 | 2.908 | 0.10% | -| !goodPatJetsPFlow.MuonMultiplicity | 9.157 | 1.271 | 7.21 | 2.842 | 0.07% | -| !goodPatJetsPFlow.NConstituents | 9.156 | 2.550 | 3.59 | 2.830 | 0.14% | -| !goodPatJetsPFlow.NeutralEmEnergyFraction | 14.276 | 7.010 | 2.04 | 2.928 | 0.38% | -| !goodPatJetsPFlow.NeutralEmEnergyFractionRAW | 14.276 | 7.012 | 2.04 | 2.939 | 0.38% | -| !goodPatJetsPFlow.NeutralHadronEnergyFraction | 14.277 | 6.433 | 2.22 | 2.943 | 0.35% | -| !goodPatJetsPFlow.NeutralHadronEnergyFractionRAW | 14.277 | 6.436 | 2.22 | 2.955 | 0.35% | -| !goodPatJetsPFlow.NeutralHadronMultiplicity | 9.158 | 2.006 | 4.57 | 2.877 | 0.11% | -| !goodPatJetsPFlow.NeutralMultiplicity | 9.157 | 2.430 | 3.77 | 2.854 | 0.13% | -| !goodPatJetsPFlow.PartonFlavour | 9.156 | 2.147 | 4.27 | 2.830 | 0.12% | -| !goodPatJetsPFlow.PassLooseID | 9.156 | 1.064 | 8.61 | 2.822 | 0.06% | -| !goodPatJetsPFlow.PassTightID | 9.156 | 1.070 | 8.56 | 2.822 | 0.06% | -| !goodPatJetsPFlow.Phi | 14.274 | 7.324 | 1.95 | 2.850 | 0.40% | -| !goodPatJetsPFlow.PhotonEnergyFraction | 14.276 | 7.012 | 2.04 | 2.916 | 0.38% | -| !goodPatJetsPFlow.PhotonMultiplicity | 9.157 | 2.404 | 3.81 | 2.850 | 0.13% | -| !goodPatJetsPFlow.Pt | 14.273 | 6.899 | 2.07 | 2.846 | 0.38% | -| !goodPatJetsPFlow.PtRaw | 14.274 | 6.898 | 2.07 | 2.857 | 0.38% | -| !goodPatJetsPFlow.Px | 14.273 | 11.118 | 1.28 | 2.846 | 0.61% | -| !goodPatJetsPFlow.Py | 14.273 | 11.119 | 1.28 | 2.846 | 0.61% | -| !goodPatJetsPFlow.Pz | 14.273 | 11.135 | 1.28 | 2.846 | 0.61% | -| !goodPatJetsPFlow.SimpleSecondaryVertexHighEffBTag | 14.277 | 3.253 | 4.39 | 2.963 | 0.18% | -| !goodPatJetsPFlow.SimpleSecondaryVertexHighPurBTag | 14.277 | 2.670 | 5.35 | 2.963 | 0.15% | -| !goodPatJetsPFlow.TrackCountingHighEffBTag | 14.276 | 7.206 | 1.98 | 2.932 | 0.39% | -| !goodPatJetsPFlow.TrackCountingHighPurBTag | 14.276 | 6.950 | 2.05 | 2.932 | 0.38% | -| *Total* | 665.544 | 263.593 | 2.52 | 6486.155 | 14.37% | -%ENDTWISTY% - ----+++ patMETs -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *patMETs* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !patMETs.ET | 6.335 | 1.992 | 3.18 | 2.732 | 0.11% | -| !patMETs.ETUncorr | 6.336 | 1.992 | 3.18 | 2.756 | 0.11% | -| !patMETs.Ex | 6.335 | 3.159 | 2.01 | 2.732 | 0.17% | -| !patMETs.Ey | 6.335 | 3.159 | 2.01 | 2.732 | 0.17% | -| !patMETs.Phi | 6.335 | 2.095 | 3.02 | 2.736 | 0.11% | -| !patMETs.PhiUncorr | 6.336 | 2.095 | 3.02 | 2.760 | 0.11% | -| !patMETs.Significance | 6.336 | 0.681 | 9.30 | 2.771 | 0.04% | -| !patMETs.SumET | 6.335 | 3.095 | 2.05 | 2.744 | 0.17% | -| !patMETs.SumETUncorr | 6.336 | 3.091 | 2.05 | 2.768 | 0.17% | -| *Total* | 50.683 | 19.369 | 2.62 | 6487.380 | 1.06% | -%ENDTWISTY% - ----+++ patMETsPFlow -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *patMETsPFlow* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !patMETsPFlow.ET | 6.335 | 2.003 | 3.16 | 2.752 | 0.11% | -| !patMETsPFlow.ETUncorr | 6.336 | 2.003 | 3.16 | 2.775 | 0.11% | -| !patMETsPFlow.Ex | 6.335 | 3.166 | 2.00 | 2.752 | 0.17% | -| !patMETsPFlow.Ey | 6.335 | 3.166 | 2.00 | 2.752 | 0.17% | -| !patMETsPFlow.Phi | 6.336 | 2.089 | 3.03 | 2.756 | 0.11% | -| !patMETsPFlow.PhiUncorr | 6.336 | 2.089 | 3.03 | 2.779 | 0.11% | -| !patMETsPFlow.Significance | 6.337 | 3.147 | 2.01 | 2.791 | 0.17% | -| !patMETsPFlow.SumET | 6.336 | 3.093 | 2.05 | 2.764 | 0.17% | -| !patMETsPFlow.SumETUncorr | 6.336 | 3.094 | 2.05 | 2.787 | 0.17% | -| *Total* | 50.687 | 21.846 | 2.32 | 7591.911 | 1.19% | -%ENDTWISTY% - ----+++ selectedPatElectrons -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *selectedPatElectrons* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !selectedPatElectrons.CaloEnergy | 7.414 | 2.886 | 2.57 | 2.814 | 0.16% | -| !selectedPatElectrons.Charge | 5.726 | 1.035 | 5.53 | 2.779 | 0.06% | -| !selectedPatElectrons.DCotTheta | 7.414 | 4.155 | 1.78 | 2.811 | 0.23% | -| !selectedPatElectrons.DeltaEtaTrkSC | 7.414 | 2.660 | 2.79 | 2.826 | 0.15% | -| !selectedPatElectrons.DeltaPhiTrkSC | 7.414 | 2.757 | 2.69 | 2.826 | 0.15% | -| !selectedPatElectrons.Dist | 7.413 | 3.900 | 1.90 | 2.791 | 0.21% | -| !selectedPatElectrons.EcalIso | 7.414 | 2.959 | 2.51 | 2.803 | 0.16% | -| !selectedPatElectrons.EcalIso03 | 7.414 | 2.990 | 2.48 | 2.811 | 0.16% | -| !selectedPatElectrons.EcalIsoHeep | 7.414 | 2.990 | 2.48 | 2.818 | 0.16% | -| !selectedPatElectrons.Energy | 7.414 | 4.265 | 1.74 | 2.799 | 0.23% | -| !selectedPatElectrons.EoverP | 7.414 | 2.959 | 2.51 | 2.799 | 0.16% | -| !selectedPatElectrons.Eta | 7.413 | 3.036 | 2.44 | 2.787 | 0.17% | -| !selectedPatElectrons.GSFTrack.Charge | 5.727 | 1.036 | 5.53 | 2.814 | 0.06% | -| !selectedPatElectrons.GSFTrack.Eta | 7.414 | 4.354 | 1.70 | 2.822 | 0.24% | -| !selectedPatElectrons.GSFTrack.Phi | 7.414 | 4.359 | 1.70 | 2.822 | 0.24% | -| !selectedPatElectrons.GSFTrack.Pt | 7.414 | 4.270 | 1.74 | 2.818 | 0.23% | -| !selectedPatElectrons.GSFTrack.Theta | 7.415 | 4.294 | 1.73 | 2.830 | 0.23% | -| !selectedPatElectrons.GSFTrack.d0 | 7.414 | 4.307 | 1.72 | 2.818 | 0.23% | -| !selectedPatElectrons.HcalIso | 7.414 | 2.682 | 2.76 | 2.803 | 0.15% | -| !selectedPatElectrons.HcalIso03 | 7.414 | 2.484 | 2.99 | 2.811 | 0.14% | -| !selectedPatElectrons.HcalIsoD1Heep | 7.414 | 2.476 | 2.99 | 2.826 | 0.14% | -| !selectedPatElectrons.HcalIsoD2Heep | 7.414 | 1.138 | 6.51 | 2.826 | 0.06% | -| !selectedPatElectrons.HoE | 7.413 | 2.199 | 3.37 | 2.787 | 0.12% | -| !selectedPatElectrons.MissingHits | 5.726 | 0.922 | 6.21 | 2.799 | 0.05% | -| !selectedPatElectrons.PassID | 5.726 | 0.909 | 6.30 | 2.779 | 0.05% | -| !selectedPatElectrons.Phi | 7.413 | 3.066 | 2.42 | 2.787 | 0.17% | -| !selectedPatElectrons.Pt | 7.413 | 2.871 | 2.58 | 2.783 | 0.16% | -| !selectedPatElectrons.Px | 7.413 | 4.348 | 1.70 | 2.783 | 0.24% | -| !selectedPatElectrons.Py | 7.413 | 4.348 | 1.70 | 2.783 | 0.24% | -| !selectedPatElectrons.Pz | 7.413 | 4.357 | 1.70 | 2.783 | 0.24% | -| !selectedPatElectrons.SCEta | 7.413 | 4.351 | 1.70 | 2.795 | 0.24% | -| !selectedPatElectrons.SCPhi | 7.413 | 4.377 | 1.69 | 2.795 | 0.24% | -| !selectedPatElectrons.SCPt | 7.413 | 4.257 | 1.74 | 2.791 | 0.23% | -| !selectedPatElectrons.SCRawEnergy | 7.414 | 3.744 | 1.98 | 2.818 | 0.20% | -| !selectedPatElectrons.SigmaEtaEta | 7.414 | 2.860 | 2.59 | 2.818 | 0.16% | -| !selectedPatElectrons.SigmaIEtaIEta | 7.414 | 2.865 | 2.59 | 2.826 | 0.16% | -| !selectedPatElectrons.TrkIso | 7.414 | 2.552 | 2.90 | 2.799 | 0.14% | -| !selectedPatElectrons.TrkIso03 | 7.414 | 2.432 | 3.05 | 2.807 | 0.13% | -| !selectedPatElectrons.TrkIsoHeep | 7.414 | 2.432 | 3.05 | 2.814 | 0.13% | -| !selectedPatElectrons.Vertex.X | 7.414 | 2.682 | 2.76 | 2.807 | 0.15% | -| !selectedPatElectrons.Vertex.Y | 7.414 | 2.634 | 2.82 | 2.807 | 0.14% | -| !selectedPatElectrons.Vertex.Z | 7.414 | 3.073 | 2.41 | 2.807 | 0.17% | -| !selectedPatElectrons.VtxDistXY | 7.414 | 4.353 | 1.70 | 2.811 | 0.24% | -| !selectedPatElectrons.VtxDistZ | 7.414 | 4.349 | 1.70 | 2.807 | 0.24% | -| !selectedPatElectrons.VtxIndex | 5.726 | 0.895 | 6.40 | 2.787 | 0.05% | -| !selectedPatElectrons.closestCtfTrackRef | 5.727 | 1.740 | 3.29 | 2.826 | 0.09% | -| !selectedPatElectrons.dB | 7.413 | 4.284 | 1.73 | 2.783 | 0.23% | -| !selectedPatElectrons.eSeedClusterOverPout | 7.415 | 2.982 | 2.49 | 2.854 | 0.16% | -| !selectedPatElectrons.fbrem | 7.413 | 2.970 | 2.50 | 2.795 | 0.16% | -| !selectedPatElectrons.shFracInnerHits | 7.415 | 1.053 | 7.04 | 2.834 | 0.06% | -| *Total* | 353.151 | 149.011 | 2.37 | 6151.015 | 8.13% | -%ENDTWISTY% - ----+++ selectedPatElectronsLoosePFlow -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *selectedPatElectronsLoosePFlow* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !selectedPatElectronsLoosePFlow.CaloEnergy | 6.007 | 2.082 | 2.89 | 2.834 | 0.11% | -| !selectedPatElectronsLoosePFlow.Charge | 5.023 | 0.974 | 5.16 | 2.818 | 0.05% | -| !selectedPatElectronsLoosePFlow.DCotTheta | 6.007 | 2.814 | 2.13 | 2.830 | 0.15% | -| !selectedPatElectronsLoosePFlow.DeltaEtaTrkSC | 6.008 | 1.932 | 3.11 | 2.846 | 0.11% | -| !selectedPatElectronsLoosePFlow.DeltaPhiTrkSC | 6.008 | 1.977 | 3.04 | 2.846 | 0.11% | -| !selectedPatElectronsLoosePFlow.Dist | 6.006 | 2.632 | 2.28 | 2.811 | 0.14% | -| !selectedPatElectronsLoosePFlow.EcalIso | 6.007 | 2.122 | 2.83 | 2.822 | 0.12% | -| !selectedPatElectronsLoosePFlow.EcalIso03 | 6.007 | 2.136 | 2.81 | 2.830 | 0.12% | -| !selectedPatElectronsLoosePFlow.EcalIsoHeep | 6.007 | 2.136 | 2.81 | 2.838 | 0.12% | -| !selectedPatElectronsLoosePFlow.Energy | 6.007 | 2.934 | 2.05 | 2.818 | 0.16% | -| !selectedPatElectronsLoosePFlow.EoverP | 6.007 | 2.093 | 2.87 | 2.818 | 0.11% | -| !selectedPatElectronsLoosePFlow.Eta | 6.006 | 2.150 | 2.79 | 2.807 | 0.12% | -| !selectedPatElectronsLoosePFlow.GSFTrack.Charge | 5.024 | 0.975 | 5.15 | 2.854 | 0.05% | -| !selectedPatElectronsLoosePFlow.GSFTrack.Eta | 6.007 | 2.994 | 2.01 | 2.842 | 0.16% | -| !selectedPatElectronsLoosePFlow.GSFTrack.Phi | 6.007 | 2.996 | 2.00 | 2.842 | 0.16% | -| !selectedPatElectronsLoosePFlow.GSFTrack.Pt | 6.007 | 2.934 | 2.05 | 2.838 | 0.16% | -| !selectedPatElectronsLoosePFlow.GSFTrack.Theta | 6.008 | 2.956 | 2.03 | 2.850 | 0.16% | -| !selectedPatElectronsLoosePFlow.GSFTrack.d0 | 6.007 | 2.967 | 2.02 | 2.838 | 0.16% | -| !selectedPatElectronsLoosePFlow.HcalIso | 6.007 | 1.839 | 3.27 | 2.822 | 0.10% | -| !selectedPatElectronsLoosePFlow.HcalIso03 | 6.007 | 1.678 | 3.58 | 2.830 | 0.09% | -| !selectedPatElectronsLoosePFlow.HcalIsoD1Heep | 6.008 | 1.672 | 3.59 | 2.846 | 0.09% | -| !selectedPatElectronsLoosePFlow.HcalIsoD2Heep | 6.008 | 0.979 | 6.14 | 2.846 | 0.05% | -| !selectedPatElectronsLoosePFlow.HoE | 6.006 | 1.505 | 3.99 | 2.807 | 0.08% | -| !selectedPatElectronsLoosePFlow.MissingHits | 5.023 | 0.898 | 5.60 | 2.838 | 0.05% | -| !selectedPatElectronsLoosePFlow.PFGammaIso | 6.007 | 1.956 | 3.07 | 2.834 | 0.11% | -| !selectedPatElectronsLoosePFlow.PassID | 5.023 | 0.894 | 5.62 | 2.818 | 0.05% | -| !selectedPatElectronsLoosePFlow.PfChargedHadronIso | 6.008 | 2.016 | 2.98 | 2.865 | 0.11% | -| !selectedPatElectronsLoosePFlow.PfNeutralHadronIso | 6.008 | 1.521 | 3.95 | 2.865 | 0.08% | -| !selectedPatElectronsLoosePFlow.Phi | 6.006 | 2.159 | 2.78 | 2.807 | 0.12% | -| !selectedPatElectronsLoosePFlow.Pt | 6.006 | 2.075 | 2.90 | 2.803 | 0.11% | -| !selectedPatElectronsLoosePFlow.Px | 6.006 | 2.988 | 2.01 | 2.803 | 0.16% | -| !selectedPatElectronsLoosePFlow.Py | 6.006 | 2.987 | 2.01 | 2.803 | 0.16% | -| !selectedPatElectronsLoosePFlow.Pz | 6.006 | 2.992 | 2.01 | 2.803 | 0.16% | -| !selectedPatElectronsLoosePFlow.SCEta | 6.007 | 2.991 | 2.01 | 2.814 | 0.16% | -| !selectedPatElectronsLoosePFlow.SCPhi | 6.007 | 3.005 | 2.00 | 2.814 | 0.16% | -| !selectedPatElectronsLoosePFlow.SCPt | 6.006 | 2.929 | 2.05 | 2.811 | 0.16% | -| !selectedPatElectronsLoosePFlow.SCRawEnergy | 6.007 | 2.559 | 2.35 | 2.838 | 0.14% | -| !selectedPatElectronsLoosePFlow.SigmaEtaEta | 6.007 | 2.044 | 2.94 | 2.838 | 0.11% | -| !selectedPatElectronsLoosePFlow.SigmaIEtaIEta | 6.008 | 2.044 | 2.94 | 2.846 | 0.11% | -| !selectedPatElectronsLoosePFlow.TrkIso | 6.007 | 1.741 | 3.45 | 2.818 | 0.09% | -| !selectedPatElectronsLoosePFlow.TrkIso03 | 6.007 | 1.635 | 3.67 | 2.826 | 0.09% | -| !selectedPatElectronsLoosePFlow.TrkIsoHeep | 6.007 | 1.635 | 3.67 | 2.834 | 0.09% | -| !selectedPatElectronsLoosePFlow.Vertex.X | 6.007 | 1.963 | 3.06 | 2.826 | 0.11% | -| !selectedPatElectronsLoosePFlow.Vertex.Y | 6.007 | 1.937 | 3.10 | 2.826 | 0.11% | -| !selectedPatElectronsLoosePFlow.Vertex.Z | 6.007 | 2.170 | 2.77 | 2.826 | 0.12% | -| !selectedPatElectronsLoosePFlow.VtxDistXY | 6.007 | 2.990 | 2.01 | 2.830 | 0.16% | -| !selectedPatElectronsLoosePFlow.VtxDistZ | 6.007 | 2.988 | 2.01 | 2.826 | 0.16% | -| !selectedPatElectronsLoosePFlow.VtxIndex | 5.023 | 0.886 | 5.67 | 2.826 | 0.05% | -| !selectedPatElectronsLoosePFlow.closestCtfTrackRef | 5.024 | 1.410 | 3.56 | 2.865 | 0.08% | -| !selectedPatElectronsLoosePFlow.dB | 6.006 | 2.948 | 2.04 | 2.803 | 0.16% | -| !selectedPatElectronsLoosePFlow.eSeedClusterOverPout | 6.008 | 2.121 | 2.83 | 2.873 | 0.12% | -| !selectedPatElectronsLoosePFlow.fbrem | 6.007 | 2.106 | 2.85 | 2.814 | 0.11% | -| !selectedPatElectronsLoosePFlow.shFracInnerHits | 6.008 | 0.991 | 6.06 | 2.854 | 0.05% | -| *Total* | 306.464 | 110.976 | 2.76 | 4514.554 | 6.05% | -%ENDTWISTY% - ----+++ selectedPatMuons -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *selectedPatMuons* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !selectedPatMuons.Charge | 4.409 | 0.871 | 5.06 | 2.764 | 0.05% | -| !selectedPatMuons.CocktailCharge | 4.410 | 0.872 | 5.06 | 2.795 | 0.05% | -| !selectedPatMuons.CocktailEta | 4.781 | 1.679 | 2.85 | 2.783 | 0.09% | -| !selectedPatMuons.CocktailGlobalChi2 | 4.782 | 1.362 | 3.51 | 2.811 | 0.07% | -| !selectedPatMuons.CocktailP | 4.781 | 1.652 | 2.89 | 2.775 | 0.09% | -| !selectedPatMuons.CocktailPhi | 4.781 | 1.679 | 2.85 | 2.783 | 0.09% | -| !selectedPatMuons.CocktailPt | 4.781 | 1.652 | 2.89 | 2.779 | 0.09% | -| !selectedPatMuons.CocktailTrkD0 | 4.782 | 1.668 | 2.87 | 2.791 | 0.09% | -| !selectedPatMuons.CocktailTrkD0Error | 4.782 | 1.645 | 2.91 | 2.811 | 0.09% | -| !selectedPatMuons.CocktailTrkDz | 4.782 | 1.682 | 2.84 | 2.791 | 0.09% | -| !selectedPatMuons.CocktailTrkDzError | 4.782 | 1.648 | 2.90 | 2.811 | 0.09% | -| !selectedPatMuons.CocktailTrkHits | 4.410 | 1.024 | 4.31 | 2.799 | 0.06% | -| !selectedPatMuons.EcalIso | 4.781 | 1.325 | 3.61 | 2.768 | 0.07% | -| !selectedPatMuons.EcalIso03 | 4.781 | 1.325 | 3.61 | 2.775 | 0.07% | -| !selectedPatMuons.Energy | 4.781 | 1.654 | 2.89 | 2.764 | 0.09% | -| !selectedPatMuons.Eta | 4.780 | 1.392 | 3.43 | 2.752 | 0.08% | -| !selectedPatMuons.GlobalChi2 | 4.781 | 1.365 | 3.50 | 2.779 | 0.07% | -| !selectedPatMuons.HOIso | 4.781 | 0.845 | 5.66 | 2.760 | 0.05% | -| !selectedPatMuons.HcalIso | 4.781 | 1.214 | 3.94 | 2.768 | 0.07% | -| !selectedPatMuons.HcalIso03 | 4.781 | 1.214 | 3.94 | 2.775 | 0.07% | -| !selectedPatMuons.P | 4.780 | 1.651 | 2.90 | 2.744 | 0.09% | -| !selectedPatMuons.Phi | 4.780 | 1.394 | 3.43 | 2.752 | 0.08% | -| !selectedPatMuons.Pt | 4.780 | 1.356 | 3.52 | 2.748 | 0.07% | -| !selectedPatMuons.Px | 4.780 | 1.674 | 2.85 | 2.748 | 0.09% | -| !selectedPatMuons.Py | 4.780 | 1.675 | 2.85 | 2.748 | 0.09% | -| !selectedPatMuons.Pz | 4.780 | 1.677 | 2.85 | 2.748 | 0.09% | -| !selectedPatMuons.TrkD0 | 4.781 | 1.667 | 2.87 | 2.760 | 0.09% | -| !selectedPatMuons.TrkD0Error | 4.781 | 1.643 | 2.91 | 2.779 | 0.09% | -| !selectedPatMuons.TrkDz | 4.781 | 1.681 | 2.84 | 2.760 | 0.09% | -| !selectedPatMuons.TrkDzError | 4.781 | 1.648 | 2.90 | 2.779 | 0.09% | -| !selectedPatMuons.TrkHits | 4.409 | 0.954 | 4.62 | 2.768 | 0.05% | -| !selectedPatMuons.TrkIso | 4.781 | 1.262 | 3.79 | 2.764 | 0.07% | -| !selectedPatMuons.TrkIso03 | 4.781 | 1.262 | 3.79 | 2.771 | 0.07% | -| !selectedPatMuons.VtxDistXY | 4.781 | 1.675 | 2.85 | 2.775 | 0.09% | -| !selectedPatMuons.VtxDistZ | 4.781 | 1.676 | 2.85 | 2.771 | 0.09% | -| !selectedPatMuons.VtxIndex | 4.409 | 0.832 | 5.30 | 2.771 | 0.05% | -| !selectedPatMuons.isGoodGlobalMuon | 4.410 | 0.830 | 5.31 | 2.803 | 0.05% | -| *Total* | 170.260 | 51.455 | 3.31 | 4276.889 | 2.81% | -%ENDTWISTY% - ----+++ selectedPatMuonsLoosePFlow -%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}% -| *selectedPatMuonsLoosePFlow* |||||| -| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* | -| !selectedPatMuonsLoosePFlow.Charge | 4.177 | 0.800 | 5.22 | 2.783 | 0.04% | -| !selectedPatMuonsLoosePFlow.CocktailCharge | 4.178 | 0.801 | 5.22 | 2.814 | 0.04% | -| !selectedPatMuonsLoosePFlow.CocktailEta | 4.316 | 1.129 | 3.82 | 2.803 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailGlobalChi2 | 4.317 | 0.993 | 4.35 | 2.830 | 0.05% | -| !selectedPatMuonsLoosePFlow.CocktailP | 4.316 | 1.116 | 3.87 | 2.795 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailPhi | 4.316 | 1.130 | 3.82 | 2.803 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailPt | 4.316 | 1.117 | 3.86 | 2.799 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailTrkD0 | 4.316 | 1.124 | 3.84 | 2.811 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailTrkD0Error | 4.317 | 1.112 | 3.88 | 2.830 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailTrkDz | 4.316 | 1.129 | 3.82 | 2.811 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailTrkDzError | 4.317 | 1.116 | 3.87 | 2.830 | 0.06% | -| !selectedPatMuonsLoosePFlow.CocktailTrkHits | 4.178 | 0.862 | 4.85 | 2.818 | 0.05% | -| !selectedPatMuonsLoosePFlow.EcalIso | 4.315 | 0.929 | 4.64 | 2.787 | 0.05% | -| !selectedPatMuonsLoosePFlow.EcalIso03 | 4.316 | 0.930 | 4.64 | 2.795 | 0.05% | -| !selectedPatMuonsLoosePFlow.Energy | 4.315 | 1.117 | 3.86 | 2.783 | 0.06% | -| !selectedPatMuonsLoosePFlow.Eta | 4.315 | 1.001 | 4.31 | 2.771 | 0.05% | -| !selectedPatMuonsLoosePFlow.GlobalChi2 | 4.316 | 0.992 | 4.35 | 2.799 | 0.05% | -| !selectedPatMuonsLoosePFlow.HOIso | 4.315 | 0.777 | 5.55 | 2.779 | 0.04% | -| !selectedPatMuonsLoosePFlow.HcalIso | 4.315 | 0.838 | 5.15 | 2.787 | 0.05% | -| !selectedPatMuonsLoosePFlow.HcalIso03 | 4.316 | 0.838 | 5.15 | 2.795 | 0.05% | -| !selectedPatMuonsLoosePFlow.P | 4.315 | 1.116 | 3.87 | 2.764 | 0.06% | -| !selectedPatMuonsLoosePFlow.PFGammaIso | 4.316 | 0.904 | 4.77 | 2.799 | 0.05% | -| !selectedPatMuonsLoosePFlow.PfChargedHadronIso | 4.317 | 0.919 | 4.70 | 2.830 | 0.05% | -| !selectedPatMuonsLoosePFlow.PfNeutralHadronIso | 4.317 | 0.819 | 5.27 | 2.830 | 0.04% | -| !selectedPatMuonsLoosePFlow.Phi | 4.315 | 1.002 | 4.31 | 2.771 | 0.05% | -| !selectedPatMuonsLoosePFlow.Pt | 4.315 | 0.989 | 4.36 | 2.768 | 0.05% | -| !selectedPatMuonsLoosePFlow.Px | 4.315 | 1.125 | 3.84 | 2.768 | 0.06% | -| !selectedPatMuonsLoosePFlow.Py | 4.315 | 1.125 | 3.84 | 2.768 | 0.06% | -| !selectedPatMuonsLoosePFlow.Pz | 4.315 | 1.126 | 3.83 | 2.768 | 0.06% | -| !selectedPatMuonsLoosePFlow.TrkD0 | 4.315 | 1.123 | 3.84 | 2.779 | 0.06% | -| !selectedPatMuonsLoosePFlow.TrkD0Error | 4.316 | 1.110 | 3.89 | 2.799 | 0.06% | -| !selectedPatMuonsLoosePFlow.TrkDz | 4.315 | 1.128 | 3.82 | 2.779 | 0.06% | -| !selectedPatMuonsLoosePFlow.TrkDzError | 4.316 | 1.114 | 3.87 | 2.799 | 0.06% | -| !selectedPatMuonsLoosePFlow.TrkHits | 4.177 | 0.836 | 5.00 | 2.787 | 0.05% | -| !selectedPatMuonsLoosePFlow.TrkIso | 4.315 | 0.871 | 4.95 | 2.783 | 0.05% | -| !selectedPatMuonsLoosePFlow.TrkIso03 | 4.315 | 0.871 | 4.95 | 2.791 | 0.05% | -| !selectedPatMuonsLoosePFlow.VtxDistXY | 4.316 | 1.125 | 3.84 | 2.795 | 0.06% | -| !selectedPatMuonsLoosePFlow.VtxDistZ | 4.315 | 1.125 | 3.84 | 2.791 | 0.06% | -| !selectedPatMuonsLoosePFlow.VtxIndex | 4.177 | 0.784 | 5.32 | 2.791 | 0.04% | -| !selectedPatMuonsLoosePFlow.isGoodGlobalMuon | 4.178 | 0.785 | 5.32 | 2.822 | 0.04% | -%ENDTWISTY% ----+++ Biggest consumers -| *Name* | *Compressed size (MB)* | *Fraction of file size* | -| !GenParticle.Py | 51.942 | 2.833% | -| !GenParticle.Px | 51.941 | 2.833% | -| !GenParticle.Pz | 51.596 | 2.814% | -| !GenParticle.Energy | 50.883 | 2.775% | -| !GenParticle.Eta | 32.061 | 1.748% | -| !GenParticle.Phi | 31.726 | 1.730% | -| !GenParticle.Pt | 30.338 | 1.654% | -| !GenJet.Pz | 13.966 | 0.762% | -| !GenJet.Py | 13.951 | 0.761% | -| !GenJet.Px | 13.951 | 0.761% | diff --git a/scripts_old/mergeROOTFilesWithCompression.py b/scripts_old/mergeROOTFilesWithCompression.py deleted file mode 100644 index 07a1ea4a..00000000 --- a/scripts_old/mergeROOTFilesWithCompression.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/env - -import os -import sys -from fileInfo import * -from optparse import OptionParser -import time - -skipGroupsUntil = 0 -startWithGroup = 1 -sizePerFile = 1024 * 1024 * 1024 * 2 -timeCut = 0 - -def groupFilesToSize(files, finalSize=1024 * 1024 * 1024 * 2):# < 2 GB - getsize = os.path.getsize - groupSize = 0 - groups = [[]] - groupIndex = 0 - for file in sorted(files): - if os.path.getmtime(file) < timeCut: - continue - size = getsize(file) - if (groupSize + size) > finalSize:#start new group - groupIndex += 1 - groups.append([]) - groupSize = 0 - groupSize += size - groups[groupIndex].append(file) - return groups - -def fuseFiles(groupedFiles): - group = startWithGroup - - for files in groupedFiles: - outputFile = getProcess(files[0]) + '_merged_%03d' % group - outputFile += '.root' - command = 'hadd -f7 %s ' % outputFile - for file in files: - command += file + ' ' - command.rstrip(' ') - print '=' * 100 - print '*' * 100 - if group > skipGroupsUntil: - print 'Executing:' - else: - print 'Skipping:' - print command - print '*' * 100 - print '=' * 100 - if group > skipGroupsUntil: - os.system(command) - group += 1 - -def getProcess(filepath): - file = filepath.split('/')[-1] - a = file.split('_') - process = 'default' - if len(a) <= 5: - process = a[0] + '_' + a[1] - else: - process = a[0] - for token in a[1:-3]: - process += '_' + token - return process - - -def removeUsedFiles(allFiles, usedFiles): - allFiles = set(allFiles) - usedFiles = set(usedFiles) - return allFiles.difference(usedFiles) - -def readMergeLog(mergeLog): - usedFiles = [] - mergeLog = file(mergeLog) - lastOutputFileNumber = 0 - for line in mergeLog.readlines(): - if line.startswith('Source file'): - input = line.split(' ') - inputfile = input[3].replace('\n', '') - usedFiles.append(inputfile) - - if line.startswith('hadd'): - input = line.split(' ') - outputfile = input[2] - number = outputfile.replace('.root', '') - number = number.split('_')[-1] - lastOutputFileNumber = int(number) - global startWithGroup - startWithGroup = lastOutputFileNumber + 1 - return usedFiles - -if __name__ == "__main__": - - parser = OptionParser() - parser.add_option("-s", "--size", dest="sizePerFile", default=1024 * 2, - help="Set maximum size of output files in MB. Default 2 GB (2048 MB)") - parser.add_option("-t", "--time", dest="timeCut", default='01 01 2000', - help="Cut on creation time. Only consider files for merging after a certain date. Format: DD MM YYYY. Default: 01 Jan 2000") - parser.add_option("-c", "--continue", - action="store_true", dest="continue", default=False, - help="Continue merging in the current directory. Merge log must be specified!") - parser.add_option("-l", "--log", dest="mergeLog", default='merge.log', - help="Merge log to be used for continuation.") - - (options, args) = parser.parse_args() - sizePerFile = 1024 * 1024 * options.sizePerFile - timeCut = time.mktime(time.strptime(options.timeCut, '%d %m %Y')) - - continueLastMerge = False - allButUsedFiles = [] - groupedFiles = [] - - args = sys.argv - if not len(args) >= 2: - print "Please specify a folder to merge files in." - sys.exit() - - path = sys.argv[1] - files = getROOTFiles(path) - uniqueFiles = getUniqueFiles(files) - - if len(args) == 3: - continueLastMerge = True - mergeLog = sys.argv[2] - usedFiles = readMergeLog(mergeLog) - allButUsedFiles = removeUsedFiles(uniqueFiles, usedFiles) - - if not continueLastMerge: - groupedFiles = groupFilesToSize(uniqueFiles, sizePerFile) - else: - groupedFiles = groupFilesToSize(allButUsedFiles, sizePerFile) - - print 'Total number of files:', len(files) - print 'Total number of unique files:', len(uniqueFiles) - if continueLastMerge: - print 'Total number of remaining files:', len(allButUsedFiles) - print 'Process recognised:', getProcess(files[0]) - print 'Number of merged files to be produced:', len(groupedFiles) - - fuseFiles(groupedFiles) diff --git a/scripts_old/nTupleInfo.py b/scripts_old/nTupleInfo.py deleted file mode 100644 index 4cbba34d..00000000 --- a/scripts_old/nTupleInfo.py +++ /dev/null @@ -1,136 +0,0 @@ -''' -Created on Mar 5, 2011 - -@author: lkreczko -''' -from __future__ import division -from ROOT import * -import sys, os -from math import sqrt - -def getBranchInfo(listOfBranches): - branches = [] - bapp = branches.append - for branch in listOfBranches: - info = {} - info['name'] = branch.GetName() - info['totalSize'] = branch.GetTotalSize() - info['totalBytes'] = branch.GetTotBytes() - info['zippedBytes'] = branch.GetZipBytes() - bapp(info) - return branches - - -def printTwikiTable(branches, filesize): - - prevObj = ' ' - info = {} - info['totalSize'] = 0 - info['zippedBytes'] = 0 - info['totalBytes'] = 0 - for branch in sorted(branches): - name = branch['name'] - size = branch['totalSize'] / 1024 / 1024 #MB - zipSize = branch['zippedBytes'] / 1024 / 1024#MB - compression = size / zipSize - totalBytes = branch['totalBytes'] / 1024 / 1024#MB - buffer = (size - totalBytes) * 1024#KB - fraction = zipSize / filesize * 100#% - - obj = ' ' - if '.' in name: - obj = name.split('.')[0] + '.' - else: - obj = name.capitalize() - - if not name.startswith(prevObj): - if '.' in prevObj: - Osize = info['totalSize'] - OzipSize = info['zippedBytes'] - Ocompression = Osize / OzipSize - Obuffer = (size - info['totalBytes'] / 1024 / 1024) * 1024#KB - Ofraction = OzipSize / filesize * 100 - - print '| *Total* | %.3f | %.3f | %.2f | %.3f | %.2f%% |' % (Osize, OzipSize, Ocompression, Obuffer, Ofraction) - print '%ENDTWISTY%' - print - #print summary - print '---+++ %s' % obj.replace('.', '') - print '%TWISTY{mode="div" showlink="Show " hidelink="Hide " firststart="hide" showimgright="%ICONURLPATH{toggleopen-small}%" hideimgright="%ICONURLPATH{toggleclose-small}%"}%' - print '| *%s* ||||||' % obj.replace('.', '') - print '| *Name* | *Total Size (MB)* | *Compressed size (MB)* | *compression factor* | *Buffer (KB)* | *Fraction of file size* |' - info['totalSize'] = 0 - info['zippedBytes'] = 0 - info['totalBytes'] = 0 - else: - info['totalSize'] += size - info['zippedBytes'] += zipSize - info['totalBytes'] += totalBytes - print '| !%s | %.3f | %.3f | %.2f | %.3f | %.2f%% |' % (name, size, zipSize, compression, buffer, fraction) - prevObj = obj - print '%ENDTWISTY%' - -def printBiggestConsumers(branches, filesize): - consumers = [] - for branch in sorted(branches): - consumer = {} - zipSize = branch['zippedBytes'] / 1024 / 1024#MB - fraction = zipSize / filesize * 100#% - consumer[branch['zippedBytes']] = branch - consumers.append(consumer) - top = 10 - current = 1 - - print '| *Name* | *Compressed size (MB)* | *Fraction of file size* |' - for consumer in sorted(consumers, reverse=True): - if current > top: - break - - current += 1 - branch = consumer[consumer.keys()[0]] - zipSize = branch['zippedBytes'] / 1024 / 1024#MB - print '| !%s | %.3f | %.3f%% |' %(branch['name'], zipSize, zipSize / filesize * 100)#%) -# print branch['name'], zipSize, zipSize / filesize * 100#% - -def getTriggers(chain): - for event in chain: - triggers = event.__getattr__("Trigger.HLTNames") - for trigger in triggers: - if not 'not found' in trigger: - print ' * ' + trigger - break - -if __name__ == '__main__': - gROOT.SetBatch(1); - chain = TChain("rootTupleTree/tree"); - filesize = 0 - - if len(sys.argv) < 2: - print 'wrong usage' - - files = sys.argv[1:] - add = chain.Add - size = os.path.getsize - - for file in files: - add(file) - filesize += size(file) - - filesize = filesize/ 1024 / 1024#MB - - branches = getBranchInfo(chain.GetListOfBranches()) - numberOfEvents = chain.GetEntries() - if '_data_' in files[0]: - print '---++ DATA content' - else: - print '---++ MC content' - - sizePerEvent = filesize/numberOfEvents*1024 - print 'Size of event: %.3f KB +- %.3f' % (sizePerEvent, 1/sqrt(numberOfEvents)*sizePerEvent) - printTwikiTable(branches, filesize) - - print '---+++ Biggest consumers' - printBiggestConsumers(branches, filesize) - - print '---+++ Available Triggers' - getTriggers(chain) diff --git a/scripts_old/plotMttbar.py b/scripts_old/plotMttbar.py deleted file mode 100644 index b5f5cf74..00000000 --- a/scripts_old/plotMttbar.py +++ /dev/null @@ -1,915 +0,0 @@ -from __future__ import division -from numpy import arange -from tdrStyle import * -from ROOT import * -from ROOT import kAzure, kYellow, kViolet, kRed, gROOT, kMagenta, kGreen, TLegend, THStack, TCanvas, gStyle, kGray, TH1F, gPad -#from QCDEstimation import getQCDEstimate#, estimateQCDFor -import QCDEstimation -import sys -sys.path.insert(0, '../python/') -from DataSetInfo_8TeV import * - -import HistPlotter -import HistGetter -import inputFiles - -from optparse import OptionParser -canvases = [] -scanvases = [] -setLogY = False -normalise = False -drawQCDError = False -custom_suffix = '' -#custom_suffix = '68000mb' -#custom_suffix = '64600mb' -#custom_suffix = '71400mb' -used_data = 'SingleMuon' -def plotMttbar(): - global used_data - saveAs = HistPlotter.saveAs - savePath = "/storage/TopQuarkGroup/results/plots/2012_v9a" - - performRescale = False - HistPlotter.setStyle() - lumi = 5814#5050.0#1959.75#1611.95 - oldLumi = 10000#5050#/(0.95**2) -# scale = 0.15#lumi / oldLumi; - - outputFormats = [ - 'pdf' - ] - reverseMCOrder = False -# qcdFromData = 'topReconstruction/backgroundShape/mttbar_conversions_withMETAndAsymJets_0orMoreBtag' - - hists = []; - ttbarUncertainty = 0.1 - - - hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/Electron/electron_AbsEta') - hists.append('TTbarPlusMetAnalysis/EPlusJets/QCDConversions/Electron/electron_AbsEta') - hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/Electron/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets, non iso trigger/Electron/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCDAntiID/Electron/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCDNoIsoNoID/Electron/electron_AbsEta') -# - hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/Electron/electron_pT') - hists.append('TTbarPlusMetAnalysis/EPlusJets/QCDConversions/Electron/electron_pT') - hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/Electron/electron_pT') -# -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/Electron/electron_pfIsolation_03') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03') -# -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_patType1CorrectedPFMet_bin_0-25/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_patType1CorrectedPFMet_bin_25-45/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_patType1CorrectedPFMet_bin_45-70/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_patType1CorrectedPFMet_bin_70-100/electron_AbsEta') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/BinnedMETAnalysis/Electron_patType1CorrectedPFMet_bin_100-inf/electron_AbsEta') -# -# -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/bjet_invariant_mass') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1CorrectedPFMet/MET') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1CorrectedPFMet/MET_phi') -# - hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patMETsPFlow/MET') - hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patMETsPFlow/MET_phi') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1p2CorrectedPFMet/MET') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1p2CorrectedPFMet/MET_phi') -# -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCDConversions/MET/patType1CorrectedPFMet/MET') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/QCD non iso e+jets/MET/patType1CorrectedPFMet/MET') -## -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1CorrectedPFMet/Transverse_Mass') -# hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/MET/patType1CorrectedPFMet/Angle_lepton_MET') -# -# hists.append('MttbarAnalysis/ElectronPlusJets/Ref selection/FourJetChi2/m3') -# hists.append('MttbarAnalysis/ElectronPlusJets/Ref selection/FourJetChi2/hadronicTopMass') -# hists.append('MttbarAnalysis/ElectronPlusJets/Ref selection/FourJetChi2/hadronicWMass') - - hists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/Jets/N_Jets') - - hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/Muon/muon_AbsEta') - hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/Muon/muon_AbsEta') -## -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_patType1CorrectedPFMet_bin_0-25/muon_AbsEta') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_patType1CorrectedPFMet_bin_25-45/muon_AbsEta') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_patType1CorrectedPFMet_bin_45-70/muon_AbsEta') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_patType1CorrectedPFMet_bin_70-100/muon_AbsEta') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/BinnedMETAnalysis/Muon_patType1CorrectedPFMet_bin_100-inf/muon_AbsEta') -### -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/bjet_invariant_mass') - hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patMETsPFlow/MET') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1CorrectedPFMet/MET') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1p2CorrectedPFMet/MET') - hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patMETsPFlow/MET_phi') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1CorrectedPFMet/MET_phi') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1p2CorrectedPFMet/MET_phi') -# -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/MET/patMETsPFlow/MET') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/MET/patType1CorrectedPFMet/MET') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/MET/patType1p2CorrectedPFMet/MET') -## -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD non iso mu+jets/Muon/muon_pfIsolation_04') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/QCD mu+jets PFRelIso/Muon/muon_pfIsolation_04') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1CorrectedPFMet/Transverse_Mass') -# hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/MET/patType1CorrectedPFMet/Angle_lepton_MET') -# -# hists.append('MttbarAnalysis/MuonPlusJets/Ref selection/FourJetChi2/m3') -# hists.append('MttbarAnalysis/MuonPlusJets/Ref selection/FourJetChi2/hadronicTopMass') -# hists.append('MttbarAnalysis/MuonPlusJets/Ref selection/FourJetChi2/hadronicWMass') - hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/Jets/N_Jets') - hists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/Muon/muon_pT') - - - files = inputFiles.files - hists = HistGetter.getHistsFromFiles(hists, files, bJetBins=[ -# '0orMoreBtag', -# '0btag', -# '1btag', - '2orMoreBtags', -# '4orMoreBtags' - ]) - otherHists = [] - otherHists.append('EventCount/TTbarMuPlusJetsRefSelection') - otherHists.append('EventCount/TTbarEplusJetsRefSelection') - otherHists.append('EventCount/TTbarMuPlusJetsRefSelectionUnweighted') - otherHists.append('EventCount/TTbarEplusJetsRefSelectionUnweighted') -# otherHists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/Vertices/nVertex') -# otherHists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/Vertices/nVertex_reweighted') -# -# otherHists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/N_BJets') -# otherHists.append('TTbarPlusMetAnalysis/EPlusJets/Ref selection/N_BJets_reweighted') - - -# otherHists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/Vertices/nVertex') -# otherHists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/Vertices/nVertex_reweighted') -# -# otherHists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/N_BJets') -# otherHists.append('TTbarPlusMetAnalysis/MuPlusJets/Ref selection/N_BJets_reweighted') - - - if len(otherHists) > 0: - otherHists = HistGetter.getHistsFromFiles(otherHists, files) - hists = HistGetter.joinHistogramDictionaries([hists, - otherHists]) - gcd = gROOT.cd - - reverseMCOrdertmp = reverseMCOrder - for histname in hists[hists.keys()[0]]: - reverseMCOrder = reverseMCOrdertmp - print '=' * 70 - print 'Plotting:', histname - gcd() - if 'MuPlusJets' in histname or 'Muon' in histname: - used_data = 'SingleMu' - else: - used_data = 'SingleElectron' - hist_data = hists[used_data][histname] - - for dataset in hists: - if not 'Single' in dataset: - scale = lumi * datasetInfo[dataset]['cross-section']/datasetInfo[dataset]['NumberOfProcessedEvents'] -# print dataset, '[', histname, '] is scaled by ', scale - hists[dataset][histname].Scale(scale) - - hist_ttbar = hists['TTJet'][histname] - #hist_wjets = hists['WJetsToLNu'][histname] - hist_wjets = hists['W1Jet'][histname] - hist_wjets += hists['W2Jets'][histname] - hist_wjets += hists['W3Jets'][histname] - hist_wjets += hists['W4Jets'][histname] - #hist_zjets = hists['DYJetsToLL'][histname] - hist_zjets = hists['DY1JetsToLL'][histname] - hist_zjets += hists['DY2JetsToLL'][histname] - hist_zjets += hists['DY3JetsToLL'][histname] - hist_zjets += hists['DY4JetsToLL'][histname] - -# hist_muQCD = hists['QCD_Pt-20_MuEnrichedPt-15'][histname] - hist_muQCD = hists['QCD_Pt-15to20_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-20to30_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-30to50_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-50to80_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-80to120_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-120to170_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-170to300_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-300to470_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-470to600_MuEnrichedPt5'][histname] -# hist_muQCD += hists['QCD_Pt-600to800_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-800to1000_MuEnrichedPt5'][histname] - hist_muQCD += hists['QCD_Pt-1000_MuEnrichedPt5'][histname] - hist_bce1 = hists['QCD_Pt_20_30_BCtoE'][histname] - hist_bce2 = hists['QCD_Pt_30_80_BCtoE'][histname] - hist_bce3 = hists['QCD_Pt_80_170_BCtoE'][histname] - hist_bce4 = hists['QCD_Pt_170_250_BCtoE'][histname] - hist_bce5 = hists['QCD_Pt_250_350_BCtoE'][histname] - hist_bce6 = hists['QCD_Pt_350_BCtoE'][histname] - hist_enri1 = hists['QCD_Pt_20_30_EMEnriched'][histname] - hist_enri2 = hists['QCD_Pt_30_80_EMEnriched'][histname] - hist_enri3 = hists['QCD_Pt_80_170_EMEnriched'][histname] - hist_enri4 = hists['QCD_Pt_170_250_EMEnriched'][histname] - hist_enri5 = hists['QCD_Pt_250_350_EMEnriched'][histname] - hist_enri6 = hists['QCD_Pt_350_EMEnriched'][histname] - hist_pj4 = hists['GJets_HT-200To400'][histname] - hist_pj5 = hists['GJets_HT-400ToInf'][histname] - hist_singleTop = hists['T_tW-channel'][histname] + hists['T_t-channel'][histname] + hists['T_s-channel'][histname] - hist_singleTop += hists['Tbar_t-channel'][histname] + hists['Tbar_s-channel'][histname] + hists['Tbar_tW-channel'][histname] - - #hist_diboson = hists['ww'][histname] + hists['wz'][histname] + hists['zz'][histname] - -# hist_ttbarZ = hists['TTbarZIncl'][histname] -# hist_ttbarW = hists['TTbarInclWIncl'][histname] - - hist_qcd = hist_bce1 + hist_bce2 + hist_bce3 + hist_bce4 + hist_bce5 + hist_bce6 - hist_qcd += hist_enri1 + hist_enri2 + hist_enri3 + hist_enri4 + hist_enri5 + hist_enri6 - hist_qcd += hist_pj4 + hist_pj5 - - nqcd = hist_qcd.Integral(); - shapeErrorHist = None - errorHist = None - relativeQCDEstimationError = 0 - #TODO: fix this for muon+jets - if 'EPlusJets' in histname or 'Electron' in histname: - qcdFromMCPlots = 'QCD' in histname or 'Vertices' in histname or 'jets' in histname.split('/')[-1].lower() or 'bjet_invariant_mass' in histname - if ('MttbarAnalysis' in histname or 'TTbarPlusMetAnalysis' in histname): - qcdRateEstimate = 'TTbarPlusMetAnalysis/EPlusJets/QCD e+jets PFRelIso/Electron/electron_pfIsolation_03' - currentBin = HistPlotter.getBjetBin(histname) - estimate, err = QCDEstimation.getQCDEstimate(files[used_data], - bjetBin=currentBin, - histogramForEstimation=qcdRateEstimate, - function='expo') - if not estimate == 0: - relativeQCDEstimationError = err / estimate - print 'Estimated QCD background: %.1f +- %.1f' % (estimate, err) - if(hist_qcd.Integral() > 0 and estimate >= 0): - hist_qcd.Scale(estimate / hist_qcd.Integral()) - - if not qcdFromMCPlots:#take QCD shape from data - currentBin = HistPlotter.getBjetBin(histname) - qcdShapeFromData = histname.replace('Ref selection', 'QCDConversions') - qcdShapeFromData = qcdShapeFromData.replace(currentBin, '0btag') - qcdShapeComparison = histname.replace('Ref selection', 'QCD non iso e+jets') - qcdShapeComparison = qcdShapeComparison.replace(currentBin, '0btag') - - print "Taking QCD shape from DATA (%s)" % qcdShapeFromData - qcdHists = HistGetter.getHistsFromFiles([qcdShapeFromData], {'data':files[used_data]}) - - nQCD = hist_qcd.Integral() - hist_qcd = qcdHists['data'][qcdShapeFromData] - nShape = hist_qcd.Integral() - if nShape > 0: - hist_qcd.Scale(nQCD / nShape) - files['data'] = files['SingleElectron'] - shapeErrorHist = QCDEstimation.getShapeErrorHistogram(files, - histogramForShape=qcdShapeFromData, - histogramForComparison=qcdShapeComparison) - - - - if 'MuPlusJets' in histname or 'Muon' in histname: - nQCD = hist_muQCD.Integral() - #scale by factor, TODO: implement on-the-fly scale factor - nMuQCD = nQCD*1.21 - print 'Estimated QCD background: %.1f' % nMuQCD - #get template from anti-isolated region - qcdFromMCPlots = 'QCD' in histname or 'Vertices' in histname or 'jets' in histname.split('/')[-1].lower() or 'bjet_invariant_mass' in histname - - if ('MttbarAnalysis' in histname or 'TTbarPlusMetAnalysis' in histname) and not qcdFromMCPlots: - qcdShapeFromData = histname.replace('Ref selection', 'QCD non iso mu+jets') - currentBin = HistPlotter.getBjetBin(histname) - qcdShapeFromData = qcdShapeFromData.replace(currentBin, '0btag') - print 'QCD shape from Data:', qcdShapeFromData - qcdHists = HistGetter.getHistsFromFiles([qcdShapeFromData], {'data':files[used_data]}) - hist_muQCD = qcdHists['data'][qcdShapeFromData] - - nShape = hist_muQCD.Integral() - if nShape > 0: - hist_muQCD.Scale(nMuQCD / nShape) - - if performRescale: - print '=' * 100 - print '"best" rescaling for', histname - rescales = rescaleMC(hist_data, hist_ttbar, hist_wjets, hist_qcd) - print rescales - print '=' * 100 - topScale = rescales[1]['ttbar'] - wjetScale = rescales[1]['wjets'] - qcdScale2 = rescales[1]['qcd'] - - hist_ttbar.Scale(topScale) - hist_wjets.Scale(wjetScale) - hist_qcd.Scale(qcdScale2) - - - - rebin = 1; - Urange = (0, 5000) - if ("mttbar" in histname): - hist_data.SetXTitle("m(t#bar{t}) [GeV]"); - rebin = 50; - hist_data.SetYTitle("Events/(%f GeV)" % hist_data.GetBinWidth(1) * rebin); - if setLogY: - Urange = (300, 3000) - else: - Urange = (300, 1500) - if "All_Electron_mvaTrigV0" in histname: - hist_data.SetXTitle("mva disc"); - hist_data.SetYTitle("Events/(0.01)"); - rebin = 1; - Urange = (-1.1, 1.1) - elif ("m3" in histname): - hist_data.SetXTitle("M3 [GeV]"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5; - Urange = (0, 500) - elif (histname == "electron_et"): - hist_data.SetXTitle("electron p_{T} [GeV]"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5; - elif ("ttbar_pt" in histname): - hist_data.SetXTitle("p_{T} of t#bar{t} system [GeV]"); - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10; - if setLogY: - Urange = (0, 700) - else: - Urange = (0, 300) - elif ("ttbar_px" in histname): - hist_data.SetXTitle("p_{x} of t#bar{t} system [GeV]"); - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10; - Urange = (0, 1000) - elif ("ttbar_py" in histname): - hist_data.SetXTitle("p_{y} of t#bar{t} system [GeV]"); - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10; - Urange = (0, 1000) - elif ("ttbar_pz" in histname): - hist_data.SetXTitle("p_{z} of t#bar{t} system [GeV]"); - hist_data.SetYTitle("Events/(50 GeV)"); - rebin = 50; - Urange = (0, 2500) - elif ("HT" in histname): - hist_data.SetXTitle("#Sigma p_{T} [GeV]"); - hist_data.SetYTitle("Events/(50 GeV)"); - rebin = 50; - Urange = (0, 2500) - elif (histname == "numberOfJets"): - hist_data.SetXTitle("number of jets"); - hist_data.SetYTitle("Events"); - elif (histname == "numberOfBJets"): - hist_data.SetXTitle("number of b-tagged jets (SSVHE medium)"); - hist_data.SetYTitle("Events"); - elif ('MET_' in histname and not 'phi' in histname and not 'Angle_lepton_MET' in histname): - hist_data.SetXTitle("E_{T}^{miss} [GeV]"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5 - if setLogY: - Urange = (200, 590) - rebin = 10 - hist_data.SetYTitle("Events/(10 GeV)") - else: - Urange = (0, 195) - elif ('MET_phi' in histname): - hist_data.SetXTitle("#phi(E_{T}^{miss})"); - hist_data.SetYTitle("Events/(0.1)"); - rebin = 1; - Urange = (-4, 4) - elif 'Angle_lepton_MET' in histname: - hist_data.SetXTitle("angle(l,E_{T}^{miss})"); - hist_data.SetYTitle("Events/0.05"); - rebin = 5; - Urange = (0, 3.2) - elif 'METsignificance' in histname: - hist_data.SetXTitle("METsignificance [GeV]"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5; - Urange = (0, 200) - elif ("mtW" in histname or 'Transverse_Mass' in histname): - hist_data.SetXTitle("transverse W-boson mass [GeV]"); - - if setLogY: - Urange = (0, 500) - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10; - else: - Urange = (0, 200) - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5; - elif ("electronD0" in histname): - hist_data.SetXTitle("electron d_{0} / cm"); - hist_data.SetYTitle("Events/(0.001 cm)"); - rebin = 10; - elif ("angleTops" in histname): - hist_data.SetXTitle("angle between top quarks"); - hist_data.SetYTitle("Events/(0.1 rad)"); - rebin = 20; - elif ("neutrino_pz" in histname): - hist_data.SetXTitle("neutrino p_{Z} [GeV]"); - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10; - Urange = (-500, 500) - elif ('hadronicTopMass' in histname or 'leptonicTopMass' in histname or 'mAllTop' in histname): - hist_data.SetXTitle("top mass [GeV]"); - if setLogY: - Urange = (0, 1000) - rebin = 10 - hist_data.SetYTitle("Events/(10 GeV)") - else: - rebin = 5 - hist_data.SetYTitle("Events/(5 GeV)") - Urange = (0, 500) - elif 'hadronicWMass' in histname: - hist_data.SetXTitle("W mass [GeV]"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5; - if setLogY: - Urange = (0, 350) - else: - Urange = (0, 200) - elif ('pt_leadingTop' in histname or 'pt_NextToLeadingTop' in histname): - hist_data.SetXTitle("top p_{T} [GeV]"); - hist_data.SetYTitle("Events/(20 GeV)"); - rebin = 20; - elif('QCDest_CombRelIso' in histname): - hist_data.SetXTitle("relative isolation"); - hist_data.SetYTitle("Events/(0.1)"); - rebin = 10; - Urange = (0, 2) - elif('pfisolation' in histname.lower()): - hist_data.SetXTitle("Relative isolation"); - hist_data.SetYTitle("Events/(0.1)"); - rebin = 10 - Urange = (0, 2) - reverseMCOrder = False - elif 'DirectionalIsolation' in histname: - hist_data.SetXTitle("directional isolation"); - hist_data.SetYTitle("Events/(0.01)"); - rebin = 10 - Urange = (0, 2) - elif 'DirectionalIsolationWithGaussianFallOff' in histname: - hist_data.SetXTitle("directional isolation"); - hist_data.SetYTitle("Events/(0.01)"); - rebin = 10 - Urange = (0, 2) - elif('diElectron' in histname): - hist_data.SetXTitle("m(ee)"); - hist_data.SetYTitle("Events/(10 GeV)"); - rebin = 10 - Urange = (50, 2000) - elif 'JetMass' in histname: - hist_data.SetXTitle("m(jet)"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5 - Urange = (0, 200) - elif 'nVertex' in histname: - Urange = (0, 21) - elif 'electron_pT' in histname: - hist_data.SetXTitle("p_{T}(e)"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5 - if setLogY: - Urange = (0, 500) - else: - print 'electron_pt, 200' - Urange = (0, 200) - elif 'muon_pT' in histname: - hist_data.SetXTitle("p_{T}(#mu)"); - hist_data.SetYTitle("Events/(5 GeV)"); - rebin = 5 - if setLogY: - Urange = (0, 500) - else: - print 'electron_pt, 200' - Urange = (0, 200) - elif 'electron_eta' in histname: - hist_data.SetYTitle("Events/(0.2)"); - rebin = 10 - Urange = (-3, 3) - elif 'N_BJets' in histname: - Urange = (0, 5) - hist_data.SetXTitle("B-tag Multiplicity"); - hist_data.SetYTitle("Events") - elif 'N_Jets' in histname: - hist_data.SetYTitle("Events"); - hist_data.SetXTitle("Jet Multiplicity"); - Urange = (4, 14) - elif 'bjet_invariant_mass' in histname: - Urange = (0, 600) - rebin = 20 - hist_data.SetYTitle("Events/(20 GeV)"); - hist_data.SetXTitle("m(b,b)"); - if 'electron_AbsEta' in histname: - hist_data.SetYTitle("Events/(0.1)"); - hist_data.SetXTitle("|#eta(e)|"); - rebin = 10 - Urange = (0, 2.5) - if 'muon_AbsEta' in histname: - hist_data.SetYTitle("Events/(0.1)"); - hist_data.SetXTitle("|#eta(#mu)|"); - rebin = 10 - Urange = (0, 2.5) - if normalise: - title = hist_data.GetYaxis().GetTitle() - title = title.replace('Events', 'normalised to unit area') - title = title.replace('events', 'normalised to unit area') - hist_data.SetYTitle(title); - hist_data.Rebin(rebin); - hist_ttbar.Rebin(rebin); - hist_wjets.Rebin(rebin); - hist_zjets.Rebin(rebin); - hist_qcd.Rebin(rebin); -# hist_ttbarW.Rebin(rebin) -# hist_ttbarZ.Rebin(rebin) - hist_muQCD.Rebin(rebin); - hist_singleTop.Rebin(rebin) -# hist_diboson.Rebin(rebin) - hist_data.SetAxisRange(Urange[0], Urange[1]); - hist_ttbar.SetAxisRange(Urange[0], Urange[1]); - hist_wjets.SetAxisRange(Urange[0], Urange[1]); - hist_zjets.SetAxisRange(Urange[0], Urange[1]); - hist_qcd.SetAxisRange(Urange[0], Urange[1]); - hist_muQCD.SetAxisRange(Urange[0], Urange[1]); - hist_singleTop.SetAxisRange(Urange[0], Urange[1]); -# hist_diboson.SetAxisRange(Urange[0], Urange[1]); - - if shapeErrorHist: - shapeErrorHist.Rebin(rebin) - shapeErrorHist.SetAxisRange(Urange[0], Urange[1]) - hist_data.SetMarkerStyle(8); - - hist_ttbar.SetFillStyle(1001); - hist_ttbar.SetFillColor(kRed + 1); -# hist_ttbar.SetLineColor(kRed + 1); - hist_wjets.SetFillStyle(1001); - hist_wjets.SetFillColor(kGreen - 3); -# hist_wjets.SetLineColor(kGreen - 3); - hist_zjets.SetFillStyle(1001); - hist_zjets.SetFillColor(kAzure - 2); -# hist_zjets.SetLineColor(kAzure - 2); - hist_qcd.SetFillStyle(1001); - hist_qcd.SetFillColor(kYellow); -# hist_qcd.SetLineColor(kYellow); - hist_muQCD.SetFillStyle(1001); - hist_muQCD.SetFillColor(kYellow); - hist_singleTop.SetFillStyle(1001); - hist_singleTop.SetFillColor(kMagenta) -# hist_singleTop.SetLineColor(kMagenta) - -# hist_diboson.SetFillStyle(1001); -# hist_diboson.SetFillColor(kWhite) -# hist_diboson.SetLineColor(kWhite) - -# hist_ttbarZ.SetLineColor(kCyan-4) -# hist_ttbarZ.SetFillStyle(4000) -# hist_ttbarZ.SetLineWidth(3) -# hist_ttbarZ.SetLineStyle(4); -# hist_ttbarW.SetLineColor(kBlue +2) -# hist_ttbarW.SetFillStyle(4000) -# hist_ttbarW.SetLineWidth(3) -# hist_ttbarW.SetLineStyle(4); - allMC = hist_ttbar.Clone('allMC') - allMC += hist_wjets + hist_zjets + hist_singleTop# + hist_diboson - if 'MuPlusJets' in histname or 'Muon' in histname: - allMC += hist_muQCD - else: - allMC += hist_qcd - -# ttbarErr = allMC.Clone('ttbar_err') -# for bin_i in range(1, ttbarErr.GetNbinsX()): -# value = hist_ttbar.GetBinContent(bin_i) -# error = value * ttbarUncertainty -# ttbarErr.SetBinError(bin_i, error) -# ttbarErr.SetFillColor(kGray +2) -# ttbarErr.SetMarkerStyle(0) -# ttbarErr.SetFillStyle(3001); - - leg = TLegend(0.696, 0.95, 0.94, 0.55) - leg.SetBorderSize(0) - leg.SetLineStyle(0) - leg.SetTextFont(42) - leg.SetFillStyle(0) - - leg.AddEntry(hist_data, "data", "P") - # leg.AddEntry(hist_data2, "data(no HLT)", "P"); - leg.AddEntry(hist_ttbar, "t#bar{t}", "f") - leg.AddEntry(hist_singleTop, "Single-Top", "f") - leg.AddEntry(hist_wjets, "W#rightarrowl#nu", "f") - leg.AddEntry(hist_zjets, "Z/#gamma*#rightarrowl^{+}l^{-}", "f") - if 'MuPlusJets' in histname or 'Muon' in histname: - leg.AddEntry(hist_muQCD, "QCD #mu Enriched", "f") - else: - leg.AddEntry(hist_qcd, "QCD/#gamma + jets", "f") -# leg.AddEntry(hist_diboson, "VV + X", "f") -# leg.AddEntry(hist_ttbarW, "t#bar{t} + W x 100", "f") -# leg.AddEntry(hist_ttbarZ, "t#bar{t} + Z x 100", "f") - #leg.AddEntry(ttbarErr, "t#bar{t} uncertainty", 'F') - - if normalise: - if 'EPlusJets' in histname or 'Electron' in histname: - normalisePlotsToUnitArea(hist_data, hist_ttbar, hist_wjets, hist_zjets, hist_singleTop, hist_qcd)#, hist_diboson) - else: - normalisePlotsToUnitArea(hist_data, hist_ttbar, hist_wjets, hist_zjets, hist_singleTop, hist_muQCD)#, hist_diboson) - - - - canvases.append(TCanvas("cname" + histname, histname, 1600, 1200)) - canvases[-1].cd().SetRightMargin(0.04); - if 'TTbarPlusMetAnalysis' in histname and not 'QCD' in histname and 'EPlusJets' in histname: -# relativeQCDEstimationError = 0 - errorHist = QCDEstimation.createErrorHistogram([hist_ttbar, hist_wjets, hist_zjets, hist_singleTop, hist_qcd], - hist_qcd, relativeQCDEstimationError, shapeErrorHist) - - hs = THStack("MC", "MC"); - if reverseMCOrder: - hs.Add(hist_ttbar); - hs.Add(hist_wjets); - hs.Add(hist_zjets); - hs.Add(hist_singleTop); - if 'MuPlusJets' in histname or 'Muon' in histname: - hs.Add(hist_muQCD); - else: - hs.Add(hist_qcd); -# hs.Add(hist_diboson); - - else: - # hs.Add(hist_diboson); - if 'MuPlusJets' in histname or 'Muon' in histname: - hs.Add(hist_muQCD); - else: - hs.Add(hist_qcd); - hs.Add(hist_zjets); - hs.Add(hist_wjets); - hs.Add(hist_singleTop); - hs.Add(hist_ttbar); - max = 0 - if hs.GetMaximum() > hist_data.GetMaximum(): - max = hs.GetMaximum() * 1.4 - else: - max = hist_data.GetMaximum() * 1.4 - hist_data.GetYaxis().SetRangeUser(0, max); - if setLogY: - hist_data.GetYaxis().SetRangeUser(0.1, max); - hist_data.Draw('error'); - hs.Draw("hist same"); -# hist_ttbarW.Draw("same") -# hist_ttbarZ.Draw("same") - setErrorX = TExec('ex1', 'gStyle->SetErrorX(0.5);') - unsetErrorX = TExec('ex2', 'gStyle->SetErrorX(0.);') -# gStyle.SetErrorX(0.5); - setErrorX.Draw() -# ttbarErr.Draw('e2 same') - unsetErrorX.Draw() -# gStyle.SetErrorX(0); - if errorHist and drawQCDError: - gStyle.SetErrorX(0.5); - errorHist.SetFillColor(kGray + 3) - errorHist.SetMarkerStyle(0) - errorHist.SetFillStyle(3001); - leg.AddEntry(errorHist, "QCD uncertainty") - errorHist.Draw('e2 same') - else: - gStyle.SetErrorX(0); - - hist_data.Draw("error same"); - leg.Draw(); - text1, text2 = HistPlotter.get_cms_label(lumiInInvPb=lumi, njet=HistPlotter.getJetBin(histname), - nbjet=HistPlotter.getBjetBin(histname), channel=HistPlotter.getChannel(histname)) - text1.Draw(); - text2.Draw(); -# - postfix = '' - if setLogY: - canvases[-1].SetLogy(1) - postfix = '_log' - if normalise: - postfix = postfix + '_norm' - if custom_suffix: - postfix += '_' + custom_suffix - - prefix = 'EPlusJets_' - if 'MuPlusJets' in histname or 'Muon' in histname: - prefix = 'MuPlusJets_' - selectionLabel = '' - if 'Ref' in histname: - selectionLabel = 'Ref_' - if 'QCDConversions' in histname: - selectionLabel = 'QCDConversions_' - if 'QCD non iso e+jets' in histname: - selectionLabel = 'AntiIsolated_' - - name = ''.join(histname[:histname.rfind('/') + 1]) + prefix + selectionLabel + ''.join(histname[histname.rfind('/') + 1:]) + postfix - #specific selections - - -# fullName = name.replace('EPlusJets', 'EPlusJets' + selectionLabel) + postfix - saveAs(canvas=canvases[-1], name=name, outputFormats=outputFormats, outputFolder=savePath) - del canvases[-1] - -# cu_hist_data = getCumulativePlot(hist_data, "data_" + histname); -# cu_hist_ttbar = getCumulativePlot(hist_ttbar, "ttbar_" + histname); -# cu_hist_wjets = getCumulativePlot(hist_wjets, "wjets_" + histname); -# cu_hist_zjets = getCumulativePlot(hist_zjets, "zjets_" + histname); -# cu_hist_qcd = getCumulativePlot(hist_qcd, "qcd_" + histname); -# cu_hist_muQCD = getCumulativePlot(hist_qcd, "MUqcd_" + histname); -# cu_hist_singleTop = getCumulativePlot(hist_singleTop, "singleTop_" + histname); -# cu_hist_diboson = getCumulativePlot(hist_diboson, "di-boson_" + histname); -## cu_hist_ttbarW = getCumulativePlot(hist_ttbarW, "ttbarW_" + histname); -## cu_hist_ttbarZ = getCumulativePlot(hist_ttbarZ, "ttbarZ_" + histname); -### cu_hist_Zprime500 = getCumulativePlot(hist_Zprime500, "Zprime500"); -### cu_hist_Zprime750 = getCumulativePlot(hist_Zprime750, "Zprime750"); -### cu_hist_Zprime1000 = getCumulativePlot(hist_Zprime1000, "Zprime1000"); -### cu_hist_Zprime1250 = getCumulativePlot(hist_Zprime1250, "Zprime1250"); -## cu_hist_Zprime4000 = getCumulativePlot(hist_Zprime4000, "Zprime4000"); -# cu_hist_data.SetYTitle("Integrated" + cu_hist_data.GetYaxis().GetTitle()) -### -## -# cu_hist_data.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_ttbar.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_wjets.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_zjets.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_qcd.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_muQCD.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_singleTop.SetAxisRange(Urange[0], Urange[1]); -# cu_hist_diboson.SetAxisRange(Urange[0], Urange[1]); -## cu_hist_ttbarW.SetAxisRange(Urange[0], Urange[1]); -## cu_hist_ttbarZ.SetAxisRange(Urange[0], Urange[1]); -# -# cu_hs = THStack("cu_MC", "cu_MC"); -# cu_hs.Add(cu_hist_diboson); -# cu_hs.Add(cu_hist_ttbar); -# cu_hs.Add(cu_hist_wjets); -# cu_hs.Add(cu_hist_zjets); -# cu_hs.Add(cu_hist_singleTop); -# if 'Muon' in histname: -# hs.Add(cu_hist_muQCD); -# else: -# cu_hs.Add(cu_hist_qcd); -# -# scanvases.append(TCanvas("cu_cname" + histname, histname + "(cu)", 1600, 1200)) -# scanvases[-1].cd().SetRightMargin(0.04); -# -# cu_hist_data.Draw("error"); -# cu_hs.Draw("hist same"); -## cu_hist_ttbarW.Draw("same"); -## cu_hist_ttbarZ.Draw("same"); -#### cu_hist_Zprime500.Draw("same"); -#### cu_hist_Zprime750.Draw("same"); -#### cu_hist_Zprime1000.Draw("same"); -#### cu_hist_Zprime1250.Draw("same"); -## cu_hist_Zprime4000.Draw("same"); -### # cu_hist_data2.Draw("error same"); -# cu_hist_data.Draw("error same"); -# leg.Draw(); -### -# text1.Draw() -# postfix = '' -# if setLogY: -# scanvases[-1].SetLogy(1) -# postfix = '_log' -## scanvases[-1].SetGridy(1) -# name = ''.join(histname[:histname.rfind('/') + 1]) + prefix + ''.join(histname[histname.rfind('/') + 1:]) -# saveAs(canvas=scanvases[-1], name=name + '_integrated' + postfix, outputFormats=outputFormats, outputFolder=savePath) -# del scanvases[-1] -# del cu_hs -# del cu_hist_data -# del cu_hist_ttbar -# del cu_hist_wjets -# del cu_hist_zjets -# del cu_hist_qcd -# del cu_hist_singleTop -# del cu_hist_diboson - - -# fixOverlay: Redraws the axis - -def fixOverlay(): - gPad.RedrawAxis(); - - -def getCumulativePlot(initial, type): - name = initial.GetName() - name = "cu_" + name + "_" + type; - title = initial.GetTitle() - title = "cu_" + title + "_" + type; - xaxis = initial.GetXaxis().GetTitle(); - yaxis = initial.GetYaxis().GetTitle(); - nBins = initial.GetNbinsX(); - cu = TH1F(name, title, nBins, initial.GetXaxis().GetXmin(), initial.GetXaxis().GetXmax()); -# cu.Sumw2() - for bin in range(1, nBins + 1): - cu.SetBinContent(bin, initial.Integral(bin, nBins)); - - cu.SetFillStyle(initial.GetFillStyle()); - cu.SetFillColor(initial.GetFillColor()); - cu.SetLineColor(initial.GetLineColor()); - cu.SetMarkerSize(initial.GetMarkerSize()); - cu.SetMarkerStyle(initial.GetMarkerStyle()); - cu.SetMarkerColor(initial.GetMarkerColor()); - cu.SetLineWidth(initial.GetLineWidth()); - cu.GetXaxis().SetTitle(xaxis); - cu.GetYaxis().SetTitle(yaxis); - return cu; - - -def normalisePlotsToUnitArea(data, hist_ttbar, hist_wjets, hist_zjets, hist_singleTop, hist_qcd):#, hist_diboson): - nData = data.Integral() - nTop = hist_ttbar.Integral() - nWJ = hist_wjets.Integral() - nZJ = hist_zjets.Integral() - nST = hist_singleTop.Integral() - nQCD = hist_qcd.Integral() -# nDB = hist_diboson.Integral() - data.Sumw2() - nMC = sum([nTop, nWJ, nZJ, nST, nQCD])#, nDB]) - print 'nMC', nMC - if not nData == 0: - data.Scale(1 / nData) - - - if not nMC == 0: - hist_ttbar.Scale(1 / nMC) - hist_wjets.Scale(1 / nMC) - hist_zjets.Scale(1 / nMC) - hist_singleTop.Scale(1 / nMC) - hist_qcd.Scale(1 / nMC) -# hist_diboson.Scale(1 / nMC) - - chi2 = 0 - for bin in range(1, data.GetNbinsX() + 1): - nData = data.GetBinContent(bin) - nTop = hist_ttbar.GetBinContent(bin) - nWJ = hist_wjets.GetBinContent(bin) - nZJ = hist_zjets.GetBinContent(bin) - nST = hist_singleTop.GetBinContent(bin) - nQCD = hist_qcd.GetBinContent(bin) -# nDB = hist_diboson.GetBinContent(bin) - nMC = sum([nTop, nWJ, nZJ, nST, nQCD])#, nDB]) - chi2 += (nData - nMC) ** 2 - print 'Chi2:', chi2 - - -def rescaleMC(data, ttbar, wjets, qcd): - #rescaling - - - chi2 = {} - - eventsData = [] - appendData = eventsData.append - eventsTTbar = [] - appendTTbar = eventsTTbar.append - eventsWJets = [] - appendWJets = eventsWJets.append - eventsQCD = [] - appendQCD = eventsQCD.append - nBins = data.GetNbinsX() - - getData = data.GetBinContent - getttbar = ttbar.GetBinContent - getwjets = wjets.GetBinContent - getqcd = qcd.GetBinContent - for bin in range(nBins): - appendData(getData(bin)) - appendTTbar(getttbar(bin)) - appendWJets(getwjets(bin)) - appendQCD(getqcd(bin)) - - events = {} - events['data'] = eventsData - events['ttbar'] = eventsTTbar - events['wjets'] = eventsWJets - events['qcd'] = eventsQCD - - for tscale in arange(1, 2, 0.2): - for wscale in arange(1, 4, 0.4): - for qscale in arange(1, 4, 0.4): - res = getChi2(events, {'ttbar': tscale, 'wjets':wscale, 'qcd':qscale}) - chi2[res] = {'ttbar': tscale, 'wjets':wscale, 'qcd':qscale} - keys = chi2.keys() - result = {'ttbar': 1, 'wjets':1, 'qcd':1} - if len(keys) > 0: - result = sorted(keys)[0] - return result, chi2[result] - - -def getChi2(events={}, scales={}): - diff = 0 - for eventsData, eventsTTbar, eventsWJets, eventsQCD in zip(events['data'], events['ttbar'], events['wjets'], events['qcd']): - eventsMC = eventsTTbar * scales['ttbar'] + eventsWJets * scales['wjets'] + eventsQCD * scales['qcd'] - diff += (eventsData - eventsMC) ** 2 - return diff / len(events['data']) - -if __name__ == "__main__": - gROOT.SetBatch(True) - gROOT.ProcessLine('gErrorIgnoreLevel = 1001;') - parser = OptionParser() - parser.add_option("-l", "--logY", - action="store_true", dest="logY", default=False, - help="enable logarithmic y-axis") - parser.add_option("-n", "--normalise", - action="store_true", dest="norm", default=False, - help="normalise to unit area") - - (options, args) = parser.parse_args() - setLogY = options.logY - normalise = options.norm - plotMttbar() diff --git a/scripts_old/plotQCDEstimate.py b/scripts_old/plotQCDEstimate.py deleted file mode 100644 index 987e7094..00000000 --- a/scripts_old/plotQCDEstimate.py +++ /dev/null @@ -1,481 +0,0 @@ -# -# 31 Mar 2010 -# Plots (signed) Delta = (est-true)/true, for QCD estimate -# -#--------------------------------------------------------------- -from __future__ import division -from ROOT import * - -n = 4; -nrange = 9; -plot_average_est = True; - -# free in 12j, fix in 34j -constrain_gaus_mean_12j = False; -show_free_fit_res_34j = True; - -# landau free -#bool show_free_fit_res_34j = true; -#const bool constrain_gaus_mean_12j = true; - - -# gaus mean-constrained in 12j, fix in 34j -def plot_qcd_estimate_gaus_mean12j(): - constrain_gaus_mean_12j = true; - show_free_fits_res_34j = false; - plot_qcd_estimate( "gaus" ); - -def setStyle(): - - gROOT.SetStyle( "Plain" ); - gStyle.SetTextFont( 42 ); - gStyle.SetLabelFont( 42, "xy" ); - gStyle.SetFrameFillColor( 0 ); - gStyle.SetTitleBorderSize( 0 ); - - gStyle.SetTitleH( 0.06 ); - gStyle.SetPadTopMargin( 0.15 ); - - gStyle.SetOptFit( 1 ); - gStyle.SetPalette( 1 ); - - gStyle.SetPadTickX( 1 ); - gStyle.SetPadTickY( 1 ); - -def plot_qcd_estimate( func = "gaus" ): - - setStyle(); - - if constrain_gaus_mean_12j: - show_free_fit_res_34j = False; - - x = [1, 2, 3, 4] - xx = [3, 4] - x12j = [1, 2] - # Gaus (Free-fits) - - result = open( "est_free_%s.txt" % func ); - #result.open(Form("gaus_mean_0.3to0.6_12j__rb5/est_free_%s.txt",func)); - - m = nrange * ( 4 + 2 ); - est = [] - estFix = [] - max_dev = 0; - max_dev_12j = 0; - max_dev_34j = 0; - max_dev_3j = 0; - max_dev_4j = 0; - max_dev_34j_fix = 0; - max_dev_3j_fix = 0; - max_dev_4j_fix = 0; - - # Free fits - for i in range( 0, 4 * nrange ): - est.append( result.readline() ) - if fabs( est[-1] ) > max_dev: - max_dev = fabs( est[-1] ); - - if i % 4 <= 1: #1,2j - if fabs( est[-1] ) > max_dev_12j: - max_dev_12j = fabs( est[-1] ); - elif i % 4 == 2 : #3j - if fabs( est[-1] ) > max_dev_3j : - max_dev_3j = fabs( est[-1] ); - elif i % 4 == 3: #4mj - if fabs( est[-1] ) > max_dev_4j : - max_dev_4j = fabs( est[-1] ); - - if i % 4 == 0: - print #first of 4 - print i % 4 + 1, "j est[", i, "] = ", est[i], " "; - if i % 4 <= 1: - print "max_dev_12j = ", max_dev_12j; #12j - print endl; - result.close(); - - # Gaus (Constrained-fits in 3,4j) - result.open( "est_fix_%s.txt" % func ) - #result.open(Form("gaus_mean_0.3to0.6_12j__rb5/est_fix_%s.txt",func)); - - estFix2 = []; - maxDevFix = 0; - - for i in range( 0, 4 * nrange ): - - # read in 3,4j only - #print "amtb: i=", i - if not constrain_gaus_mean_12j and i % 4 < 2: - continue; - - estFix.append( result.readline() ) - estFix2.append( estFix[-1] ); - - - print i % 4 + 1, "j estFix[", i, "] = " , estFix[-1], " ", endl; - - #print "amtb: i=", i - - - if fabs( estFix[-1] ) > maxDevFix : - maxDevFix = fabs( estFix[-1] ); - if fabs( estFix[-1] ) > max_dev_34j_fix : - max_dev_34j_fix = fabs( estFix[-1] ); - if i % 4 == 2:#3j - if fabs( estFix[-1] ) > max_dev_3j_fix: - max_dev_3j_fix = fabs( estFix[-1] ); - elif i % 4 == 3: #>=4j - if fabs( estFix[-1] ) > max_dev_4j_fix: - max_dev_4j_fix = fabs( estFix[-1] ); - - for k in range( 0, len( estFix2 ) ): - print "amtb: estFix2[", k, "]: ", estFix2[k] - - result.close(); - max_dev_34j_fix = TMath.Max( max_dev_3j_fix, max_dev_4j_fix ); - max_dev_34j = TMath.Max( max_dev_3j, max_dev_4j ); - - print "maxDevFix: ", maxDevFix - - - print "\nFor all ranges, |max| deviation is ", max_dev - print "For 1,2j, |max| deviation is ", max_dev_12j - print "For free fit (3j) |max| deviation is ", max_dev_3j - print "For free fit (>=4j) |max| deviation is ", max_dev_4j - print "For free fit (3,>=4j), |max| deviation is ", max_dev_34j - print "For constrained fit (3j), |max| deviation is ", max_dev_3j_fix - print "For constrained fit (>=4j), |max| deviation is ", max_dev_4j_fix - print "For constrained fit (3,>=4j), |max| deviation is ", max_dev_34j_fix - - - - c2 = TCanvas( "c2", "QCD estimates", 600, 600 ); - - y[nrange][4]; - - index = 0; - - for i in range( 0, nrange ): - for j in range( 0, 4 ): - y[i][j] = est[index]; #read in - index += 1 - #print "index="< - - - - - plots/HLTStudy - - - -

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�K7s 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 diff --git a/scripts/forLuke/PFhistosForFitting_met5_central.root b/scripts/forLuke/PFhistosForFitting_met5_central.root deleted file mode 100644 index af05e849059c8107e35a0e2374a753bda9b59a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50914 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