def doSystematicsVariation(myMulticrabDir,era,searchMode,optimizationMode,syst,myOutputCreator,myShapeString,myNormFactors):
    myModuleInfoString = "%s_%s_%s_%s"%(era, searchMode, optimizationMode,syst)
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    systDsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode,systematicVariation=syst)
    # Do the usual normalisation
    systDsetMgr.updateNAllEventsToPUWeighted()
    systDsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(systDsetMgr)
    systDsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])
    myLuminosity = systDsetMgr.getDataset("Data").getLuminosity()
    # Obtain results
    mySystModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(systDsetMgr, era, searchMode, optimizationMode, syst)
    mySystResult = qcdInvertedResult.QCDInvertedResultManager(myShapeString, "AfterCollinearCuts", systDsetMgr, myLuminosity, myModuleInfoString, myNormFactors, shapeOnly=False, displayPurityBreakdown=False, noRebin=True)
    mySystModuleResults.addShape(mySystResult.getShape(), myShapeString)
    mySystModuleResults.addShape(mySystResult.getShapeMCEWK(), myShapeString+"_MCEWK")
    mySystModuleResults.addShape(mySystResult.getShapePurity(), myShapeString+"_Purity")
    mySystModuleResults.addDataDrivenControlPlots(mySystResult.getControlPlots(),mySystResult.getControlPlotLabels())
    mySystResult.delete()
    ## Save module info
    myOutputCreator.addModule(mySystModuleResults)
    systDsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
def doSystematicsVariation(myMulticrabDir,era,searchMode,optimizationMode,syst,myOutputCreator,myShapeString):
    myModuleInfoString = "%s_%s_%s_%s"%(era, searchMode, optimizationMode,syst)
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    systDsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode,systematicVariation=syst)
    # Do the usual normalisation
    systDsetMgr.updateNAllEventsToPUWeighted()
    systDsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(systDsetMgr)
    systDsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])
    myLuminosity = systDsetMgr.getDataset("Data").getLuminosity()
    # Obtain results
    mySystModuleResults = PseudoMultiCrabModule(systDsetMgr, era, searchMode, optimizationMode, syst)
    mySystResult = None
    if massType == "mt":
        mySystResult = QCDFactorisedResultManager(myMtSpecs,systDsetMgr,myLuminosity,myModuleInfoString,shapeOnly=False)
    elif massType == "invmass":
        mySystResult = QCDFactorisedResultManager(myFullMassSpecs,systDsetMgr,myLuminosity,myModuleInfoString,shapeOnly=False)
    mySystModuleResults.addShape(mySystResult.getShape(), myShapeString)
    mySystModuleResults.addShape(mySystResult.getShapeMCEWK(), myShapeString+"_MCEWK")
    mySystModuleResults.addShape(mySystResult.getShapePurity(), myShapeString+"_Purity")
    mySystModuleResults.addDataDrivenControlPlots(mySystResult.getControlPlots(),mySystResult.getControlPlotLabels())
    mySystResult.delete()
    ## Save module info
    myOutputCreator.addModule(mySystModuleResults)
    systDsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
 def __init__(self, directories, **kwargs):
     if len(directories) == 0:
         raise Exception("Need at least one directory")
     self._creators = filter(lambda c: c is not None, [
         dataset.readFromMulticrabCfg(directory=d, **kwargs)
         for d in directories
     ])
Exemplo n.º 4
0
def main():
    creator = dataset.readFromMulticrabCfg()
    datasets = creator.createDatasetManager(dataEra=dataEra)

    if not mcOnly:
        datasets.loadLuminosities()

    datasets.updateNAllEventsToPUWeighted()    
    plots.mergeRenameReorderForDataMC(datasets)

    if not mcOnly:
        mcOnlyLumi = datasets.getDataset("Data").getLuminosity()

    datasets.remove(datasets.getDataDatasetNames())
    histograms.cmsTextMode = histograms.CMSMode.SIMULATION

    histograms.createLegend.moveDefaults(dx=-0.05, dh=-0.15)

    xsect.setHplusCrossSectionsToBR(datasets, br_tH=0.01, br_Htaunu=1)
    for dset in datasets.getAllDatasets():
        if "HplusTB_" in dset.getName():
            dset.setCrossSection(1.0)

    plots.mergeWHandHH(datasets)
    datasets.merge("EWK", ["TTJets",
                           "WJets",
                           "DYJetsToLL",
                           "SingleTop", "Diboson"
                           ], keepSources=True)

    style = tdrstyle.TDRStyle()

    # Setup the systematics recipe object
    systematics = dataset.Systematics(
        allShapes=True,
        #shapes=["SystVarJER", "SystVarJES", "SystVarMET", "SystVarTES"],
        #verbose=True,
        #additionalNormalizations={"Foo": 0.2, "Bar": 0.05},
                                      )

    histograms.uncertaintyMode.set(histograms.Uncertainty.StatOnly)

    def dop(datasetName):
        doPlots(datasets, datasetName, systematics)
        doCounters(datasets, datasetName, creator.getSystematicVariationSources())

#    dop("TTToHplus_M80")
    dop("TTToHplus_M120")
#    dop("TTToHplus_M160")
#    dop("HplusTB_M180")
    dop("HplusTB_M200")
#    dop("HplusTB_M300")
    dop("TTJets")
#    dop("DYJetsToLL")
    dop("WJets")
    dop("EWK")
def doSystematicsVariation(myMulticrabDir, era, searchMode, optimizationMode,
                           syst, myOutputCreator, myShapeString, myNormFactors,
                           dataDrivenFakeTaus):
    myModuleInfoString = "%s_%s_%s_%s" % (era, searchMode, optimizationMode,
                                          syst)
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    systDsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era,
        searchMode=searchMode,
        optimizationMode=optimizationMode,
        systematicVariation=syst)
    # Do the usual normalisation
    systDsetMgr.updateNAllEventsToPUWeighted()
    systDsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(systDsetMgr)
    systDsetMgr.merge(
        "EWK", ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    myLuminosity = systDsetMgr.getDataset("Data").getLuminosity()

    myFakeRateCalculator = fakeRate.FakeRateCalculator(
        systDsetMgr,
        myShapeString,
        myNormFactors,
        myLuminosity,
        dataDrivenFakeTaus=dataDrivenFakeTaus)

    # Obtain results
    mySystModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        systDsetMgr, era, searchMode, optimizationMode, syst)
    mySystResult = qcdInvertedResult.QCDInvertedResultManager(
        myShapeString,
        "AfterCollinearCuts",
        systDsetMgr,
        myLuminosity,
        myModuleInfoString,
        myFakeRateCalculator.getTotalFakeRateProbabilities(),
        dataDrivenFakeTaus=dataDrivenFakeTaus,
        shapeOnly=False,
        displayPurityBreakdown=False,
        noRebin=True)
    mySystModuleResults.addShape(mySystResult.getShape(), myShapeString)
    mySystModuleResults.addShape(mySystResult.getShapeMCEWK(),
                                 myShapeString + "_MCEWK")
    mySystModuleResults.addShape(mySystResult.getShapePurity(),
                                 myShapeString + "_Purity")
    mySystModuleResults.addDataDrivenControlPlots(
        mySystResult.getControlPlots(), mySystResult.getControlPlotLabels())
    mySystResult.delete()
    ## Save module info
    myOutputCreator.addModule(mySystModuleResults)
    systDsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
