CMS 3D CMS Logo

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, 2.575, -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, 0.73, -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 = {'HGCal': 'HGCal',
38  'HGCalEE': 'HGCalEE',
39  'HGCalHE': ['HGCalHEsil', 'HGCalHEmix']
40  }
41 
42 # Compounds are used to stick together different part of the HGCal
43 # detector, so that their cumulative material description can be
44 # derived. The key name can be generic, while the names in the
45 # associated list must be such that an appropriate material
46 # description file, in ROOT format, is present while producing the
47 # cumulative plot. A missing element will invalidate the full
48 # procedure.
49 COMPOUNDS = OrderedDict()
50 COMPOUNDS["HGCal"] = ["HGCal"]
51 COMPOUNDS["HGCalEE"] = ["HGCalEE"]
52 COMPOUNDS["HGCalHE"] = ["HGCalHEsil", "HGCalHEmix"]
53 
54 
55 # The DETECTORS must be the single component of the HGCal for which
56 # the user can ask for the corresponding material description.
57 DETECTORS = OrderedDict()
58 DETECTORS["HGCal"] = kAzure-5
59 DETECTORS["HGCalEE"] = kAzure-9
60 DETECTORS["HGCalHE"] = kOrange-2
61 
62 # sDETS are the label of the HGCal elements in the Reconstruction
63 # geometry. They are all used to derive the reconstruction material
64 # profile to be compared to the one obtained directly from the
65 # simulation. A missing key in the real reconstruction geometry is not
66 # a problem, since this will imply that the corresponding plotting
67 # routine will skip that missing part. For this reason this map can be
68 # made as inclusive as possible with respect to the many
69 # reconstruction geometries in CMSSW.
70 sDETS = OrderedDict()
71 sDETS["HGCalEE"] = kRed
72 sDETS["HGCalHEsil"] = kBlue
73 sDETS["HGCalHEmix"] = kGreen
74 #sDETS[""] = kYellow
75 #sDETS[""] = kOrange
76 #sDETS[""] = kPink
77 
78 # hist_label_to_num contains the logical names of the HGCal detector
79 # that holds material. They are therefore not aware of which detector
80 # they belong to, but they are stored in specific plots in all the
81 # mat*root files produced. The numbering of the plots is identical
82 # across all files.
83 hist_label_to_num = OrderedDict()
84 hist_label_to_num['COP'] = [100, 2, 'Copper'] # Index first, color second, legend label third
85 hist_label_to_num['SCI'] = [200, 3, 'Scintillator']
86 hist_label_to_num['CAB'] = [300, 4, 'Cables']
87 hist_label_to_num['MNE'] = [400, 5, 'M_NEMA_FR4 plate']
88 hist_label_to_num['SIL'] = [500, 6, 'Silicon']
89 hist_label_to_num['OTH'] = [600, 7, 'Other']
90 hist_label_to_num['AIR'] = [700, 8, 'Air']
91 hist_label_to_num['SST'] = [800, 9, 'Stainless Steel']
92 hist_label_to_num['WCU'] = [900, 28, 'WCu']
93 hist_label_to_num['LEA'] = [1000, 12, 'Lead']
94 
95 def TwikiPrintout(plotname, label, zoom):
96  """The plots in the twiki are already too much and to avoid mistakes
97  we will try to automatize the procedure
98  """
99 
100  #Twiki will strip out spaces
101  label = label.replace(" ", "_")
102 
103  zoomstring = ""
104 
105  if zoom == "all":
106  zoomstring = ""
107  zoomtitle = "in all HGCal"
108  zoomdir = "%s/" % label
109  elif zoom == "zplus":
110  zoomstring = "_ZplusZoom"
111  zoomtitle = "in Z+ endcap of HGCal"
112  zoomdir = "%s/ZPlusZoom/" % label
113  elif zoom == "zminus":
114  zoomstring = "_ZminusZoom"
115  zoomtitle = "in Z- endcap of HGCal"
116  zoomdir = "%s/ZMinusZoom/" % label
117  else :
118  print("WRONG OPTION")
119 
120 
121  #Here for the hide button
122  if plotname == "x_vs_z_vs_Rsum":
123  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))
124 
125  if "Rsum" in plotname and "x_vs" in plotname and not "cos" in plotname:
126  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))
127 
128  if "Rsum" in plotname and "l_vs" in plotname and not "cos" in plotname:
129  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))
130 
131  if "Rsumcos" in plotname and "x_vs" in plotname:
132  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))
133 
134  if "Rsumcos" in plotname and "l_vs" in plotname:
135  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))
136 
137  if "Rloc" in plotname and "x_vs" in plotname and not "cos" in plotname:
138  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))
139 
140  if "Rloc" in plotname and "l_vs" in plotname and not "cos" in plotname:
141  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))
142 
143  #Here again for the closing of the hide button
144  if plotname == "l_vs_z_vs_Rloc":
145  print("%ENDTWISTY%")
146 
147  """
148  I won't put the local cos plots for now, only the sum cos above
149  if "Rloccos" in plotname and "x_vs" in plotname:
150  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)
151 
152  if "Rloccos" in plotname and "l_vs" in plotname:
153  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)
154  """
155 
157  NRGBs = 7
158  NCont = 100
159  ncolors = array('i', [])
160  gStyle.SetNumberContours(NCont);
161  stops = [ 0.00, 0.10, 0.25, 0.45, 0.60, 0.75, 1.00 ]
162  red = [ 1.00, 0.00, 0.00, 0.00, 0.97, 0.97, 0.10 ]
163  green = [ 1.00, 0.97, 0.30, 0.40, 0.97, 0.00, 0.00 ]
164  blue = [ 1.00, 0.97, 0.97, 0.00, 0.00, 0.00, 0.00 ]
165  stopsArray = array('d', stops)
166  redArray = array('d', red)
167  greenArray = array('d', green)
168  blueArray = array('d', blue)
169  first_color_number = TColor.CreateGradientColorTable(NRGBs, stopsArray, redArray, greenArray, blueArray, NCont);
170  gStyle.SetNumberContours(NCont)
171 
172 
173  palsize = NCont
174  palette = []
175  for i in range(palsize):
176  palette.append(first_color_number+i)
177  palarray = array('i',palette)
178 
179  gStyle.SetPalette(palsize,palarray)
180 
181 
182 #In MeV/mm
183 dEdx = OrderedDict()
184 #--------
185 #Some elements necessary to build our materials
186 dEdx['Fe'] = 1.143
187 dEdx['Mn'] = 1.062
188 dEdx['Cr'] = 1.046
189 dEdx['Ni'] = 1.307
190 dEdx['C'] = 0.3952
191 dEdx['0'] = 0. # 2.398E-04 -> essentially zero
192 dEdx['H'] = 0. #3.437E-05 -> essentially zero
193 dEdx['Br'] = 0. #9.814E-04 -> essentially zero
194 dEdx['W'] = 2.210
195 #--------
196 
197 dEdx['Copper'] = 1.257
198 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#1996
199 dEdx['H_Scintillator'] = 0.91512109*dEdx['C'] + 0.084878906*dEdx['H']
200 dEdx['Silicon'] = 0.3876
201 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#2730
202 dEdx['M_NEMA_FR4_plate'] = 0.18077359*dEdx['Silicon'] + 0.4056325*dEdx['0'] + 0.27804208*dEdx['C'] + 0.068442752*dEdx['H'] + 0.067109079*dEdx['Br']
203 dEdx['Other'] = 0.
204 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#0290
205 dEdx['Air'] = 0.
206 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#3692
207 dEdx['StainlessSteel'] = 0.6996*dEdx['Fe']+0.01*dEdx['Mn']+0.19*dEdx['Cr']+0.1*dEdx['Ni']+0.0004*dEdx['C'];
208 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#0568
209 dEdx['WCu'] = 0.75*dEdx['W']+0.25*dEdx['Copper']
210 #--------
211 dEdx['Lead'] = 1.274 #Pb
212 #Composition of cable as Sunanda uses them is here:
213 #http://cmslxr.fnal.gov/source/Geometry/CMSCommonData/data/materials.xml#2841
214 dEdx['Cables'] = 0.586*dEdx['Copper'] + 0.259*dEdx['C'] + 0.138*dEdx['0'] + 0.017*dEdx['H']
215 
216 #In mm
217 MatXo = OrderedDict()
218 MatXo['Copper'] = 14.3559
219 MatXo['H_Scintillator'] = 425.393
220 MatXo['Cables'] = 66.722
221 MatXo['M_NEMA_FR4_plate'] = 175.056
222 MatXo['Silicon'] = 93.6762
223 MatXo['Other'] = 0.
224 MatXo['Air'] = 301522.
225 MatXo['StainlessSteel'] = 17.3555
226 MatXo['WCu'] = 5.1225
227 MatXo['Lead'] = 5.6118
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:65
def TwikiPrintout(plotname, label, zoom)