Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
display.C
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file display.C
1 #include <calobase/TowerInfoDefs.h>
2 R__LOAD_LIBRARY(libcalo_io.so)
3 
4 void display(const string& inputFile="output/test.root", const string& outputDir="output", const string& run = "0", bool do_waveforms = false) {
5  TFile input(inputFile.c_str());
6 
7  bool style_eta_phi = true;
8  auto c1 = new TCanvas();
9 
10  c1->cd();
11  c1->SetTickx();
12  c1->SetTicky();
13 
14  c1->SetCanvasSize(1500, 1000);
15 
16  c1->SetLeftMargin(.1);
17  c1->SetRightMargin(.05);
18  // gPad->SetLogz();
19 
20  string outputFile = outputDir + "/plots-" + run + ".pdf";
21  c1->Print((outputFile + "[").c_str(), "pdf portrait");
22  // ------------------------------------------------------------
23 
24  gPad->SetLogy();
25  auto h1 = (TH1D*)(input.Get("hTime"))->Clone();
26  h1->SetTitle(("Run: " + run + ", Peak Location").c_str());
27  // h1->SetStats(0);
28  // h1->GetYaxis()->SetRangeUser(9e3,1e7);
29  h1->Draw();
30  gPad->Update();
31 
32  auto st = (TPaveStats*)h1->GetListOfFunctions()->FindObject("stats");
33  st->SetX1NDC(0.65); //new x start position
34  st->SetX2NDC(0.95); //new x end position
35 
36  st->SetY1NDC(0.6); //new y start position
37  st->SetY2NDC(0.90); //new y end position
38 
39  c1->Print((outputFile).c_str(), "pdf portrait");
40 
41  // ------------------------------------------------------------
42 
43  h1 = (TH1D*)(input.Get("hADC"))->Clone();
44  h1->SetTitle(("Run: " + run + ", ADC").c_str());
45  h1->SetStats(0);
46  // h1->GetYaxis()->SetRangeUser(5e-1,1e7);
47  h1->Draw();
48  c1->Print((outputFile).c_str(), "pdf portrait");
49 
50  // ------------------------------------------------------------
51 
52  h1 = (TH1D*)(input.Get("hadc"))->Clone();
53  h1->SetTitle(("Run: " + run + ", adc").c_str());
54  h1->SetStats(0);
55  // h1->GetYaxis()->SetRangeUser(5e-1,1e7);
56  h1->Draw();
57  c1->Print((outputFile).c_str(), "pdf portrait");
58 
59  // ------------------------------------------------------------
60 
61  h1 = (TH1D*)(input.Get("hPed"))->Clone();
62  h1->SetTitle(("Run: " + run + ", Pedestal").c_str());
63  h1->SetStats(0);
64  // h1->GetYaxis()->SetRangeUser(5e-1,1e7);
65  h1->Draw();
66  c1->Print((outputFile).c_str(), "pdf portrait");
67 
68  // ------------------------------------------------------------
69 
70  // c1->SetLeftMargin(.1);
71  // c1->SetRightMargin(.1);
72  gPad->SetLogy(0);
73 
74  // auto h2 = (TH2D*)(input.Get("scat/h2TimeVsChannel_scat"))->Clone();
75  // h2->SetStats(0);
76  // h2->SetMarkerStyle(8);
77  // h2->SetMarkerColor(kRed);
78  // h2->SetFillColor(kRed);
79  // h2->GetXaxis()->SetRangeUser(1400,3200);
80  // h2->Draw();
81  // c1->Print((outputFile).c_str(), "pdf portrait");
82 
83  // ------------------------------------------------------------
84 
85  c1->SetLeftMargin(.11);
86  c1->SetRightMargin(.03);
87  // h2 = (TH2D*)(input.Get("scat/h2ADCVsChannel_scat"))->Clone();
88  auto h2 = (TH2D*)(input.Get("h2ADCVsChannel"))->Clone();
89  h2->SetStats(0);
90  // h2->SetMarkerStyle(8);
91  // h2->SetMarkerColor(kRed);
92  // h2->SetFillColor(kRed);
93  // h2->GetXaxis()->SetRangeUser(1400,3200);
94  // h2->Draw();
95  // c1->Print((outputFile).c_str(), "pdf portrait");
96 
97  // h2->GetYaxis()->SetRangeUser(0,4e3);
98  // c1->Print((outputFile).c_str(), "pdf portrait");
99 
100  h1 = (TH1D*)h2->ProfileX()->Clone();
101  h1->SetTitle(("Run: " + run + ", Average ADC vs Channel; Channel; ADC").c_str());
102  h1->SetMarkerStyle(6);
103  h1->SetMarkerColor(kRed);
104  h1->SetStats(0);
105  h1->Draw();
106  c1->Print((outputFile).c_str(), "pdf portrait");
107 
108  // h1 = (TH1D*)((TH2*)input.Get("scat/h2ADCVsChannel_scat"))->ProfileX();
109  h1 = (TH1D*)((TH2*)input.Get("h2ADCVsChannel"))->ProfileX();
110  TH2D* h2_missing;
111  if(style_eta_phi) {
112  h2 = new TH2D("h2AvgAdc", "Average ADC; Towerid #eta; Towerid #phi", 96, 0-0.5, 96-0.5, 256, 0-0.5, 256-0.5);
113  h2_missing = new TH2D("h2AvgAdcMissing", "Average ADC (Zeros); Towerid #eta; Towerid #phi", 96, 0-0.5, 96-0.5, 256, 0-0.5, 256-0.5);
114  }
115  else {
116  h2 = new TH2D("h2AvgAdc", "Average ADC; Towerid #phi; Towerid #eta", 256, 0-0.5, 256-0.5, 96, 0-0.5, 96-0.5);
117  h2_missing = new TH2D("h2AvgAdcMissing", "Average ADC (Zeros); Towerid #phi; Towerid #eta", 256, 0-0.5, 256-0.5, 96, 0-0.5, 96-0.5);
118  }
119 
120  for (Int_t channel = 0; channel < 24576; ++channel) {
123  Int_t phibin = TowerInfoDefs::getCaloTowerPhiBin(key);
124 
125  Double_t avg_adc = h1->GetBinContent(channel+1);
126 
127  //h2->SetBinContent(etabin+1, phibin+1, avg_adc);
128  if(style_eta_phi) {
129  h2->SetBinContent(etabin+1, phibin+1, avg_adc);
130  if(avg_adc == 0) h2_missing->SetBinContent(etabin+1, phibin+1, 1);
131  }
132  else {
133  h2->SetBinContent(phibin+1, etabin+1, avg_adc);
134  if(avg_adc == 0) h2_missing->SetBinContent(phibin+1, etabin+1, 1);
135  }
136  // if(avg_adc != 0) cout << "etabin: " << etabin << ", phibin: " << phibin << ", " << " channel: " << channel << ", avg_adc: " << avg_adc << endl;
137  }
138 
139  c1->SetRightMargin(.12);
140  h2->SetStats(0);
141  h2->SetTitle(("Run: " + run + ", Average ADC").c_str());
142  // h2->SetMaximum(5e3);
143  h2->Draw("COLZ1");
144 
145  auto tline = new TLine();
146 
147  if(style_eta_phi) {
148  for (UInt_t i = 0; i < 32; ++i) {
149  tline->DrawLine(-0.5, 8*i-0.5, 95.5, 8*i-0.5);
150  }
151  for (UInt_t i = 0; i < 12; ++i) {
152  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 255.5);
153  }
154  }
155  else {
156  for (UInt_t i = 0; i < 32; ++i) {
157  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 95.5);
158  }
159  for (UInt_t i = 0; i < 12; ++i) {
160  tline->DrawLine(-0.5, 8*i-0.5, 255.5, 8*i-0.5);
161  }
162  }
163 
164  c1->Print((outputFile).c_str(), "pdf portrait");
165 
166  // h2->GetYaxis()->SetRangeUser(0,50);
167  // c1->Print((outputFile).c_str(), "pdf portrait");
168 
169  h2_missing->SetStats(0);
170  h2_missing->SetTitle(("Run: " + run + ", Average ADC (zeros)").c_str());
171  // h2->SetMaximum(4e3);
172  h2_missing->Draw("COLZ1");
173 
174  tline = new TLine();
175 
176  if(style_eta_phi) {
177  for (UInt_t i = 0; i < 32; ++i) {
178  tline->DrawLine(-0.5, 8*i-0.5, 95.5, 8*i-0.5);
179  }
180  for (UInt_t i = 0; i < 12; ++i) {
181  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 255.5);
182  }
183  }
184  else {
185  for (UInt_t i = 0; i < 32; ++i) {
186  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 95.5);
187  }
188  for (UInt_t i = 0; i < 12; ++i) {
189  tline->DrawLine(-0.5, 8*i-0.5, 255.5, 8*i-0.5);
190  }
191  }
192 
193  c1->Print((outputFile).c_str(), "pdf portrait");
194 
195  c1->SetRightMargin(.1);
196  c1->SetLeftMargin(.1);
197 
198  // ------------------------------------------------------------
199 
200  c1->SetLeftMargin(.12);
201  c1->SetRightMargin(.04);
202  h2 = (TH2D*)(input.Get("h2PedVsChannel"))->Clone();
203  h2->SetStats(0);
204  h2->SetMarkerStyle(8);
205  h2->SetMarkerColor(kRed);
206  h2->SetFillColor(kRed);
207  // h2->GetXaxis()->SetRangeUser(1400,3200);
208  h2->Draw();
209  // c1->Print((outputFile).c_str(), "pdf portrait");
210 
211  h1 = (TH1D*)h2->ProfileX()->Clone();
212  h1->SetTitle(("Run: " + run + ", Average Pedestal vs Channel; Channel; Pedestal").c_str());
213  h1->SetStats(0);
214  h1->Draw();
215  c1->Print((outputFile).c_str(), "pdf portrait");
216 
217  // ------------------------------------------------------------
218 
219  c1->SetLeftMargin(.1);
220 
221  h2 = (TH2D*)(input.Get("h2PedVsChannel"))->Clone();
222  h1 = (TH1D*)h2->ProfileX()->Clone();
223 
224  if(style_eta_phi) {
225  h2 = new TH2D("h2AvgPed", "Average Pedestal; Towerid #eta; Towerid #phi", 96, 0-0.5, 96-0.5, 256, 0-0.5, 256-0.5);
226  }
227  else {
228  h2 = new TH2D("h2AvgPed", "Average Pedestal; Towerid #phi; Towerid #eta", 256, 0-0.5, 256-0.5, 96, 0-0.5, 96-0.5);
229  }
230 
231  for (Int_t channel = 0; channel < 24576; ++channel) {
234  Int_t phibin = TowerInfoDefs::getCaloTowerPhiBin(key);
235 
236  Double_t avg_ped = h1->GetBinContent(channel+1);
237 
238  if(style_eta_phi) h2->SetBinContent(etabin+1, phibin+1, avg_ped);
239  else h2->SetBinContent(phibin+1, etabin+1, avg_ped);
240  // if(avg_adc != 0) cout << "etabin: " << etabin << ", phibin: " << phibin << ", " << " channel: " << channel << ", avg_adc: " << avg_adc << endl;
241  }
242 
243  c1->SetRightMargin(.12);
244  h2->SetStats(0);
245  h2->SetTitle(("Run: " + run + ", Average Pedestal").c_str());
246  h2->SetMaximum(3e3);
247  h2->Draw("COLZ1");
248 
249  tline = new TLine();
250 
251  if(style_eta_phi) {
252  for (UInt_t i = 0; i < 32; ++i) {
253  tline->DrawLine(-0.5, 8*i-0.5, 95.5, 8*i-0.5);
254  }
255  for (UInt_t i = 0; i < 12; ++i) {
256  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 255.5);
257  }
258  }
259  else {
260  for (UInt_t i = 0; i < 32; ++i) {
261  tline->DrawLine(8*i-0.5, -0.5, 8*i-0.5, 95.5);
262  }
263  for (UInt_t i = 0; i < 12; ++i) {
264  tline->DrawLine(-0.5, 8*i-0.5, 255.5, 8*i-0.5);
265  }
266  }
267 
268  c1->Print((outputFile).c_str(), "pdf portrait");
269 
270  // ------------------------------------------------------------
271 
272  // c1->SetLeftMargin(.11);
273  // h2 = (TH2D*)(input.Get("scat/h2ADCVsTime_scat"))->Clone();
274  // h2->SetStats(0);
275  // h2->SetMarkerStyle(8);
276  // h2->SetMarkerColor(kRed);
277  // h2->SetFillColor(kRed);
278  // h2->Draw();
279  // c1->Print((outputFile).c_str(), "pdf portrait");
280  // c1->SetLeftMargin(.1);
281 
282  // ------------------------------------------------------------
283 
284  // h2 = (TH2D*)(input.Get("scat/h2PedVsTime_scat"))->Clone();
285  // h2->SetStats(0);
286  // h2->SetMarkerStyle(8);
287  // h2->SetMarkerColor(kRed);
288  // h2->SetFillColor(kRed);
289  // h2->Draw();
290  // c1->Print((outputFile).c_str(), "pdf portrait");
291 
292  // ------------------------------------------------------------
293 
294  // c1->SetLeftMargin(.13);
295  // h2 = (TH2D*)(input.Get("scat/h2ADCVsPed_scat"))->Clone();
296  // h2->SetStats(0);
297  // h2->SetMarkerStyle(8);
298  // h2->SetMarkerColor(kRed);
299  // h2->SetFillColor(kRed);
300  // h2->Draw();
301  // c1->Print((outputFile).c_str(), "pdf portrait");
302  // c1->SetLeftMargin(.1);
303 
304  c1->Print((outputFile + "]").c_str(), "pdf portrait");
305  // ------------------------------------------------------------
306 
307  if(do_waveforms) {
308 
309  gStyle->SetPalette(kThermometer);
310 
311  outputFile = outputDir + "/adcVsTime-" + run + ".pdf";
312  // Total channels 24576
313  Int_t i_max = 12; // 12
314  Int_t j_max = 32; // 32
315 
316  // auto h2_pos_global = new TH2F("h2_pos_global", "Towers; Towerid #eta; Towerid #phi", 96, 0-0.5, 96-0.5, 256, 0-0.5, 256-0.5);
317  auto h2_pos_global = new TH2F("h2_pos_global", "Towers; Towerid #phi; Towerid #eta", 256, 0-0.5, 256-0.5, 96, 0-0.5, 96-0.5);
318  h2_pos_global->SetFillColor(kGreen);
319  for(Int_t i = 0; i < i_max; ++i) {
320  for (Int_t j = 0; j < j_max; ++j) {
321  for (Int_t etabin = i*8+7; etabin >= i*8; --etabin) {
322  for (Int_t phibin = j*8; phibin < j*8+8; ++phibin) {
323  UInt_t key = TowerInfoDefs::encode_emcal(etabin, phibin);
324  UInt_t channel = TowerInfoDefs::decode_emcal(key);
325  h2 = (TH2D*)(input.Get(("adcVsTime/h2adcVsTime_"+to_string(channel)).c_str()));
326  if(h2) h2_pos_global->SetBinContent(phibin+1,etabin+1, 1);
327  // if(h2) h2_pos_global->SetBinContent(phibin+1,etabin+1, 1);
328  }
329  }
330  }
331  }
332 
333  // c1->Print("output/adcVsTime.pdf[", "pdf portrait");
334  c1->Print((outputFile + "[").c_str(), "pdf portrait");
335  for(Int_t i = 0; i < i_max; ++i) {
336  for (Int_t j = 0; j < j_max; ++j) {
337  if((i*j_max+j)%3 == 0) cout << "Progress: " << (i*j_max+j)*100./(i_max*j_max) << " %" << endl;
338 
339  c1 = new TCanvas();
340  c1->SetCanvasSize(1500, 1000);
341  auto pad1 = new TPad("pad1", "pad1", 0.01, 0.01, 0.8, 1);
342  auto pad2 = new TPad("pad2", "pad2", 0.8, 0.8, 1, 1);
343  // auto h2_pos = new TH2F("h2_pos", "Towers; Towerid #eta; Towerid #phi", 96, 0-0.5, 96-0.5, 256, 0-0.5, 256-0.5);
344  auto h2_pos = new TH2F("h2_pos", "Towers; Towerid #phi; Towerid #eta", 256, 0-0.5, 256-0.5, 96, 0-0.5, 96-0.5);
345  pad1->DivideSquare(64,0,0);
346  pad1->Draw();
347  pad2->Draw();
348 
349  bool contains_channels = false;
350  UInt_t pad = 1;
351  for (Int_t etabin = i*8+7; etabin >= i*8; --etabin) {
352  for (Int_t phibin = j*8; phibin < j*8+8; ++phibin) {
353  UInt_t key = TowerInfoDefs::encode_emcal(etabin, phibin);
354  UInt_t channel = TowerInfoDefs::decode_emcal(key);
355  h2 = (TH2D*)(input.Get(("adcVsTime/h2adcVsTime_"+to_string(channel)).c_str()));
356  if(h2) {
357  h2_pos->SetBinContent(phibin+1,etabin+1, 1);
358  // h2_pos->SetBinContent(phibin+1,etabin+1, 1);
359  pad1->cd(pad);
360  contains_channels = true;
361 
362  h2 = (TH2D*)h2->Clone();
363  // h1 = (TH1D*)h2->ProfileX()->Clone();
364  gPad->SetTickx();
365  gPad->SetTicky();
366  // h1->SetTitle("");
367  // h1->SetStats(0);
368  // h1->GetYaxis()->SetRangeUser(0,17e3);
369  // h1->SetMarkerStyle(8);
370  // h1->SetMarkerSize(0.3);
371  // h1->SetMarkerColor(kRed);
372  h2->SetTitle("");
373  h2->SetStats(0);
374  // h2->GetYaxis()->SetRangeUser(0,17e3);
375  // h2->SetMarkerStyle(8);
376  // h2->SetMarkerSize(0.3);
377  // h2->SetMarkerColor(kRed);
378  h2->Draw("COL");
379  // h2->Draw();
380 
381  auto pt = new TPaveText(.7,.7,.95,.9, "NDC");
382  pt->AddText((to_string(phibin) + ", " + to_string(etabin)).c_str());
383  // pt->AddText((to_string(phibin) + ", " + to_string(etabin)).c_str());
384  pt->Draw();
385  }
386  // cout << "etabin: " << etabin << ", phibin: " << phibin << ", channel: " << channel << ", pad: " << pad << endl;
387  ++pad;
388  }
389  }
390  if(contains_channels) {
391  pad2->cd();
392  pad2->SetTickx();
393  pad2->SetTicky();
394 
395  h2_pos_global->SetStats(0);
396  h2_pos_global->Draw("BOX");
397  h2_pos->Draw("BOX same");
398  // c1->Print("output/adcVsTime.pdf", "pdf portrait");
399  c1->Print((outputFile).c_str(), "pdf portrait");
400  // c1->Print(("output/adcVsTime-"+to_string(i) + "-" + to_string(j) + ".png").c_str(), "png portrait");
401  // ++pages;
402  }
403  delete h2_pos;
404  delete pad1;
405  delete pad2;
406  }
407  }
408  // c1->Print("output/adcVsTime.pdf]", "pdf portrait");
409  c1->Print((outputFile + "]").c_str(), "pdf portrait");
410  }
411 
412  input.Close();
413 }