Main changes:
[u/mrichter/AliRoot.git] / MUON / MUONTRGda.cxx
CommitLineData
9f5fafa6 1/*
113ad708 2MTR DA for online
3
3e42bf30 4Contact: Franck Manso <manso@clermont.in2p3.fr>
5Link: http://aliceinfo.cern.ch/static/Offline/dimuon/muon_html/README_mtrda.html
e8f1ed57 6Reference run: 61898
7Run Type: PHYSICS
41a38dec 8DA Type: MON
e8f1ed57 9Number of events needed: 1000 events
10Input files: MtgGlobalCrate.dat MtgRegionalCrate.dat MtgLocalMask.dat MtgLocalLut.dat MtgCurrent.dat DAConfig.dat
11Output Files: ExportedFiles.dat MtgGlobalCrate.dat
12Trigger types used: PHYSICS_EVENT CALIBRATION_EVENT
3e42bf30 13*/
14
327f7faa 15//////////////////////////////////////////////////////////////////////////////
16// Detector Algorithm for the MUON trigger configuration. //
17// //
18// Calculates masks for the global trigger input, by looking at dead //
e8f1ed57 19// channels in calibration events and at noisy channels in physics events. //
327f7faa 20// Transfers trigger configuration files to the File Exchange Server and //
21// writes them (if modified) into the trigger configuration data base. //
22// //
23// Authors: //
24// Christian Fink (formerly at Subatech, Nantes) //
25// Franck Manso (LPC Clermont-Ferrand, manso@clermont.in2p3.fr) //
26// Bogdan Vulpescu (LPC Clermont-Ferrand, vulpescu@clermont.in2p3.fr) //
27// //
28//////////////////////////////////////////////////////////////////////////////
3e42bf30 29
e8f1ed57 30//#define OFFLINE
31
9f5fafa6 32extern "C" {
33#include <daqDA.h>
34}
35
36#include "event.h"
37#include "monitor.h"
38
39#include <Riostream.h>
40#include <stdio.h>
41#include <stdlib.h>
42
43//AliRoot
4fd5ed63 44#include "AliRawReaderDate.h"
45
46#include "AliMpConstants.h"
9f5fafa6 47#include "AliMUONRawStreamTrigger.h"
e8f1ed57 48#include "AliMUONRawStreamTriggerHP.h"
9f5fafa6 49#include "AliMUONDarcHeader.h"
9f5fafa6 50#include "AliMUONDDLTrigger.h"
4fd5ed63 51#include "AliMUONVStore.h"
4fd5ed63 52#include "AliMUON1DArray.h"
53#include "AliMUONTriggerIO.h"
92c23b09 54#include "AliMUONRegionalTriggerConfig.h"
55#include "AliMUONGlobalCrateConfig.h"
56#include "AliMUONTriggerCrateConfig.h"
9f5fafa6 57
58//ROOT
9f5fafa6 59#include "TString.h"
4fd5ed63 60#include "TSystem.h"
9f5fafa6 61#include "TStopwatch.h"
9f5fafa6 62#include "TROOT.h"
63#include "TPluginManager.h"
9f5fafa6 64
37dacd7d 65/// class for DA run parameters and DA working space
66class AliDAConfig : TObject {
67
68public:
69
70 AliDAConfig() :
e8f1ed57 71 fDAConfigFileName("DAConfig.dat"),
37dacd7d 72 fCurrentFileName("MtgCurrent.dat"),
73 fLastCurrentFileName("MtgLastCurrent.dat"),
74 fSodName(""),
75 fSodFlag(0),
76 fDAName(""),
77 fDAFlag(0),
78 fGlobalFileName(""),
79 fRegionalFileName(""),
80 fLocalMaskFileName(""),
81 fLocalLutFileName(""),
82 fSignatureFileName(""),
83 fGlobalFileVersion(0),
84 fRegionalFileVersion(0),
85 fLocalMaskFileVersion(0),
86 fLocalLutFileVersion(0),
87 fSignatureFileVersion(0),
88 fGlobalFileLastVersion(0),
89 fRegionalFileLastVersion(0),
90 fLocalMaskFileLastVersion(0),
91 fLocalLutFileLastVersion(0),
92 fEventsN(0),
93 fEventsD(0),
94 fPrintLevel(0),
95 fLocalMasks(0x0),
96 fRegionalMasks(0x0),
97 fGlobalMasks(0x0),
98 fTriggerIO(new AliMUONTriggerIO),
99 fAlgoNoisyInput(false),
100 fAlgoDeadcInput(false),
101 fThrN(0.1),
102 fThrD(0.9),
103 fMinEvents(10),
104 fSkipEvents(0),
105 fMaxEvents(65535),
106 fWithWarnings(false),
e8f1ed57 107 fUseFastDecoder(false),
37dacd7d 108 fNLocalBoard(AliMpConstants::TotalNofLocalBoards()+1)
109 {
110 /// default constructor
111 for (Int_t ii = 0; ii < kGlobalInputs; ii++) {
112 for (Int_t il = 0; il < kGlobalInputLength; il++) {
113 fAccGlobalInputN[ii][il] = 0;
114 fAccGlobalInputD[ii][il] = 0;
115 }
116 }
117 fLocalMasks = new AliMUON1DArray(fNLocalBoard);
118 fRegionalMasks = new AliMUONRegionalTriggerConfig();
119 fGlobalMasks = new AliMUONGlobalCrateConfig();
120 }
121
122 AliDAConfig (const AliDAConfig& cfg); // copy constructor
123 AliDAConfig& operator=(const AliDAConfig& cfg); // assignment operator
124 virtual ~AliDAConfig()
125 {
126 /// destructor
127 delete fLocalMasks;
128 delete fRegionalMasks;
129 delete fGlobalMasks;
130 delete fTriggerIO;
131 }
132 void PrintConfig()
133 {
134 /// print DA parameters
135 printf("DA config file name: %s \n",GetDAConfigFileName());
136 printf("Current file name: %s \n",GetCurrentFileName());
137 printf("Last current file name: %s \n",GetLastCurrentFileName());
138 printf("Global file name: %s (%d %d)\n",GetGlobalFileName(),GetGlobalFileVersion(),GetGlobalFileLastVersion());
139 printf("Regional file name: %s (%d %d)\n",GetRegionalFileName(),GetRegionalFileVersion(),GetRegionalFileLastVersion());
140 printf("Local mask file name: %s (%d %d)\n",GetLocalMaskFileName(),GetLocalMaskFileVersion(),GetLocalMaskFileLastVersion());
141 printf("Local LUT file name: %s (%d %d)\n",GetLocalLutFileName(),GetLocalLutFileVersion(),GetLocalLutFileLastVersion());
142 printf("Signature file name: %s (%d)\n",GetSignatureFileName(),GetSignatureFileVersion());
143 }
144
145 const Char_t* GetDAConfigFileName() { return fDAConfigFileName.Data(); }
146 const Char_t* GetCurrentFileName() { return fCurrentFileName.Data(); }
147 const Char_t* GetLastCurrentFileName() { return fLastCurrentFileName.Data(); }
148
149 const Char_t* GetSodName() { return fSodName.Data(); }
150 Int_t GetSodFlag() const { return fSodFlag; }
151
152 const Char_t* GetDAName() { return fDAName.Data(); }
153 Int_t GetDAFlag() const { return fDAFlag; }
154
155 const Char_t* GetGlobalFileName() { return fGlobalFileName.Data(); }
156 const Char_t* GetRegionalFileName() { return fRegionalFileName.Data(); }
157 const Char_t* GetLocalMaskFileName() { return fLocalMaskFileName.Data(); }
158 const Char_t* GetLocalLutFileName() { return fLocalLutFileName.Data(); }
159 const Char_t* GetSignatureFileName() { return fSignatureFileName.Data(); }
160
161 Int_t GetGlobalFileVersion() const { return fGlobalFileVersion; }
162 Int_t GetRegionalFileVersion() const { return fRegionalFileVersion; }
163 Int_t GetLocalMaskFileVersion() const { return fLocalMaskFileVersion; }
164 Int_t GetLocalLutFileVersion() const { return fLocalLutFileVersion; }
165 Int_t GetSignatureFileVersion() const { return fSignatureFileVersion; }
166
167 Int_t GetGlobalFileLastVersion() const { return fGlobalFileLastVersion; }
168 Int_t GetRegionalFileLastVersion() const { return fRegionalFileLastVersion; }
169 Int_t GetLocalMaskFileLastVersion() const { return fLocalMaskFileLastVersion; }
170 Int_t GetLocalLutFileLastVersion() const { return fLocalLutFileLastVersion; }
171
172 AliMUONVStore* GetLocalMasks() const { return fLocalMasks; }
173 AliMUONRegionalTriggerConfig* GetRegionalMasks() const { return fRegionalMasks; }
174 AliMUONGlobalCrateConfig* GetGlobalMasks() const { return fGlobalMasks; }
175
176 AliMUONTriggerIO* GetTriggerIO() const { return fTriggerIO; }
177
178 Int_t GetEventsN() const { return fEventsN; }
179 Int_t GetEventsD() const { return fEventsD; }
180
181 Int_t GetPrintLevel() const { return fPrintLevel; }
182
183 Bool_t GetAlgoNoisyInput() const { return fAlgoNoisyInput; }
184 Bool_t GetAlgoDeadcInput() const { return fAlgoDeadcInput; }
185
186 Float_t GetThrN() const { return fThrN; }
187 Float_t GetThrD() const { return fThrD; }
188
189 Int_t GetMinEvents() const { return fMinEvents; }
190 Int_t GetMaxEvents() const { return fMaxEvents; }
191 Int_t GetSkipEvents() const { return fSkipEvents; }
192
193 Bool_t WithWarnings() const { return fWithWarnings; }
e8f1ed57 194 Bool_t UseFastDecoder() const { return fUseFastDecoder; }
37dacd7d 195
196 Int_t GetGlobalInputs() const { return kGlobalInputs; }
197 Int_t GetGlobalInputLength() const { return kGlobalInputLength; }
198
199 Int_t GetAccGlobalInputN(Int_t ii, Int_t ib) const { return fAccGlobalInputN[ii][ib]; }
200 Int_t GetAccGlobalInputD(Int_t ii, Int_t ib) const { return fAccGlobalInputD[ii][ib]; }
201
202 void SetSodName(Char_t *name) { fSodName = TString(name); }
203 void SetSodFlag(Int_t flag) { fSodFlag = flag; }
204
205 void SetDAName(Char_t *name) { fDAName = TString(name); }
206 void SetDAFlag(Int_t flag) { fDAFlag = flag; }
207
208 void SetGlobalFileName(const Char_t *name) { fGlobalFileName = TString(name); }
209 void SetRegionalFileName(const Char_t *name) { fRegionalFileName = TString(name); }
210 void SetLocalMaskFileName(const Char_t *name) { fLocalMaskFileName = TString(name); }
211 void SetLocalLutFileName(const Char_t *name) { fLocalLutFileName = TString(name); }
212 void SetSignatureFileName(const Char_t *name) { fSignatureFileName = TString(name); }
213
214 void SetGlobalFileVersion(Int_t ver) { fGlobalFileVersion = ver; }
215 void SetRegionalFileVersion(Int_t ver) { fRegionalFileVersion = ver; }
216 void SetLocalMaskFileVersion(Int_t ver) { fLocalMaskFileVersion = ver; }
217 void SetLocalLutFileVersion(Int_t ver) { fLocalLutFileVersion = ver; }
218 void SetSignatureFileVersion(Int_t ver) { fSignatureFileVersion = ver; }
219
220 void SetGlobalFileLastVersion(Int_t ver) { fGlobalFileLastVersion = ver; }
221 void SetRegionalFileLastVersion(Int_t ver) { fRegionalFileLastVersion = ver; }
222 void SetLocalMaskFileLastVersion(Int_t ver) { fLocalMaskFileLastVersion = ver; }
223 void SetLocalLutFileLastVersion(Int_t ver) { fLocalLutFileLastVersion = ver; }
224
225 void IncNoiseEvent() { fEventsN++; }
226 void IncDeadcEvent() { fEventsD++; }
227
228 void AddAccGlobalInputN(Int_t ii, Int_t ib, Int_t val) { fAccGlobalInputN[ii][ib] += val; }
229 void AddAccGlobalInputD(Int_t ii, Int_t ib, Int_t val) { fAccGlobalInputD[ii][ib] += val; }
230
231 void SetPrintLevel(Int_t level) { fPrintLevel = level; }
232
233 void SetAlgoNoisyInput(Bool_t val) { fAlgoNoisyInput = val; }
234 void SetAlgoDeadcInput(Bool_t val) { fAlgoDeadcInput = val; }
235
236 void SetThrN(Float_t val) { fThrN = val; }
237 void SetThrD(Float_t val) { fThrD = val; }
238
239 void SetMinEvents(Int_t val) { fMinEvents = val; }
240 void SetMaxEvents(Int_t val) { fMaxEvents = val; }
241 void SetSkipEvents(Int_t val) { fSkipEvents = val; }
242
243 void SetWithWarnings() { fWithWarnings = true; }
e8f1ed57 244 void SetUseFastDecoder() { fUseFastDecoder = true; }
37dacd7d 245
246 void IncGlobalFileVersion() { fGlobalFileVersion++; }
247 void DecSkipEvents() { fSkipEvents--; }
248
249private:
4fd5ed63 250
327f7faa 251 const TString fDAConfigFileName;
252 const TString fCurrentFileName;
253 const TString fLastCurrentFileName;
4fd5ed63 254
327f7faa 255 TString fSodName;
256 Int_t fSodFlag;
4fd5ed63 257
327f7faa 258 TString fDAName;
259 Int_t fDAFlag;
4fd5ed63 260
327f7faa 261 TString fGlobalFileName;
262 TString fRegionalFileName;
263 TString fLocalMaskFileName;
264 TString fLocalLutFileName;
265 TString fSignatureFileName;
4fd5ed63 266
327f7faa 267 Int_t fGlobalFileVersion;
268 Int_t fRegionalFileVersion;
269 Int_t fLocalMaskFileVersion;
270 Int_t fLocalLutFileVersion;
271 Int_t fSignatureFileVersion;
272
273 Int_t fGlobalFileLastVersion;
274 Int_t fRegionalFileLastVersion;
275 Int_t fLocalMaskFileLastVersion;
276 Int_t fLocalLutFileLastVersion;
277
37dacd7d 278 Int_t fEventsN;
279 Int_t fEventsD;
327f7faa 280
281 Int_t fPrintLevel;
282
283 AliMUONVStore* fLocalMasks;
284 AliMUONRegionalTriggerConfig* fRegionalMasks;
285 AliMUONGlobalCrateConfig* fGlobalMasks;
286
287 AliMUONTriggerIO *fTriggerIO;
288
289 Bool_t fAlgoNoisyInput;
37dacd7d 290 Bool_t fAlgoDeadcInput;
327f7faa 291
292 Float_t fThrN;
293 Float_t fThrD;
294 Int_t fMinEvents;
295 Int_t fSkipEvents;
296 Int_t fMaxEvents;
297 Bool_t fWithWarnings;
e8f1ed57 298 Bool_t fUseFastDecoder;
327f7faa 299
300 const Int_t fNLocalBoard;
301
302 enum { kGlobalInputs = 4, kGlobalInputLength = 32 };
303
304 Int_t fAccGlobalInputN[kGlobalInputs][kGlobalInputLength];
305 Int_t fAccGlobalInputD[kGlobalInputs][kGlobalInputLength];
306
327f7faa 307};
4fd5ed63 308
327f7faa 309//__________________________________________________________________
37dacd7d 310Bool_t ReadDAConfig(AliDAConfig& cfg)
327f7faa 311{
37dacd7d 312 /// read run parameters for the DA
4fd5ed63 313
327f7faa 314 char line[80];
4fd5ed63 315
327f7faa 316 TString file;
37dacd7d 317 file = cfg.GetDAConfigFileName();
327f7faa 318 std::ifstream in(gSystem->ExpandPathName(file.Data()));
319 if (!in.good()) {
320 printf("Cannot open DA configuration file %s ; use default values.\n",file.Data());
321 return true;
322 }
323
324 TString tmp;
325 Int_t pos;
326
327 in.getline(line,80);
328 tmp = line;
329 pos = tmp.First(" ");
330 tmp = tmp(0,pos);
37dacd7d 331 cfg.SetPrintLevel(tmp.Atoi());
327f7faa 332
333 in.getline(line,80);
334 tmp = line;
335 pos = tmp.First(" ");
336 tmp = tmp(0,pos);
37dacd7d 337 cfg.SetThrN(tmp.Atof());
327f7faa 338
339 in.getline(line,80);
340 tmp = line;
341 pos = tmp.First(" ");
342 tmp = tmp(0,pos);
37dacd7d 343 cfg.SetThrD(tmp.Atof());
327f7faa 344
345 in.getline(line,80);
346 tmp = line;
347 pos = tmp.First(" ");
348 tmp = tmp(0,pos);
37dacd7d 349 cfg.SetMinEvents(tmp.Atoi());
327f7faa 350
351 in.getline(line,80);
352 tmp = line;
353 pos = tmp.First(" ");
354 tmp = tmp(0,pos);
37dacd7d 355 cfg.SetSkipEvents(tmp.Atoi());
4fd5ed63 356
327f7faa 357 in.getline(line,80);
358 tmp = line;
359 pos = tmp.First(" ");
360 tmp = tmp(0,pos);
37dacd7d 361 cfg.SetMaxEvents(tmp.Atoi());
4fd5ed63 362
327f7faa 363 in.getline(line,80);
364 tmp = line;
365 pos = tmp.First(" ");
366 tmp = tmp(0,pos);
37dacd7d 367 if (tmp.Atoi() != 0) cfg.SetWithWarnings();
327f7faa 368
e8f1ed57 369 in.getline(line,80);
370 tmp = line;
371 pos = tmp.First(" ");
372 tmp = tmp(0,pos);
373 if (tmp.Atoi() != 0) cfg.SetUseFastDecoder();
374
327f7faa 375 return true;
4fd5ed63 376
327f7faa 377}
4fd5ed63 378
4fd5ed63 379//__________________________________________________________________
37dacd7d 380void WriteLastCurrentFile(AliDAConfig& cfg, TString currentFile)
4fd5ed63 381{
37dacd7d 382 /// write last current file
4fd5ed63 383
4fd5ed63 384 ofstream out;
385 TString file;
386 file = currentFile;
387 out.open(file.Data());
37dacd7d 388 out << cfg.GetSodName() << " " << cfg.GetSodFlag() << endl;
389 out << cfg.GetDAName() << " " << cfg.GetDAFlag() << endl;
4fd5ed63 390
37dacd7d 391 out << cfg.GetGlobalFileName() << " " << cfg.GetGlobalFileVersion() << endl;
392 out << cfg.GetRegionalFileName() << " " << cfg.GetRegionalFileVersion() << endl;
393 out << cfg.GetLocalMaskFileName() << " " << cfg.GetLocalMaskFileVersion() << endl;
394 out << cfg.GetLocalLutFileName() << " " << cfg.GetLocalLutFileVersion() << endl;
395 out << cfg.GetSignatureFileName() << " " << cfg.GetSignatureFileVersion() << endl;
4fd5ed63 396
397 out.close();
398}
399
400//___________________________________________________________________________________________
37dacd7d 401Bool_t ReadCurrentFile(AliDAConfig& cfg, TString currentFile, Bool_t lastCurrentFlag = false)
4fd5ed63 402{
37dacd7d 403 /// read last current file name and version
4fd5ed63 404
4fd5ed63 405 char line[80];
406 char name[80];
37dacd7d 407 Int_t flag;
4fd5ed63 408
409 TString file;
410 file = currentFile;
411 std::ifstream in(gSystem->ExpandPathName(file.Data()));
412 if (!in.good()) {
413 printf("Cannot open last current file %s\n",currentFile.Data());
414 return false;
415 }
416
4fd5ed63 417 // read SOD
418 in.getline(line,80);
37dacd7d 419 sscanf(line, "%s %d", name, &flag);
420 cfg.SetSodName(name);
421 cfg.SetSodFlag(flag);
422 if (cfg.GetPrintLevel()) printf("Sod Flag %d\n", cfg.GetSodFlag());
4fd5ed63 423
424 //read DA
425 in.getline(line,80);
37dacd7d 426 sscanf(line, "%s %d", name, &flag);
427 cfg.SetDAName(name);
428 cfg.SetDAFlag(flag);
429 if (cfg.GetPrintLevel()) printf("DA Flag: %d\n", cfg.GetDAFlag());
4fd5ed63 430
4fd5ed63 431 // read global
432 in.getline(line,80);
433 TString tmp(line);
434 Int_t pos = tmp.First(" ");
37dacd7d 435 TString tmp1 = tmp(0, pos);
436 cfg.SetGlobalFileName(tmp1.Data());
4fd5ed63 437
438 if (!lastCurrentFlag) {
37dacd7d 439 cfg.SetGlobalFileVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
440 if (cfg.GetPrintLevel()) printf("Global File Name: %s version: %d\n",
441 cfg.GetGlobalFileName(), cfg.GetGlobalFileVersion());
4fd5ed63 442 } else {
37dacd7d 443 cfg.SetGlobalFileLastVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
444 if (cfg.GetPrintLevel()) printf("Global File Name: %s last version: %d\n",
445 cfg.GetGlobalFileName(), cfg.GetGlobalFileLastVersion());
4fd5ed63 446 }
447
448 // read regional
449 in.getline(line,80);
450 tmp = line;
451 pos = tmp.First(" ");
37dacd7d 452 tmp1 = tmp(0, pos);
453 cfg.SetRegionalFileName(tmp1.Data());
4fd5ed63 454
455 if (!lastCurrentFlag) {
37dacd7d 456 cfg.SetRegionalFileVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
457 if (cfg.GetPrintLevel()) printf("Regional File Name: %s version: %d\n",
458 cfg.GetRegionalFileName(), cfg.GetRegionalFileVersion());
4fd5ed63 459
460 } else {
37dacd7d 461 cfg.SetRegionalFileLastVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
462 if (cfg.GetPrintLevel()) printf("Regional File Name: %s last version: %d\n",
463 cfg.GetRegionalFileName(), cfg.GetRegionalFileLastVersion());
4fd5ed63 464 }
465
4fd5ed63 466 // read mask
467 in.getline(line,80);
468 tmp = line;
469 pos = tmp.First(" ");
37dacd7d 470 tmp1 = tmp(0, pos);
471 cfg.SetLocalMaskFileName(tmp1.Data());
4fd5ed63 472
473 if (!lastCurrentFlag) {
37dacd7d 474 cfg.SetLocalMaskFileVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
475 if (cfg.GetPrintLevel()) printf("Mask File Name: %s version: %d\n",
476 cfg.GetLocalMaskFileName(), cfg.GetLocalMaskFileVersion());
4fd5ed63 477 } else {
37dacd7d 478 cfg.SetLocalMaskFileLastVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
479 if (cfg.GetPrintLevel()) printf("Mask File Name: %s last version: %d\n",
480 cfg.GetLocalMaskFileName(), cfg.GetLocalMaskFileLastVersion());
4fd5ed63 481 }
482 // read Lut
483 in.getline(line,80);
484 tmp = line;
485 pos = tmp.First(" ");
37dacd7d 486 tmp1 = tmp(0, pos);
487 cfg.SetLocalLutFileName(tmp1.Data());
4fd5ed63 488
489 if (!lastCurrentFlag) {
37dacd7d 490 cfg.SetLocalLutFileVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
491 if (cfg.GetPrintLevel()) printf("Lut File Name: %s version: %d\n",
492 cfg.GetLocalLutFileName(), cfg.GetLocalLutFileVersion());
4fd5ed63 493 } else {
37dacd7d 494 cfg.SetLocalLutFileLastVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
495 if (cfg.GetPrintLevel()) printf("Lut File Name: %s last version: %d\n",
496 cfg.GetLocalLutFileName(), cfg.GetLocalLutFileLastVersion());
4fd5ed63 497 }
498
499 in.getline(line,80);
500 tmp = line;
501 pos = tmp.First(" ");
37dacd7d 502 tmp1 = tmp(0, pos);
503 cfg.SetSignatureFileName(tmp1.Data());
504 cfg.SetSignatureFileVersion(atoi(tmp(pos+1, tmp.Length()-pos).Data()));
505 if (cfg.GetPrintLevel()) printf("Lut File Name: %s version: %d\n",
506 cfg.GetSignatureFileName(), cfg.GetSignatureFileVersion());
4fd5ed63 507
508 return true;
509}
510
511//_____________
37dacd7d 512void ReadFileNames(AliDAConfig& cfg)
4fd5ed63 513{
37dacd7d 514 /// if last current file does not exist than read current file
327f7faa 515
37dacd7d 516 if (!ReadCurrentFile(cfg,cfg.GetLastCurrentFileName(), true))
4fd5ed63 517 {
37dacd7d 518 ReadCurrentFile(cfg,cfg.GetCurrentFileName(), true);
4fd5ed63 519 }
37dacd7d 520
521 // any case read current file
522 ReadCurrentFile(cfg,cfg.GetCurrentFileName());
523
4fd5ed63 524}
525
526//__________________
37dacd7d 527Bool_t ExportFiles(AliDAConfig& cfg)
4fd5ed63 528{
37dacd7d 529 /// Export files to FES
4fd5ed63 530
4fd5ed63 531 // env variables have to be set (suppose by ECS ?)
532 // setenv DATE_FES_PATH
533 // setenv DATE_RUN_NUMBER
534 // setenv DATE_ROLE_NAME
535 // setenv DATE_DETECTOR_CODE
536
e8f1ed57 537#ifdef OFFLINE
538 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/infoLogger");
539 gSystem->Setenv("DAQDA_TEST_DIR", "/alisoft/FES");
540#endif
8f8ae0de 541
4fd5ed63 542 // update files
543 Int_t status = 0;
544
545 Bool_t modified = false;
546
547 ofstream out;
548 TString fileExp("ExportedFiles.dat");
549 TString file;
550
551 out.open(fileExp.Data());
552 if (!out.good()) {
553 printf("Failed to create file: %s\n",file.Data());
554 return false;
113ad708 555 }
4fd5ed63 556
8f8ae0de 557 // check if MtgLastCurrent.dat exists
558 // if not, do initial export of all files
559 Bool_t initFES = false;
560 if (gSystem->AccessPathName("MtgLastCurrent.dat"))
561 initFES = true;
562 if (initFES) printf("Copy all configuration files to the FES.\n");
563
37dacd7d 564 file = cfg.GetGlobalFileName();
565 if ((cfg.GetGlobalFileLastVersion() != cfg.GetGlobalFileVersion()) || initFES) {
e8f1ed57 566 status = daqDA_FES_storeFile(file.Data(), "GLOBAL");
4fd5ed63 567 if (status) {
37dacd7d 568 printf("Failed to export file: %s\n",cfg.GetGlobalFileName());
4fd5ed63 569 return false;
570 }
37dacd7d 571 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetGlobalFileName());
572 out << cfg.GetGlobalFileName() << endl;
4fd5ed63 573 }
574
37dacd7d 575 file = cfg.GetLocalMaskFileName();
576 if ((cfg.GetLocalMaskFileLastVersion() != cfg.GetLocalMaskFileVersion()) || initFES) {
4fd5ed63 577 modified = true;
e8f1ed57 578 status = daqDA_FES_storeFile(file.Data(), "LOCAL");
4fd5ed63 579 if (status) {
37dacd7d 580 printf("Failed to export file: %s\n",cfg.GetLocalMaskFileName());
4fd5ed63 581 return false;
582 }
37dacd7d 583 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetLocalMaskFileName());
584 out << cfg.GetLocalMaskFileName() << endl;
4fd5ed63 585 }
586
37dacd7d 587 file = cfg.GetLocalLutFileName();
588 if ((cfg.GetLocalLutFileLastVersion() != cfg.GetLocalLutFileVersion()) || initFES) {
4fd5ed63 589 modified = true;
e8f1ed57 590 status = daqDA_FES_storeFile(file.Data(), "LUT");
4fd5ed63 591 if (status) {
37dacd7d 592 printf("Failed to export file: %s\n",cfg.GetLocalLutFileName());
4fd5ed63 593 return false;
594 }
37dacd7d 595 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetLocalLutFileName());
596 out << cfg.GetLocalLutFileName() << endl;
4fd5ed63 597
598 }
599
600 // exported regional file whenever mask or/and Lut are modified
37dacd7d 601 file = cfg.GetRegionalFileName();
602 if ( (cfg.GetRegionalFileLastVersion() != cfg.GetRegionalFileVersion()) || modified || initFES) {
e8f1ed57 603 status = daqDA_FES_storeFile(file.Data(), "REGIONAL");
4fd5ed63 604 if (status) {
37dacd7d 605 printf("Failed to export file: %s\n",cfg.GetRegionalFileName());
4fd5ed63 606 return false;
607 }
37dacd7d 608 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetRegionalFileName());
609 out << cfg.GetRegionalFileName() << endl;
4fd5ed63 610 }
611
612 out.close();
613
614 // export Exported file to FES anyway
e8f1ed57 615 status = daqDA_FES_storeFile(fileExp.Data(), "EXPORTED");
4fd5ed63 616 if (status) {
617 printf("Failed to export file: %s\n", fileExp.Data());
618 return false;
619 }
37dacd7d 620 if(cfg.GetPrintLevel()) printf("Export file: %s\n",fileExp.Data());
4fd5ed63 621
113ad708 622 // write last current file
37dacd7d 623 WriteLastCurrentFile(cfg,cfg.GetLastCurrentFileName());
113ad708 624
4fd5ed63 625 return true;
626}
41a38dec 627
4fd5ed63 628//__________________
37dacd7d 629Bool_t ImportFiles(AliDAConfig& cfg)
4fd5ed63 630{
37dacd7d 631 /// copy locally a file from daq detector config db
632 /// The current detector is identified by detector code in variable
633 /// DATE_DETECTOR_CODE. It must be defined.
634 /// If environment variable DAQDA_TEST_DIR is defined, files are copied from
635 /// DAQDA_TEST_DIR instead of the database.
636 /// The usual environment variables are not needed.
4fd5ed63 637
41a38dec 638 Int_t status = 0;
4fd5ed63 639
e8f1ed57 640#ifdef OFFLINE
641 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/db");
642#endif
113ad708 643
37dacd7d 644 status = daqDA_DB_getFile(cfg.GetDAConfigFileName(), cfg.GetDAConfigFileName());
4fd5ed63 645 if (status) {
37dacd7d 646 printf("Failed to get DA config file from DB: %s\n",cfg.GetDAConfigFileName());
4fd5ed63 647 return false;
648 }
649
327f7faa 650 ReadDAConfig(cfg);
e8f1ed57 651
37dacd7d 652 status = daqDA_DB_getFile(cfg.GetCurrentFileName(), cfg.GetCurrentFileName());
4fd5ed63 653 if (status) {
37dacd7d 654 printf("Failed to get current config file from DB: %s\n",cfg.GetCurrentFileName());
4fd5ed63 655 return false;
656 }
e8f1ed57 657
327f7faa 658 ReadFileNames(cfg);
4fd5ed63 659
37dacd7d 660 status = daqDA_DB_getFile(cfg.GetGlobalFileName(), cfg.GetGlobalFileName());
327f7faa 661 if (status) {
37dacd7d 662 printf("Failed to get current config file from DB: %s\n", cfg.GetGlobalFileName());
327f7faa 663 return false;
664 }
41a38dec 665
37dacd7d 666 status = daqDA_DB_getFile(cfg.GetRegionalFileName(), cfg.GetRegionalFileName());
4fd5ed63 667 if (status) {
37dacd7d 668 printf("Failed to get current config file from DB: %s\n",cfg.GetRegionalFileName());
4fd5ed63 669 return false;
670 }
671
37dacd7d 672 status = daqDA_DB_getFile(cfg.GetLocalMaskFileName(), cfg.GetLocalMaskFileName());
4fd5ed63 673 if (status) {
37dacd7d 674 printf("Failed to get current config file from DB: %s\n",cfg.GetLocalMaskFileName());
4fd5ed63 675 return false;
676 }
677
37dacd7d 678 status = daqDA_DB_getFile(cfg.GetLocalLutFileName(), cfg.GetLocalLutFileName());
4fd5ed63 679 if (status) {
37dacd7d 680 printf("Failed to get current config file from DB: %s\n",cfg.GetLocalLutFileName());
4fd5ed63 681 return false;
682 }
683
684 return true;
685}
686
687//_____________
37dacd7d 688void ReadMaskFiles(AliDAConfig& cfg)
4fd5ed63 689{
37dacd7d 690 /// read mask files
327f7faa 691
37dacd7d 692 const Char_t* localFile = cfg.GetLocalMaskFileName();
693 const Char_t* regionalFile = cfg.GetRegionalFileName();
694 const Char_t* globalFile = cfg.GetGlobalFileName();
4fd5ed63 695
37dacd7d 696 cfg.GetTriggerIO()->ReadConfig(localFile, regionalFile, globalFile, cfg.GetLocalMasks(), cfg.GetRegionalMasks(), cfg.GetGlobalMasks());
4fd5ed63 697}
4fd5ed63 698
41a38dec 699//______________________________________________________________
37dacd7d 700UInt_t GetFetMode(const AliDAConfig & cfg)
41a38dec 701{
37dacd7d 702 /// FET mode = 3 to run algorithm for dead global inputs
703 /// 0x3 prepulse
704 /// 0x0 internal
4fd5ed63 705
37dacd7d 706 return cfg.GetGlobalMasks()->GetFetRegister(3);
4fd5ed63 707
41a38dec 708}
4fd5ed63 709
41a38dec 710//______________________________________________________________
37dacd7d 711void StoreGlobalInput(AliDAConfig& cfg, const UInt_t * const globalInput)
41a38dec 712{
37dacd7d 713 /// accumulate and build statistics of global input values
41a38dec 714
37dacd7d 715 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
716 for (Int_t ib = 0; ib < cfg.GetGlobalInputLength(); ib++) {
41a38dec 717 // lsb -> msb
37dacd7d 718 if (cfg.GetAlgoNoisyInput())
719 cfg.AddAccGlobalInputN(ii,ib,((globalInput[ii] >> ib) & 0x1));
720 if (cfg.GetAlgoDeadcInput())
721 cfg.AddAccGlobalInputD(ii,ib,((globalInput[ii] >> ib) & 0x1));
4fd5ed63 722 }
41a38dec 723 }
4fd5ed63 724
725}
726
41a38dec 727//______________________________________________________________
37dacd7d 728void UpdateGlobalMasks(AliDAConfig& cfg)
4fd5ed63 729{
37dacd7d 730 /// update the global masks
4fd5ed63 731
e8f1ed57 732#ifdef OFFLINE
733 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/db");
734#endif
327f7faa 735
41a38dec 736 Float_t rateN = 0.0, rateD = 0.0;
737 UInt_t gmask[4], omask;
738 Bool_t noise, deadc, withEvN, withEvD, updated = false;
739
37dacd7d 740 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
41a38dec 741 gmask[ii] = 0;
742
37dacd7d 743 for (Int_t ib = 0; ib < cfg.GetGlobalInputLength(); ib++) {
41a38dec 744 // lsb -> msb
745 noise = false;
746 deadc = false;
747 withEvN = false;
748 withEvD = false;
37dacd7d 749 if (cfg.GetEventsN() > cfg.GetMinEvents()) {
750 rateN = (Float_t)cfg.GetAccGlobalInputN(ii,ib)/(Float_t)cfg.GetEventsN();
751 noise = (rateN > cfg.GetThrN());
41a38dec 752 withEvN = true;
4fd5ed63 753 }
37dacd7d 754 if (cfg.GetEventsD() > cfg.GetMinEvents()) {
755 rateD = (Float_t)cfg.GetAccGlobalInputD(ii,ib)/(Float_t)cfg.GetEventsD();
756 deadc = (rateD < cfg.GetThrD());
41a38dec 757 withEvD = true;
758 }
759 if (!withEvN && !withEvD) {
760 // - copy the bit from the old mask
37dacd7d 761 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
e8f1ed57 762 if (cfg.GetPrintLevel())
763 printf("Mask not changed (just copy the old values)\n");
41a38dec 764 }
765 if (!withEvN && withEvD) {
766 if (!deadc) {
767 // - create a new mask, set the bit to 1
8f8ae0de 768 // not allowed!
769 //gmask[ii] |= 0x1 << ib;
770 // - copy the bit from the old mask
37dacd7d 771 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
41a38dec 772 } else {
773 // - create a new mask, set the bit to 0
774 gmask[ii] |= 0x0 << ib;
e8f1ed57 775 if (cfg.GetPrintLevel())
776 printf("Found dead channel %1d:%02d (%4.2f) \n",ii,ib,rateD);
4fd5ed63 777 }
41a38dec 778 }
779 if (withEvN && !withEvD) {
780 if (!noise) {
781 // - create a new mask, set the bit to 1
8f8ae0de 782 // not allowed!
783 //gmask[ii] |= 0x1 << ib;
784 // - copy the bit from the old mask
37dacd7d 785 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
41a38dec 786 } else {
787 // - create a new mask, set the bit to 0
788 gmask[ii] |= 0x0 << ib;
e8f1ed57 789 if (cfg.GetPrintLevel())
790 printf("Found noisy channel %1d:%02d (%4.2f) \n",ii,ib,rateN);
41a38dec 791 }
792 }
793 if (withEvN && withEvD) {
794 if (!noise && !deadc) {
795 // - create a new mask, set the bit to 1
8f8ae0de 796 // not allowed!
797 //gmask[ii] |= 0x1 << ib;
798 // - copy the bit from the old mask
37dacd7d 799 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
41a38dec 800 } else {
801 // - create a new mask, set the bit to 0
802 gmask[ii] |= 0x0 << ib;
e8f1ed57 803 if (cfg.GetPrintLevel()) {
804 if (noise)
805 printf("Found noisy channel %1d:%02d (%4.2f) \n",ii,ib,rateN);
806 if (deadc)
807 printf("Found dead channel %1d:%02d (%4.2f) \n",ii,ib,rateD);
808 }
4fd5ed63 809 }
4fd5ed63 810 }
811 }
41a38dec 812 }
813
814 // check if at least one mask value has been changed from previous version
37dacd7d 815 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
327f7faa 816 printf("Global mask [%1d] %08x \n",ii,gmask[ii]);
37dacd7d 817 omask = cfg.GetGlobalMasks()->GetGlobalMask(ii);
41a38dec 818 if (gmask[ii] != omask) {
819 updated = true;
37dacd7d 820 cfg.GetGlobalMasks()->SetGlobalMask(ii,gmask[ii]);
4fd5ed63 821 }
41a38dec 822 }
4fd5ed63 823
41a38dec 824 Int_t status = 0;
825 if (updated) {
826
827 // update version
37dacd7d 828 cfg.IncGlobalFileVersion();
41a38dec 829
830 // don't change the file version ("-x.dat")
831
37dacd7d 832 cfg.GetTriggerIO()->WriteGlobalConfig(cfg.GetGlobalFileName(),cfg.GetGlobalMasks());
41a38dec 833
834 // write last current file
37dacd7d 835 WriteLastCurrentFile(cfg,cfg.GetCurrentFileName());
4fd5ed63 836
37dacd7d 837 status = daqDA_DB_storeFile(cfg.GetGlobalFileName(), cfg.GetGlobalFileName());
41a38dec 838 if (status) {
37dacd7d 839 printf("Failed to export file to DB: %s\n",cfg.GetGlobalFileName());
41a38dec 840 return;
841 }
842
37dacd7d 843 status = daqDA_DB_storeFile(cfg.GetCurrentFileName(), cfg.GetCurrentFileName());
41a38dec 844 if (status) {
37dacd7d 845 printf("Failed to export file to DB: %s\n",cfg.GetCurrentFileName());
41a38dec 846 return;
847 }
113ad708 848
41a38dec 849 }
850
851}
113ad708 852
9f5fafa6 853//*************************************************************//
9f5fafa6 854int main(Int_t argc, Char_t **argv)
855{
37dacd7d 856 /// main routine
9f5fafa6 857
858 // needed for streamer application
327f7faa 859 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", "*", "TStreamerInfo", "RIO", "TStreamerInfo()");
860
861 /* check that we got some arguments = list of files */
862 if (argc<2) {
863 printf("Wrong number of arguments\n");
864 return -1;
865 }
866
37dacd7d 867 AliDAConfig cfg;
9f5fafa6 868
8f8ae0de 869 Char_t inputFile[256] = "";
113ad708 870 inputFile[0] = 0;
871 if (argc > 1)
872 if (argv[1] != NULL)
873 strncpy(inputFile, argv[1], 256);
874 else {
875 printf("MUONTRGda : No input File !\n");
876 return -1;
877 }
9f5fafa6 878
4fd5ed63 879 // decoding the events
9f5fafa6 880
4fd5ed63 881 Int_t status;
882 Int_t nDateEvents = 0;
9f5fafa6 883
4fd5ed63 884 void* event;
9f5fafa6 885
4fd5ed63 886 // containers
e8f1ed57 887 // old decoder
4fd5ed63 888 AliMUONDDLTrigger* ddlTrigger = 0x0;
889 AliMUONDarcHeader* darcHeader = 0x0;
e8f1ed57 890 // new (fast) decoder
891 const AliMUONRawStreamTriggerHP::AliHeader* darcHeaderHP = 0x0;
9f5fafa6 892
4fd5ed63 893 TStopwatch timers;
9f5fafa6 894
4fd5ed63 895 timers.Start(kTRUE);
9f5fafa6 896
4fd5ed63 897 // comment out, since we do not retrieve files from database
327f7faa 898 if (!ImportFiles(cfg)) {
4fd5ed63 899 printf("Import from DB failed\n");
900 printf("For local test set DAQDA_TEST_DIR to the local directory where the Mtg files are located \n");
9f5fafa6 901 return -1;
902 }
327f7faa 903
904 ReadMaskFiles(cfg);
4fd5ed63 905
e8f1ed57 906#ifdef OFFLINE
907 // the run number extracted from the file name
908 TString tmp(inputFile);
909 Int_t pos = tmp.First("daq");
910 tmp = tmp(pos+3,5);
911 gSystem->Setenv("DATE_RUN_NUMBER",tmp.Data());
912 gSystem->Exec("echo \"DATE_RUN_NUMBER = \" $DATE_RUN_NUMBER");
913#endif
37dacd7d 914
327f7faa 915 if(!ExportFiles(cfg)) {
41a38dec 916 printf("ExportFiles failed\n");
917 return -1;
918 }
919
41a38dec 920 // FET is triggered by CTP
e8f1ed57 921 Bool_t modeFET3 = kTRUE;
327f7faa 922 if (GetFetMode(cfg) != 3) {
e8f1ed57 923 printf("FET is not in mode 3. Only PHYSICS events will be analysed (noisy channels)\n");
924 modeFET3 = kFALSE;
41a38dec 925 }
926
927 // All 5 global cards are controlled by the Mts proxy
37dacd7d 928 if (cfg.GetGlobalMasks()->GetGlobalCrateEnable() != 0x1F) {
41a38dec 929 printf("The MTS proxy does not control all global cards\n");
930 return -1;
931 }
113ad708 932
41a38dec 933 // The global cards are ON (active on the global inputs)
37dacd7d 934 if (!cfg.GetGlobalMasks()->GetMasksOn()) {
41a38dec 935 printf("Global masks are not ON\n");
936 return -1;
937 }
113ad708 938
41a38dec 939 // make sure to catch the "rare" calib events (1 every 50s in physics)
940 const Char_t* tableSOD[] = {"ALL", "yes", "CAL", "all", NULL, NULL};
941 monitorDeclareTable(const_cast<char**>(tableSOD));
942
4fd5ed63 943 status = monitorSetDataSource(inputFile);
944 if (status) {
945 cerr << "ERROR : monitorSetDataSource status (hex) = " << hex << status
946 << " " << monitorDecodeError(status) << endl;
947 return -1;
948 }
949 status = monitorDeclareMp("MUON Trigger monitoring");
950 if (status) {
951 cerr << "ERROR : monitorDeclareMp status (hex) = " << hex << status
952 << " " << monitorDecodeError(status) << endl;
953 return -1;
9f5fafa6 954 }
955
113ad708 956 /* define wait event timeout - 1s max */
957 monitorSetNowait();
958 monitorSetNoWaitNetworkTimeout(1000);
959
113ad708 960 cout << "MUONTRGda : Reading data from file " << inputFile <<endl;
4fd5ed63 961
e8f1ed57 962 UInt_t *globalInput = new UInt_t[4];
41a38dec 963 Bool_t doUpdate = false;
327f7faa 964 Int_t runNumber = 0;
965 Int_t nEvents = 0;
966
4fd5ed63 967 while(1)
968 {
37dacd7d 969 if (nEvents >= cfg.GetMaxEvents()) break;
e8f1ed57 970 if (cfg.GetPrintLevel()) {
971 if (nEvents && nEvents % 1000 == 0)
327f7faa 972 cout<<"Cumulated events " << nEvents << endl;
e8f1ed57 973 }
4fd5ed63 974 // check shutdown condition
975 if (daqDA_checkShutdown())
976 break;
977
978 // Skip Events if needed
37dacd7d 979 while (cfg.GetSkipEvents()) {
4fd5ed63 980 status = monitorGetEventDynamic(&event);
37dacd7d 981 cfg.DecSkipEvents();
4fd5ed63 982 }
983
984 // starts reading
985 status = monitorGetEventDynamic(&event);
986 if (status < 0) {
113ad708 987 cout << "MUONTRGda : EOF found" << endl;
4fd5ed63 988 break;
989 }
990
991 nDateEvents++;
992
993 // decoding rawdata headers
994 AliRawReader *rawReader = new AliRawReaderDate(event);
9f5fafa6 995
4fd5ed63 996 Int_t eventType = rawReader->GetType();
327f7faa 997 runNumber = rawReader->GetRunNumber();
9f5fafa6 998
113ad708 999 // L1Swc1
1000 // CALIBRATION_EVENT
1001 // SYSTEM_SOFTWARE_TRIGGER_EVENT
1002 // DETECTOR_SOFTWARE_TRIGGER_EVENT
37dacd7d 1003 cfg.SetAlgoNoisyInput(false);
1004 cfg.SetAlgoDeadcInput(false);
41a38dec 1005 if (eventType == PHYSICS_EVENT) {
37dacd7d 1006 cfg.SetAlgoNoisyInput(true);
41a38dec 1007 doUpdate = true;
37dacd7d 1008 cfg.IncNoiseEvent();
e8f1ed57 1009 } else if (modeFET3 && eventType == CALIBRATION_EVENT) {
37dacd7d 1010 cfg.SetAlgoDeadcInput(true);
41a38dec 1011 doUpdate = true;
37dacd7d 1012 cfg.IncDeadcEvent();
41a38dec 1013 } else {
1014 continue;
1015 }
1016
327f7faa 1017 nEvents++;
e8f1ed57 1018 if (cfg.GetPrintLevel() == 2) printf("\nEvent # %d\n",nEvents);
9f5fafa6 1019
4fd5ed63 1020 // decoding MUON payload
e8f1ed57 1021 AliMUONVRawStreamTrigger *rawStream = 0x0;
1022 if (cfg.UseFastDecoder()) {
1023 rawStream = new AliMUONRawStreamTriggerHP(rawReader);
1024 } else {
1025 rawStream = new AliMUONRawStreamTrigger(rawReader);
1026 }
1027
8f8ae0de 1028 // ... without warnings from the decoder !!!
37dacd7d 1029 if (!cfg.WithWarnings())
8f8ae0de 1030 rawStream->DisableWarnings();
9f5fafa6 1031
4fd5ed63 1032 // loops over DDL
1033 while((status = rawStream->NextDDL())) {
9f5fafa6 1034
e8f1ed57 1035 if (cfg.GetPrintLevel() == 2) printf("iDDL %d\n", rawStream->GetDDL());
9f5fafa6 1036
41a38dec 1037 if (rawStream->GetDDL() == 0) {
e8f1ed57 1038 if (cfg.UseFastDecoder()) {
1039 darcHeaderHP = static_cast<AliMUONRawStreamTriggerHP*>(rawStream)->GetHeaders();
1040 if (cfg.GetPrintLevel() == 2) printf("Global output (fast decoder) %x\n", (Int_t)darcHeaderHP->GetGlobalOutput());
1041 for (Int_t ig = 0; ig < cfg.GetGlobalInputs(); ig++)
1042 globalInput[ig] = darcHeaderHP->GetGlobalInput(ig);
1043 } else {
1044 ddlTrigger = rawStream->GetDDLTrigger();
1045 darcHeader = ddlTrigger->GetDarcHeader();
1046 if (cfg.GetPrintLevel() == 2) printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput());
1047 globalInput = darcHeader->GetGlobalInput();
1048 }
327f7faa 1049 StoreGlobalInput(cfg,globalInput);
41a38dec 1050 }
9f5fafa6 1051
4fd5ed63 1052 } // NextDDL
1053
1054 delete rawReader;
1055 delete rawStream;
1056
1057 } // while (1)
1058
41a38dec 1059 // update configuration files ifrequested event types were found
37dacd7d 1060 if (doUpdate && cfg.GetDAFlag())
327f7faa 1061 UpdateGlobalMasks(cfg);
9f5fafa6 1062
4fd5ed63 1063 timers.Stop();
9f5fafa6 1064
e8f1ed57 1065 cout << "MUONTRGda: DA enable: " << cfg.GetDAFlag() << endl;
1066 cout << "MUONTRGda: Run number: " << runNumber << endl;
1067 cout << "MUONTRGda: Nb of DATE events: " << nDateEvents << endl;
1068 cout << "MUONTRGda: Nb of events used: " << nEvents << endl;
1069 cout << "MUONTRGda: Nb of events used (noise): " << cfg.GetEventsN() << endl;
1070 cout << "MUONTRGda: Nb of events used (deadc): " << cfg.GetEventsD() << endl;
1071 cout << "MUONTRGda: Minumum nr of events for rate calculation: " << cfg.GetMinEvents() << endl;
1072 cout << "MUONTRGda: Maximum nr of analyzed events: " << cfg.GetMaxEvents() << endl;
1073 cout << "MUONTRGda: Skip events from start: " << cfg.GetSkipEvents() << endl;
1074 cout << "MUONTRGda: Threshold for noisy inputs: " << 100*cfg.GetThrN() << "%" << endl;
1075 cout << "MUONTRGda: Threshold for dead inputs: " << 100*cfg.GetThrD() << "%" << endl;
1076 cout << "MUONTRGda: Print level: " << cfg.GetPrintLevel() << endl;
1077 cout << "MUONTRGda: Show decoder warnings: " << cfg.WithWarnings() << endl;
1078 cout << "MUONTRGda: Use the fast decoder: " << cfg.UseFastDecoder() << endl;
327f7faa 1079
1080 printf("MUONTRGda: Execution time : R:%7.2fs C:%7.2fs\n", timers.RealTime(), timers.CpuTime());
1081
9f5fafa6 1082
4fd5ed63 1083 return status;
41a38dec 1084
9f5fafa6 1085}
92c23b09 1086