示例#1
0
def main(opts):
    # Assume by default that the observed limit should be blinded
    if not opts.unblinded:
        print "Working in BLINDED mode, i.e. I will not tell you the observed limit before you say please ..."

    limits = limit.BRLimits()

    # Enable OpenGL
    if opts.excludedArea:
        ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if not limits.isHeavyStatus:
        # Give more space for four digits on the y axis labels
        style.tdrStyle.SetPadLeftMargin(0.19)
        style.tdrStyle.SetTitleYOffset(1.6)

    # Set the paper mode
    limit.forPaper = True
    if opts.paper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER
    if opts.unpublished:
        histograms.cmsTextMode = histograms.CMSMode.UNPUBLISHED

    if opts.parentheses:
        limit.useParentheses()

    doBRlimit(limits, opts.unblinded, opts)
    doBRlimit(limits, opts.unblinded, opts, log=True)
    doLimitError(limits, opts.unblinded)
    limits.print2(opts.unblinded)
    limits.saveAsLatexTable(opts.unblinded)
def main(opts):
    if opts.saveDir == "":
        opts.saveDir = os.getcwd()

    # Assume by default that the observed limit should be blinded
    if not opts.unblinded:
        msg = "Working in BLINDED mode, i.e. I will not tell you the observed limit before you say please ..."
        Print(msg, True)

    limits = limit.BRLimits()

    # Enable OpenGL
    if opts.excludedArea:
        ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if not limits.isHeavyStatus:
        # Give more space for four digits on the y axis labels
        style.tdrStyle.SetPadLeftMargin(0.19)
        style.tdrStyle.SetTitleYOffset(1.6)

    # Set the paper mode
    if opts.paper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER
    # Set the paper mode
    if opts.unpublished:
        histograms.cmsTextMode = histograms.CMSMode.UNPUBLISHED
    # Use BR symbol for H+ decay channel with subscript or parentheses?
    if opts.parentheses:
        limit.useParentheses()
    else:
        limit.useSubscript(True)

    # Do the limit plots
    doBRlimit(limits, opts.unblinded, opts, logy=False)
    doBRlimit(limits, opts.unblinded, opts, logy=True)
    doLimitError(limits, opts.unblinded)

    # Print the Limits
    limits.printLimits(unblindedStatus=opts.unblinded, nDigits=opts.digits)
    # limits.print2(unblindedStatus=opts.unblinded)

    # Save the Limits in a LaTeX table file
    limits.saveAsLatexTable(unblindedStatus=opts.unblinded,
                            nDigits=opts.digits)
    limits.saveAsLatexTable(unblindedStatus=opts.unblinded,
                            nDigits=opts.digits,
                            savePath=os.path.join(opts.saveDir, opts.subdir))
    return
