4 Contact: Franck Manso <manso@clermont.in2p3.fr>
5 Link: http://aliceinfo.cern.ch/static/Offline/dimuon/muon_html/README_mtrda.html
9 Number of events needed: 1000 events
10 Input files: MtgGlobalCrate.dat MtgRegionalCrate.dat MtgLocalMask.dat MtgLocalLut.dat MtgCurrent.dat DAConfig.dat
11 Output Files: ExportedFiles.dat MtgGlobalCrate.dat
12 Trigger types used: PHYSICS_EVENT CALIBRATION_EVENT
15 //////////////////////////////////////////////////////////////////////////////
16 // Detector Algorithm for the MUON trigger configuration. //
18 // Calculates masks for the global trigger input, by looking at dead //
19 // channels in calibration events and at noisy channels in physics events. //
20 // Transfers trigger configuration files to the File Exchange Server and //
21 // writes them (if modified) into the trigger configuration data base. //
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) //
28 //////////////////////////////////////////////////////////////////////////////
39 #include <Riostream.h>
44 #include "AliRawReaderDate.h"
46 #include "AliMpConstants.h"
47 #include "AliMUONRawStreamTrigger.h"
48 #include "AliMUONRawStreamTriggerHP.h"
49 #include "AliMUONDarcHeader.h"
50 #include "AliMUONDDLTrigger.h"
51 #include "AliMUONVStore.h"
52 #include "AliMUON1DArray.h"
53 #include "AliMUONTriggerIO.h"
54 #include "AliMUONRegionalTriggerConfig.h"
55 #include "AliMUONGlobalCrateConfig.h"
56 #include "AliMUONTriggerCrateConfig.h"
61 #include "TStopwatch.h"
63 #include "TPluginManager.h"
65 /// class for DA run parameters and DA working space
66 class AliDAConfig : TObject {
71 fDAConfigFileName("DAConfig.dat"),
72 fCurrentFileName("MtgCurrent.dat"),
73 fLastCurrentFileName("MtgLastCurrent.dat"),
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),
98 fTriggerIO(new AliMUONTriggerIO),
99 fAlgoNoisyInput(false),
100 fAlgoDeadcInput(false),
106 fWithWarnings(false),
107 fUseFastDecoder(false),
108 fNLocalBoard(AliMpConstants::TotalNofLocalBoards()+1)
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;
117 fLocalMasks = new AliMUON1DArray(fNLocalBoard);
118 fRegionalMasks = new AliMUONRegionalTriggerConfig();
119 fGlobalMasks = new AliMUONGlobalCrateConfig();
122 AliDAConfig (const AliDAConfig& cfg); // copy constructor
123 AliDAConfig& operator=(const AliDAConfig& cfg); // assignment operator
124 virtual ~AliDAConfig()
128 delete fRegionalMasks;
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());
145 const Char_t* GetDAConfigFileName() { return fDAConfigFileName.Data(); }
146 const Char_t* GetCurrentFileName() { return fCurrentFileName.Data(); }
147 const Char_t* GetLastCurrentFileName() { return fLastCurrentFileName.Data(); }
149 const Char_t* GetSodName() { return fSodName.Data(); }
150 Int_t GetSodFlag() const { return fSodFlag; }
152 const Char_t* GetDAName() { return fDAName.Data(); }
153 Int_t GetDAFlag() const { return fDAFlag; }
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(); }
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; }
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; }
172 AliMUONVStore* GetLocalMasks() const { return fLocalMasks; }
173 AliMUONRegionalTriggerConfig* GetRegionalMasks() const { return fRegionalMasks; }
174 AliMUONGlobalCrateConfig* GetGlobalMasks() const { return fGlobalMasks; }
176 AliMUONTriggerIO* GetTriggerIO() const { return fTriggerIO; }
178 Int_t GetEventsN() const { return fEventsN; }
179 Int_t GetEventsD() const { return fEventsD; }
181 Int_t GetPrintLevel() const { return fPrintLevel; }
183 Bool_t GetAlgoNoisyInput() const { return fAlgoNoisyInput; }
184 Bool_t GetAlgoDeadcInput() const { return fAlgoDeadcInput; }
186 Float_t GetThrN() const { return fThrN; }
187 Float_t GetThrD() const { return fThrD; }
189 Int_t GetMinEvents() const { return fMinEvents; }
190 Int_t GetMaxEvents() const { return fMaxEvents; }
191 Int_t GetSkipEvents() const { return fSkipEvents; }
193 Bool_t WithWarnings() const { return fWithWarnings; }
194 Bool_t UseFastDecoder() const { return fUseFastDecoder; }
196 Int_t GetGlobalInputs() const { return kGlobalInputs; }
197 Int_t GetGlobalInputLength() const { return kGlobalInputLength; }
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]; }
202 void SetSodName(Char_t *name) { fSodName = TString(name); }
203 void SetSodFlag(Int_t flag) { fSodFlag = flag; }
205 void SetDAName(Char_t *name) { fDAName = TString(name); }
206 void SetDAFlag(Int_t flag) { fDAFlag = flag; }
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); }
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; }
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; }
225 void IncNoiseEvent() { fEventsN++; }
226 void IncDeadcEvent() { fEventsD++; }
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; }
231 void SetPrintLevel(Int_t level) { fPrintLevel = level; }
233 void SetAlgoNoisyInput(Bool_t val) { fAlgoNoisyInput = val; }
234 void SetAlgoDeadcInput(Bool_t val) { fAlgoDeadcInput = val; }
236 void SetThrN(Float_t val) { fThrN = val; }
237 void SetThrD(Float_t val) { fThrD = val; }
239 void SetMinEvents(Int_t val) { fMinEvents = val; }
240 void SetMaxEvents(Int_t val) { fMaxEvents = val; }
241 void SetSkipEvents(Int_t val) { fSkipEvents = val; }
243 void SetWithWarnings() { fWithWarnings = true; }
244 void SetUseFastDecoder() { fUseFastDecoder = true; }
246 void IncGlobalFileVersion() { fGlobalFileVersion++; }
247 void DecSkipEvents() { fSkipEvents--; }
251 const TString fDAConfigFileName;
252 const TString fCurrentFileName;
253 const TString fLastCurrentFileName;
261 TString fGlobalFileName;
262 TString fRegionalFileName;
263 TString fLocalMaskFileName;
264 TString fLocalLutFileName;
265 TString fSignatureFileName;
267 Int_t fGlobalFileVersion;
268 Int_t fRegionalFileVersion;
269 Int_t fLocalMaskFileVersion;
270 Int_t fLocalLutFileVersion;
271 Int_t fSignatureFileVersion;
273 Int_t fGlobalFileLastVersion;
274 Int_t fRegionalFileLastVersion;
275 Int_t fLocalMaskFileLastVersion;
276 Int_t fLocalLutFileLastVersion;
283 AliMUONVStore* fLocalMasks;
284 AliMUONRegionalTriggerConfig* fRegionalMasks;
285 AliMUONGlobalCrateConfig* fGlobalMasks;
287 AliMUONTriggerIO *fTriggerIO;
289 Bool_t fAlgoNoisyInput;
290 Bool_t fAlgoDeadcInput;
297 Bool_t fWithWarnings;
298 Bool_t fUseFastDecoder;
300 const Int_t fNLocalBoard;
302 enum { kGlobalInputs = 4, kGlobalInputLength = 32 };
304 Int_t fAccGlobalInputN[kGlobalInputs][kGlobalInputLength];
305 Int_t fAccGlobalInputD[kGlobalInputs][kGlobalInputLength];
309 //__________________________________________________________________
310 Bool_t ReadDAConfig(AliDAConfig& cfg)
312 /// read run parameters for the DA
317 file = cfg.GetDAConfigFileName();
318 std::ifstream in(gSystem->ExpandPathName(file.Data()));
320 printf("Cannot open DA configuration file %s ; use default values.\n",file.Data());
329 pos = tmp.First(" ");
331 cfg.SetPrintLevel(tmp.Atoi());
335 pos = tmp.First(" ");
337 cfg.SetThrN(tmp.Atof());
341 pos = tmp.First(" ");
343 cfg.SetThrD(tmp.Atof());
347 pos = tmp.First(" ");
349 cfg.SetMinEvents(tmp.Atoi());
353 pos = tmp.First(" ");
355 cfg.SetSkipEvents(tmp.Atoi());
359 pos = tmp.First(" ");
361 cfg.SetMaxEvents(tmp.Atoi());
365 pos = tmp.First(" ");
367 if (tmp.Atoi() != 0) cfg.SetWithWarnings();
371 pos = tmp.First(" ");
373 if (tmp.Atoi() != 0) cfg.SetUseFastDecoder();
379 //__________________________________________________________________
380 void WriteLastCurrentFile(AliDAConfig& cfg, TString currentFile)
382 /// write last current file
387 out.open(file.Data());
388 out << cfg.GetSodName() << " " << cfg.GetSodFlag() << endl;
389 out << cfg.GetDAName() << " " << cfg.GetDAFlag() << endl;
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;
400 //___________________________________________________________________________________________
401 Bool_t ReadCurrentFile(AliDAConfig& cfg, TString currentFile, Bool_t lastCurrentFlag = false)
403 /// read last current file name and version
411 std::ifstream in(gSystem->ExpandPathName(file.Data()));
413 printf("Cannot open last current file %s\n",currentFile.Data());
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());
426 sscanf(line, "%s %d", name, &flag);
429 if (cfg.GetPrintLevel()) printf("DA Flag: %d\n", cfg.GetDAFlag());
434 Int_t pos = tmp.First(" ");
435 TString tmp1 = tmp(0, pos);
436 cfg.SetGlobalFileName(tmp1.Data());
438 if (!lastCurrentFlag) {
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());
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());
451 pos = tmp.First(" ");
453 cfg.SetRegionalFileName(tmp1.Data());
455 if (!lastCurrentFlag) {
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());
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());
469 pos = tmp.First(" ");
471 cfg.SetLocalMaskFileName(tmp1.Data());
473 if (!lastCurrentFlag) {
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());
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());
485 pos = tmp.First(" ");
487 cfg.SetLocalLutFileName(tmp1.Data());
489 if (!lastCurrentFlag) {
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());
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());
501 pos = tmp.First(" ");
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());
512 void ReadFileNames(AliDAConfig& cfg)
514 /// if last current file does not exist than read current file
516 if (!ReadCurrentFile(cfg,cfg.GetLastCurrentFileName(), true))
518 ReadCurrentFile(cfg,cfg.GetCurrentFileName(), true);
521 // any case read current file
522 ReadCurrentFile(cfg,cfg.GetCurrentFileName());
527 Bool_t ExportFiles(AliDAConfig& cfg)
529 /// Export files to FES
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
538 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/infoLogger");
539 gSystem->Setenv("DAQDA_TEST_DIR", "/alisoft/FES");
545 Bool_t modified = false;
548 TString fileExp("ExportedFiles.dat");
551 out.open(fileExp.Data());
553 printf("Failed to create file: %s\n",file.Data());
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"))
562 if (initFES) printf("Copy all configuration files to the FES.\n");
564 file = cfg.GetGlobalFileName();
565 if ((cfg.GetGlobalFileLastVersion() != cfg.GetGlobalFileVersion()) || initFES) {
566 status = daqDA_FES_storeFile(file.Data(), "GLOBAL");
568 printf("Failed to export file: %s\n",cfg.GetGlobalFileName());
571 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetGlobalFileName());
572 out << cfg.GetGlobalFileName() << endl;
575 file = cfg.GetLocalMaskFileName();
576 if ((cfg.GetLocalMaskFileLastVersion() != cfg.GetLocalMaskFileVersion()) || initFES) {
578 status = daqDA_FES_storeFile(file.Data(), "LOCAL");
580 printf("Failed to export file: %s\n",cfg.GetLocalMaskFileName());
583 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetLocalMaskFileName());
584 out << cfg.GetLocalMaskFileName() << endl;
587 file = cfg.GetLocalLutFileName();
588 if ((cfg.GetLocalLutFileLastVersion() != cfg.GetLocalLutFileVersion()) || initFES) {
590 status = daqDA_FES_storeFile(file.Data(), "LUT");
592 printf("Failed to export file: %s\n",cfg.GetLocalLutFileName());
595 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetLocalLutFileName());
596 out << cfg.GetLocalLutFileName() << endl;
600 // exported regional file always (needed to initialise the PreProcessor)!
602 file = cfg.GetRegionalFileName();
603 if ( (cfg.GetRegionalFileLastVersion() != cfg.GetRegionalFileVersion()) || modified || initFES) {
604 status = daqDA_FES_storeFile(file.Data(), "REGIONAL");
606 printf("Failed to export file: %s\n",cfg.GetRegionalFileName());
609 if(cfg.GetPrintLevel()) printf("Export file: %s\n",cfg.GetRegionalFileName());
610 out << cfg.GetRegionalFileName() << endl;
615 // export Exported file to FES anyway
616 status = daqDA_FES_storeFile(fileExp.Data(), "EXPORTED");
618 printf("Failed to export file: %s\n", fileExp.Data());
621 if(cfg.GetPrintLevel()) printf("Export file: %s\n",fileExp.Data());
623 // write last current file
624 WriteLastCurrentFile(cfg,cfg.GetLastCurrentFileName());
630 Bool_t ImportFiles(AliDAConfig& cfg)
632 /// copy locally a file from daq detector config db
633 /// The current detector is identified by detector code in variable
634 /// DATE_DETECTOR_CODE. It must be defined.
635 /// If environment variable DAQDA_TEST_DIR is defined, files are copied from
636 /// DAQDA_TEST_DIR instead of the database.
637 /// The usual environment variables are not needed.
642 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/db");
645 status = daqDA_DB_getFile(cfg.GetDAConfigFileName(), cfg.GetDAConfigFileName());
647 printf("Failed to get DA config file from DB: %s\n",cfg.GetDAConfigFileName());
653 status = daqDA_DB_getFile(cfg.GetCurrentFileName(), cfg.GetCurrentFileName());
655 printf("Failed to get current config file from DB: %s\n",cfg.GetCurrentFileName());
661 status = daqDA_DB_getFile(cfg.GetGlobalFileName(), cfg.GetGlobalFileName());
663 printf("Failed to get current config file from DB: %s\n", cfg.GetGlobalFileName());
667 status = daqDA_DB_getFile(cfg.GetRegionalFileName(), cfg.GetRegionalFileName());
669 printf("Failed to get current config file from DB: %s\n",cfg.GetRegionalFileName());
673 status = daqDA_DB_getFile(cfg.GetLocalMaskFileName(), cfg.GetLocalMaskFileName());
675 printf("Failed to get current config file from DB: %s\n",cfg.GetLocalMaskFileName());
679 status = daqDA_DB_getFile(cfg.GetLocalLutFileName(), cfg.GetLocalLutFileName());
681 printf("Failed to get current config file from DB: %s\n",cfg.GetLocalLutFileName());
689 void ReadMaskFiles(AliDAConfig& cfg)
693 const Char_t* localFile = cfg.GetLocalMaskFileName();
694 const Char_t* regionalFile = cfg.GetRegionalFileName();
695 const Char_t* globalFile = cfg.GetGlobalFileName();
697 cfg.GetTriggerIO()->ReadConfig(localFile, regionalFile, globalFile, cfg.GetLocalMasks(), cfg.GetRegionalMasks(), cfg.GetGlobalMasks());
700 //______________________________________________________________
701 UInt_t GetFetMode(const AliDAConfig & cfg)
703 /// FET mode = 3 to run algorithm for dead global inputs
707 return cfg.GetGlobalMasks()->GetFetRegister(3);
711 //______________________________________________________________
712 void StoreGlobalInput(AliDAConfig& cfg, const UInt_t * const globalInput)
714 /// accumulate and build statistics of global input values
716 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
717 for (Int_t ib = 0; ib < cfg.GetGlobalInputLength(); ib++) {
719 if (cfg.GetAlgoNoisyInput())
720 cfg.AddAccGlobalInputN(ii,ib,((globalInput[ii] >> ib) & 0x1));
721 if (cfg.GetAlgoDeadcInput())
722 cfg.AddAccGlobalInputD(ii,ib,((globalInput[ii] >> ib) & 0x1));
728 //______________________________________________________________
729 void UpdateGlobalMasks(AliDAConfig& cfg)
731 /// update the global masks
734 gSystem->Setenv("DAQDALIB_PATH", "$DATE_SITE/db");
737 Float_t rateN = 0.0, rateD = 0.0;
738 UInt_t gmask[4], omask;
739 Bool_t noise, deadc, withEvN, withEvD, updated = false;
741 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
744 for (Int_t ib = 0; ib < cfg.GetGlobalInputLength(); ib++) {
750 if (cfg.GetEventsN() > cfg.GetMinEvents()) {
751 rateN = (Float_t)cfg.GetAccGlobalInputN(ii,ib)/(Float_t)cfg.GetEventsN();
752 noise = (rateN > cfg.GetThrN());
755 if (cfg.GetEventsD() > cfg.GetMinEvents()) {
756 rateD = (Float_t)cfg.GetAccGlobalInputD(ii,ib)/(Float_t)cfg.GetEventsD();
757 deadc = (rateD < cfg.GetThrD());
760 if (!withEvN && !withEvD) {
761 // - copy the bit from the old mask
762 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
763 if (cfg.GetPrintLevel())
764 printf("Mask not changed (just copy the old values)\n");
766 if (!withEvN && withEvD) {
768 // - create a new mask, set the bit to 1
770 //gmask[ii] |= 0x1 << ib;
771 // - copy the bit from the old mask
772 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
774 // - create a new mask, set the bit to 0
775 gmask[ii] |= 0x0 << ib;
776 if (cfg.GetPrintLevel())
777 printf("Found dead channel %1d:%02d (%4.2f) \n",ii,ib,rateD);
780 if (withEvN && !withEvD) {
782 // - create a new mask, set the bit to 1
784 //gmask[ii] |= 0x1 << ib;
785 // - copy the bit from the old mask
786 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
788 // - create a new mask, set the bit to 0
789 gmask[ii] |= 0x0 << ib;
790 if (cfg.GetPrintLevel())
791 printf("Found noisy channel %1d:%02d (%4.2f) \n",ii,ib,rateN);
794 if (withEvN && withEvD) {
795 if (!noise && !deadc) {
796 // - create a new mask, set the bit to 1
798 //gmask[ii] |= 0x1 << ib;
799 // - copy the bit from the old mask
800 gmask[ii] |= ((cfg.GetGlobalMasks()->GetGlobalMask(ii) >> ib) & 0x1) << ib;
802 // - create a new mask, set the bit to 0
803 gmask[ii] |= 0x0 << ib;
804 if (cfg.GetPrintLevel()) {
806 printf("Found noisy channel %1d:%02d (%4.2f) \n",ii,ib,rateN);
808 printf("Found dead channel %1d:%02d (%4.2f) \n",ii,ib,rateD);
815 // check if at least one mask value has been changed from previous version
816 for (Int_t ii = 0; ii < cfg.GetGlobalInputs(); ii++) {
817 printf("Global mask [%1d] %08x \n",ii,gmask[ii]);
818 omask = cfg.GetGlobalMasks()->GetGlobalMask(ii);
819 if (gmask[ii] != omask) {
821 cfg.GetGlobalMasks()->SetGlobalMask(ii,gmask[ii]);
829 cfg.IncGlobalFileVersion();
831 // don't change the file version ("-x.dat")
833 cfg.GetTriggerIO()->WriteGlobalConfig(cfg.GetGlobalFileName(),cfg.GetGlobalMasks());
835 // write last current file
836 WriteLastCurrentFile(cfg,cfg.GetCurrentFileName());
838 status = daqDA_DB_storeFile(cfg.GetGlobalFileName(), cfg.GetGlobalFileName());
840 printf("Failed to export file to DB: %s\n",cfg.GetGlobalFileName());
844 status = daqDA_DB_storeFile(cfg.GetCurrentFileName(), cfg.GetCurrentFileName());
846 printf("Failed to export file to DB: %s\n",cfg.GetCurrentFileName());
854 //*************************************************************//
855 int main(Int_t argc, Char_t **argv)
859 // needed for streamer application
860 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", "*", "TStreamerInfo", "RIO", "TStreamerInfo()");
862 /* check that we got some arguments = list of files */
864 printf("Wrong number of arguments\n");
870 Char_t inputFile[256] = "";
874 strncpy(inputFile, argv[1], 256);
876 printf("MUONTRGda : No input File !\n");
880 // decoding the events
883 Int_t nDateEvents = 0;
889 AliMUONDDLTrigger* ddlTrigger = 0x0;
890 AliMUONDarcHeader* darcHeader = 0x0;
891 // new (fast) decoder
892 const AliMUONRawStreamTriggerHP::AliHeader* darcHeaderHP = 0x0;
898 // comment out, since we do not retrieve files from database
899 if (!ImportFiles(cfg)) {
900 printf("Import from DB failed\n");
901 printf("For local test set DAQDA_TEST_DIR to the local directory where the Mtg files are located \n");
908 // the run number extracted from the file name
909 TString tmp(inputFile);
910 Int_t pos = tmp.First("daq");
912 gSystem->Setenv("DATE_RUN_NUMBER",tmp.Data());
913 gSystem->Exec("echo \"DATE_RUN_NUMBER = \" $DATE_RUN_NUMBER");
916 if(!ExportFiles(cfg)) {
917 printf("ExportFiles failed\n");
921 // FET is triggered by CTP
922 Bool_t modeFET3 = kTRUE;
923 if (GetFetMode(cfg) != 3) {
924 printf("FET is not in mode 3. Only PHYSICS events will be analysed (noisy channels)\n");
928 // All 5 global cards are controlled by the Mts proxy
929 if (cfg.GetGlobalMasks()->GetGlobalCrateEnable() != 0x1F) {
930 printf("The MTS proxy does not control all global cards\n");
934 // The global cards are ON (active on the global inputs)
935 if (!cfg.GetGlobalMasks()->GetMasksOn()) {
936 printf("Global masks are not ON\n");
940 // make sure to catch the "rare" calib events (1 every 50s in physics)
941 const Char_t* tableSOD[] = {"ALL", "yes", "CAL", "all", NULL, NULL};
942 monitorDeclareTable(const_cast<char**>(tableSOD));
944 status = monitorSetDataSource(inputFile);
946 cerr << "ERROR : monitorSetDataSource status (hex) = " << hex << status
947 << " " << monitorDecodeError(status) << endl;
950 status = monitorDeclareMp("MUON Trigger monitoring");
952 cerr << "ERROR : monitorDeclareMp status (hex) = " << hex << status
953 << " " << monitorDecodeError(status) << endl;
957 /* define wait event timeout - 1s max */
959 monitorSetNoWaitNetworkTimeout(1000);
961 cout << "MUONTRGda : Reading data from file " << inputFile <<endl;
963 UInt_t *globalInput = new UInt_t[4];
964 Bool_t doUpdate = false;
970 if (nEvents >= cfg.GetMaxEvents()) break;
971 if (cfg.GetPrintLevel()) {
972 if (nEvents && nEvents % 1000 == 0)
973 cout<<"Cumulated events " << nEvents << endl;
975 // check shutdown condition
976 if (daqDA_checkShutdown())
979 // Skip Events if needed
980 while (cfg.GetSkipEvents()) {
981 status = monitorGetEventDynamic(&event);
986 status = monitorGetEventDynamic(&event);
988 cout << "MUONTRGda : EOF found" << endl;
994 // decoding rawdata headers
995 AliRawReader *rawReader = new AliRawReaderDate(event);
997 Int_t eventType = rawReader->GetType();
998 runNumber = rawReader->GetRunNumber();
1001 // CALIBRATION_EVENT
1002 // SYSTEM_SOFTWARE_TRIGGER_EVENT
1003 // DETECTOR_SOFTWARE_TRIGGER_EVENT
1004 cfg.SetAlgoNoisyInput(false);
1005 cfg.SetAlgoDeadcInput(false);
1006 if (eventType == PHYSICS_EVENT) {
1007 cfg.SetAlgoNoisyInput(true);
1009 cfg.IncNoiseEvent();
1010 } else if (modeFET3 && eventType == CALIBRATION_EVENT) {
1011 cfg.SetAlgoDeadcInput(true);
1013 cfg.IncDeadcEvent();
1019 if (cfg.GetPrintLevel() == 2) printf("\nEvent # %d\n",nEvents);
1021 // decoding MUON payload
1022 AliMUONVRawStreamTrigger *rawStream = 0x0;
1023 if (cfg.UseFastDecoder()) {
1024 rawStream = new AliMUONRawStreamTriggerHP(rawReader);
1026 rawStream = new AliMUONRawStreamTrigger(rawReader);
1029 // ... without warnings from the decoder !!!
1030 if (!cfg.WithWarnings())
1031 rawStream->DisableWarnings();
1034 while((status = rawStream->NextDDL())) {
1036 if (cfg.GetPrintLevel() == 2) printf("iDDL %d\n", rawStream->GetDDL());
1038 if (rawStream->GetDDL() == 0) {
1039 if (cfg.UseFastDecoder()) {
1040 darcHeaderHP = static_cast<AliMUONRawStreamTriggerHP*>(rawStream)->GetHeaders();
1041 if (cfg.GetPrintLevel() == 2) printf("Global output (fast decoder) %x\n", (Int_t)darcHeaderHP->GetGlobalOutput());
1042 for (Int_t ig = 0; ig < cfg.GetGlobalInputs(); ig++)
1043 globalInput[ig] = darcHeaderHP->GetGlobalInput(ig);
1045 ddlTrigger = rawStream->GetDDLTrigger();
1046 darcHeader = ddlTrigger->GetDarcHeader();
1047 if (cfg.GetPrintLevel() == 2) printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput());
1048 globalInput = darcHeader->GetGlobalInput();
1050 StoreGlobalInput(cfg,globalInput);
1060 // update configuration files ifrequested event types were found
1061 if (doUpdate && cfg.GetDAFlag())
1062 UpdateGlobalMasks(cfg);
1066 cout << "MUONTRGda: DA enable: " << cfg.GetDAFlag() << endl;
1067 cout << "MUONTRGda: Run number: " << runNumber << endl;
1068 cout << "MUONTRGda: Nb of DATE events: " << nDateEvents << endl;
1069 cout << "MUONTRGda: Nb of events used: " << nEvents << endl;
1070 cout << "MUONTRGda: Nb of events used (noise): " << cfg.GetEventsN() << endl;
1071 cout << "MUONTRGda: Nb of events used (deadc): " << cfg.GetEventsD() << endl;
1072 cout << "MUONTRGda: Minumum nr of events for rate calculation: " << cfg.GetMinEvents() << endl;
1073 cout << "MUONTRGda: Maximum nr of analyzed events: " << cfg.GetMaxEvents() << endl;
1074 cout << "MUONTRGda: Skip events from start: " << cfg.GetSkipEvents() << endl;
1075 cout << "MUONTRGda: Threshold for noisy inputs: " << 100*cfg.GetThrN() << "%" << endl;
1076 cout << "MUONTRGda: Threshold for dead inputs: " << 100*cfg.GetThrD() << "%" << endl;
1077 cout << "MUONTRGda: Print level: " << cfg.GetPrintLevel() << endl;
1078 cout << "MUONTRGda: Show decoder warnings: " << cfg.WithWarnings() << endl;
1079 cout << "MUONTRGda: Use the fast decoder: " << cfg.UseFastDecoder() << endl;
1081 printf("MUONTRGda: Execution time : R:%7.2fs C:%7.2fs\n", timers.RealTime(), timers.CpuTime());