def doNominalModule(myMulticrabDir,era,searchMode,optimizationMode,myOutputCreator,myShapeString,myNormFactors,myDisplayStatus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb"%(myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode)
    myQCDNormalizationSystResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormSource")
    # Obtain results
    myResult = qcdInvertedResult.QCDInvertedResultManager(myShapeString, "AfterCollinearCuts", dsetMgr, myLuminosity, myModuleInfoString, myNormFactors, shapeOnly=False, displayPurityBreakdown=True, noRebin=True)
    # Store results
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(), myShapeString+"_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(), myShapeString+"_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    # Note that only the source histograms for the shape uncert are stored
    # because the result must be calculated after rebinning
    # (and rebinning is no longer done here for flexibility reasons)
    myQCDNormalizationSystResults.addShape(myResult.getRegionSystNumerator(), myShapeString+"Numerator")
    myQCDNormalizationSystResults.addShape(myResult.getRegionSystDenominator(), myShapeString+"Denominator")
    myLabels = myResult.getControlPlotLabelsForQCDSyst()
    for i in range(0,len(myLabels)):
        myLabels[i] = myLabels[i]+"Numerator"
    myQCDNormalizationSystResults.addDataDrivenControlPlots(myResult.getRegionSystNumeratorCtrlPlots(),myLabels)
    for i in range(0,len(myLabels)):
        myLabels[i] = myLabels[i].replace("Numerator","Denominator")
    myQCDNormalizationSystResults.addDataDrivenControlPlots(myResult.getRegionSystDenominatorCtrlPlots(),myLabels)
    myOutputCreator.addModule(myQCDNormalizationSystResults)
    # Clean up
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
def doNominalModule(myMulticrabDir,era,searchMode,optimizationMode,myOutputCreator,myShapeString,myDisplayStatus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb"%(myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode)
    myQCDNormalizationSystUpResults = PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormPlus")
    myQCDNormalizationSystDownResults = PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormMinus")
    # Obtain results
    myResult = None
    if massType == "mt":
        myResult = QCDFactorisedResultManager(myMtSpecs,dsetMgr,myLuminosity,myModuleInfoString,shapeOnly=False,displayPurityBreakdown=True)
    elif massType == "invmass":
        myResult = QCDFactorisedResultManager(myFullMassSpecs,dsetMgr,myLuminosity,myModuleInfoString,shapeOnly=False,displayPurityBreakdown=True)
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(), myShapeString+"_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(), myShapeString+"_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    myQCDNormalizationSystUpResults.addShape(myResult.getRegionSystUp(), myShapeString)
    myQCDNormalizationSystUpResults.addDataDrivenControlPlots(myResult.getRegionSystUpCtrlPlots(),myResult.getControlPlotLabelsForQCDSyst())
    myOutputCreator.addModule(myQCDNormalizationSystUpResults)
    # Down variation of QCD normalization (i.e. ctrl->signal region transition)
    myQCDNormalizationSystDownResults.addShape(myResult.getRegionSystDown(), myShapeString)
    myQCDNormalizationSystDownResults.addDataDrivenControlPlots(myResult.getRegionSystDownCtrlPlots(),myResult.getControlPlotLabelsForQCDSyst())
    myOutputCreator.addModule(myQCDNormalizationSystDownResults)
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
Exemplo n.º 8
0
def doSystematicsVariation(myMulticrabDir, era, searchMode, optimizationMode,
                           syst, myOutputCreator, myShapeString):
    myModuleInfoString = "%s_%s_%s_%s" % (era, searchMode, optimizationMode,
                                          syst)
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    systDsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era,
        searchMode=searchMode,
        optimizationMode=optimizationMode,
        systematicVariation=syst)
    # Do the usual normalisation
    systDsetMgr.updateNAllEventsToPUWeighted()
    systDsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(systDsetMgr)
    systDsetMgr.merge(
        "EWK", ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    myLuminosity = systDsetMgr.getDataset("Data").getLuminosity()
    # Obtain results
    mySystModuleResults = PseudoMultiCrabModule(systDsetMgr, era, searchMode,
                                                optimizationMode, syst)
    mySystResult = None
    if massType == "mt":
        mySystResult = QCDFactorisedResultManager(myMtSpecs,
                                                  systDsetMgr,
                                                  myLuminosity,
                                                  myModuleInfoString,
                                                  shapeOnly=False)
    elif massType == "invmass":
        mySystResult = QCDFactorisedResultManager(myFullMassSpecs,
                                                  systDsetMgr,
                                                  myLuminosity,
                                                  myModuleInfoString,
                                                  shapeOnly=False)
    mySystModuleResults.addShape(mySystResult.getShape(), myShapeString)
    mySystModuleResults.addShape(mySystResult.getShapeMCEWK(),
                                 myShapeString + "_MCEWK")
    mySystModuleResults.addShape(mySystResult.getShapePurity(),
                                 myShapeString + "_Purity")
    mySystModuleResults.addDataDrivenControlPlots(
        mySystResult.getControlPlots(), mySystResult.getControlPlotLabels())
    mySystResult.delete()
    ## Save module info
    myOutputCreator.addModule(mySystModuleResults)
    systDsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
Exemplo n.º 9
0
    if opts.multicrabDir != None:
        myMulticrabDir = opts.multicrabDir
    if not os.path.exists("%s/multicrab.cfg" % myMulticrabDir):
        raise Exception(
            ErrorLabel() +
            "No multicrab directory found at path '%s'! Please check path or specify it with --mdir!"
            % (myMulticrabDir) + NormalStyle())

    myShapes = ["mt", "invmass"]
    if opts.transverseMassOnly != None and opts.transverseMassOnly:
        myShapes = ["mt"]
    elif opts.invariantMassOnly != None and opts.invariantMassOnly:
        myShapes = ["invmass"]

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    # Obtain systematics names
    mySystematicsNamesRaw = dsetMgrCreator.getSystematicVariationSources()
    mySystematicsNames = []
    for item in mySystematicsNamesRaw:
        mySystematicsNames.append("%sPlus" % item)
        mySystematicsNames.append("%sMinus" % item)
    if opts.test:
        mySystematicsNames = [mySystematicsNames[0]]

    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    # Select modules
    myModuleSelector.doSelect(opts)
    #dsetMgrCreator.close()
    # Loop over era/searchMode/optimizationMode combos
    myDisplayStatus = True
Exemplo n.º 10
0
def main():

    if len(sys.argv) == 1:
        usage()

    if not QCDInvertedDir(sys.argv[1:]):
        print "No QCD inverted dir recognized from input",sys.argv[1:]
        usage()

    dirQCDInv = sys.argv[1]
    dirs = []
    dirs.append(dirQCDInv)

    print "QCDInverted multicrab directory",dirQCDInv
    print 

                                        
    taskDir = multicrab.createTaskDir("QCDInverted")

    f = open(os.path.join(taskDir, "codeVersion.txt"), "w")
    f.write(git.getCommitId()+"\n")
    f.close()
    f = open(os.path.join(taskDir, "codeStatus.txt"), "w")
    f.write(git.getStatus()+"\n")
    f.close()
    f = open(os.path.join(taskDir, "codeDiff.txt"), "w")
    f.write(git.getDiff()+"\n")
    f.close()
    f = open(os.path.join(taskDir, "inputInfo.txt"), "w")
    f.write("Original directory:\n%s\n\n" % "\n".join(dirQCDInv))
    f.write("\nQCDInverted analysis: %s\n" % analysis)
    f.close()
    f = open(os.path.join(taskDir, "multicrab.cfg"), "w")
    f.write("[Data]\n")
    f.write("CMSSW.pset = signalAnalysisInvertedTau_cfg.py\n")
    f.close()

        
    creator = dataset.readFromMulticrabCfg(directory=dirQCDInv)
    optModes = []#creator.getOptimizationModes()
    optModes.append("")
    dataEras = creator.getDataEras()
    dataEras = []
#    dataEras.append("Run2011A")
#    dataEras.append("Run2011AB")
    dataEras.append("Run2011B")
    print "optModes",optModes
    print "dataEras",dataEras

    directory = os.path.join(taskDir, "Data", "res")
    os.makedirs(directory)

    fOUT = ROOT.TFile.Open(os.path.join(directory, "histograms-Data.root"), "RECREATE")

    lumiSaved = False    
    for optMode in optModes:
	for dataEra in dataEras:

            datasetsQCDInv = creator.createDatasetManager(dataEra=dataEra, searchMode=searchMode, analysisName=analysis, optimizationMode=optMode)
            datasetsQCDInv.loadLuminosities()
            datasetsQCDInv.updateNAllEventsToPUWeighted()

            plots.mergeRenameReorderForDataMC(datasetsQCDInv)
            
            datasetsQCDInv.mergeData()
            datasetsQCDInv.merge("EWK", ["WJets", "DYJetsToLL", "SingleTop", "Diboson","TTJets"], keepSources=True)
            
            if not lumiSaved:
                # Save luminosity
                data = {"Data": datasetsQCDInv.getDataset("Data").getLuminosity()}
                f = open(os.path.join(taskDir, "lumi.json"), "w")
                json.dump(data, f, indent=2)
                f.close()
		lumiSaved = True
    
            anadir = fOUT.mkdir(analysis+searchMode+dataEra+optMode)

            anadir.cd()
            integrals = []
            for massPlot in massPlots:
                print "Processing",massPlot
                massPlotDir = anadir.mkdir(massPlot)
                anadir.cd(massPlot)
                integral = write(fOUT,datasetsQCDInv,[massPlot])
                integrals.append(integral[0])

  	    for controlPlot in controlPlots:
                print "Processing",controlPlot
                controlPlotDir = anadir.mkdir(controlPlot)
                anadir.cd(controlPlot)
                controlPlotNames = datasetsQCDInv.getDataset("Data").getDirectoryContent(controlPlot)
                controlPlotNamesWithPaths = []
                for controlPlotName in controlPlotNames:
                    controlPlotNamesWithPaths.append(os.path.join(controlPlot,controlPlotName))
                write(fOUT,datasetsQCDInv,controlPlotNamesWithPaths)
                anadir.cd()

    	    counterdir = anadir.mkdir("counters")
            anadir.cd("counters")
            counter = ROOT.TH1D("counter","counter",len(integrals),0,len(integrals))
            for i,integral in enumerate(integrals):
                binLabel = "integral_"+massPlots[i]
                counter.SetBinContent(i+1,integral)
                counter.GetXaxis().SetBinLabel(i+1,binLabel)
            counter.Write()
            weighteddir = counterdir.mkdir("weighted")
            weighteddir.cd()
            counter.Write()

    addConfigInfo(fOUT, datasetsQCDInv.getDataset("Data"))
    
    fOUT.Close()

    print "Created multicrab-like dir for LandS:",taskDir
    
# Call the main function if the script is executed (i.e. not imported)
if __name__ == "__main__":
    myModuleSelector = AnalysisModuleSelector() # Object for selecting data eras, search modes, and optimization modes
    parser = OptionParser(usage="Usage: %prog [options]")
    myModuleSelector.addParserOptions(parser)
    parser.add_option("--noMCQCD", dest="noMCQCD", action="store_true", default=False, help="remove MC QCD")
    parser.add_option("--noSignal", dest="noSignal", action="store_true", default=False, help="remove MC QCD")
    parser.add_option("--mdir", dest="multicrabDir", help="path to multicrab directory")
    (opts, args) = parser.parse_args()

    # Get dataset manager creator and handle different era/searchMode/optimizationMode combinations
    myPath = "."
    if opts.multicrabDir != None:
        myPath = opts.multicrabDir
    signalDsetCreator = dataset.readFromMulticrabCfg(directory=myPath)
    myModuleSelector.setPrimarySource("Signal analysis", signalDsetCreator)
    myModuleSelector.doSelect(opts)

    # Arguments are ok, proceed to run
    myChosenModuleCount = len(myModuleSelector.getSelectedEras())*len(myModuleSelector.getSelectedSearchModes())*len(myModuleSelector.getSelectedOptimizationModes())
    print "Will run over %d modules (%d eras x %d searchModes x %d optimizationModes)"%(myChosenModuleCount,len(myModuleSelector.getSelectedEras()),len(myModuleSelector.getSelectedSearchModes()),len(myModuleSelector.getSelectedOptimizationModes()))
    myCount = 1
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            for optimizationMode in myModuleSelector.getSelectedOptimizationModes():
                print "%sProcessing module %d/%d: era=%s searchMode=%s optimizationMode=%s%s"%(HighlightStyle(), myCount, myChosenModuleCount, era, searchMode, optimizationMode, NormalStyle())
                main(opts,signalDsetCreator,era,searchMode,optimizationMode)
                myCount += 1
    print "\n%sPlotting done.%s"%(HighlightStyle(),NormalStyle())
def main(argv):
    dirs = []
    if len(sys.argv) < 2:
        usage()

    myMulticrabDir = sys.argv[1]

    # Obtain normalization factors
    myNormalizationFactorSource = "QCDInvertedNormalizationFactors.py"
    myNormFactors = None
    myNormFactorsSafetyCheck = None
    if os.path.exists(myNormalizationFactorSource):
        myNormFactorsImport = getattr(__import__(myNormalizationFactorSource.replace(".py","")), "QCDInvertedNormalization")
        myNormFactorsSafetyCheck = getattr(__import__(myNormalizationFactorSource.replace(".py","")), "QCDInvertedNormalizationSafetyCheck")
        #QCDInvertedNormalizationSafetyCheck(era)
        myNormFactors = myNormFactorsImport.copy()
    else:
        raise Exception(ErrorLabel()+"Normalisation factors ('%s.py') not found!\nRun script InvertedTauID_Normalization.py to generate the normalization factors."%myNormalizationFactorSource)

    myModuleSelector = AnalysisModuleSelector() # Object for selecting data eras, search modes, and optimization modes

    parser = OptionParser(usage="Usage: %prog [options]",add_help_option=True,conflict_handler="resolve")
    myModuleSelector.addParserOptions(parser)
    parser.add_option("--mdir", dest="multicrabDir", action="store", help="Multicrab directory")
    # Add here parser options, if necessary, following line is an example
    #parser.add_option("--showcard", dest="showDatacard", action="store_true", default=False, help="Print datacards also to screen")

    # Parse options
    (opts, args) = parser.parse_args()

    # Obtain multicrab directory
    #myMulticrabDir = "../FakeTauComparison_140603_182139/"
    if opts.multicrabDir != None:
        myMulticrabDir = opts.multicrabDir

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    # Select modules
    myModuleSelector.doSelect(opts)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    histograms.createLegend.moveDefaults(dx=-0.1, dh=-0.15)
    # Give more space for digits on the y axis labels                                                   
    style.tdrStyle.SetPadLeftMargin(0.19)
    style.tdrStyle.SetTitleYOffset(1.6)

    optModes = []
    optModes.append("OptQCDTailKillerLoosePlus") 

    myDisplayStatus = True
    # Loop over era/searchMode/optimizationMode options
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            for optimizationMode in optModes: #myModuleSelector.getSelectedOptimizationModes():
                # Construct info string of module
                myModuleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode)
                print HighlightStyle()+"Module:",myModuleInfoString,NormalStyle()
                # Obtain dataset manager
                dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
                # Do the usual normalisation
                dsetMgr.updateNAllEventsToPUWeighted()
                dsetMgr.loadLuminosities()
                plots.mergeRenameReorderForDataMC(dsetMgr)
                dsetMgr.merge("EWK", [
                              "TTJets",
                              "WJets",
                              "DYJetsToLL",
                              "SingleTop",
                              "Diboson"
                              ])
                # Make a directory for output
                myDir = "QCDInv_ClosureTest_%s"%myModuleInfoString
                createOutputdirectory(myDir)
                # Obtain luminosity
                myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
                # Print info so that user can check that merge went correct
                if myDisplayStatus:
                    dsetMgr.printDatasetTree()
                    print "Luminosity = %f 1/fb"%(myLuminosity / 1000.0)
                    print
                    myDisplayStatus = False
                # Run plots
                doClosureTestPlots(opts, dsetMgr, myModuleInfoString, myDir, myLuminosity, myNormFactors)
    # Check arguments
    myStatus = True
    if opts.mdir == None:
        print "Error: Make sure you provide path to multicrab directory with --mdir!"
        myStatus = False
    elif not os.path.exists(opts.mdir):
        raise Exception("Error: The path '%s' is not valid!"%opts.mdir)
    if not myStatus or opts.helpStatus:
        print ""
        parser.print_help()
        sys.exit()
    if not opts.histo == None:
        histogramName = opts.Histo

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mdir)
    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    myModuleSelector.doSelect(opts)
    myModuleSelector.printSelectedCombinationCount()

    # Read from multicrab.cfg the number of jobs
    myDict = consistencyCheck.getNumberOfJobsFromMultiCrabCfg(opts.mdir)

    # Loop over selected modules
    myMergedDict = {}
    for searchMode in myModuleSelector.getSelectedSearchModes():
        for optimizationMode in myModuleSelector.getSelectedOptimizationModes():
            for era in myModuleSelector.getSelectedEras():
                dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
                consistencyCheck.getNumberOfJobsFromMergedHistogramsFromDsetMgr(dsetMgr, myMergedDict)