示例#3
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)

    limits = limit.BRLimits(
        limitsfile=jsonfile,
        configfile="limitdata/lightHplus_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER
    #histograms.cmsTextMode = histograms.CMSMode.PAPER # tmp
    #histograms.cmsTextMode = histograms.CMSMode.UNPUBLISHED # tmp
    limit.forPaper = True  # to get GeV without c^2

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(rootfile)
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    graphs["exp"] = limits.expectedGraph()
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    if obs.GetN() > 0:
        graphs["obs"] = obs
        # Get theory uncertainties on observed


#        obs_th_plus = limit.getObservedPlus(obs,0.21)
#        obs_th_minus = limit.getObservedMinus(obs,0.21)
#        for gr in [obs_th_plus, obs_th_minus]:
#            gr.SetLineWidth(2)
#            gr.SetLineStyle(9)
#        graphs["obs_th_plus"] = obs_th_plus
#        graphs["obs_th_minus"] = obs_th_minus

# Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, minX=90)

    print "Plotting graphs"
    for key in graphs.keys():
        for i in range(graphs[key].GetN()):
            xs = graphs[key].GetX()
            ys = graphs[key].GetY()
            print "    ", key, xs[i], ys[i]
        print

    # Interpret in MSSM
    xVariable = "mHp"
    #    selection = "mu==200"
    selection = "mHp > 0"
    #    scenario = "MSSM m_{h}^{max}"
    scenario = os.path.split(rootfile)[-1].replace(".root", "")

    for key in graphs.keys():
        print "Graph--------------------------------", key
        graphs[key] = db.graphToTanBetaCombined(graphs[key], xVariable,
                                                selection)
        #if key == "obs":
        #obsplus = db.getTheorUncert(graphs[key],xVariable,selection,"+")
        #graphs["obs_th_plus"] = db.graphToTanBetaCombined(obsplus,xVariable,selection)
        #obsminus = db.getTheorUncert(graphs[key],xVariable,selection,"-")
        #graphs["obs_th_minus"] = db.graphToTanBetaCombined(obsminus,xVariable,selection)
        print key, "done"

    graphs["mintanb"] = db.minimumTanbGraph("mHp", selection)

    if scenario == "lowMH-LHCHXSWG":
        graphs["Allowed"] = db.mhLimit("mH", "mHp", selection, "125.0+-3.0")
    else:
        graphs["Allowed"] = db.mhLimit("mh", "mHp", selection, "125.0+-3.0")
    graphs["isomass"] = None

    limit.doTanBetaPlotLight("limitsTanb_light_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mHplus(),
                             scenario)

    # mH+ -> mA
    print "Replotting the graphs for (mA,tanb)"
    for key in graphs.keys():
        print key
        #db.PrintGraph(graphs[key])
        #print "check loop db.graphToMa"
        db.graphToMa(graphs[key])

    graphs["isomass"] = db.getIsoMass(160)

    limit.doTanBetaPlotLight("limitsTanb_mA_light_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mA(), scenario)
示例#4
0
def main():
    limits = limit.BRLimits()

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    # Get BR limits
    graphs = {}
    obs = limits.observedGraph()
    myBlindedStatus = True
    for i in xrange(0, obs.GetN()):
        if abs(obs.GetY()[i]) > 0.00001:
            myBlindedStatus = False

    if not myBlindedStatus:
        graphs["obs"] = obs
    graphs["exp"] = limits.expectedGraph()
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)
    # Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, minX=100)

    # Get theory uncertainties on observed
    if not myBlindedStatus:
        obs_th_plus = limit.getObservedPlus(obs)
        obs_th_minus = limit.getObservedMinus(obs)
        for gr in [obs_th_plus, obs_th_minus]:
            gr.SetLineWidth(3)
            gr.SetLineStyle(5)
    #        gr.SetLineStyle(9)
        graphs["obs_th_plus"] = obs_th_plus
        graphs["obs_th_minus"] = obs_th_minus

    # Interpret in MSSM
    global mu
    for key in graphs.keys():
        removeNotValid = not (key in ["exp1", "exp2"])
        graphs[key] = limit.graphToTanBeta(graphs[key], mu, removeNotValid)

    doPlot("limitsTanb_mh", graphs, limits, limit.mHplus())

    for gr in graphs.values():
        limit.graphToMa(gr)

    doPlot("limitsTanb_ma", graphs, limits, limit.mA())

    if myBlindedStatus:
        print "Refusing cowardly to do mu variation plots for blinded results"
        return

    # Mu variations
    mus = [1000, 200, -200, -1000]
    muGraphs = [(limit.graphToTanBeta(obs, m), m) for m in mus]

    def muStyle(h, markerStyle, lineStyle, color):
        rh = h.getRootHisto()
        rh.SetMarkerStyle(markerStyle)
        rh.SetMarkerColor(color)
        rh.SetLineStyle(lineStyle)
        rh.SetLineColor(color)
        rh.SetLineWidth(504)
        rh.SetFillStyle(3005)

    st = [
        lambda h: muStyle(h, 21, 1, 4), lambda h: muStyle(h, 20, 1, 1),
        lambda h: muStyle(h, 20, 2, 1), lambda h: muStyle(h, 21, 2, 4)
    ]
    doPlotMu("limitsTanb_mus_mh", muGraphs, st, limits, limit.mHplus())

    for gr, mu in muGraphs:
        limit.graphToMa(gr)
    doPlotMu("limitsTanb_mus_ma", muGraphs, st, limits, limit.mA())
示例#5
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)
#    jsonfile = "limits_heavy2016.json"
#    jsonfile = "limits2016/limitsForMSSMplots_ICHEP_v3_heavy.json"
    jsonfile = "limits2016/limits_heavy_20171011.json"
    #    limits = limit.BRLimits(limitsfile=jsonfile,configfile="configurationHeavy.json")
    limits = limit.BRLimits(
        limitsfile=jsonfile,
        configfile="limits2016/heavyHplus_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    #if limit.forPaper:
    #    histograms.cmsTextMode = histograms.CMSMode.PAPER
    #histograms.cmsTextMode = histograms.CMSMode.PAPER # tmp
    #histograms.cmsTextMode = histograms.CMSMode.UNPUBLISHED # tmp
    histograms.cmsTextMode = histograms.CMSMode.PRELIMINARY
    limit.forPaper = True  # to get GeV without c^2

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and sigma*BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(rootfile)
    db.BRvariable = "2*0.001*tHp_xsec*BR_Hp_taunu"  # XSEC only for H-, multiply with 2 to get H+ and H- ; multiply by 0.001 to fb -> pb
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()

    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    graphs["exp"] = limits.expectedGraph()
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    if obs.GetN() > 0:
        graphs["obs"] = obs
        # Get theory uncertainties on observed
#        obs_th_plus = limit.getObservedPlus(obs,0.32)
#        obs_th_minus = limit.getObservedMinus(obs,0.32)
#        for gr in [obs_th_plus, obs_th_minus]:
#            gr.SetLineWidth(2)
#            gr.SetLineStyle(9)
#        graphs["obs_th_plus"] = obs_th_plus
#        graphs["obs_th_minus"] = obs_th_minus

# Remove m=180,190
    for gr in graphs.values():
        #        limit.cleanGraph(gr, 750)
        limit.cleanGraph(gr, 800)
        limit.cleanGraph(gr, 1000)
        limit.cleanGraph(gr, 2000)
        limit.cleanGraph(gr, 3000)

    print "Plotting graphs"
    for key in graphs.keys():
        for i in range(graphs[key].GetN()):
            xs = graphs[key].GetX()
            ys = graphs[key].GetY()
            print "    ", key, xs[i], ys[i]
        print

    # Interpret in MSSM
    xVariable = "mHp"
    selection = "mHp > 0 && mu==200"
    #    selection = "mHp > 0 && mu==500"
    #    scenario = "MSSM m_{h}^{max}"
    scenario = os.path.split(rootfile)[-1].replace(".root", "")
    print scenario

    from JsonWriter import JsonWriter
    jsonWriter = JsonWriter()
    for key in graphs.keys():
        print "Graph--------------------------------", key
        graphs[key] = db.graphToTanBeta(graphs[key],
                                        xVariable,
                                        selection,
                                        highTanbRegion=True)
        #if key == "obs":
        #obsplus = db.getTheorUncert(graphs[key],xVariable,selection,"+")
        #graphs["obs_th_plus"] = db.graphToTanBeta(obsplus,xVariable,selection)
        #obsminus = db.getTheorUncert(graphs[key],xVariable,selection,"-")
        #graphs["obs_th_minus"] = db.graphToTanBeta(obsminus,xVariable,selection)
        print key, "done"
        jsonWriter.addGraph(key, graphs[key])

#    graphs["mintanb"] = db.minimumTanbGraph("mHp",selection)
    if scenario == "lowMH-LHCHXSWG":
        graphs["Allowed"] = db.mhLimit("mH", "mHp", selection, "125.0+-3.0")
    else:
        graphs["Allowed"] = db.mhLimit("mh", "mHp", selection + "&&mHp>175",
                                       "125.0+-3.0")

    if scenario == "tauphobic-LHCHXSWG":
        # Fix a buggy second upper limit (the order of points is left to right, then right to left; remove further passes to fix the bug)
        decreasingStatus = False
        i = 0
        while i < graphs["Allowed"].GetN():
            removeStatus = False
            y = graphs["Allowed"].GetY()[i]
            if i > 0:
                if graphs["Allowed"].GetY()[i - 1] - y < 0:
                    decreasingStatus = True
                else:
                    if decreasingStatus:
                        graphs["Allowed"].RemovePoint(i)
                        removeStatus = True
            if not removeStatus:
                i += 1
        #for i in range(0, graphs["Allowed"].GetN()):
        #print graphs["Allowed"].GetX()[i], graphs["Allowed"].GetY()[i]


#    del graphs["isomass"]

    jsonWriter.addGraph("Allowed", graphs["Allowed"])

    jsonWriter.addParameter("name", "limitsTanb_heavy_" + scenario)
    jsonWriter.addParameter("scenario", scenario)
    jsonWriter.addParameter("luminosity", limits.getLuminosity())
    jsonWriter.addParameter("finalStateText", limits.getFinalstateText())
    jsonWriter.addParameter("mHplus", limit.mHplus())
    jsonWriter.addParameter("selection", selection)
    jsonWriter.addParameter("regime", "heavy")
    jsonWriter.write("MSSMLimitHeavy_" + scenario + ".json")

    limit.doTanBetaPlotHeavy("limitsTanb_heavy_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mHplus(),
                             scenario)
    sys.exit()

    # mH+ -> mA
    print "Replotting the graphs for (mA,tanb)"
    for key in graphs.keys():
        print key
        #db.PrintGraph(graphs[key])
        #print "check loop db.graphToMa"
        db.graphToMa(graphs[key])

    graphs["isomass"] = db.getIsoMass(200)

    #    doPlot("limitsTanb_mA_heavy_"+scenario, graphs, limits, limit.mA(),scenario)

    limit.doTanBetaPlotHeavy("limitsTanb_mA_heavy_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mA(), scenario)
示例#6
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)

    limits = limit.BRLimits(
        limitsfile=jsonfile,
        configfile="limitdata/lightHplus_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(rootfile)
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    scenario = os.path.split(rootfile)[-1].replace(".root", "")
    selection = ""
    for i in range(len(masses)):
        mass = masses[i]
        brlimit = brs[i]
        if mass < 90:
            continue


#        if not mass == 160:
#            continue
        selection = "mHp == %s" % mass
        graphs["muexcluded"] = db.muLimit(mass, "mu", selection, brlimit)

        if int(mass) in [155, 160]:
            graphs["obs_th_plus"] = db.muLimit(mass, "mu", selection,
                                               brlimit * (1 + 0.29))
            graphs["obs_th_minus"] = db.muLimit(mass, "mu", selection,
                                                brlimit * (1 - 0.29))

            for gr in [graphs["obs_th_plus"], graphs["obs_th_minus"]]:
                gr.SetLineWidth(2)
                gr.SetLineStyle(9)

            graphs["observed"] = graphs["muexcluded"].Clone()
            graphs["observed"].SetLineWidth(2)
            graphs["observed"].SetLineStyle(ROOT.kSolid)
            graphs["observed"].SetLineColor(ROOT.kBlack)

            # Remove obs point
            for name in ["observed", "obs_th_plus", "obs_th_minus"]:
                gr = graphs[name]
                print "Graph", name
                for i in reversed(range(0, gr.GetN())):
                    if gr.GetY()[i] < 2 or gr.GetY()[i] > 65:
                        print "    REMOVING POINT", gr.GetY(
                        )[i], " corresponding mass=", gr.GetX()[i]
                        gr.RemovePoint(i)

        graphs["Allowed"] = db.getHardCoded_mH_limitForMu(mass, 0)
        graphs["Allowed2"] = db.getHardCoded_mH_limitForMu(mass, 1)

        doPlot(("limitsMu_light_mHp%s_" + scenario) % (int(mass)), graphs,
               limits, "#mu (GeV)", scenario, int(mass))
    sys.exit()
示例#7
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)

    jsonfile = "limits2016/limits_withLeptonic_180522.json"
    limits = limit.BRLimits(limitsfile=jsonfile,
                            configfile="limits2016/mu_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(
        rootfile, BRvariable="0.001*831.76*2*tHp_xsec*BR_Hp_taunu")
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    #    graphs["exp"] = limits.expectedGraph()
    #x = array.array('d',masses)
    #y = array.array('d',[0.02]*len(masses))
    #graphs["exp"] = ROOT.TGraph(len(masses),x,y)
    #    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    #    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    if obs.GetN() > 0:
        graphs["obs"] = obs

    # Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, 80)

    print "Plotting graphs"
    for key in graphs.keys():
        for i in range(graphs[key].GetN()):
            xs = graphs[key].GetX()
            ys = graphs[key].GetY()
            print "    ", key, xs[i], ys[i]
        print

    # Interpret in MSSM
    xVariable = "mu"
    scenario = os.path.split(rootfile)[-1].replace(".root", "")
    if scenario == "lowMHaltv-LHCHXSWG":
        xVariable = "mHp"
    selection = ""
    from JsonWriter import JsonWriter
    #    for i in range(len(masses)):
    #        mass = masses[i]
    #        brlimit = brs[i]
    #	if mass < 90:
    #	    continue
    #        if not mass == 160:
    #            continue
    #	selection = "mHp == %s"%mass
    #graphs["muexcluded"] = db.muLimit(mass,"mu",selection,brlimit)
    #db.PrintGraph(graphs["muexcluded"],"muexcluded")

    jsonWriter = JsonWriter()
    print "check keys", graphs.keys()

    for key in graphs.keys():
        print "Graph--------------------------------", key
        #db.PrintGraph(graphs[key],"Before graphToTanBetaCombined")
        graphs[key] = db.graphToTanBetaMu(graphs[key], xVariable, selection,
                                          True)
        print key, "done"
        jsonWriter.addGraph(key, graphs[key])

    #graphs["Allowed"] = db.mhLimit("mH","mu",selection,"125.0+-3.0")
    if xVariable == "mHp":
        graphs["Allowed"] = db.mHLimit_mHp(selection, "125.0+-3.0")
    else:
        graphs["Allowed"] = db.mHLimit_mu(selection, "125.0+-3.0")
    jsonWriter.addGraph("Allowed", graphs["Allowed"])

    graphs["Inaccessible"] = db.inaccessible(xVariable, selection)
    jsonWriter.addGraph("Inaccessible", graphs["Inaccessible"])

    jsonWriter.addParameter("name", "limitsTanb_light_" + scenario)
    jsonWriter.addParameter("scenario", scenario)
    jsonWriter.addParameter("luminosity", limits.getLuminosity())
    jsonWriter.addParameter("finalStateText", limits.getFinalstateText())
    xvar = limit.mu()
    if xVariable == "mHp":
        xvar = limit.mHplus()
    jsonWriter.addParameter("mHplus", xvar)
    jsonWriter.addParameter("selection", selection)
    jsonWriter.addParameter("regime", "mu")
    jsonWriter.write("MSSMLimitMu_" + scenario + ".json")

    #limit.doTanBetaPlotLight("limitsTanb_light_"+scenario, graphs, limits.getLuminosity(), limits.getFinalstateText(), limit.mHplus(), scenario)
    #        if int(mass) in [155, 160]:
    #            graphs["obs_th_plus"] = db.muLimit(mass,"mu",selection,brlimit*(1+0.29))
    #            graphs["obs_th_minus"] = db.muLimit(mass,"mu",selection,brlimit*(1-0.29))
    #
    #            for gr in [graphs["obs_th_plus"], graphs["obs_th_minus"]]:
    #                gr.SetLineWidth(2)
    #                gr.SetLineStyle(9)
    #
    #            graphs["observed"] = graphs["muexcluded"].Clone()
    #            graphs["observed"].SetLineWidth(2)
    #            graphs["observed"].SetLineStyle(ROOT.kSolid)
    #            graphs["observed"].SetLineColor(ROOT.kBlack)
    #
    #            # Remove obs point
    #            for name in ["observed", "obs_th_plus", "obs_th_minus"]:
    #                gr = graphs[name]
    #                print "Graph", name
    #                for i in reversed(range(0,gr.GetN())):
    #                    if gr.GetY()[i] < 2 or gr.GetY()[i] > 65:
    #                        print "    REMOVING POINT",gr.GetY()[i]," corresponding mass=",gr.GetX()[i]
    #                        gr.RemovePoint(i)
    #
    #        graphs["Allowed"]  = db.getHardCoded_mH_limitForMu(mass,0)
    #        graphs["Allowed2"] = db.getHardCoded_mH_limitForMu(mass,1)
    #
    #        doPlot(("limitsMu_light_mHp%s_"+scenario)%(int(mass)), graphs, limits, "#mu (GeV)",scenario, int(mass))
    sys.exit()
示例#8
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)
#    jsonfile = "limits_light2016.json"
#    jsonfile = "limits2016/limitsForMSSMplots_ICHEP_v2_light.json"
#    jsonfile = "limits2016/limits_light_20171011.json"
#    jsonfile = "limits2016/limits_light_180131.json"
#    jsonfile = "limits2016/limits_light_180205.json"
#    jsonfile = "limits2016/limits_light_180318.json"
#    jsonfile = "limits2016/limits_light_180417.json"
#    jsonfile = "limits2016/limits_unblinded_180809/limits_light.json"
#    jsonfile = "limits2016/limits_unblinded_180809/limits_full_leptonic+hadronic_with_intermediate.json"
    jsonfile = "limits2016/limits_unblinded_withLeptonic_30082018/taunu_extInt_BR.json"
    #    limits = limit.BRLimits(limitsfile=jsonfile,configfile="limitdata/lightHplus_configuration.json")
    limits = limit.BRLimits(
        limitsfile=jsonfile,
        configfile="limits2016/lightHplus_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    #    if limit.forPaper:
    #        histograms.cmsTextMode = histograms.CMSMode.PAPER
    histograms.cmsTextMode = histograms.CMSMode.PRELIMINARY
    #    histograms.cmsTextMode = histograms.CMSMode.PAPER # tmp
    #histograms.cmsTextMode = histograms.CMSMode.UNPUBLISHED # tmp
    limit.forPaper = True  # to get GeV without c^2

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(rootfile)
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    graphs["exp"] = limits.expectedGraph()
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    if obs.GetN() > 0:
        graphs["obs"] = obs
        # Get theory uncertainties on observed
#        obs_th_plus = limit.getObservedPlus(obs,0.21)
#        obs_th_minus = limit.getObservedMinus(obs,0.21)
#        for gr in [obs_th_plus, obs_th_minus]:
#            gr.SetLineWidth(2)
#            gr.SetLineStyle(9)
#        graphs["obs_th_plus"] = obs_th_plus
#        graphs["obs_th_minus"] = obs_th_minus

# Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, 80)

    print "Plotting graphs"
    for key in graphs.keys():
        for i in range(graphs[key].GetN()):
            xs = graphs[key].GetX()
            ys = graphs[key].GetY()
            print "    ", key, xs[i], ys[i]
        print

    # Interpret in MSSM
    xVariable = "mHp"
    selection = "mu==200"
    #    selection = "mHp > 0"
    #    scenario = "MSSM m_{h}^{max}"
    scenario = os.path.split(rootfile)[-1].replace(".root", "")

    from JsonWriter import JsonWriter
    jsonWriter = JsonWriter()
    for key in graphs.keys():
        print "Graph--------------------------------", key
        graphs[key] = db.graphToTanBetaCombined(graphs[key], xVariable,
                                                selection)
        #if key == "obs":
        #obsplus = db.getTheorUncert(graphs[key],xVariable,selection,"+")
        #graphs["obs_th_plus"] = db.graphToTanBetaCombined(obsplus,xVariable,selection)
        #obsminus = db.getTheorUncert(graphs[key],xVariable,selection,"-")
        #graphs["obs_th_minus"] = db.graphToTanBetaCombined(obsminus,xVariable,selection)
        print key, "done"
        jsonWriter.addGraph(key, graphs[key])

    graphs["mintanb"] = db.minimumTanbGraph("mHp", selection)

    if scenario == "lowMH-LHCHXSWG":
        graphs["Allowed"] = db.mhLimit("mH", "mHp", selection, "125.0+-3.0")
    else:
        graphs["Allowed"] = db.mhLimit("mh", "mHp", selection, "125.0+-3.0")


#    graphs["isomass"] = None

    jsonWriter.addGraph("Allowed", graphs["Allowed"])
    jsonWriter.addGraph("mintanb", graphs["mintanb"])

    name = "limitsTanb_light_"
    finalStateText = limits.getFinalstateText()
    if "leptonic" in jsonfile:
        name = "limitsTanb_light_LeptHadrFS_"
        finalStateText = "#tau+jets final state"

    jsonWriter.addParameter("name", name + scenario)
    jsonWriter.addParameter("scenario", scenario)
    jsonWriter.addParameter("luminosity", limits.getLuminosity())
    jsonWriter.addParameter("finalStateText", finalStateText)
    jsonWriter.addParameter("mHplus", limit.mHplus())
    jsonWriter.addParameter("selection", selection)
    jsonWriter.addParameter("regime", "light")
    jsonWriter.write(name + scenario + ".json")

    limit.doTanBetaPlotLight("limitsTanb_light_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mHplus(),
                             scenario)
    sys.exit()

    # mH+ -> mA
    print "Replotting the graphs for (mA,tanb)"
    for key in graphs.keys():
        print key
        #db.PrintGraph(graphs[key])
        #print "check loop db.graphToMa"
        db.graphToMa(graphs[key])

    graphs["isomass"] = db.getIsoMass(160)

    limit.doTanBetaPlotLight("limitsTanb_mA_light_" + scenario, graphs,
                             limits.getLuminosity(),
                             limits.getFinalstateText(), limit.mA(), scenario)
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    match = root_re.search(sys.argv[1])
    if match:
        rootfile = match.group(0)

    limits = limit.BRLimits()

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    #print masses,brs

    db = BRXSDB.BRXSDatabaseInterface(rootfile, heavy=True, program="2HDMC")
    progversion = db.GetProgram() + " v" + db.GetVersion()
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    graphs["obs"] = obs
    graphs["exp"] = limits.expectedGraph()
    #    graphs["exp"].SetLineStyle(2)
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    # Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, minX=100)
        N = gr.GetN()
#        for i in range(gr.GetN()):
#            j = N - 1 - i
#            if gr.GetX()[j] > 154 and gr.GetX()[j] < 156:
#                gr.RemovePoint(j)

# Get theory uncertainties on observed
    obs_th_plus = limit.getObservedPlus(obs)
    obs_th_minus = limit.getObservedMinus(obs)
    for gr in [obs_th_plus, obs_th_minus]:
        gr.SetLineWidth(2)
        gr.SetLineStyle(9)
    graphs["obs_th_plus"] = obs_th_plus
    graphs["obs_th_minus"] = obs_th_minus

    # Interpret in MSSM
    xVariable = "mHp"
    ####    selection = "mu==200&&Xt==2000&&m2==200"
    #    selection = "mu==200"
    #    scenario = "MSSM m_{h}^{max}"
    #    scenario = "MSSM m_{h}^{max up}"
    #    scenario = "MSSM m_{h}^{mod+}"
    #    scenario = "MSSM m_{h}^{mod-}"
    #    scenario = "MSSM #tau-phobic"        #mu=500
    #    scenario = "MSSM light #tilde{#tau}" #mu=500
    #    scenario = "MSSM light #tilde{t}" #mu=350
    #    scenario = "MSSM low m_{H}"	  #mu=1700

    selection = ""
    scenario = "Type II 2HDM"

    for key in graphs.keys():
        #        removeNotValid = not (key in ["exp1", "exp2"])
        #        graphs[key] = limit.graphToTanBeta(graphs[key], mu, removeNotValid)
        graphs[key] = db.graphToTanBeta(graphs[key],
                                        xVariable,
                                        selection,
                                        highTanbRegion=True,
                                        limitBRtoMin=False)
#        graphs[key] = db.graphToTanBetaCombined(graphs[key],xVariable,selection)
#        graphs[key] = db.graphToSharpTanbExclusion(graphs[key],xVariable,selection)

####    graphs["mintanb"] = db.minimumTanbGraph("mHp",selection)
####    graphs["Allowed"] = db.mhLimit("mh","mHp",selection,"125.9+-3.0")

    graphs["excluded"] = db.excluded(graphs["obs"], "ExcludedArea")

    #    doPlot("limitsTanb_mh", graphs, limits, limit.mHplus(),scenario)
    doPlot("limitsmHpTanb_" + rootfile.replace(".root", ""), graphs, limits,
           "m_{H^{+}} (" + GeVUnit + ")", scenario, progversion)
示例#10
0
def doCompare(name, compareList, **kwargs):
    # Define lists
    legendLabels = []
    limits = []

    # For-loop: All label-path pairs
    for label, path in compareList:
        legendLabels.append(label)
        dirs = glob.glob(path)
        dirs.sort()

        if len(dirs) == 0:
            raise Exception("No directories for pattern '%s'" % path)
        directory = dirs[-1]

        Verbose("Picked %s" % directory, True)
        limits.append(limit.BRLimits(directory, excludeMassPoints=["155"]))

    # ================================================================================================================
    # Do the sigma bands
    # ================================================================================================================
    Verbose("Creating the sigma-bands plots", True)
    _opts = copy.deepcopy(opts)
    doPlotSigmaBands(limits, legendLabels, opts.name + "_sigmaBands", _opts)

    # ================================================================================================================
    # Do expected
    # ================================================================================================================
    Verbose("Creating the expected plots", True)
    observedList = [l.observedGraph() for l in limits]
    expectedList = [l.expectedGraph() for l in limits]

    # 1) Expected: Median +/- 1,2 sigma
    doPlot(limits,
           legendLabels,
           expectedList,
           opts.name + "_median",
           limit.BRlimit,
           _opts,
           yTitle="Expected Sigma Bands")

    # 2) Expected: +/- 1 sigma
    list1 = [l.expectedGraph(sigma=+1) for l in limits]
    list2 = [l.expectedGraph(sigma=-1) for l in limits]
    exp1sigmaList = list1 + list2
    legendLabels2 = legendLabels + [None] * len(legendLabels)
    doPlot(limits,
           legendLabels2,
           exp1sigmaList,
           opts.name + "_sigma1",
           "Expected #pm1#sigma",
           _opts,
           yTitle="Expected #pm1sigma")

    # 3) Expected: +/- 2 sigma
    list1 = [l.expectedGraph(sigma=+2) for l in limits]
    list2 = [l.expectedGraph(sigma=-2) for l in limits]
    exp2sigmaList = list1 + list2
    doPlot(limits,
           legendLabels2,
           exp2sigmaList,
           opts.name + "_sigma2",
           "Expected #pm2#sigma",
           _opts,
           yTitle="Expected #pm2sigma")

    # ================================================================================================================
    # Do the observed plots
    # ================================================================================================================
    Verbose("Creating the observed plots", True)
    if opts.unblinded:
        doPlot(limits,
               legendLabels,
               observedList,
               opts.name,
               limit.BRlimit,
               _opts,
               yTitle="Observed")

    # ================================================================================================================
    # Do the relative plots
    # ================================================================================================================
    Verbose("Creating the relative plots", True)
    if not opts.relative:
        return
    # Overwrite some settings
    _opts.yMin = 0.0
    _opts.yMax = 2.5
    _opts.logY = False

    # 1) Relative: median
    relLimits = GetRelativeLimits(limits)
    expectedList = [l.expectedGraph() for l in relLimits]
    doPlot(relLimits,
           legendLabels,
           expectedList,
           opts.name + "_medianRelative",
           opts.relativeYlabel,
           _opts,
           yTitle="Expected median")

    # 2) Relative: (expected 1 sigma) / (median)
    list1 = [
        limit.divideGraph(l.expectedGraph(sigma=+1), l.expectedGraph())
        for l in limits
    ]
    list2 = [
        limit.divideGraph(l.expectedGraph(sigma=-1), l.expectedGraph())
        for l in limits
    ]
    sigma1List = list1 + list2
    doPlot(limits,
           legendLabels2,
           sigma1List,
           opts.name + "_sigma1Relative",
           "Expected #pm1#sigma / median",
           _opts,
           yTitle="Expected #pm1#sigma / median")

    # 3) Relative: (expected 2 sigma) / (median)
    list1 = [
        limit.divideGraph(l.expectedGraph(sigma=+2), l.expectedGraph())
        for l in limits
    ]
    list2 = [
        limit.divideGraph(l.expectedGraph(sigma=-2), l.expectedGraph())
        for l in limits
    ]
    sigma2List = list1 + list2
    doPlot(limits,
           legendLabels2,
           sigma2List,
           opts.name + "_sigma2Relative",
           "Expected #pm2#sigma / median",
           _opts,
           yTitle="Expected #pm2#sigma / median")
    return
示例#11
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    match = root_re.search(sys.argv[1])
    if match:
        rootfile = match.group(0)

    limits = limit.BRLimits()

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    xvar = "mHp"
    yvars = []
    yvars.append("BR_Hp_taunu")
    yvars.append("BR_Hp_tb")
    yvars.append("BR_Hp_h0W")
    yvars.append("BR_Hp_A0W")
    yvars.append("BR_Hp_HW")
    #    yvars.append("BR_Hp_Neu1Cha1")
    #    yvars.append("BR_Hp_Neu2Cha1")

    susyvars = []
    susyvars.append("BR_Hp_Neu1Cha1")
    susyvars.append("BR_Hp_Neu2Cha1")
    #    susyvars.append("BR_Hp_Neu3Cha1")
    #    susyvars.append("BR_Hp_Neu4Cha1")
    #    susyvars.append("BR_Hp_Neu1Cha2")
    #    susyvars.append("BR_Hp_Neu2Cha2")
    #    susyvars.append("BR_Hp_Neu3Cha2")
    #    susyvars.append("BR_Hp_Neu4Cha2")

    #    db = BRXSDB.BRXSDatabaseInterface(rootfile,heavy=True,program="2HDMC")
    db = BRXSDB.BRXSDatabaseInterface(rootfile,
                                      heavy=True,
                                      program="FeynHiggs")
    progversion = db.GetProgram() + " v" + db.GetVersion()

    selection = "tanb==10"
    #    scenario = "2HDM Type II"
    scenario = "mhmax"

    graphs = {}

    for icolor, yvar in enumerate(yvars):
        tmpsel = selection
        br = db.getGraph(xvar, yvar, tmpsel)
        xarray = array.array('d')
        yarray = array.array('d')
        for i in range(0, br.GetN()):
            x = ROOT.Double()
            y = ROOT.Double()
            br.GetPoint(i, x, y)
            xarray.append(x)
            yarray.append(y)
        newx, newy = sort(xarray, yarray)
        newGraph = ROOT.TGraph(len(newx), newx, newy)
        newGraph.SetLineWidth(3)
        newGraph.SetLineColor(1 + icolor)
        graphs[yvar] = newGraph

    xsusy = array.array('d')
    ysusy = array.array('d')
    for yvar in susyvars:
        tmpsel = selection
        br = db.getGraph(xvar, yvar, tmpsel)
        xarray = array.array('d')
        yarray = array.array('d')
        for i in range(0, br.GetN()):
            x = ROOT.Double()
            y = ROOT.Double()
            br.GetPoint(i, x, y)
            xarray.append(x)
            yarray.append(y)
            print "check x,y", x, y
        xsusy, ysusy = add(xsusy, ysusy, xarray, yarray)
    print "check len", len(xsusy)
    newx, newy = sort(xsusy, ysusy)
    for i in range(len(newx)):
        print newx[i], newy[i]
    susyGraph = ROOT.TGraph(len(newx), newx, newy)
    susyGraph.SetLineWidth(3)
    susyGraph.SetLineColor(1 + len(graphs))
    graphs["BR_Hp_SUSY"] = susyGraph

    plot = plots.PlotBase([
        histograms.HistoGraph(graphs["BR_Hp_taunu"],
                              "BR(H^{+}#rightarrow#tau#nu)",
                              drawStyle="L",
                              legendStyle="l"),
        histograms.HistoGraph(graphs["BR_Hp_tb"],
                              "BR(H^{+}#rightarrow tb)",
                              drawStyle="L",
                              legendStyle="l"),
        histograms.HistoGraph(graphs["BR_Hp_h0W"],
                              "BR(H^{+}#rightarrow hW)",
                              drawStyle="L",
                              legendStyle="l"),
        histograms.HistoGraph(graphs["BR_Hp_A0W"],
                              "BR(H^{+}#rightarrow AW)",
                              drawStyle="L",
                              legendStyle="l"),
        histograms.HistoGraph(graphs["BR_Hp_HW"],
                              "BR(H^{+}#rightarrow HW)",
                              drawStyle="L",
                              legendStyle="l"),
        histograms.HistoGraph(graphs["BR_Hp_SUSY"],
                              "BR(H^{+}#rightarrow#chi_{i}^{0}#chi_{j}^{+})",
                              drawStyle="L",
                              legendStyle="l"),
        #	    histograms.HistoGraph(graphs["BR_Hp_Neu1Cha1"], "BR(H^{+}#rightarrow#chi_{1}^{0}#chi_{1}^{+})", drawStyle="L", legendStyle="l"),
        #	    histograms.HistoGraph(graphs["BR_Hp_Neu2Cha1"], "BR(H^{+}#rightarrow#chi_{2}^{0}#chi_{1}^{+})", drawStyle="L", legendStyle="l"),
    ])

    plot.setLegend(histograms.createLegend(0.57, 0.60, 0.87, 0.80))
    plot.legend.SetFillColor(0)
    plot.legend.SetFillStyle(1001)
    plot.createFrame("br",
                     opts={
                         "ymin": 0.0001,
                         "ymax": 1,
                         "xmin": 180,
                         "xmax": 600
                     })
    plot.frame.GetXaxis().SetTitle("m_{H^{+}} (" + GeVUnit + ")")
    plot.frame.GetYaxis().SetTitle("BR")
    ROOT.gPad.SetLogy(True)

    plot.draw()

    size = 20
    x = 0.57
    #    histograms.addText(x, 0.9, limit.processHeavy, size=size)
    #    histograms.addText(x, 0.863, limits.getFinalstateText(), size=size)
    ####    histograms.addText(x, 0.815, "MSSM m_{h}^{max}", size=size)
    histograms.addText(x, 0.863, scenario, size=size)
    selectiontxt = selection.replace("==", "=")
    histograms.addText(x, 0.815, selectiontxt, size=size)

    #Adding a LHC label:
    ROOT.LHCHIGGS_LABEL(0.97, 0.72, 1)
    #    histograms.addText(x, 0.55, progversion, size=size)

    plot.save()
示例#12
0
def doCompare(name, compareList, opts, **kwargs):
    legendLabels = []
    limits = []
    for label, path in compareList:
        legendLabels.append(label)
        dirs = glob.glob(path)
        dirs.sort()
        if len(dirs) == 0:
            raise Exception("No directories for pattern '%s'" % path)
        directory = dirs[-1]
        print "Picked %s" % directory
        limits.append(limit.BRLimits(directory, excludeMassPoints=["155"]))

    doPlot2(limits, legendLabels, name)

    limitOpts = kwargs.get(
        "limitOpts",
        {"ymax": _ifNotNone(opts.ymax, limits[0].getFinalstateYmaxBR())})
    expectedSigmaRelativeOpts = kwargs.get("expectedSigmaRelativeOpts",
                                           {"ymaxfactor": 1.2})
    moveLegend = kwargs.get("moveLegend", {})

    doPlot(limits,
           legendLabels, [l.observedGraph() for l in limits],
           name + "_observed",
           limit.BRlimit,
           opts=kwargs.get("observedOpts", limitOpts),
           moveLegend=moveLegend,
           plotLabel="Observed")

    doPlot(limits,
           legendLabels, [l.expectedGraph() for l in limits],
           name + "_expectedMedian",
           limit.BRlimit,
           opts=kwargs.get("expectedMedianOpts", limitOpts),
           moveLegend=moveLegend,
           log=kwargs.get("log", False),
           plotLabel="Expected median")

    if opts.relative:
        for i in range(1, len(limits)):
            limits[i].divideByLimit(limits[0])
        # Set reference to 1
        for j in range(0, len(limits[0].expectedMedian)):
            limits[0].expectedMedian[j] = 1.0
            limits[0].expectedMinus2[j] = 1.0
            limits[0].expectedMinus1[j] = 1.0
            limits[0].expectedPlus2[j] = 1.0
            limits[0].expectedPlus1[j] = 1.0
            limits[0].observed[j] = 1.0
        # Set y scale and require it to be linear
        kwargs["expectedMedianOptsRelative"] = {
            "ymin": 0.5,
            "ymax": _ifNotNone(opts.relativeYmax, 1.5)
        }
        kwargs["log"] = False
        doPlot(limits,
               legendLabels, [l.expectedGraph() for l in limits],
               name + "_expectedMedianRelative",
               opts.relativeYlabel,
               opts=kwargs.get("expectedMedianOptsRelative", limitOpts),
               moveLegend=moveLegend,
               log=kwargs.get("log", False),
               plotLabel="Expected median")
        print "Skipping +-1 and 2 sigma plots for --relative"
        sys.exit()

    if opts.relativePairs:
        if len(limits) % 2 != 0:
            print "Number of limits is not even!"
            sys.exit(1)
        divPoint = len(limits) / 2
        denoms = limits[:divPoint]
        numers = limits[divPoint:]
        for i in xrange(0, divPoint):
            numers[i].divideByLimit(denoms[i])
        doPlot(numers,
               legendLabels[:divPoint], [l.expectedGraph() for l in numers],
               name + "_expectedMedianRelative",
               opts.relativeYlabel,
               opts={
                   "ymin": 0.5,
                   "ymax": _ifNotNone(opts.relativeYmax, 1.5)
               },
               plotLabel="Expected median")
        print "Skipping +-1 and 2 sigma plots for --relativePairs"
        sys.exit()

    legendLabels2 = legendLabels + [None] * len(legendLabels)

    doPlot(limits,
           legendLabels2,
           [
               limit.divideGraph(l.expectedGraph(sigma=+1), l.expectedGraph())
               for l in limits
           ] + [
               limit.divideGraph(l.expectedGraph(sigma=-1), l.expectedGraph())
               for l in limits
           ],
           name + "_expectedSigma1Relative",
           "Expected #pm1#sigma / median",
           opts=kwargs.get("expectedSigma1RelativeOpts",
                           expectedSigmaRelativeOpts),
           moveLegend=moveLegend,
           plotLabel="Expected #pm1#sigma / median")

    doPlot(limits,
           legendLabels2,
           [
               limit.divideGraph(l.expectedGraph(sigma=+2), l.expectedGraph())
               for l in limits
           ] + [
               limit.divideGraph(l.expectedGraph(sigma=-2), l.expectedGraph())
               for l in limits
           ],
           name + "_expectedSigma2Relative",
           "Expected #pm2#sigma / median",
           opts=kwargs.get("expectedSigma2RelativeOpts",
                           expectedSigmaRelativeOpts),
           moveLegend=moveLegend,
           plotLabel="Expected #pm2#sigma / median")

    doPlot(limits,
           legendLabels2,
           [l.expectedGraph(sigma=+1)
            for l in limits] + [l.expectedGraph(sigma=-1) for l in limits],
           name + "_expectedSigma1",
           "Expected #pm1#sigma",
           opts=kwargs.get("expectedSigma1Opts", limitOpts),
           moveLegend=moveLegend,
           plotLabel="Expexted #pm1sigma")

    doPlot(limits,
           legendLabels2,
           [l.expectedGraph(sigma=+2)
            for l in limits] + [l.expectedGraph(sigma=-2) for l in limits],
           name + "_expectedSigma2",
           "Expected #pm2#sigma",
           opts=kwargs.get("expectedSigma2Opts", limitOpts),
           moveLegend=moveLegend,
           plotLabel="Expected #pm2sigma")
示例#13
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    match = root_re.search(sys.argv[1])
    if match:
        rootfile = match.group(0)

    limits = limit.BRLimits()

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    #print masses,brs

    db = BRXSDB.BRXSDatabaseInterface(rootfile)
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])


