CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
plot_hgcal_utils.py
Go to the documentation of this file.
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
7 
8 from collections import namedtuple, OrderedDict
9 from math import sin, cos, tan, atan, exp, pi
10 from array import array
11 
12 from Validation.Geometry.plot_utils import Plot_params
13 
14 plots = {}
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))
25 #plots.setdefault('x_vs_z_vs_R', Plot_params(60, 'z [mm]', 'R [mm]', 0., 0., 0., 0., '1/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))
35 
36 # Conversion name from the label (key) to the components in CMSSW/Geometry
37 _LABELS2COMPS = {'BeamPipe': 'BEAM', #There are other BEAM volumes but there are behind the region of our interest.
38  'Tracker': 'Tracker',
39  #CALOECTSFront contains both CALOECTSModerator and EndcapTimingLayer plus
40  #thermal screen but I want to split those.
41  #In V16(D86) there is no CALOECTSMiddle.
42  'EndcapTimingLayer': 'EndcapTimingLayer',
43  'Neutron Moderator + Thermal Screen' : 'CALOECTSModerator',
44  'HGCal + HGCal Service + Thermal Screen' : 'CALOECTSRear',
45  'Solenoid Magnet' : 'MGNT',
46  'Muon Wheels and Cables' : 'MB',
47  'ECAL': 'ECAL',
48  'HCal': 'HCal',
49  'FromVertexToBackOfHGCal' : ['BEAM','Tracker','ECAL','HCal','EndcapTimingLayer','CALOECTSModerator','CALOECTSRear','MGNT','MB'],
50  'HGCal': 'HGCal',
51  'HGCalEE': 'HGCalEE',
52  'HGCalHE': ['HGCalHEsil', 'HGCalHEmix']
53  }
54 
55 # Compounds are used to stick together different part of the HGCal
56 # detector, so that their cumulative material description can be
57 # derived. The key name can be generic, while the names in the
58 # associated list must be such that an appropriate material
59 # description file, in ROOT format, is present while producing the
60 # cumulative plot. A missing element will invalidate the full
61 # procedure.
62 COMPOUNDS = OrderedDict()
63 COMPOUNDS["HGCal"] = ["HGCal"]
64 COMPOUNDS["HGCalEE"] = ["HGCalEE"]
65 COMPOUNDS["HGCalHE"] = ["HGCalHEsil", "HGCalHEmix"]
66 COMPOUNDS["FromVertexToBackOfHGCal"] = ["BeamPipe","Tracker","ECAL","HCal","EndcapTimingLayer","Neutron Moderator + Thermal Screen","HGCal + HGCal Service + Thermal Screen","Solenoid Magnet","Muon Wheels and Cables"]
67 
68 # The DETECTORS must be the single component of the HGCal for which
69 # the user can ask for the corresponding material description.
70 # BE CAREFUL: When running on a single detector and not through all
71 # only uncomment that one below. e.g. when running on HGCal only you should
72 # have only:
73 # DETECTORS["HGCal"] = kAzure-5
74 # and others should be commented out.
75 DETECTORS = OrderedDict()
76 DETECTORS["BeamPipe"] = kGray+2
77 DETECTORS["Tracker"] = 9 #kAzure-5
78 DETECTORS["ECAL"] = 2 #kOrange+10
79 DETECTORS["HCal"] = 6 #kMagenta-2
80 DETECTORS["EndcapTimingLayer"] = 7#kAzure-9
81 DETECTORS["Neutron Moderator + Thermal Screen"] = 46#kOrange+5
82 DETECTORS["HGCal + HGCal Service + Thermal Screen"] = 5#kOrange-2
83 DETECTORS["Solenoid Magnet"] = 4#kGray+5
84 DETECTORS["Muon Wheels and Cables"] = 28
85 #When running to get the R vs z sum of all subdetectors comment out above and
86 #uncomment the next line
87 #DETECTORS["FromVertexToBackOfHGCal"] = 30
88 
89 
90 # sDETS are the label of the HGCal elements in the Reconstruction
91 # geometry. They are all used to derive the reconstruction material
92 # profile to be compared to the one obtained directly from the
93 # simulation. A missing key in the real reconstruction geometry is not
94 # a problem, since this will imply that the corresponding plotting
95 # routine will skip that missing part. For this reason this map can be
96 # made as inclusive as possible with respect to the many
97 # reconstruction geometries in CMSSW.
98 sDETS = OrderedDict()
99 #sDETS["HGCalEE"] = kRed
100 #sDETS["HGCalHEsil"] = kBlue
101 #sDETS["HGCalHEmix"] = kGreen
102 sDETS["ECAL"] = kBlue
103 sDETS["HCal"] = kOrange
104 #sDETS[""] = kYellow
105 #sDETS[""] = kOrange
106 #sDETS[""] = kPink
107 
108 # hist_label_to_num contains the logical names of the HGCal detector
109 # that holds material. They are therefore not aware of which detector
110 # they belong to, but they are stored in specific plots in all the
111 # mat*root files produced. The numbering of the plots is identical
112 # across all files.
113 hist_label_to_num = OrderedDict()
114 hist_label_to_num['COP'] = [100, 2, 'Copper'] # Index first, color second, legend label third
115 hist_label_to_num['SCI'] = [200, 3, 'Scintillator']
116 hist_label_to_num['CAB'] = [300, 4, 'Cables']
117 hist_label_to_num['MNE'] = [400, 5, 'HGC_G10-FR4']
118 hist_label_to_num['SIL'] = [500, 6, 'Silicon']
119 hist_label_to_num['OTH'] = [600, 7, 'Other']
120 hist_label_to_num['AIR'] = [700, 8, 'Air']
121 hist_label_to_num['SST'] = [800, 9, 'Stainless Steel']
122 hist_label_to_num['WCU'] = [900, 28, 'WCu']
123 hist_label_to_num['LEA'] = [1000, 12, 'Lead']
124 hist_label_to_num['EPX'] = [1100, 46, 'Epoxy']
125 hist_label_to_num['KAP'] = [1200, 49, 'Kapton']
126 hist_label_to_num['ALU'] = [1300, 33, 'Aluminium']
127 
128 def TwikiPrintout(plotname, label, zoom):
129  """The plots in the twiki are already too much and to avoid mistakes
130  we will try to automatize the procedure
131  """
132 
133  #Twiki will strip out spaces
134  label = label.replace(" ", "_")
135 
136  zoomstring = ""
137 
138  if zoom == "all":
139  zoomstring = ""
140  zoomtitle = "in all HGCal"
141  zoomdir = "%s/" % label
142  elif zoom == "zplus":
143  zoomstring = "_ZplusZoom"
144  zoomtitle = "in Z+ endcap of HGCal"
145  zoomdir = "%s/ZPlusZoom/" % label
146  elif zoom == "zminus":
147  zoomstring = "_ZminusZoom"
148  zoomtitle = "in Z- endcap of HGCal"
149  zoomdir = "%s/ZMinusZoom/" % label
150  else :
151  print("WRONG OPTION")
152 
153 
154  #Here for the hide button
155  if plotname == "x_vs_z_vs_Rsum":
156  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))
157 
158  if "Rsum" in plotname and "x_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 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))
160 
161  if "Rsum" in plotname and "l_vs" in plotname and not "cos" 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 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))
163 
164  if "Rsumcos" in plotname and "x_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 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))
166 
167  if "Rsumcos" in plotname and "l_vs" 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 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))
169 
170  if "Rloc" in plotname and "x_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 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))
172 
173  if "Rloc" in plotname and "l_vs" in plotname and not "cos" in plotname:
174  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))
175 
176  #Here again for the closing of the hide button
177  if plotname == "l_vs_z_vs_Rloc":
178  print("%ENDTWISTY%")
179 
180  """
181  I won't put the local cos plots for now, only the sum cos above
182  if "Rloccos" in plotname and "x_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 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)
184 
185  if "Rloccos" in plotname and "l_vs" in plotname:
186  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)
187  """
188 
190  NRGBs = 7
191  NCont = 100
192  ncolors = array('i', [])
193  gStyle.SetNumberContours(NCont);
194  stops = [ 0.00, 0.10, 0.25, 0.45, 0.60, 0.75, 1.00 ]
195  red = [ 1.00, 0.00, 0.00, 0.00, 0.97, 0.97, 0.10 ]
196  green = [ 1.00, 0.97, 0.30, 0.40, 0.97, 0.00, 0.00 ]
197  blue = [ 1.00, 0.97, 0.97, 0.00, 0.00, 0.00, 0.00 ]
198  stopsArray = array('d', stops)
199  redArray = array('d', red)
200  greenArray = array('d', green)
201  blueArray = array('d', blue)
202  first_color_number = TColor.CreateGradientColorTable(NRGBs, stopsArray, redArray, greenArray, blueArray, NCont);
203  gStyle.SetNumberContours(NCont)
204 
205 
206  palsize = NCont
207  palette = []
208  for i in range(palsize):
209  palette.append(first_color_number+i)
210  palarray = array('i',palette)
211 
212  gStyle.SetPalette(palsize,palarray)
213 
214 
215 #In MeV/mm
216 dEdx = OrderedDict()
217 #--------
218 #Some elements necessary to build our materials
219 dEdx['Fe'] = 1.143
220 dEdx['Mn'] = 1.062
221 dEdx['Cr'] = 1.046
222 dEdx['Ni'] = 1.307
223 dEdx['C'] = 0.3952
224 dEdx['0'] = 0. # 2.398E-04 -> essentially zero
225 dEdx['H'] = 0. #3.437E-05 -> essentially zero
226 dEdx['Br'] = 0. #9.814E-04 -> essentially zero
227 dEdx['W'] = 2.210
228 dEdx['Al'] = 0.4358
229 #--------
230 
231 dEdx['Copper'] = 1.257
232 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#1996
233 dEdx['H_Scintillator'] = 0.91512109*dEdx['C'] + 0.084878906*dEdx['H']
234 dEdx['Silicon'] = 0.3876
235 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#2730
236 dEdx['HGC_G10-FR4'] = 0.18077359*dEdx['Silicon'] + 0.4056325*dEdx['0'] + 0.27804208*dEdx['C'] + 0.068442752*dEdx['H'] + 0.067109079*dEdx['Br']
237 dEdx['Other'] = 0.
238 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#0290
239 dEdx['Air'] = 0.
240 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#3692
241 dEdx['StainlessSteel'] = 0.6996*dEdx['Fe']+0.01*dEdx['Mn']+0.19*dEdx['Cr']+0.1*dEdx['Ni']+0.0004*dEdx['C'];
242 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#0568
243 dEdx['WCu'] = 0.75*dEdx['W']+0.25*dEdx['Copper']
244 #--------
245 dEdx['Lead'] = 1.274 #Pb
246 dEdx['Epoxy'] = 0.53539691*dEdx['C'] + 0.13179314*dEdx['H'] + 0.33280996*dEdx['0']
247 dEdx['Kapton'] = 0.59985105*dEdx['C'] + 0.080541353*dEdx['H'] + 0.31960759*dEdx['0']
248 #Composition of cable as Sunanda uses them is here:
249 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#2841
250 dEdx['Cables'] = 0.586*dEdx['Copper'] + 0.259*dEdx['C'] + 0.138*dEdx['0'] + 0.017*dEdx['H']
251 
252 #In mm
253 MatXo = OrderedDict()
254 MatXo['Copper'] = 14.3559
255 MatXo['H_Scintillator'] = 425.393
256 MatXo['Cables'] = 66.722
257 MatXo['HGC_G10-FR4'] = 175.056
258 MatXo['Silicon'] = 93.6762
259 MatXo['Other'] = 0.
260 MatXo['Air'] = 301522.
261 MatXo['StainlessSteel'] = 17.3555
262 MatXo['WCu'] = 5.1225
263 MatXo['Lead'] = 5.6118
264 MatXo['Epoxy'] = 315.901
265 MatXo['Kapton'] = 365.309
266 
268  """Function to draw the eta.
269  Function to draw the eta references on top of an already existing
270  TCanvas. The lines and labels drawn are collected inside a list and
271  the list is returned to the user to extend the live of the objects
272  contained, otherwise no lines and labels will be drawn, since they
273  will be garbage-collected as soon as this function returns.
274  """
275 
276  # Add eta labels
277  keep_alive = []
278  etas = [ 0.2*i for i in range(0,18) ]
279 
280  etax = 2850.#6850.
281  etay = 1240.#5200.
282  lineL = 110#8600.
283  offT = 10.
284 
285  for ieta in etas:
286  th = 2*atan(exp(-ieta))
287  talign = 21
288 
289  #IP
290  lineh = TLine(-20.,0.,20.,0.)
291  lineh.Draw()
292  linev = TLine(0.,-10.,0.,10.)
293  linev.Draw()
294  keep_alive.append(lineh)
295  keep_alive.append(linev)
296 
297  x1 = 0
298  y1 = 0
299  if ieta>-1.6 and ieta<1.6:
300  x1 = etay/tan(th)
301  y1 = etay
302  elif ieta <=-1.6:
303  x1 = -etax
304  y1 = -etax*tan(th)
305  talign = 11
306  elif ieta>=1.6:
307  x1 = etax
308  y1 = etax*tan(th)
309  talign = 31
310  x2 = x1+lineL*cos(th)
311  y2 = y1+lineL*sin(th)
312  xt = x2
313  yt = y2+offT
314 
315  line1 = TLine(x1,y1,x2,y2)
316  line1.Draw()
317  keep_alive.append(line1)
318 
319  text = "%3.1f" % ieta
320  t1 = TLatex(xt, yt, '%s' % ('#eta = 0' if ieta == 0 else text))
321  t1.SetTextSize(0.03)
322  t1.SetTextAlign(talign)
323  t1.Draw()
324  keep_alive.append(t1)
325  return keep_alive
tuple array
Definition: mps_check.py:216
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
const uint16_t range(const Frame &aFrame)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
tuple Plot_params
Definition: plot_utils.py:9