def doNominalModule(myMulticrabDir, era, searchMode, optimizationMode,
                    myOutputCreator, myShapeString, myNormFactors,
                    myDisplayStatus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s" % (era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK",
                  ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb" % (myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode)
    myQCDNormalizationSystResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormSource")
    # Obtain results
    myResult = qcdInvertedResult.QCDInvertedResultManager(
        myShapeString,
        "AfterCollinearCuts",
        dsetMgr,
        myLuminosity,
        myModuleInfoString,
        myNormFactors,
        shapeOnly=False,
        displayPurityBreakdown=True,
        noRebin=True)
    # Store results
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(),
                             myShapeString + "_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(),
                             myShapeString + "_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),
                                              myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    # Note that only the source histograms for the shape uncert are stored
    # because the result must be calculated after rebinning
    # (and rebinning is no longer done here for flexibility reasons)
    myQCDNormalizationSystResults.addShape(myResult.getRegionSystNumerator(),
                                           myShapeString + "Numerator")
    myQCDNormalizationSystResults.addShape(myResult.getRegionSystDenominator(),
                                           myShapeString + "Denominator")
    myLabels = myResult.getControlPlotLabelsForQCDSyst()
    for i in range(0, len(myLabels)):
        myLabels[i] = myLabels[i] + "Numerator"
    myQCDNormalizationSystResults.addDataDrivenControlPlots(
        myResult.getRegionSystNumeratorCtrlPlots(), myLabels)
    for i in range(0, len(myLabels)):
        myLabels[i] = myLabels[i].replace("Numerator", "Denominator")
    myQCDNormalizationSystResults.addDataDrivenControlPlots(
        myResult.getRegionSystDenominatorCtrlPlots(), myLabels)
    myOutputCreator.addModule(myQCDNormalizationSystResults)
    # Clean up
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
Exemplo n.º 15
0
def main(argv):
    dirs = []
    if len(sys.argv) < 2:
        usage()

    myMulticrabDir = sys.argv[1]

    # Obtain normalization factors
    myNormalizationFactorSource = "QCDInvertedNormalizationFactors.py"
    myNormFactors = None
    myNormFactorsSafetyCheck = None
    if os.path.exists(myNormalizationFactorSource):
        myNormFactorsImport = getattr(
            __import__(myNormalizationFactorSource.replace(".py", "")),
            "QCDInvertedNormalization")
        myNormFactorsSafetyCheck = getattr(
            __import__(myNormalizationFactorSource.replace(".py", "")),
            "QCDInvertedNormalizationSafetyCheck")
        #QCDInvertedNormalizationSafetyCheck(era)
        myNormFactors = myNormFactorsImport.copy()
    else:
        raise Exception(
            ErrorLabel() +
            "Normalisation factors ('%s.py') not found!\nRun script InvertedTauID_Normalization.py to generate the normalization factors."
            % myNormalizationFactorSource)

    myModuleSelector = AnalysisModuleSelector(
    )  # Object for selecting data eras, search modes, and optimization modes

    parser = OptionParser(usage="Usage: %prog [options]",
                          add_help_option=True,
                          conflict_handler="resolve")
    myModuleSelector.addParserOptions(parser)
    parser.add_option("--mdir",
                      dest="multicrabDir",
                      action="store",
                      help="Multicrab directory")
    # Add here parser options, if necessary, following line is an example
    #parser.add_option("--showcard", dest="showDatacard", action="store_true", default=False, help="Print datacards also to screen")

    # Parse options
    (opts, args) = parser.parse_args()

    # Obtain multicrab directory
    #myMulticrabDir = "../FakeTauComparison_140603_182139/"
    if opts.multicrabDir != None:
        myMulticrabDir = opts.multicrabDir

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    # Select modules
    myModuleSelector.doSelect(opts)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    histograms.createLegend.moveDefaults(dx=-0.1, dh=-0.15)
    # Give more space for digits on the y axis labels
    style.tdrStyle.SetPadLeftMargin(0.19)
    style.tdrStyle.SetTitleYOffset(1.6)

    optModes = []
    optModes.append("OptQCDTailKillerLoosePlus")

    myDisplayStatus = True
    # Loop over era/searchMode/optimizationMode options
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            for optimizationMode in optModes:  #myModuleSelector.getSelectedOptimizationModes():
                # Construct info string of module
                myModuleInfoString = "%s_%s_%s" % (era, searchMode,
                                                   optimizationMode)
                print HighlightStyle(
                ) + "Module:", myModuleInfoString, NormalStyle()
                # Obtain dataset manager
                dsetMgr = dsetMgrCreator.createDatasetManager(
                    dataEra=era,
                    searchMode=searchMode,
                    optimizationMode=optimizationMode)
                # Do the usual normalisation
                dsetMgr.updateNAllEventsToPUWeighted()
                dsetMgr.loadLuminosities()
                plots.mergeRenameReorderForDataMC(dsetMgr)
                dsetMgr.merge(
                    "EWK",
                    ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
                # Make a directory for output
                myDir = "QCDInv_ClosureTest_%s" % myModuleInfoString
                createOutputdirectory(myDir)
                # Obtain luminosity
                myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
                # Print info so that user can check that merge went correct
                if myDisplayStatus:
                    dsetMgr.printDatasetTree()
                    print "Luminosity = %f 1/fb" % (myLuminosity / 1000.0)
                    print
                    myDisplayStatus = False
                # Run plots
                doClosureTestPlots(opts, dsetMgr, myModuleInfoString, myDir,
                                   myLuminosity, myNormFactors)
def doNominalModule(myMulticrabDir, era, searchMode, optimizationMode,
                    myOutputCreator, myShapeString, myNormFactors,
                    myDisplayStatus, dataDrivenFakeTaus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s" % (era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK",
                  ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])

    # dataset manager with tt contribution in ewk separated
    dsetMgrSeparatedTT = dsetMgrCreator.createDatasetManager(
        dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgrSeparatedTT.updateNAllEventsToPUWeighted()
    dsetMgrSeparatedTT.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgrSeparatedTT)
    # TT separated
    dsetMgrSeparatedTT.merge("EWKNoTT",
                             ["WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    dsetMgrSeparatedTT.merge("EWKTT", ["TTJets"])

    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()

    myFakeRateCalculator = fakeRate.FakeRateCalculator(
        dsetMgr,
        myShapeString,
        myNormFactors,
        myLuminosity,
        dataDrivenFakeTaus=dataDrivenFakeTaus)

    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb" % (myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode)
    myQCDNormalizationSystResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormSource")
    # Obtain results
    myResult = qcdInvertedResult.QCDInvertedResultManager(
        myShapeString,
        "AfterCollinearCuts",
        dsetMgr,
        myLuminosity,
        myModuleInfoString,
        myFakeRateCalculator.getTotalFakeRateProbabilities(),
        dataDrivenFakeTaus=dataDrivenFakeTaus,
        shapeOnly=False,
        displayPurityBreakdown=True,
        noRebin=True)
    # Store results
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(),
                             myShapeString + "_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(),
                             myShapeString + "_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),
                                              myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    # Note that only the source histograms for the shape uncert are stored
    # because the result must be calculated after rebinning
    # (and rebinning is no longer done here for flexibility reasons)
    numerator = myResult.getRegionSystNumerator()
    denominator = myResult.getRegionSystDenominator()
    #scale errors with weight at normalization point
    #norm_weight = myFakeRateWeightCalculatorAtNorm.getAverageWeight()
    average_weight = myFakeRateCalculator.getAverageWeight()
    #print average_weight
    fakeRate.scaleErrors(numerator, average_weight)
    fakeRate.scaleErrors(denominator, average_weight)
    myQCDNormalizationSystResults.addShape(numerator,
                                           myShapeString + "Numerator")
    myQCDNormalizationSystResults.addShape(denominator,
                                           myShapeString + "Denominator")
    myLabels = myResult.getControlPlotLabelsForQCDSyst()
    for i in range(0, len(myLabels)):
        myLabels[i] = myLabels[i] + "Numerator"
    myQCDNormalizationSystResults.addDataDrivenControlPlots(
        myResult.getRegionSystNumeratorCtrlPlots(), myLabels)
    for i in range(0, len(myLabels)):
        myLabels[i] = myLabels[i].replace("Numerator", "Denominator")
    myQCDNormalizationSystResults.addDataDrivenControlPlots(
        myResult.getRegionSystDenominatorCtrlPlots(), myLabels)
    myOutputCreator.addModule(myQCDNormalizationSystResults)

    # Up variation of fake weighting
    myFakeWeightingSystResultsPlus = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode, "SystVarFakeWeightingPlus")
    myResult_FakeWeightingPlus = qcdInvertedResult.QCDInvertedResultManager(
        myShapeString,
        "AfterCollinearCuts",
        dsetMgr,
        myLuminosity,
        myModuleInfoString,
        myFakeRateCalculator.getTotalFakeRateProbabilitiesSystVarUp(),
        dataDrivenFakeTaus=dataDrivenFakeTaus,
        shapeOnly=False,
        displayPurityBreakdown=True,
        noRebin=True)
    myFakeWeightingSystResultsPlus.addShape(
        myResult_FakeWeightingPlus.getShape(), myShapeString)
    myFakeWeightingSystResultsPlus.addShape(
        myResult_FakeWeightingPlus.getShapeMCEWK(), myShapeString + "_MCEWK")
    myFakeWeightingSystResultsPlus.addShape(
        myResult_FakeWeightingPlus.getShapePurity(), myShapeString + "_Purity")
    myFakeWeightingSystResultsPlus.addDataDrivenControlPlots(
        myResult_FakeWeightingPlus.getControlPlots(),
        myResult.getControlPlotLabels())
    myOutputCreator.addModule(myFakeWeightingSystResultsPlus)

    # Down variation of fake weighting
    myFakeWeightingSystResultsMinus = pseudoMultiCrabCreator.PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode,
        "SystVarFakeWeightingMinus")
    myResult_FakeWeightingMinus = qcdInvertedResult.QCDInvertedResultManager(
        myShapeString,
        "AfterCollinearCuts",
        dsetMgr,
        myLuminosity,
        myModuleInfoString,
        myFakeRateCalculator.getTotalFakeRateProbabilitiesSystVarDown(),
        dataDrivenFakeTaus=dataDrivenFakeTaus,
        shapeOnly=False,
        displayPurityBreakdown=True,
        noRebin=True)
    myFakeWeightingSystResultsMinus.addShape(
        myResult_FakeWeightingMinus.getShape(), myShapeString)
    myFakeWeightingSystResultsMinus.addShape(
        myResult_FakeWeightingMinus.getShapeMCEWK(), myShapeString + "_MCEWK")
    myFakeWeightingSystResultsMinus.addShape(
        myResult_FakeWeightingMinus.getShapePurity(),
        myShapeString + "_Purity")
    myFakeWeightingSystResultsMinus.addDataDrivenControlPlots(
        myResult_FakeWeightingMinus.getControlPlots(),
        myResult.getControlPlotLabels())
    myOutputCreator.addModule(myFakeWeightingSystResultsMinus)

    # Scalar uncertainties as shapes for MC EWK
    for scalarName in myScalarUncertainties.keys():
        if scalarName == "probBtag":
            myScalarDsetMgr = dsetMgrSeparatedTT
            uncertAffectsTT = False
        else:
            myScalarDsetMgr = dsetMgr
            uncertAffectsTT = True
        # anti-correlation: flipped sign of variation
        upScalarFakeRateCalculator = fakeRate.FakeRateCalculator(
            myScalarDsetMgr,
            myShapeString,
            myNormFactors,
            myLuminosity,
            EWKUncertaintyFactor=1 -
            myScalarUncertainties[scalarName].getUncertaintyUp(),
            UncertAffectsTT=uncertAffectsTT,
            dataDrivenFakeTaus=dataDrivenFakeTaus)
        downScalarFakeRateCalculator = fakeRate.FakeRateCalculator(
            myScalarDsetMgr,
            myShapeString,
            myNormFactors,
            myLuminosity,
            EWKUncertaintyFactor=1 +
            myScalarUncertainties[scalarName].getUncertaintyDown(),
            UncertAffectsTT=uncertAffectsTT,
            dataDrivenFakeTaus=dataDrivenFakeTaus)
        #print "Scalar uncertainty:", scalarName, myScalarUncertainties[scalarName].getUncertaintyDown(), myScalarUncertainties[scalarName].getUncertaintyUp()
        upShape = qcdInvertedResult.QCDInvertedShape(
            upScalarFakeRateCalculator.getShape(),
            myModuleInfoString,
            upScalarFakeRateCalculator.getTotalFakeRateProbabilities(),
            optionPrintPurityByBins=False,
            optionDoNQCDByBinHistograms=False)  # prev: .getFakeTauShape()
        downShape = qcdInvertedResult.QCDInvertedShape(
            downScalarFakeRateCalculator.getShape(),
            myModuleInfoString,
            downScalarFakeRateCalculator.getTotalFakeRateProbabilities(),
            optionPrintPurityByBins=False,
            optionDoNQCDByBinHistograms=False)  # prev: .getFakeTauShape()
        # Up variation module
        myScalarSystPlus = pseudoMultiCrabCreator.PseudoMultiCrabModule(
            dsetMgr, era, searchMode, optimizationMode,
            "SystVar%sPlus" % scalarName)
        myScalarSystPlus.addShape(upShape.getResultShape(), myShapeString)
        myScalarSystPlus.addShape(upShape.getResultMCEWK(),
                                  myShapeString + "_MCEWK")
        myScalarSystPlus.addShape(upShape.getResultPurity(),
                                  myShapeString + "_Purity")
        #myScalarSystPlus.addDataDrivenControlPlots(myResult_FakeWeightingMinus.getControlPlots(),myResult.getControlPlotLabels())
        myOutputCreator.addModule(myScalarSystPlus)
        # Down variation module
        myScalarSystMinus = pseudoMultiCrabCreator.PseudoMultiCrabModule(
            dsetMgr, era, searchMode, optimizationMode,
            "SystVar%sMinus" % scalarName)
        myScalarSystMinus.addShape(downShape.getResultShape(), myShapeString)
        myScalarSystMinus.addShape(downShape.getResultMCEWK(),
                                   myShapeString + "_MCEWK")
        myScalarSystMinus.addShape(downShape.getResultPurity(),
                                   myShapeString + "_Purity")
        #myScalarSystMinus.addDataDrivenControlPlots(myResult_FakeWeightingMinus.getControlPlots(),myResult.getControlPlotLabels())
        myOutputCreator.addModule(myScalarSystMinus)

    # Clean up
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
Exemplo n.º 17
0
                      help="remove MC QCD")
    parser.add_option("--noSignal",
                      dest="noSignal",
                      action="store_true",
                      default=False,
                      help="remove MC QCD")
    parser.add_option("--mdir",
                      dest="multicrabDir",
                      help="path to multicrab directory")
    (opts, args) = parser.parse_args()

    # Get dataset manager creator and handle different era/searchMode/optimizationMode combinations
    myPath = "."
    if opts.multicrabDir != None:
        myPath = opts.multicrabDir
    signalDsetCreator = dataset.readFromMulticrabCfg(directory=myPath)
    myModuleSelector.setPrimarySource("Signal analysis", signalDsetCreator)
    myModuleSelector.doSelect(opts)

    # Arguments are ok, proceed to run
    myChosenModuleCount = len(myModuleSelector.getSelectedEras()) * len(
        myModuleSelector.getSelectedSearchModes()) * len(
            myModuleSelector.getSelectedOptimizationModes())
    print "Will run over %d modules (%d eras x %d searchModes x %d optimizationModes)" % (
        myChosenModuleCount, len(myModuleSelector.getSelectedEras()),
        len(myModuleSelector.getSelectedSearchModes()),
        len(myModuleSelector.getSelectedOptimizationModes()))
    myCount = 1
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            for optimizationMode in myModuleSelector.getSelectedOptimizationModes(
def doNominalModule(myMulticrabDir,era,searchMode,optimizationMode,myOutputCreator,myShapeString,myNormFactors,myDisplayStatus,dataDrivenFakeTaus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])

    # dataset manager with tt contribution in ewk separated
    dsetMgrSeparatedTT = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgrSeparatedTT.updateNAllEventsToPUWeighted()
    dsetMgrSeparatedTT.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgrSeparatedTT)
    # TT separated
    dsetMgrSeparatedTT.merge("EWKNoTT", ["WJets","DYJetsToLL","SingleTop","Diboson"])
    dsetMgrSeparatedTT.merge("EWKTT", ["TTJets"])

    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()

    myFakeRateCalculator = fakeRate.FakeRateCalculator(dsetMgr, myShapeString, myNormFactors, myLuminosity, dataDrivenFakeTaus = dataDrivenFakeTaus)

    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb"%(myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode)
    myQCDNormalizationSystResults = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormSource")
    # Obtain results
    myResult = qcdInvertedResult.QCDInvertedResultManager(myShapeString, "AfterCollinearCuts", dsetMgr, myLuminosity, myModuleInfoString, myFakeRateCalculator.getTotalFakeRateProbabilities(), dataDrivenFakeTaus=dataDrivenFakeTaus, shapeOnly=False, displayPurityBreakdown=True, noRebin=True)
    # Store results
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(), myShapeString+"_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(), myShapeString+"_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    # Note that only the source histograms for the shape uncert are stored
    # because the result must be calculated after rebinning
    # (and rebinning is no longer done here for flexibility reasons)
    numerator = myResult.getRegionSystNumerator()
    denominator = myResult.getRegionSystDenominator()
    #scale errors with weight at normalization point
    #norm_weight = myFakeRateWeightCalculatorAtNorm.getAverageWeight()
    average_weight = myFakeRateCalculator.getAverageWeight()
    #print average_weight
    fakeRate.scaleErrors(numerator, average_weight)
    fakeRate.scaleErrors(denominator, average_weight)
    myQCDNormalizationSystResults.addShape(numerator, myShapeString+"Numerator")
    myQCDNormalizationSystResults.addShape(denominator, myShapeString+"Denominator")
    myLabels = myResult.getControlPlotLabelsForQCDSyst()
    for i in range(0,len(myLabels)):
        myLabels[i] = myLabels[i]+"Numerator"
    myQCDNormalizationSystResults.addDataDrivenControlPlots(myResult.getRegionSystNumeratorCtrlPlots(),myLabels)
    for i in range(0,len(myLabels)):
        myLabels[i] = myLabels[i].replace("Numerator","Denominator")
    myQCDNormalizationSystResults.addDataDrivenControlPlots(myResult.getRegionSystDenominatorCtrlPlots(),myLabels)
    myOutputCreator.addModule(myQCDNormalizationSystResults)

    # Up variation of fake weighting
    myFakeWeightingSystResultsPlus = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarFakeWeightingPlus")
    myResult_FakeWeightingPlus = qcdInvertedResult.QCDInvertedResultManager(myShapeString, "AfterCollinearCuts", dsetMgr, myLuminosity,myModuleInfoString, myFakeRateCalculator.getTotalFakeRateProbabilitiesSystVarUp(), dataDrivenFakeTaus=dataDrivenFakeTaus, shapeOnly=False, displayPurityBreakdown=True, noRebin=True)                                                                                           
    myFakeWeightingSystResultsPlus.addShape(myResult_FakeWeightingPlus.getShape(), myShapeString)
    myFakeWeightingSystResultsPlus.addShape(myResult_FakeWeightingPlus.getShapeMCEWK(), myShapeString+"_MCEWK")
    myFakeWeightingSystResultsPlus.addShape(myResult_FakeWeightingPlus.getShapePurity(), myShapeString+"_Purity")
    myFakeWeightingSystResultsPlus.addDataDrivenControlPlots(myResult_FakeWeightingPlus.getControlPlots(),myResult.getControlPlotLabels())
    myOutputCreator.addModule(myFakeWeightingSystResultsPlus)

    # Down variation of fake weighting
    myFakeWeightingSystResultsMinus = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVarFakeWeightingMinus")
    myResult_FakeWeightingMinus = qcdInvertedResult.QCDInvertedResultManager(myShapeString, "AfterCollinearCuts", dsetMgr, myLuminosity,myModuleInfoString, myFakeRateCalculator.getTotalFakeRateProbabilitiesSystVarDown(), dataDrivenFakeTaus=dataDrivenFakeTaus, shapeOnly=False, displayPurityBreakdown=True, noRebin=True)                                                                                           
    myFakeWeightingSystResultsMinus.addShape(myResult_FakeWeightingMinus.getShape(), myShapeString)
    myFakeWeightingSystResultsMinus.addShape(myResult_FakeWeightingMinus.getShapeMCEWK(), myShapeString+"_MCEWK")
    myFakeWeightingSystResultsMinus.addShape(myResult_FakeWeightingMinus.getShapePurity(), myShapeString+"_Purity")
    myFakeWeightingSystResultsMinus.addDataDrivenControlPlots(myResult_FakeWeightingMinus.getControlPlots(),myResult.getControlPlotLabels())
    myOutputCreator.addModule(myFakeWeightingSystResultsMinus)

    # Scalar uncertainties as shapes for MC EWK
    for scalarName in myScalarUncertainties.keys():
        if scalarName == "probBtag":
            myScalarDsetMgr = dsetMgrSeparatedTT
            uncertAffectsTT = False 
        else:
            myScalarDsetMgr = dsetMgr
            uncertAffectsTT = True
        # anti-correlation: flipped sign of variation
        upScalarFakeRateCalculator = fakeRate.FakeRateCalculator(myScalarDsetMgr, myShapeString, myNormFactors, myLuminosity, EWKUncertaintyFactor=1-myScalarUncertainties[scalarName].getUncertaintyUp(), UncertAffectsTT = uncertAffectsTT, dataDrivenFakeTaus = dataDrivenFakeTaus)
        downScalarFakeRateCalculator = fakeRate.FakeRateCalculator(myScalarDsetMgr, myShapeString, myNormFactors, myLuminosity, EWKUncertaintyFactor=1+myScalarUncertainties[scalarName].getUncertaintyDown(), UncertAffectsTT = uncertAffectsTT, dataDrivenFakeTaus = dataDrivenFakeTaus)
        #print "Scalar uncertainty:", scalarName, myScalarUncertainties[scalarName].getUncertaintyDown(), myScalarUncertainties[scalarName].getUncertaintyUp()
        upShape = qcdInvertedResult.QCDInvertedShape(upScalarFakeRateCalculator.getShape(), myModuleInfoString, upScalarFakeRateCalculator.getTotalFakeRateProbabilities(), optionPrintPurityByBins=False, optionDoNQCDByBinHistograms=False) # prev: .getFakeTauShape()
        downShape = qcdInvertedResult.QCDInvertedShape(downScalarFakeRateCalculator.getShape(), myModuleInfoString, downScalarFakeRateCalculator.getTotalFakeRateProbabilities(), optionPrintPurityByBins=False, optionDoNQCDByBinHistograms=False) # prev: .getFakeTauShape()
        # Up variation module
        myScalarSystPlus = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVar%sPlus"%scalarName)
        myScalarSystPlus.addShape(upShape.getResultShape(), myShapeString)
        myScalarSystPlus.addShape(upShape.getResultMCEWK(), myShapeString+"_MCEWK")
        myScalarSystPlus.addShape(upShape.getResultPurity(), myShapeString+"_Purity")
        #myScalarSystPlus.addDataDrivenControlPlots(myResult_FakeWeightingMinus.getControlPlots(),myResult.getControlPlotLabels())
        myOutputCreator.addModule(myScalarSystPlus)
        # Down variation module
        myScalarSystMinus = pseudoMultiCrabCreator.PseudoMultiCrabModule(dsetMgr, era, searchMode, optimizationMode, "SystVar%sMinus"%scalarName)
        myScalarSystMinus.addShape(downShape.getResultShape(), myShapeString)
        myScalarSystMinus.addShape(downShape.getResultMCEWK(), myShapeString+"_MCEWK")
        myScalarSystMinus.addShape(downShape.getResultPurity(), myShapeString+"_Purity")
        #myScalarSystMinus.addDataDrivenControlPlots(myResult_FakeWeightingMinus.getControlPlots(),myResult.getControlPlotLabels())
        myOutputCreator.addModule(myScalarSystMinus)

    # Clean up
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
    ROOT.gDirectory.GetList().Delete()