#    # SUSY parameter variations (mu, Xt, m2, mgluino, mSUSY, read from the db)

    xVariable = "mHp"
    xLabel = "m_{H^{+}} [GeV/c^{2}]"
    #    variationVariable = "mu"
    #    variationLabel    = "#mu"
    #    variationValues   = [-1000,-200,200,1000]
    #    variationVariable = "mSUSY"
    #    variationLabel    = "M_{SUSY}"
    #    variationValues   = [500,1000,2000]
    #    variationVariable = "mGluino"
    #    variationLabel    = "m_{#tilde{g}}"
    #    variationValues   = [200,800,2000]
    #    variationVariable = "m2"
    #    variationLabel    = "M_{2}"
    #    variationValues   = [200,1000]
    variationVariable = "Xt"
    variationLabel = "X_{t}"
    variationValues = [-2000, 2000]

    variationSelection = "mHp>99&&" + variationVariable + "==%s"
    plot(db, limits, xVariable, xLabel, variationVariable, variationLabel,
         variationValues, variationSelection)

    # x-axis and variation parameter definitions, y-axis=tanb
    #    xVariable = "mu"
    #    xLabel  = "#mu [GeV/c^{2}]"

    #    xVariable = "Xt"
    #    xLabel  = "X_{t} [GeV/c^{2}]"

    #    xVariable = "m2"
    #    xLabel  = "M_{2} [GeV/c^{2}]"

    #    xVariable = "mGluino"
    #    xLabel  = "m_{#tilde{g}} [GeV/c^{2}]"

    #    xVariable = "mSUSY"
    #    xLabel  = "M_{SUSY} [GeV/c^{2}]"

    xVariable = variationVariable
    xLabel = variationLabel + " [GeV/c^{2}]"

    variationVariable = "m_{H^{#pm}}"
    variationValues = [100, 120, 140, 150, 155, 160]
    #    variationValues   = [140]
    variationSelection = "mHp==%s"

    plot(db, limits, xVariable, xLabel, variationVariable, variationLabel,
         variationValues, variationSelection)
