1 from __future__
import print_function
2 from ROOT
import TStyle, kWhite, kTRUE
3 from ROOT
import gROOT, gStyle
4 from ROOT
import kGray, kAzure, kMagenta, kOrange, kWhite
5 from ROOT
import kRed, kBlue, kGreen, kPink, kYellow
6 from ROOT
import TLine, TLatex, TColor
8 from collections
import namedtuple, OrderedDict
9 from math
import sin, cos, tan, atan, exp, pi
10 from array
import array
12 from Validation.Geometry.plot_utils
import Plot_params
15 plots.setdefault(
'x_vs_eta',
Plot_params(10,
'#eta',
'x/X_{0}', 0.0, 145., -4.0, 4.0,
'', 0, 0., 0., 0, 1))
16 plots.setdefault(
'x_vs_phi',
Plot_params(20,
'#varphi [rad]',
'x/X_{0}', 0.0, 6.2, -4.0, 4.0,
'', 0, 0., 0., 0, 1))
17 plots.setdefault(
'x_vs_R',
Plot_params(40,
'R [cm]',
'x/X_{0}', 0.0, 70.0, 0.0, 1200.0,
'', 0, 0., 0., 0, 1))
18 plots.setdefault(
'l_vs_eta',
Plot_params(10010,
'#eta',
'x/#lambda_{I}', 0.0, 22.8, -4.0, 4.0,
'', 0, 0., 0., 0, 1))
19 plots.setdefault(
'l_vs_phi',
Plot_params(10020,
'#varphi [rad]',
'x/#lambda_{I}', 0.0, 1.2, -4.0, 4.0,
'', 0, 0., 0., 0, 1))
20 plots.setdefault(
'l_vs_R',
Plot_params(10040,
'R [cm]',
'x/#lambda_{I}', 0.0, 7.5, 0.0, 1200.0,
'', 0, 0., 0., 0, 1))
21 plots.setdefault(
'x_vs_eta_vs_phi',
Plot_params(30,
'#eta',
'#varphi', 0., 0., 0., 0.,
'x/X_{0}', 0, -1., -1., 0, 1))
22 plots.setdefault(
'l_vs_eta_vs_phi',
Plot_params(10030,
'#eta',
'#varphi', 0., 0., 0., 0.,
'x/#lambda_{I}', 0, -1, -1, 0, 1))
23 plots.setdefault(
'x_vs_z_vs_Rsum',
Plot_params(50,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'#Sigmax/X_{0}', 1, -1., -1., 0, 0))
24 plots.setdefault(
'x_vs_z_vs_Rsumcos',
Plot_params(52,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'#Sigmax/X_{0}', 1, -1., -1., 0, 0))
26 plots.setdefault(
'x_vs_z_vs_Rloc',
Plot_params(70,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'x/X_{0}', 1, -1., -1., 0, 0))
27 plots.setdefault(
'x_vs_z_vs_Rloccos',
Plot_params(72,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'x/X_{0}', 1, -1., -1., 0, 0))
28 plots.setdefault(
'l_vs_z_vs_Rsum',
Plot_params(10050,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'#Sigmax/#lambda_{I}', 1, -1., -1., 0, 0))
29 plots.setdefault(
'l_vs_z_vs_Rsumcos',
Plot_params(10052,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'#Sigmax/#lambda_{I}', 1, -1., -1., 0, 0))
30 plots.setdefault(
'l_vs_z_vs_R',
Plot_params(10060,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'1/#lambda_{I}', 1, -1., -1., 0, 0))
31 plots.setdefault(
'l_vs_z_vs_Rloc',
Plot_params(10070,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'x/#lambda_{I}', 1, -1., -1., 0, 0))
32 plots.setdefault(
'l_vs_z_vs_Rloccos',
Plot_params(10072,
'z [mm]',
'R [mm]', 0., 0., 0., 0.,
'x/#lambda_{I}', 1, -1., -1., 0, 0))
33 plots.setdefault(
'x_over_l_vs_eta',
Plot_params(10,
'#eta',
'(x/X_{0})/(x/#lambda_{I})', 0., 0., 0., 0.,
'', 0, -1, -1, 0, 0))
34 plots.setdefault(
'x_over_l_vs_phi',
Plot_params(20,
'#varphi [rad]',
'(x/X_{0})/(x/#lambda_{I})', 0., 0., 0., 0.,
'', 0, -1, -1, 0, 0))
37 _LABELS2COMPS = {
'BeamPipe':
'BEAM',
39 'EndcapTimingLayer + Thermal Screen':
'CALOECTSFront',
40 'Neutron Moderator + Thermal Screen' :
'CALOECTSMiddle',
41 'HGCal + HGCal Service + Thermal Screen' :
'CALOECTSRear',
42 'Solenoid Magnet' :
'MGNT',
43 'Muon Wheels and Cables' :
'MB',
46 'FromVertexToBackOfHGCal' : [
'BEAM',
'Tracker',
'ECAL',
'HCal',
'CALOECTSFront',
'CALOECTSMiddle',
'CALOECTSRear',
'MGNT',
'MB'],
49 'HGCalHE': [
'HGCalHEsil',
'HGCalHEmix']
59 COMPOUNDS = OrderedDict()
60 COMPOUNDS[
"HGCal"] = [
"HGCal"]
61 COMPOUNDS[
"HGCalEE"] = [
"HGCalEE"]
62 COMPOUNDS[
"HGCalHE"] = [
"HGCalHEsil",
"HGCalHEmix"]
63 COMPOUNDS[
"FromVertexToBackOfHGCal"] = [
"BeamPipe",
"Tracker",
"ECAL",
"HCal",
"EndcapTimingLayer + Thermal Screen",
"Neutron Moderator + Thermal Screen",
"HGCal + HGCal Service + Thermal Screen",
"Solenoid Magnet",
"Muon Wheels and Cables"]
72 DETECTORS = OrderedDict()
73 DETECTORS[
"BeamPipe"] = kGray+2
74 DETECTORS[
"Tracker"] = 9
77 DETECTORS[
"EndcapTimingLayer + Thermal Screen"] = 7
78 DETECTORS[
"Neutron Moderator + Thermal Screen"] = 46
79 DETECTORS[
"HGCal + HGCal Service + Thermal Screen"] = 5
80 DETECTORS[
"Solenoid Magnet"] = 4
81 DETECTORS[
"Muon Wheels and Cables"] = 28
100 sDETS[
"HCal"] = kOrange
110 hist_label_to_num = OrderedDict()
111 hist_label_to_num[
'COP'] = [100, 2,
'Copper']
112 hist_label_to_num[
'SCI'] = [200, 3,
'Scintillator']
113 hist_label_to_num[
'CAB'] = [300, 4,
'Cables']
114 hist_label_to_num[
'MNE'] = [400, 5,
'HGC_G10-FR4']
115 hist_label_to_num[
'SIL'] = [500, 6,
'Silicon']
116 hist_label_to_num[
'OTH'] = [600, 7,
'Other']
117 hist_label_to_num[
'AIR'] = [700, 8,
'Air']
118 hist_label_to_num[
'SST'] = [800, 9,
'Stainless Steel']
119 hist_label_to_num[
'WCU'] = [900, 28,
'WCu']
120 hist_label_to_num[
'LEA'] = [1000, 12,
'Lead']
121 hist_label_to_num[
'EPX'] = [1100, 46,
'Epoxy']
122 hist_label_to_num[
'KAP'] = [1200, 49,
'Kapton']
123 hist_label_to_num[
'ALU'] = [1300, 33,
'Aluminium']
126 """The plots in the twiki are already too much and to avoid mistakes
127 we will try to automatize the procedure
131 label = label.replace(
" ",
"_")
137 zoomtitle =
"in all HGCal"
138 zoomdir =
"%s/" % label
139 elif zoom ==
"zplus":
140 zoomstring =
"_ZplusZoom"
141 zoomtitle =
"in Z+ endcap of HGCal"
142 zoomdir =
"%s/ZPlusZoom/" % label
143 elif zoom ==
"zminus":
144 zoomstring =
"_ZminusZoom"
145 zoomtitle =
"in Z- endcap of HGCal"
146 zoomdir =
"%s/ZMinusZoom/" % label
148 print(
"WRONG OPTION")
152 if plotname ==
"x_vs_z_vs_Rsum":
153 print(
"%%TWISTY{ mode=\"div\" showlink=\"Click to see the %s plots %s \" hidelink=\"Hide %s %s\" showimgright=\"%%ICONURLPATH{toggleopen-small}%%\" hideimgright=\"%%ICONURLPATH{toggleclose-small}%%\"}%%" % (label,zoomtitle, label, zoomtitle))
155 if "Rsum" in plotname
and "x_vs" in plotname
and not "cos" in plotname:
156 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the mean value of the material budget in units of radiation length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the accumulated material budget as seen by the track, as the track travels throughout the detector.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
158 if "Rsum" in plotname
and "l_vs" in plotname
and not "cos" in plotname:
159 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the mean value of the material budget in units of interaction length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the accumulated material budget as seen by the track, as the track travels throughout the detector.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
161 if "Rsumcos" in plotname
and "x_vs" in plotname:
162 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the mean value of the material budget in units of radiation length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the orthogonal accumulated material budget, that is cos(theta) what the track sees.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
164 if "Rsumcos" in plotname
and "l_vs" in plotname:
165 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the mean value of the material budget in units of interaction length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the orthogonal accumulated material budget, that is cos(theta) what the track sees.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
167 if "Rloc" in plotname
and "x_vs" in plotname
and not "cos" in plotname:
168 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the local mean value of the material budget in units of radiation length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the local material budget as seen by the track, as the track travels throughout the detector.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
170 if "Rloc" in plotname
and "l_vs" in plotname
and not "cos" in plotname:
171 print(
"| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the local mean value of the material budget in units of interaction length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the local material budget as seen by the track, as the track travels throughout the detector.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring))
174 if plotname ==
"l_vs_z_vs_Rloc":
178 I won't put the local cos plots for now, only the sum cos above
179 if "Rloccos" in plotname and "x_vs" in plotname:
180 print "| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the local mean value of the material budget in units of radiation length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the orthogonal accumulated material budget, that is cos(theta) what the track sees.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring)
182 if "Rloccos" in plotname and "l_vs" in plotname:
183 print "| <img alt=\"HGCal_%s%s%s.png\" height=\"300\" width=\"550\" src=\"http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.png\" /> | The plot on the left shows the 2D profile histogram for *%s* %s that displays the local mean value of the material budget in units of interaction length in each R-z cell. R-z cell is 1 cm x 1 mm. The plot depicts the orthogonal accumulated material budget, that is cos(theta) what the track sees.[[http://apsallid.web.cern.ch/apsallid/HGCalMaterial/%sHGCal_%s%s%s.pdf][Click to enlarge plot]] |" % (plotname,label,zoomstring,zoomdir,plotname,label,zoomstring, label, zoomtitle,zoomdir,plotname,label,zoomstring)
189 ncolors =
array(
'i', [])
190 gStyle.SetNumberContours(NCont);
191 stops = [ 0.00, 0.10, 0.25, 0.45, 0.60, 0.75, 1.00 ]
192 red = [ 1.00, 0.00, 0.00, 0.00, 0.97, 0.97, 0.10 ]
193 green = [ 1.00, 0.97, 0.30, 0.40, 0.97, 0.00, 0.00 ]
194 blue = [ 1.00, 0.97, 0.97, 0.00, 0.00, 0.00, 0.00 ]
195 stopsArray =
array(
'd', stops)
196 redArray =
array(
'd', red)
197 greenArray =
array(
'd', green)
198 blueArray =
array(
'd', blue)
199 first_color_number = TColor.CreateGradientColorTable(NRGBs, stopsArray, redArray, greenArray, blueArray, NCont);
200 gStyle.SetNumberContours(NCont)
205 for i
in range(palsize):
206 palette.append(first_color_number+i)
207 palarray =
array(
'i',palette)
209 gStyle.SetPalette(palsize,palarray)
228 dEdx[
'Copper'] = 1.257
230 dEdx[
'H_Scintillator'] = 0.91512109*dEdx[
'C'] + 0.084878906*dEdx[
'H']
231 dEdx[
'Silicon'] = 0.3876
233 dEdx[
'HGC_G10-FR4'] = 0.18077359*dEdx[
'Silicon'] + 0.4056325*dEdx[
'0'] + 0.27804208*dEdx[
'C'] + 0.068442752*dEdx[
'H'] + 0.067109079*dEdx[
'Br']
238 dEdx[
'StainlessSteel'] = 0.6996*dEdx[
'Fe']+0.01*dEdx[
'Mn']+0.19*dEdx[
'Cr']+0.1*dEdx[
'Ni']+0.0004*dEdx[
'C'];
240 dEdx[
'WCu'] = 0.75*dEdx[
'W']+0.25*dEdx[
'Copper']
243 dEdx[
'Epoxy'] = 0.53539691*dEdx[
'C'] + 0.13179314*dEdx[
'H'] + 0.33280996*dEdx[
'0']
244 dEdx[
'Kapton'] = 0.59985105*dEdx[
'C'] + 0.080541353*dEdx[
'H'] + 0.31960759*dEdx[
'0']
247 dEdx[
'Cables'] = 0.586*dEdx[
'Copper'] + 0.259*dEdx[
'C'] + 0.138*dEdx[
'0'] + 0.017*dEdx[
'H']
250 MatXo = OrderedDict()
251 MatXo[
'Copper'] = 14.3559
252 MatXo[
'H_Scintillator'] = 425.393
253 MatXo[
'Cables'] = 66.722
254 MatXo[
'HGC_G10-FR4'] = 175.056
255 MatXo[
'Silicon'] = 93.6762
257 MatXo[
'Air'] = 301522.
258 MatXo[
'StainlessSteel'] = 17.3555
259 MatXo[
'WCu'] = 5.1225
260 MatXo[
'Lead'] = 5.6118
261 MatXo[
'Epoxy'] = 315.901
262 MatXo[
'Kapton'] = 365.309
265 """Function to draw the eta.
266 Function to draw the eta references on top of an already existing
267 TCanvas. The lines and labels drawn are collected inside a list and
268 the list is returned to the user to extend the live of the objects
269 contained, otherwise no lines and labels will be drawn, since they
270 will be garbage-collected as soon as this function returns.
275 etas = [ 0.2*i
for i
in range(0,18) ]
283 th = 2*atan(
exp(-ieta))
287 lineh = TLine(-20.,0.,20.,0.)
289 linev = TLine(0.,-10.,0.,10.)
291 keep_alive.append(lineh)
292 keep_alive.append(linev)
296 if ieta>-1.6
and ieta<1.6:
307 x2 = x1+lineL*
cos(th)
308 y2 = y1+lineL*
sin(th)
312 line1 = TLine(x1,y1,x2,y2)
314 keep_alive.append(line1)
316 text =
"%3.1f" % ieta
317 t1 = TLatex(xt, yt,
'%s' % (
'#eta = 0' if ieta == 0
else text))
319 t1.SetTextAlign(talign)
321 keep_alive.append(t1)