Exemplo n.º 19
0
def doNominalModule(myMulticrabDir, era, searchMode, optimizationMode,
                    myOutputCreator, myShapeString, myDisplayStatus):
    # Construct info string of module
    myModuleInfoString = "%s_%s_%s" % (era, searchMode, optimizationMode)
    # Obtain dataset manager
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK",
                  ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()
    # Print info so that user can check that merge went correct
    if myDisplayStatus:
        dsetMgr.printDatasetTree()
        print "Luminosity = %f 1/fb" % (myLuminosity / 1000.0)
        print
        myDisplayStatus = False
    # Gather results
    # Create containers for results
    myModuleResults = PseudoMultiCrabModule(dsetMgr, era, searchMode,
                                            optimizationMode)
    myQCDNormalizationSystUpResults = PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormPlus")
    myQCDNormalizationSystDownResults = PseudoMultiCrabModule(
        dsetMgr, era, searchMode, optimizationMode, "SystVarQCDNormMinus")
    # Obtain results
    myResult = None
    if massType == "mt":
        myResult = QCDFactorisedResultManager(myMtSpecs,
                                              dsetMgr,
                                              myLuminosity,
                                              myModuleInfoString,
                                              shapeOnly=False,
                                              displayPurityBreakdown=True)
    elif massType == "invmass":
        myResult = QCDFactorisedResultManager(myFullMassSpecs,
                                              dsetMgr,
                                              myLuminosity,
                                              myModuleInfoString,
                                              shapeOnly=False,
                                              displayPurityBreakdown=True)
    myModuleResults.addShape(myResult.getShape(), myShapeString)
    myModuleResults.addShape(myResult.getShapeMCEWK(),
                             myShapeString + "_MCEWK")
    myModuleResults.addShape(myResult.getShapePurity(),
                             myShapeString + "_Purity")
    myModuleResults.addDataDrivenControlPlots(myResult.getControlPlots(),
                                              myResult.getControlPlotLabels())
    myOutputCreator.addModule(myModuleResults)
    # Up variation of QCD normalization (i.e. ctrl->signal region transition)
    myQCDNormalizationSystUpResults.addShape(myResult.getRegionSystUp(),
                                             myShapeString)
    myQCDNormalizationSystUpResults.addDataDrivenControlPlots(
        myResult.getRegionSystUpCtrlPlots(),
        myResult.getControlPlotLabelsForQCDSyst())
    myOutputCreator.addModule(myQCDNormalizationSystUpResults)
    # Down variation of QCD normalization (i.e. ctrl->signal region transition)
    myQCDNormalizationSystDownResults.addShape(myResult.getRegionSystDown(),
                                               myShapeString)
    myQCDNormalizationSystDownResults.addDataDrivenControlPlots(
        myResult.getRegionSystDownCtrlPlots(),
        myResult.getControlPlotLabelsForQCDSyst())
    myOutputCreator.addModule(myQCDNormalizationSystDownResults)
    myResult.delete()
    dsetMgr.close()
    dsetMgrCreator.close()
    ROOT.gROOT.CloseFiles()
    ROOT.gROOT.GetListOfCanvases().Delete()
