]>
Commit | Line | Data |
---|---|---|
0f772b9f | 1 | /**************************************************************************\r |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r | |
3 | * *\r | |
4 | * Author: The ALICE Off-line Project. *\r | |
5 | * Contributors are mentioned in the code where appropriate. *\r | |
6 | * *\r | |
7 | * Permission to use, copy, modify and distribute this software and its *\r | |
8 | * documentation strictly for non-commercial purposes is hereby granted *\r | |
f5fd37e8 | 9 | * withount fee, provided that the abov copyright notice appears in all *\r |
0f772b9f | 10 | * copies and that both the copyright notice and this permission notice *\r |
11 | * appear in the supporting documentation. The authors make no claims *\r | |
12 | * about the suitability of this software for any purpose. It is *\r | |
13 | * provided "as is" without express or implied warranty. *\r | |
14 | **************************************************************************/\r | |
15 | \r | |
16 | /* $Id: AliTRDqaBlackEvents.cxx 23387 2008-01-17 17:25:16Z cblume $ */\r | |
17 | \r | |
18 | ////////////////////////////////////////////////////////////////////////////\r | |
19 | // //\r | |
20 | // QA of black events //\r | |
21 | // //\r | |
22 | // Author: //\r | |
23 | // Sylwester Radomski (radomski@physi.uni-heidelberg.de) //\r | |
24 | // //\r | |
25 | ////////////////////////////////////////////////////////////////////////////\r | |
26 | \r | |
27 | #include "TH1D.h"\r | |
28 | #include "TH2D.h"\r | |
27fe785b | 29 | #include "TH2S.h"\r |
30 | #include "TH3F.h"\r | |
0f772b9f | 31 | #include "TF1.h"\r |
32 | #include "TFile.h"\r | |
33 | #include "TCanvas.h"\r | |
34 | #include "TPad.h"\r | |
35 | #include "TLatex.h"\r | |
36 | #include "TStyle.h"\r | |
37 | \r | |
38 | #include "AliTRDgeometry.h"\r | |
39 | #include "AliTRDrawStreamTB.h"\r | |
40 | #include "AliTRDqaBlackEvents.h"\r | |
41 | \r | |
42 | ClassImp(AliTRDqaBlackEvents)\r | |
43 | \r | |
0f772b9f | 44 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r |
45 | \r | |
46 | AliTRDqaBlackEvents::AliTRDqaBlackEvents() \r | |
47 | :TObject() \r | |
c29b11ff | 48 | ,fnEvents(0)\r |
27fe785b | 49 | ,fCreateFull(0)\r |
50 | ,fThresh(0)\r | |
51 | ,fCount(0)\r | |
c29b11ff | 52 | ,fOccupancy(0)\r |
27fe785b | 53 | ,fDetRob(0)\r |
54 | ,fTBEvent(0)\r | |
c29b11ff | 55 | ,fFitType(0)\r |
0f772b9f | 56 | ,fMinNoise(0.5)\r |
57 | ,fMaxNoise(2) \r | |
58 | {\r | |
59 | //\r | |
60 | // Constructor \r | |
61 | // to create the histograms call Init()\r | |
62 | //\r | |
63 | }\r | |
64 | \r | |
65 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
66 | \r | |
67 | AliTRDqaBlackEvents::AliTRDqaBlackEvents(const AliTRDqaBlackEvents &qa) \r | |
68 | :TObject(qa) \r | |
c29b11ff | 69 | ,fnEvents(0)\r |
27fe785b | 70 | ,fCreateFull(0)\r |
71 | ,fThresh(0)\r | |
72 | ,fCount(0)\r | |
c29b11ff | 73 | ,fOccupancy(0)\r |
27fe785b | 74 | ,fDetRob(0)\r |
75 | ,fTBEvent(0)\r | |
c29b11ff | 76 | ,fFitType(0)\r |
0f772b9f | 77 | ,fMinNoise(0.5)\r |
78 | ,fMaxNoise(2) \r | |
79 | {\r | |
80 | //\r | |
81 | // Copy constructor \r | |
82 | // to create the histograms call Init()\r | |
83 | //\r | |
84 | }\r | |
85 | \r | |
86 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
87 | \r | |
88 | void AliTRDqaBlackEvents::Init() \r | |
89 | {\r | |
90 | //\r | |
91 | // creates histograms \r | |
92 | // \r | |
93 | \r | |
94 | //TFile *file = new \r | |
95 | //Info("Init", "Statring");\r | |
96 | \r | |
9b99c029 | 97 | fnEvents = 0;\r |
98 | \r | |
27fe785b | 99 | // histograms for chambers\r |
100 | for(Int_t i=0; i<kDET; i++) {\r | |
9b99c029 | 101 | fNPoint[i] = new TH2D(Form("entries_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r |
27fe785b | 102 | fData[i] = new TH3F(Form("data_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5, 50, -0.5, 49.5);\r |
9b99c029 | 103 | fChPed[i] = new TH2D(Form("ped_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r |
0f772b9f | 104 | fChNoise[i] = new TH2D(Form("noise_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r |
9b99c029 | 105 | fPed[i] = new TH1D(Form("pedDist_%d", i), ";pedestals (ADC counts)", 100, 5, 15);\r |
f5fd37e8 | 106 | \r |
107 | fNoise[i] = new TH1D(Form("noiseDist_%d", i), ";noise (ADC counts)", 100, 0, 5); \r | |
c29b11ff | 108 | fSignal[i] = new TH1D(Form("signal_%d", i), ";signal (ADC counts)", 100, -0.5, 99.5);\r |
f5fd37e8 | 109 | \r |
c29b11ff | 110 | fnEntriesRM[i] = new TH2D(Form("entriesRM_%d", i), ";ROB,MCM", 8, -0.5, 7.5, 16, -0.5, 15.5);\r |
0f772b9f | 111 | }\r |
112 | \r | |
27fe785b | 113 | // histogram for each MCM\r |
114 | for(Int_t i=0; i < kDET * kROB * kMCM; i++)\r | |
115 | fFullCounter[i] = 0;\r | |
116 | \r | |
117 | // histograms from the whole detector\r | |
9b99c029 | 118 | fOccupancy = new TH1D("occupancy", "", 20, -0.5, 19.5);\r |
27fe785b | 119 | fDetRob = new TH2D("DetRob", ";detector;ROB", kDET, -0.5, 539.5, 8, -0.5, 7.5);\r |
120 | fTBEvent = new TH2D("tbEvent", ";event ID;time bin", 100, -0.5, 99.5, 30, -0.5, 29.5);\r | |
9b99c029 | 121 | \r |
0f772b9f | 122 | //Info("Init", "Done");\r |
123 | }\r | |
124 | \r | |
125 | \r | |
126 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
127 | \r | |
128 | void AliTRDqaBlackEvents::Reset() \r | |
129 | {\r | |
130 | //\r | |
131 | // Resets the histograms\r | |
132 | //\r | |
133 | \r | |
27fe785b | 134 | for(Int_t i=0; i<kDET; i++) {\r |
0f772b9f | 135 | fData[i]->Reset();\r |
136 | fChPed[i]->Reset();\r | |
137 | fChNoise[i]->Reset();\r | |
138 | }\r | |
139 | }\r | |
140 | \r | |
141 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
142 | \r | |
143 | Int_t AliTRDqaBlackEvents::AddEvent(AliTRDrawStreamTB *data) \r | |
144 | {\r | |
145 | //\r | |
146 | // Add an event\r | |
147 | //\r | |
148 | \r | |
27fe785b | 149 | // structure to keep track if particular chanel is used\r |
150 | Char_t isUsed[kDET][kCOL][kPAD]; \r | |
151 | for(Int_t i=0; i<kDET; i++)\r | |
152 | for(Int_t j=0; j<kCOL; j++)\r | |
153 | for(Int_t k=0; k<kPAD; k++)\r | |
154 | isUsed[i][j][k] = 0;\r | |
9b99c029 | 155 | \r |
0f772b9f | 156 | Int_t nb = 0;\r |
c29b11ff | 157 | Int_t rob_last = -1;\r |
158 | Int_t mcm_last = -1;\r | |
27fe785b | 159 | Int_t sm_01 = -1;\r |
c29b11ff | 160 | \r |
0f772b9f | 161 | while (data->Next()) {\r |
162 | \r | |
163 | Int_t det = data->GetDet();\r | |
f5fd37e8 | 164 | \r |
9b99c029 | 165 | Int_t row = data->GetRow();\r |
166 | Int_t col = data->GetCol();\r | |
f5fd37e8 | 167 | \r |
c29b11ff | 168 | Int_t rob = data->GetROB();\r |
169 | Int_t mcm = data->GetMCM();\r | |
27fe785b | 170 | Int_t adc = data->GetADC();\r |
f5fd37e8 | 171 | \r |
0f772b9f | 172 | Int_t *sig = data->GetSignals();\r |
173 | nb++;\r | |
174 | \r | |
27fe785b | 175 | // ugly hook\r |
176 | if (det == 0 && row == 0 && col == 0) {\r | |
177 | if (sm_01 > -1) printf("\t\t\t!!! !!! second data set !!! !!!\n");\r | |
178 | sm_01++; \r | |
179 | }\r | |
180 | \r | |
181 | det += sm_01 * 30; /// ugly\r | |
182 | \r | |
183 | // memory coruption protection\r | |
184 | if (det<0 || det>=kDET) continue;\r | |
9b99c029 | 185 | \r |
27fe785b | 186 | // check the ROBs\r |
187 | fDetRob->Fill(det, rob, 1./(kMCM*18));\r | |
c29b11ff | 188 | \r |
9b99c029 | 189 | isUsed[det][row][col]++;\r |
190 | \r | |
27fe785b | 191 | // check if mcm signal is continuus\r |
c29b11ff | 192 | if ((rob_last != rob) || (mcm_last != mcm)) {\r |
193 | rob_last = rob;\r | |
194 | mcm_last = mcm;\r | |
195 | fnEntriesRM[det]->Fill(rob,mcm);\r | |
196 | }\r | |
27fe785b | 197 | \r |
198 | // number of entries for each channels\r | |
9b99c029 | 199 | fNPoint[det]->Fill(row, col);\r |
0f772b9f | 200 | \r |
27fe785b | 201 | \r |
202 | // create a structure for an MCM if needed\r | |
203 | Int_t mcmIndex = det * (kMCM * kROB) + rob * kMCM + mcm;\r | |
204 | if (fCreateFull && !fFullSignal[mcmIndex])\r | |
205 | fFullSignal[mcmIndex] = new TH2S(Form("mcm_%d_%d_%d", det, rob, mcm), \r | |
206 | Form("mcm-%d-%d-%d;ADC;time bin", det, rob,mcm),\r | |
207 | 21, -0.5, 20.5, 30, -0.5, 29.5);\r | |
208 | \r | |
209 | \r | |
210 | // loop over Time Bins and fill histograms\r | |
211 | for(Int_t k=0; k<kTB; k++) { /// to be corrected\r | |
212 | \r | |
213 | //if (sig[k] < 1) \r | |
214 | //printf("det = %d rob = %d mcm = %d adc = %d k = %d S = %d\n", det, rob, mcm, adc, k, sig[k]);\r | |
215 | \r | |
0f772b9f | 216 | fSignal[det]->Fill(sig[k]);\r |
9b99c029 | 217 | fData[det]->Fill(row, col, sig[k]);\r |
27fe785b | 218 | \r |
219 | // check if data strange enought\r | |
220 | if (fCreateFull && fFullSignal[mcmIndex]) {\r | |
221 | if (sig[k] > fThresh || sig[k] < 1) fFullCounter[mcmIndex]++;\r | |
222 | fFullSignal[mcmIndex]->Fill(adc, k, sig[k]);\r | |
223 | }\r | |
224 | \r | |
225 | // noisy chamber\r | |
226 | if (det == 29) {\r | |
227 | fTBEvent->Fill(fnEvents, k, sig[k]);\r | |
228 | }\r | |
229 | \r | |
0f772b9f | 230 | }\r |
231 | }\r | |
9b99c029 | 232 | \r |
27fe785b | 233 | // is the dead-alive status changing during the run\r |
234 | for(Int_t i=0; i<kDET; i++) {\r | |
235 | for(Int_t j=0; j<kCOL; j++)\r | |
236 | for(Int_t k=0; k<kPAD; k++)\r | |
9b99c029 | 237 | fOccupancy->Fill(isUsed[i][j][k]);\r |
238 | }\r | |
0f772b9f | 239 | \r |
9b99c029 | 240 | fnEvents++;\r |
0f772b9f | 241 | return nb;\r |
242 | }\r | |
243 | \r | |
244 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
245 | \r | |
246 | void AliTRDqaBlackEvents::Process(const char *filename) \r | |
247 | {\r | |
248 | //\r | |
249 | // Process something\r | |
250 | //\r | |
251 | \r | |
27fe785b | 252 | Int_t map[kDET];\r |
0f772b9f | 253 | \r |
254 | TH1D *hist = new TH1D("fitSignal", "", 50, -0.5, 49.5);\r | |
255 | TF1 *fit = new TF1("fit", "gaus(0)", 0, 20);\r | |
256 | fit->SetParameters(1e3, 10, 1);\r | |
257 | \r | |
27fe785b | 258 | for(Int_t i=0; i<kDET; i++) {\r |
9b99c029 | 259 | \r |
0f772b9f | 260 | map[i] = 0;\r |
9b99c029 | 261 | if (fData[i]->GetSum() < 10) continue;\r |
0f772b9f | 262 | map[i] = 1;\r |
263 | \r | |
264 | Info("process", "processing chamber %d", i);\r | |
265 | \r | |
266 | for(Int_t j=0; j<fData[i]->GetXaxis()->GetNbins(); j++) {\r | |
267 | for(Int_t k=0; k<fData[i]->GetYaxis()->GetNbins(); k++) {\r | |
268 | \r | |
269 | // project the histogramm\r | |
270 | hist->Reset();\r | |
271 | for(Int_t bb=0; bb<50; bb++) {\r | |
272 | Int_t dataBin = fData[i]->FindBin(j, k, bb);\r | |
273 | Double_t v = fData[i]->GetBinContent(dataBin);\r | |
274 | hist->SetBinContent(bb+1, v);\r | |
275 | }\r | |
276 | \r | |
277 | //TH1D *hist = fData[i]->ProjectionZ(Form("pad_%_%d_%d", i, j, k), j+1, j+1, k+1, k+1);\r | |
278 | \r | |
279 | Int_t bin = fChPed[i]->FindBin(j, k);\r | |
280 | \r | |
9b99c029 | 281 | if (hist->GetSum() > 1) {\r |
282 | \r | |
283 | Double_t ped = 0, noise = 0;\r | |
284 | \r | |
285 | if (fFitType == 0) {\r | |
286 | fit->SetParameters(1e3, 10, 1);\r | |
287 | hist->Fit(fit, "q0", "goff", 0, 20);\r | |
288 | TF1 *f = hist->GetFunction("fit");\r | |
289 | ped = TMath::Abs(f->GetParameter(1));\r | |
290 | noise = TMath::Abs(f->GetParameter(2));\r | |
291 | } else {\r | |
292 | ped = hist->GetMean();\r | |
293 | noise = hist->GetRMS();\r | |
294 | }\r | |
0f772b9f | 295 | \r |
296 | fChPed[i]->SetBinContent(bin, ped);\r | |
297 | fChNoise[i]->SetBinContent(bin, noise);\r | |
298 | \r | |
299 | fPed[i]->Fill(ped);\r | |
300 | fNoise[i]->Fill(noise);\r | |
301 | \r | |
302 | } else {\r | |
9b99c029 | 303 | fChPed[i]->SetBinContent(bin, 0);\r |
304 | fChNoise[i]->SetBinContent(bin, 0);\r | |
0f772b9f | 305 | }\r |
306 | \r | |
307 | //delete hist;\r | |
308 | }\r | |
309 | }\r | |
310 | }\r | |
311 | \r | |
c29b11ff | 312 | Info("Process", "Number of events = %d", fnEvents);\r |
9b99c029 | 313 | \r |
c29b11ff | 314 | // normalize number of entries histos\r |
9b99c029 | 315 | Int_t max = 0;\r |
27fe785b | 316 | for(Int_t i=0; i<kDET; i++) { \r |
9b99c029 | 317 | if (!map[i]) continue;\r |
318 | for(Int_t j=0; j<fNPoint[i]->GetXaxis()->GetNbins(); j++) {\r | |
319 | for(Int_t k=0; k<fNPoint[i]->GetYaxis()->GetNbins(); k++) {\r | |
320 | Int_t dataBin = fNPoint[i]->FindBin(j, k);\r | |
321 | Double_t v = fNPoint[i]->GetBinContent(dataBin);\r | |
322 | if (v > max) max = (Int_t)v;\r | |
323 | }\r | |
324 | }\r | |
325 | }\r | |
326 | \r | |
27fe785b | 327 | char entriesDistName[100];\r |
328 | \r | |
329 | for(Int_t i=0; i<kDET; i++) {\r | |
9b99c029 | 330 | \r |
331 | if (!map[i]) continue;\r | |
332 | \r | |
27fe785b | 333 | sprintf(entriesDistName, "entriesDist_%d", i);\r |
334 | fNPointDist[i] = new TH1D(entriesDistName, ";number of events", max+2, -0.5, max+1.5);\r | |
9b99c029 | 335 | \r |
336 | for(Int_t j=0; j<fNPoint[i]->GetXaxis()->GetNbins(); j++) {\r | |
337 | for(Int_t k=0; k<fNPoint[i]->GetYaxis()->GetNbins(); k++) {\r | |
338 | Int_t dataBin = fNPoint[i]->FindBin(j, k);\r | |
339 | Double_t v = fNPoint[i]->GetBinContent(dataBin);\r | |
340 | //if (v > fnEvents) printf("N = %d V = %lf\n", fnEvents, v);\r | |
341 | fNPointDist[i]->Fill(v); \r | |
342 | }\r | |
343 | }\r | |
344 | \r | |
345 | fNPoint[i]->Scale(1./fnEvents);\r | |
346 | }\r | |
347 | \r | |
f5fd37e8 | 348 | \r |
27fe785b | 349 | for(Int_t i=0; i<kDET; i++) {\r |
c29b11ff | 350 | fnEntriesRM[i]->SetMaximum(fnEvents * 1.5);\r |
351 | }\r | |
352 | \r | |
27fe785b | 353 | // save histograms\r |
354 | \r | |
355 | TFile *file = new TFile(filename, "recreate");\r | |
356 | for(Int_t i=0; i<kDET; i++) {\r | |
0f772b9f | 357 | if (!map[i]) continue; \r |
358 | fChPed[i]->Write();\r | |
359 | fChNoise[i]->Write();\r | |
9b99c029 | 360 | fNPoint[i]->Write();\r |
361 | fNPointDist[i]->Write();\r | |
0f772b9f | 362 | fPed[i]->Write();\r |
363 | fNoise[i]->Write();\r | |
364 | fSignal[i]->Write();\r | |
c29b11ff | 365 | fnEntriesRM[i]->Write();\r |
0f772b9f | 366 | }\r |
27fe785b | 367 | \r |
368 | Int_t nMcm = 0;\r | |
369 | for(Int_t i=0; i < kDET * kROB * kMCM; i++) {\r | |
370 | if (fFullSignal[i] && fFullCounter[i] > fCount) {\r | |
371 | fFullSignal[i]->Write();\r | |
372 | nMcm++;\r | |
373 | }\r | |
374 | }\r | |
375 | \r | |
376 | printf("Number of saved MCMs = %d\n", nMcm);\r | |
377 | \r | |
9b99c029 | 378 | fOccupancy->Write();\r |
27fe785b | 379 | fDetRob->Write();\r |
380 | fTBEvent->Write();\r | |
0f772b9f | 381 | file->Close();\r |
382 | delete file;\r | |
383 | }\r | |
384 | \r | |
385 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
386 | \r | |
387 | void AliTRDqaBlackEvents::DrawChamber(const char *filename, Int_t det, Int_t w, Int_t h) \r | |
388 | {\r | |
389 | //\r | |
390 | // Draw raport for one chamber: \r | |
391 | // pedestal map, noise map, distribution of pedestal and noise\r | |
392 | // \r | |
393 | // input:\r | |
394 | // name of the file with histograms (created with Process())\r | |
395 | // detector Id (0 - 539)\r | |
396 | // \r | |
397 | \r | |
398 | // setup global style\r | |
399 | gStyle->SetPalette(1);\r | |
400 | gStyle->SetOptStat(0);\r | |
401 | gStyle->SetPadTopMargin(0.02);\r | |
402 | gStyle->SetPadBottomMargin(0.05);\r | |
403 | \r | |
404 | TFile *file = new TFile(filename, "READ");\r | |
405 | \r | |
406 | TCanvas *c = new TCanvas("blackEvents",Form("blackEvents %d",det), w, h);\r | |
407 | c->SetVertical(kFALSE);\r | |
408 | c->Divide(3,1, 0.01, 0.01);\r | |
409 | c->cd(3);\r | |
410 | \r | |
411 | TPad *mPad = (TPad*) gPad;\r | |
412 | mPad->Divide(1,2,0.01,0.01);\r | |
413 | \r | |
414 | c->cd(1);\r | |
415 | TH2D *h2 = (TH2D*)file->Get(Form("ped_%d",det));\r | |
416 | h2->SetMinimum(5);\r | |
417 | h2->SetMaximum(15);\r | |
418 | h2->SetTitle(";Z direction;#phi direction");\r | |
419 | h2->Draw("colz");\r | |
420 | \r | |
421 | c->cd(2);\r | |
422 | h2 = (TH2D*)file->Get(Form("noise_%d",det));\r | |
423 | h2->SetMinimum(fMinNoise);\r | |
424 | h2->SetMaximum(fMaxNoise);\r | |
425 | h2->SetTitle(";Z direction;#phi direction");\r | |
426 | h2->Draw("colz");\r | |
427 | \r | |
428 | mPad->cd(1);\r | |
429 | //gPad->SetLogy();\r | |
430 | TH1D *h1 = (TH1D*)file->Get(Form("pedDist_%d", det));\r | |
431 | h1->Draw();\r | |
432 | \r | |
433 | mPad->cd(2);\r | |
434 | gPad->SetLogy();\r | |
435 | h1 = (TH1D*)file->Get(Form("noiseDist_%d", det));\r | |
436 | h1->Draw(); \r | |
437 | \r | |
438 | h1->Fit("gaus");\r | |
439 | TF1 *f = h1->GetFunction("gaus");\r | |
440 | const char *tt = Form("#mu = %.2f #sigma = %0.2f ", f->GetParameter(1),f->GetParameter(2));\r | |
441 | TLatex *ll = new TLatex(2, 100, tt);\r | |
442 | ll->SetTextSize(0.06);\r | |
443 | ll->Draw();\r | |
444 | }\r | |
445 | \r | |
446 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r | |
447 | \r | |
448 | void AliTRDqaBlackEvents::DrawSm(const char *filename, Int_t sm, Int_t w, Int_t h) \r | |
449 | {\r | |
450 | //\r | |
451 | // ????????????\r | |
452 | //\r | |
453 | \r | |
454 | gStyle->SetPalette(1);\r | |
455 | gStyle->SetOptStat(0);\r | |
456 | \r | |
457 | gStyle->SetPadTopMargin(0.02);\r | |
458 | //gStyle->SetPadBottomMargin(0.05); \r | |
459 | //gStyle->SetPadLeftMargin(0.02); \r | |
460 | //gStyle->SetPadRightMargin(0.02);\r | |
461 | \r | |
462 | TFile *file = new TFile(filename, "READ");\r | |
463 | \r | |
464 | TCanvas *c = new TCanvas("blackEventsSM",Form("blackEvents SM %d",sm), w, h);\r | |
465 | c->SetVertical(kFALSE);\r | |
466 | c->Divide(5, 6, 0.001, 0.01);\r | |
467 | \r | |
468 | for(Int_t i=0; i<30; i++) {\r | |
469 | \r | |
470 | TH2D *h2 = (TH2D*)file->Get(Form("noise_%d",i+30*sm));\r | |
471 | if (!h2) continue;\r | |
472 | h2->SetMinimum(fMinNoise);\r | |
473 | h2->SetMaximum(fMaxNoise);\r | |
474 | \r | |
475 | // to be replaced by the official calculation\r | |
476 | Int_t stack = i/6;\r | |
477 | Int_t layer = i%6;\r | |
478 | Int_t index = (5-layer)*5 + stack + 1;\r | |
479 | //printf("%d %d %d %d\n", i, stack, layer, index);\r | |
480 | c->cd(index);\r | |
481 | gPad->SetBottomMargin(0.02);\r | |
482 | gPad->SetTopMargin(0.02);\r | |
483 | \r | |
484 | h2->Draw("col");\r | |
485 | }\r | |
486 | }\r | |
487 | \r | |
488 | ///////////////////////////////////////////////////////////////////////////////////////////////////\r |