def PlotUL(pars,config,ULFlux,Index): ROOT.gROOT.SetBatch(ROOT.kTRUE) root_style.RootStyle() #Compute the SED E = np.logspace(np.log10(pars.Emin), np.log10(pars.Emax), pars.N) SED = 1.602e-6 * E ** 2 * (-Index+1)*ULFlux* np.power(E,-Index)/(np.power(pars.Emax,-Index+1)-np.power(pars.Emin,-Index+1)) #Actually make the plot c_plot = ROOT.TCanvas(pars.PlotName) c_plot.SetLogx() c_plot.SetLogy() xmin, xmax = E[0] * 0.7, E[-1] * 1.6 ymin = min(SED[0], SED[-1]) * 0.15 ymax = max(SED[0], SED[-1]) * 3 ghSED = ROOT.TH2F("ghSED", "", 10000, xmin, xmax, 100, ymin, ymax) ghSED.SetStats(000) ghSED.SetTitle(pars.PlotName) ghSED.SetXTitle("E [MeV]") ghSED.SetYTitle("E^{2}dN/dE [ erg cm^{-2} s^{-1} ] ") ghSED.Draw() tgr = ROOT.TGraph(pars.N, np.array(E), np.array(SED)) tgr.Draw("L") Ar_1=ROOT.TArrow(E[0],SED[0]*0.2,E[0],SED[0],0.02) Ar_2=ROOT.TArrow(E[-1],SED[-1]*0.2,E[-1],SED[-1],0.02) Ar_2.Draw("<|") Ar_1.Draw("<|") #save the canvas filebase = utils._SpecFileName(config) c_plot.Print(filebase + '.C') c_plot.Print(filebase + '.eps') c_plot.Print(filebase + '.png')
def PlotSED(infile,pars): """plot a nice SED with a butterfly and points""" config = get_config(infile) ROOT.gROOT.SetBatch(ROOT.kTRUE) root_style.RootStyle() # Read the ascii file where the butterfly is stored filebase = utils._SpecFileName(config) lines = open(filebase + '.dat', 'r').readlines() SED = [] E = [] Err = [] for i in xrange(len(lines) - 1): words = lines[i + 1].split() if float(words[0])<pars.Emax : E.append(float(words[0])) SED.append(float(words[1])) Err.append(float(words[2])) ilen = len(SED) #From dN/dE to SED Fluxp = np.array(SED)*np.exp(np.array(Err)/np.array(SED)) Fluxm = np.array(SED)*np.exp(-np.array(Err)/np.array(SED)) ErrorFlux = np.zeros(2 * ilen + 1) ErrorE = np.zeros(2 * ilen + 1) #Compute the butterfly and close it for i in xrange(ilen): ErrorFlux[i] = Fluxp[i] ErrorE[i] = E[i] for i in xrange(ilen): ErrorFlux[ilen + i] = Fluxm[ilen - i - 1] ErrorE[ilen + i] = E[ilen - i - 1] ErrorFlux[-1] = Fluxp[0] ErrorE[-1] = E[0] #Actually make the plot c_plot = ROOT.TCanvas(pars.PlotName) c_plot.SetLogx() c_plot.SetLogy() xmin, xmax = E[0] * 0.8, E[-1] * 1.5 ymin = min(np.array(SED) - np.array(Err)) * 0.2 ymax = max(np.array(SED) + np.array(Err)) * 3 ghSED = ROOT.TH2F("ghSED", "", 10000, xmin, xmax, 100, ymin, ymax) ghSED.SetStats(000) ghSED.SetTitle(pars.PlotName) ghSED.SetXTitle("E [MeV]") ghSED.SetYTitle("E^{2}dN/dE [ erg cm^{-2} s^{-1} ] ") ghSED.Draw() tgr = ROOT.TGraph(ilen, np.array(E), np.array(SED)) tgr.SetLineWidth(2) tgr.SetLineColor(pars.LineColor) tgr.Draw("L") tgerr = ROOT.TGraph(2 * ilen + 1, ErrorE, ErrorFlux) tgerr.SetLineColor(pars.LineColor) tgerr.Draw("L") #Plot points NEbin = int(config['Ebin']['NumEnergyBins']) if NEbin > 0: tgpoint, Arrow = PlotDataPoints(config,pars) #collect data points tgpoint.SetLineColor(pars.PointColor) tgpoint.SetMarkerColor(pars.PointColor) tgpoint.Draw("pz") for i in xrange(len(Arrow)): Arrow[i].SetLineColor(pars.PointColor) Arrow[i].SetFillColor(pars.PointColor) Arrow[i].Draw() #save the canvas c_plot.Print(filebase + '.C') c_plot.Print(filebase + '.eps') c_plot.Print(filebase + '.png')