Exemplo n.º 20
0
def main():
    myShapeString = "shapeTransverseMass"
    myEWKfakeShapeString = "shapeEWKFakeTausTransverseMass"

    optimizationMode = "OptQCDTailKillerLoosePlus"
    myModuleInfoString = "%s_%s_%s" % (era, searchMode, optimizationMode)

    defaultBinning = [0, 20, 40, 60, 80, 100, 120, 140, 160, 200, 400]
    myBaselineMulticrabDir = "/mnt/flustre/epekkari/signal_2014-07-01_nominal"
    #myInvertedMulticrabDir = "/mnt/flustre/epekkari/FixedBugsQCDPlusEWKFakeTau_140919_164308"
    myInvertedMulticrabDir = "/mnt/flustre/epekkari/FinalInvertedFakeTau_150218_132905_150218_133121"
    #myInvertedMulticrabDir = "/mnt/flustre/epekkari/InvertedFakeTau-12-2_150212_170900"
    #myInvertedMulticrabDir = "/home/epekkari/Analysis-4-12/CMSSW_5_3_9_patch3/src/HiggsAnalysis/HeavyChHiggsToTauNu/test/InvertedFakeTau-12-2_150212_170900"

    # Inverted datasets
    dsetMgrCreator = dataset.readFromMulticrabCfg(
        directory=myInvertedMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(
        dataEra=era, searchMode=searchMode, optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK",
                  ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()

    # Fake rate weighting
    myFakeRateWeightCalculator = fakeRateWeighting.FakeRateWeightCalculator(
        dsetMgr, myShapeString,
        QCDInvertedNormalizationFactors.QCDInvertedNormalization, myLuminosity)

    # QCD normalization factors
    qcd_norm = getSimplifiedFactorDict(
        QCDInvertedNormalizationFactors.QCDInvertedNormalization, "QCD")

    # Convert from inverted to baseline
    qcdShape = qcdInvertedResult.QCDInvertedShape(
        myFakeRateWeightCalculator.getQCDShape(),
        myModuleInfoString,
        qcd_norm,
        optionPrintPurityByBins=False,
        optionDoNQCDByBinHistograms=False)
    fakeTauShape = qcdInvertedResult.QCDInvertedShape(
        myFakeRateWeightCalculator.getFakeTauShape(),
        myModuleInfoString,
        myFakeRateWeightCalculator.getTotalFakeRateProbabilities(),
        optionPrintPurityByBins=False,
        optionDoNQCDByBinHistograms=False)

    qcd_mt = qcdShape.getResultShape()
    fakeTau_mt = fakeTauShape.getResultShape()

    datasets_baseline = refinedDataSets([myBaselineMulticrabDir], era,
                                        searchMode, "signalAnalysis",
                                        optimizationMode, False)
    MCfake_mt_plot = plots.DataMCPlot(datasets_baseline, myEWKfakeShapeString)
    MCfake_mt = MCfake_mt_plot.histoMgr.getHisto("EWK").getRootHisto().Clone(
        myEWKfakeShapeString)
    # Add MC fakes from baseline
    qcd_mt.Add(MCfake_mt)

    qcd_mt.SetName("Mis-ID #tau, sim. EWK+t#bar{t} no #tau_{h}")
    fakeTau_mt.SetName("Mis-ID. #tau, data-driven EWK+t#bar{t} no #tau_{h}")
    qcd_mt.SetLineColor(2)
    qcd_mt.SetLineStyle(2)
    fakeTau_mt.SetLineColor(1)
    qcd_mt.SetLineWidth(2)
    fakeTau_mt.SetLineWidth(2)

    qcd_mt = qcd_mt.Rebin(
        len(defaultBinning) - 1, "", array.array("d", defaultBinning))
    fakeTau_mt = fakeTau_mt.Rebin(
        len(defaultBinning) - 1, "", array.array("d", defaultBinning))

    # Divide by binwidth
    for i in range(0, qcd_mt.GetSize()):
        qcd_mt.SetBinContent(i,
                             qcd_mt.GetBinContent(i) / qcd_mt.GetBinWidth(i))
        fakeTau_mt.SetBinContent(
            i,
            fakeTau_mt.GetBinContent(i) / fakeTau_mt.GetBinWidth(i))
        qcd_mt.SetBinError(i, qcd_mt.GetBinError(i) / qcd_mt.GetBinWidth(i))
        fakeTau_mt.SetBinError(
            i,
            fakeTau_mt.GetBinError(i) / fakeTau_mt.GetBinWidth(i))

    # Plot results
    plotClosure(qcd_mt, fakeTau_mt, "Inclusive", optimizationMode)
    plotFakeRateProbabilities(myFakeRateWeightCalculator.getWeights(),
                              myFakeRateWeightCalculator.getWeightErrors(),
                              myFakeRateWeightCalculator.getSortedFactors(),
                              optimizationMode)
    # Check arguments
    myStatus = True
    if opts.mdir == None:
        print "Error: Make sure you provide path to multicrab directory with --mdir!"
        myStatus = False
    elif not os.path.exists(opts.mdir):
        raise Exception("Error: The path '%s' is not valid!" % opts.mdir)
    if not myStatus or opts.helpStatus:
        print ""
        parser.print_help()
        sys.exit()
    if not opts.histo == None:
        histogramName = opts.Histo

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=opts.mdir)
    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    myModuleSelector.doSelect(opts)
    myModuleSelector.printSelectedCombinationCount()

    # Read from multicrab.cfg the number of jobs
    myDict = consistencyCheck.getNumberOfJobsFromMultiCrabCfg(opts.mdir)

    # Loop over selected modules
    myMergedDict = {}
    for searchMode in myModuleSelector.getSelectedSearchModes():
        for optimizationMode in myModuleSelector.getSelectedOptimizationModes(
        ):
            for era in myModuleSelector.getSelectedEras():
                dsetMgr = dsetMgrCreator.createDatasetManager(
                    dataEra=era,
        parser.error("--mc and --residual can't be given at the same time")
    multicrabDirs = args

    createArgs = {"includeOnlyTasks": "SingleMu"}
    datasetCreator = DatasetCreatorMany(multicrabDirs, **createArgs)
    datasetCreatorMC = None
    if len(opts.mcs) > 0:
        if "*" in opts.mcs:
            del createArgs["includeOnlyTasks"]
            createArgs["excludeTasks"] = "SingleMu"
        else:
            createArgs["includeOnlyTasks"] = "|".join(opts.mcs)
        datasetCreatorMC = DatasetCreatorMany(multicrabDirs, emptyDatasetsAsNone=True, **createArgs)
    if opts.residual is not None:
        datasetCreatorMC = DatasetCreatorMany(multicrabDirs, includeOnlyTasks=["DYJetsToLL"], emptyDatasetsAsNone=True)
        datasetCreatorSig = dataset.readFromMulticrabCfg(directory=opts.residual, includeOnlyTasks=["DYJetsToLL"])
    if opts.listAnalyses:
        datasetCreator.printAnalyses()
        sys.exit(0)
    analysisName = opts.analysisName
    if analysisName is None:
        analysisName = ""
        for a in datasetCreator.getAnalyses():
            if len(a) > len(analysisName):
                analysisName = a
        if len(analysisName) == 0:
            raise Exception("Did not find analysis name")

    # Deduce eras
    if datasetCreatorMC is not None:
        eras = datasetCreatorMC.getDataEras()
 def __init__(self, directories, **kwargs):
     if len(directories) == 0:
         raise Exception("Need at least one directory")
     self._creators = filter(lambda c: c is not None, [dataset.readFromMulticrabCfg(directory=d, **kwargs) for d in directories])
Exemplo n.º 24
0
if __name__ == "__main__":
    style = tdrstyle.TDRStyle()
    style.tdrStyle.SetPadRightMargin(0.15)
        
    myModuleSelector = AnalysisModuleSelector() # Object for selecting data eras, search modes, and optimization modes
    parser = OptionParser(usage="Usage: %prog [options]")
    myModuleSelector.addParserOptions(parser)
    parser.add_option("-d", dest="dirs", action="append", help="name of sample directory inside multicrab dir (multiple directories can be specified with multiple -d arguments)")
    parser.add_option("--signaldir", dest="signalDir", action="store", help="signal Multicrab directory")
    parser.add_option("--embdir", dest="embDir", action="store", help="embedding pseudo-Multicrab directory")
    parser.add_option("--qcddir", dest="qcdDir", action="store", help="QCD pseudo-Multicrab directory")
    parser.add_option("--dataonly", dest="dataonly", action="store_true", default=False, help="Do only data agreemement plots")
    (opts, args) = parser.parse_args()

    # Get dataset manager creator and handle different era/searchMode/optimizationMode combinations
    signalDsetCreator = dataset.readFromMulticrabCfg(directory=opts.signalDir)
    embDsetCreator = dataset.readFromMulticrabCfg(directory=opts.embDir)
    qcdDsetCreator = dataset.readFromMulticrabCfg(directory=opts.qcdDir)
    myModuleSelector.setPrimarySource("Signal analysis", signalDsetCreator)
    myModuleSelector.addOtherSource("Embedding", embDsetCreator)
    myModuleSelector.addOtherSource("QCD", qcdDsetCreator)
    myModuleSelector.doSelect(opts)

    # Arguments are ok, proceed to run
    myChosenModuleCount = len(myModuleSelector.getSelectedEras())*len(myModuleSelector.getSelectedSearchModes())*len(myModuleSelector.getSelectedOptimizationModes())
    print "Will run over %d modules (%d eras x %d searchModes x %d optimizationModes)"%(myChosenModuleCount,len(myModuleSelector.getSelectedEras()),len(myModuleSelector.getSelectedSearchModes()),len(myModuleSelector.getSelectedOptimizationModes()))
    myCount = 1
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            for optimizationMode in myModuleSelector.getSelectedOptimizationModes():
                print "%sProcessing module %d/%d: era=%s searchMode=%s optimizationMode=%s%s"%(HighlightStyle(), myCount, myChosenModuleCount, era, searchMode, optimizationMode, NormalStyle())
    datasetCreator = DatasetCreatorMany(multicrabDirs, **createArgs)
    datasetCreatorMC = None
    if len(opts.mcs) > 0:
        if "*" in opts.mcs:
            del createArgs["includeOnlyTasks"]
            createArgs["excludeTasks"] = "SingleMu"
        else:
            createArgs["includeOnlyTasks"] = "|".join(opts.mcs)
        datasetCreatorMC = DatasetCreatorMany(multicrabDirs,
                                              emptyDatasetsAsNone=True,
                                              **createArgs)
    if opts.residual is not None:
        datasetCreatorMC = DatasetCreatorMany(multicrabDirs,
                                              includeOnlyTasks=["DYJetsToLL"],
                                              emptyDatasetsAsNone=True)
        datasetCreatorSig = dataset.readFromMulticrabCfg(
            directory=opts.residual, includeOnlyTasks=["DYJetsToLL"])
    if opts.listAnalyses:
        datasetCreator.printAnalyses()
        sys.exit(0)
    analysisName = opts.analysisName
    if analysisName is None:
        analysisName = ""
        for a in datasetCreator.getAnalyses():
            if len(a) > len(analysisName):
                analysisName = a
        if len(analysisName) == 0:
            raise Exception("Did not find analysis name")

    # Deduce eras
    if datasetCreatorMC is not None:
        eras = datasetCreatorMC.getDataEras()
Exemplo n.º 26
0
    myModuleSelector = AnalysisModuleSelector() # Object for selecting data eras, search modes, and optimization modes

    parser = OptionParser(usage="Usage: %prog [options]",add_help_option=True,conflict_handler="resolve")
    myModuleSelector.addParserOptions(parser)
    parser.add_option("--mdir", dest="multicrabDir", action="store", help="Multicrab directory")

    # Parse options
    (opts, args) = parser.parse_args()

    # Obtain multicrab directory
    myMulticrabDir = "."
    if opts.multicrabDir != None:
        myMulticrabDir = opts.multicrabDir

    # Obtain dsetMgrCreator and register it to module selector
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myMulticrabDir)
    myModuleSelector.setPrimarySource("analysis", dsetMgrCreator)
    # Select modules
    myModuleSelector.doSelect(opts)

    # Apply TDR style
    style = tdrstyle.TDRStyle()

    myDisplayStatus = True
    # Loop over era/searchMode/optimizationMode options
    for era in myModuleSelector.getSelectedEras():
        for searchMode in myModuleSelector.getSelectedSearchModes():
            # Construct info string of module
            myModuleInfoString = "%s_%s"%(era, searchMode)
            # Make a directory for output
            myDir = "purityplots_%s"%myModuleInfoString
Exemplo n.º 27
0
def main():
    myShapeString = "shapeTransverseMass"
    myEWKfakeShapeString = "shapeEWKFakeTausTransverseMass"

    optimizationMode = "OptQCDTailKillerLoosePlus"
    myModuleInfoString = "%s_%s_%s"%(era, searchMode, optimizationMode)

    defaultBinning = [0,20,40,60,80,100,120,140,160,200,400]
    myBaselineMulticrabDir = "/mnt/flustre/epekkari/signal_2014-07-01_nominal"
    #myInvertedMulticrabDir = "/mnt/flustre/epekkari/FixedBugsQCDPlusEWKFakeTau_140919_164308"
    myInvertedMulticrabDir = "/mnt/flustre/epekkari/FinalInvertedFakeTau_150218_132905_150218_133121"
    #myInvertedMulticrabDir = "/mnt/flustre/epekkari/InvertedFakeTau-12-2_150212_170900"
    #myInvertedMulticrabDir = "/home/epekkari/Analysis-4-12/CMSSW_5_3_9_patch3/src/HiggsAnalysis/HeavyChHiggsToTauNu/test/InvertedFakeTau-12-2_150212_170900"

    # Inverted datasets
    dsetMgrCreator = dataset.readFromMulticrabCfg(directory=myInvertedMulticrabDir)
    dsetMgr = dsetMgrCreator.createDatasetManager(dataEra=era,searchMode=searchMode,optimizationMode=optimizationMode)
    # Do the usual normalisation
    dsetMgr.updateNAllEventsToPUWeighted()
    dsetMgr.loadLuminosities()
    plots.mergeRenameReorderForDataMC(dsetMgr)
    dsetMgr.merge("EWK", ["TTJets","WJets","DYJetsToLL","SingleTop","Diboson"])
    # Obtain luminosity
    myLuminosity = dsetMgr.getDataset("Data").getLuminosity()

    # Fake rate weighting
    myFakeRateWeightCalculator = fakeRateWeighting.FakeRateWeightCalculator(dsetMgr, myShapeString, QCDInvertedNormalizationFactors.QCDInvertedNormalization, myLuminosity)

    # QCD normalization factors
    qcd_norm = getSimplifiedFactorDict(QCDInvertedNormalizationFactors.QCDInvertedNormalization, "QCD")
    
    # Convert from inverted to baseline
    qcdShape = qcdInvertedResult.QCDInvertedShape(myFakeRateWeightCalculator.getQCDShape(), myModuleInfoString, qcd_norm, optionPrintPurityByBins=False, optionDoNQCDByBinHistograms=False)
    fakeTauShape = qcdInvertedResult.QCDInvertedShape(myFakeRateWeightCalculator.getFakeTauShape(), myModuleInfoString, myFakeRateWeightCalculator.getTotalFakeRateProbabilities(), optionPrintPurityByBins=False, optionDoNQCDByBinHistograms=False)

    qcd_mt = qcdShape.getResultShape()
    fakeTau_mt = fakeTauShape.getResultShape()

    datasets_baseline = refinedDataSets([myBaselineMulticrabDir], era, searchMode, "signalAnalysis", optimizationMode, False)
    MCfake_mt_plot = plots.DataMCPlot(datasets_baseline, myEWKfakeShapeString)
    MCfake_mt = MCfake_mt_plot.histoMgr.getHisto("EWK").getRootHisto().Clone(myEWKfakeShapeString)
    # Add MC fakes from baseline
    qcd_mt.Add(MCfake_mt)

    qcd_mt.SetName("Mis-ID #tau, sim. EWK+t#bar{t} no #tau_{h}")
    fakeTau_mt.SetName("Mis-ID. #tau, data-driven EWK+t#bar{t} no #tau_{h}")
    qcd_mt.SetLineColor(2)
    qcd_mt.SetLineStyle(2)
    fakeTau_mt.SetLineColor(1)
    qcd_mt.SetLineWidth(2)
    fakeTau_mt.SetLineWidth(2)

    qcd_mt = qcd_mt.Rebin(len(defaultBinning)-1,"", array.array("d",defaultBinning))
    fakeTau_mt = fakeTau_mt.Rebin(len(defaultBinning)-1,"", array.array("d",defaultBinning))
    
    # Divide by binwidth
    for i in range(0,qcd_mt.GetSize()):
        qcd_mt.SetBinContent(i, qcd_mt.GetBinContent(i)/qcd_mt.GetBinWidth(i))
        fakeTau_mt.SetBinContent(i, fakeTau_mt.GetBinContent(i)/fakeTau_mt.GetBinWidth(i))
        qcd_mt.SetBinError(i, qcd_mt.GetBinError(i)/qcd_mt.GetBinWidth(i))
        fakeTau_mt.SetBinError(i, fakeTau_mt.GetBinError(i)/fakeTau_mt.GetBinWidth(i))

    # Plot results
    plotClosure(qcd_mt, fakeTau_mt, "Inclusive", optimizationMode)
    plotFakeRateProbabilities(myFakeRateWeightCalculator.getWeights(), myFakeRateWeightCalculator.getWeightErrors(), myFakeRateWeightCalculator.getSortedFactors(), optimizationMode)