def main(argv): # HISTONAME = "TauIdJets" # HISTONAME = "TauIdJetsCollinear" # HISTONAME = "TauIdBtag" # HISTONAME = "TauIdBvetoCollinear" # HISTONAME = "TauIdBveto" HISTONAME = "TauIdAfterCollinearCuts" dirs = [] if len(sys.argv) < 2: usage() dirs.append(sys.argv[1]) # Create all datasets from a multicrab task # datasets = dataset.getDatasetsFromMulticrabCfg(counters=counters, dataEra=dataEra, analysisBaseName="signalAnalysisInvertedTau") #datasets = dataset.getDatasetsFromMulticrabDirs(dirs,counters=counters, dataEra=dataEra, analysisBaseName="signalAnalysisInvertedTau") datasets = dataset.getDatasetsFromMulticrabDirs(dirs,dataEra=dataEra, searchMode=searchMode, analysisName=analysis, optimizationMode=optimizationMode) # datasets = dataset.getDatasetsFromMulticrabDirs(dirs,counters=counters, dataEra=dataEra) # Check multicrab consistency consistencyCheck.checkConsistencyStandalone(dirs[0],datasets,name="QCD inverted") # As we use weighted counters for MC normalisation, we have to # update the all event count to a separately defined value because # the analysis job uses skimmed pattuple as an input datasets.updateNAllEventsToPUWeighted() # Read integrated luminosities of data datasets from lumi.json datasets.loadLuminosities() # Include only 120 mass bin of HW and HH datasets datasets.remove(filter(lambda name: "TTToHplus" in name and not "M120" in name, datasets.getAllDatasetNames())) datasets.remove(filter(lambda name: "HplusTB" in name, datasets.getAllDatasetNames())) datasets.remove(filter(lambda name: "Hplus_taunu_t-channel" in name, datasets.getAllDatasetNames())) datasets.remove(filter(lambda name: "Hplus_taunu_tW-channel" in name, datasets.getAllDatasetNames())) # Default merging nad ordering of data and MC datasets # All data datasets to "Data" # All QCD datasets to "QCD" # All single top datasets to "SingleTop" # WW, WZ, ZZ to "Diboson" plots.mergeRenameReorderForDataMC(datasets) # Set BR(t->H) to 0.05, keep BR(H->tau) in 1 xsect.setHplusCrossSectionsToBR(datasets, br_tH=0.05, br_Htaunu=1) # Merge WH and HH datasets to one (for each mass bin) # TTToHplusBWB_MXXX and TTToHplusBHminusB_MXXX to "TTToHplus_MXXX" plots.mergeWHandHH(datasets) datasets.merge("EWK", [ "TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson" ]) # Apply TDR style style = tdrstyle.TDRStyle() style.setOptStat(True) invertedQCD = InvertedTauID() invertedQCD.setLumi(datasets.getDataset("Data").getLuminosity()) invertedQCD.setInfo([dataEra,searchMode,HISTONAME]) histonames = datasets.getDataset("Data").getDirectoryContent("baseline/METBaseline"+HISTONAME) bins = [] binLabels = [] for histoname in histonames: bins.append(histoname.replace("METBaseline"+HISTONAME,"")) title = datasets.getDataset("Data").getDatasetRootHisto("baseline/METBaseline"+HISTONAME+"/"+histoname).getHistogram().GetTitle() title = title.replace("METBaseline"+HISTONAME,"") title = title.replace("#tau p_{T}","taup_T") title = title.replace("#tau eta","taueta") title = title.replace("<","lt") title = title.replace(">","gt") title = title.replace("=","eq") title = title.replace("..","to") title = title.replace(".","p") title = title.replace("/","_") binLabels.append(title) print print "Histogram bins available",bins # bins = ["Inclusive"] # bins = ["taup_Tleq50","taup_Teq50to60"] print "Using bins ",bins print print "Bin labels" for i in range(len(binLabels)): line = bins[i] while len(line) < 10: line += " " line += ": "+binLabels[i] print line print for i,bin in enumerate(bins): invertedQCD.setLabel(binLabels[i]) metBase = plots.DataMCPlot(datasets, "baseline/METBaseline"+HISTONAME+"/METBaseline"+HISTONAME+bin) metInver = plots.DataMCPlot(datasets, "Inverted/METInverted"+HISTONAME+"/METInverted"+HISTONAME+bin) # Rebin before subtracting metBase.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(5)) metInver.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(5)) metInverted_data = metInver.histoMgr.getHisto("Data").getRootHisto().Clone("Inverted/METInverted"+HISTONAME+"/METInverted"+HISTONAME+bin) metInverted_EWK = metInver.histoMgr.getHisto("EWK").getRootHisto().Clone("Inverted/METInverted"+HISTONAME+"/METInverted"+HISTONAME+bin) metBase_data = metBase.histoMgr.getHisto("Data").getRootHisto().Clone("Baseline/METBaseLine"+HISTONAME+"/METBaseline"+HISTONAME+bin) metBase_EWK = metBase.histoMgr.getHisto("EWK").getRootHisto().Clone("Baseline/METBaseLine"+HISTONAME+"/METBaseline"+HISTONAME+bin) metBase_QCD = metBase_data.Clone("QCD") metBase_QCD.Add(metBase_EWK,-1) metInverted_QCD = metInverted_data.Clone("QCD") metInverted_QCD.Add(metInverted_EWK,-1) metInverted_data = addlabels(metInverted_data) metInverted_EWK = addlabels(metInverted_EWK) metBase_data = addlabels(metBase_data) metBase_EWK = addlabels(metBase_EWK) metInverted_QCD = addlabels(metInverted_QCD) invertedQCD.plotHisto(metInverted_data,"inverted") invertedQCD.plotHisto(metInverted_EWK,"invertedEWK") invertedQCD.plotHisto(metBase_data,"baseline") invertedQCD.plotHisto(metBase_EWK,"baselineEWK") fitOptions = "LRB" # fitOptions = "RB" # fitOptions = "IEB" # ROOT.TVirtualFitter.SetDefaultFitter("Minuit") # ROOT.TVirtualFitter.SetDefaultFitter("Minuit2") # fitOptions = "Q" # Chi2 Fit # fitOptions = "VEB" # Chi2 Fit with Minos Error # fitOptions = "IEB" # Chi2 Fit with Integral and Minos # fitOptions = "VLEB" # Likelihood Fit with Minos Error # ROOT.TVirtualFitter.SetDefaultFitter("Fumili") # ROOT.TVirtualFitter.SetDefaultFitter("Fumili2") # fitOptions = "Q" # Chi2 Fit # fitOptions = "VE" # Chi2 Fit with Minos Error # fitOptions = "IE" # Chi2 Fit with Integral and Minos # fitOptions = "VLE" # Likelihood Fit with Minos Error invertedQCD.fitEWK(metInverted_EWK,fitOptions) invertedQCD.fitEWK(metBase_EWK,fitOptions) invertedQCD.fitQCD(metInverted_QCD,fitOptions) invertedQCD.fitData(metBase_data) invertedQCD.getNormalization() invertedQCD.Summary() invertedQCD.WriteNormalizationToFile("QCDInvertedNormalizationFactors.py") invertedQCD.WriteLatexOutput("fits.tex")
def main(): datasets = dataset.getDatasetsFromMulticrabCfg(counters=counters) datasets.loadLuminosities() plots.mergeRenameReorderForDataMC(datasets) datasets.merge("EWK", [ "TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson" ]) style = tdrstyle.TDRStyle() metInver = plots.DataMCPlot(datasets, analysis+"/MET_InvertedTauIdJets") metBase = plots.DataMCPlot(datasets, analysis+"/MET_BaseLineTauIdJets") metBasePP = plots.DataMCPlot(datasets, analysisPlusPlus+"/MET_BaseLineTauIdJets") metBaseMP = plots.DataMCPlot(datasets, analysisMinusPlus+"/MET_BaseLineTauIdJets") metBasePM = plots.DataMCPlot(datasets, analysisPlusMinus+"/MET_BaseLineTauIdJets") metBaseMM = plots.DataMCPlot(datasets, analysisMinusMinus+"/MET_BaseLineTauIdJets") # Rebin before subtracting rebin = 20 metInver.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metBase.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metBasePP.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metBaseMP.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metBasePM.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metBaseMM.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin)) metInverted_data = metInver.histoMgr.getHisto("Data").getRootHisto().Clone(analysis+"/MET_InvertedTauIdJets") metBase_data = metBase.histoMgr.getHisto("Data").getRootHisto().Clone(analysis+"/MET_BaselineTauIdJets") metBase_EWK = metBase.histoMgr.getHisto("EWK").getRootHisto().Clone(analysis+"/MET_BaselineTauIdJets") metBase_EWKplusplus = metBasePP.histoMgr.getHisto("EWK").getRootHisto().Clone(analysisPlusPlus+"/MET_BaselineTauIdJets") metBase_EWKminusplus = metBaseMP.histoMgr.getHisto("EWK").getRootHisto().Clone(analysisMinusPlus+"/MET_BaselineTauIdJets") metBase_EWKplusminus = metBasePM.histoMgr.getHisto("EWK").getRootHisto().Clone(analysisPlusMinus+"/MET_BaselineTauIdJets") metBase_EWKminusminus = metBaseMM.histoMgr.getHisto("EWK").getRootHisto().Clone(analysisMinusMinus+"/MET_BaselineTauIdJets") invertedQCD = InvertedTauID() invertedQCD.setLabel("noError") invertedQCD.fitQCD(metInverted_data) invertedQCD.fitEWK(metBase_EWK) invertedQCD.fitData(metBase_data) normalizationWithEWK = invertedQCD.getNormalization() invertedQCD.setLabel("plusplusError") invertedQCD.fitEWK(metBase_EWKplusplus) invertedQCD.fitData(metBase_data) normalizationWithEWKplusplus = invertedQCD.getNormalization() invertedQCD.setLabel("minusplusError") invertedQCD.fitEWK(metBase_EWKminusplus) invertedQCD.fitData(metBase_data) normalizationWithEWKminusplus = invertedQCD.getNormalization() invertedQCD.setLabel("plusminusError") invertedQCD.fitEWK(metBase_EWKplusminus) invertedQCD.fitData(metBase_data) normalizationWithEWKplusminus = invertedQCD.getNormalization() invertedQCD.setLabel("minusminusError") invertedQCD.fitEWK(metBase_EWKminusminus) invertedQCD.fitData(metBase_data) normalizationWithEWKminusminus = invertedQCD.getNormalization() invertedQCD.Summary() print "Difference in normalization due to JES ++ variation",(normalizationWithEWK - normalizationWithEWKplusplus)/normalizationWithEWK print "Difference in normalization due to JES -+ variation",(normalizationWithEWK - normalizationWithEWKminusplus)/normalizationWithEWK print "Difference in normalization due to JES +- variation",(normalizationWithEWK - normalizationWithEWKplusminus)/normalizationWithEWK print "Difference in normalization due to JES -- variation",(normalizationWithEWK - normalizationWithEWKminusminus)/normalizationWithEWK
def main(): # HISTONAME = "TauIdJets" HISTONAME = "TauIdBtag" # Create all datasets from a multicrab task datasets = dataset.getDatasetsFromMulticrabCfg(counters=counters) # Read integrated luminosities of data datasets from lumi.json datasets.loadLuminosities() # Include only 120 mass bin of HW and HH datasets datasets.remove(filter(lambda name: "TTToHplus" in name and not "M120" in name, datasets.getAllDatasetNames())) # Default merging nad ordering of data and MC datasets # All data datasets to "Data" # All QCD datasets to "QCD" # All single top datasets to "SingleTop" # WW, WZ, ZZ to "Diboson" plots.mergeRenameReorderForDataMC(datasets) # Set BR(t->H) to 0.05, keep BR(H->tau) in 1 xsect.setHplusCrossSectionsToBR(datasets, br_tH=0.05, br_Htaunu=1) # Merge WH and HH datasets to one (for each mass bin) # TTToHplusBWB_MXXX and TTToHplusBHminusB_MXXX to "TTToHplus_MXXX" plots.mergeWHandHH(datasets) datasets.merge("EWK", [ "TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson" ]) # Apply TDR style style = tdrstyle.TDRStyle() invertedQCD = InvertedTauID() invertedQCD.setLumi(datasets.getDataset("Data").getLuminosity()) bins = ["inclusive"] # bins = ["4050","5060","6070","7080","80100","100120","120150","150"] # bins = ["4050"] for bin in bins: invertedQCD.setLabel(bin) if bin == "inclusive": bin = "" metBase = plots.DataMCPlot(datasets, analysis+"/MET_BaseLine"+HISTONAME+bin) metInver = plots.DataMCPlot(datasets, analysis+"/MET_Inverted"+HISTONAME+bin) # Rebin before subtracting metBase.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(10)) metInver.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(10)) metInverted_data = metInver.histoMgr.getHisto("Data").getRootHisto().Clone(analysis+"/MET_Inverted"+HISTONAME+bin) metInverted_EWK = metInver.histoMgr.getHisto("EWK").getRootHisto().Clone(analysis+"/MET_Inverted"+HISTONAME+bin) metBase_data = metBase.histoMgr.getHisto("Data").getRootHisto().Clone(analysis+"/MET_Baseline"+HISTONAME+bin) metBase_EWK = metBase.histoMgr.getHisto("EWK").getRootHisto().Clone(analysis+"/MET_Baseline"+HISTONAME+bin) metBase_QCD = metBase_data.Clone("QCD") metBase_QCD.Add(metBase_EWK,-1) invertedQCD.plotHisto(metInverted_data,"inverted") invertedQCD.plotHisto(metBase_data,"baseline") invertedQCD.fitQCD(metInverted_data) invertedQCD.fitEWK(metBase_EWK,"LR") invertedQCD.fitData(metBase_data) invertedQCD.getNormalization() invertedQCD.Summary()