示例#14
0
def main():
    if len(sys.argv) == 1:
        usage()

    rootfile = ""
    jsonfile = "limits.json"

    root_re = re.compile("(?P<rootfile>(\S*\.root))")
    json_re = re.compile("(?P<jsonfile>(\S*\.json))")
    for argv in sys.argv:
        match = root_re.search(argv)
        if match:
            rootfile = match.group(0)
        match = json_re.search(argv)
        if match:
            jsonfile = match.group(0)

    limits = limit.BRLimits(
        limitsfile=jsonfile,
        configfile="limitdata/lightHplus_configuration.json")

    # Enable OpenGL
    ROOT.gEnv.SetValue("OpenGL.CanvasPreferGL", 1)

    # Apply TDR style
    style = tdrstyle.TDRStyle()
    if limit.forPaper:
        histograms.cmsTextMode = histograms.CMSMode.PAPER
    limit.forPaper = True  # to get GeV without c^2

    # Get BR limits

    masses = limits.mass
    brs = limits.observed

    print "Observed masses and BR's"
    for i in range(len(masses)):
        print "    ", masses[i], brs[i]

    global db
    db = BRXSDB.BRXSDatabaseInterface(rootfile,
                                      program="2HDMC",
                                      BRvariable="BR_tHpb")
    for i, m in enumerate(masses):
        db.addExperimentalBRLimit(m, brs[i])

    graphs = {}
    obs = limits.observedGraph()
    # Remove blinded obs points
    for i in reversed(range(0, obs.GetN())):
        if obs.GetY()[i] < 0.00000001:
            print "    REMOVING POINT", obs.GetY(
            )[i], " corresponding mass=", obs.GetX()[i]
            obs.RemovePoint(i)
    print

    graphs["exp"] = limits.expectedGraph()
    graphs["exp1"] = limits.expectedBandGraph(sigma=1)
    graphs["exp2"] = limits.expectedBandGraph(sigma=2)

    if obs.GetN() > 0:
        graphs["obs"] = obs
        # Get theory uncertainties on observed
        obs_th_plus = limit.getObservedPlus(obs, 0.21)
        obs_th_minus = limit.getObservedMinus(obs, 0.21)
        for gr in [obs_th_plus, obs_th_minus]:
            gr.SetLineWidth(2)
            gr.SetLineStyle(9)
        graphs["obs_th_plus"] = obs_th_plus
        graphs["obs_th_minus"] = obs_th_minus

    # Remove m=80
    for gr in graphs.values():
        limit.cleanGraph(gr, minX=90)

    print "Plotting graphs"
    for key in graphs.keys():
        for i in range(graphs[key].GetN()):
            xs = graphs[key].GetX()
            ys = graphs[key].GetY()
            print "    ", key, xs[i], ys[i]
        print

    # Interpret in MSSM
    xVariable = "mHp"
    #    selection = "mu==200"
    selection = "mHp>0"
    #    scenario = "MSSM m_{h}^{max}"
    scenario = os.path.split(rootfile)[-1].replace(".root", "")

    for key in graphs.keys():
        print "Graph--------------------------------", key
        #        graphs[key] = db.graphToTanBetaCombined(graphs[key],xVariable,selection)
        graphs[key] = db.graphToTanBeta(graphs[key], xVariable, selection,
                                        False)
        print key, "done"

    graphs["mintanb"] = db.minimumTanbGraph("mHp", selection)

    doPlot("limitsTanb_light_" + scenario, graphs, limits, limit.mHplus(),
           scenario)
