| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

plotBacklogPyRoot.py
Go to the documentation of this file.
1 from ROOT import *
2 import sys
3 import re
4
5 """
6 Produces the backlog plot, parsing the output of the EventLoopManager.
7 Lines with the pattern "Event backlog" are looked for.
8 Events in flight are looked for as well.
9 """
10
11 #configuration
12
13 NEventsInFlight=-1
14 NThreads=-1
15
16 LineStyles=[1,2]
17 LineWidth=3
18 Colors=[kBlue,kGreen+2]
19 MarkerStyles=[kOpenCircle,kFullCircle]
20 MarkesSize=1.5
21
22 graphCounter=0
23 maxY=-1
24
25 LegendDrawOpts="lp"
26
27
28 def parseLog(logfilename):
29 # a line looks like
30 #"HiveEventLoopMgr SUCCESS Event backlog (max= 3, min= 0 ) = 3"
31 global NEventsInFlight
32 global NThreads
33 ifile = open(logfilename,"r")
34 lines=ifile.readlines()
35 ifile.close()
36 content=[]
37 for line in lines:
38 if "Event backlog" in line:
39 content.append( re.match(".* \(max= ([0-9]*), min= ([0-9]*) \) = ([0-9]*).*",line).groups())
40 elif "Running with" in line:
41 NEventsInFlight,NThreads=map(int, re.match(".*Running with ([0-9]*).* ([0-9]*) threads",line).groups())
42
43 return content
44
45 def createGraph(max_min_blog_vals):
46 global graphCounter
47 global maxY
48 graph = TGraph(len(max_min_blog_vals))
49 counter=0
50 for maxn,minn,blog in max_min_blog_vals:
51 blog=float(blog)
52 graph.SetPoint(counter,counter+1,float(blog))
53 if maxY < blog:
54 maxY = blog
55 counter+=1
56
57 graph.SetMarkerSize(MarkesSize)
58 graph.SetMarkerStyle(MarkerStyles[graphCounter])
59 graph.SetMarkerColor(Colors[graphCounter])
60 graph.SetLineWidth(LineWidth)
61 graph.SetLineColor(Colors[graphCounter])
62 graph.SetLineStyle(LineStyles[graphCounter])
63
64 graphCounter+=1
65
66 return graph
67
68 def createInFlightGraph(nevts):
69 global NEventsInFlight
70 graph = TGraph(2)
71 graph.SetPoint(0,0.,float(NEventsInFlight))
72 graph.SetPoint(1,float(nevts)+1,float(NEventsInFlight))
73 graph.SetLineWidth(3 )
74 graph.SetLineColor(kRed)
75 graph.SetLineStyle(2)
76 graph.SetTitle("GaudiHive Backlog (Brunel, 100 evts);Events Finished;Event Backlog")
77 print NEventsInFlight
78 return graph
79
80 def getText(x,y,text,scale,angle,colour,font,NDC=False):
81 lat = TLatex(float(x),float(y),
82 "#scale[%s]{#color[%s]{#font[%s]{%s}}}"%(scale,colour,font,text))
83 if (NDC):
84 lat.SetNDC()
85 if angle!=0.:
86 lat.SetTextAngle(angle)
87 return lat
88
89 def doPlot(logfilename,logfilename_copy):
90 global NEventsInFlight
91 global maxY
92 global NThreads
93 vals=parseLog(logfilename)
94 vals_c=parseLog(logfilename_copy)
95 n_vals=len(vals)
96 inFlightgraph=createInFlightGraph(n_vals)
97 graph = createGraph( vals )
98 graph_c = createGraph( vals_c )
99
100 canvas= TCanvas ("Backlog","Backlog",1100,900)
101 canvas.cd()
102 canvas.SetGrid()
103 inFlightgraph.Draw("APL")
104 inFlightgraph.GetYaxis().SetRangeUser(0.,maxY*1.2)
105 inFlightgraph.GetXaxis().SetRangeUser(0.,float(n_vals+1))
106 graph.Draw("PLSame")
107 graph_c.Draw("PLSame")
108
109 # Labels
110 eventInFlightLabel=getText(float(n_vals+1)*1.03,NEventsInFlight,"#splitline{# Simultaneous}{ Events}",.6,270,2,12)
111 eventInFlightLabel.Draw()
112 nThreadsLabel=getText(.15,.7,"%s Threads"%NThreads,.6,0,2,12,True)
113 nThreadsLabel.Draw()
114
115 # Build a Legend
116 legend = TLegend(.7,.75,.9,.9)
117 legend.SetFillColor(kWhite)
118 legend.SetHeader("Algo Management")
119 legend.AddEntry(graph,"No Cloning",LegendDrawOpts)
120 legend.AddEntry(graph_c,"Cloning enabled",LegendDrawOpts)
121 legend.Draw()
122
123 a= raw_input("press enter to continue")
124
125 canvas.Print("EventBacklog.png")
126
127 if __name__ == "__main__":
128 argc=len(sys.argv)
129 if argc!=3:
130 print "Usage: plotBacklogPyRoot.py logfilename logfilename_copy"
131 sys.exit(1)
132 doPlot(sys.argv[1],sys.argv[2])
plotBacklogPyRoot.getText
def getText
Definition: plotBacklogPyRoot.py:80
Containers::map
struct GAUDI_API map
Parametrisation class for map-like implementation.
Definition: KeyedObjectManager.h:25
plotBacklogPyRoot.parseLog
def parseLog(logfilename)
Definition: plotBacklogPyRoot.py:28
plotBacklogPyRoot.createInFlightGraph
def createInFlightGraph(nevts)
Definition: plotBacklogPyRoot.py:68
plotBacklogPyRoot.doPlot
def doPlot(logfilename, logfilename_copy)
Definition: plotBacklogPyRoot.py:89
plotBacklogPyRoot.createGraph
def createGraph(max_min_blog_vals)
Definition: plotBacklogPyRoot.py:45