]>
Commit | Line | Data |
---|---|---|
bd3cd9c2 | 1 | #ifndef ALIEMCALGEOPARAMS_H |
2 | #define ALIEMCALGEOPARAMS_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
bd3cd9c2 | 6 | ////////////////////////////////////////////////////////// |
e8c0d6bb | 7 | // class for holding various parameters; |
a520bcd0 | 8 | // |
9 | // Author: David Silvermyr (ORNL) | |
10 | // | |
bd3cd9c2 | 11 | ////////////////////////////////////////////////////////// |
12 | ||
13 | class AliEMCALGeoParams | |
14 | { | |
15 | public: | |
16 | ||
17 | // general geometry info | |
a520bcd0 | 18 | static const int fgkEMCALModules = 12; // number of modules for EMCAL |
19 | static const int fgkEMCALRows = 24; // number of rows per module for EMCAL | |
20 | static const int fgkEMCALCols = 48; // number of columns per module for EMCAL | |
bd3cd9c2 | 21 | |
a520bcd0 | 22 | static const int fgkEMCALLEDRefs = 24; // number of LEDs (reference/monitors) per module for EMCAL; one per StripModule |
23 | static const int fgkEMCALTempSensors = 8; // number Temperature sensors per module for EMCAL | |
6e9e8153 | 24 | |
25 | Int_t GetStripModule(Int_t iSM, Int_t iCol) const | |
26 | // Strip 0 is the one closest to the FEE crates; different for A (iColumn/2) and C sides | |
27 | { return ( (iSM%2==0) ? iCol/2 : AliEMCALGeoParams::fgkEMCALLEDRefs - 1 - iCol/2 ); } | |
bd3cd9c2 | 28 | |
29 | // also a few readout related variables: | |
a520bcd0 | 30 | static const int fgkLastAltroDDL = 43; // 0..23 (i.e. 24) for EMCAL; 24..43 (i.e. 20) allocated for DCAL |
31 | static const int fgkSampleMax = 1023; // highest possible sample value (10-bit = 0x3ff) | |
32 | static const int fgkOverflowCut = 950; // saturation starts around here; also exist as private constant in AliEMCALRawUtils, should probably be replaced | |
33 | static const int fgkSampleMin = 0; // lowest possible sample value | |
85149d34 | 34 | |
35 | // TRU numbers | |
a520bcd0 | 36 | static const int fgkEMCALTRUsPerSM = 3; // number of TRU's in a SuperModule |
37 | static const int fgkEMCAL2x2PerTRU = 96; // number of 2x2's in a TRU | |
38 | static const int fgkEMCALTRURows = 4; // number of TRU rows | |
39 | static const int fgkEMCALTRUCols = 24; // number of TRY cols | |
3d66fb5e | 40 | |
afae9650 | 41 | //STU numbers |
a520bcd0 | 42 | static const int fgkEMCALSTUCols = 48; // STU columns |
43 | static const int fgkEMCALSTURows = 64; // STU rows | |
bd3cd9c2 | 44 | |
45 | // RAW/AliCaloAltroMapping provides the correspondence information between | |
46 | // an electronics HWAddress (Branch<<1 | FEC<<7 | ALTRO<<4 | Channel) | |
47 | // for the RCUs and which tower (Column and Row) that corresponds to. | |
48 | // For the cases when one doesn't have a Raw stream to decode the HW address | |
49 | // into the other FEE indices, we provide the needed simple methods here | |
50 | // with arguments (within an RCU) | |
51 | Int_t GetHWAddress(Int_t iBranch, Int_t iFEC, Int_t iALTRO, Int_t iChannel) const | |
a520bcd0 | 52 | { return ( (iBranch<<11) | (iFEC<<7) | (iALTRO<<4) | iChannel ); } // |
bd3cd9c2 | 53 | // and for converting back to the individual indices |
a520bcd0 | 54 | Int_t GetBranch(Int_t iHW) const { return ( (iHW>>11) & 0x1 ) ; } // |
55 | Int_t GetFEC(Int_t iHW) const { return ( (iHW>>7) & 0xf ) ; } // | |
56 | Int_t GetAltro(Int_t iHW) const { return ( (iHW>>4) & 0x7 ) ; } // | |
57 | Int_t GetChannel(Int_t iHW) const { return ( iHW & 0xf ) ; } // | |
bd3cd9c2 | 58 | |
59 | // We can also encode a very similar CSP address | |
60 | Int_t GetCSPAddress(Int_t iBranch, Int_t iFEC, Int_t iCSP) const | |
61 | { return ( (iBranch<<11) | (iFEC<<7) | iCSP ); }; // | |
62 | // and for converting back to the individual indices | |
63 | // Branch and FEC methods would just be the same as above | |
a520bcd0 | 64 | Int_t GetCSPFromAddress(Int_t i) const { return ( i & 0x1f ) ; } // |
bd3cd9c2 | 65 | |
66 | /* // Below is some placeholder info that can later be added | |
e8c0d6bb | 67 | // in AliEMCALGeometry, together with the Get methods just above |
bd3cd9c2 | 68 | |
69 | // But which CSP (0..31) corresponds to which ALTRO and Channel is not | |
70 | // given anywhere (CSPs are used for APD biases etc). | |
71 | // So, we add a conversion method for that here also. | |
72 | // The order that the CSPs appear in the data is a bit funky so I include | |
73 | // a mapping array instead of some complicated function | |
74 | static const int fgkNCSP = 32; | |
75 | static const int fgkCspOrder[32] = | |
76 | { // just from ALTRO mapping of chips/channels to CSP | |
77 | 11, 27, 10, 26, 24, 8, 25, 9, // ALTRO 0 | |
78 | 3, 19, 2, 18, 16, 0, 17, 1, // ALTRO 2 | |
79 | 4, 20, 5, 21, 23, 7, 22, 6, // ALTRO 3 | |
80 | 12, 28, 13, 29, 31, 15, 30, 14 // ALTRO 4 | |
81 | }; | |
82 | // This method is not used for reconstruction or so, but just for cross- | |
83 | // checks with the DCS for the APD biases. | |
84 | int GetCSP(int iALTRO, int iChannel) const | |
85 | { | |
86 | int id = iChannel/2; // 2 channels per tower (low and high gain) | |
87 | int ichip = iALTRO; | |
88 | if (ichip>=2) { ichip--; } // there is no ALTRO 1; (0,2,3,4 -> 0,1,2,3) | |
89 | id += ichip*8; // 8 CSPs per ALTRO | |
90 | //return fgkCspOrder[id]; | |
91 | return id; | |
92 | } | |
93 | ||
94 | */ | |
95 | ||
96 | }; | |
97 | ||
98 | #endif |