示例#15
0
def doCompare(name, compareList, gOpts, **kwargs):
    # Define lists
    legendLabels = []
    limits = []

    # For-loop: All label-path pairs
    for label, path in compareList:
        legendLabels.append(label)
        dirs = glob.glob(path)
        dirs.sort()

        if len(dirs) == 0:
            raise Exception("No directories for pattern '%s'" % path)
        directory = dirs[-1]

        Print("Picked %s" % directory, True)
        limits.append(limit.BRLimits(directory, excludeMassPoints=["155"]))

    # Do the plot
    doPlotSigmaBands(limits, legendLabels, gOpts.name)

    # Define the graph lists
    observedList = [l.observedGraph() for l in limits]
    expectedList = [l.expectedGraph() for l in limits]

    doPlot(limits,
           legendLabels,
           expectedList,
           gOpts.name + "_expectedMedian",
           limit.BRlimit,
           myOpts=gOpts,
           plotLabel="Expected median")
    if gOpts.unblinded:
        doPlot(limits,
               legendLabels,
               observedList,
               gOpts.name + "_observed",
               limit.BRlimit,
               myOpts=gOpts,
               plotLabel="Observed")

    if gOpts.relative:
        nLimits = len(limits)
        # For-loop: All limits
        for i in range(1, nLimits):
            limits[i].divideByLimit(limits[0])

        # Set reference values to 1
        for j in range(0, len(limits[0].expectedMedian)):
            limits[0].expectedMedian[j] = 1.0
            limits[0].expectedMinus2[j] = 1.0
            limits[0].expectedMinus1[j] = 1.0
            limits[0].expectedPlus2[j] = 1.0
            limits[0].expectedPlus1[j] = 1.0
            limits[0].observed[j] = 1.0

        # Do the relative plot
        doPlot(limits,
               legendLabels,
               expectedList,
               gOpts.name + "_expectedMedianRelative",
               gOpts.relativeYlabel,
               myOpts=gOpts,
               plotLabel="Expected median")
        Print("Skipping +-1 and 2 sigma plots for --relative", True)
        sys.exit()

    if gOpts.relativePairs:
        if len(limits) % 2 != 0:
            Print("Number of limits is not even!", True)
            sys.exit(1)

        divPoint = len(limits) / 2
        denoms = limits[:divPoint]
        numers = limits[divPoint:]

        # For-loop: All division points
        for i in xrange(0, divPoint):
            numers[i].divideByLimit(denoms[i])

        expectedNumersList = [l.expectedGraph() for l in numers]
        doPlot(numers,
               legendLabels[:divPoint],
               gexpectedNumersList,
               gOpts.name + "_expectedMedianRelative",
               gOpts.relativeYlabel,
               plotLabel="Expected median")
        Print("Skipping +-1 and 2 sigma plots for --relativePairs", True)
        sys.exit()

    legendLabels2 = legendLabels + [None] * len(legendLabels)

    doPlot(limits,
           legendLabels2,
           [
               limit.divideGraph(l.expectedGraph(sigma=+1), l.expectedGraph())
               for l in limits
           ] + [
               limit.divideGraph(l.expectedGraph(sigma=-1), l.expectedGraph())
               for l in limits
           ],
           gOpts.name + "_expectedSigma1Relative",
           "Expected #pm1#sigma / median",
           myOpts=gOpts,
           plotLabel="Expected #pm1#sigma / median")

    doPlot(limits,
           legendLabels2,
           [
               limit.divideGraph(l.expectedGraph(sigma=+2), l.expectedGraph())
               for l in limits
           ] + [
               limit.divideGraph(l.expectedGraph(sigma=-2), l.expectedGraph())
               for l in limits
           ],
           gOpts.name + "_expectedSigma2Relative",
           "Expected #pm2#sigma / median",
           myOpts=gOpts,
           plotLabel="Expected #pm2#sigma / median")

    doPlot(limits,
           legendLabels2,
           [l.expectedGraph(sigma=+1)
            for l in limits] + [l.expectedGraph(sigma=-1) for l in limits],
           gOpts.name + "_expectedSigma1",
           "Expected #pm1#sigma",
           myOpts=gOpts,
           plotLabel="Expexted #pm1sigma")

    doPlot(limits,
           legendLabels2,
           [l.expectedGraph(sigma=+2)
            for l in limits] + [l.expectedGraph(sigma=-2) for l in limits],
           gOpts.name + "_expectedSigma2",
           "Expected #pm2#sigma",
           myOpts=gOpts,
           plotLabel="Expected #pm2sigma")
    return