]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/macros/Pedestals/Pedestals.C
Raw data analysys for pedestal runs
[u/mrichter/AliRoot.git] / PHOS / macros / Pedestals / Pedestals.C
CommitLineData
e8f49998 1#if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TStopwatch.h>
3 #include <TStyle.h>
4 #include <TFile.h>
5 #include <TH1F.h>
6 #include <TH2F.h>
7 #include <TString.h>
8 #include <TCanvas.h>
9 #include "TSystem.h"
10 #include "TGrid.h"
11 #include "AliRawReader.h"
12 #include "AliCaloRawStreamV3.h"
13 #include "AliLog.h"
14 #include "iostream"
15using namespace std;
16
17#endif
18
19void Pedestals(const TString rawFile=0)
20{
21 // Read raw data, decode it to samples,
22 // calculate pedestals from presamples,
23 // evaluate the signal amplitude as a maximum sample,
24 // and fill histograms with pedestals and amplitudes
25 // This script should be compiled to speed up the data processing:
26 // .L Pedestals.C++
27 //___
28 // Yuri Kharlov. 6 September 2007
29
30 TStopwatch stopwatch;
31 stopwatch.Start();
32
33 if (rawFile.BeginsWith("alien://")) {
34 gSystem->Exec("source /tmp/gclient_env_$UID");
35 TGrid::Connect("alien://");
36 }
37
38 AliRawReader *reader = AliRawReader::Create(rawFile);
39 reader->Reset();
40
41 TStopwatch timer;
42 timer.Start();
43
44 AliCaloRawStreamV3 *stream = new AliCaloRawStreamV3(reader,"PHOS");
45
46 TString baseNamePed ="hPed";
47 TString baseTitlePed="Ped in cell (";
48 const char* sgain[3]={"LG","HG", "TRU"};
49
50 const Int_t caloFlagMax=3,modMax=5,cellXMax=64,cellZMax=56;
51 TH1F *hPed[5][3][64][56];
52 for (Int_t mod=2; mod<=4; mod++) {
53 for (Int_t caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
54 for (Int_t mod=0; mod<modMax; mod++) {
55 for (Int_t cellX=0; cellX<cellXMax; cellX++) {
56 for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {
57 hPed[mod][caloFlag][cellX][cellZ] = 0;
58 }
59 }
60 }
61 }
62 }
63 TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.);
64 TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.);
65 TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.);
66 TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.);
67 TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.);
68 TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.);
69
70 TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.);
71 TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.);
72 TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.);
73 TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.);
74 TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.);
75 TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.);
76
77 TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.);
78 TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.);
79 TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.);
80 TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.);
81 TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.);
82 TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.);
83
84 hPedHiMean1m2->Sumw2();
85 hPedHiRMS1m2 ->Sumw2();
86 hPedLoMean1m2->Sumw2();
87 hPedLoRMS1m2 ->Sumw2();
88 hPedTRUMean1m2->Sumw2();
89 hPedTRURMS1m2 ->Sumw2();
90 hPedHiMean1m3->Sumw2();
91 hPedHiRMS1m3 ->Sumw2();
92 hPedLoMean1m3->Sumw2();
93 hPedLoRMS1m3 ->Sumw2();
94 hPedTRUMean1m3->Sumw2();
95 hPedTRURMS1m3 ->Sumw2();
96 hPedHiMean1m4->Sumw2();
97 hPedHiRMS1m4 ->Sumw2();
98 hPedLoMean1m4->Sumw2();
99 hPedLoRMS1m4 ->Sumw2();
100 hPedTRUMean1m4->Sumw2();
101 hPedTRURMS1m4 ->Sumw2();
102
103 TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain",
104 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
105 TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain",
106 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
107 TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain",
108 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
109 TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain",
110 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
111 TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain",
112 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
113 TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain",
114 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
115
116 TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain",
117 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
118 TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain",
119 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
120 TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain",
121 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
122 TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain",
123 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
124 TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain",
125 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
126 TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain",
127 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
128
129 TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain",
130 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
131 TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain",
132 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
133 TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain",
134 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
135 TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain",
136 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
137 TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain",
138 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
139 TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain",
140 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
141
142 TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10);
143 TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096);
144 TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5);
145
146 Int_t iEvent=0;
147 Int_t runNum=0;
148 Int_t module,cellX,cellZ,caloFlag;
149
150 while (reader->NextEvent()) {
151 runNum = reader->GetRunNumber();
152 AliInfoGeneral("",Form("Reading event %d\n",iEvent++));
153 while (stream->NextDDL()) {
154 while (stream->NextChannel()) {
155 module = stream->GetModule();
156 cellX = stream->GetCellX();
157 cellZ = stream->GetCellZ();
158 caloFlag = stream->GetCaloFlag();
159// if (caloFlag!=0 && caloFlag!=1) continue;
160
161 hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress());
162 hModule->Fill(module);
163 if (!hPed[module][caloFlag][cellX][cellZ]) {
164 TString name = baseNamePed;
165 TString title = baseTitlePed;
166 name +="_g"; name +=caloFlag;
167 name +="_m"; name +=module;
168 name +="_x"; name +=cellX;
169 name +="_z"; name +=cellZ;
170
171 title +=module; title +=",";
172 title +=cellX; title +=",";
173 title +=cellZ; title +="), ";
174 title +=sgain[caloFlag];
175
176 Int_t nx,xmin,xmax;
177 if (caloFlag==0 || caloFlag==1) {
178 nx=100;
179 xmin=0.;
180 xmax=100.;
181 }
182 else {
183 nx=1000;
184 xmin=0.;
185 xmax=1000.;
186 }
187 hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.);
188 hPed[module][caloFlag][cellX][cellZ]->Sumw2();
189 hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20);
190 hPed[module][caloFlag][cellX][cellZ]->SetOption("eph");
191 }
192
193 Int_t nBunches = 0;
194 while (stream->NextBunch()) {
195 nBunches++;
196 const UShort_t *sig = stream->GetSignals();
197 Int_t sigLength = stream->GetBunchLength();
198// for (Int_t i = sigLength-70; i < sigLength; i++) {
199 for (Int_t i = 0; i < sigLength; i++) {
200 hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]);
201 }
202 }
203 hNBunches->Fill(nBunches);
204 } // end of NextChannel()
205
206 } // end of NextDDL()
207 } // end of nextEvent()
208
209 // Fill 2-dim histograms for mean, rms and n pedestals
210
211 for (Int_t mod=2; mod<=4; mod++) {
212 for (Int_t caloFlag=0; caloFlag<2; caloFlag++) {
213 for (Int_t cellX=0; cellX<cellXMax; cellX++) {
214 for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {
215 if (hPed[mod][caloFlag][cellX][cellZ] != 0) {
216 if (caloFlag == 0) {
217 if (mod==2) {
218 hPedLoMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
219 hPedLoRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
220 hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
221 hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
222 hPedLoNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
223 }
224 else if (mod==3) {
225 hPedLoMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
226 hPedLoRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
227 hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
228 hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
229 hPedLoNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
230 }
231 else if (mod==4) {
232 hPedLoMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
233 hPedLoRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
234 hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
235 hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
236 hPedLoNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
237 }
238 }
239 else if (caloFlag == 1) {
240 if (mod==2) {
241 hPedHiMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
242 hPedHiRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
243 hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
244 hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
245 hPedHiNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
246 }
247 if (mod==3) {
248 hPedHiMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
249 hPedHiRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
250 hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
251 hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
252 hPedHiNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
253 }
254 if (mod==4) {
255 hPedHiMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
256 hPedHiRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
257 hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean() );
258 hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
259 hPedHiNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries() );
260 }
261 }
262 else if (caloFlag == 2) {
263 if (mod==2) {
264 hPedTRUMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
265 hPedTRURMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
266 }
267 if (mod==3) {
268 hPedTRUMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
269 hPedTRURMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
270 }
271 if (mod==4) {
272 hPedTRUMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
273 hPedTRURMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
274 }
275 }
276 }
277 }
278 }
279 }
280 }
281
282 // Write existing histograms to a root file
283
284 TString fileName = "ped";
285 fileName += runNum;
286 fileName += ".root";
287 TFile *file = new TFile(fileName,"RECREATE");
288
289 for (Int_t mod=2; mod<=3; mod++) {
290 for (Int_t caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
291 for (Int_t mod=0; mod<modMax; mod++) {
292 for (Int_t cellX=0; cellX<cellXMax; cellX++) {
293 for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {
294 if (hPed[mod][caloFlag][cellX][cellZ] != 0)
295 hPed[mod][caloFlag][cellX][cellZ]->Write();
296 }
297 }
298 }
299 }
300 }
301
302 hPedHiMean1m2->Write();
303 hPedHiRMS1m2 ->Write();
304 hPedLoMean1m2->Write();
305 hPedLoRMS1m2 ->Write();
306 hPedHiMeanm2 ->Write();
307 hPedHiRMSm2 ->Write();
308 hPedHiNumm2 ->Write();
309 hPedLoMeanm2 ->Write();
310 hPedLoRMSm2 ->Write();
311 hPedLoNumm2 ->Write();
312 hPedTRUMean1m2->Write();
313 hPedTRURMS1m2 ->Write();
314
315 hPedHiMean1m3->Write();
316 hPedHiRMS1m3 ->Write();
317 hPedLoMean1m3->Write();
318 hPedLoRMS1m3 ->Write();
319 hPedHiMeanm3 ->Write();
320 hPedHiRMSm3 ->Write();
321 hPedHiNumm3 ->Write();
322 hPedLoMeanm3 ->Write();
323 hPedLoRMSm3 ->Write();
324 hPedLoNumm3 ->Write();
325 hPedTRUMean1m3->Write();
326 hPedTRURMS1m3 ->Write();
327
328 hPedHiMean1m4->Write();
329 hPedHiRMS1m4 ->Write();
330 hPedLoMean1m4->Write();
331 hPedLoRMS1m4 ->Write();
332 hPedHiMeanm4 ->Write();
333 hPedHiRMSm4 ->Write();
334 hPedHiNumm4 ->Write();
335 hPedLoMeanm4 ->Write();
336 hPedLoRMSm4 ->Write();
337 hPedLoNumm4 ->Write();
338 hPedTRUMean1m4->Write();
339 hPedTRURMS1m4 ->Write();
340
341 hNBunches ->Write();
342 hHWaddr ->Write();
343 hModule ->Write();
344
345 file->Close();
346 stopwatch.Print();
347}