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