]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDtrapConfig.h
Split dEdxUtils into dEdxBaseUtils, dEdxCalibUtils, dEdxReconUtils and one CalibHistA...
[u/mrichter/AliRoot.git] / TRD / AliTRDtrapConfig.h
1 #ifndef ALITRDTRAPCONFIG_H
2 #define ALITRDTRAPCONFIG_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // Configuration of the TRD TRAcklet Processor
7 // (TRD Front-End Electronics)
8 //
9 // TRAP registers
10 // TRAP data memory (DMEM)
11
12 #include <TObject.h>
13 #include <TNamed.h>
14 #include <TString.h>
15 #include <fstream>
16
17 class AliTRDtrapConfig : public TNamed
18 {
19  public:
20   AliTRDtrapConfig(const TString &name = "", const TString &title = "");
21   ~AliTRDtrapConfig();
22
23   // allocation
24   enum Alloc_t {
25     kAllocNone,
26     kAllocGlobal,
27     kAllocByDetector,
28     kAllocByHC,
29     kAllocByMCM,
30     kAllocByMergerType,
31     kAllocByLayer,
32     kAllocByMCMinSM,
33     kAllocLast
34   }; // possible granularities for allocation
35      // common to registers and DMEM
36
37   // registers
38   enum TrapReg_t { kSML0,
39                   kSML1,
40                   kSML2,
41                   kSMMODE,
42                   kSMCMD,
43                   kNITM0,
44                   kNITM1,
45                   kNITM2,
46                   kNIP4D,
47                   kCPU0CLK,
48                   kCPU1CLK,
49                   kCPU2CLK,
50                   kCPU3CLK,
51                   kNICLK,
52                   kFILCLK,
53                   kPRECLK,
54                   kADCEN,
55                   kNIODE,
56                   kNIOCE,
57                   kNIIDE,
58                   kNIICE,
59                   kARBTIM,
60                   kIA0IRQ0,
61                   kIA0IRQ1,
62                   kIA0IRQ2,
63                   kIA0IRQ3,
64                   kIA0IRQ4,
65                   kIA0IRQ5,
66                   kIA0IRQ6,
67                   kIA0IRQ7,
68                   kIA0IRQ8,
69                   kIA0IRQ9,
70                   kIA0IRQA,
71                   kIA0IRQB,
72                   kIA0IRQC,
73                   kIRQSW0,
74                   kIRQHW0,
75                   kIRQHL0,
76                   kIA1IRQ0,
77                   kIA1IRQ1,
78                   kIA1IRQ2,
79                   kIA1IRQ3,
80                   kIA1IRQ4,
81                   kIA1IRQ5,
82                   kIA1IRQ6,
83                   kIA1IRQ7,
84                   kIA1IRQ8,
85                   kIA1IRQ9,
86                   kIA1IRQA,
87                   kIA1IRQB,
88                   kIA1IRQC,
89                   kIRQSW1,
90                   kIRQHW1,
91                   kIRQHL1,
92                   kIA2IRQ0,
93                   kIA2IRQ1,
94                   kIA2IRQ2,
95                   kIA2IRQ3,
96                   kIA2IRQ4,
97                   kIA2IRQ5,
98                   kIA2IRQ6,
99                   kIA2IRQ7,
100                   kIA2IRQ8,
101                   kIA2IRQ9,
102                   kIA2IRQA,
103                   kIA2IRQB,
104                   kIA2IRQC,
105                   kIRQSW2,
106                   kIRQHW2,
107                   kIRQHL2,
108                   kIA3IRQ0,
109                   kIA3IRQ1,
110                   kIA3IRQ2,
111                   kIA3IRQ3,
112                   kIA3IRQ4,
113                   kIA3IRQ5,
114                   kIA3IRQ6,
115                   kIA3IRQ7,
116                   kIA3IRQ8,
117                   kIA3IRQ9,
118                   kIA3IRQA,
119                   kIA3IRQB,
120                   kIA3IRQC,
121                   kIRQSW3,
122                   kIRQHW3,
123                   kIRQHL3,
124                   kCTGDINI,
125                   kCTGCTRL,
126                   kC08CPU0,
127                   kC09CPU0,
128                   kC10CPU0,
129                   kC11CPU0,
130                   kC12CPUA,
131                   kC13CPUA,
132                   kC14CPUA,
133                   kC15CPUA,
134                   kC08CPU1,
135                   kC09CPU1,
136                   kC10CPU1,
137                   kC11CPU1,
138                   kC08CPU2,
139                   kC09CPU2,
140                   kC10CPU2,
141                   kC11CPU2,
142                   kC08CPU3,
143                   kC09CPU3,
144                   kC10CPU3,
145                   kC11CPU3,
146                   kNMOD,
147                   kNDLY,
148                   kNED,
149                   kNTRO,
150                   kNRRO,
151                   kNES,
152                   kNTP,
153                   kNBND,
154                   kNP0,
155                   kNP1,
156                   kNP2,
157                   kNP3,
158                   kNCUT,
159                   kTPPT0,
160                   kTPFS,
161                   kTPFE,
162                   kTPPGR,
163                   kTPPAE,
164                   kTPQS0,
165                   kTPQE0,
166                   kTPQS1,
167                   kTPQE1,
168                   kEBD,
169                   kEBAQA,
170                   kEBSIA,
171                   kEBSF,
172                   kEBSIM,
173                   kEBPP,
174                   kEBPC,
175                   kEBIS,
176                   kEBIT,
177                   kEBIL,
178                   kEBIN,
179                   kFLBY,
180                   kFPBY,
181                   kFGBY,
182                   kFTBY,
183                   kFCBY,
184                   kFPTC,
185                   kFPNP,
186                   kFPCL,
187                   kFGTA,
188                   kFGTB,
189                   kFGCL,
190                   kFTAL,
191                   kFTLL,
192                   kFTLS,
193                   kFCW1,
194                   kFCW2,
195                   kFCW3,
196                   kFCW4,
197                   kFCW5,
198                   kTPFP,
199                   kTPHT,
200                   kTPVT,
201                   kTPVBY,
202                   kTPCT,
203                   kTPCL,
204                   kTPCBY,
205                   kTPD,
206                   kTPCI0,
207                   kTPCI1,
208                   kTPCI2,
209                   kTPCI3,
210                   kADCMSK,
211                   kADCINB,
212                   kADCDAC,
213                   kADCPAR,
214                   kADCTST,
215                   kSADCAZ,
216                   kFGF0,
217                   kFGF1,
218                   kFGF2,
219                   kFGF3,
220                   kFGF4,
221                   kFGF5,
222                   kFGF6,
223                   kFGF7,
224                   kFGF8,
225                   kFGF9,
226                   kFGF10,
227                   kFGF11,
228                   kFGF12,
229                   kFGF13,
230                   kFGF14,
231                   kFGF15,
232                   kFGF16,
233                   kFGF17,
234                   kFGF18,
235                   kFGF19,
236                   kFGF20,
237                   kFGA0,
238                   kFGA1,
239                   kFGA2,
240                   kFGA3,
241                   kFGA4,
242                   kFGA5,
243                   kFGA6,
244                   kFGA7,
245                   kFGA8,
246                   kFGA9,
247                   kFGA10,
248                   kFGA11,
249                   kFGA12,
250                   kFGA13,
251                   kFGA14,
252                   kFGA15,
253                   kFGA16,
254                   kFGA17,
255                   kFGA18,
256                   kFGA19,
257                   kFGA20,
258                   kFLL00,
259                   kFLL01,
260                   kFLL02,
261                   kFLL03,
262                   kFLL04,
263                   kFLL05,
264                   kFLL06,
265                   kFLL07,
266                   kFLL08,
267                   kFLL09,
268                   kFLL0A,
269                   kFLL0B,
270                   kFLL0C,
271                   kFLL0D,
272                   kFLL0E,
273                   kFLL0F,
274                   kFLL10,
275                   kFLL11,
276                   kFLL12,
277                   kFLL13,
278                   kFLL14,
279                   kFLL15,
280                   kFLL16,
281                   kFLL17,
282                   kFLL18,
283                   kFLL19,
284                   kFLL1A,
285                   kFLL1B,
286                   kFLL1C,
287                   kFLL1D,
288                   kFLL1E,
289                   kFLL1F,
290                   kFLL20,
291                   kFLL21,
292                   kFLL22,
293                   kFLL23,
294                   kFLL24,
295                   kFLL25,
296                   kFLL26,
297                   kFLL27,
298                   kFLL28,
299                   kFLL29,
300                   kFLL2A,
301                   kFLL2B,
302                   kFLL2C,
303                   kFLL2D,
304                   kFLL2E,
305                   kFLL2F,
306                   kFLL30,
307                   kFLL31,
308                   kFLL32,
309                   kFLL33,
310                   kFLL34,
311                   kFLL35,
312                   kFLL36,
313                   kFLL37,
314                   kFLL38,
315                   kFLL39,
316                   kFLL3A,
317                   kFLL3B,
318                   kFLL3C,
319                   kFLL3D,
320                   kFLL3E,
321                   kFLL3F,
322                   kPASADEL,
323                   kPASAPHA,
324                   kPASAPRA,
325                   kPASADAC,
326                   kPASACHM,
327                   kPASASTL,
328                   kPASAPR1,
329                   kPASAPR0,
330                   kSADCTRG,
331                   kSADCRUN,
332                   kSADCPWR,
333                   kL0TSIM,
334                   kSADCEC,
335                   kSADCMC,
336                   kSADCOC,
337                   kSADCGTB,
338                   kSEBDEN,
339                   kSEBDOU,
340                   kTPL00,
341                   kTPL01,
342                   kTPL02,
343                   kTPL03,
344                   kTPL04,
345                   kTPL05,
346                   kTPL06,
347                   kTPL07,
348                   kTPL08,
349                   kTPL09,
350                   kTPL0A,
351                   kTPL0B,
352                   kTPL0C,
353                   kTPL0D,
354                   kTPL0E,
355                   kTPL0F,
356                   kTPL10,
357                   kTPL11,
358                   kTPL12,
359                   kTPL13,
360                   kTPL14,
361                   kTPL15,
362                   kTPL16,
363                   kTPL17,
364                   kTPL18,
365                   kTPL19,
366                   kTPL1A,
367                   kTPL1B,
368                   kTPL1C,
369                   kTPL1D,
370                   kTPL1E,
371                   kTPL1F,
372                   kTPL20,
373                   kTPL21,
374                   kTPL22,
375                   kTPL23,
376                   kTPL24,
377                   kTPL25,
378                   kTPL26,
379                   kTPL27,
380                   kTPL28,
381                   kTPL29,
382                   kTPL2A,
383                   kTPL2B,
384                   kTPL2C,
385                   kTPL2D,
386                   kTPL2E,
387                   kTPL2F,
388                   kTPL30,
389                   kTPL31,
390                   kTPL32,
391                   kTPL33,
392                   kTPL34,
393                   kTPL35,
394                   kTPL36,
395                   kTPL37,
396                   kTPL38,
397                   kTPL39,
398                   kTPL3A,
399                   kTPL3B,
400                   kTPL3C,
401                   kTPL3D,
402                   kTPL3E,
403                   kTPL3F,
404                   kTPL40,
405                   kTPL41,
406                   kTPL42,
407                   kTPL43,
408                   kTPL44,
409                   kTPL45,
410                   kTPL46,
411                   kTPL47,
412                   kTPL48,
413                   kTPL49,
414                   kTPL4A,
415                   kTPL4B,
416                   kTPL4C,
417                   kTPL4D,
418                   kTPL4E,
419                   kTPL4F,
420                   kTPL50,
421                   kTPL51,
422                   kTPL52,
423                   kTPL53,
424                   kTPL54,
425                   kTPL55,
426                   kTPL56,
427                   kTPL57,
428                   kTPL58,
429                   kTPL59,
430                   kTPL5A,
431                   kTPL5B,
432                   kTPL5C,
433                   kTPL5D,
434                   kTPL5E,
435                   kTPL5F,
436                   kTPL60,
437                   kTPL61,
438                   kTPL62,
439                   kTPL63,
440                   kTPL64,
441                   kTPL65,
442                   kTPL66,
443                   kTPL67,
444                   kTPL68,
445                   kTPL69,
446                   kTPL6A,
447                   kTPL6B,
448                   kTPL6C,
449                   kTPL6D,
450                   kTPL6E,
451                   kTPL6F,
452                   kTPL70,
453                   kTPL71,
454                   kTPL72,
455                   kTPL73,
456                   kTPL74,
457                   kTPL75,
458                   kTPL76,
459                   kTPL77,
460                   kTPL78,
461                   kTPL79,
462                   kTPL7A,
463                   kTPL7B,
464                   kTPL7C,
465                   kTPL7D,
466                   kTPL7E,
467                   kTPL7F,
468                   kMEMRW,
469                   kMEMCOR,
470                   kDMDELA,
471                   kDMDELS,
472                   kLastReg };   // enum of all TRAP registers, to be used for access to them
473
474   Bool_t SetTrapRegAlloc(TrapReg_t reg, Alloc_t mode) { return fRegisterValue[reg].Allocate(mode); }
475   Bool_t SetTrapReg(TrapReg_t reg, Int_t value, Int_t det);
476   Bool_t SetTrapReg(TrapReg_t reg, Int_t value, Int_t det, Int_t rob, Int_t mcm);
477
478   Int_t  GetTrapReg(TrapReg_t reg, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
479
480   void ResetRegs();
481
482   // data memory (DMEM)
483   Bool_t SetDmemAlloc(Int_t addr, Alloc_t mode);
484   Bool_t SetDmem(Int_t addr, UInt_t value, Int_t det);
485   Bool_t SetDmem(Int_t addr, UInt_t value, Int_t det, Int_t rob, Int_t mcm);
486   Bool_t SetDmem(Int_t addr, Int_t value) { return SetDmem(addr, (UInt_t) value); }
487   Bool_t SetDmem(Int_t addr, Int_t value, Int_t det, Int_t rob, Int_t mcm) { return SetDmem(addr, (UInt_t) value, det, rob, mcm); }
488
489   UInt_t GetDmemUnsigned(Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
490
491   void ResetDmem();
492
493   // access by 16-bit address
494   UInt_t Peek(Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
495   Bool_t Poke(Int_t addr, UInt_t value, Int_t det, Int_t rob, Int_t mcm);
496
497   // helper methods
498   const char* GetRegName(TrapReg_t reg)       const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetName() : ""; }
499   UShort_t    GetRegAddress(TrapReg_t reg)    const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetAddr() : 0; }
500   UShort_t    GetRegNBits(TrapReg_t reg)      const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetNbits() : 0; }
501   UInt_t      GetRegResetValue(TrapReg_t reg) const { return ((reg >= 0) && (reg < kLastReg)) ? fRegisterValue[reg].GetResetValue() : 0; }
502
503   TrapReg_t   GetRegByAddress(Int_t address) const;
504
505   Bool_t PrintTrapReg(TrapReg_t reg, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
506   Bool_t PrintTrapAddr(Int_t addr, Int_t det = -1, Int_t rob = -1, Int_t mcm = -1) const;
507
508   void PrintMemDatx(ostream &os, Int_t addr) const;
509   void PrintMemDatx(ostream &os, Int_t addr, Int_t det, Int_t rob, Int_t mcm) const;
510   void PrintMemDatx(ostream &os, TrapReg_t reg) const;
511   void PrintMemDatx(ostream &os, TrapReg_t reg, Int_t det, Int_t rob, Int_t mcm) const;
512   void PrintDatx(ostream &os, UInt_t addr, UInt_t data, Int_t rob, Int_t mcm) const;
513
514   static const Int_t fgkDmemStartAddress  = 0xc000; // start address in TRAP GIO
515   static const Int_t fgkDmemWords = 0x400;          // number of words in DMEM
516
517   static const Int_t fgkImemStartAddress = 0xe000;  // start address in TRAP GIO
518   static const Int_t fgkImemWords = 0x1000;         // number of words in IMEM
519
520   static const Int_t fgkDbankStartAddress = 0xf000; // start address in TRAP GIO
521   static const Int_t fgkDbankWords = 0x0100;        // number of words in DBANK
522
523  protected:
524   void InitRegs();
525
526   class AliTRDtrapValue : public TObject {
527   public:
528     AliTRDtrapValue();
529     virtual ~AliTRDtrapValue() {}
530
531     virtual Bool_t Allocate(Alloc_t mode);
532
533   protected:
534     Bool_t SetData(UInt_t value);
535     Bool_t SetData(UInt_t value, Int_t det);
536     Bool_t SetData(UInt_t value, Int_t det, Int_t rob, Int_t mcm);
537
538     UInt_t GetData(Int_t det, Int_t rob, Int_t mcm) const;
539
540     Int_t  GetIdx(Int_t det, Int_t rob, Int_t mcm) const;
541
542   private:
543     AliTRDtrapValue(const AliTRDtrapValue &rhs); // not implemented
544     AliTRDtrapValue& operator=(const AliTRDtrapValue &rhs); // not implemented
545
546     Alloc_t  fAllocMode;        // allocation mode
547     Int_t    fSize;             // array size
548     UInt_t  *fData;             //[fSize] data array
549     Bool_t  *fValid;            //[fSize] valid flag
550
551     static const Int_t fgkSize[kAllocLast]; // required array dimension for different allocation modes
552
553     ClassDef(AliTRDtrapValue, 1);
554   };
555
556   class AliTRDtrapRegister : public AliTRDtrapValue {
557   public:
558     AliTRDtrapRegister();
559     virtual ~AliTRDtrapRegister();
560
561     void    Init(const char* name, Int_t addr, Int_t nBits, Int_t resetValue);
562     void    Reset() { SetData(fResetValue); }
563
564     Bool_t  SetValue(Int_t value, Int_t det) { return SetData(value, det); }
565     Bool_t  SetValue(Int_t value, Int_t det, Int_t rob, Int_t mcm) { return SetData(value, det, rob, mcm); }
566
567     Int_t   GetValue(Int_t det, Int_t rob, Int_t mcm) const { return GetData(det, rob, mcm); }
568
569     const char*  GetName() const { return fName.Data(); }
570     UShort_t GetAddr() const { return fAddr; }
571     UShort_t GetNbits() const { return fNbits; }
572     UInt_t   GetResetValue() const { return fResetValue; }
573
574   protected:
575     AliTRDtrapRegister(const AliTRDtrapRegister &rhs);
576     AliTRDtrapRegister& operator=(const AliTRDtrapRegister &rhs);
577
578     // fixed properties of the register
579     // which do not need to be stored
580     TString   fName;            //! Name of the register
581     UShort_t  fAddr;            //! Address in GIO of TRAP
582     UShort_t  fNbits;           //! Number of bits, from 1 to 32
583     UInt_t    fResetValue;      //! reset value
584
585     ClassDef(AliTRDtrapRegister, 1);
586   };
587
588   class AliTRDtrapDmemWord : public AliTRDtrapValue {
589   public:
590     AliTRDtrapDmemWord() : AliTRDtrapValue(), fName(""), fAddr(0) {}
591     virtual ~AliTRDtrapDmemWord() {}
592
593     void    Reset() { SetData(0); }
594
595     Bool_t  SetValue(UInt_t value, Int_t det) { return SetData(value, det); }
596     Bool_t  SetValue(UInt_t value, Int_t det, Int_t rob, Int_t mcm) { return SetData(value, det, rob, mcm); }
597
598     UInt_t  GetValue(Int_t det, Int_t rob, Int_t mcm) const { return GetData(det, rob, mcm); }
599
600     void    SetAddress(UShort_t addr) { fAddr = addr; fName.Form("DMEM 0x%04x", fAddr); }
601     const char* GetName() const { return fName.Data(); }
602
603   protected:
604     AliTRDtrapDmemWord(const AliTRDtrapDmemWord &rhs); // not implemented
605     AliTRDtrapDmemWord& operator=(const AliTRDtrapDmemWord &rhs); // not implemented
606
607     TString  fName;
608     UShort_t fAddr;             //! address
609
610     ClassDef(AliTRDtrapDmemWord, 1);
611   };
612
613   // configuration registers
614   AliTRDtrapRegister fRegisterValue[kLastReg];  // array of TRAP register values in use
615
616   // DMEM
617   AliTRDtrapDmemWord fDmem[fgkDmemWords]; // TRAP data memory
618
619   static const Int_t fgkMaxMcm;            // max. no. of MCMs to be treated
620   static const Int_t fgkMcmlistSize=256;     // list of MCMs to which a value has to be written
621
622   static Bool_t    fgRegAddressMapInitialized;
623   static TrapReg_t fgRegAddressMap[0x400 + 0x200 + 0x3];
624   static const Int_t fgkRegisterAddressBlockStart[];
625   static const Int_t fgkRegisterAddressBlockSize[];
626
627  private:
628   AliTRDtrapConfig& operator=(const AliTRDtrapConfig &rhs); // not implemented
629   AliTRDtrapConfig(const AliTRDtrapConfig& cfg); // not implemented
630
631   ClassDef(AliTRDtrapConfig, 3);
632 };
633
634 #endif