File indexing completed on 2024-11-25 02:29:06
0001 from builtins import range
0002 import ROOT, array, os, re, random
0003 from math import *
0004 import time
0005 import pickle
0006
0007
0008 try:
0009 import json
0010 except ImportError:
0011 import simplejson as json
0012
0013
0014 from signConventions import *
0015
0016
0017 from mutypes import *
0018
0019 CPP_LOADED = False
0020
0021
0022 MAP_RESULTS_SAWTOOTH = {}
0023 MAP_RESULTS_FITSIN = {}
0024 MAP_RESULTS_BINS = {}
0025
0026
0027 TEST_RESULTS = {}
0028
0029
0030
0031
0032 def wheelm2only(dt, wheel, station, sector): return dt == "DT" and wheel == -2
0033 def wheelm1only(dt, wheel, station, sector): return dt == "DT" and wheel == -1
0034 def wheel0only(dt, wheel, station, sector): return dt == "DT" and wheel == 0
0035 def wheelp1only(dt, wheel, station, sector): return dt == "DT" and wheel == 1
0036 def wheelp2only(dt, wheel, station, sector): return dt == "DT" and wheel == 2
0037
0038 def wheelLetter(wheel):
0039 if wheel == -2: return "A"
0040 elif wheel == -1: return "B"
0041 elif wheel == 0: return "C"
0042 elif wheel == +1: return "D"
0043 elif wheel == +2: return "E"
0044 else: raise Exception
0045
0046 def wheelNumber(wheell):
0047 if wheell == "A": return -2
0048 elif wheell == "B": return -1
0049 elif wheell == "C": return 0
0050 elif wheell == "D": return 1
0051 elif wheell == "E": return 2
0052 else: raise Exception
0053
0054 def mean(xlist):
0055 s, n = 0., 0.
0056 for x in xlist:
0057 s += x
0058 n += 1.
0059 return s/n
0060
0061 def rms(xlist):
0062 s2, n = 0., 0.
0063 for x in xlist:
0064 s2 += x**2
0065 n += 1.
0066 return sqrt(s2/n)
0067
0068 def stdev(xlist):
0069 s, s2, n = 0., 0., 0.
0070 for x in xlist:
0071 s += x
0072 s2 += x**2
0073 n += 1.
0074 return sqrt(s2/n - (s/n)**2)
0075
0076 def wmean(xlist):
0077 s, w = 0., 0.
0078 for x, e in xlist:
0079 if e > 0.:
0080 wi = 1./e**2
0081 s += x*wi
0082 w += wi
0083 return s/w, sqrt(1./w)
0084
0085
0086
0087 tdrStyle = None
0088 def setTDRStyle():
0089 global tdrStyle
0090 tdrStyle = ROOT.TStyle("tdrStyle","Style for P-TDR")
0091
0092 tdrStyle.SetCanvasBorderMode(0)
0093 tdrStyle.SetCanvasColor(ROOT.kWhite)
0094 tdrStyle.SetCanvasDefH(600)
0095 tdrStyle.SetCanvasDefW(600)
0096 tdrStyle.SetCanvasDefX(0)
0097 tdrStyle.SetCanvasDefY(0)
0098
0099
0100 tdrStyle.SetPadBorderMode(0)
0101
0102 tdrStyle.SetPadColor(ROOT.kWhite)
0103 tdrStyle.SetPadGridX(False)
0104 tdrStyle.SetPadGridY(False)
0105 tdrStyle.SetGridColor(0)
0106 tdrStyle.SetGridStyle(3)
0107 tdrStyle.SetGridWidth(1)
0108
0109
0110 tdrStyle.SetFrameBorderMode(0)
0111 tdrStyle.SetFrameBorderSize(1)
0112 tdrStyle.SetFrameFillColor(0)
0113 tdrStyle.SetFrameFillStyle(0)
0114 tdrStyle.SetFrameLineColor(1)
0115 tdrStyle.SetFrameLineStyle(1)
0116 tdrStyle.SetFrameLineWidth(1)
0117
0118
0119
0120
0121 tdrStyle.SetHistLineColor(1)
0122 tdrStyle.SetHistLineStyle(0)
0123 tdrStyle.SetHistLineWidth(1)
0124
0125
0126
0127 tdrStyle.SetEndErrorSize(2)
0128
0129 tdrStyle.SetErrorX(0.)
0130
0131 tdrStyle.SetMarkerStyle(20)
0132
0133
0134 tdrStyle.SetOptFit(1)
0135 tdrStyle.SetFitFormat("5.4g")
0136 tdrStyle.SetFuncColor(2)
0137 tdrStyle.SetFuncStyle(1)
0138 tdrStyle.SetFuncWidth(1)
0139
0140
0141 tdrStyle.SetOptDate(0)
0142
0143
0144
0145
0146 tdrStyle.SetOptFile(0)
0147 tdrStyle.SetOptStat(0)
0148 tdrStyle.SetStatColor(ROOT.kWhite)
0149 tdrStyle.SetStatFont(42)
0150 tdrStyle.SetStatFontSize(0.025)
0151 tdrStyle.SetStatTextColor(1)
0152 tdrStyle.SetStatFormat("6.4g")
0153 tdrStyle.SetStatBorderSize(1)
0154 tdrStyle.SetStatH(0.1)
0155 tdrStyle.SetStatW(0.15)
0156
0157
0158
0159
0160
0161 tdrStyle.SetPadTopMargin(0.05)
0162 tdrStyle.SetPadBottomMargin(0.13)
0163 tdrStyle.SetPadLeftMargin(0.13)
0164 tdrStyle.SetPadRightMargin(0.05)
0165
0166
0167 tdrStyle.SetOptTitle(0)
0168 tdrStyle.SetTitleFont(42)
0169 tdrStyle.SetTitleColor(1)
0170 tdrStyle.SetTitleTextColor(1)
0171 tdrStyle.SetTitleFillColor(10)
0172 tdrStyle.SetTitleFontSize(0.05)
0173
0174
0175
0176
0177
0178
0179
0180
0181 tdrStyle.SetTitleColor(1, "XYZ")
0182 tdrStyle.SetTitleFont(42, "XYZ")
0183 tdrStyle.SetTitleSize(0.06, "XYZ")
0184
0185
0186 tdrStyle.SetTitleXOffset(0.9)
0187 tdrStyle.SetTitleYOffset(1.05)
0188
0189
0190
0191 tdrStyle.SetLabelColor(1, "XYZ")
0192 tdrStyle.SetLabelFont(42, "XYZ")
0193 tdrStyle.SetLabelOffset(0.007, "XYZ")
0194 tdrStyle.SetLabelSize(0.05, "XYZ")
0195
0196
0197 tdrStyle.SetAxisColor(1, "XYZ")
0198 tdrStyle.SetStripDecimals(True)
0199 tdrStyle.SetTickLength(0.03, "XYZ")
0200 tdrStyle.SetNdivisions(510, "XYZ")
0201 tdrStyle.SetPadTickX(1)
0202 tdrStyle.SetPadTickY(1)
0203
0204
0205 tdrStyle.SetOptLogx(0)
0206 tdrStyle.SetOptLogy(0)
0207 tdrStyle.SetOptLogz(0)
0208
0209
0210 tdrStyle.SetPaperSize(20.,20.)
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223 tdrStyle.cd()
0224
0225 setTDRStyle()
0226
0227 def set_palette(name=None, ncontours=999):
0228 """Set a color palette from a given RGB list
0229 stops, red, green and blue should all be lists of the same length
0230 see set_decent_colors for an example"""
0231
0232 if name == "halfgray":
0233 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0234 red = map(lambda x: 1. - (1.-x)/2., [1.00, 0.84, 0.61, 0.34, 0.00])
0235 green = map(lambda x: 1. - (1.-x)/2., [1.00, 0.84, 0.61, 0.34, 0.00])
0236 blue = map(lambda x: 1. - (1.-x)/2., [1.00, 0.84, 0.61, 0.34, 0.00])
0237 elif name == "gray":
0238 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0239 red = [1.00, 0.84, 0.61, 0.34, 0.00]
0240 green = [1.00, 0.84, 0.61, 0.34, 0.00]
0241 blue = [1.00, 0.84, 0.61, 0.34, 0.00]
0242 elif name == "blues":
0243 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0244 red = [1.00, 0.84, 0.61, 0.34, 0.00]
0245 green = [1.00, 0.84, 0.61, 0.34, 0.00]
0246 blue = [1.00, 1.00, 1.00, 1.00, 1.00]
0247 elif name == "reds":
0248 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0249 red = [1.00, 1.00, 1.00, 1.00, 1.00]
0250 green = [1.00, 0.84, 0.61, 0.34, 0.00]
0251 blue = [1.00, 0.84, 0.61, 0.34, 0.00]
0252 elif name == "antigray":
0253 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0254 red = [1.00, 0.84, 0.61, 0.34, 0.00]
0255 green = [1.00, 0.84, 0.61, 0.34, 0.00]
0256 blue = [1.00, 0.84, 0.61, 0.34, 0.00]
0257 red.reverse()
0258 green.reverse()
0259 blue.reverse()
0260 elif name == "fire":
0261 stops = [0.00, 0.20, 0.80, 1.00]
0262 red = [1.00, 1.00, 1.00, 0.50]
0263 green = [1.00, 1.00, 0.00, 0.00]
0264 blue = [0.20, 0.00, 0.00, 0.00]
0265 elif name == "antifire":
0266 stops = [0.00, 0.20, 0.80, 1.00]
0267 red = [0.50, 1.00, 1.00, 1.00]
0268 green = [0.00, 0.00, 1.00, 1.00]
0269 blue = [0.00, 0.00, 0.00, 0.20]
0270 else:
0271
0272 stops = [0.00, 0.34, 0.61, 0.84, 1.00]
0273 red = [0.00, 0.00, 0.87, 1.00, 0.51]
0274 green = [0.00, 0.81, 1.00, 0.20, 0.00]
0275 blue = [0.51, 1.00, 0.12, 0.00, 0.00]
0276
0277 s = array.array('d', stops)
0278 r = array.array('d', red)
0279 g = array.array('d', green)
0280 b = array.array('d', blue)
0281
0282 npoints = len(s)
0283 ROOT.TColor.CreateGradientColorTable(npoints, s, r, g, b, ncontours)
0284 ROOT.gStyle.SetNumberContours(ncontours)
0285
0286 set_palette()
0287
0288
0289
0290
0291
0292
0293
0294 phiedgesCSC36 = [pi/180.*(-5. + 10.*i) for i in range(36)]
0295 phiedgesCSC18 = [pi/180.*(-5. + 20.*i) for i in range(18)]
0296 phiedges = [
0297 phiedgesCSC36,
0298 phiedgesCSC36,
0299 phiedgesCSC36,
0300 phiedgesCSC36,
0301 phiedgesCSC18,
0302 phiedgesCSC36,
0303 phiedgesCSC18,
0304 phiedgesCSC36,
0305 phiedgesCSC18,
0306 phiedgesCSC36,
0307 [0.35228048120123945, 0.87587781482541827, 1.3994776462193192, 1.923076807996136, 2.4466741416203148, 2.970273973014216,
0308 -2.7893121723885534, -2.2657148387643748, -1.7421150073704739, -1.2185158455936571, -0.69491851196947851, -0.17131868057557731],
0309 [0.22000706229660855, 0.74360690430428489, 1.267204926935573, 1.7908033890915052, 2.3144032310991816, 2.8380012537304697,
0310 -2.9215855912931841, -2.3979857492855081, -1.8743877266542202, -1.3507892644982882, -0.82718942249061178, -0.30359139985932365],
0311 [0.29751957124275596, 0.82111826253905784, 1.3447162969496083, 1.8683158980376524, 2.3919145893339548, 2.915512623744505,
0312 -2.844073082347037, -2.3204743910507353, -1.7968763566401849, -1.2732767555521407, -0.74967806425583894, -0.22608002984528835],
0313 [3.0136655290752188, -2.7530905195097337, -2.2922883025568734, -1.9222915077192773, -1.5707963267948966, -1.2193011458705159,
0314 -0.84930435103291968, -0.38850213408005951, 0.127927124514574, 0.65152597487624719, 1.1322596819239259, 1.5707963267948966,
0315 2.0093329716658674, 2.4900666787135459]]
0316
0317 def phiedges2c():
0318 lines = []
0319 for ed in phiedges[:]:
0320 ed.sort()
0321
0322 ed.extend([999 for n in range(0,37-len(ed))])
0323 lines.append('{' + ', '.join(map(str, ed)) + '}')
0324
0325 res = ', '.join(lines)
0326 ff = open("phiedges_export.h",mode="w")
0327 print('double phiedges[14][37] = {' + res + '};', file=ff)
0328 ff.close()
0329
0330 class SawTeethFunction:
0331 def __init__(self, name):
0332 self.name = name
0333 self.edges = (phiedges[stationIndex(name)])[:]
0334 self.ed = sorted(self.edges)
0335
0336 self.ed.append(pi+1.)
0337 self.n = len(self.edges)
0338 def __call__(self, xx, par):
0339
0340 x = xx[0]
0341 if x < self.ed[0]: x += 2*pi
0342
0343 for i in range(0,self.n):
0344 if x <= self.ed[i]: continue
0345 if x > self.ed[i+1]: continue
0346 return par[i*2] + par[i*2+1]*(x - self.ed[i])
0347 return 0
0348 def pp(self):
0349 print(self.name, self.n)
0350 print(self.edges)
0351 print(self.ed)
0352
0353
0354 def stationIndex(name):
0355 if ("MB" in name or "ME" in name):
0356
0357 pa = idToPostalAddress(name)
0358 if pa is None: return None
0359 if pa[0]=="CSC":
0360 if pa[2]==1 and pa[3]==1: return 0
0361 if pa[2]==1 and pa[3]==2: return 1
0362 if pa[2]==1 and pa[3]==3: return 2
0363 if pa[2]==1 and pa[3]==4: return 3
0364 if pa[2]==2 and pa[3]==1: return 4
0365 if pa[2]==2 and pa[3]==2: return 5
0366 if pa[2]==3 and pa[3]==1: return 6
0367 if pa[2]==3 and pa[3]==2: return 7
0368 if pa[2]==4 and pa[3]==1: return 8
0369 if pa[2]==4 and pa[3]==2: return 9
0370 if pa[0]=="DT":
0371 if pa[2]==1: return 10
0372 if pa[2]==2: return 11
0373 if pa[2]==3: return 12
0374 if pa[2]==4: return 13
0375 else:
0376 if ("mem11" in name or "mep11" in name): return 0
0377 if ("mem12" in name or "mep12" in name): return 1
0378 if ("mem13" in name or "mep13" in name): return 2
0379 if ("mem14" in name or "mep14" in name): return 3
0380 if ("mem21" in name or "mep21" in name): return 4
0381 if ("mem22" in name or "mep22" in name): return 5
0382 if ("mem31" in name or "mep31" in name): return 6
0383 if ("mem32" in name or "mep32" in name): return 7
0384 if ("mem41" in name or "mep41" in name): return 8
0385 if ("mem42" in name or "mep42" in name): return 9
0386 if ("st1" in name): return 10
0387 if ("st2" in name): return 11
0388 if ("st3" in name): return 12
0389 if ("st4" in name): return 13
0390
0391
0392
0393 def philines(name, window, abscissa):
0394 global philine_tlines, philine_labels
0395 philine_tlines = []
0396 edges = phiedges[stationIndex(name)]
0397
0398 for phi in edges:
0399 if abscissa is None or abscissa[0] < phi < abscissa[1]:
0400 philine_tlines.append(ROOT.TLine(phi, -window, phi, window))
0401 philine_tlines[-1].SetLineStyle(2)
0402 philine_tlines[-1].Draw()
0403 if "st" in name:
0404 philine_labels = []
0405 edges = sorted(edges[:])
0406 if "st4" in name:
0407 labels = [" 7", " 8", " 9", "14", "10", "11", "12", " 1", " 2", " 3", "13", " 4", " 5", " 6"]
0408 else:
0409 labels = [" 8", " 9", "10", "11", "12", " 1", " 2", " 3", " 4", " 5", " 6"]
0410 edges = edges[1:]
0411 for phi, label in zip(edges, labels):
0412 littlebit = 0.
0413 if label in (" 7", " 9", "14", "10", "11"): littlebit = 0.05
0414 philine_labels.append(ROOT.TText(phi-0.35+littlebit, -0.9*window, label))
0415 philine_labels[-1].Draw()
0416 philine_labels.append(ROOT.TText(-2.9, -0.75*window, "Sector:"))
0417 philine_labels[-1].Draw()
0418 if "CSC" in name:
0419 philine_labels = []
0420 edges = sorted(edges[:])
0421 labels = [" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
0422 "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"]
0423
0424
0425
0426 for phi, label in zip(edges, labels):
0427 littlebit = 0.
0428
0429 philine_labels.append(ROOT.TText(phi+littlebit, -0.9*window, label))
0430 philine_labels[-1].SetTextFont(42)
0431 philine_labels[-1].SetTextSize(0.028)
0432 philine_labels[-1].Draw()
0433 philine_labels.append(ROOT.TText(0, -0.78*window, "Chamber:"))
0434 philine_labels[-1].SetTextSize(0.035)
0435 philine_labels[-1].Draw()
0436
0437 def zlines(window, abscissa):
0438 global zline_tlines
0439 zline_tlines = []
0440 for z in -401.625, -133.875, 133.875, 401.625:
0441 if abscissa is None or abscissa[0] < z < abscissa[1]:
0442 zline_tlines.append(ROOT.TLine(z, -window, z, window))
0443 zline_tlines[-1].SetLineStyle(2)
0444 zline_tlines[-1].Draw()
0445 zline_labels = []
0446 zline_labels.append(ROOT.TText(-550, -0.9*window, "-2"))
0447 zline_labels.append(ROOT.TText(-300, -0.9*window, "-1"))
0448 zline_labels.append(ROOT.TText(-10, -0.9*window, "0"))
0449 zline_labels.append(ROOT.TText(250, -0.9*window, "+1"))
0450 zline_labels.append(ROOT.TText(500, -0.9*window, "+2"))
0451 for z in zline_labels: z.Draw()
0452 zline_labels.append(ROOT.TText(-600, -0.75*window, "Wheel:")); zline_labels[-1].Draw()
0453
0454 def rlines(disk, window, abscissa):
0455 global rline_tlines
0456 rline_tlines = []
0457 if disk == 1: rl = [150., 270., 480.]
0458 else: rl = [350.]
0459 for r in rl:
0460 if abscissa is None or abscissa[0] < r < abscissa[1]:
0461 rline_tlines.append(ROOT.TLine(r, -window, r, window))
0462 rline_tlines[-1].SetLineStyle(2)
0463 rline_tlines[-1].Draw()
0464
0465
0466
0467 def getReportByPostalAddress(postal_address, report):
0468 for r in report:
0469 if postal_address == r.postal_address:
0470 return r
0471 return None
0472
0473
0474
0475
0476 def DBMC(database, reports, window=10., windows=None, selection=None, phi=False,
0477 color=ROOT.kBlue-8, style=1, bins=50, normalized=False, getvalues=False, name="", canvas=None, reportdiff=False, inlog=True):
0478 return DBdiff(database, None, reports, None, window, windows, selection, phi, color, style, bins, normalized, getvalues,
0479 name, canvas, reportdiff, inlog)
0480
0481
0482 def DBdiff(database1, database2, reports1, reports2,
0483 window=10., windows=None, selection=None, phi=False, color=ROOT.kBlue-8,
0484 style=1, bins=50, normalized=False, getvalues=False, name="tmp", canvas=None, reportdiff=False, inlog=False ):
0485
0486 tdrStyle.SetOptStat("emrou")
0487 tdrStyle.SetStatW(0.40)
0488
0489 wnd = [window]*6
0490 if windows is not None:
0491 i=0
0492 for w in windows:
0493 wnd[i] = windows[i]
0494 i+=1
0495
0496 global hx, hy, hz, hphix, hphiy, hphiz
0497
0498 if phi:
0499 hx = ROOT.TH1F("%s_phi" % name, "", bins, -wnd[0], wnd[0])
0500 else:
0501 hx = ROOT.TH1F("%s_x" % name, "", bins, -wnd[0], wnd[0])
0502 hy = ROOT.TH1F("%s_y" % name, "", bins, -wnd[1], wnd[1])
0503 hz = ROOT.TH1F("%s_z" % name, "", bins, -wnd[2], wnd[2])
0504 hphix = ROOT.TH1F("%s_phix" % name, "", bins, -wnd[3], wnd[3])
0505 hphiy = ROOT.TH1F("%s_phiy" % name, "", bins, -wnd[4], wnd[4])
0506 hphiz = ROOT.TH1F("%s_phiz" % name, "", bins, -wnd[5], wnd[5])
0507
0508 for r1 in reports1:
0509 if selection is None or (selection.__code__.co_argcount == len(r1.postal_address) and selection(*r1.postal_address)):
0510 if reports2 is None:
0511 r2 = Report(r1.chamberId, r1.postal_address, r1.name)
0512 r2.add_parameters(ValErr(0., 0., 0.), ValErr(0., 0., 0.), ValErr(0., 0., 0.),
0513 ValErr(0., 0., 0.), ValErr(0., 0., 0.), ValErr(0., 0., 0.), 0., 0., 0., 0.)
0514 else:
0515 r2 = getReportByPostalAddress(r1.postal_address, reports2)
0516 if r2 is None: continue
0517
0518 found = False
0519 if r1.postal_address[0] == "DT":
0520 if r1.postal_address[1:] in database1.dt:
0521 found = True
0522 db1 = database1.dt[r1.postal_address[1:]]
0523 if database2 is None:
0524 db2 = DTAlignable()
0525 db2.x = db2.y = db2.z = db2.phix = db2.phiy = db2.phiz = 0.
0526 db2.xx = db2.xy = db2.xz = db2.yx = db2.yy = db2.yz = db2.zx = db2.zy = db2.zz = 0.
0527 else:
0528 db2 = database2.dt[r1.postal_address[1:]]
0529
0530 else:
0531
0532 if r1.postal_address[2]==1 and r1.postal_address[3]==4: continue
0533 if r1.postal_address[1:] in database1.csc:
0534 found = True
0535 db1 = database1.csc[r1.postal_address[1:]]
0536 if database2 is None:
0537 db2 = CSCAlignable()
0538 db2.x = db2.y = db2.z = db2.phix = db2.phiy = db2.phiz = 0.
0539 db2.xx = db2.xy = db2.xz = db2.yx = db2.yy = db2.yz = db2.zx = db2.zy = db2.zz = 0.
0540 else:
0541 db2 = database2.csc[r1.postal_address[1:]]
0542
0543 if found and r1.status == "PASS" and r2.status == "PASS":
0544 if r1.deltax is not None and r2.deltax is not None and r1.deltax.error is not None and \
0545 r2.deltax.error is not None and (r1.deltax.error**2 + r2.deltax.error**2) > 0.:
0546 delta = db1.x - db2.x
0547 if reportdiff: delta -= r1.deltax.value
0548 if normalized:
0549 fill = delta/sqrt(r1.deltax.error**2 + r2.deltax.error**2) * signConventions[r1.postal_address][0]
0550 else:
0551 if phi:
0552 fill = delta/signConventions[r1.postal_address][3] * 1000. * signConventions[r1.postal_address][0]
0553 else:
0554 fill = delta * 10. * signConventions[r1.postal_address][0]
0555 hx.Fill(fill)
0556 if getvalues not in (False, None):
0557 getvalues["x"].append((fill, 10. * sqrt(r1.deltax.error**2 + r2.deltax.error**2)))
0558
0559 if r1.deltay is not None and r2.deltay is not None and r1.deltay.error is not None and \
0560 r2.deltay.error is not None and (r1.deltay.error**2 + r2.deltay.error**2) > 0.:
0561 delta = db1.y - db2.y
0562 if reportdiff: delta -= r1.deltay.value
0563 if normalized:
0564 fill = delta/sqrt(r1.deltay.error**2 + r2.deltay.error**2) * signConventions[r1.postal_address][1]
0565 else:
0566 fill = delta * 10. * signConventions[r1.postal_address][1]
0567 hy.Fill(fill)
0568 if getvalues not in (False, None):
0569 getvalues["y"].append((fill, 10. * sqrt(r1.deltay.error**2 + r2.deltay.error**2)))
0570
0571 if r1.deltaz is not None and r2.deltaz is not None and r1.deltaz.error is not None and \
0572 r2.deltaz.error is not None and (r1.deltaz.error**2 + r2.deltaz.error**2) > 0.:
0573 delta = db1.z - db2.z
0574 if reportdiff: delta -= r1.deltaz.value
0575 if normalized:
0576 fill = delta/sqrt(r1.deltaz.error**2 + r2.deltaz.error**2) * signConventions[r1.postal_address][2]
0577 else:
0578 fill = delta * 10. * signConventions[r1.postal_address][2]
0579 hz.Fill(fill)
0580 if getvalues not in (False, None):
0581 getvalues["z"].append((fill, 10. * sqrt(r1.deltaz.error**2 + r2.deltaz.error**2)))
0582
0583 if r1.deltaphix is not None and r2.deltaphix is not None and r1.deltaphix.error is not None and \
0584 r2.deltaphix.error is not None and (r1.deltaphix.error**2 + r2.deltaphix.error**2) > 0.:
0585 delta = db1.phix - db2.phix
0586 if reportdiff: delta -= r1.deltaphix.value
0587 if normalized:
0588 fill = delta/sqrt(r1.deltaphix.error**2 + r2.deltaphix.error**2)
0589 else:
0590 fill = delta * 1000.
0591 hphix.Fill(fill)
0592 if getvalues not in (False, None):
0593 getvalues["phix"].append((fill, 10. * sqrt(r1.deltaphix.error**2 + r2.deltaphix.error**2)))
0594
0595 if r1.deltaphiy is not None and r2.deltaphiy is not None and r1.deltaphiy.error is not None and \
0596 r2.deltaphiy.error is not None and (r1.deltaphiy.error**2 + r2.deltaphiy.error**2) > 0.:
0597 delta = db1.phiy - db2.phiy
0598 if reportdiff:
0599 delta -= r1.deltaphiy.value
0600 if abs(delta)>0.02/1000: print(r1.postal_address, 1000*delta, "=", 1000*db1.phiy - 1000*db2.phiy, "-", 1000*r1.deltaphiy.value, "... ",1000*db1.phiy , 1000*db2.phiy)
0601 if normalized:
0602 fill = delta/sqrt(r1.deltaphiy.error**2 + r2.deltaphiy.error**2)
0603 else:
0604 fill = delta * 1000.
0605 hphiy.Fill(fill)
0606 if getvalues not in (False, None):
0607 getvalues["phiy"].append((fill, 10. * sqrt(r1.deltaphiy.error**2 + r2.deltaphiy.error**2)))
0608
0609 if r1.deltaphiz is not None and r2.deltaphiz is not None and r1.deltaphiz.error is not None and \
0610 r2.deltaphiz.error is not None and (r1.deltaphiz.error**2 + r2.deltaphiz.error**2) > 0.:
0611 delta = db1.phiz - db2.phiz
0612 if reportdiff: delta -= r1.deltaphiz.value
0613 if normalized:
0614 fill = delta/sqrt(r1.deltaphiz.error**2 + r2.deltaphiz.error**2)
0615 else:
0616 fill = delta * 1000.
0617 hphiz.Fill(fill)
0618 if getvalues not in (False, None):
0619 getvalues["phiz"].append((fill, 10. * sqrt(r1.deltaphiz.error**2 + r2.deltaphiz.error**2)))
0620
0621 if not normalized:
0622 if phi:
0623 hx.SetXTitle("#delta_{#phi} position (mrad)")
0624 else:
0625 hx.SetXTitle("#delta_{x'} (mm)")
0626 hy.SetXTitle("#delta_{y'} (mm)")
0627 hz.SetXTitle("#delta_{z'} (mm)")
0628 hphix.SetXTitle("#delta_{#phi_{x}} (mrad)")
0629 hphiy.SetXTitle("#delta_{#phi_{y}} (mrad)")
0630 hphiz.SetXTitle("#delta_{#phi_{z}} (mrad)")
0631 if reportdiff:
0632 if phi:
0633 hx.SetXTitle("#delta_{#phi}(XML) - #delta_{#phi}(report) position (mrad)")
0634 else:
0635 hx.SetXTitle("#delta_{x'}(XML) - #delta_{x'}(report) (mm)")
0636 hy.SetXTitle("#delta_{y'}(XML) - #delta_{y'}(report) (mm)")
0637 hz.SetXTitle("#delta_{z'}(XML) - #delta_{z'}(report) (mm)")
0638 hphix.SetXTitle("#delta_{#phi_{x}}(XML) - #delta_{#phi_{x}}(report) (mrad)")
0639 hphiy.SetXTitle("#delta_{#phi_{y}}(XML) - #delta_{#phi_{y}}(report) (mrad)")
0640 hphiz.SetXTitle("#delta_{#phi_{z}}(XML) - #delta_{#phi_{z}}(report) (mrad)")
0641 else:
0642 if phi:
0643 hx.SetXTitle("#delta_{#phi}/#sigma_{#phi} position")
0644 else:
0645 hx.SetXTitle("#delta_{x'}/#sigma_{x'}")
0646 hy.SetXTitle("#delta_{y'}/#sigma_{y'}")
0647 hz.SetXTitle("#delta_{z'}/#sigma_{z'}")
0648 hphix.SetXTitle("#delta_{#phi_{x}}/#sigma_{#phi_{x}}")
0649 hphiy.SetXTitle("#delta_{#phi_{y}}/#sigma_{#phi_{y}}")
0650 hphiz.SetXTitle("#delta_{#phi_{z}}/#sigma_{#phi_{z}}")
0651
0652 for h in hx, hy, hz, hphix, hphiy, hphiz:
0653 h.GetXaxis().CenterTitle()
0654 h.GetYaxis().CenterTitle()
0655 h.SetFillColor(color)
0656 h.SetLineStyle(style)
0657
0658 if canvas is not None: c = canvas
0659 else: c = c1
0660
0661 if normalized:
0662 fx = ROOT.TF1("fx", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hx.GetEntries()*2.*window/bins), -window, window)
0663 fy = ROOT.TF1("fy", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hy.GetEntries()*2.*window/bins), -window, window)
0664 fz = ROOT.TF1("fz", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hz.GetEntries()*2.*window/bins), -window, window)
0665 fphix = ROOT.TF1("fphix", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hphix.GetEntries()*2.*window/bins), -window, window)
0666 fphiy = ROOT.TF1("fphiy", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hphiy.GetEntries()*2.*window/bins), -window, window)
0667 fphiz = ROOT.TF1("fphiz", "%g * exp(-x**2/2.)/sqrt(2.*3.1415926)" % (hphiz.GetEntries()*2.*window/bins), -window, window)
0668 for f in fx, fy, fz, fphix, fphiy, fphiz:
0669 f.SetLineWidth(2)
0670 f.SetLineColor(ROOT.kBlue)
0671 for h, f in (hx, fx), (hy, fy), (hz, fz), (hphix, fphix), (hphiy, fphiy), (hphiz, fphiz):
0672 h.SetAxisRange(0, 1.1*max(h.GetMaximum(), f.GetMaximum()), "Y")
0673
0674 c.Clear()
0675 c.Divide(3, 2)
0676 c.GetPad(1).cd(); hx.Draw(); fx.Draw("same")
0677 c.GetPad(2).cd(); hy.Draw(); fy.Draw("same")
0678 c.GetPad(3).cd(); hz.Draw(); fz.Draw("same")
0679 c.GetPad(4).cd(); hphix.Draw(); fphix.Draw("same")
0680 c.GetPad(5).cd(); hphiy.Draw(); fphiy.Draw("same")
0681 c.GetPad(6).cd(); hphiz.Draw(); fphiz.Draw("same")
0682 return hx, hy, hz, hphix, hphiy, hphiz, fx, fy, fz, fphix, fphiy, fphiz
0683 else:
0684 nvar = 6
0685
0686 c.Clear()
0687 if nvar == 4: c.Divide(2, 2)
0688 if nvar == 6: c.Divide(3, 2)
0689 c.GetPad(1).cd(); hx.Draw()
0690 c.GetPad(2).cd(); hy.Draw()
0691 if nvar == 4:
0692 c.GetPad(3).cd(); hphiy.Draw()
0693 c.GetPad(4).cd(); hphiz.Draw()
0694 if nvar == 6:
0695 c.GetPad(3).cd(); hz.Draw()
0696 c.GetPad(4).cd(); hphix.Draw()
0697 c.GetPad(5).cd(); hphiy.Draw()
0698 c.GetPad(6).cd(); hphiz.Draw()
0699
0700 if inlog:
0701 if hx.GetEntries()>0: c.GetPad(1).SetLogy(1)
0702 if hy.GetEntries()>0: c.GetPad(2).SetLogy(1)
0703 if nvar == 4:
0704 if hphiy.GetEntries()>0: c.GetPad(3).SetLogy(1)
0705 if hphiz.GetEntries()>0: c.GetPad(4).SetLogy(1)
0706 if nvar == 6:
0707 if hz.GetEntries()>0: c.GetPad(3).SetLogy(1)
0708 if hphix.GetEntries()>0: c.GetPad(4).SetLogy(1)
0709 if hphiy.GetEntries()>0: c.GetPad(5).SetLogy(1)
0710 if hphiz.GetEntries()>0: c.GetPad(6).SetLogy(1)
0711
0712 return hx, hy, hz, hphix, hphiy, hphiz
0713
0714
0715
0716 def DBMCVersus(quantity, versus, database, reports, window=10., selection=None, color=ROOT.kBlack):
0717 return DBdiffVersus(quantity, versus, database, None, reports, None, window, selection, color)
0718
0719 def DBdiffVersus(quantity, versus, database1, database2, reports1, reports2, windwselection=None, color=ROOT.kBlack):
0720 tdrStyle.SetOptStat("")
0721
0722 domain = []
0723 values = []
0724 errors = []
0725
0726 for r1 in reports1:
0727 if selection is None or (selection.__code__.co_argcount == len(r1.postal_address) and selection(*r1.postal_address)):
0728 if reports2 is None:
0729 r2 = Report(r1.chamberId, r1.postal_address, r1.name)
0730 r2.add_parameters(ValErr(0., 0., 0.), ValErr(0., 0., 0.), ValErr(0., 0., 0.),
0731 ValErr(0., 0., 0.), ValErr(0., 0., 0.), ValErr(0., 0., 0.), 0., 0., 0.)
0732 else:
0733 found = False
0734 for r2 in reports2:
0735 if r1.postal_address == r2.postal_address:
0736 found = True
0737 break
0738 if not found: continue
0739
0740 found = False
0741 if r1.postal_address[0] == "DT":
0742 if r1.postal_address[1:] in database1.dt:
0743 found = True
0744 db1 = database1.dt[r1.postal_address[1:]]
0745 if database2 is None:
0746 db2 = DTAlignable()
0747 db2.x = db2.y = db2.z = db2.phix = db2.phiy = db2.phiz = 0.
0748 db2.xx = db2.xy = db2.xz = db2.yx = db2.yy = db2.yz = db2.zx = db2.zy = db2.zz = 0.
0749 else:
0750 db2 = database2.dt[r1.postal_address[1:]]
0751 else:
0752 if r1.postal_address[1:] in database1.csc:
0753 found = True
0754 db1 = database1.csc[r1.postal_address[1:]]
0755 if database2 is None:
0756 db2 = CSCAlignable()
0757 db2.x = db2.y = db2.z = db2.phix = db2.phiy = db2.phiz = 0.
0758 db2.xx = db2.xy = db2.xz = db2.yx = db2.yy = db2.yz = db2.zx = db2.zy = db2.zz = 0.
0759 else:
0760 db2 = database2.csc[r1.postal_address[1:]]
0761
0762 if found and r1.status == "PASS" and r2.status == "PASS":
0763 okay = False
0764
0765 if quantity == "phi":
0766 if r1.deltax is not None and r2.deltax is not None and r1.deltax.error is not None and \
0767 r2.deltax.error is not None and (r1.deltax.error**2 + r2.deltax.error**2) > 0.:
0768 okay = True
0769 values.append((db1.x - db2.x)/
0770 signConventions[r1.postal_address][3] * 1000. * signConventions[r1.postal_address][0])
0771 errors.append((r1.deltax.error**2 + r2.deltax.error**2)/
0772 signConventions[r1.postal_address][3] * 1000. * signConventions[r1.postal_address][0])
0773
0774 elif quantity == "x":
0775 if r1.deltax is not None and r2.deltax is not None and r1.deltax.error is not None and \
0776 r2.deltax.error is not None and (r1.deltax.error**2 + r2.deltax.error**2) > 0.:
0777 okay = True
0778 values.append((db1.x - db2.x) * 10. * signConventions[r1.postal_address][0])
0779 errors.append((r1.deltax.error**2 + r2.deltax.error**2) * 10. * signConventions[r1.postal_address][0])
0780
0781 elif quantity == "y":
0782 if r1.deltay is not None and r2.deltay is not None and r1.deltay.error is not None and \
0783 r2.deltay.error is not None and (r1.deltay.error**2 + r2.deltay.error**2) > 0.:
0784 okay = True
0785 values.append((db1.y - db2.y) * 10. * signConventions[r1.postal_address][1])
0786 errors.append((r1.deltay.error**2 + r2.deltay.error**2) * 10. * signConventions[r1.postal_address][1])
0787
0788 elif quantity == "z":
0789 if r1.deltaz is not None and r2.deltaz is not None and r1.deltaz.error is not None and \
0790 r2.deltaz.error is not None and (r1.deltaz.error**2 + r2.deltaz.error**2) > 0.:
0791 okay = True
0792 values.append((db1.z - db2.z) * 10. * signConventions[r1.postal_address][2])
0793 errors.append((r1.deltaz.error**2 + r2.deltaz.error**2) * 10. * signConventions[r1.postal_address][2])
0794
0795 elif quantity == "phix":
0796 if r1.deltaphix is not None and r2.deltaphix is not None and r1.deltaphix.error is not None and \
0797 r2.deltaphix.error is not None and (r1.deltaphix.error**2 + r2.deltaphix.error**2) > 0.:
0798 okay = True
0799 values.append((db1.phix - db2.phix) * 1000.)
0800 errors.append((r1.deltaphix.error**2 + r2.deltaphix.error**2) * 1000.)
0801
0802 elif quantity == "phiy":
0803 if r1.deltaphiy is not None and r2.deltaphiy is not None and r1.deltaphiy.error is not None and \
0804 r2.deltaphiy.error is not None and (r1.deltaphiy.error**2 + r2.deltaphiy.error**2) > 0.:
0805 okay = True
0806 values.append((db1.phiy - db2.phiy) * 1000.)
0807 errors.append((r1.deltaphiy.error**2 + r2.deltaphiy.error**2) * 1000.)
0808
0809 elif quantity == "phiz":
0810 if r1.deltaphiz is not None and r2.deltaphiz is not None and r1.deltaphiz.error is not None and \
0811 r2.deltaphiz.error is not None and (r1.deltaphiz.error**2 + r2.deltaphiz.error**2) > 0.:
0812 okay = True
0813 values.append((db1.phiz - db2.phiz) * 1000.)
0814 errors.append((r1.deltaphiz.error**2 + r2.deltaphiz.error**2) * 1000.)
0815
0816 else: raise Exception
0817
0818 if okay:
0819 if versus == "r": domain.append(signConventions[r1.postal_address][3])
0820 elif versus == "phi": domain.append(signConventions[r1.postal_address][4])
0821 elif versus == "z": domain.append(signConventions[r1.postal_address][5])
0822 else: raise Exception
0823
0824 if versus == "r":
0825 bkgndhist = ROOT.TH1F("bkgndhist", "", 100, 0., 800.)
0826 bkgndhist.SetXTitle("R (cm)")
0827 elif versus == "phi":
0828 bkgndhist = ROOT.TH1F("bkgndhist", "", 100, -pi, pi)
0829 bkgndhist.SetXTitle("#phi (rad)")
0830 elif versus == "z":
0831 bkgndhist = ROOT.TH1F("bkgndhist", "", 100, -1100., 1100.)
0832 bkgndhist.SetXTitle("z (cm)")
0833 bkgndhist.GetXaxis().CenterTitle()
0834
0835 bkgndhist.SetAxisRange(-window, window, "Y")
0836 if quantity == "phi": bkgndhist.SetYTitle("#delta_{#phi} position (mrad)")
0837 elif quantity == "x": bkgndhist.SetYTitle("#delta_{x'} (mm)")
0838 elif quantity == "y": bkgndhist.SetYTitle("#delta_{y'} (mm)")
0839 elif quantity == "z": bkgndhist.SetYTitle("#delta_{z'} (mm)")
0840 elif quantity == "phix": bkgndhist.SetYTitle("#delta_{#phi_{x}} (mrad)")
0841 elif quantity == "phiy": bkgndhist.SetYTitle("#delta_{#phi_{y}} (mrad)")
0842 elif quantity == "phiz": bkgndhist.SetYTitle("#delta_{#phi_{z}} (mrad)")
0843 else: raise Exception
0844 bkgndhist.GetYaxis().CenterTitle()
0845
0846 if len(domain) == 0:
0847 tgraph = ROOT.TGraphErrors(0)
0848 else:
0849 tgraph = ROOT.TGraphErrors(len(domain), array.array("d", domain), array.array("d", values),
0850 array.array("d", [0.]*len(domain)), array.array("d", errors))
0851 tgraph.SetMarkerColor(color)
0852 tgraph.SetLineColor(color)
0853
0854 bkgndhist.Draw()
0855 if tgraph.GetN() > 0: tgraph.Draw("p")
0856 return bkgndhist, tgraph, domain, values, errors
0857
0858
0859
0860 def idToPostalAddress(id):
0861
0862 if len(id)!=9: return None
0863 if id[0:2]=="MB":
0864
0865 pa = ("DT", int(id[2:4]), int(id[5]), int(id[7:9]))
0866
0867 if pa[1]<-2 or pa[1]>2: return None
0868 if pa[2]>4: return None
0869 if pa[3]<1 or pa[3]>14 or (pa[3]==4 and pa[3]>12): return None
0870 return pa
0871 elif id[0:2]=="ME":
0872 if id[2]=="+": ec=1
0873 elif id[2]=="-": ec=2
0874 else: return None
0875 pa = ("CSC", ec, int(id[3]), int(id[5]), int(id[7:9]))
0876 if pa[2]<1 or pa[2]>4: return None
0877 if pa[3]<1 or pa[3]>4 or (pa[2]>1 and pa[3]>2): return None
0878 if pa[4]<1 or pa[4]>36 or (pa[2]>1 and pa[3]==1 and pa[4]>18): return None
0879 return pa
0880 else: return None
0881
0882
0883 def postalAddressToId(postal_address):
0884 if postal_address[0] == "DT":
0885 wheel, station, sector = postal_address[1:]
0886 w = "%+d"%wheel
0887 if w=="+0": w = "-0"
0888 return "MB%s/%d/%02d" % (w, station, sector)
0889 elif postal_address[0] == "CSC":
0890 endcap, station, ring, chamber = postal_address[1:]
0891 if endcap != 1: station = -1 * abs(station)
0892 return "ME%+d/%d/%02d" % (station, ring, chamber)
0893
0894
0895 def nameToId(name):
0896 if name[0:2] == "MB":
0897 wh = name[4]
0898 if wh == "A": w = "-2"
0899 elif wh == "B": w = "-1"
0900 elif wh == "C": w = "-0"
0901 elif wh == "D": w = "+1"
0902 elif wh == "E": w = "+2"
0903 else: return ""
0904 station = name[7]
0905 sector = name[11:13]
0906 return "MB%s/%s/%s" % (w, station, sector)
0907 elif name[0:2] == "ME":
0908 if name[2]=="p": endcap = "+"
0909 elif name[2]=="m": endcap = "-"
0910 else: return ""
0911 station = name[3]
0912 ring = name[4]
0913 chamber = name[6:8]
0914 return "ME%s%s/%s/%s" % (endcap, station, ring, chamber)
0915 return None
0916
0917
0918 def availableCellsDT(reports):
0919 dts = []
0920
0921 for iwheel in DT_TYPES:
0922 if iwheel[1]=="ALL": continue
0923 dts.append(iwheel[0])
0924
0925 for wheel in DT_TYPES:
0926 if wheel[1]=="ALL": continue
0927 for station in wheel[2]:
0928 dts.append(wheel[0]+'/'+station[1])
0929
0930 for wheel in DT_TYPES:
0931 if wheel[1]!="ALL": continue
0932 for station in wheel[2]:
0933 for sector in range(1,station[2]+1):
0934 ssector = "%02d" % sector
0935 dts.append(wheel[0]+'/'+station[1]+'/'+ssector)
0936
0937 for wheel in DT_TYPES:
0938 if wheel[1]!="ALL": continue
0939 for station in wheel[2]:
0940 dts.append(wheel[0]+'/'+station[1])
0941
0942 for wheel in DT_TYPES:
0943 if wheel[1]=="ALL": continue
0944 for station in wheel[2]:
0945 for sector in range(1,station[2]+1):
0946 ssector = "%02d" % sector
0947 label = "MBwh%sst%ssec%s" % (wheelLetter(int(wheel[1])),station[1],ssector)
0948 if len(reports)==0:
0949
0950
0951 continue
0952 found = False
0953 for r in reports:
0954 if r.name == label:
0955 found = True
0956 break
0957 if not found: continue
0958 if r.status == "TOOFEWHITS" and r.posNum+r.negNum==0: continue
0959 if r.status == "NOFIT": continue
0960 dts.append(wheel[0]+'/'+station[1]+'/'+ssector)
0961 return dts
0962
0963
0964 def availableCellsCSC(reports):
0965 cscs = []
0966
0967 for endcap in CSC_TYPES:
0968 for station in endcap[2]:
0969 cscs.append("%s%s" % (endcap[0], station[1]))
0970
0971 for endcap in CSC_TYPES:
0972 for station in endcap[2]:
0973 for ring in station[2]:
0974 if ring[1]=="ALL": continue
0975
0976 cscs.append("%s%s/%s" % (endcap[0], station[1],ring[1]))
0977
0978 for endcap in CSC_TYPES:
0979 for station in endcap[2]:
0980 for ring in station[2]:
0981 if ring[1]!="ALL": continue
0982 for chamber in range(1,ring[2]+1):
0983
0984 cscs.append("%s%s/ALL/%02d" % (endcap[0], station[1],chamber))
0985
0986 for endcap in CSC_TYPES:
0987 for station in endcap[2]:
0988 for ring in station[2]:
0989 if ring[1]!="ALL": continue
0990
0991 cscs.append("%s%s/ALL" % (endcap[0], station[1]))
0992
0993 for endcap in CSC_TYPES:
0994 for station in endcap[2]:
0995 for ring in station[2]:
0996 if ring[1]=="ALL": continue
0997 for chamber in range(1,ring[2]+1):
0998
0999 if station[1]=="4" and ring[1]=="2":
1000 if endcap[1]=="m": continue
1001 if chamber<9 or chamber>13: continue
1002 schamber = "%02d" % chamber
1003 label = "ME%s%s%s_%s" % (endcap[1], station[1], ring[1], schamber)
1004 if len(reports)==0:
1005
1006
1007 continue
1008 found = False
1009 for r in reports:
1010 if r.name == label:
1011 found = True
1012 break
1013 if not found: continue
1014 if r.status == "TOOFEWHITS" and r.posNum+r.negNum==0: continue
1015 if r.status == "NOFIT": continue
1016 cscs.append(endcap[0]+station[1]+'/'+ring[1]+'/'+schamber)
1017 return cscs
1018
1019
1020 DQM_SEVERITY = [
1021 {"idx":0, "name": "NONE", "color": "lightgreen", "hex":"#90EE90"},
1022 {"idx":1, "name": "LOWSTAT05", "color": "lightgreen", "hex":"#96D953"},
1023 {"idx":2, "name": "LOWSTAT075", "color": "lightgreen", "hex":"#94E26F"},
1024 {"idx":3, "name": "LOWSTAT1", "color": "yellowgreen", "hex":"#9ACD32"},
1025 {"idx":4, "name": "LOWSTAT", "color": "yellow", "hex":"#FFFF00"},
1026 {"idx":5, "name": "TOLERABLE", "color": "lightpink", "hex":"#FFB6C1"},
1027 {"idx":6, "name": "SEVERE", "color": "orange", "hex":"#FFA500"},
1028 {"idx":7, "name": "CRITICAL", "color": "red", "hex":"#FF0000"}];
1029
1030
1031 def addToTestResults(c,res):
1032 if len(res)>0:
1033 if c in TEST_RESULTS: TEST_RESULTS[c].extend(res)
1034 else: TEST_RESULTS[c] = res
1035
1036
1037 def testEntry(testID,scope,descr,severity):
1038 s = 0
1039 for sev in DQM_SEVERITY:
1040 if sev["name"]==severity: s = sev["idx"]
1041 return {"testID":testID,"scope":scope,"descr":descr,"severity":s}
1042
1043
1044 def testZeroWithin5Sigma(x):
1045 if abs(x[1])==0.: return 0.
1046 pull = abs(x[0])/abs(x[1])
1047 if pull <= 5: return 0.
1048 else: return pull
1049
1050
1051 def testDeltaWithin5Sigma(x,sx):
1052 n = len(x)
1053 res = []
1054 dr = []
1055
1056
1057 for i in range(1,n+1):
1058 x1 = x[i-1]
1059 sx1 = sx[i-1]
1060 x2 = x[0]
1061 sx2 = sx[0]
1062 if i<n:
1063 x2 = x[i]
1064 sx2 = sx[i]
1065 sig1 = sqrt( (sx1[0]-sx1[1])**2 + x1[1]**2 )
1066 sig2 = sqrt( (sx2[0]-sx2[1])**2 + x2[1]**2 )
1067 df = abs(x1[0]-x2[0]) - 3*( sig1 + sig2 )
1068
1069
1070 dr.append(df)
1071 if df > 0: res.append(i)
1072
1073
1074 return res
1075
1076
1077 def doTestsForReport(cells,reports):
1078 for c in cells:
1079
1080 postal_address = idToPostalAddress(c)
1081 if not postal_address: continue
1082
1083
1084 found = False
1085 for r in reports:
1086 if r.postal_address == postal_address:
1087 found = True
1088 break
1089 if not found: continue
1090
1091
1092 res = []
1093 scope = postal_address[0]
1094
1095
1096 if r.status == "FAIL" or r.status == "MINUITFAIL":
1097 res.append(testEntry("FAILURE",scope,r.status+" failure","CRITICAL"))
1098 addToTestResults(c,res)
1099 continue
1100
1101
1102 nseg = r.posNum + r.negNum
1103 if r.status == "TOOFEWHITS" and nseg>0:
1104 res.append(testEntry("LOW_STAT",scope,"low stat, #segments=%d"%nseg,"LOWSTAT"))
1105 addToTestResults(c,res)
1106 continue
1107
1108
1109 sdx = 10.*r.deltax.error
1110 if sdx>0.5:
1111 if sdx<0.75: res.append(testEntry("LOW_STAT_DDX05",scope,"low stat, delta(dx)=%f #segments=%d" % (sdx,nseg),"LOWSTAT05"))
1112 elif sdx<1.: res.append(testEntry("LOW_STAT_DDX075",scope,"low stat, delta(dx)=%f #segments=%d" % (sdx,nseg),"LOWSTAT075"))
1113 else: res.append(testEntry("LOW_STAT_DDX1",scope,"low stat, delta(dx)=%f #segments=%d" % (sdx,nseg),"LOWSTAT1"))
1114
1115
1116 if r.redchi2 > 20.:
1117 res.append(testEntry("BIG_CHI2",scope,"chi2=%f>20" % r.redchi2,"TOLERABLE"))
1118
1119
1120 medx, meddx = 10.*r.median_x, 1000.*r.median_dxdz
1121
1122 if medx>2: res.append(testEntry("BIG_MED_X",scope,"median dx=%f>2 mm"%medx,"SEVERE"))
1123
1124 if meddx>2: res.append(testEntry("BIG_MED_DXDZ",scope,"median d(dx/dz)=%f>2 mrad"%meddx,"SEVERE"))
1125
1126
1127
1128 isDTst4 = False
1129 if postal_address[0] == "DT" and postal_address[2]==4: isDTst4 = True
1130 dx, dy, dpy, dpz = 10.*r.deltax.value, 0., 1000.*r.deltaphiy.value, 1000.*r.deltaphiz.value
1131 if not isDTst4: dy = 10.*r.deltay.value
1132 if dx>0.2: res.append(testEntry("BIG_LAST_ITR_DX",scope,"dx=%f>0.2 mm"%dx,"CRITICAL"))
1133 if dy>0.2: res.append(testEntry("BIG_LAST_ITR_DY",scope,"dy=%f>0.2 mm"%dy,"CRITICAL"))
1134 if dpy>0.2: res.append(testEntry("BIG_LAST_ITR_DPHIY",scope,"dphiy=%f>0.2 mrad"%dpy,"CRITICAL"))
1135 if dpz>0.2: res.append(testEntry("BIG_LAST_ITR_DPHIZ",scope,"dphiz=%f>0.2 mrad"%dpz,"CRITICAL"))
1136
1137
1138 addToTestResults(c,res)
1139
1140
1141 def doTestsForMapPlots(cells):
1142 for c in cells:
1143 res = []
1144
1145 scope = "zzz"
1146 if c[0:2]=="MB": scope = "DT"
1147 if c[0:2]=="ME": scope = "CSC"
1148 if scope == "zzz":
1149 print("strange cell ID: ", c)
1150 return None
1151
1152 if c in MAP_RESULTS_FITSIN:
1153 t = MAP_RESULTS_FITSIN[c]
1154 t_a = testZeroWithin5Sigma(t['a'])
1155 t_s = testZeroWithin5Sigma(t['sin'])
1156 t_c = testZeroWithin5Sigma(t['cos'])
1157 if t_a+t_s+t_c >0:
1158 descr = "map fitsin 5 sigma away from 0; pulls : a=%.2f sin=%.2f, cos=%.2f" % (t_a,t_s,t_c)
1159 res.append(testEntry("MAP_FITSIN",scope,descr,"SEVERE"))
1160
1161 if c in MAP_RESULTS_SAWTOOTH:
1162 t = MAP_RESULTS_SAWTOOTH[c]
1163
1164 t_a = testDeltaWithin5Sigma(t['a'],t['da'])
1165 if len(t_a)>0:
1166 descr = "map discontinuities: %s" % ",".join(map(str,t_a))
1167 res.append(testEntry("MAP_DISCONTIN",scope,descr,"SEVERE"))
1168
1169 t_b = map(testZeroWithin5Sigma, t['b'])
1170 t_bi = []
1171 for i in range(0,len(t_b)):
1172 if t_b[i]>0: t_bi.append(i+1)
1173 if len(t_bi)>0:
1174 descr = "map sawteeth: %s" % ",".join(map(str,t_bi))
1175 res.append(testEntry("MAP_SAWTEETH",scope,descr,"TOLERABLE"))
1176
1177 addToTestResults(c,res)
1178
1179
1180 def saveTestResultsMap(run_name):
1181 if len(MAP_RESULTS_SAWTOOTH)+len(MAP_RESULTS_FITSIN)==0: return None
1182 ff = open("tmp_test_results_map__%s.pkl" % run_name, "wb")
1183 pickle.dump(MAP_RESULTS_SAWTOOTH, ff)
1184 pickle.dump(MAP_RESULTS_FITSIN, ff)
1185 ff.close()
1186
1187
1188 def loadTestResultsMap(run_name):
1189 print("tmp_test_results_map__%s.pkl" % run_name, os.access("tmp_test_results_map__%s.pkl" % run_name,os.F_OK))
1190 if not os.access("tmp_test_results_map__%s.pkl" % run_name,os.F_OK): return None
1191 global MAP_RESULTS_FITSIN, MAP_RESULTS_SAWTOOTH
1192 ff = open("tmp_test_results_map__%s.pkl" % run_name, "rb")
1193 MAP_RESULTS_SAWTOOTH = pickle.load(ff)
1194 MAP_RESULTS_FITSIN = pickle.load(ff)
1195 ff.close()
1196
1197
1198 return True
1199
1200 def writeDQMReport(fname_dqm, run_name):
1201 tests = []
1202 for c in TEST_RESULTS:
1203 tests.append({"objID":c, "name":c, "list":TEST_RESULTS[c]})
1204 lt = time.localtime(time.time())
1205 lts = "%04d-%02d-%02d %02d:%02d:%02d %s" % (lt[0], lt[1], lt[2], lt[3], lt[4], lt[5], time.tzname[1])
1206 dqm_report = {"run":run_name, "genDate": lts, "report":tests}
1207 ff = open(fname_dqm,mode="w")
1208 print("var DQM_REPORT = ", file=ff)
1209 json.dump(dqm_report,ff)
1210
1211 ff.close()
1212
1213
1214 def doTests(reports, pic_ids, fname_base, fname_dqm, run_name):
1215
1216 dts = []
1217 cscs = []
1218 if len(reports)>0:
1219 dts = availableCellsDT(reports)
1220 cscs = availableCellsCSC(reports)
1221 elif len(pic_ids)>0:
1222 dts = [id for id in pic_ids if 'MB' in id]
1223 cscs = [id for id in pic_ids if 'ME' in id]
1224 mulist = ['Run: '+run_name,['ALL',['MU']],['DT',dts],['CSC',cscs]]
1225 ff = open(fname_base,mode="w")
1226 print("var MU_LIST = [", file=ff)
1227 json.dump(mulist,ff)
1228 print("];", file=ff)
1229 ff.close()
1230
1231 doTestsForReport(dts,reports)
1232 doTestsForReport(cscs,reports)
1233
1234 loadTestResultsMap(run_name)
1235 doTestsForMapPlots(dts)
1236 doTestsForMapPlots(cscs)
1237
1238 writeDQMReport(fname_dqm, run_name)
1239
1240
1241
1242
1243 def plotmedians(reports1, reports2, selection=None, binsx=100, windowx=5., ceilingx=None, binsy=100, windowy=5.,
1244 ceilingy=None, binsdxdz=100, windowdxdz=5., ceilingdxdz=None, binsdydz=100, windowdydz=5., ceilingdydz=None,
1245 r1text=" before", r2text=" after", which="median"):
1246 tdrStyle.SetOptStat("emrou")
1247 tdrStyle.SetStatW(0.40)
1248 tdrStyle.SetStatFontSize(0.05)
1249
1250 global hmediandxdz_after, hmediandxdz_before, hmediandxdz_beforecopy, \
1251 hmediandydz_after, hmediandydz_before, hmediandydz_beforecopy, \
1252 hmedianx_after, hmedianx_before, hmedianx_beforecopy, \
1253 hmediany_after, hmediany_before, hmediany_beforecopy, tlegend
1254
1255 hmedianx_before = ROOT.TH1F("hmedianx_before", "", binsx, -windowx, windowx)
1256 hmediany_before = ROOT.TH1F("hmediany_before", "", binsy, -windowy, windowy)
1257 hmediandxdz_before = ROOT.TH1F("hmediandxdz_before", "", binsdxdz, -windowdxdz, windowdxdz)
1258 hmediandydz_before = ROOT.TH1F("hmediandydz_before", "", binsdydz, -windowdydz, windowdydz)
1259 hmedianx_after = ROOT.TH1F("hmedianx_after", "", binsx, -windowx, windowx)
1260 hmediany_after = ROOT.TH1F("hmediany_after", "", binsy, -windowy, windowy)
1261 hmediandxdz_after = ROOT.TH1F("hmediandxdz_after", "", binsdxdz, -windowdxdz, windowdxdz)
1262 hmediandydz_after = ROOT.TH1F("hmediandydz_after", "", binsdydz, -windowdydz, windowdydz)
1263
1264 if which == "median":
1265 whichx = whichy = whichdxdz = whichdydz = "median"
1266 elif which == "bigmean":
1267 whichx = "mean30"
1268 whichy = "mean30"
1269 whichdxdz = "mean20"
1270 whichdydz = "mean50"
1271 elif which == "mean":
1272 whichx = "mean15"
1273 whichy = "mean15"
1274 whichdxdz = "mean10"
1275 whichdydz = "mean25"
1276 elif which == "bigwmean":
1277 whichx = "wmean30"
1278 whichy = "wmean30"
1279 whichdxdz = "wmean20"
1280 whichdydz = "wmean50"
1281 elif which == "wmean":
1282 whichx = "wmean15"
1283 whichy = "wmean15"
1284 whichdxdz = "wmean10"
1285 whichdydz = "wmean25"
1286 elif which == "bigstdev":
1287 whichx = "stdev30"
1288 whichy = "stdev30"
1289 whichdxdz = "stdev20"
1290 whichdydz = "stdev50"
1291 elif which == "stdev":
1292 whichx = "stdev15"
1293 whichy = "stdev15"
1294 whichdxdz = "stdev10"
1295 whichdydz = "stdev25"
1296 else:
1297 raise Exception(which + " not recognized")
1298
1299 for r1 in reports1:
1300 if selection is None or (selection.__code__.co_argcount == len(r1.postal_address) and selection(*r1.postal_address)):
1301 found = False
1302 for r2 in reports2:
1303 if r1.postal_address == r2.postal_address:
1304 found = True
1305 break
1306 if not found: continue
1307
1308
1309 if r1.postal_address[0]=='CSC':
1310 if r1.postal_address[2]==1 and r1.postal_address[3]==4: continue
1311
1312 if r1.status == "PASS" and r2.status == "PASS":
1313 hmedianx_before.Fill(10.*eval("r1.%s_x" % whichx))
1314 hmediandxdz_before.Fill(1000.*eval("r1.%s_dxdz" % whichdxdz))
1315 hmedianx_after.Fill(10.*eval("r2.%s_x" % whichx))
1316 hmediandxdz_after.Fill(1000.*eval("r2.%s_dxdz" % whichdxdz))
1317
1318 if r1.median_y is not None:
1319 hmediany_before.Fill(10.*eval("r1.%s_y" % whichy))
1320 hmediandydz_before.Fill(1000.*eval("r1.%s_dydz" % whichdydz))
1321 hmediany_after.Fill(10.*eval("r2.%s_y" % whichy))
1322 hmediandydz_after.Fill(1000.*eval("r2.%s_dydz" % whichdydz))
1323
1324 hmedianx_beforecopy = hmedianx_before.Clone()
1325 hmediany_beforecopy = hmediany_before.Clone()
1326 hmediandxdz_beforecopy = hmediandxdz_before.Clone()
1327 hmediandydz_beforecopy = hmediandydz_before.Clone()
1328 hmedianx_beforecopy.SetLineStyle(2)
1329 hmediany_beforecopy.SetLineStyle(2)
1330 hmediandxdz_beforecopy.SetLineStyle(2)
1331 hmediandydz_beforecopy.SetLineStyle(2)
1332
1333 hmedianx_before.SetFillColor(ROOT.kMagenta+2)
1334 hmediany_before.SetFillColor(ROOT.kMagenta+2)
1335 hmediandxdz_before.SetFillColor(ROOT.kMagenta+2)
1336 hmediandydz_before.SetFillColor(ROOT.kMagenta+2)
1337 hmedianx_after.SetFillColor(ROOT.kYellow)
1338 hmediany_after.SetFillColor(ROOT.kYellow)
1339 hmediandxdz_after.SetFillColor(ROOT.kYellow)
1340 hmediandydz_after.SetFillColor(ROOT.kYellow)
1341
1342 hmedianx_after.SetXTitle("median(#Deltax) (mm)")
1343 hmediany_after.SetXTitle("median(#Deltay) (mm)")
1344 hmediandxdz_after.SetXTitle("median(#Deltadx/dz) (mrad)")
1345 hmediandydz_after.SetXTitle("median(#Deltadydz) (mrad)")
1346 hmedianx_after.GetXaxis().CenterTitle()
1347 hmediany_after.GetXaxis().CenterTitle()
1348 hmediandxdz_after.GetXaxis().CenterTitle()
1349 hmediandydz_after.GetXaxis().CenterTitle()
1350
1351 if ceilingx is not None: hmedianx_after.SetAxisRange(0., ceilingx, "Y")
1352 if ceilingy is not None: hmediany_after.SetAxisRange(0., ceilingy, "Y")
1353 if ceilingdxdz is not None: hmediandxdz_after.SetAxisRange(0., ceilingdxdz, "Y")
1354 if ceilingdydz is not None: hmediandydz_after.SetAxisRange(0., ceilingdydz, "Y")
1355
1356 c1.Clear()
1357 c1.Divide(2, 2)
1358
1359 c1.GetPad(1).cd()
1360 hmedianx_after.Draw()
1361 hmedianx_before.Draw("same")
1362 hmedianx_after.Draw("same")
1363 hmedianx_beforecopy.Draw("same")
1364 hmedianx_after.Draw("axissame")
1365
1366 tlegend = ROOT.TLegend(0.17, 0.75-0.05, 0.45+0.05, 0.9)
1367 tlegend.SetFillColor(ROOT.kWhite)
1368 tlegend.SetBorderSize(0)
1369 tlegend.AddEntry(hmedianx_after, r2text, "f")
1370 tlegend.AddEntry(hmedianx_before, r1text, "f")
1371 tlegend.Draw()
1372
1373 c1.GetPad(2).cd()
1374 hmediandxdz_after.Draw()
1375 hmediandxdz_before.Draw("same")
1376 hmediandxdz_after.Draw("same")
1377 hmediandxdz_beforecopy.Draw("same")
1378 hmediandxdz_after.Draw("axissame")
1379
1380 c1.GetPad(3).cd()
1381 hmediany_after.Draw()
1382 hmediany_before.Draw("same")
1383 hmediany_after.Draw("same")
1384 hmediany_beforecopy.Draw("same")
1385 hmediany_after.Draw("axissame")
1386
1387 c1.GetPad(4).cd()
1388 hmediandydz_after.Draw()
1389 hmediandydz_before.Draw("same")
1390 hmediandydz_after.Draw("same")
1391 hmediandydz_beforecopy.Draw("same")
1392 hmediandydz_after.Draw("axissame")
1393
1394 return hmediandxdz_after, hmediandxdz_before, hmediandxdz_beforecopy, \
1395 hmediandydz_after, hmediandydz_before, hmediandydz_beforecopy, \
1396 hmedianx_after, hmedianx_before, hmedianx_beforecopy, \
1397 hmediany_after, hmediany_before, hmediany_beforecopy, tlegend
1398
1399
1400
1401
1402 def createPeaksProfile(the2d, rebin=1):
1403 htmp = ROOT.gROOT.FindObject(the2d.GetName()+"_peaks")
1404 if htmp != None: htmp.Delete()
1405
1406 hpeaks = the2d.ProjectionX(the2d.GetName()+"_peaks")
1407 hpeaks.Reset()
1408 hpeaks.Rebin(rebin)
1409 bad_fit_bins = []
1410 for i in range(0, int(the2d.GetNbinsX()), rebin):
1411 tmp = the2d.ProjectionY("tmp", i+1, i + rebin)
1412 nn = tmp.GetEntries()
1413
1414 drange = tmp.GetRMS()
1415 drange = 2.*drange
1416 fgaus = ROOT.TF1("fgaus","gaus", tmp.GetMean() - drange, tmp.GetMean() + drange)
1417 fgaus.SetParameter(0,nn)
1418 fgaus.SetParameter(1,tmp.GetMean())
1419 fgaus.SetParameter(2,tmp.GetRMS())
1420
1421
1422 fitOk = False
1423 if nn > 10:
1424 fr = tmp.Fit("fgaus","RNSQ")
1425
1426 hpeaks.SetBinContent(i/rebin+1, fgaus.GetParameter(1))
1427 hpeaks.SetBinError(i/rebin+1, fgaus.GetParError(1))
1428 if fr.Status()==0 and fr.CovMatrixStatus()==3 : fitOk = True
1429 if not fitOk:
1430 bad_fit_bins.append(i/rebin+1)
1431 if nn > 1. and tmp.GetRMS() > 0:
1432 hpeaks.SetBinContent(i/rebin+1, tmp.GetMean())
1433 hpeaks.SetBinError(i/rebin+1, ROOT.TMath.StudentQuantile(0.841345,nn) * tmp.GetRMS() / sqrt(nn))
1434 else:
1435 hpeaks.SetBinContent(i/rebin+1, 0.)
1436 hpeaks.SetBinError(i/rebin+1, 0.)
1437 if len(bad_fit_bins): print("createPeaksProfile bad fit bins: ", bad_fit_bins)
1438 return hpeaks
1439
1440
1441
1442
1443 def mapplot(tfiles, name, param, mode="from2d", window=10., abscissa=None, title="",
1444 widebins=False, fitsine=False, fitline=False, reset_palette=False, fitsawteeth=False, fitpeaks=False, peaksbins=1, fixfitpars={}, **args):
1445 tdrStyle.SetOptTitle(1)
1446 tdrStyle.SetTitleBorderSize(0)
1447 tdrStyle.SetOptStat(0)
1448
1449 tdrStyle.SetOptFit(0)
1450 tdrStyle.SetTitleFontSize(0.05)
1451 tdrStyle.SetPadRightMargin(0.1)
1452
1453 c1.Clear()
1454 c1.ResetAttPad()
1455
1456 if reset_palette: set_palette("blues")
1457 global hist, hist2d, hist2dweight, tline1, tline2, tline3
1458
1459 if fitsine or fitsawteeth:
1460 id = mapNameToId(name)
1461 if not id:
1462 print("bad id for ", name)
1463 raise Exception
1464
1465 hdir = "AlignmentMonitorMuonSystemMap1D/iter1/"
1466 hpref= "%s_%s" % (name, param)
1467 hhh = hdir+hpref
1468
1469 combine_all = False
1470 if "ALL" in name and ("CSCvsr" in name or "DTvsz" in name): combine_all = True
1471
1472 add1d = ("vsphi" in name) and (param == "x")
1473
1474 if "h2d" in args:
1475 hist2d = args["h2d"].Clone(hpref+"_2d_")
1476 if "CSC" in name and add1d: hist1d = args["h1d"].Clone(hpref+"_1d_")
1477
1478 elif combine_all:
1479 nch = 12
1480 if "DT" in name and name[6:9]=='st4': nch = 14
1481 if "CSC" in name: nch = 36
1482 chambers = ["%02d" % ch for ch in range (2,nch+1)]
1483
1484 ch_hhh = hhh.replace('ALL','01')
1485 ch_hpref = hpref.replace('ALL','01')
1486 hist2d = tfiles[0].Get(ch_hhh+"_2d").Clone(ch_hpref+"_2d_")
1487 if "CSC" in name and add1d: hist1d = tfiles[0].Get(ch_hhh+"_1d").Clone(ch_hpref+"_1d_")
1488
1489 for ch in chambers:
1490 ch_hhh = hhh.replace('ALL',ch)
1491 ch_hpref = hpref.replace('ALL',ch)
1492 hist2d.Add(tfiles[0].Get(ch_hhh+"_2d"))
1493 if "CSC" in name and add1d: hist1d.Add(tfiles[0].Get(ch_hhh+"_1d"))
1494 for tfile in tfiles[1:]:
1495 hist2d.Add(tfile.Get(ch_hhh+"_2d"))
1496 if "CSC" in name and add1d: hist1d.Add(tfile.Get(ch_hhh+"_1d"))
1497
1498 else:
1499 hist2d = tfiles[0].Get(hhh+"_2d").Clone(hpref+"_2d_")
1500 if "CSC" in name and add1d: hist1d = tfiles[0].Get(hhh+"_1d").Clone(hpref+"_1d_")
1501 for tfile in tfiles[1:]:
1502 hist2d.Add(tfile.Get(hhh+"_2d"))
1503 if "CSC" in name and add1d: hist1d.Add(tfile.Get(hhh+"_1d"))
1504
1505
1506 if mode == "from2d":
1507 the2d = hist2d
1508
1509 hist = the2d.ProjectionX()
1510 hist.Reset()
1511
1512 skip = 1
1513 if widebins:
1514 hist.Rebin(10)
1515 skip = 10
1516
1517
1518 for i in range(0, int(the2d.GetNbinsX()), skip):
1519 tmp = the2d.ProjectionY("tmp", i+1, i + skip)
1520 if tmp.GetEntries() > 1:
1521
1522 hist.SetBinContent(i/skip+1, tmp.GetMean())
1523 hist.SetBinError(i/skip+1, ROOT.TMath.StudentQuantile(0.841345,tmp.GetEntries()) * tmp.GetRMS() / sqrt(tmp.GetEntries()))
1524
1525
1526 else:
1527
1528
1529 hist.SetBinContent(i/skip+1, 0.)
1530 hist.SetBinError(i/skip+1, 0.)
1531
1532 hpeaks = createPeaksProfile(the2d, peaksbins)
1533
1534 else:
1535 raise Exception
1536
1537 hist.SetAxisRange(-window, window, "Y")
1538 if abscissa is not None: hist.SetAxisRange(abscissa[0], abscissa[1], "X")
1539 hist.SetMarkerStyle(20)
1540 hist.SetMarkerSize(0.75)
1541 hist.GetXaxis().CenterTitle()
1542 hist.GetYaxis().CenterTitle()
1543 hist.GetYaxis().SetTitleOffset(0.75)
1544 hist.GetXaxis().SetTitleSize(0.05)
1545 hist.GetYaxis().SetTitleSize(0.05)
1546 hist.SetTitle(title)
1547 if "vsphi" in name: hist.SetXTitle("Global #phi position (rad)")
1548 elif "vsz" in name: hist.SetXTitle("Global z position (cm)")
1549 elif "vsr" in name: hist.SetXTitle("Global R position (cm)")
1550 if "DT" in name:
1551 if param == "x": hist.SetYTitle("x' residual (mm)")
1552 if param == "dxdz": hist.SetYTitle("dx'/dz residual (mrad)")
1553 if param == "y": hist.SetYTitle("y' residual (mm)")
1554 if param == "dydz": hist.SetYTitle("dy'/dz residual (mrad)")
1555 if "CSC" in name:
1556 if param == "x": hist.SetYTitle("r#phi residual (mm)")
1557 if param == "dxdz": hist.SetYTitle("d(r#phi)/dz residual (mrad)")
1558 hist.SetMarkerColor(ROOT.kBlack)
1559 hist.SetLineColor(ROOT.kBlack)
1560 hist.Draw()
1561 hist2d.Draw("colzsame")
1562 if widebins: hist.Draw("samee1")
1563 else: hist.Draw("same")
1564
1565 hpeaks.SetMarkerStyle(20)
1566 hpeaks.SetMarkerSize(0.9)
1567 hpeaks.SetMarkerColor(ROOT.kRed)
1568 hpeaks.SetLineColor(ROOT.kRed)
1569 hpeaks.SetLineWidth(2)
1570
1571 hpeaks.Draw("same")
1572
1573 if fitsine and "vsphi" in name:
1574 global fitsine_const, fitsine_sin, fitsine_cos, fitsine_chi2, fitsine_ndf
1575 if 'CSC' in name:
1576 f = ROOT.TF1("f", "[0] + [1]*sin(x) + [2]*cos(x)", -pi/180.*5., pi*(2.-5./180.))
1577 else:
1578 f = ROOT.TF1("f", "[0] + [1]*sin(x) + [2]*cos(x)", -pi, pi)
1579 f.SetLineColor(ROOT.kRed)
1580 f.SetLineWidth(2)
1581 if len(fixfitpars)>0:
1582 for fpar in fixfitpars.keys():
1583 f.FixParameter(fpar, fixfitpars[fpar])
1584
1585 if fitpeaks: hpeaks.Fit(f,"NQ")
1586 else: hist.Fit(f,"NEQ")
1587 if len(fixfitpars)>0:
1588 for fpar in fixfitpars.keys():
1589 f.ReleaseParameter(fpar)
1590 fitsine_const = f.GetParameter(0), f.GetParError(0)
1591 fitsine_sin = f.GetParameter(1), f.GetParError(1)
1592 fitsine_cos = f.GetParameter(2), f.GetParError(2)
1593 fitsine_chi2 = f.GetChisquare()
1594 fitsine_ndf = f.GetNDF()
1595 global MAP_RESULTS_FITSIN
1596
1597 MAP_RESULTS_FITSIN[id] = {'a':fitsine_const, 'phi':fitsine_const, 'sin': fitsine_sin, 'cos': fitsine_cos, 'chi2': fitsine_chi2, 'ndf': fitsine_ndf}
1598 f.Draw("same")
1599 global fitsine_ttext, fitsine_etext
1600 text_xposition = -1.
1601 if 'CSC' in name: text_xposition = 2.
1602 fitsine_ttext = ROOT.TLatex(text_xposition, 0.8*window,
1603 "%+.3f %+.3f sin#phi %+.3f cos#phi" % (fitsine_const[0], fitsine_sin[0], fitsine_cos[0]))
1604 fitsine_ttext.SetTextColor(ROOT.kRed)
1605 fitsine_ttext.SetTextSize(0.05)
1606 fitsine_ttext.Draw()
1607 fitsine_etext = ROOT.TLatex(text_xposition, 0.70*window,
1608 " #pm%.3f #pm%.3f #pm%.3f" % (fitsine_const[1], fitsine_sin[1], fitsine_cos[1]))
1609 fitsine_etext.SetTextColor(ROOT.kRed)
1610 fitsine_etext.SetTextSize(0.045)
1611 fitsine_etext.Draw()
1612
1613
1614 if 'CSC' in name and add1d:
1615
1616 f0 = ROOT.TF1("f0", "gaus", hist1d.GetBinLowEdge(1), -hist1d.GetBinLowEdge(1))
1617 fit = hist1d.Fit(f0,"NRQ")
1618 rangea, rangeb = hist1d.GetMean() - hist1d.GetRMS(), hist1d.GetMean() + hist1d.GetRMS()
1619 if fit==0: rangea, rangeb = f0.GetParameter(1) - f0.GetParameter(2), f0.GetParameter(1) + f0.GetParameter(2)
1620
1621
1622
1623 f1 = ROOT.TF1("f1", "gaus", rangea, rangeb)
1624 fit = hist1d.Fit(f1,"NRQ")
1625 nn = hist1d.GetEntries()
1626 dphiz, ephiz = 0, 0
1627 if nn>0: dphiz, ephiz = hist1d.GetMean(), ROOT.TMath.StudentQuantile(0.841345,nn) * hist1d.GetRMS() / sqrt(nn)
1628 if fit==0: dphiz, ephiz = f1.GetParameter(1), f1.GetParError(1)
1629
1630 MAP_RESULTS_FITSIN[id]['phi'] = (dphiz, ephiz)
1631
1632 global ttex_sine_, ttex_sine, ttex_1d_, ttex_1d
1633 postal_address = idToPostalAddress(id+'/01')
1634 ttex_sine_ = ROOT.TLatex(0, 0.8*window,"#Delta#phi_{z}^{sine} (mrad):")
1635 ttex_sine_.SetTextColor(ROOT.kGreen+2); ttex_sine_.SetTextSize(0.04); ttex_sine_.Draw()
1636 ttex_sine = ROOT.TLatex(0, 0.7*window," %+.3f#pm%.3f" %
1637 (-100*fitsine_const[0]/signConventions[postal_address][3],
1638 100*fitsine_const[1]/signConventions[postal_address][3]))
1639 ttex_sine.SetTextColor(ROOT.kGreen+2); ttex_sine.SetTextSize(0.04); ttex_sine.Draw()
1640 ttex_1d_ = ROOT.TLatex(0, 0.6*window,"#Delta#phi_{z}^{phi} (mrad):")
1641 ttex_1d_.SetTextColor(ROOT.kGreen+2); ttex_1d_.SetTextSize(0.04); ttex_1d_.Draw()
1642 ttex_1d = ROOT.TLatex(0, 0.5*window," %+.3f#pm%.3f" % (-dphiz, ephiz))
1643 ttex_1d.SetTextColor(ROOT.kGreen+2); ttex_1d.SetTextSize(0.04); ttex_1d.Draw()
1644 ROOT.gPad.Update()
1645
1646 if fitline:
1647 f = ROOT.TF1("f", "[0] + [1]*x", -1000., 1000.)
1648 hist2d.Fit(f, "q")
1649 hist2d.GetFunction("f").SetLineColor(ROOT.kRed)
1650 global fitline_const, fitline_linear, fitline_chi2, fitline_ndf
1651 fitline_const = hist2d.GetFunction("f").GetParameter(0), hist2d.GetFunction("f").GetParError(0)
1652 fitline_linear = hist2d.GetFunction("f").GetParameter(1), hist2d.GetFunction("f").GetParError(1)
1653 fitline_chi2 = hist2d.GetFunction("f").GetChisquare()
1654 fitline_ndf = hist2d.GetFunction("f").GetNDF()
1655 hist2d.GetFunction("f").Draw("same")
1656 global fitline_ttext
1657 if "vsz" in name: which = "Z"
1658 elif "vsr" in name: which = "R"
1659 fitline_ttext = ROOT.TText(hist.GetBinCenter(hist.GetNbinsX()/4),
1660 0.8*window, "%.3g %+.3g %s" % (fitline_const[0], fitline_linear[0], which))
1661 fitline_ttext.SetTextColor(ROOT.kRed)
1662 fitline_ttext.Draw()
1663
1664 ROOT.gPad.RedrawAxis()
1665
1666 if "vsphi" in name:
1667 if not widebins: philines(name, window, abscissa)
1668 if abscissa is None:
1669 if 'CSC' in name:
1670 tline1 = ROOT.TLine(-pi/180.*5., 0, pi*(2.-5./180.), 0); tline1.Draw()
1671 tline2 = ROOT.TLine(-pi/180.*5., -window, pi*(2.-5./180.), -window); tline2.SetLineWidth(2); tline2.Draw()
1672 tline3 = ROOT.TLine(-pi/180.*5., window, pi*(2.-5./180.), window); tline3.Draw()
1673 else:
1674 tline1 = ROOT.TLine(-pi, 0, pi, 0); tline1.Draw()
1675 tline2 = ROOT.TLine(-pi, -window, pi, -window); tline2.SetLineWidth(2); tline2.Draw()
1676 tline3 = ROOT.TLine(-pi, window, pi, window); tline3.Draw()
1677 else:
1678 tline1 = ROOT.TLine(abscissa[0], 0, abscissa[1], 0); tline1.Draw()
1679 tline2 = ROOT.TLine(abscissa[0], -window, abscissa[1], -window); tline2.SetLineWidth(2); tline2.Draw()
1680 tline3 = ROOT.TLine(abscissa[0], window, abscissa[1], window); tline3.Draw()
1681 elif "vsz" in name:
1682 if not widebins: zlines(window, abscissa)
1683 if abscissa is None:
1684 tline1 = ROOT.TLine(-660, 0, 660, 0); tline1.Draw()
1685 tline2 = ROOT.TLine(-660, -window, 660, -window); tline2.SetLineWidth(2); tline2.Draw()
1686 tline3 = ROOT.TLine(-660, window, 660, window); tline3.Draw()
1687 else:
1688 tline1 = ROOT.TLine(abscissa[0], 0, abscissa[1], 0); tline1.Draw()
1689 tline2 = ROOT.TLine(abscissa[0], -window, abscissa[1], -window); tline2.SetLineWidth(2); tline2.Draw()
1690 tline3 = ROOT.TLine(abscissa[0], window, abscissa[1], window); tline3.Draw()
1691 elif "vsr" in name:
1692 if "mem1" in name or "mep1" in name and not widebins: rlines(1, window, abscissa)
1693 if "mem2" in name or "mep2" in name and not widebins: rlines(2, window, abscissa)
1694 if "mem3" in name or "mep3" in name and not widebins: rlines(3, window, abscissa)
1695 if "mem4" in name or "mep4" in name and not widebins: rlines(4, window, abscissa)
1696 if abscissa is None:
1697 tline1 = ROOT.TLine(100, 0, 700, 0); tline1.Draw()
1698 tline2 = ROOT.TLine(100, -window, 700, -window); tline2.SetLineWidth(2); tline2.Draw()
1699 tline3 = ROOT.TLine(100, window, 700, window); tline3.Draw()
1700 else:
1701 tline1 = ROOT.TLine(abscissa[0], 0, abscissa[1], 0); tline1.Draw()
1702 tline2 = ROOT.TLine(abscissa[0], -window, abscissa[1], -window); tline2.SetLineWidth(2); tline2.Draw()
1703 tline3 = ROOT.TLine(abscissa[0], window, abscissa[1], window); tline3.Draw()
1704
1705 if "vsphi" in name and fitsawteeth:
1706 global CPP_LOADED
1707 if not CPP_LOADED:
1708 phiedges2c()
1709 ROOT.gROOT.ProcessLine(".L phiedges_fitfunctions.C++")
1710 CPP_LOADED = True
1711 fn={0: ROOT.fitf0,
1712 1: ROOT.fitf2,
1713 2: ROOT.fitf2,
1714 3: ROOT.fitf3,
1715 4: ROOT.fitf4,
1716 5: ROOT.fitf5,
1717 6: ROOT.fitf6,
1718 7: ROOT.fitf7,
1719 8: ROOT.fitf8,
1720 9: ROOT.fitf9,
1721 10: ROOT.fitf10,
1722 11: ROOT.fitf11,
1723 12: ROOT.fitf12,
1724 13: ROOT.fitf13
1725 } [stationIndex(name)]
1726 fn.SetNpx(5000)
1727 fn.SetLineColor(ROOT.kYellow)
1728 hist.Fit(fn,"N")
1729 fn.Draw("same")
1730
1731
1732 edges = (phiedges[stationIndex(name)])[:]
1733 ed = sorted(edges)
1734
1735 ed.append(pi+abs(ed[0]))
1736
1737 global sawtooth_a, sawtooth_b
1738 sawtooth_a = []
1739 sawtooth_da = []
1740 sawtooth_b = []
1741 for pr in range(0,fn.GetNpar(),2):
1742 sawtooth_a.append( (fn.GetParameter(pr), fn.GetParError(pr)) )
1743 sawtooth_b.append( (fn.GetParameter(pr+1), fn.GetParError(pr+1)) )
1744 sawtooth_da.append( (fn.Eval(ed[pr/2]+0.01), fn.Eval(ed[pr/2+1]-0.01)) )
1745 global MAP_RESULTS_SAWTOOTH
1746 MAP_RESULTS_SAWTOOTH[id] = {'a': sawtooth_a, 'da': sawtooth_da, 'b': sawtooth_b, 'chi2': fn.GetChisquare(), 'ndf': fn.GetNDF()}
1747
1748
1749
1750
1751
1752 ROOT.SetOwnership(hist2d,False)
1753 ROOT.SetOwnership(hist,False)
1754 ROOT.SetOwnership(tline1,False)
1755 ROOT.SetOwnership(tline2,False)
1756 ROOT.SetOwnership(tline3,False)
1757 return hist
1758
1759
1760 def mapNameToId(name):
1761 if "DT" in name:
1762 wh = "-ALL"
1763 if name.find('wh')>1: wh = name[name.find('wh')+2]
1764 if wh == "A": w = "-2"
1765 elif wh == "B": w = "-1"
1766 elif wh == "C": w = "-0"
1767 elif wh == "D": w = "+1"
1768 elif wh == "E": w = "+2"
1769 elif wh == "-ALL": w = "-ALL"
1770 else: return None
1771 station=''
1772 if wh == "-ALL":
1773 if name.find('sec')<0: return None
1774 station = name[name.find('sec')-1]
1775 sector = ''
1776 sector = name[name.find('sec')+3:name.find('sec')+5]
1777 return "MB%s/%s/%s" % (w, station, sector)
1778 if name.find('st')>1: station = name[name.find('st')+2]
1779 else: return None
1780 return "MB%s/%s" % (w, station)
1781 elif "CSC" in name:
1782 p = name.find('me')
1783 if p<0: return None
1784 if name[p+2]=="p": endcap = "+"
1785 elif name[p+2]=="m": endcap = "-"
1786 else: return None
1787 station = name[p+3]
1788 pch = name.find('ch')
1789 if pch<0:
1790 ring = name[p+4]
1791 return "ME%s%s/%s" % (endcap, station, ring)
1792 ring = 'ALL'
1793 chamber = name[pch+2:pch+4]
1794 return "ME%s%s/%s/%s" % (endcap, station, ring, chamber)
1795 return None
1796
1797
1798
1799
1800
1801
1802
1803 def curvatureplot(tfiles, name, param, mode="from2d", window=15., widebins=False, title="", fitgauss=False, fitconst=False, fitline=False, fitpeaks=True, reset_palette=False):
1804 tdrStyle.SetOptTitle(1)
1805 tdrStyle.SetTitleBorderSize(0)
1806 tdrStyle.SetOptStat(0)
1807 tdrStyle.SetOptFit(0)
1808 tdrStyle.SetTitleFontSize(0.05)
1809
1810 c1.Clear()
1811 if reset_palette: set_palette("blues")
1812 global hist, histCOPY, hist2d, tline1, tline2, tline3, tline4, tline5
1813
1814 hdir = "AlignmentMonitorMuonVsCurvature/iter1/"
1815
1816 if name not in ("all", "top", "bottom"):
1817 hsuffix = "_%s_%s" % (name, param)
1818 prof = tfiles[0].Get(hdir+"tprofile"+hsuffix).Clone("tprofile_"+hsuffix)
1819 hist2d = tfiles[0].Get(hdir+"th2f"+hsuffix).Clone("th2f_"+hsuffix)
1820 for tfile in tfiles[1:]:
1821 prof.Add(tfile.Get(hdir+"tprofile"+hsuffix))
1822 hist2d.Add(tfile.Get(hdir+"th2f"+hsuffix))
1823 else:
1824 prof = None
1825 hist2d = None
1826 for wheel in "m2", "m1", "z", "p1", "p2":
1827 if name == "all": sectors = "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"
1828 elif name == "top": sectors = "01", "02", "03", "04", "05", "06"
1829 elif name == "bottom": sectors = "07", "08", "09", "10", "11", "12"
1830 else: raise Exception
1831
1832 for sector in sectors:
1833 hsuffix = "_%s_%s" % ("wheel%s_sector%s" % (wheel, sector), param)
1834 for tfile in tfiles:
1835 if prof is None:
1836 prof = tfiles[0].Get(hdir+"tprofile"+hsuffix).Clone("tprofile_"+hsuffix)
1837 hist2d = tfiles[0].Get(hdir+"th2f"+hsuffix).Clone("tprofile_"+hsuffix)
1838 else:
1839 prof.Add(tfile.Get(hdir+"tprofile"+hsuffix))
1840 hist2d.Add(tfile.Get(hdir+"th2f"+hsuffix))
1841
1842 hist = ROOT.TH1F("hist", "", prof.GetNbinsX(), prof.GetBinLowEdge(1), -prof.GetBinLowEdge(1))
1843 for i in range(1, prof.GetNbinsX()+1):
1844 hist.SetBinContent(i, prof.GetBinContent(i))
1845 hist.SetBinError(i, prof.GetBinError(i))
1846
1847 if mode == "plain":
1848 hist = prof
1849 elif mode == "from2d":
1850 skip = 1
1851 if widebins:
1852 hist.Rebin(5)
1853 skip = 5
1854 htmp = ROOT.gROOT.FindObject("tmp")
1855 if htmp != None: htmp.Delete()
1856
1857 for i in range(0, int(prof.GetNbinsX()), skip):
1858 tmp = hist2d.ProjectionY("tmp", i+1, i + skip)
1859 if tmp.GetEntries() > 1:
1860 hist.SetBinContent(i/skip+1, tmp.GetMean())
1861 hist.SetBinError(i/skip+1, ROOT.TMath.StudentQuantile(0.841345,tmp.GetEntries()) * tmp.GetRMS() / sqrt(tmp.GetEntries()))
1862
1863 else:
1864
1865
1866 hist.SetBinContent(i/skip+1, 0.)
1867 hist.SetBinError(i/skip+1, 0.)
1868
1869 hpeaks = createPeaksProfile(hist2d, skip)
1870
1871 else:
1872 raise Exception
1873
1874
1875 if fitgauss:
1876 f = ROOT.TF1("f", "[0] + [1]*exp(-x**2/2/0.01**2)", hist.GetBinLowEdge(1), -hist.GetBinLowEdge(1))
1877 f.SetParameters(0, 0., 0.01)
1878 if fitpeaks: hpeaks.Fit(f, "q")
1879 else: hist.Fit(f, "q")
1880 f.SetLineColor(ROOT.kRed)
1881 global fitgauss_diff, fitgauss_chi2, fitgauss_ndf
1882
1883
1884
1885 fitgauss_diff = f.GetParameter(1), f.GetParError(1)
1886 fitgauss_chi2 = f.GetChisquare()
1887 fitgauss_ndf = f.GetNDF()
1888
1889 global fitline_intercept, fitline_slope
1890 if fitconst:
1891 f = ROOT.TF1("f", "[0]", hist.GetBinLowEdge(1), -hist.GetBinLowEdge(1))
1892 if fitpeaks: hpeaks.Fit(f, "q")
1893 else: hist.Fit(f, "q")
1894 f.SetLineColor(ROOT.kRed)
1895 fitline_intercept = f.GetParameter(0), f.GetParError(0)
1896
1897 if fitline:
1898 f = ROOT.TF1("f", "[0] + [1]*x", hist.GetBinLowEdge(1), -hist.GetBinLowEdge(1))
1899 if fitpeaks: hpeaks.Fit(f, "qNE")
1900 else: hist.Fit(f, "qNE")
1901 f.SetLineColor(ROOT.kRed)
1902 global f2, f3
1903 f2 = ROOT.TF1("2", "[0] + [1]*x", hist.GetBinLowEdge(1), -hist.GetBinLowEdge(1))
1904 f3 = ROOT.TF1("2", "[0] + [1]*x", hist.GetBinLowEdge(1), -hist.GetBinLowEdge(1))
1905 f2.SetParameters(f.GetParameter(0), f.GetParameter(1) + f.GetParError(1))
1906 f3.SetParameters(f.GetParameter(0), f.GetParameter(1) - f.GetParError(1))
1907 f2.SetLineColor(ROOT.kRed)
1908 f3.SetLineColor(ROOT.kRed)
1909 f2.SetLineStyle(2)
1910 f3.SetLineStyle(2)
1911 fitline_intercept = f.GetParameter(0), f.GetParError(0)
1912 fitline_slope = f.GetParameter(1), f.GetParError(1)
1913
1914 hist2d.SetAxisRange(-window, window, "Y")
1915 hist2d.SetMarkerStyle(20)
1916 hist2d.SetMarkerSize(0.75)
1917 hist2d.GetXaxis().CenterTitle()
1918 hist2d.GetYaxis().CenterTitle()
1919 if param == "curverr":
1920 hist2d.GetYaxis().SetTitleOffset(1.35)
1921 else:
1922 hist2d.GetYaxis().SetTitleOffset(0.75)
1923 hist2d.GetXaxis().SetTitleOffset(1.2)
1924 hist2d.GetXaxis().SetTitleSize(0.05)
1925 hist2d.GetYaxis().SetTitleSize(0.05)
1926 hist2d.SetTitle(title)
1927 if param == "pterr": hist2d.SetXTitle("qp_{T} (GeV/c)")
1928 else: hist2d.SetXTitle("q/p_{T} (c/GeV)")
1929 if param == "deltax": hist2d.SetYTitle("#Deltax' (mm)")
1930 if param == "deltadxdz": hist2d.SetYTitle("#Deltadx'/dz (mrad)")
1931 if param == "pterr": hist2d.SetYTitle("#Deltap_{T}/p_{T} (%)")
1932 if param == "curverr": hist2d.SetYTitle("#Deltaq/p_{T} (c/GeV)")
1933 hist2d.Draw("colz")
1934 hist.SetMarkerColor(ROOT.kBlack)
1935 hist.SetLineColor(ROOT.kBlack)
1936 hist.Draw("same")
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948 if fitline:
1949 f.Draw("same")
1950
1951
1952
1953 hpeaks.SetMarkerStyle(20)
1954 hpeaks.SetMarkerSize(0.9)
1955 hpeaks.SetMarkerColor(ROOT.kRed)
1956 hpeaks.SetLineColor(ROOT.kRed)
1957 hpeaks.SetLineWidth(2)
1958
1959 hpeaks.Draw("same")
1960
1961
1962
1963
1964
1965 tline5 = ROOT.TLine(-hist.GetBinLowEdge(1), 0., hist.GetBinLowEdge(1), 0.)
1966 tline5.Draw()
1967
1968
1969
1970 def curvatureDTsummary(tfiles, window=15., pdgSfactor=False):
1971 global h, gm2, gm1, gz, gp1, gp2, tlegend
1972
1973 set_palette("blues")
1974 phis = {-2: [], -1: [], 0: [], 1: [], 2: []}
1975 diffs = {-2: [], -1: [], 0: [], 1: [], 2: []}
1976 differrs = {-2: [], -1: [], 0: [], 1: [], 2: []}
1977 for wheelstr, wheel in ("m2", "-2"), ("m1", "-1"), ("z", "0"), ("p1", "+1"), ("p2", "+2"):
1978 for sector in "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12":
1979 curvatureplot(tfiles, "wheel%s_sector%s" % (wheelstr, sector), "deltax",
1980 title="Wheel %s, sector %s" % (wheel, sector), fitgauss=True, reset_palette=False)
1981 if fitgauss_diff[1] < window:
1982 uncertainty = fitgauss_diff[1]
1983 if pdgSfactor and (fitgauss_chi2/fitgauss_ndf) > 1.: uncertainty *= sqrt(fitgauss_chi2/fitgauss_ndf)
1984
1985 phis[int(wheel)].append(signConventions["DT", int(wheel), 1, int(sector)][4])
1986 diffs[int(wheel)].append(fitgauss_diff[0])
1987 differrs[int(wheel)].append(uncertainty)
1988
1989 h = ROOT.TH1F("h", "", 1, -pi, pi)
1990 h.SetAxisRange(-window, window, "Y")
1991 h.SetXTitle("#phi (rad)")
1992 h.SetYTitle("#Deltax(p_{T} #rightarrow #infty) - #Deltax(p_{T} #rightarrow 0) (mm)")
1993 h.GetXaxis().CenterTitle()
1994 h.GetYaxis().CenterTitle()
1995
1996 gm2 = ROOT.TGraphErrors(len(phis[-2]), array.array("d", phis[-2]), array.array("d", diffs[-2]),
1997 array.array("d", [0.]*len(phis[-2])), array.array("d", differrs[-2]))
1998 gm1 = ROOT.TGraphErrors(len(phis[-1]), array.array("d", phis[-1]), array.array("d", diffs[-1]),
1999 array.array("d", [0.]*len(phis[-1])), array.array("d", differrs[-1]))
2000 gz = ROOT.TGraphErrors(len(phis[0]), array.array("d", phis[0]), array.array("d", diffs[0]),
2001 array.array("d", [0.]*len(phis[0])), array.array("d", differrs[0]))
2002 gp1 = ROOT.TGraphErrors(len(phis[1]), array.array("d", phis[1]), array.array("d", diffs[1]),
2003 array.array("d", [0.]*len(phis[1])), array.array("d", differrs[1]))
2004 gp2 = ROOT.TGraphErrors(len(phis[2]), array.array("d", phis[2]), array.array("d", diffs[2]),
2005 array.array("d", [0.]*len(phis[2])), array.array("d", differrs[2]))
2006
2007 gm2.SetMarkerStyle(21); gm2.SetMarkerColor(ROOT.kRed); gm2.SetLineColor(ROOT.kRed)
2008 gm1.SetMarkerStyle(22); gm1.SetMarkerColor(ROOT.kBlue); gm1.SetLineColor(ROOT.kBlue)
2009 gz.SetMarkerStyle(3); gz.SetMarkerColor(ROOT.kBlack); gz.SetLineColor(ROOT.kBlack)
2010 gp1.SetMarkerStyle(26); gp1.SetMarkerColor(ROOT.kBlue); gp1.SetLineColor(ROOT.kBlue)
2011 gp2.SetMarkerStyle(25); gp2.SetMarkerColor(ROOT.kRed); gp2.SetLineColor(ROOT.kRed)
2012
2013 h.Draw()
2014 tlegend = ROOT.TLegend(0.25, 0.2, 0.85, 0.5)
2015 tlegend.SetFillColor(ROOT.kWhite)
2016 tlegend.SetBorderSize(0)
2017 tlegend.AddEntry(gm2, "Wheel -2", "p")
2018 tlegend.AddEntry(gm1, "Wheel -1", "p")
2019 tlegend.AddEntry(gz, "Wheel 0", "p")
2020 tlegend.AddEntry(gp1, "Wheel +1", "p")
2021 tlegend.AddEntry(gp2, "Wheel +2", "p")
2022 tlegend.Draw()
2023
2024 gm2.Draw("p")
2025 gm1.Draw("p")
2026 gz.Draw("p")
2027 gp1.Draw("p")
2028 gp2.Draw("p")
2029
2030
2031 def getname(r):
2032 if r.postal_address[0] == "DT":
2033 wheel, station, sector = r.postal_address[1:]
2034 return "DT wheel %d, station %d, sector %d" % (wheel, station, sector)
2035 elif r.postal_address[0] == "CSC":
2036 endcap, station, ring, chamber = r.postal_address[1:]
2037 if endcap != 1: station = -1 * abs(station)
2038 return "CSC ME%d/%d chamber %d" % (station, ring, chamber)
2039
2040 ddt=[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
2041 def clearDDT():
2042 for i in range(0,15):
2043 ddt[i]=0.
2044
2045 def printDeltaTs():
2046 n = 0
2047 for t in ddt:
2048 if n==0 or n==7 or n==15: print("%d calls" % t)
2049 else: print("%d : %0.3f ms" % (n,t*1000.0))
2050 n += 1
2051
2052 def bellcurves(tfile, reports, name, twobin=True, suppressblue=False):
2053 t1 = time.time()
2054 ddt[0] += 1
2055 tdrStyle.SetOptTitle(1)
2056 tdrStyle.SetTitleBorderSize(1)
2057 tdrStyle.SetTitleFontSize(0.1)
2058 tdrStyle.SetOptStat(0)
2059 tdrStyle.SetHistMinimumZero()
2060
2061 c1.Clear()
2062 c1.ResetAttPad()
2063
2064 found = False
2065 for r in reports:
2066 if r.name == name:
2067 found = True
2068 break
2069 if not found: raise Exception("Not a valid name")
2070 if r.status == "FAIL":
2071
2072 print("Fit failed")
2073 c1.Clear()
2074 return
2075
2076 Pos = "Pos"; Neg = "Neg"
2077 if not twobin:
2078 Pos = ""; Neg = ""
2079
2080 pdirPos = "MuonAlignmentFromReference/%s%s" % (name, Pos)
2081 pdirNeg = "MuonAlignmentFromReference/%s%s" % (name, Neg)
2082
2083 t2 = time.time()
2084 ddt[1] = 1./ddt[0]*((ddt[0]-1)*ddt[1] + t2-t1)
2085
2086 chamber_x = tfile.Get(pdirPos+"_x")
2087 chamber_x_fit = tfile.Get(pdirPos+"_x_fit")
2088 chamber_y = tfile.Get(pdirPos+"_y")
2089 chamber_y_fit = tfile.Get(pdirPos+"_y_fit")
2090 chamber_dxdz = tfile.Get(pdirPos+"_dxdz")
2091 chamber_dxdz_fit = tfile.Get(pdirPos+"_dxdz_fit")
2092 chamber_dydz = tfile.Get(pdirPos+"_dydz")
2093 chamber_dydz_fit = tfile.Get(pdirPos+"_dydz_fit")
2094 chamber_alphax = tfile.Get(pdirPos+"_alphax")
2095 chamber_alphax_fit = tfile.Get(pdirPos+"_alphax_fit")
2096 chamber_alphay = tfile.Get(pdirPos+"_alphay")
2097 chamber_alphay_fit = tfile.Get(pdirPos+"_alphay_fit")
2098 if twobin:
2099 chamber_x_fit2 = tfile.Get(pdirNeg+"_x_fit")
2100 chamber_y_fit2 = tfile.Get(pdirNeg+"_y_fit")
2101 chamber_dxdz_fit2 = tfile.Get(pdirNeg+"_dxdz_fit")
2102 chamber_dydz_fit2 = tfile.Get(pdirNeg+"_dydz_fit")
2103 chamber_alphax_fit2 = tfile.Get(pdirNeg+"_alphax_fit")
2104 chamber_alphay_fit2 = tfile.Get(pdirNeg+"_alphay_fit")
2105
2106 if not chamber_x:
2107 chamber_x = tfile.Get(pdirPos+"_residual")
2108 chamber_x_fit = tfile.Get(pdirPos+"_residual_fit")
2109 chamber_dxdz = tfile.Get(pdirPos+"_resslope")
2110 chamber_dxdz_fit = tfile.Get(pdirPos+"_resslope_fit")
2111 chamber_alphax = tfile.Get(pdirPos+"_alpha")
2112 chamber_alphax_fit = tfile.Get(pdirPos+"_alpha_fit")
2113 if twobin:
2114 chamber_x_fit2 = tfile.Get(pdirNeg+"_residual_fit")
2115 chamber_dxdz_fit2 = tfile.Get(pdirNeg+"_resslope_fit")
2116 chamber_alphax_fit2 = tfile.Get(pdirNeg+"_alpha_fit")
2117
2118 if not chamber_x:
2119 print("Can't find neither "+pdirPos+"_x nor "+pdirPos+"_residual")
2120 return
2121
2122 t3 = time.time()
2123 ddt[2] = 1./ddt[0]*((ddt[0]-1)*ddt[2] + t3-t2)
2124
2125
2126 chamber_x.SetAxisRange(-50., 50., "X")
2127 if chamber_x.GetRMS()>15: chamber_x.SetAxisRange(-75., 75., "X")
2128 chamber_dxdz.SetAxisRange(-30., 30., "X")
2129 chamber_alphax.SetAxisRange(-50., 50., "X")
2130 if not not chamber_y:
2131 chamber_y.SetAxisRange(-75., 75., "X")
2132 chamber_dydz.SetAxisRange(-120., 120., "X")
2133 chamber_alphay.SetAxisRange(-120., 120., "X")
2134 chamber_alphay.SetAxisRange(-75., 75., "Y")
2135
2136
2137 chamber_x.SetXTitle("Local x residual (mm)")
2138 chamber_dxdz.SetXTitle("Local dx/dz residual (mrad)")
2139 chamber_alphax.SetXTitle("Local dx/dz residual (mrad)")
2140 chamber_alphax.SetYTitle("Local x residual (mm)")
2141 if not not chamber_y:
2142 chamber_y.SetXTitle("Local y residual (mm)")
2143 chamber_dydz.SetXTitle("Local dy/dz residual (mrad)")
2144 chamber_alphay.SetXTitle("Local dy/dz residual (mrad)")
2145 chamber_alphay.SetYTitle("Local y residual (mm)")
2146 if name[0:2] == "ME":
2147 chamber_x.SetXTitle("Local r#phi residual (mm)")
2148 chamber_dxdz.SetXTitle("Local d(r#phi)/dz residual (mrad)")
2149 chamber_alphax.SetXTitle("Local d(r#phi)/dz residual (mrad)")
2150 chamber_alphax.SetYTitle("Local r#phi residual (mm)")
2151
2152 t4 = time.time()
2153 ddt[3] = 1./ddt[0]*((ddt[0]-1)*ddt[3] + t4-t3)
2154
2155 for h in chamber_x, chamber_dxdz, chamber_alphax, chamber_alphax, \
2156 chamber_y, chamber_dydz, chamber_alphay, chamber_alphay:
2157 if not not h:
2158 h.GetXaxis().CenterTitle()
2159 h.GetYaxis().CenterTitle()
2160 h.GetXaxis().SetLabelSize(0.05)
2161 h.GetYaxis().SetLabelSize(0.05)
2162 h.GetXaxis().SetTitleSize(0.07)
2163 h.GetYaxis().SetTitleSize(0.07)
2164 h.GetXaxis().SetTitleOffset(0.9)
2165 h.GetYaxis().SetTitleOffset(0.9)
2166
2167 if twobin:
2168 for f in chamber_x_fit2, chamber_y_fit2, chamber_dxdz_fit2, chamber_dydz_fit2, \
2169 chamber_alphax_fit2, chamber_alphay_fit2:
2170 if not not f:
2171 f.SetLineColor(4)
2172 if not twobin:
2173 suppressblue = True
2174
2175 t5 = time.time()
2176 ddt[4] = 1./ddt[0]*((ddt[0]-1)*ddt[4] + t5-t4)
2177
2178 global l1, l2, l3, l4
2179 if not not chamber_y:
2180 c1.Clear()
2181 c1.Divide(3, 2)
2182 chamber_x.SetTitle(getname(r))
2183
2184 c1.GetPad(1).cd()
2185 chamber_x.Draw()
2186 if not suppressblue: chamber_x_fit2.Draw("same")
2187 chamber_x_fit.Draw("same")
2188 l1 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2189 chamber_x_fit.GetParameter(1), chamber_x_fit.GetParError(1),
2190 chamber_x_fit.GetParameter(2), chamber_x_fit.GetParError(2)))
2191 l1.Draw()
2192
2193 c1.GetPad(2).cd()
2194 chamber_dxdz.Draw()
2195 if not suppressblue: chamber_dxdz_fit2.Draw("same")
2196 chamber_dxdz_fit.Draw("same")
2197 l2 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2198 chamber_dxdz_fit.GetParameter(1), chamber_dxdz_fit.GetParError(1),
2199 chamber_dxdz_fit.GetParameter(2), chamber_dxdz_fit.GetParError(2)))
2200 l2.Draw()
2201
2202 c1.GetPad(3).cd()
2203 chamber_alphax.Draw("col")
2204 if not suppressblue: chamber_alphax_fit2.Draw("same")
2205 chamber_alphax_fit.Draw("same")
2206
2207 c1.GetPad(4).cd()
2208 chamber_y.Draw()
2209 if not suppressblue: chamber_y_fit2.Draw("same")
2210 chamber_y_fit.Draw("same")
2211 l3 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2212 chamber_y_fit.GetParameter(1), chamber_y_fit.GetParError(1),
2213 chamber_y_fit.GetParameter(2), chamber_y_fit.GetParError(2)))
2214 l3.Draw()
2215
2216 c1.GetPad(5).cd()
2217 chamber_dydz.Draw()
2218 if not suppressblue: chamber_dydz_fit2.Draw("same")
2219 chamber_dydz_fit.Draw("same")
2220 l4 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2221 chamber_dydz_fit.GetParameter(1), chamber_dydz_fit.GetParError(1),
2222 chamber_dydz_fit.GetParameter(2), chamber_dydz_fit.GetParError(2)))
2223 l4.Draw()
2224
2225 for lb in l1,l2,l3,l4:
2226 lb.SetNDC(1)
2227 lb.SetTextColor(ROOT.kRed)
2228
2229 c1.GetPad(6).cd()
2230 chamber_alphay.Draw("col")
2231 if not suppressblue: chamber_alphay_fit2.Draw("same")
2232 chamber_alphay_fit.Draw("same")
2233
2234 else:
2235 c1.Clear()
2236 c1.Divide(3, 1)
2237 chamber_x.SetTitle(getname(r))
2238
2239 c1.GetPad(1).cd()
2240 chamber_x.Draw()
2241 if not suppressblue: chamber_x_fit2.Draw("same")
2242 chamber_x_fit.Draw("same")
2243 l1 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2244 chamber_x_fit.GetParameter(1), chamber_x_fit.GetParError(1),
2245 chamber_x_fit.GetParameter(2), chamber_x_fit.GetParError(2)))
2246 l1.Draw()
2247
2248 c1.GetPad(2).cd()
2249 chamber_dxdz.Draw()
2250 if not suppressblue: chamber_dxdz_fit2.Draw("same")
2251 chamber_dxdz_fit.Draw("same")
2252 l2 = ROOT.TLatex(0.67,0.8,"#splitline{#mu: %0.2f#pm%0.2f}{#sigma: %0.1f#pm%0.1f}" % (
2253 chamber_dxdz_fit.GetParameter(1), chamber_dxdz_fit.GetParError(1),
2254 chamber_dxdz_fit.GetParameter(2), chamber_dxdz_fit.GetParError(2)))
2255 l2.Draw()
2256
2257 c1.GetPad(3).cd()
2258 chamber_alphax.Draw("col")
2259 if not suppressblue: chamber_alphax_fit2.Draw("same")
2260 chamber_alphax_fit.Draw("same")
2261
2262 for lb in l1,l2:
2263 lb.SetNDC(1)
2264 lb.SetTextColor(ROOT.kRed)
2265
2266 t6 = time.time()
2267 ddt[5] = 1./ddt[0]*((ddt[0]-1)*ddt[5] + t6-t5)
2268 ddt[6] = 1./ddt[0]*((ddt[0]-1)*ddt[6] + t6-t1)
2269
2270
2271 def polynomials(tfile, reports, name, twobin=True, suppressblue=False):
2272 t1 = time.time()
2273 ddt[7] += 1
2274 global label1, label2, label3, label4, label5, label6, label7, label8, label9
2275 plotDirectory = "MuonAlignmentFromReference"
2276 tdrStyle.SetOptTitle(1)
2277 tdrStyle.SetTitleBorderSize(1)
2278 tdrStyle.SetTitleFontSize(0.1)
2279 tdrStyle.SetOptStat(0)
2280
2281 c1.Clear()
2282 c1.ResetAttPad()
2283
2284 found = False
2285 for r in reports:
2286 if r.name == name:
2287 found = True
2288 break
2289 if not found: raise Exception("Not a valid name")
2290
2291 if r.status == "FAIL":
2292
2293 print("Fit failed")
2294 c1.Clear()
2295 return
2296
2297 Pos = "Pos"; Neg = "Neg"
2298 if not twobin:
2299 Pos = ""; Neg = ""
2300
2301 pdirPos = "MuonAlignmentFromReference/%s%s" % (name, Pos)
2302 pdirNeg = "MuonAlignmentFromReference/%s%s" % (name, Neg)
2303
2304 global chamber_x_trackx, chamber_x_trackx_fit, chamber_y_trackx, chamber_y_trackx_fit, \
2305 chamber_dxdz_trackx, chamber_dxdz_trackx_fit, chamber_dydz_trackx, chamber_dydz_trackx_fit, \
2306 chamber_x_trackx_fit2, chamber_y_trackx_fit2, chamber_dxdz_trackx_fit2, chamber_dydz_trackx_fit2
2307 global chamber_x_tracky, chamber_x_tracky_fit, chamber_y_tracky, chamber_y_tracky_fit, \
2308 chamber_dxdz_tracky, chamber_dxdz_tracky_fit, chamber_dydz_tracky, chamber_dydz_tracky_fit, \
2309 chamber_x_tracky_fit2, chamber_y_tracky_fit2, chamber_dxdz_tracky_fit2, chamber_dydz_tracky_fit2
2310 global chamber_x_trackdxdz, chamber_x_trackdxdz_fit, chamber_y_trackdxdz, chamber_y_trackdxdz_fit, \
2311 chamber_dxdz_trackdxdz, chamber_dxdz_trackdxdz_fit, chamber_dydz_trackdxdz, chamber_dydz_trackdxdz_fit, \
2312 chamber_x_trackdxdz_fit2, chamber_y_trackdxdz_fit2, chamber_dxdz_trackdxdz_fit2, chamber_dydz_trackdxdz_fit2
2313 global chamber_x_trackdydz, chamber_x_trackdydz_fit, chamber_y_trackdydz, chamber_y_trackdydz_fit, \
2314 chamber_dxdz_trackdydz, chamber_dxdz_trackdydz_fit, chamber_dydz_trackdydz, chamber_dydz_trackdydz_fit, \
2315 chamber_x_trackdydz_fit2, chamber_y_trackdydz_fit2, chamber_dxdz_trackdydz_fit2, chamber_dydz_trackdydz_fit2
2316
2317 chamber_x_trackx = tfile.Get(pdirPos+"_x_trackx")
2318 chamber_x_trackx_fit = tfile.Get(pdirPos+"_x_trackx_fitline")
2319 chamber_y_trackx = tfile.Get(pdirPos+"_y_trackx")
2320 chamber_y_trackx_fit = tfile.Get(pdirPos+"_y_trackx_fitline")
2321 chamber_dxdz_trackx = tfile.Get(pdirPos+"_dxdz_trackx")
2322 chamber_dxdz_trackx_fit = tfile.Get(pdirPos+"_dxdz_trackx_fitline")
2323 chamber_dydz_trackx = tfile.Get(pdirPos+"_dydz_trackx")
2324 chamber_dydz_trackx_fit = tfile.Get(pdirPos+"_dydz_trackx_fitline")
2325 chamber_x_trackx_fit2 = tfile.Get(pdirNeg+"_x_trackx_fitline")
2326 chamber_y_trackx_fit2 = tfile.Get(pdirNeg+"_y_trackx_fitline")
2327 chamber_dxdz_trackx_fit2 = tfile.Get(pdirNeg+"_dxdz_trackx_fitline")
2328 chamber_dydz_trackx_fit2 = tfile.Get(pdirNeg+"_dydz_trackx_fitline")
2329
2330 chamber_x_tracky = tfile.Get(pdirPos+"_x_tracky")
2331 chamber_x_tracky_fit = tfile.Get(pdirPos+"_x_tracky_fitline")
2332 chamber_y_tracky = tfile.Get(pdirPos+"_y_tracky")
2333 chamber_y_tracky_fit = tfile.Get(pdirPos+"_y_tracky_fitline")
2334 chamber_dxdz_tracky = tfile.Get(pdirPos+"_dxdz_tracky")
2335 chamber_dxdz_tracky_fit = tfile.Get(pdirPos+"_dxdz_tracky_fitline")
2336 chamber_dydz_tracky = tfile.Get(pdirPos+"_dydz_tracky")
2337 chamber_dydz_tracky_fit = tfile.Get(pdirPos+"_dydz_tracky_fitline")
2338 chamber_x_tracky_fit2 = tfile.Get(pdirNeg+"_x_tracky_fitline")
2339 chamber_y_tracky_fit2 = tfile.Get(pdirNeg+"_y_tracky_fitline")
2340 chamber_dxdz_tracky_fit2 = tfile.Get(pdirNeg+"_dxdz_tracky_fitline")
2341 chamber_dydz_tracky_fit2 = tfile.Get(pdirNeg+"_dydz_tracky_fitline")
2342
2343 chamber_x_trackdxdz = tfile.Get(pdirPos+"_x_trackdxdz")
2344 chamber_x_trackdxdz_fit = tfile.Get(pdirPos+"_x_trackdxdz_fitline")
2345 chamber_y_trackdxdz = tfile.Get(pdirPos+"_y_trackdxdz")
2346 chamber_y_trackdxdz_fit = tfile.Get(pdirPos+"_y_trackdxdz_fitline")
2347 chamber_dxdz_trackdxdz = tfile.Get(pdirPos+"_dxdz_trackdxdz")
2348 chamber_dxdz_trackdxdz_fit = tfile.Get(pdirPos+"_dxdz_trackdxdz_fitline")
2349 chamber_dydz_trackdxdz = tfile.Get(pdirPos+"_dydz_trackdxdz")
2350 chamber_dydz_trackdxdz_fit = tfile.Get(pdirPos+"_dydz_trackdxdz_fitline")
2351 chamber_x_trackdxdz_fit2 = tfile.Get(pdirNeg+"_x_trackdxdz_fitline")
2352 chamber_y_trackdxdz_fit2 = tfile.Get(pdirNeg+"_y_trackdxdz_fitline")
2353 chamber_dxdz_trackdxdz_fit2 = tfile.Get(pdirNeg+"_dxdz_trackdxdz_fitline")
2354 chamber_dydz_trackdxdz_fit2 = tfile.Get(pdirNeg+"_dydz_trackdxdz_fitline")
2355
2356 chamber_x_trackdydz = tfile.Get(pdirPos+"_x_trackdydz")
2357 chamber_x_trackdydz_fit = tfile.Get(pdirPos+"_x_trackdydz_fitline")
2358 chamber_y_trackdydz = tfile.Get(pdirPos+"_y_trackdydz")
2359 chamber_y_trackdydz_fit = tfile.Get(pdirPos+"_y_trackdydz_fitline")
2360 chamber_dxdz_trackdydz = tfile.Get(pdirPos+"_dxdz_trackdydz")
2361 chamber_dxdz_trackdydz_fit = tfile.Get(pdirPos+"_dxdz_trackdydz_fitline")
2362 chamber_dydz_trackdydz = tfile.Get(pdirPos+"_dydz_trackdydz")
2363 chamber_dydz_trackdydz_fit = tfile.Get(pdirPos+"_dydz_trackdydz_fitline")
2364 chamber_x_trackdydz_fit2 = tfile.Get(pdirNeg+"_x_trackdydz_fitline")
2365 chamber_y_trackdydz_fit2 = tfile.Get(pdirNeg+"_y_trackdydz_fitline")
2366 chamber_dxdz_trackdydz_fit2 = tfile.Get(pdirNeg+"_dxdz_trackdydz_fitline")
2367 chamber_dydz_trackdydz_fit2 = tfile.Get(pdirNeg+"_dydz_trackdydz_fitline")
2368
2369 if not chamber_x_trackx:
2370 chamber_x_trackx = tfile.Get(pdirPos+"_residual_trackx")
2371 chamber_x_trackx_fit = tfile.Get(pdirPos+"_residual_trackx_fitline")
2372 chamber_dxdz_trackx = tfile.Get(pdirPos+"_resslope_trackx")
2373 chamber_dxdz_trackx_fit = tfile.Get(pdirPos+"_resslope_trackx_fitline")
2374 chamber_x_trackx_fit2 = tfile.Get(pdirNeg+"_residual_trackx_fitline")
2375 chamber_dxdz_trackx_fit2 = tfile.Get(pdirNeg+"_resslope_trackx_fitline")
2376
2377 chamber_x_tracky = tfile.Get(pdirPos+"_residual_tracky")
2378 chamber_x_tracky_fit = tfile.Get(pdirPos+"_residual_tracky_fitline")
2379 chamber_dxdz_tracky = tfile.Get(pdirPos+"_resslope_tracky")
2380 chamber_dxdz_tracky_fit = tfile.Get(pdirPos+"_resslope_tracky_fitline")
2381 chamber_x_tracky_fit2 = tfile.Get(pdirNeg+"_residual_tracky_fitline")
2382 chamber_dxdz_tracky_fit2 = tfile.Get(pdirNeg+"_resslope_tracky_fitline")
2383
2384 chamber_x_trackdxdz = tfile.Get(pdirPos+"_residual_trackdxdz")
2385 chamber_x_trackdxdz_fit = tfile.Get(pdirPos+"_residual_trackdxdz_fitline")
2386 chamber_dxdz_trackdxdz = tfile.Get(pdirPos+"_resslope_trackdxdz")
2387 chamber_dxdz_trackdxdz_fit = tfile.Get(pdirPos+"_resslope_trackdxdz_fitline")
2388 chamber_x_trackdxdz_fit2 = tfile.Get(pdirNeg+"_residual_trackdxdz_fitline")
2389 chamber_dxdz_trackdxdz_fit2 = tfile.Get(pdirNeg+"_resslope_trackdxdz_fitline")
2390
2391 chamber_x_trackdydz = tfile.Get(pdirPos+"_residual_trackdydz")
2392 chamber_x_trackdydz_fit = tfile.Get(pdirPos+"_residual_trackdydz_fitline")
2393 chamber_dxdz_trackdydz = tfile.Get(pdirPos+"_resslope_trackdydz")
2394 chamber_dxdz_trackdydz_fit = tfile.Get(pdirPos+"_resslope_trackdydz_fitline")
2395 chamber_x_trackdydz_fit2 = tfile.Get(pdirNeg+"_residual_trackdydz_fitline")
2396 chamber_dxdz_trackdydz_fit2 = tfile.Get(pdirNeg+"_resslope_trackdydz_fitline")
2397
2398 if not chamber_x_trackx:
2399 print("Can't find neither "+pdirPos+"_residual nor "+pdirPos+"_residual_trackx")
2400 return
2401
2402 chamber_x_trackx = chamber_x_trackx.Clone()
2403 chamber_dxdz_trackx = chamber_dxdz_trackx.Clone()
2404 chamber_x_tracky = chamber_x_tracky.Clone()
2405 chamber_dxdz_tracky = chamber_dxdz_tracky.Clone()
2406 chamber_x_trackdxdz = chamber_x_trackdxdz.Clone()
2407 chamber_dxdz_trackdxdz = chamber_dxdz_trackdxdz.Clone()
2408 chamber_x_trackdydz = chamber_x_trackdydz.Clone()
2409 chamber_dxdz_trackdydz = chamber_dxdz_trackdydz.Clone()
2410
2411 if not not chamber_y_trackx:
2412 chamber_y_trackx = chamber_y_trackx.Clone()
2413 chamber_dydz_trackx = chamber_dydz_trackx.Clone()
2414 chamber_y_tracky = chamber_y_tracky.Clone()
2415 chamber_dydz_tracky = chamber_dydz_tracky.Clone()
2416 chamber_y_trackdxdz = chamber_y_trackdxdz.Clone()
2417 chamber_dydz_trackdxdz = chamber_dydz_trackdxdz.Clone()
2418 chamber_y_trackdydz = chamber_y_trackdydz.Clone()
2419 chamber_dydz_trackdydz = chamber_dydz_trackdydz.Clone()
2420
2421 if not not chamber_y_trackx:
2422 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_x_trackx")); chamber_x_trackx.Merge(tlist)
2423 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dxdz_trackx")); chamber_dxdz_trackx.Merge(tlist)
2424 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_x_tracky")); chamber_x_tracky.Merge(tlist)
2425 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dxdz_tracky")); chamber_dxdz_tracky.Merge(tlist)
2426 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_x_trackdxdz")); chamber_x_trackdxdz.Merge(tlist)
2427 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dxdz_trackdxdz")); chamber_dxdz_trackdxdz.Merge(tlist)
2428 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_x_trackdydz")); chamber_x_trackdydz.Merge(tlist)
2429 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dxdz_trackdydz")); chamber_dxdz_trackdydz.Merge(tlist)
2430 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_y_trackx")); chamber_y_trackx.Merge(tlist)
2431 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dydz_trackx")); chamber_dydz_trackx.Merge(tlist)
2432 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_y_tracky")); chamber_y_tracky.Merge(tlist)
2433 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dydz_tracky")); chamber_dydz_tracky.Merge(tlist)
2434 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_y_trackdxdz")); chamber_y_trackdxdz.Merge(tlist)
2435 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dydz_trackdxdz")); chamber_dydz_trackdxdz.Merge(tlist)
2436 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_y_trackdydz")); chamber_y_trackdydz.Merge(tlist)
2437 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_dydz_trackdydz")); chamber_dydz_trackdydz.Merge(tlist)
2438 else:
2439 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_residual_trackx")); chamber_x_trackx.Merge(tlist)
2440 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_resslope_trackx")); chamber_dxdz_trackx.Merge(tlist)
2441 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_residual_tracky")); chamber_x_tracky.Merge(tlist)
2442 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_resslope_tracky")); chamber_dxdz_tracky.Merge(tlist)
2443 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_residual_trackdxdz")); chamber_x_trackdxdz.Merge(tlist)
2444 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_resslope_trackdxdz")); chamber_dxdz_trackdxdz.Merge(tlist)
2445 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_residual_trackdydz")); chamber_x_trackdydz.Merge(tlist)
2446 tlist = ROOT.TList(); tlist.Add(tfile.Get(pdirNeg+"_resslope_trackdydz")); chamber_dxdz_trackdydz.Merge(tlist)
2447
2448 rr1=10.
2449 rr2=10.
2450 chamber_x_trackx.SetAxisRange(-rr1, rr1, "Y")
2451 chamber_dxdz_trackx.SetAxisRange(-rr2, rr2, "Y")
2452 chamber_x_tracky.SetAxisRange(-rr1, rr1, "Y")
2453 chamber_dxdz_tracky.SetAxisRange(-rr2, rr2, "Y")
2454 chamber_x_trackdxdz.SetAxisRange(-rr1, rr1, "Y")
2455 chamber_dxdz_trackdxdz.SetAxisRange(-rr2, rr2, "Y")
2456 chamber_x_trackdydz.SetAxisRange(-rr1, rr1, "Y")
2457 chamber_dxdz_trackdydz.SetAxisRange(-rr2, rr2, "Y")
2458
2459 rr3=10.
2460 if not not chamber_y_trackx:
2461 chamber_y_trackx.SetAxisRange(-rr3, rr3, "Y")
2462 chamber_dydz_trackx.SetAxisRange(-rr3, rr3, "Y")
2463 chamber_y_tracky.SetAxisRange(-rr3, rr3, "Y")
2464 chamber_dydz_tracky.SetAxisRange(-rr3, rr3, "Y")
2465 chamber_y_trackdxdz.SetAxisRange(-rr3, rr3, "Y")
2466 chamber_dydz_trackdxdz.SetAxisRange(-rr3, rr3, "Y")
2467 chamber_y_trackdydz.SetAxisRange(-rr3, rr3, "Y")
2468 chamber_dydz_trackdydz.SetAxisRange(-rr3, rr3, "Y")
2469
2470 for h in chamber_x_trackx, chamber_y_trackx, chamber_dxdz_trackx, chamber_dydz_trackx, \
2471 chamber_x_tracky, chamber_y_tracky, chamber_dxdz_tracky, chamber_dydz_tracky, \
2472 chamber_x_trackdxdz, chamber_y_trackdxdz, chamber_dxdz_trackdxdz, chamber_dydz_trackdxdz, \
2473 chamber_x_trackdydz, chamber_y_trackdydz, chamber_dxdz_trackdydz, chamber_dydz_trackdydz:
2474 if not not h:
2475 h.SetMarkerStyle(20)
2476 h.SetMarkerSize(0.5)
2477 h.GetXaxis().SetLabelSize(0.12)
2478 h.GetYaxis().SetLabelSize(0.12)
2479 h.GetXaxis().SetNdivisions(505)
2480 h.GetYaxis().SetNdivisions(505)
2481 h.GetXaxis().SetLabelOffset(0.03)
2482 h.GetYaxis().SetLabelOffset(0.03)
2483
2484 trackdxdz_minimum, trackdxdz_maximum = None, None
2485 for h in chamber_x_trackdxdz, chamber_y_trackdxdz, chamber_dxdz_trackdxdz, chamber_dydz_trackdxdz:
2486 if not not h:
2487 for i in range(1, h.GetNbinsX()+1):
2488 if h.GetBinError(i) > 0.01 and h.GetBinContent(i) - h.GetBinError(i) < 10. and \
2489 h.GetBinContent(i) + h.GetBinError(i) > -10.:
2490 if not trackdxdz_minimum or trackdxdz_minimum > h.GetBinCenter(i):
2491 trackdxdz_minimum = h.GetBinCenter(i)
2492 if trackdxdz_maximum < h.GetBinCenter(i):
2493 trackdxdz_maximum = h.GetBinCenter(i)
2494 if not not trackdxdz_minimum and not not trackdxdz_maximum:
2495 for h in chamber_x_trackdxdz, chamber_y_trackdxdz, chamber_dxdz_trackdxdz, chamber_dydz_trackdxdz:
2496 if not not h:
2497 h.SetAxisRange(trackdxdz_minimum, trackdxdz_maximum, "X")
2498
2499 trackdydz_minimum, trackdydz_maximum = None, None
2500 for h in chamber_x_trackdydz, chamber_y_trackdydz, chamber_dxdz_trackdydz, chamber_dydz_trackdydz:
2501 if not not h:
2502 for i in range(1, h.GetNbinsX()+1):
2503 if h.GetBinError(i) > 0.01 and h.GetBinContent(i) - h.GetBinError(i) < 10. and \
2504 h.GetBinContent(i) + h.GetBinError(i) > -10.:
2505 if not trackdydz_minimum or trackdydz_minimum > h.GetBinCenter(i):
2506 trackdydz_minimum = h.GetBinCenter(i)
2507 if trackdydz_maximum < h.GetBinCenter(i):
2508 trackdydz_maximum = h.GetBinCenter(i)
2509 if not not trackdydz_minimum and not not trackdydz_maximum:
2510 for h in chamber_x_trackdydz, chamber_y_trackdydz, chamber_dxdz_trackdydz, chamber_dydz_trackdydz:
2511 if not not h:
2512 h.SetAxisRange(trackdydz_minimum, trackdydz_maximum, "X")
2513
2514 for f in chamber_x_trackx_fit2, chamber_y_trackx_fit2, chamber_dxdz_trackx_fit2, chamber_dydz_trackx_fit2, \
2515 chamber_x_tracky_fit2, chamber_y_tracky_fit2, chamber_dxdz_tracky_fit2, chamber_dydz_tracky_fit2, \
2516 chamber_x_trackdxdz_fit2, chamber_y_trackdxdz_fit2, chamber_dxdz_trackdxdz_fit2, chamber_dydz_trackdxdz_fit2, \
2517 chamber_x_trackdydz_fit2, chamber_y_trackdydz_fit2, chamber_dxdz_trackdydz_fit2, chamber_dydz_trackdydz_fit2:
2518 if not not f:
2519 f.SetLineColor(4)
2520
2521 if not not chamber_y_trackx:
2522 c1.Clear()
2523
2524 pads = [None]
2525 pads.append(ROOT.TPad("p1" ,"",0.00,0.78,0.07,1.00,0,0,0))
2526 pads.append(ROOT.TPad("p2" ,"",0.07,0.78,0.34,1.00,0,0,0))
2527 pads.append(ROOT.TPad("p3" ,"",0.34,0.78,0.56,1.00,0,0,0))
2528 pads.append(ROOT.TPad("p4" ,"",0.56,0.78,0.78,1.00,0,0,0))
2529 pads.append(ROOT.TPad("p5" ,"",0.78,0.78,1.00,1.00,0,0,0))
2530 pads.append(ROOT.TPad("p6" ,"",0.00,0.56,0.07,0.78,0,0,0))
2531 pads.append(ROOT.TPad("p7" ,"",0.07,0.56,0.34,0.78,0,0,0))
2532 pads.append(ROOT.TPad("p8" ,"",0.34,0.56,0.56,0.78,0,0,0))
2533 pads.append(ROOT.TPad("p9" ,"",0.56,0.56,0.78,0.78,0,0,0))
2534 pads.append(ROOT.TPad("p10","",0.78,0.56,1.00,0.78,0,0,0))
2535 pads.append(ROOT.TPad("p11","",0.00,0.34,0.07,0.56,0,0,0))
2536 pads.append(ROOT.TPad("p12","",0.07,0.34,0.34,0.56,0,0,0))
2537 pads.append(ROOT.TPad("p13","",0.34,0.34,0.56,0.56,0,0,0))
2538 pads.append(ROOT.TPad("p14","",0.56,0.34,0.78,0.56,0,0,0))
2539 pads.append(ROOT.TPad("p15","",0.78,0.34,1.00,0.56,0,0,0))
2540 pads.append(ROOT.TPad("p16","",0.00,0.07,0.07,0.34,0,0,0))
2541 pads.append(ROOT.TPad("p17","",0.07,0.07,0.34,0.34,0,0,0))
2542 pads.append(ROOT.TPad("p18","",0.34,0.07,0.56,0.34,0,0,0))
2543 pads.append(ROOT.TPad("p19","",0.56,0.07,0.78,0.34,0,0,0))
2544 pads.append(ROOT.TPad("p20","",0.78,0.07,1.00,0.34,0,0,0))
2545 pads.append(ROOT.TPad("p21","",0.00,0.00,0.07,0.07,0,0,0))
2546 pads.append(ROOT.TPad("p22","",0.07,0.00,0.34,0.07,0,0,0))
2547 pads.append(ROOT.TPad("p23","",0.34,0.00,0.56,0.07,0,0,0))
2548 pads.append(ROOT.TPad("p24","",0.56,0.00,0.78,0.07,0,0,0))
2549 pads.append(ROOT.TPad("p25","",0.78,0.00,1.00,0.07,0,0,0))
2550 for p in pads:
2551 if not not p:
2552 p.Draw()
2553 ROOT.SetOwnership(p,False)
2554
2555 label1 = ROOT.TPaveLabel(0, 0, 1, 1, "x residuals (mm)","")
2556 label2 = ROOT.TPaveLabel(0, 0, 1, 1, "y residuals (mm)","")
2557 label3 = ROOT.TPaveLabel(0, 0, 1, 1, "dx/dz residuals (mrad)","")
2558 label4 = ROOT.TPaveLabel(0, 0, 1, 1, "dy/dz residuals (mrad)","")
2559 label5 = ROOT.TPaveLabel(0, 0, 1, 1, "x position (cm)","")
2560 label6 = ROOT.TPaveLabel(0, 0, 1, 1, "y position (cm)","")
2561 label7 = ROOT.TPaveLabel(0, 0, 1, 1, "dx/dz angle (rad)","")
2562 label8 = ROOT.TPaveLabel(0, 0, 1, 1, "dy/dz angle (rad)","")
2563 label9 = ROOT.TPaveLabel(0, 0.85, 1, 1, getname(r),"NDC")
2564
2565 for l in label1, label2, label3, label4, label5, label6, label7, label8, label9:
2566 l.SetBorderSize(0)
2567 l.SetFillColor(ROOT.kWhite)
2568
2569 for l in label1, label2, label3, label4:
2570 l.SetTextAngle(90)
2571 l.SetTextSize(0.09)
2572
2573
2574 label9.SetTextSize(0.59)
2575
2576 pads[1].cd(); label1.Draw()
2577 pads[6].cd(); label2.Draw()
2578 pads[11].cd(); label3.Draw()
2579 pads[16].cd(); label4.Draw()
2580 pads[22].cd(); label5.Draw()
2581 pads[23].cd(); label6.Draw()
2582 pads[24].cd(); label7.Draw()
2583 pads[25].cd(); label8.Draw()
2584
2585 pads[2].SetRightMargin(1e-5)
2586 pads[2].SetBottomMargin(1e-5)
2587 pads[2].SetLeftMargin(0.17)
2588 pads[3].SetLeftMargin(1e-5)
2589 pads[3].SetRightMargin(1e-5)
2590 pads[3].SetBottomMargin(1e-5)
2591 pads[4].SetLeftMargin(1e-5)
2592 pads[4].SetRightMargin(1e-5)
2593 pads[4].SetBottomMargin(1e-5)
2594 pads[5].SetLeftMargin(1e-5)
2595 pads[5].SetBottomMargin(1e-5)
2596
2597 pads[7].SetRightMargin(1e-5)
2598 pads[7].SetBottomMargin(1e-5)
2599 pads[7].SetTopMargin(1e-5)
2600 pads[7].SetLeftMargin(0.17)
2601 pads[8].SetLeftMargin(1e-5)
2602 pads[8].SetRightMargin(1e-5)
2603 pads[8].SetBottomMargin(1e-5)
2604 pads[8].SetTopMargin(1e-5)
2605 pads[9].SetLeftMargin(1e-5)
2606 pads[9].SetRightMargin(1e-5)
2607 pads[9].SetBottomMargin(1e-5)
2608 pads[9].SetTopMargin(1e-5)
2609 pads[10].SetLeftMargin(1e-5)
2610 pads[10].SetBottomMargin(1e-5)
2611 pads[10].SetTopMargin(1e-5)
2612
2613 pads[12].SetRightMargin(1e-5)
2614 pads[12].SetBottomMargin(1e-5)
2615 pads[12].SetTopMargin(1e-5)
2616 pads[12].SetLeftMargin(0.17)
2617 pads[13].SetLeftMargin(1e-5)
2618 pads[13].SetRightMargin(1e-5)
2619 pads[13].SetBottomMargin(1e-5)
2620 pads[13].SetTopMargin(1e-5)
2621 pads[14].SetLeftMargin(1e-5)
2622 pads[14].SetRightMargin(1e-5)
2623 pads[14].SetBottomMargin(1e-5)
2624 pads[14].SetTopMargin(1e-5)
2625 pads[15].SetLeftMargin(1e-5)
2626 pads[15].SetBottomMargin(1e-5)
2627 pads[15].SetTopMargin(1e-5)
2628
2629 pads[17].SetRightMargin(1e-5)
2630 pads[17].SetTopMargin(1e-5)
2631 pads[17].SetLeftMargin(0.17)
2632 pads[18].SetLeftMargin(1e-5)
2633 pads[18].SetRightMargin(1e-5)
2634 pads[18].SetTopMargin(1e-5)
2635 pads[19].SetLeftMargin(1e-5)
2636 pads[19].SetRightMargin(1e-5)
2637 pads[19].SetTopMargin(1e-5)
2638 pads[20].SetLeftMargin(1e-5)
2639 pads[20].SetTopMargin(1e-5)
2640
2641 chamber_x_trackx.GetXaxis().SetLabelColor(ROOT.kWhite)
2642 chamber_x_tracky.GetXaxis().SetLabelColor(ROOT.kWhite)
2643 chamber_x_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2644 chamber_x_trackdxdz.GetXaxis().SetLabelColor(ROOT.kWhite)
2645 chamber_x_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2646 chamber_x_trackdydz.GetXaxis().SetLabelColor(ROOT.kWhite)
2647 chamber_x_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2648 chamber_y_trackx.GetXaxis().SetLabelColor(ROOT.kWhite)
2649 chamber_y_tracky.GetXaxis().SetLabelColor(ROOT.kWhite)
2650 chamber_y_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2651 chamber_y_trackdxdz.GetXaxis().SetLabelColor(ROOT.kWhite)
2652 chamber_y_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2653 chamber_y_trackdydz.GetXaxis().SetLabelColor(ROOT.kWhite)
2654 chamber_y_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2655 chamber_dxdz_trackx.GetXaxis().SetLabelColor(ROOT.kWhite)
2656 chamber_dxdz_tracky.GetXaxis().SetLabelColor(ROOT.kWhite)
2657 chamber_dxdz_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2658 chamber_dxdz_trackdxdz.GetXaxis().SetLabelColor(ROOT.kWhite)
2659 chamber_dxdz_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2660 chamber_dxdz_trackdydz.GetXaxis().SetLabelColor(ROOT.kWhite)
2661 chamber_dxdz_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2662
2663
2664 chamber_dydz_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2665 chamber_dydz_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2666 chamber_dydz_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2667
2668 pads[2].cd()
2669 chamber_x_trackx.Draw("e1")
2670 if not suppressblue: chamber_x_trackx_fit2.Draw("samel")
2671 chamber_x_trackx_fit.Draw("samel")
2672
2673 print(getname(r))
2674
2675 label9.Draw()
2676
2677
2678 pads[3].cd()
2679 chamber_x_tracky.Draw("e1")
2680 if not suppressblue: chamber_x_tracky_fit2.Draw("samel")
2681 chamber_x_tracky_fit.Draw("samel")
2682
2683 pads[4].cd()
2684 chamber_x_trackdxdz.Draw("e1")
2685 if not suppressblue: chamber_x_trackdxdz_fit2.Draw("samel")
2686 chamber_x_trackdxdz_fit.Draw("samel")
2687
2688 pads[5].cd()
2689 chamber_x_trackdydz.Draw("e1")
2690 if not suppressblue: chamber_x_trackdydz_fit2.Draw("samel")
2691 chamber_x_trackdydz_fit.Draw("samel")
2692
2693 pads[7].cd()
2694 chamber_y_trackx.Draw("e1")
2695 if not suppressblue: chamber_y_trackx_fit2.Draw("samel")
2696 chamber_y_trackx_fit.Draw("samel")
2697
2698 pads[8].cd()
2699 chamber_y_tracky.Draw("e1")
2700 if not suppressblue: chamber_y_tracky_fit2.Draw("samel")
2701 chamber_y_tracky_fit.Draw("samel")
2702
2703 pads[9].cd()
2704 chamber_y_trackdxdz.Draw("e1")
2705 if not suppressblue: chamber_y_trackdxdz_fit2.Draw("samel")
2706 chamber_y_trackdxdz_fit.Draw("samel")
2707
2708 pads[10].cd()
2709 chamber_y_trackdydz.Draw("e1")
2710 if not suppressblue: chamber_y_trackdydz_fit2.Draw("samel")
2711 chamber_y_trackdydz_fit.Draw("samel")
2712
2713 pads[12].cd()
2714 chamber_dxdz_trackx.Draw("e1")
2715 if not suppressblue: chamber_dxdz_trackx_fit2.Draw("samel")
2716 chamber_dxdz_trackx_fit.Draw("samel")
2717
2718 pads[13].cd()
2719 chamber_dxdz_tracky.Draw("e1")
2720 if not suppressblue: chamber_dxdz_tracky_fit2.Draw("samel")
2721 chamber_dxdz_tracky_fit.Draw("samel")
2722
2723 pads[14].cd()
2724 chamber_dxdz_trackdxdz.Draw("e1")
2725 if not suppressblue: chamber_dxdz_trackdxdz_fit2.Draw("samel")
2726 chamber_dxdz_trackdxdz_fit.Draw("samel")
2727
2728 pads[15].cd()
2729 chamber_dxdz_trackdydz.Draw("e1")
2730 if not suppressblue: chamber_dxdz_trackdydz_fit2.Draw("samel")
2731 chamber_dxdz_trackdydz_fit.Draw("samel")
2732
2733 pads[17].cd()
2734 chamber_dydz_trackx.Draw("e1")
2735 if not suppressblue: chamber_dydz_trackx_fit2.Draw("samel")
2736 chamber_dydz_trackx_fit.Draw("samel")
2737
2738 pads[18].cd()
2739 chamber_dydz_tracky.Draw("e1")
2740 if not suppressblue: chamber_dydz_tracky_fit2.Draw("samel")
2741 chamber_dydz_tracky_fit.Draw("samel")
2742
2743 pads[19].cd()
2744 chamber_dydz_trackdxdz.Draw("e1")
2745 if not suppressblue: chamber_dydz_trackdxdz_fit2.Draw("samel")
2746 chamber_dydz_trackdxdz_fit.Draw("samel")
2747
2748 pads[20].cd()
2749 chamber_dydz_trackdydz.Draw("e1")
2750 if not suppressblue: chamber_dydz_trackdydz_fit2.Draw("samel")
2751 chamber_dydz_trackdydz_fit.Draw("samel")
2752
2753 else:
2754 c1.Clear()
2755
2756 pads = [None]
2757 pads.append(ROOT.TPad("p1" ,"",0.00,0.55,0.07,1.00,0,0,0))
2758 pads.append(ROOT.TPad("p2" ,"",0.07,0.55,0.34,1.00,0,0,0))
2759 pads.append(ROOT.TPad("p3" ,"",0.34,0.55,0.56,1.00,0,0,0))
2760 pads.append(ROOT.TPad("p4" ,"",0.56,0.55,0.78,1.00,0,0,0))
2761 pads.append(ROOT.TPad("p5" ,"",0.78,0.55,1.00,1.00,0,0,0))
2762 pads.append(ROOT.TPad("p6" ,"",0.00,0.1,0.07,0.55,0,0,0))
2763 pads.append(ROOT.TPad("p7" ,"",0.07,0.1,0.34,0.55,0,0,0))
2764 pads.append(ROOT.TPad("p8" ,"",0.34,0.1,0.56,0.55,0,0,0))
2765 pads.append(ROOT.TPad("p9" ,"",0.56,0.1,0.78,0.55,0,0,0))
2766 pads.append(ROOT.TPad("p10","",0.78,0.1,1.00,0.55,0,0,0))
2767 pads.append(ROOT.TPad("p11","",0.00,0.,0.07,0.1,0,0,0))
2768 pads.append(ROOT.TPad("p12","",0.07,0.,0.34,0.1,0,0,0))
2769 pads.append(ROOT.TPad("p13","",0.34,0.,0.56,0.1,0,0,0))
2770 pads.append(ROOT.TPad("p14","",0.56,0.,0.78,0.1,0,0,0))
2771 pads.append(ROOT.TPad("p15","",0.78,0.,1.00,0.1,0,0,0))
2772 for p in pads:
2773 if not not p:
2774 p.Draw()
2775 ROOT.SetOwnership(p,False)
2776
2777 label1 = ROOT.TPaveLabel(0, 0, 1, 1, "x residuals (mm)")
2778 label2 = ROOT.TPaveLabel(0, 0, 1, 1, "dx/dz residuals (mrad)")
2779 label3 = ROOT.TPaveLabel(0, 0.3, 1, 1, "x position (cm)")
2780 label4 = ROOT.TPaveLabel(0, 0.3, 1, 1, "y position (cm)")
2781 label5 = ROOT.TPaveLabel(0, 0.3, 1, 1, "dx/dz angle (rad)")
2782 label6 = ROOT.TPaveLabel(0, 0.3, 1, 1, "dy/dz angle (rad)")
2783 label9 = ROOT.TPaveLabel(0, 0.85, 1, 1, getname(r),"NDC")
2784
2785 if name[0:2] == "ME":
2786 label1 = ROOT.TPaveLabel(0, 0, 1, 1, "r#phi residuals (mm)")
2787 label2 = ROOT.TPaveLabel(0, 0, 1, 1, "d(r#phi)/dz residuals (mrad)")
2788
2789 for l in label1, label2, label3, label4, label5, label6, label9:
2790 l.SetBorderSize(0)
2791 l.SetFillColor(ROOT.kWhite)
2792
2793 for l in label1, label2:
2794 l.SetTextAngle(90)
2795 l.SetTextSize(0.09)
2796
2797
2798 label9.SetTextSize(0.29)
2799
2800 pads[1].cd(); label1.Draw()
2801 pads[6].cd(); label2.Draw()
2802 pads[12].cd(); label3.Draw()
2803 pads[13].cd(); label4.Draw()
2804 pads[14].cd(); label5.Draw()
2805 pads[15].cd(); label6.Draw()
2806
2807
2808 pads[2].SetRightMargin(1e-5)
2809 pads[2].SetBottomMargin(1e-5)
2810 pads[3].SetLeftMargin(1e-5)
2811 pads[3].SetRightMargin(1e-5)
2812 pads[3].SetBottomMargin(1e-5)
2813 pads[4].SetLeftMargin(1e-5)
2814 pads[4].SetRightMargin(1e-5)
2815 pads[4].SetBottomMargin(1e-5)
2816 pads[5].SetLeftMargin(1e-5)
2817 pads[5].SetBottomMargin(1e-5)
2818
2819 pads[7].SetRightMargin(1e-5)
2820 pads[7].SetTopMargin(1e-5)
2821 pads[8].SetLeftMargin(1e-5)
2822 pads[8].SetRightMargin(1e-5)
2823 pads[8].SetTopMargin(1e-5)
2824 pads[9].SetLeftMargin(1e-5)
2825 pads[9].SetRightMargin(1e-5)
2826 pads[9].SetTopMargin(1e-5)
2827 pads[10].SetLeftMargin(1e-5)
2828 pads[10].SetTopMargin(1e-5)
2829
2830 chamber_x_trackx.GetXaxis().SetLabelColor(ROOT.kWhite)
2831 chamber_x_tracky.GetXaxis().SetLabelColor(ROOT.kWhite)
2832 chamber_x_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2833 chamber_x_trackdxdz.GetXaxis().SetLabelColor(ROOT.kWhite)
2834 chamber_x_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2835 chamber_x_trackdydz.GetXaxis().SetLabelColor(ROOT.kWhite)
2836 chamber_x_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2837
2838 chamber_dxdz_tracky.GetYaxis().SetLabelColor(ROOT.kWhite)
2839 chamber_dxdz_trackdxdz.GetYaxis().SetLabelColor(ROOT.kWhite)
2840 chamber_dxdz_trackdydz.GetYaxis().SetLabelColor(ROOT.kWhite)
2841
2842 pads[2].cd()
2843 chamber_x_trackx.Draw("e1")
2844 if not suppressblue: chamber_x_trackx_fit2.Draw("samel")
2845 chamber_x_trackx_fit.Draw("samel")
2846 label9.Draw()
2847
2848 pads[3].cd()
2849 chamber_x_tracky.Draw("e1")
2850 if not suppressblue: chamber_x_tracky_fit2.Draw("samel")
2851 chamber_x_tracky_fit.Draw("samel")
2852
2853 pads[4].cd()
2854 chamber_x_trackdxdz.Draw("e1")
2855 if not suppressblue: chamber_x_trackdxdz_fit2.Draw("samel")
2856 chamber_x_trackdxdz_fit.Draw("samel")
2857
2858 pads[5].cd()
2859 chamber_x_trackdydz.Draw("e1")
2860 if not suppressblue: chamber_x_trackdydz_fit2.Draw("samel")
2861 chamber_x_trackdydz_fit.Draw("samel")
2862
2863 pads[7].cd()
2864 chamber_dxdz_trackx.Draw("e1")
2865 if not suppressblue: chamber_dxdz_trackx_fit2.Draw("samel")
2866 chamber_dxdz_trackx_fit.Draw("samel")
2867
2868 pads[8].cd()
2869 chamber_dxdz_tracky.Draw("e1")
2870 if not suppressblue: chamber_dxdz_tracky_fit2.Draw("samel")
2871 chamber_dxdz_tracky_fit.Draw("samel")
2872
2873 pads[9].cd()
2874 chamber_dxdz_trackdxdz.Draw("e1")
2875 if not suppressblue: chamber_dxdz_trackdxdz_fit2.Draw("samel")
2876 chamber_dxdz_trackdxdz_fit.Draw("samel")
2877
2878 pads[10].cd()
2879 chamber_dxdz_trackdydz.Draw("e1")
2880 if not suppressblue: chamber_dxdz_trackdydz_fit2.Draw("samel")
2881 chamber_dxdz_trackdydz_fit.Draw("samel")
2882
2883 tn = time.time()
2884 ddt[8] = 1./ddt[7]*((ddt[7]-1)*ddt[8] + tn-t1)
2885
2886
2887
2888 def segdiff(tfiles, component, pair, **args):
2889 tdrStyle.SetOptFit(1)
2890 tdrStyle.SetOptTitle(1)
2891 tdrStyle.SetTitleBorderSize(1)
2892 tdrStyle.SetTitleFontSize(0.05)
2893 tdrStyle.SetStatW(0.2)
2894 tdrStyle.SetStatY(0.9)
2895 tdrStyle.SetStatFontSize(0.06)
2896
2897 if component[0:2] == "dt":
2898 wheel = args["wheel"]
2899 wheelletter = wheelLetter(wheel)
2900 sector = args["sector"]
2901 profname = "%s_%s_%02d_%s" % (component, wheelletter, sector, str(pair))
2902 posname = "pos" + profname
2903 negname = "neg" + profname
2904
2905
2906 station1 = int(str(pair)[0])
2907 station2 = int(str(pair)[1])
2908 phi1 = signConventions["DT", wheel, station1, sector][4]
2909 phi2 = signConventions["DT", wheel, station2, sector][4]
2910 if abs(phi1 - phi2) > 1.:
2911 if phi1 > phi2: phi1 -= 2.*pi
2912 else: phi1 += 2.*pi
2913 phi = (phi1 + phi2) / 2.
2914 while (phi < -pi): phi += 2.*pi
2915 while (phi > pi): phi -= 2.*pi
2916
2917 elif component[0:3] == "csc":
2918 endcap = args["endcap"]
2919 if endcap=="m":
2920 endcapnum=2
2921 endcapsign="-"
2922 elif endcap=="p":
2923 endcapnum=1
2924 endcapsign="+"
2925 else: raise Exception
2926
2927 ring = args["ring"]
2928 if ring>2 or ring<1: raise Exception
2929 station1 = int(str(pair)[0])
2930 station2 = int(str(pair)[1])
2931 if ring==1: ringname="inner"
2932 elif ring==2: ringname="outer"
2933 else: raise Exception
2934
2935 chamber = args["chamber"]
2936 if (ring==1 and chamber>18) or (ring==2 and chamber>36): raise Exception
2937
2938 profname = "csc%s_%s_%s_%02d_%s" % (ringname,component[4:], endcap, chamber, str(pair))
2939 posname = "pos" + profname
2940 negname = "neg" + profname
2941
2942
2943 station1 = int(str(pair)[0])
2944 station2 = int(str(pair)[1])
2945 phi1 = signConventions["CSC", endcapnum, station1, ring, chamber][4]
2946 phi2 = signConventions["CSC", endcapnum, station2, ring, chamber][4]
2947 if abs(phi1 - phi2) > 1.:
2948 if phi1 > phi2: phi1 -= 2.*pi
2949 else: phi1 += 2.*pi
2950 phi = (phi1 + phi2) / 2.
2951 while (phi < -pi*5./180.): phi += 2.*pi
2952 while (phi > pi*(2.-5./180.)): phi -= 2.*pi
2953
2954 else: raise Exception
2955
2956 if "window" in args: window = args["window"]
2957 else: window = 5.
2958
2959 global tmpprof, tmppos, tmpneg
2960 pdir = "AlignmentMonitorSegmentDifferences/iter1/"
2961 tmpprof = tfiles[0].Get(pdir + profname).Clone()
2962 tmpprof.SetMarkerStyle(8)
2963 tmppos = tfiles[0].Get(pdir + posname).Clone()
2964 tmpneg = tfiles[0].Get(pdir + negname).Clone()
2965 for tfile in tfiles[1:]:
2966 tmpprof.Add(tfile.Get(pdir + profname))
2967 tmppos.Add(tfile.Get(pdir + posname))
2968 tmpneg.Add(tfile.Get(pdir + negname))
2969
2970 for i in range(1, tmpprof.GetNbinsX()+1):
2971 if tmpprof.GetBinError(i) < 1e-5:
2972 tmpprof.SetBinError(i, 100.)
2973 tmpprof.SetAxisRange(-window, window, "Y")
2974
2975 f = ROOT.TF1("p1", "[0] + [1]*x", tmpprof.GetBinLowEdge(1), -tmpprof.GetBinLowEdge(1))
2976 f.SetParameters((tmppos.GetMean() + tmpneg.GetMean())/2., 0.)
2977
2978 tmpprof.SetXTitle("q/p_{T} (c/GeV)")
2979 if component == "dt13_resid":
2980 tmpprof.SetYTitle("#Deltax^{local} (mm)")
2981 tmppos.SetXTitle("#Deltax^{local} (mm)")
2982 tmpneg.SetXTitle("#Deltax^{local} (mm)")
2983 f.SetParNames("#Deltax^{local}_{0}", "Slope")
2984 if component == "dt13_slope":
2985 tmpprof.SetYTitle("#Deltadx/dz^{local} (mrad)")
2986 tmppos.SetXTitle("#Deltadx/dz^{local} (mrad)")
2987 tmpneg.SetXTitle("#Deltadx/dz^{local} (mrad)")
2988 f.SetParNames("#Deltadx/dz^{local}_{0}", "Slope")
2989 if component == "dt2_resid":
2990 tmpprof.SetYTitle("#Deltay^{local} (mm)")
2991 tmppos.SetXTitle("#Deltay^{local} (mm)")
2992 tmpneg.SetXTitle("#Deltay^{local} (mm)")
2993 f.SetParNames("#Deltay^{local}_{0}", "Slope")
2994 if component == "dt2_slope":
2995 tmpprof.SetYTitle("#Deltady/dz^{local} (mrad)")
2996 tmppos.SetXTitle("#Deltady/dz^{local} (mrad)")
2997 tmpneg.SetXTitle("#Deltady/dz^{local} (mrad)")
2998 f.SetParNames("#Deltady/dz^{local}_{0}", "Slope")
2999 if component == "csc_resid":
3000 tmpprof.SetXTitle("q/p_{z} (c/GeV)")
3001 tmpprof.SetYTitle("#Delta(r#phi)^{local} (mm)")
3002 tmppos.SetXTitle("#Delta(r#phi)^{local} (mm)")
3003 tmpneg.SetXTitle("#Delta(r#phi)^{local} (mm)")
3004 f.SetParNames("#Delta(r#phi)^{local}_{0}", "Slope")
3005 if component == "csc_slope":
3006 tmpprof.SetXTitle("q/p_{z} (c/GeV)")
3007 tmpprof.SetYTitle("#Deltad(r#phi)/dz^{local} (mrad)")
3008 tmppos.SetXTitle("#Deltad(r#phi)/dz^{local} (mrad)")
3009 tmpneg.SetXTitle("#Deltad(r#phi)/dz^{local} (mrad)")
3010 f.SetParNames("#Deltad(r#phi)/dz^{local}_{0}", "Slope")
3011
3012 tmpprof.GetXaxis().CenterTitle()
3013 tmpprof.GetYaxis().CenterTitle()
3014 tmppos.GetXaxis().CenterTitle()
3015 tmpneg.GetXaxis().CenterTitle()
3016 if component[0:2] == "dt":
3017 tmpprof.SetTitle("MB%d - MB%d, wheel %d, sector %02d" % (station1, station2, int(wheel), int(sector)))
3018 elif component[0:3] == "csc":
3019 tmpprof.SetTitle("ME%d - ME%d, for ME%s%d/%d/%d" % (station1, station2, endcapsign, station2, ring, chamber))
3020 else: raise Exception
3021
3022 tmppos.SetTitle("Positive muons")
3023 tmpneg.SetTitle("Negative muons")
3024
3025 c1.Clear()
3026 c1.Divide(2, 1)
3027 c1.GetPad(1).cd()
3028 fit1 = tmpprof.Fit("p1", "qS")
3029 tmpprof.Draw("e1")
3030 c1.GetPad(2).cd()
3031 c1.GetPad(2).Divide(1, 2)
3032 c1.GetPad(2).GetPad(1).cd()
3033 tmppos.Draw()
3034 f = ROOT.TF1("gausR", "[0]*exp(-(x - [1])**2 / 2. / [2]**2) / sqrt(2.*3.1415926) / [2]",
3035 tmppos.GetMean() - tmppos.GetRMS(), tmppos.GetMean() + tmppos.GetRMS())
3036 f.SetParameters(tmppos.GetEntries() * ((10. - -10.)/100.), tmppos.GetMean(), tmppos.GetRMS())
3037 f.SetParNames("Constant", "Mean", "Sigma")
3038 fit2 = tmppos.Fit("gausR", "qRS")
3039 c1.GetPad(2).GetPad(2).cd()
3040 tmpneg.Draw()
3041 f = ROOT.TF1("gausR", "[0]*exp(-(x - [1])**2 / 2. / [2]**2) / sqrt(2.*3.1415926) / [2]",
3042 tmpneg.GetMean() - tmpneg.GetRMS(), tmpneg.GetMean() + tmpneg.GetRMS())
3043 f.SetParameters(tmpneg.GetEntries() * ((10. - -10.)/100.), tmpneg.GetMean(), tmpneg.GetRMS())
3044 f.SetParNames("Constant", "Mean", "Sigma")
3045 fit3 = tmpneg.Fit("gausR", "qRS")
3046
3047 fit1ok = fit1.Status()==0 and fit1.CovMatrixStatus()==3
3048 fit2ok = fit2.Status()==0 and fit2.CovMatrixStatus()==3
3049 fit3ok = fit3.Status()==0 and fit3.CovMatrixStatus()==3
3050
3051 fitresult1 = None, None
3052 if fit1ok:
3053 fitresult1 = tmpprof.GetFunction("p1").GetParameter(0), tmpprof.GetFunction("p1").GetParError(0)
3054 fitresult2 = None, None
3055 if fit2ok and fit3ok:
3056 fitresult2 = (tmppos.GetFunction("gausR").GetParameter(1) + tmpneg.GetFunction("gausR").GetParameter(1)) / 2., \
3057 sqrt(tmppos.GetFunction("gausR").GetParError(1)**2 + tmpneg.GetFunction("gausR").GetParError(1)**2) / 2.
3058 return phi, fitresult1[0], fitresult1[1], fitresult2[0], fitresult2[1], fit1ok, fit2ok, fit3ok
3059
3060
3061
3062
3063
3064 def segdiff_xalign(tfiles, component, **args):
3065 tdrStyle.SetOptFit(1)
3066 tdrStyle.SetOptTitle(1)
3067 tdrStyle.SetTitleBorderSize(1)
3068 tdrStyle.SetTitleFontSize(0.05)
3069 tdrStyle.SetStatW(0.2)
3070 tdrStyle.SetStatY(0.9)
3071 tdrStyle.SetStatFontSize(0.06)
3072
3073 if component[0:4] == "x_dt":
3074 wheel = int(args["wheel"])
3075 if int(wheel)<0:
3076 wheell = "m%d" % abs(wheel)
3077 endcapsign="-"
3078 else:
3079 wheell = "p%d" % abs(wheel)
3080 endcapsign="+"
3081 station_dt = component[4]
3082 station_csc_1 = args["cscstations"][0]
3083 if station_csc_1=='1': ring_1 = 3
3084 else: ring_1 = 2
3085 sector = args["sector"]
3086 profname = "%s%s_W%sS%02d" % (component, station_csc_1, wheell, sector)
3087 posname_1 = "pos_" + profname
3088 negname_1 = "neg_" + profname
3089 if len(args["cscstations"]) > 1:
3090 station_csc_2 = args["cscstations"][1]
3091 if station_csc_2=='1': ring_2 = 3
3092 else: ring_2 = 2
3093 profname = "%s%s_W%sS%02d" % (component, station_csc_2, wheell, sector)
3094 posname_2 = "pos_" + profname
3095 negname_2 = "neg_" + profname
3096
3097 phi = signConventions["DT", wheel, int(station_dt), sector][4]
3098 while (phi < -pi): phi += 2.*pi
3099 while (phi > pi): phi -= 2.*pi
3100
3101 else: raise Exception
3102
3103 if "window" in args: window = args["window"]
3104 else: window = 5.
3105
3106 global tmppos, tmpneg, tmppos_2, tmpneg_2
3107 pdir = "AlignmentMonitorSegmentDifferences/iter1/"
3108 tmppos = tfiles[0].Get(pdir + posname_1).Clone()
3109 tmpneg = tfiles[0].Get(pdir + negname_1).Clone()
3110 if len(args["cscstations"]) > 1:
3111 tmppos_2 = tfiles[0].Get(pdir + posname_2).Clone()
3112 tmpneg_2 = tfiles[0].Get(pdir + negname_2).Clone()
3113 tmpneg.Rebin(2); tmppos.Rebin(2)
3114 for tfile in tfiles[1:]:
3115 tmppos.Add(tfile.Get(pdir + posname_1))
3116 tmpneg.Add(tfile.Get(pdir + negname_1))
3117 if len(args["cscstations"]) > 1:
3118 tmppos_2.Add(tfile.Get(pdir + posname_2))
3119 tmpneg_2.Add(tfile.Get(pdir + negname_2))
3120 tmpneg_2.Rebin(2); tmppos_2.Rebin(2)
3121
3122 result = {}
3123 result["fit_ok"] = False
3124 result["phi"] = phi
3125 ntot = tmppos.GetEntries() + tmpneg.GetEntries()
3126 if ntot == 0:
3127 return result
3128
3129 tmppos.SetXTitle("#Deltax^{loc}_{MB} - r_{DT}/r_{CSC}#times#Deltax^{loc}_{ME} (mm)")
3130 tmpneg.SetXTitle("#Deltax^{loc}_{MB} - r_{DT}/r_{CSC}#times#Deltax^{loc}_{ME} (mm)")
3131 title1 = "MB(W%+d St%s Sec%d) - ME%s%s/%d" % (wheel, station_dt, int(sector), endcapsign, station_csc_1, ring_1)
3132 tmppos.SetTitle("Positive #mu: %s" % title1);
3133 tmpneg.SetTitle("Negative #mu: %s" % title1);
3134 tmppos.GetXaxis().CenterTitle()
3135 tmpneg.GetXaxis().CenterTitle()
3136 if len(args["cscstations"]) > 1:
3137 tmppos.SetXTitle("#Deltax^{loc}_{DT} - r_{DT}/r_{CSC}#times#Deltax^{loc}_{CSC} (mm)")
3138 tmpneg.SetXTitle("#Deltax^{loc}_{DT} - r_{DT}/r_{CSC}#times#Deltax^{loc}_{CSC} (mm)")
3139 title2 = "MB(W%+d St%s Sec%d) - ME%s%s/%d" % (wheel, station_dt, int(sector), endcapsign, station_csc_2, ring_2)
3140 tmppos_2.SetTitle("Positive #mu: %s" % title2);
3141 tmpneg_2.SetTitle("Negative #mu: %s" % title2);
3142 tmppos_2.GetXaxis().CenterTitle()
3143 tmpneg_2.GetXaxis().CenterTitle()
3144
3145 c1.Clear()
3146 c1.Divide(2, 2)
3147
3148 c1.GetPad(1).cd()
3149 tmppos.Draw()
3150 fpos = ROOT.TF1("gpos", "gaus", tmppos.GetMean() - tmppos.GetRMS(), tmppos.GetMean() + tmppos.GetRMS())
3151 fpos.SetParameters(tmppos.GetEntries() * 2.5, tmppos.GetMean(), tmppos.GetRMS())
3152 fit_pos = tmppos.Fit("gpos", "qRS")
3153
3154 c1.GetPad(3).cd()
3155 tmpneg.Draw()
3156 fneg = ROOT.TF1("gneg", "gaus", tmpneg.GetMean() - tmpneg.GetRMS(), tmpneg.GetMean() + tmpneg.GetRMS())
3157 fneg.SetParameters(tmpneg.GetEntries() * 2.5, tmpneg.GetMean(), tmpneg.GetRMS())
3158 fit_neg = tmpneg.Fit("gneg", "qRS")
3159
3160 result["fit_ok"] = (fit_pos.Status()==0 and fit_pos.CovMatrixStatus()==3 and fit_neg.Status()==0 and fit_neg.CovMatrixStatus()==3)
3161 result["fit_peak"] = (fpos.GetParameter(1)*tmppos.GetEntries() + fneg.GetParameter(1)*tmpneg.GetEntries()) / ntot
3162 result["fit_peak_error"] = sqrt( (fpos.GetParError(1)*tmppos.GetEntries())**2 + (fneg.GetParError(1)*tmpneg.GetEntries())**2) / ntot
3163
3164 if len(args["cscstations"]) > 1:
3165 c1.GetPad(2).cd()
3166 tmppos_2.Draw()
3167 fpos_2 = ROOT.TF1("gpos2", "gaus", tmppos_2.GetMean() - tmppos_2.GetRMS(), tmppos_2.GetMean() + tmppos_2.GetRMS())
3168 fpos_2.SetParameters(tmppos_2.GetEntries() * 2.5, tmppos_2.GetMean(), tmppos_2.GetRMS())
3169 fit_pos_2 = tmppos_2.Fit("gpos2", "qRS")
3170
3171 c1.GetPad(4).cd()
3172 tmpneg_2.Draw()
3173 fneg_2 = ROOT.TF1("gneg2", "gaus", tmpneg_2.GetMean() - tmpneg_2.GetRMS(), tmpneg_2.GetMean() + tmpneg_2.GetRMS())
3174 fneg_2.SetParameters(tmpneg_2.GetEntries() * 2.5, tmpneg_2.GetMean(), tmpneg_2.GetRMS())
3175 fit_neg_2 = tmpneg_2.Fit("gneg2", "qRS")
3176
3177 result["fit_ok_2"] = (fit_pos_2.Status()==0 and fit_pos_2.CovMatrixStatus()==3 and fit_neg_2.Status()==0 and fit_neg_2.CovMatrixStatus()==3)
3178 ntot = tmppos_2.GetEntries() + tmpneg_2.GetEntries()
3179 result["fit_peak_2"] = (fpos_2.GetParameter(1)*tmppos_2.GetEntries() + fneg_2.GetParameter(1)*tmpneg_2.GetEntries()) / ntot
3180 result["fit_peak_error_2"] = sqrt( (fpos_2.GetParError(1)*tmppos_2.GetEntries())**2 + (fneg_2.GetParError(1)*tmpneg_2.GetEntries())**2) / ntot
3181
3182 return result
3183
3184
3185
3186 def segdiffvsphi_xalign(tfiles, wheel, window=10.):
3187 tdrStyle.SetOptTitle(1)
3188 tdrStyle.SetTitleBorderSize(1)
3189 tdrStyle.SetTitleFontSize(0.05)
3190
3191 global htemp, gtemp_12, gtemp_21, gtemp_11, tlegend
3192 htemp = ROOT.TH1F("htemp", "", 1, -pi, pi)
3193 gtemp_11_phi, gtemp_11_val, gtemp_11_err = [], [], []
3194 gtemp_12_phi, gtemp_12_val, gtemp_12_err = [], [], []
3195 gtemp_21_phi, gtemp_21_val, gtemp_21_err = [], [], []
3196 for sector in range(1, 12+1):
3197
3198 r1 = segdiff_xalign(tfiles, "x_dt1_csc", wheel=wheel, sector=sector, cscstations = "12")
3199 r2 = segdiff_xalign(tfiles, "x_dt2_csc", wheel=wheel, sector=sector, cscstations = "1")
3200
3201 if r1["fit_ok"]:
3202 gtemp_11_phi.append(r1["phi"])
3203 gtemp_11_val.append(r1["fit_peak"])
3204 gtemp_11_err.append(r1["fit_peak_error"])
3205 if r1["fit_ok_2"]:
3206 gtemp_12_phi.append(r1["phi"])
3207 gtemp_12_val.append(r1["fit_peak_2"])
3208 gtemp_12_err.append(r1["fit_peak_error_2"])
3209 if r2["fit_ok"]:
3210 gtemp_21_phi.append(r2["phi"])
3211 gtemp_21_val.append(r2["fit_peak"])
3212 gtemp_21_err.append(r2["fit_peak_error"])
3213
3214
3215
3216
3217 if len(gtemp_11_phi) > 0:
3218 gtemp_11 = ROOT.TGraphErrors(len(gtemp_11_phi), array.array("d", gtemp_11_phi), array.array("d", gtemp_11_val),
3219 array.array("d", [0.] * len(gtemp_11_phi)), array.array("d", gtemp_11_err))
3220 if len(gtemp_12_phi) > 0:
3221 gtemp_12 = ROOT.TGraphErrors(len(gtemp_12_phi), array.array("d", gtemp_12_phi), array.array("d", gtemp_12_val),
3222 array.array("d", [0.] * len(gtemp_12_phi)), array.array("d", gtemp_12_err))
3223 if len(gtemp_11_phi) > 0:
3224 gtemp_21 = ROOT.TGraphErrors(len(gtemp_21_phi), array.array("d", gtemp_21_phi), array.array("d", gtemp_21_val),
3225 array.array("d", [0.] * len(gtemp_21_phi)), array.array("d", gtemp_21_err))
3226
3227 if len(gtemp_11_phi) > 0:
3228 gtemp_11.SetMarkerStyle(20); gtemp_11.SetMarkerSize(1.5);
3229 gtemp_11.SetMarkerColor(ROOT.kRed); gtemp_11.SetLineColor(ROOT.kRed)
3230 if len(gtemp_12_phi) > 0:
3231 gtemp_12.SetMarkerStyle(22); gtemp_12.SetMarkerSize(1.);
3232 gtemp_12.SetMarkerColor(ROOT.kGreen+2); gtemp_12.SetLineColor(ROOT.kGreen+2)
3233 if len(gtemp_21_phi) > 0:
3234 gtemp_21.SetMarkerStyle(21); gtemp_21.SetMarkerSize(1.5);
3235 gtemp_21.SetMarkerColor(ROOT.kBlue); gtemp_21.SetLineColor(ROOT.kBlue)
3236
3237 htemp.SetTitle("Wheel %+d" % wheel)
3238 htemp.SetAxisRange(-window, window, "Y")
3239 htemp.SetXTitle("#phi of MB")
3240 htemp.SetYTitle("#Deltax^{loc}_{DT} - r_{DT}/r_{CSC}#times#Deltax^{loc}_{CSC} (mm)")
3241 htemp.GetXaxis().CenterTitle()
3242 htemp.GetYaxis().CenterTitle()
3243 htemp.GetYaxis().SetTitleOffset(0.75)
3244
3245 c1.Clear()
3246 htemp.Draw()
3247 if len(gtemp_12_phi) > 0:
3248 gtemp_12.Draw("p")
3249 if len(gtemp_21_phi) > 0:
3250 gtemp_21.Draw("p")
3251 if len(gtemp_11_phi) > 0:
3252 gtemp_11.Draw("p")
3253
3254 tlegend = ROOT.TLegend(0.59, 0.75, 0.99, 0.92)
3255 tlegend.SetBorderSize(0)
3256 tlegend.SetFillColor(ROOT.kWhite)
3257 if len(gtemp_11_phi) > 0:
3258 tlegend.AddEntry(gtemp_11, "MB1 - ME1/3 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_11_val), stdev(gtemp_11_val)), "pl")
3259 if len(gtemp_21_phi) > 0:
3260 tlegend.AddEntry(gtemp_21, "MB2 - ME1/3 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_21_val), stdev(gtemp_21_val)), "pl")
3261 if len(gtemp_12_phi) > 0:
3262 tlegend.AddEntry(gtemp_12, "MB1 - ME2/2 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_12_val), stdev(gtemp_12_val)), "pl")
3263
3264
3265
3266
3267 tlegend.Draw()
3268
3269 f_11 = ROOT.TF1("f11", "[0] + [1]*sin(x) + [2]*cos(x)", -pi, pi)
3270 f_11.SetLineColor(ROOT.kRed)
3271 f_11.SetLineWidth(2)
3272 f_21 = ROOT.TF1("f21", "[0] + [1]*sin(x) + [2]*cos(x)", -pi, pi)
3273 f_21.SetLineColor(ROOT.kBlue)
3274 f_21.SetLineWidth(2)
3275 if len(gtemp_11_phi) > 0:
3276 gtemp_11.Fit(f_11,"")
3277 if len(gtemp_21_phi) > 0:
3278 gtemp_21.Fit(f_21,"")
3279
3280 global f_txt,f_11_txt, f_21_txt
3281 f_txt = ROOT.TLatex(-2.9, -0.7*window, "ME1/3 ring corrections equivalents:")
3282 f_txt.SetTextSize(0.028)
3283 f_txt.Draw()
3284 if len(gtemp_11_phi) > 0:
3285 rdt = signConventions[("DT", 2, 1, 1)][3]*10
3286 f_11_txt = ROOT.TLatex(-2.9, -0.8*window, "#Deltax=%.2f#pm%.2f mm #Deltay=%.2f#pm%.2f mm #Delta#phi_{z}=%.2f#pm%.2f mrad" % (
3287 -f_11.GetParameter(1), f_11.GetParError(1), f_11.GetParameter(2), f_11.GetParError(2), -f_11.GetParameter(0)/rdt*1000, f_11.GetParError(0)/rdt*1000))
3288 f_11_txt.SetTextSize(0.028)
3289 f_11_txt.SetTextColor(ROOT.kRed)
3290 f_11_txt.Draw()
3291 if len(gtemp_11_phi) > 0:
3292 rdt = signConventions[("DT", 2, 2, 1)][3]*10
3293 f_21_txt = ROOT.TLatex(-2.9, -0.9*window, "#Deltax=%.2f#pm%.2f mm #Deltay=%.2f#pm%.2f mm #Delta#phi_{z}=%.2f#pm%.2f mrad" % (
3294 -f_21.GetParameter(1), f_21.GetParError(1), f_21.GetParameter(2), f_21.GetParError(2), -f_21.GetParameter(0)/rdt*1000, f_21.GetParError(0)/rdt*1000))
3295 f_21_txt.SetTextSize(0.028)
3296 f_21_txt.SetTextColor(ROOT.kBlue)
3297 f_21_txt.Draw()
3298
3299
3300
3301 def segdiffvsphi(tfiles, reports, component, wheel, window=5., excludesectors=()):
3302 tdrStyle.SetOptTitle(1)
3303 tdrStyle.SetTitleBorderSize(1)
3304 tdrStyle.SetTitleFontSize(0.05)
3305
3306 global htemp, gtemp_12, gtemp2_12, gtemp_23, gtemp2_23, gtemp_34, gtemp2_34, tlegend
3307 htemp = ROOT.TH1F("htemp", "", 1, -pi, pi)
3308 gtemp_12_phi, gtemp_12_val, gtemp_12_err, gtemp_12_val2, gtemp_12_err2 = [], [], [], [], []
3309 gtemp_23_phi, gtemp_23_val, gtemp_23_err, gtemp_23_val2, gtemp_23_err2 = [], [], [], [], []
3310 gtemp_34_phi, gtemp_34_val, gtemp_34_err, gtemp_34_val2, gtemp_34_err2 = [], [], [], [], []
3311 for sector in range(1, 12+1):
3312
3313 r1_found, r2_found, r3_found, r4_found = False, False, False, False
3314 for r1 in reports:
3315 if r1.postal_address == ("DT", wheel, 1, sector):
3316 r1_found = True
3317 break
3318 for r2 in reports:
3319 if r2.postal_address == ("DT", wheel, 2, sector):
3320 r2_found = True
3321 break
3322 for r3 in reports:
3323 if r3.postal_address == ("DT", wheel, 3, sector):
3324 r3_found = True
3325 break
3326 for r4 in reports:
3327 if r4.postal_address == ("DT", wheel, 4, sector):
3328 r4_found = True
3329 break
3330
3331
3332 if sector not in excludesectors:
3333 if r1_found and r2_found and r1.status == "PASS" and r2.status == "PASS":
3334 phi, val, err, val2, err2, fit1, fit2, fit3 = segdiff(tfiles, component, 12, wheel=wheel, sector=sector)
3335
3336 if fit1 and fit2 and fit3:
3337 gtemp_12_phi.append(phi)
3338 gtemp_12_val.append(val)
3339 gtemp_12_err.append(err)
3340 gtemp_12_val2.append(val2)
3341 gtemp_12_err2.append(err2)
3342 if r2_found and r3_found and r2.status == "PASS" and r3.status == "PASS":
3343 phi, val, err, val2, err2, fit1, fit2, fit3 = segdiff(tfiles, component, 23, wheel=wheel, sector=sector)
3344
3345 if fit1 and fit2 and fit3:
3346 gtemp_23_phi.append(phi)
3347 gtemp_23_val.append(val)
3348 gtemp_23_err.append(err)
3349 gtemp_23_val2.append(val2)
3350 gtemp_23_err2.append(err2)
3351 if component[:4] == "dt13":
3352 if r3_found and r4_found and r3.status == "PASS" and r4.status == "PASS":
3353 phi, val, err, val2, err2, fit1, fit2, fit3 = segdiff(tfiles, component, 34, wheel=wheel, sector=sector)
3354
3355 if fit1 and fit2 and fit3:
3356 gtemp_34_phi.append(phi)
3357 gtemp_34_val.append(val)
3358 gtemp_34_err.append(err)
3359 gtemp_34_val2.append(val2)
3360 gtemp_34_err2.append(err2)
3361
3362
3363
3364
3365 if len(gtemp_12_phi) > 0:
3366 gtemp_12 = ROOT.TGraphErrors(len(gtemp_12_phi), array.array("d", gtemp_12_phi), array.array("d", gtemp_12_val),
3367 array.array("d", [0.] * len(gtemp_12_phi)), array.array("d", gtemp_12_err))
3368 gtemp2_12 = ROOT.TGraphErrors(len(gtemp_12_phi), array.array("d", gtemp_12_phi), array.array("d", gtemp_12_val2),
3369 array.array("d", [0.] * len(gtemp_12_phi)), array.array("d", gtemp_12_err2))
3370 if len(gtemp_23_phi) > 0:
3371 gtemp_23 = ROOT.TGraphErrors(len(gtemp_23_phi), array.array("d", gtemp_23_phi), array.array("d", gtemp_23_val),
3372 array.array("d", [0.] * len(gtemp_23_phi)), array.array("d", gtemp_23_err))
3373 gtemp2_23 = ROOT.TGraphErrors(len(gtemp_23_phi), array.array("d", gtemp_23_phi), array.array("d", gtemp_23_val2),
3374 array.array("d", [0.] * len(gtemp_23_phi)), array.array("d", gtemp_23_err2))
3375 if len(gtemp_34_phi) > 0:
3376 gtemp_34 = ROOT.TGraphErrors(len(gtemp_34_phi), array.array("d", gtemp_34_phi), array.array("d", gtemp_34_val),
3377 array.array("d", [0.] * len(gtemp_34_phi)), array.array("d", gtemp_34_err))
3378 gtemp2_34 = ROOT.TGraphErrors(len(gtemp_34_phi), array.array("d", gtemp_34_phi), array.array("d", gtemp_34_val2),
3379 array.array("d", [0.] * len(gtemp_34_phi)), array.array("d", gtemp_34_err2))
3380
3381 if len(gtemp_12_phi) > 0:
3382 gtemp_12.SetMarkerStyle(20); gtemp_12.SetMarkerSize(1.);
3383 gtemp_12.SetMarkerColor(ROOT.kBlue); gtemp_12.SetLineColor(ROOT.kBlue)
3384 gtemp2_12.SetMarkerStyle(24); gtemp2_12.SetMarkerSize(1.);
3385 gtemp2_12.SetMarkerColor(ROOT.kBlue); gtemp2_12.SetLineColor(ROOT.kBlue)
3386 if len(gtemp_23_phi) > 0:
3387 gtemp_23.SetMarkerStyle(21); gtemp_23.SetMarkerSize(1.);
3388 gtemp_23.SetMarkerColor(ROOT.kRed); gtemp_23.SetLineColor(ROOT.kRed)
3389 gtemp2_23.SetMarkerStyle(25); gtemp2_23.SetMarkerSize(1.);
3390 gtemp2_23.SetMarkerColor(ROOT.kRed); gtemp2_23.SetLineColor(ROOT.kRed)
3391 if len(gtemp_34_phi) > 0 and component[:4] == "dt13":
3392 gtemp_34.SetMarkerStyle(22); gtemp_34.SetMarkerSize(1.25);
3393 gtemp_34.SetMarkerColor(ROOT.kGreen+2); gtemp_34.SetLineColor(ROOT.kGreen+2)
3394 gtemp2_34.SetMarkerStyle(26); gtemp2_34.SetMarkerSize(1.25);
3395 gtemp2_34.SetMarkerColor(ROOT.kGreen+2); gtemp2_34.SetLineColor(ROOT.kGreen+2)
3396
3397 if wheel == 0: htemp.SetTitle("Wheel %d" % wheel)
3398 else: htemp.SetTitle("Wheel %+d" % wheel)
3399 htemp.SetAxisRange(-window, window, "Y")
3400 htemp.SetXTitle("Average #phi of pair (rad)")
3401 if component == "dt13_resid": htemp.SetYTitle("#Deltax^{local} (mm)")
3402 if component == "dt13_slope": htemp.SetYTitle("#Deltadx/dz^{local} (mrad)")
3403 if component == "dt2_resid": htemp.SetYTitle("#Deltay^{local} (mm)")
3404 if component == "dt2_slope": htemp.SetYTitle("#Deltady/dz^{local} (mrad)")
3405 htemp.GetXaxis().CenterTitle()
3406 htemp.GetYaxis().CenterTitle()
3407 htemp.GetYaxis().SetTitleOffset(0.75)
3408
3409 c1.Clear()
3410 htemp.Draw()
3411 if len(gtemp_12_phi) > 0:
3412 gtemp_12.Draw("p")
3413 gtemp2_12.Draw("p")
3414 if len(gtemp_23_phi) > 0:
3415 gtemp_23.Draw("p")
3416 gtemp2_23.Draw("p")
3417 if len(gtemp_34_phi) > 0:
3418 gtemp_34.Draw("p")
3419 gtemp2_34.Draw("p")
3420
3421 tlegend = ROOT.TLegend(0.5, 0.72, 0.9, 0.92)
3422 tlegend.SetBorderSize(0)
3423 tlegend.SetFillColor(ROOT.kWhite)
3424 if len(gtemp_12_phi) > 0:
3425 tlegend.AddEntry(gtemp_12, "MB1 - MB2 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_12_val), stdev(gtemp_12_val)), "pl")
3426 if len(gtemp_23_phi) > 0:
3427 tlegend.AddEntry(gtemp_23, "MB2 - MB3 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_23_val), stdev(gtemp_23_val)), "pl")
3428 if len(gtemp_34_phi) > 0:
3429 tlegend.AddEntry(gtemp_34, "MB3 - MB4 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_34_val), stdev(gtemp_34_val)), "pl")
3430 if len(gtemp_12_phi) > 0:
3431 tlegend.AddEntry(gtemp_12, "total mean: %4.2f, total RMS: %4.2f" % \
3432 (mean(gtemp_12_val + gtemp_23_val + gtemp_34_val),
3433 stdev(gtemp_12_val + gtemp_23_val + gtemp_34_val)), "")
3434 tlegend.Draw()
3435
3436
3437
3438
3439 def segdiffvsphicsc(tfiles, component, pair, window=5., **args):
3440 tdrStyle.SetOptTitle(1)
3441 tdrStyle.SetTitleBorderSize(1)
3442 tdrStyle.SetTitleFontSize(0.05)
3443
3444 if not component[0:3] == "csc": Exception
3445
3446 endcap = args["endcap"]
3447 if endcap=="m":
3448 endcapnum=2
3449 endcapsign="-"
3450 elif endcap=="p":
3451 endcapnum=1
3452 endcapsign="+"
3453 else: raise Exception
3454
3455 station1 = int(str(pair)[0])
3456 station2 = int(str(pair)[1])
3457 if not station2-station1==1: raise Exception
3458
3459 rings = [1,2]
3460 if station2==4: rings = [1]
3461
3462
3463 global htemp, gtemp_1, gtemp2_1, gtemp_2, gtemp2_2, tlegend
3464 htemp = ROOT.TH1F("htemp", "", 1, -pi*5./180., pi*(2.-5./180.))
3465 gtemp_1_phi, gtemp_1_val, gtemp_1_err, gtemp_1_val2, gtemp_1_err2 = [], [], [], [], []
3466 gtemp_2_phi, gtemp_2_val, gtemp_2_err, gtemp_2_val2, gtemp_2_err2 = [], [], [], [], []
3467
3468 for ring in rings:
3469 chambers = range(1,37)
3470 if ring == 1: chambers = range(1,19)
3471
3472 for chamber in chambers:
3473 phi, val, err, val2, err2, fit1, fit2, fit3 = segdiff(tfiles, component, pair, endcap=endcap, ring=ring, chamber=chamber)
3474 if fit1 and fit2 and fit3:
3475 if ring==1:
3476 gtemp_1_phi.append(phi)
3477 gtemp_1_val.append(val)
3478 gtemp_1_err.append(err)
3479 gtemp_1_val2.append(val2)
3480 gtemp_1_err2.append(err2)
3481 if ring==2:
3482 gtemp_2_phi.append(phi)
3483 gtemp_2_val.append(val)
3484 gtemp_2_err.append(err)
3485 gtemp_2_val2.append(val2)
3486 gtemp_2_err2.append(err2)
3487
3488
3489
3490
3491 if len(gtemp_1_phi) > 0:
3492 gtemp_1 = ROOT.TGraphErrors(len(gtemp_1_phi), array.array("d", gtemp_1_phi), array.array("d", gtemp_1_val),
3493 array.array("d", [0.] * len(gtemp_1_phi)), array.array("d", gtemp_1_err))
3494 gtemp2_1 = ROOT.TGraphErrors(len(gtemp_1_phi), array.array("d", gtemp_1_phi), array.array("d", gtemp_1_val2),
3495 array.array("d", [0.] * len(gtemp_1_phi)), array.array("d", gtemp_1_err2))
3496 if len(gtemp_2_phi) > 0:
3497 gtemp_2 = ROOT.TGraphErrors(len(gtemp_2_phi), array.array("d", gtemp_2_phi), array.array("d", gtemp_2_val),
3498 array.array("d", [0.] * len(gtemp_2_phi)), array.array("d", gtemp_2_err))
3499 gtemp2_2 = ROOT.TGraphErrors(len(gtemp_2_phi), array.array("d", gtemp_2_phi), array.array("d", gtemp_2_val2),
3500 array.array("d", [0.] * len(gtemp_2_phi)), array.array("d", gtemp_2_err2))
3501
3502 if len(gtemp_1_phi) > 0:
3503 gtemp_1.SetMarkerStyle(20); gtemp_1.SetMarkerSize(1.);
3504 gtemp_1.SetMarkerColor(ROOT.kBlue); gtemp_1.SetLineColor(ROOT.kBlue)
3505 gtemp2_1.SetMarkerStyle(24); gtemp2_1.SetMarkerSize(1.);
3506 gtemp2_1.SetMarkerColor(ROOT.kBlue); gtemp2_1.SetLineColor(ROOT.kBlue)
3507 if len(gtemp_2_phi) > 0:
3508 gtemp_2.SetMarkerStyle(21); gtemp_2.SetMarkerSize(1.);
3509 gtemp_2.SetMarkerColor(ROOT.kRed); gtemp_2.SetLineColor(ROOT.kRed)
3510 gtemp2_2.SetMarkerStyle(25); gtemp2_2.SetMarkerSize(1.);
3511 gtemp2_2.SetMarkerColor(ROOT.kRed); gtemp2_2.SetLineColor(ROOT.kRed)
3512
3513 htemp.SetTitle("ME%s%d - ME%s%d" % (endcapsign,station2,endcapsign,station1))
3514 htemp.SetAxisRange(-window, window, "Y")
3515 htemp.SetXTitle("Average #phi of pair (rad)")
3516 if component == "csc_resid": htemp.SetYTitle("#Delta(r#phi)^{local} (mm)")
3517 if component == "csc_slope": htemp.SetYTitle("#Deltad(r#phi)/dz^{local} (mrad)")
3518 htemp.GetXaxis().CenterTitle()
3519 htemp.GetYaxis().CenterTitle()
3520 htemp.GetYaxis().SetTitleOffset(0.75)
3521
3522 c1.Clear()
3523 htemp.Draw()
3524 if len(gtemp_1_phi) > 0:
3525 gtemp_1.Draw("p")
3526 gtemp2_1.Draw("p")
3527 if len(gtemp_2_phi) > 0:
3528 gtemp_2.Draw("p")
3529 gtemp2_2.Draw("p")
3530
3531 tlegend = ROOT.TLegend(0.5, 0.72, 0.9, 0.92)
3532 tlegend.SetBorderSize(0)
3533 tlegend.SetFillColor(ROOT.kWhite)
3534 if len(gtemp_1_phi) > 0:
3535 tlegend.AddEntry(gtemp_1, "ring 1 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_1_val), stdev(gtemp_1_val)), "pl")
3536 if len(gtemp_2_phi) > 0:
3537 tlegend.AddEntry(gtemp_2, "ring 2 (mean: %4.2f, RMS: %4.2f)" % (mean(gtemp_2_val), stdev(gtemp_2_val)), "pl")
3538
3539
3540
3541
3542 tlegend.Draw()
3543
3544
3545
3546
3547
3548
3549
3550 def corrections2D(reportsX=None, reportsY=None, geometry0=None, geometryX=None, geometryY=None,
3551 window=25., selection=None, name="tmp", canvas=None, pre_title_x=None, pre_title_y=None,
3552 which="110011"):
3553
3554 tdrStyle.SetOptStat(0)
3555 tdrStyle.SetStatW(0.40)
3556
3557
3558 mode = None
3559 check_reports = False
3560 if reportsX is not None and reportsY is not None:
3561 mode = "reports"
3562 check_reports = True
3563 if geometry0 is not None and geometryX is not None and geometryY is not None:
3564 mode = "xmls"
3565 if mode is None:
3566 print("Either couple of reports or three geometries have to be given as input. Exiting...")
3567 return
3568
3569
3570 wnd = [window]*6
3571 wnd_adaptive = [.1]*6
3572
3573 global hx, hy, hz, hphix, hphiy, hphiz
3574 bins=2000
3575 hx = ROOT.TH2F("%s_x" % name, "", bins, -wnd[0], wnd[0], bins, -wnd[0], wnd[0])
3576 hy = ROOT.TH2F("%s_y" % name, "", bins, -wnd[1], wnd[1], bins, -wnd[1], wnd[1])
3577 hz = ROOT.TH2F("%s_z" % name, "", bins, -wnd[2], wnd[2], bins, -wnd[2], wnd[2])
3578 hphix = ROOT.TH2F("%s_phix" % name, "", bins, -wnd[3], wnd[3], bins, -wnd[3], wnd[3])
3579 hphiy = ROOT.TH2F("%s_phiy" % name, "", bins, -wnd[4], wnd[4], bins, -wnd[4], wnd[4])
3580 hphiz = ROOT.TH2F("%s_phiz" % name, "", bins, -wnd[5], wnd[5], bins, -wnd[5], wnd[5])
3581 hhh = [hx, hy, hz, hphix, hphiy, hphiz]
3582
3583
3584 global pca_x, pca_y, pca_z, pca_phix, pca_phiy, pca_phiz
3585 pca_x = ROOT.TPrincipal(2,"D")
3586 pca_y = ROOT.TPrincipal(2,"D")
3587 pca_z = ROOT.TPrincipal(2,"D")
3588 pca_phix = ROOT.TPrincipal(2,"D")
3589 pca_phiy = ROOT.TPrincipal(2,"D")
3590 pca_phiz = ROOT.TPrincipal(2,"D")
3591 pcas = [pca_x, pca_y, pca_z, pca_phix, pca_phiy, pca_phiz]
3592
3593
3594 ax=[]; ay=[]; az=[]; aphix=[]; aphiy=[]; aphiz=[]
3595 aaa = [ax, ay, az, aphix, aphiy, aphiz]
3596
3597
3598 postal_addresses = []
3599
3600
3601 if check_reports:
3602 for r1 in reportsX:
3603
3604 if r1.postal_address[0]=='CSC' and r1.postal_address[2]==1 and r1.postal_address[3]==4: continue
3605 if selection is None or (selection.__code__.co_argcount == len(r1.postal_address) and selection(*r1.postal_address)):
3606 r2 = getReportByPostalAddress(r1.postal_address, reportsY)
3607 if r2 is None:
3608 print("bad r2 in ",r1.postal_address)
3609 continue
3610
3611 if r1.status != "PASS" or r2.status != "PASS":
3612 print("bad status", r1.postal_address, r1.status, r2.status)
3613 continue
3614 postal_addresses.append(r1.postal_address)
3615
3616 else:
3617 for key in geometry0.dt.keys():
3618 if len(key)==3 and key in geometryX.dt and key in geometryY.dt:
3619 postal_addresses.append( tuple(['DT'] + list(key)) )
3620 for key in geometry0.csc.keys():
3621
3622 if key[2]==1 and key[3]==4: continue
3623 if len(key)==4 and key in geometryX.csc and key in geometryY.csc:
3624 postal_addresses.append( tuple(['CSC'] + list(key)) )
3625
3626
3627 for addr in postal_addresses:
3628
3629
3630 if not (selection is None or (selection.__code__.co_argcount == len(addr) and selection(*addr)) ): continue
3631
3632 factors = [10. * signConventions[addr][0], 10. * signConventions[addr][1], 10. * signConventions[addr][2],
3633 1000., 1000., 1000. ]
3634
3635 if check_reports:
3636 rX = getReportByPostalAddress(addr, reportsX)
3637 rY = getReportByPostalAddress(addr, reportsY)
3638 deltasX = [rX.deltax, rX.deltay, rX.deltaz, rX.deltaphix, rX.deltaphiy, rX.deltaphiz]
3639 deltasY = [rY.deltax, rY.deltay, rY.deltaz, rY.deltaphix, rY.deltaphiy, rY.deltaphiz]
3640
3641 if mode == "reports":
3642
3643 checks = map( lambda d1, d2: d1 is not None and d2 is not None and d1.error is not None \
3644 and d2.error is not None and (d1.error**2 + d2.error**2) > 0. , \
3645 deltasX, deltasY)
3646
3647 for i in range(len(checks)):
3648 if not checks[i]: continue
3649 fillX = deltasX[i].value * factors[i]
3650 fillY = deltasY[i].value * factors[i]
3651 aaa[i].append([fillX,fillY])
3652 pcas[i].AddRow(array.array('d',[fillX,fillY]))
3653 mx = max(abs(fillX), abs(fillY))
3654 if mx > wnd_adaptive[i]: wnd_adaptive[i] = mx
3655
3656 if mode == "xmls":
3657
3658 db0 = dbX = dbY = None
3659 if addr[0] == "DT":
3660 db0, dbX, dbY = geometry0.dt[addr[1:]], geometryX.dt[addr[1:]], geometryY.dt[addr[1:]]
3661 if addr[0] == 'CSC':
3662 db0, dbX, dbY = geometry0.csc[addr[1:]], geometryX.csc[addr[1:]], geometryY.csc[addr[1:]]
3663
3664 checks = [True]*6
3665 if check_reports:
3666 checks = map( lambda d1, d2: d1 is not None and d2 is not None , deltasX, deltasY)
3667
3668 gdeltas0 = [db0.x, db0.y, db0.z, db0.phix, db0.phiy, db0.phiz]
3669 gdeltasX = [dbX.x, dbX.y, dbX.z, dbX.phix, dbX.phiy, dbX.phiz]
3670 gdeltasY = [dbY.x, dbY.y, dbY.z, dbY.phix, dbY.phiy, dbY.phiz]
3671
3672 for i in range(len(checks)):
3673 if not checks[i]: continue
3674 fillX = (gdeltasX[i] - gdeltas0[i]) * factors[i]
3675 fillY = (gdeltasY[i] - gdeltas0[i]) * factors[i]
3676 aaa[i].append([fillX,fillY])
3677 pcas[i].AddRow(array.array('d',[fillX,fillY]))
3678 mx = max(abs(fillX), abs(fillY))
3679 if mx > wnd_adaptive[i]: wnd_adaptive[i] = mx
3680
3681
3682
3683
3684 if mode == "xmls":
3685 if pre_title_x is None: pre_title_x = "geometry 1 "
3686 if pre_title_y is None: pre_title_y = "geometry 2 "
3687 if mode == "reports":
3688 if pre_title_x is None: pre_title_x = "iteration's "
3689 if pre_title_y is None: pre_title_y = "other iteration's "
3690 tmptitles = ["#Deltax (mm)", "#Deltay (mm)", "#Deltaz (mm)",
3691 "#Delta#phi_{x} (mrad)", "#Delta#phi_{y} (mrad)", "#Delta#phi_{z} (mrad)"]
3692 htitles = []
3693 for t in tmptitles: htitles.append([pre_title_x + t, pre_title_y + t])
3694
3695 if canvas is not None: c = canvas
3696 else: c = c1
3697 c.Clear()
3698 ndraw = which.count('1')
3699 if ndraw > 4: c.Divide(3, 2)
3700 elif ndraw > 2: c.Divide(2, 2)
3701 elif ndraw > 1: c.Divide(2, 1)
3702
3703 global lines, graphs, texs
3704 lines = []; graphs = []; texs = []
3705
3706 ipad = 0
3707 for i in range(6):
3708
3709
3710 if ( int(which,2) & (1<<i) ) == 0: continue
3711
3712 ipad += 1
3713 c.GetPad(ipad).cd()
3714 c.GetPad(ipad).SetGridx(1)
3715 c.GetPad(ipad).SetGridy(1)
3716
3717 wn = 1.08 * wnd_adaptive[i]
3718 hhh[i].GetXaxis().SetRangeUser(-wn, wn)
3719 hhh[i].GetYaxis().SetRangeUser(-wn, wn)
3720 hhh[i].SetXTitle(htitles[i][0])
3721 hhh[i].SetYTitle(htitles[i][1])
3722 hhh[i].GetXaxis().CenterTitle()
3723 hhh[i].GetYaxis().CenterTitle()
3724 hhh[i].Draw()
3725
3726 if len(aaa[i]) == 0: continue
3727
3728 a1, a2 = map( lambda x: array.array('d',x), list(zip(*aaa[i])) )
3729 g = ROOT.TGraph(len(a1), a1, a2)
3730 g.SetMarkerStyle(5)
3731 g.SetMarkerSize(0.3)
3732 g.SetMarkerColor(ROOT.kBlue)
3733 graphs.append(g)
3734
3735 pcas[i].MakePrincipals()
3736
3737
3738 b = pcas[i].GetEigenVectors()(1,0) / pcas[i].GetEigenVectors()(0,0)
3739 a = pcas[i].GetMeanValues()[1] - b * pcas[i].GetMeanValues()[0]
3740
3741
3742 cov = pcas[i].GetCovarianceMatrix()
3743 r = cov(0,1)/sqrt(cov(1,1)*cov(0,0))
3744 print("r, RMSx, RMSy =", r, g.GetRMS(1), g.GetRMS(2))
3745 texrms = ROOT.TLatex(0.17,0.87, "RMS x,y = %.02g, %.02g" % (g.GetRMS(1),g.GetRMS(2)))
3746 texr = ROOT.TLatex(0.17,0.80, "r = %.02g" % r)
3747 for t in texr, texrms:
3748 t.SetNDC(1)
3749 t.SetTextColor(ROOT.kBlue)
3750 t.SetTextSize(0.053)
3751 t.Draw()
3752 texs.append(t)
3753
3754 g.Draw("p")
3755
3756 if not isnan(b):
3757 wn = wnd_adaptive[i]
3758 line = ROOT.TLine(-wn, a - b*wn, wn, a + b*wn)
3759 line.SetLineColor(ROOT.kRed)
3760 line.Draw()
3761 lines.append(line)
3762
3763
3764 return aaa