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)
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" # 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.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)
def doPlot(self, mAtanbeta=False): graphs = {} #["observed", "observedPlusTheorUncert", "observedMinusTheorUncert", "expected", "expectedPlus1Sigma", "expectedPlus2Sigma", "expectedMinus1Sigma", "expectedMinus2Sigma"] result = self._getResultGraphForOneKey("expected") graphs["exp"] = result[0] graphs["expDown"] = result[1] result = self._getResultGraphForTwoKeys("expectedPlus1Sigma", "expectedMinus1Sigma") graphs["exp1"] = result[0] graphs["exp1Down"] = result[1] result = self._getResultGraphForTwoKeys("expectedPlus2Sigma", "expectedMinus2Sigma") graphs["exp2"] = result[0] graphs["exp2Down"] = result[1] result = self._getResultGraphForOneKey("observed") graphs["obs"] = result[0] graphs["obsDown"] = result[1] myName = _modelPattern % self._mssmModel if not os.path.exists(myName): raise Exception("Error: Cannot find file '%s'!" % myName) db = BRXSDB.BRXSDatabaseInterface(myName) graphs["Allowed"] = db.mhLimit("mh", "mHp", "mHp > 0", "125.0+-3.0") graphs["AllowedCentral"] = db.mhLimit("mh", "mHp", "mHp > 0", "125.0+-0.0") if mAtanbeta: for k in graphs.keys(): print k db.graphToMa(graphs[k]) if mAtanbeta: if self.isLightHp(): graphs["isomass"] = db.getIsoMass(160) else: graphs["isomass"] = db.getIsoMass(200) #graphName = "obsDown" #for i in range(0, graphs[graphName].GetN()): #print graphs[graphName].GetX()[i], graphs[graphName].GetY()[i] db.close() if self._mssmModel == "tauphobic": ## 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] ## Fix m=500 and m=600 n = graphs["Allowed"].GetN() graphs["Allowed"].SetPoint(n - 2, 500, 4.77) graphs["Allowed"].SetPoint(n - 1, 600, 4.71) myFinalStateLabel = [] if float(self._massPoints[0]) < 179: myFinalStateLabel.append( "^{}H^{+}#rightarrow#tau^{+}#nu_{#tau}, ^{}#tau_{h}+jets final state" ) else: myFinalStateLabel.append( "^{}H^{+}#rightarrow#tau^{+}#nu_{#tau} final states:") myFinalStateLabel.append(" ^{}#tau_{h}+jets") #myFinalStateLabel.append(" ^{}#tau_{h}+jets, #mu#tau_{h}, #it{ll}") myFinalStateLabel.append( "^{}H^{+}#rightarrowt#bar{b} final states:") myFinalStateLabel.append(" ^{}#it{l}+jets, #mu#tau_{h}, #it{ll}") if float(self._massPoints[0]) < 179: myName = "tanbeta_%s_light" % self._mssmModel if mAtanbeta: limit.doTanBetaPlotGeneric(myName + "_mA", graphs, 19700, myFinalStateLabel, limit.mA(), self._mssmModel, regime="light") else: limit.doTanBetaPlotGeneric(myName, graphs, 19700, myFinalStateLabel, limit.mHplus(), self._mssmModel, regime="light") else: myName = "limitsTanbCombination_heavy_" + self._mssmModel if mAtanbeta: limit.doTanBetaPlotGeneric(myName + "_mA", graphs, 19700, myFinalStateLabel, limit.mA(), self._mssmModel, regime="combination") else: limit.doTanBetaPlotGeneric(myName, graphs, 19700, myFinalStateLabel, limit.mHplus(), self._mssmModel, regime="combination")
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())
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)
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())
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 = "" 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 = "" 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)