File indexing completed on 2023-03-17 10:39:31
0001
0002
0003
0004
0005
0006
0007 from builtins import range
0008 import logging
0009
0010 import ROOT
0011 ROOT.PyConfig.IgnoreCommandLineOptions = True
0012 ROOT.gROOT.SetBatch()
0013
0014 import Alignment.MillePedeAlignmentAlgorithm.mpsvalidate.style as mpsv_style
0015 import Alignment.MillePedeAlignmentAlgorithm.mpsvalidate.classes as mpsv_classes
0016
0017
0018 def plot(treeFile, alignables, config):
0019 logger = logging.getLogger("mpsvalidate")
0020
0021 for mode in ["xyz", "rot"]:
0022
0023 time = mpsv_classes.PlotData(mode)
0024
0025
0026 listMillePedeUser = []
0027 MillePedeUser = []
0028 for i in range(config.firsttree, 101):
0029 if (treeFile.GetListOfKeys().Contains("MillePedeUser_{0}".format(i))):
0030 listMillePedeUser.append(i)
0031
0032
0033 for i in listMillePedeUser:
0034 MillePedeUser.append(treeFile.Get("MillePedeUser_{0}".format(i)))
0035
0036
0037
0038
0039
0040
0041
0042 first = 0
0043 newlistMillePedeUser = []
0044
0045 for line in MillePedeUser[0]:
0046 if (line.ObjId != 1 and any(abs(line.Par[time.data[i]]) != 999999 for i in [0, 1, 2])):
0047 first = line.Id
0048 newlistMillePedeUser.append(config.firsttree)
0049 break
0050
0051
0052 for ttreeNumber, ttree in enumerate(MillePedeUser[1:]):
0053 for line in ttree:
0054 if (line.Id == first):
0055 if (any(abs(line.Par[time.data[i]]) != 999999 for i in [0, 1, 2])):
0056
0057 newlistMillePedeUser.append(
0058 ttreeNumber + config.firsttree + 1)
0059 break
0060
0061 listMillePedeUser = newlistMillePedeUser
0062
0063
0064 MillePedeUser = []
0065 for i in listMillePedeUser:
0066 MillePedeUser.append(treeFile.Get("MillePedeUser_{0}".format(i)))
0067
0068 if not listMillePedeUser:
0069 logger.error("Timeplots: no TTrees found")
0070 return
0071
0072 if not MillePedeUser:
0073 logger.error("Timeplots: no TTree could be opened")
0074 return
0075
0076
0077
0078
0079
0080 plots = []
0081
0082 objids = []
0083 obj_names = []
0084
0085
0086 for line in MillePedeUser[0]:
0087 if (line.ObjId != 1 and any(abs(line.Par[time.data[i]]) != 999999 for i in [0, 1, 2])):
0088 plots.append(mpsv_classes.PlotData(mode))
0089
0090
0091 if (line.ObjId not in objids):
0092 objids.append(line.ObjId)
0093 obj_names.append(str(line.Name))
0094
0095
0096 for i in range(3):
0097 plots[-1].histo.append(ROOT.TH1F("Time Structure {0} {1} {2} {3}".format(mode, str(line.Name),
0098 len(plots), i), "", len(listMillePedeUser), 0, len(listMillePedeUser)))
0099 plots[-1].label = line.Id
0100 plots[-1].objid = line.ObjId
0101
0102 if (time.unit!=""):
0103 plots[-1].histo[i].SetYTitle("#Delta"+time.xyz[i]+" ["+time.unit+"]")
0104 else:
0105 plots[-1].histo[i].SetYTitle("#Delta"+time.xyz[i])
0106 plots[-1].histo[i].SetXTitle("IOV")
0107 plots[-1].histo[i].SetStats(0)
0108 plots[-1].histo[i].SetMarkerStyle(21)
0109
0110 plots[-1].histo[i].GetXaxis().SetLabelSize(0.08)
0111 plots[-1].histo[i].GetYaxis().SetTitleOffset(1.6)
0112
0113
0114
0115
0116
0117
0118 for treeNumber, tree in enumerate(MillePedeUser):
0119 for line in tree:
0120 if (line.ObjId != 1 and any(abs(line.Par[time.data[i]]) != 999999 for i in [0, 1, 2])):
0121
0122 for plot in plots:
0123 if (plot.label == line.Id):
0124 for i in range(3):
0125
0126 plot.histo[i].GetXaxis().SetBinLabel(
0127 treeNumber + 1, str(listMillePedeUser[treeNumber]))
0128
0129 if (mode == "xyz"):
0130 plot.histo[i].SetBinContent(
0131 treeNumber + 1, 10000 * line.Par[plot.data[i]])
0132 else:
0133 plot.histo[i].SetBinContent(
0134 treeNumber + 1, line.Par[plot.data[i]])
0135
0136
0137
0138
0139
0140 maximum = [[0, 0, 0] for x in range(len(objids))]
0141 minimum = [[0, 0, 0] for x in range(len(objids))]
0142
0143 for index, objid in enumerate(objids):
0144 for plot in plots:
0145 if (plot.objid == objid):
0146 for i in range(3):
0147
0148 if (plot.histo[i].GetMaximum() > maximum[index][i]):
0149 maximum[index][i] = plot.histo[i].GetMaximum()
0150
0151 if (plot.histo[i].GetMinimum() < minimum[index][i]):
0152 minimum[index][i] = plot.histo[i].GetMinimum()
0153
0154
0155
0156
0157
0158
0159 for index, objid in enumerate(objids):
0160
0161 canvas = ROOT.TCanvas("canvasTimeBigStrucutres_{0}_{1}".format(
0162 mode, obj_names[index]), "Parameter", 300, 0, 800, 600)
0163 canvas.Divide(2, 2)
0164
0165
0166 title = ROOT.TPaveLabel(0.1, 0.8, 0.9, 0.9, "{0} over time {1}".format(
0167 obj_names[index], mode))
0168
0169 legend = ROOT.TLegend(0.05, 0.1, 0.95, 0.75)
0170
0171
0172 canvas.cd(1)
0173 title.Draw()
0174
0175
0176 ident = mpsv_style.identification(config)
0177 ident.Draw()
0178
0179
0180 copy = []
0181
0182
0183
0184 for i in range(3):
0185 for plot in plots:
0186 if (plot.objid == objid):
0187
0188 if config.rangemodeHL == "all":
0189 plot.usedRange[i] = max(
0190 abs(maximum[index][i]), abs(minimum[index][i]))
0191
0192
0193 if (config.rangemodeHL == "given"):
0194
0195 if mode == "xyz":
0196 valuelist = config.rangexyzHL
0197 if mode == "rot":
0198 valuelist = config.rangerotHL
0199
0200
0201 for value in valuelist:
0202
0203 if max(abs(maximum[index][i]), abs(minimum[index][i])) < value:
0204 plot.usedRange[i] = value
0205 break
0206
0207 if (max(abs(maximum[index][i]), abs(minimum[index][i])) > valuelist[-1]):
0208 plot.usedRange[i] = valuelist[-1]
0209
0210
0211 for i in range(3):
0212 canvas.cd(2 + i)
0213
0214 number = 1
0215
0216 for plot in plots:
0217 if (plot.objid == objid):
0218
0219 if (config.samerangeHL == 1):
0220 plot.usedRange[i] = max(map(abs, plot.usedRange))
0221
0222
0223 plot.histo[i].GetYaxis(
0224 ).SetRangeUser(-1.2 * abs(plot.usedRange[i]), 1.2 * abs(plot.usedRange[i]))
0225
0226 plot.histo[i].SetLineColorAlpha(number + 2, 0.5)
0227 plot.histo[i].SetMarkerColorAlpha(number + 2, 1)
0228
0229
0230 plot.histo[i].SetLineColor(0)
0231 plot.histo[i].Draw("PSAME")
0232
0233
0234 copy.append(ROOT.TGraph(plot.histo[i]))
0235
0236 copy[-1].SetMaximum(1.2 * abs(plot.usedRange[i]))
0237 copy[-1].SetMinimum(-1.2 * abs(plot.usedRange[i]))
0238
0239 copy[-1].SetLineColorAlpha(number + 2, 0.5)
0240 copy[-1].Draw("LPSAME")
0241
0242 if (i == 0):
0243 legend.AddEntry(
0244 plot.histo[i], "{0}".format(number))
0245 number += 1
0246
0247 canvas.cd(1)
0248 legend.Draw()
0249
0250 canvas.Update()
0251
0252
0253 canvas.Print("{0}/plots/pdf/timeStructures_{1}_{2}.pdf".format(
0254 config.outputPath, mode, obj_names[index]))
0255
0256
0257 image = ROOT.TImage.Create()
0258 image.FromPad(canvas)
0259 image.WriteImage("{0}/plots/png/timeStructures_{1}_{2}.png".format(
0260 config.outputPath, mode, obj_names[index]))
0261
0262
0263 output = mpsv_classes.OutputData(plottype="time", name=obj_names[index],
0264 parameter=mode, filename="timeStructures_{0}_{1}".format(mode, obj_names[index]))
0265 config.outputList.append(output)