5 from optparse
import OptionParser
10 __author__ =
'James Walder'
12 __usage__ =
'%prog [options] '
15 names = s.split(token)
19 def AddText(xmin,ymin,text,size=0.015, font=None):
23 m.SetTextColor(EColor.kBlack);
27 m.DrawLatex(xmin,ymin,text);
95 out =
"x0: " +
str(self.
x0) +
" +- " +
str(self.
Ex0)
98 parser = OptionParser(usage=__usage__, version=__version__)
99 parser.add_option(
'-f',
'--files',dest=
'files', default=
'bs.root', help=
'Root files for data plots')
100 parser.add_option(
'-d',
'--dir',dest=
'dir', default=
'Beamspot', help=
'Root directory for beamspots')
101 parser.add_option(
'-b',
'--batch', dest=
'batch', action=
'store_true', default=
False, help=
'Run in batch mode')
102 parser.add_option(
'-t',
'--tree',dest=
'tree', default=
'Beamspots', help=
'Beamspot root-tree name')
104 (options,args) = parser.parse_args()
107 os.unsetenv(
'DISPLAY')
110 from ROOT
import TH1D, TCanvas
111 from ROOT
import gSystem, gROOT, TFile, TH1D, TH2D, TCanvas, TTree, TChain
112 from ROOT
import TGraphErrors
113 from ROOT
import TMultiGraph
114 from ROOT
import EColor
115 from ROOT
import TLegend,TLine
116 from ROOT
import TLatex,TGaxis
117 from ROOT
import EColor
128 MaxHeightFactor = 1.5
131 gROOT.ProcessLine(
".L AtlasStyle.C")
132 gROOT.ProcessLine(
".L AtlasUtils.C")
133 gROOT.ProcessLine(
"SetAtlasStyle();")
137 from ROOT
import gDirectory
139 p = re.compile(pattern)
141 n = gDirectory.GetListOfKeys().GetSize()
145 name = gDirectory.GetListOfKeys().At(i).GetName()
146 if not p.match(name):
150 h = gDirectory.Get(gDirectory.GetListOfKeys().At(i).GetName())
159 subs = {
'p':
'.',
'm':
'-' }
170 t = title.split(cutToken)
171 namestring = t[0].strip(
'_')
172 cutstring = t[-1].strip(
'_')
173 cuts = cutstring.split(
'_')
175 for i
in range(0,len(cuts),2):
178 return output,namestring
181 tr = file.Get( dir +
"/" + name)
186 def makePull( tree, xval='x0',xcov='x0x0', xTrue=0., isCovErr=True, xlow=-8, xhigh=8, xbins=100, doGausFit=False, cuts=""):
187 h = TH1D(
"hPull_"+tree.GetName()+
"_"+xval,
"hPull_"+tree.GetName()+
"_"+xval, xbins, xlow,xhigh)
189 p =
'(%(x)s - %(t)s)/sqrt(%(e)s) >> %(h)s' % {
'x':xval,
't':xTrue,
'e':xcov,
'h':h.GetName()}
191 p =
'(%(x)s - %(t)s)/(%(e)s) >> %(h)s' % {
'x':xval,
't':xTrue,
'e':xcov,
'h':h.GetName()}
193 tree.Draw( p , cuts);
197 meanErr = h.GetMeanError()
199 rmsErr = h.GetRMSError()
202 f = h.GetFunction(
"gaus")
203 mean = f.GetParameter(1)
204 meanErr = f.GetParError(1)
205 rms = f.GetParameter(2)
206 rmsErr = f.GetParError(2)
208 return (mean, meanErr, rms, rmsErr)
217 fii = TFile(files[0])
219 print "Multiple files not yet supported"
226 if len(beamspots) == 0:
229 nPoints = len(beamspots)
230 print "Found", nPoints
232 x = TGraphErrors(nPoints)
233 x.SetName(name +
"_x")
234 x.SetTitle(name +
" x; lb; x [mm]")
235 y = TGraphErrors(nPoints)
236 y.SetName(name +
"_y")
237 y.SetTitle(name +
" y; lb; y [mm]")
238 z = TGraphErrors(nPoints)
239 z.SetName(name +
"_z")
240 z.SetTitle(name +
" z; lb; z [mm]")
241 sx = TGraphErrors(nPoints)
242 sx.SetName(name +
"_sx")
243 sx.SetTitle(name +
" sx; lb; #sigma(x) [mm]")
244 sy = TGraphErrors(nPoints)
245 sy.SetName(name +
"_sy")
246 sy.SetTitle(name +
" sy; lb; #sigma(y) [mm]")
247 sz = TGraphErrors(nPoints)
248 sz.SetName(name +
"_sz")
249 sz.SetTitle(name +
" sz; lb; #sigma(z) [mm]")
250 ax = TGraphErrors(nPoints)
251 ax.SetName(name +
"_ax")
252 ax.SetTitle(name +
" ax; lb; slope x-z [rad]")
253 ay = TGraphErrors(nPoints)
254 ay.SetName(name +
"_ay")
255 ay.SetTitle(name +
" ay; lb; slope y-z [rad]")
256 k = TGraphErrors(nPoints)
257 k.SetName(name +
"_k")
258 k.SetTitle(name +
" k; lb; k")
259 rhoxy = TGraphErrors(nPoints)
260 rhoxy.SetName(name +
"_rhoxy")
261 rhoxy.SetTitle(name +
" rhoxy; lb; #rho_{xy}")
263 nEvents= TGraphErrors(nPoints)
264 nEvents.SetName(name +
"_nEvents")
265 nEvents.SetTitle(name +
" nEvents; lb; nEvents")
269 graphs.extend([x,y,z,sx,sy,sz,ax,ay,k,rhoxy,nEvents])
272 for evt,bs
in beamspots:
273 xmid = evt.lbStart + 0.5*evt.lumiRange
274 xerr = 0.5*evt.lumiRange
276 x.SetPoint(point, xmid, bs.xc)
277 y.SetPoint(point, xmid, bs.yc)
278 z.SetPoint(point, xmid, bs.z)
279 sx.SetPoint(point, xmid,bs.sx )
280 sy.SetPoint(point, xmid,bs.sy )
281 sz.SetPoint(point, xmid,bs.sz )
282 ax.SetPoint(point, xmid, bs.ax)
283 ay.SetPoint(point, xmid, bs.ay)
284 k.SetPoint(point, xmid, bs.k)
285 rhoxy.SetPoint(point, xmid, bs.rhoxy)
287 nEvents.SetPoint(point, xmid, evt.nEvents)
289 x.SetPointError(point, xerr,bs.Exc )
290 y.SetPointError(point, xerr,bs.Eyc )
291 z.SetPointError(point, xerr,bs.Ez )
292 sx.SetPointError(point, xerr,bs.Esx )
293 sy.SetPointError(point, xerr,bs.Esy )
294 sz.SetPointError(point, xerr,bs.Esz )
295 ax.SetPointError(point, xerr,bs.Eax )
296 ay.SetPointError(point, xerr,bs.Eay )
298 k.SetPointError(point, xerr, bs.Ek)
299 rhoxy.SetPointError(point, xerr, bs.Erhoxy)
300 nEvents.SetPointError(point, xerr, sqrt(evt.nEvents))
303 return (x,y,z,sx,sy,sz,ax,ay,k,rhoxy,nEvents)
306 nPoints = len(points)
308 x = TGraphErrors(nPoints)
310 x.SetTitle(name +
" x; lb; x [mm]")
311 y = TGraphErrors(nPoints)
313 y.SetTitle(name +
" y; lb; y [mm]")
314 z = TGraphErrors(nPoints)
316 z.SetTitle(name +
" z; lb; z [mm]")
317 sx = TGraphErrors(nPoints)
319 sx.SetTitle(name +
" sx; lb; #sigma(x) [mm]")
320 sy = TGraphErrors(nPoints)
322 sy.SetTitle(name +
" sy; lb; #sigma(y) [mm]")
323 sz = TGraphErrors(nPoints)
325 sz.SetTitle(name +
" sz; lb; #sigma(z) [mm]")
327 xrms = TGraphErrors(nPoints)
328 xrms.SetName(name+
"_rms")
329 xrms.SetTitle(name+
"_rms" +
" x")
330 yrms = TGraphErrors(nPoints)
331 yrms.SetName(name+
"_rms")
332 yrms.SetTitle(name+
"_rms" +
" y")
333 zrms = TGraphErrors(nPoints)
334 zrms.SetName(name+
"_rms")
335 zrms.SetTitle(name+
"_rms" +
" z")
336 sxrms = TGraphErrors(nPoints)
337 sxrms.SetName(name+
"_rms")
338 sxrms.SetTitle(name+
"_rms" +
" sx")
339 syrms = TGraphErrors(nPoints)
340 syrms.SetName(name+
"_rms")
341 syrms.SetTitle(name+
"_rms" +
" sy")
342 szrms = TGraphErrors(nPoints)
343 szrms.SetName(name+
"_rms")
344 szrms.SetTitle(name+
"_rms" +
" sz")
346 graphs.extend([x,y,z,sx,sy,sz,xrms,yrms,zrms,sxrms,syrms,szrms])
348 for i
in range(len(points)):
354 x.SetPoint(i, xval, yvals[0][0])
355 y.SetPoint(i, xval, yvals[1][0])
356 z.SetPoint(i, xval, yvals[2][0])
357 sx.SetPoint(i, xval, yvals[3][0])
358 sy.SetPoint(i, xval, yvals[4][0])
359 sz.SetPoint(i, xval, yvals[5][0])
361 x.SetPointError(i, xerr, yvals[0][1])
362 y.SetPointError(i, xerr, yvals[1][1])
363 z.SetPointError(i, xerr, yvals[2][1])
364 sx.SetPointError(i, xerr, yvals[3][1])
365 sy.SetPointError(i, xerr, yvals[4][1])
366 sz.SetPointError(i, xerr, yvals[5][1])
369 xrms.SetPoint(i, xval, yvals[0][2])
370 yrms.SetPoint(i, xval, yvals[1][2])
371 zrms.SetPoint(i, xval, yvals[2][2])
372 sxrms.SetPoint(i, xval, yvals[3][2])
373 syrms.SetPoint(i, xval, yvals[4][2])
374 szrms.SetPoint(i, xval, yvals[5][2])
376 xrms.SetPointError(i, xerr, yvals[0][3])
377 yrms.SetPointError(i, xerr, yvals[1][3])
378 zrms.SetPointError(i, xerr, yvals[2][3])
379 sxrms.SetPointError(i, xerr, yvals[3][3])
380 syrms.SetPointError(i, xerr, yvals[4][3])
381 szrms.SetPointError(i, xerr, yvals[5][3])
390 yaxis_xrms = TGaxis( -1, 0.2, 1 ,0.2, -1, 2,510,
"+R")
391 yaxis_xrms.ImportAxisAttributes( y.GetHistogram().GetYaxis() )
410 trueVals = {
'x0':-0.15,
'y0':1.,
'z':-9.,
'sx':
'0.72',
'sy':
'0.42',
'sz':44,
'ax':
'0.',
'ay':0.,
'k':1,
'rhoxy':0.0}
420 xval = o[o.keys()[0]]
422 xpos =
makePull(
getTree( i.GetName(), file, dir), xval=
'x0', xcov=
'x0x0', xTrue=trueVals[
'x0'])
423 ypos =
makePull(
getTree( i.GetName(), file, dir), xval=
'y0', xcov=
'y0y0', xTrue=trueVals[
'y0'])
424 zpos =
makePull(
getTree( i.GetName(), file, dir), xval=
'z', xcov=
'zz', xTrue=trueVals[
'z'])
426 sx =
makePull(
getTree( i.GetName(), file, dir), xval=
'sx', xcov=
'sxsx', xTrue=trueVals[
'sx'])
427 sy =
makePull(
getTree( i.GetName(), file, dir), xval=
'sy', xcov=
'sysy', xTrue=trueVals[
'sy'])
428 sz =
makePull(
getTree( i.GetName(), file, dir), xval=
'sz', xcov=
'szsz', xTrue=trueVals[
'sz'])
429 ax =
makePull(
getTree( i.GetName(), file, dir), xval=
'ax', xcov=
'axax', xTrue=trueVals[
'ax'])
430 ay =
makePull(
getTree( i.GetName(), file, dir), xval=
'ay', xcov=
'ayay', xTrue=trueVals[
'ay'])
431 k =
makePull(
getTree( i.GetName(), file, dir), xval=
'k', xcov=
'kk', xTrue=trueVals[
'k'])
432 rhoxy =
makePull(
getTree( i.GetName(), file, dir), xval=
'rhoxy', xcov=
'rhoxyrhoxy', xTrue=trueVals[
'rhoxy'])
433 points.append( (xval, [xpos, ypos, zpos, sx, sy, sz, ax, ay, k, rhoxy ]) )
442 chain = TChain(options.dir+
"/"+options.tree)
446 print "Added: ", chain.GetNtrees() ,
" files."
448 nEntries = chain.GetEntries()
450 lrun = chain.GetLeaf(
"event/run")
451 lbcid = chain.GetLeaf(
"event/bcid")
452 lnEvents = chain.GetLeaf(
"event/nEvents")
453 llbStart = chain.GetLeaf(
"event/lumiStart")
454 llumiRange= chain.GetLeaf(
"event/lumiRange")
455 lstatusWord=chain.GetLeaf(
"event/statusWord")
457 lx0 = chain.GetLeaf(
"bs/x0")
458 ly0 = chain.GetLeaf(
"bs/y0")
459 lz = chain.GetLeaf(
"bs/z")
460 lsx = chain.GetLeaf(
"bs/sx")
461 lsy = chain.GetLeaf(
"bs/sy")
462 lsz = chain.GetLeaf(
"bs/sz")
463 lax = chain.GetLeaf(
"bs/ax")
464 lay = chain.GetLeaf(
"bs/ay")
465 lrhoxy= chain.GetLeaf(
"bs/rhoxy")
466 lk = chain.GetLeaf(
"bs/k")
467 lxc = chain.GetLeaf(
"bsCentroid/xc")
468 lyc = chain.GetLeaf(
"bsCentroid/yc")
470 lCovx0 = chain.GetLeaf(
"bsCov/x0x0")
471 lCovy0 = chain.GetLeaf(
"bsCov/y0y0")
472 lCovz = chain.GetLeaf(
"bsCov/zz")
473 lCovsx = chain.GetLeaf(
"bsCov/sxsx")
474 lCovsy = chain.GetLeaf(
"bsCov/sysy")
475 lCovsz = chain.GetLeaf(
"bsCov/szsz")
476 lCovax = chain.GetLeaf(
"bsCov/axax")
477 lCovay = chain.GetLeaf(
"bsCov/ayay")
478 lCovrhoxy= chain.GetLeaf(
"bsCov/rhoxyrhoxy")
479 lCovk = chain.GetLeaf(
"bsCov/kk")
480 lCovxc = chain.GetLeaf(
"bsCovCentroid/xcxc")
481 lCovyc = chain.GetLeaf(
"bsCovCentroid/ycyc")
487 for entry
in range(nEntries):
489 chain.GetEntry(entry)
490 run = lrun.GetValue()
491 bcid = lbcid.GetValue()
492 nEvents = lnEvents.GetValue()
493 lbStart = llbStart.GetValue()
494 lumiRange = llumiRange.GetValue()
495 statusWord = lstatusWord.GetValue()
507 evt.lbStart = lbStart
508 evt.lumiRange = lumiRange
509 evt.statusWord = statusWord
511 evt.nEvents = nEvents
514 bs.x0 = lx0.GetValue()
515 bs.y0 = ly0.GetValue()
516 bs.xc = lxc.GetValue()
517 bs.yc = lyc.GetValue()
519 bs.sx = lsx.GetValue()
520 bs.sy = lsy.GetValue()
521 bs.sz = lsz.GetValue()
522 bs.ax = lax.GetValue()
523 bs.ay = lay.GetValue()
525 bs.rhoxy = lrhoxy.GetValue()
527 bs.Ek = sqrt(lCovk.GetValue())
528 bs.Ex0 = sqrt(lCovx0.GetValue())
529 bs.Ey0 = sqrt(lCovy0.GetValue())
530 bs.Exc = sqrt(lCovx0.GetValue())
531 bs.Eyc = sqrt(lCovy0.GetValue())
532 bs.Ez = sqrt(lCovz.GetValue())
533 bs.Esx = sqrt(lCovsx.GetValue())
534 bs.Esy = sqrt(lCovsy.GetValue())
535 bs.Esz = sqrt(lCovsz.GetValue())
536 bs.Eax = sqrt(lCovax.GetValue())
537 bs.Eay = sqrt(lCovay.GetValue())
538 bs.Erhoxy = sqrt(lCovrhoxy.GetValue())
539 bs.Ek = sqrt(lCovk.GetValue())
541 if bcid
not in bcidEvents.keys():
542 bcidEvents[bcid] = []
543 bcidEvents[bcid].
append( (evt, bs) )
547 for k,v
in bcidEvents.items():
551 for k,v
in bcidEvents.items():
581 cx = TCanvas(
"cx",
"",800,600)
582 cy = TCanvas(
"cy",
"",800,600)
583 cz = TCanvas(
"cz",
"",800,600)
584 csx = TCanvas(
"csx",
"",800,600)
585 csy = TCanvas(
"csy",
"",800,600)
586 csz = TCanvas(
"csz",
"",800,600)
587 cax = TCanvas(
"cax",
"",800,600)
588 cay = TCanvas(
"cay",
"",800,600)
589 ck = TCanvas(
"ck",
"",800,600)
590 crhoxy = TCanvas(
"crhoxy",
"",800,600)
591 cnEvents = TCanvas(
"cnEvents",
"",800,600)
593 legx = TLegend(0.75,0.65,0.92,0.94)
594 legy = TLegend(0.75,0.65,0.92,0.94)
595 legz = TLegend(0.75,0.65,0.92,0.94)
596 legsx = TLegend(0.75,0.65,0.92,0.94)
597 legsy = TLegend(0.75,0.65,0.92,0.94)
598 legsz = TLegend(0.75,0.65,0.92,0.94)
599 legax = TLegend(0.75,0.65,0.92,0.94)
600 legay = TLegend(0.75,0.65,0.92,0.94)
601 legk = TLegend(0.75,0.65,0.92,0.94)
602 legrhoxy = TLegend(0.75,0.65,0.92,0.94)
603 legnEvents = TLegend(0.75,0.65,0.92,0.94)
604 legs = [ legx,legy ,legz ,legsx,legsy,legsz,legax,legay,legk ,legrhoxy,legnEvents]
608 leg.SetBorderSize(0);
614 colours = [ EColor.kRed+1, EColor.kBlue+1, EColor.kGreen-8, EColor.kYellow+4]
615 markers = [20,25,22,27,23,28,30,21]
616 for k,v
in plots.items():
620 x = [v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10]]
625 a.SetRangeUser( min - 0.1*(max-min), max + 0.5*(max-min))
631 i.SetMarkerColor(colours[c])
632 i.SetLineColor(colours[c])
633 i.SetMarkerStyle(markers[m])
635 legx.AddEntry(v[0],
str(
int(k)),
"p")
636 legy.AddEntry(v[1],
str(
int(k)),
"p")
637 legz.AddEntry(v[2],
str(
int(k)),
"p")
638 legsx.AddEntry(v[3],
str(
int(k)),
"p")
639 legsy.AddEntry(v[4],
str(
int(k)),
"p")
640 legsz.AddEntry(v[5],
str(
int(k)),
"p")
641 legax.AddEntry(v[6],
str(
int(k)),
"p")
642 legay.AddEntry(v[7],
str(
int(k)),
"p")
643 legk.AddEntry(v[8],
str(
int(k)),
"p")
644 legrhoxy.AddEntry(v[9],
str(
int(k)),
"p")
645 legnEvents.AddEntry(v[10],
str(
int(k)),
"p")
673 if c == len(colours):
677 if m == len(markers):
681 print "Found BICDs: ", bcidEvents.keys()
685 AddText(0.2,0.85,
"x-position",fontSize)
688 AddText(0.2,0.85,
"y-position",fontSize)
691 AddText(0.2,0.85,
"z-position",fontSize)
694 AddText(0.2,0.85,
"Width #sigma(x)",fontSize)
697 AddText(0.2,0.85,
"Width #sigma(y)",fontSize)
700 AddText(0.2,0.85,
"Width #sigma(z)",fontSize)
703 AddText(0.2,0.85,
"Slope: x-z",fontSize)
706 AddText(0.2,0.85,
"Slope: y-z",fontSize)
709 AddText(0.2,0.85,
"k-factor",fontSize)
713 AddText(0.2,0.85,
"#rho_{xy}",fontSize)
715 AddText(0.2,0.85,
"N passed vertices",fontSize)
727 crhoxy.Print(
"crhoxy.pdf")
728 cnEvents.Print(
"cnEvents.pdf")
731 s = raw_input(
'--> ')