]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/macros/Pedestals/Pedestals.C
CMake: removing qpythia from the depedencies
[u/mrichter/AliRoot.git] / PHOS / macros / Pedestals / Pedestals.C
CommitLineData
e8f49998 1#if !defined(__CINT__) || defined(__MAKECINT__)
e8f49998 2using namespace std;
37e550bd 3#include "iostream"
4
5#include <TStopwatch.h>
6#include <TStyle.h>
7#include <TFile.h>
8#include <TH1F.h>
9#include <TH2F.h>
10#include <TString.h>
11#include <TCanvas.h>
12#include <TSystem.h>
13#include <TGrid.h>
14#include <TMath.h>
15
16#include "AliRawReader.h"
17#include "AliCaloRawStreamV3.h"
18#include "AliLog.h"
19#include "AliCentralTrigger.h"
20#include "AliTriggerConfiguration.h"
21#include "AliTriggerClass.h"
22#include "AliCDBManager.h"
e8f49998 23
24#endif
25
37e550bd 26//-----------------------------------------------------------------------------
27static Bool_t firstEvent = kTRUE;
28static Int_t runNum;
29static UInt_t period;
30static UInt_t orbitID;
31static UInt_t bcID;
32static AliRawReader *reader;
33TString GetTriggerClass(ULong64_t);
34
35//-----------------------------------------------------------------------------
faa97b1b 36void Pedestals(const TString rawFile= "", const char *selectTrigger="CPHI")
e8f49998 37{
38 // Read raw data, decode it to samples,
39 // calculate pedestals from presamples,
40 // evaluate the signal amplitude as a maximum sample,
41 // and fill histograms with pedestals and amplitudes
42 // This script should be compiled to speed up the data processing:
43 // .L Pedestals.C++
44 //___
45 // Yuri Kharlov. 6 September 2007
46
47 TStopwatch stopwatch;
48 stopwatch.Start();
49
50 if (rawFile.BeginsWith("alien://")) {
e8f49998 51 TGrid::Connect("alien://");
52 }
53
37e550bd 54 AliCDBManager *man = AliCDBManager::Instance();
55 man->SetDefaultStorage("raw://");
56
57 reader = AliRawReader::Create(rawFile);
e8f49998 58 reader->Reset();
59
60 TStopwatch timer;
61 timer.Start();
62
63 AliCaloRawStreamV3 *stream = new AliCaloRawStreamV3(reader,"PHOS");
64
65 TString baseNamePed ="hPed";
66 TString baseTitlePed="Ped in cell (";
67 const char* sgain[3]={"LG","HG", "TRU"};
68
37e550bd 69 const Int_t caloFlagMax=2,modMax=5,cellXMax=64,cellZMax=56;
70 Int_t module,caloFlag,cellX,cellZ;
71 TH1F *hPed[5][2][64][56];
72 for (module=0; module<modMax; module++) {
73 for (caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
74 for (cellX=0; cellX<cellXMax; cellX++) {
75 for (cellZ=0; cellZ<cellZMax; cellZ++) {
76 hPed[module][caloFlag][cellX][cellZ] = 0;
e8f49998 77 }
78 }
79 }
80 }
81 TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.);
82 TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.);
83 TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.);
84 TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.);
85 TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.);
86 TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.);
87
88 TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.);
89 TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.);
90 TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.);
91 TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.);
92 TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.);
93 TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.);
94
95 TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.);
96 TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.);
97 TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.);
98 TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.);
99 TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.);
100 TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.);
101
102 hPedHiMean1m2->Sumw2();
103 hPedHiRMS1m2 ->Sumw2();
104 hPedLoMean1m2->Sumw2();
105 hPedLoRMS1m2 ->Sumw2();
106 hPedTRUMean1m2->Sumw2();
107 hPedTRURMS1m2 ->Sumw2();
108 hPedHiMean1m3->Sumw2();
109 hPedHiRMS1m3 ->Sumw2();
110 hPedLoMean1m3->Sumw2();
111 hPedLoRMS1m3 ->Sumw2();
112 hPedTRUMean1m3->Sumw2();
113 hPedTRURMS1m3 ->Sumw2();
114 hPedHiMean1m4->Sumw2();
115 hPedHiRMS1m4 ->Sumw2();
116 hPedLoMean1m4->Sumw2();
117 hPedLoRMS1m4 ->Sumw2();
118 hPedTRUMean1m4->Sumw2();
119 hPedTRURMS1m4 ->Sumw2();
120
121 TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain",
122 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
123 TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain",
124 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
125 TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain",
126 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
127 TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain",
128 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
129 TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain",
130 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
131 TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain",
132 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
133
134 TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain",
135 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
136 TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain",
137 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
138 TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain",
139 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
140 TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain",
141 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
142 TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain",
143 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
144 TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain",
145 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
146
147 TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain",
148 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
149 TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain",
150 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
151 TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain",
152 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
153 TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain",
154 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
155 TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain",
156 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
157 TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain",
158 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
159
160 TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10);
161 TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096);
162 TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5);
163
164 Int_t iEvent=0;
37e550bd 165 runNum=0;
e8f49998 166
167 while (reader->NextEvent()) {
37e550bd 168 if (firstEvent) {
169 firstEvent = kFALSE;
170 runNum = reader->GetRunNumber();
171 man = AliCDBManager::Instance();
172 man ->SetRun(runNum);
173 }
174 ULong64_t triggerMask = reader->GetClassMask();
175 TString trclasses = GetTriggerClass(triggerMask);
176
177 period = reader->GetPeriod();
178 orbitID = reader->GetOrbitID();
179 bcID = reader->GetBCID();
180 iEvent++;
181 if (!trclasses.Contains(selectTrigger)) continue;
182 AliInfoGeneral("",Form("Reading event %d of type %d, time %d, trig.class \"%s\"",
183 iEvent,reader->GetType(), reader->GetTimestamp(), trclasses.Data()));
e8f49998 184 while (stream->NextDDL()) {
185 while (stream->NextChannel()) {
37e550bd 186 module = stream->GetModule(); // [0-4]
187 cellX = stream->GetCellX(); // [0-63]
188 cellZ = stream->GetCellZ(); // [0-55]
189 caloFlag = stream->GetCaloFlag(); // [0-3]
190 if (caloFlag!=0 && caloFlag!=1) continue;
191 if (module<0 || module>=modMax ||
192 cellX<0 || cellX>=cellXMax ||
193 cellZ<0 || cellZ>=cellZMax) {
194 AliInfoGeneral("",Form("Wrong cell ID (m,x,z)=(%d,%d,%d)",module,cellX,cellZ));
195 break;
196 }
e8f49998 197
198 hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress());
199 hModule->Fill(module);
37e550bd 200 if (hPed[module][caloFlag][cellX][cellZ] == 0) {
e8f49998 201 TString name = baseNamePed;
202 TString title = baseTitlePed;
203 name +="_g"; name +=caloFlag;
204 name +="_m"; name +=module;
205 name +="_x"; name +=cellX;
206 name +="_z"; name +=cellZ;
207
208 title +=module; title +=",";
37e550bd 209 title +=cellX ; title +=",";
210 title +=cellZ ; title +="), ";
e8f49998 211 title +=sgain[caloFlag];
212
213 Int_t nx,xmin,xmax;
214 if (caloFlag==0 || caloFlag==1) {
215 nx=100;
216 xmin=0.;
217 xmax=100.;
218 }
219 else {
220 nx=1000;
221 xmin=0.;
222 xmax=1000.;
223 }
224 hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.);
225 hPed[module][caloFlag][cellX][cellZ]->Sumw2();
226 hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20);
227 hPed[module][caloFlag][cellX][cellZ]->SetOption("eph");
228 }
229
230 Int_t nBunches = 0;
231 while (stream->NextBunch()) {
232 nBunches++;
233 const UShort_t *sig = stream->GetSignals();
234 Int_t sigLength = stream->GetBunchLength();
235// for (Int_t i = sigLength-70; i < sigLength; i++) {
236 for (Int_t i = 0; i < sigLength; i++) {
237 hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]);
238 }
239 }
240 hNBunches->Fill(nBunches);
241 } // end of NextChannel()
242
243 } // end of NextDDL()
244 } // end of nextEvent()
245
246 // Fill 2-dim histograms for mean, rms and n pedestals
247
37e550bd 248 for (module=0; module<modMax; module++) {
249 for (caloFlag=0; caloFlag<2; caloFlag++) {
250 for (cellX=0; cellX<cellXMax; cellX++) {
251 for (cellZ=0; cellZ<cellZMax; cellZ++) {
252 if (hPed[module][caloFlag][cellX][cellZ] != 0) {
e8f49998 253 if (caloFlag == 0) {
37e550bd 254 if (module==2) {
255 hPedLoMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
256 hPedLoRMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
257 hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
258 hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
259 hPedLoNumm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 260 }
37e550bd 261 else if (module==3) {
262 hPedLoMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
263 hPedLoRMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
264 hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
265 hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
266 hPedLoNumm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 267 }
37e550bd 268 else if (module==4) {
269 hPedLoMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
270 hPedLoRMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
271 hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
272 hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
273 hPedLoNumm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 274 }
275 }
276 else if (caloFlag == 1) {
37e550bd 277 if (module==2) {
278 hPedHiMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
279 hPedHiRMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
280 hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
281 hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
282 hPedHiNumm2 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 283 }
37e550bd 284 if (module==3) {
285 hPedHiMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
286 hPedHiRMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
287 hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
288 hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
289 hPedHiNumm3 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 290 }
37e550bd 291 if (module==4) {
292 hPedHiMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
293 hPedHiRMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
294 hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetMean() );
295 hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
296 hPedHiNumm4 ->Fill( cellX, cellZ, hPed[module][caloFlag][cellX][cellZ]->GetEntries() );
e8f49998 297 }
298 }
299 else if (caloFlag == 2) {
37e550bd 300 if (module==2) {
301 hPedTRUMean1m2->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
302 hPedTRURMS1m2 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
e8f49998 303 }
37e550bd 304 if (module==3) {
305 hPedTRUMean1m3->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
306 hPedTRURMS1m3 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
e8f49998 307 }
37e550bd 308 if (module==4) {
309 hPedTRUMean1m4->Fill( hPed[module][caloFlag][cellX][cellZ]->GetMean());
310 hPedTRURMS1m4 ->Fill( hPed[module][caloFlag][cellX][cellZ]->GetRMS() );
e8f49998 311 }
312 }
313 }
314 }
315 }
316 }
317 }
318
319 // Write existing histograms to a root file
320
321 TString fileName = "ped";
322 fileName += runNum;
323 fileName += ".root";
324 TFile *file = new TFile(fileName,"RECREATE");
325
37e550bd 326 for (module=0; module<modMax; module++) {
327 for (caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
328 for (cellX=0; cellX<cellXMax; cellX++) {
329 for (cellZ=0; cellZ<cellZMax; cellZ++) {
330 if (hPed[module][caloFlag][cellX][cellZ] != 0)
331 hPed[module][caloFlag][cellX][cellZ]->Write();
e8f49998 332 }
333 }
334 }
335 }
336
337 hPedHiMean1m2->Write();
338 hPedHiRMS1m2 ->Write();
339 hPedLoMean1m2->Write();
340 hPedLoRMS1m2 ->Write();
341 hPedHiMeanm2 ->Write();
342 hPedHiRMSm2 ->Write();
343 hPedHiNumm2 ->Write();
344 hPedLoMeanm2 ->Write();
345 hPedLoRMSm2 ->Write();
346 hPedLoNumm2 ->Write();
347 hPedTRUMean1m2->Write();
348 hPedTRURMS1m2 ->Write();
349
350 hPedHiMean1m3->Write();
351 hPedHiRMS1m3 ->Write();
352 hPedLoMean1m3->Write();
353 hPedLoRMS1m3 ->Write();
354 hPedHiMeanm3 ->Write();
355 hPedHiRMSm3 ->Write();
356 hPedHiNumm3 ->Write();
357 hPedLoMeanm3 ->Write();
358 hPedLoRMSm3 ->Write();
359 hPedLoNumm3 ->Write();
360 hPedTRUMean1m3->Write();
361 hPedTRURMS1m3 ->Write();
362
363 hPedHiMean1m4->Write();
364 hPedHiRMS1m4 ->Write();
365 hPedLoMean1m4->Write();
366 hPedLoRMS1m4 ->Write();
367 hPedHiMeanm4 ->Write();
368 hPedHiRMSm4 ->Write();
369 hPedHiNumm4 ->Write();
370 hPedLoMeanm4 ->Write();
371 hPedLoRMSm4 ->Write();
372 hPedLoNumm4 ->Write();
373 hPedTRUMean1m4->Write();
374 hPedTRURMS1m4 ->Write();
375
376 hNBunches ->Write();
377 hHWaddr ->Write();
378 hModule ->Write();
379
380 file->Close();
381 stopwatch.Print();
382}
37e550bd 383//-----------------------------------------------------------------------------
384
385TString GetTriggerClass(ULong64_t triggerMask)
386{
387 // Convert a trigger mask to a trigger class
388
389 AliCentralTrigger aCTP;
390 TString configstr("");
391 TString trclasses;
392 if (!aCTP.LoadConfiguration(configstr)) { // Load CTP config from OCDB
393 AliInfoGeneral("","No trigger configuration found in OCDB! The trigger configuration information will not be used!");
394 return trclasses;
395 }
396 aCTP.SetClassMask(triggerMask);
397 AliTriggerConfiguration *config = aCTP.GetConfiguration();
398 const TObjArray& classesArray = config->GetClasses();
399 Int_t nclasses = classesArray.GetEntriesFast();
400 for( Int_t iclass=0; iclass < nclasses; iclass++ ) {
401 AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass);
402 if (trclass && trclass->GetMask()>0) {
403 Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask()));
404 reader->LoadTriggerClass(trclass->GetName(),trindex);
405 if (triggerMask & (1ull << trindex)) {
406 trclasses += " ";
407 trclasses += trclass->GetName();
408 trclasses += " ";
409 }
410 }
411 }
412 return trclasses;
413}