2 contact: Boris.Polishchuk@cern.ch
\r
3 reference run: /alice/data/2010/LHC10a_PHOS/000112189/raw/10000112189003.10.root
\r
6 number of events needed: 200
\r
7 input files: Mod0RCU0.data Mod0RCU1.data Mod0RCU2.data Mod0RCU3.data Mod1RCU0.data Mod1RCU1.data Mod1RCU2.data Mod1RCU3.data Mod2RCU0.data Mod2RCU1.data Mod2RCU2.data Mod2RCU3.data Mod3RCU0.data Mod3RCU1.data Mod3RCU2.data Mod3RCU3.data Mod4RCU0.data Mod4RCU1.data Mod4RCU2.data Mod4RCU3.data
\r
8 Output files: PHOS_PED.root
\r
13 #include "monitor.h"
\r
22 #include <TSystem.h>
\r
24 #include <TPluginManager.h>
\r
30 #include <TString.h>
\r
31 #include "AliRawReader.h"
\r
32 #include "AliRawReaderDate.h"
\r
33 #include "AliCaloAltroMapping.h"
\r
34 #include "AliCaloRawStreamV3.h"
\r
37 int main(int argc, char **argv)
\r
39 // Read raw data, decode it to samples,
\r
40 // calculate pedestals from presamples,
\r
41 // evaluate the signal amplitude as a maximum sample,
\r
42 // and fill histograms with pedestals and amplitudes
\r
44 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
\r
50 AliLog::SetGlobalDebugLevel(0) ;
\r
51 AliLog::SetGlobalLogLevel(AliLog::kFatal);
\r
56 printf("Wrong number of arguments\n");
\r
60 /* Retrieve mapping files from DAQ DB */
\r
61 const char* mapFiles[20] = {
\r
84 for(Int_t iFile=0; iFile<20; iFile++) {
\r
85 int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]);
\r
87 printf("Cannot retrieve file %s from DAQ DB. Exit.\n",mapFiles[iFile]);
\r
92 /* Open mapping files */
\r
93 AliAltroMapping *mapping[20];
\r
94 TString path = "./";
\r
101 for(Int_t iMod = 0; iMod < 5; iMod++) {
\r
106 for(Int_t iRCU=0; iRCU<4; iRCU++) {
\r
110 mapping[iMap] = new AliCaloAltroMapping(path3.Data());
\r
115 /* define data source : this is argument 1 */
\r
116 status=monitorSetDataSource( argv[1] );
\r
118 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
\r
122 /* declare monitoring program */
\r
123 status=monitorDeclareMp( __FILE__ );
\r
125 printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
\r
129 /* define wait event timeout - 1s max */
\r
130 monitorSetNowait();
\r
131 monitorSetNoWaitNetworkTimeout(1000);
\r
133 /* init some counters */
\r
134 int nevents_physics=0;
\r
135 int nevents_total=0;
\r
137 AliRawReader * reader = NULL;
\r
138 AliCaloRawStreamV3* stream = NULL;
\r
140 TString baseNamePed ="hPed";
\r
141 TString baseTitlePed="Ped in cell (";
\r
142 const char* sgain[3]={"LG","HG", "TRU"};
\r
144 const Int_t caloFlagMax=3,modMax=5,cellXMax=64,cellZMax=56;
\r
145 TH1F *hPed[5][3][64][56] = {};
\r
147 TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.);
\r
148 TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.);
\r
149 TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.);
\r
150 TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.);
\r
151 TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.);
\r
152 TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.);
\r
154 TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.);
\r
155 TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.);
\r
156 TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.);
\r
157 TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.);
\r
158 TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.);
\r
159 TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.);
\r
161 TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.);
\r
162 TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.);
\r
163 TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.);
\r
164 TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.);
\r
165 TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.);
\r
166 TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.);
\r
168 hPedHiMean1m2->Sumw2();
\r
169 hPedHiRMS1m2 ->Sumw2();
\r
170 hPedLoMean1m2->Sumw2();
\r
171 hPedLoRMS1m2 ->Sumw2();
\r
172 hPedTRUMean1m2->Sumw2();
\r
173 hPedTRURMS1m2 ->Sumw2();
\r
174 hPedHiMean1m3->Sumw2();
\r
175 hPedHiRMS1m3 ->Sumw2();
\r
176 hPedLoMean1m3->Sumw2();
\r
177 hPedLoRMS1m3 ->Sumw2();
\r
178 hPedTRUMean1m3->Sumw2();
\r
179 hPedTRURMS1m3 ->Sumw2();
\r
180 hPedHiMean1m4->Sumw2();
\r
181 hPedHiRMS1m4 ->Sumw2();
\r
182 hPedLoMean1m4->Sumw2();
\r
183 hPedLoRMS1m4 ->Sumw2();
\r
184 hPedTRUMean1m4->Sumw2();
\r
185 hPedTRURMS1m4 ->Sumw2();
\r
187 TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain",
\r
188 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
189 TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain",
\r
190 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
191 TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain",
\r
192 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
193 TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain",
\r
194 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
195 TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain",
\r
196 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
197 TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain",
\r
198 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
200 TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain",
\r
201 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
202 TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain",
\r
203 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
204 TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain",
\r
205 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
206 TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain",
\r
207 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
208 TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain",
\r
209 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
210 TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain",
\r
211 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
213 TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain",
\r
214 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
215 TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain",
\r
216 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
217 TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain",
\r
218 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
219 TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain",
\r
220 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
221 TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain",
\r
222 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
223 TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain",
\r
224 cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);
\r
226 TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10);
\r
227 TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096);
\r
228 TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5);
\r
231 Int_t module,cellX,cellZ,caloFlag;
\r
233 /* main loop (infinite) */
\r
235 struct eventHeaderStruct *event;
\r
236 eventTypeType eventT;
\r
238 /* check shutdown condition */
\r
239 if (daqDA_checkShutdown()) {break;}
\r
241 /* get next event (blocking call until timeout) */
\r
242 status=monitorGetEventDynamic((void **)&event);
\r
243 if (status==MON_ERR_EOF) {
\r
244 printf ("End of File detected\n");
\r
245 break; /* end of monitoring file has been reached */
\r
249 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
\r
253 /* retry if got no event */
\r
258 /* use event - here, just write event id to result file */
\r
259 eventT=event->eventType;
\r
261 if (eventT==PHYSICS_EVENT) {
\r
263 reader = new AliRawReaderDate((void*)event);
\r
264 stream = new AliCaloRawStreamV3(reader,"PHOS",mapping);
\r
266 runNum = reader->GetRunNumber();
\r
267 while (stream->NextDDL()) {
\r
268 while (stream->NextChannel()) {
\r
269 module = stream->GetModule();
\r
270 cellX = stream->GetCellX();
\r
271 cellZ = stream->GetCellZ();
\r
272 caloFlag = stream->GetCaloFlag();
\r
273 if (caloFlag!=0 && caloFlag!=1) continue;
\r
275 hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress());
\r
276 hModule->Fill(module);
\r
277 if (!hPed[module][caloFlag][cellX][cellZ]) {
\r
278 TString name = baseNamePed;
\r
279 TString title = baseTitlePed;
\r
280 name +="_g"; name +=caloFlag;
\r
281 name +="_m"; name +=module;
\r
282 name +="_x"; name +=cellX;
\r
283 name +="_z"; name +=cellZ;
\r
285 title +=module; title +=",";
\r
286 title +=cellX; title +=",";
\r
287 title +=cellZ; title +="), ";
\r
288 title +=sgain[caloFlag];
\r
290 hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.);
\r
291 hPed[module][caloFlag][cellX][cellZ]->Sumw2();
\r
292 hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20);
\r
293 hPed[module][caloFlag][cellX][cellZ]->SetOption("eph");
\r
296 Int_t nBunches = 0;
\r
297 while (stream->NextBunch()) {
\r
299 const UShort_t *sig = stream->GetSignals();
\r
300 Int_t sigLength = stream->GetBunchLength();
\r
301 for (Int_t i = 0; i < sigLength; i++) {
\r
302 hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]);
\r
305 hNBunches->Fill(nBunches);
\r
306 } // end of NextChannel()
\r
307 } // end of NextDDL()
\r
312 } // end of if(eventT==PHYSICS_EVENT)
\r
316 /* free resources */
\r
319 /* exit when last event received, no need to wait for TERM signal */
\r
320 if (eventT==END_OF_RUN) {
\r
321 printf("EOR event detected\n");
\r
325 } // end of inf. loop over events
\r
327 for(Int_t i = 0; i < 20; i++) delete mapping[i];
\r
329 // Fill 2-dim histograms for mean, rms and n pedestals
\r
331 for (Int_t mod=2; mod<=4; mod++) {
\r
332 for (Int_t caloFlag=0; caloFlag<2; caloFlag++) {
\r
333 for (Int_t cellX=0; cellX<cellXMax; cellX++) {
\r
334 for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {
\r
335 if (hPed[mod][caloFlag][cellX][cellZ] != 0) {
\r
336 if (caloFlag == 0) {
\r
338 hPedLoMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
339 hPedLoRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
340 hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
341 hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
342 hPedLoNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
345 hPedLoMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
346 hPedLoRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
347 hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
348 hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
349 hPedLoNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
352 hPedLoMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
353 hPedLoRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
354 hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
355 hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
356 hPedLoNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
359 else if (caloFlag == 1) {
\r
361 hPedHiMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
362 hPedHiRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
\r
363 hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
364 hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
365 hPedHiNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
368 hPedHiMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
369 hPedHiRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
\r
370 hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
371 hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
372 hPedHiNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
375 hPedHiMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
376 hPedHiRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
377 hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
378 hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());
\r
379 hPedHiNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());
\r
382 else if (caloFlag == 2) {
\r
384 hPedTRUMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
385 hPedTRURMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
\r
388 hPedTRUMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
389 hPedTRURMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
\r
392 hPedTRUMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());
\r
393 hPedTRURMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );
\r
402 // Write existing histograms to a root file
\r
404 TString fileName = "PHOS_PED.root";
\r
405 TFile *file = new TFile(fileName,"RECREATE");
\r
407 for (Int_t mod=2; mod<=3; mod++) {
\r
408 for (Int_t caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {
\r
409 for (Int_t mod=0; mod<modMax; mod++) {
\r
410 for (Int_t cellX=0; cellX<cellXMax; cellX++) {
\r
411 for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {
\r
412 if (hPed[mod][caloFlag][cellX][cellZ] != 0)
\r
413 hPed[mod][caloFlag][cellX][cellZ]->Write();
\r
420 hPedHiMean1m2->Write();
\r
421 hPedHiRMS1m2 ->Write();
\r
422 hPedLoMean1m2->Write();
\r
423 hPedLoRMS1m2 ->Write();
\r
424 hPedHiMeanm2 ->Write();
\r
425 hPedHiRMSm2 ->Write();
\r
426 hPedHiNumm2 ->Write();
\r
427 hPedLoMeanm2 ->Write();
\r
428 hPedLoRMSm2 ->Write();
\r
429 hPedLoNumm2 ->Write();
\r
430 hPedTRUMean1m2->Write();
\r
431 hPedTRURMS1m2 ->Write();
\r
433 hPedHiMean1m3->Write();
\r
434 hPedHiRMS1m3 ->Write();
\r
435 hPedLoMean1m3->Write();
\r
436 hPedLoRMS1m3 ->Write();
\r
437 hPedHiMeanm3 ->Write();
\r
438 hPedHiRMSm3 ->Write();
\r
439 hPedHiNumm3 ->Write();
\r
440 hPedLoMeanm3 ->Write();
\r
441 hPedLoRMSm3 ->Write();
\r
442 hPedLoNumm3 ->Write();
\r
443 hPedTRUMean1m3->Write();
\r
444 hPedTRURMS1m3 ->Write();
\r
446 hPedHiMean1m4->Write();
\r
447 hPedHiRMS1m4 ->Write();
\r
448 hPedLoMean1m4->Write();
\r
449 hPedLoRMS1m4 ->Write();
\r
450 hPedHiMeanm4 ->Write();
\r
451 hPedHiRMSm4 ->Write();
\r
452 hPedHiNumm4 ->Write();
\r
453 hPedLoMeanm4 ->Write();
\r
454 hPedLoRMSm4 ->Write();
\r
455 hPedLoNumm4 ->Write();
\r
456 hPedTRUMean1m4->Write();
\r
457 hPedTRURMS1m4 ->Write();
\r
459 hNBunches ->Write();
\r
465 /* Store output files to the File Exchange Server */
\r
466 daqDA_FES_storeFile(fileName.Data(),"PED");
\r
468 printf("%d physics events of %d total processed.\n",nevents_physics,nevents_total);
\r