]>
Commit | Line | Data |
---|---|---|
1 | #ifndef AliTPCmapper_H | |
2 | #define AliTPCmapper_H | |
3 | /* Copyright(c) 1998-2006, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | //////////////////////////////////////////////////////////////////////// | |
7 | // | |
8 | // AliTPCmapper class | |
9 | // Class for all mapping functions (hardware coordinates <-> pad coordinates) | |
10 | // Author: Christian Lippmann | |
11 | // | |
12 | ///////////////////////////////////////////////////////////////////////// | |
13 | ||
14 | #include <TObject.h> | |
15 | ||
16 | class AliTPCAltroMapping; | |
17 | ||
18 | class AliTPCmapper : public TObject{ | |
19 | ||
20 | public: | |
21 | ||
22 | AliTPCmapper(); | |
23 | AliTPCmapper(const char * dirname); | |
24 | virtual ~AliTPCmapper(); | |
25 | ||
26 | AliTPCmapper& operator = (const AliTPCmapper& mapper); | |
27 | AliTPCmapper(const AliTPCmapper& mapper); | |
28 | ||
29 | void Init(const char * dirname); | |
30 | // | |
31 | AliTPCAltroMapping **GetAltroMapping() { return fMapping; }; | |
32 | ||
33 | // ALTRO mapping functions | |
34 | Int_t GetPad(Int_t patch, Int_t hwAddress) const; | |
35 | Int_t GetPad(Int_t patch, Int_t branch, Int_t fec, Int_t chip, Int_t channel) const; | |
36 | Int_t GetPadRow(Int_t patch, Int_t hwAddress) const; | |
37 | Int_t GetPadRow(Int_t patch, Int_t branch, Int_t fec, Int_t chip, Int_t channel) const; | |
38 | ||
39 | // ALTRO mapping functions on roc level (padrow = 0 ... kNpadrowIROC, kNpadrowOROC) | |
40 | Int_t GetHWAddress(Int_t roc, Int_t padrow, Int_t pad) const; | |
41 | Int_t GetRcu(Int_t roc, Int_t padrow, Int_t pad) const; | |
42 | Int_t GetPatch(Int_t roc, Int_t padrow, Int_t pad) const; | |
43 | Int_t GetBranch(Int_t roc, Int_t padrow, Int_t pad) const; | |
44 | Int_t GetFEChw(Int_t roc, Int_t padrow, Int_t pad) const; | |
45 | Int_t GetFEC(Int_t roc, Int_t padrow, Int_t pad) const; | |
46 | Int_t GetChip(Int_t roc, Int_t padrow, Int_t pad) const; | |
47 | Int_t GetChannel(Int_t roc, Int_t padrow, Int_t pad) const; | |
48 | ||
49 | // ALTRO mapping functions on sector level (globalpadrow = 0 ... kNpadrow) | |
50 | Int_t GetGlobalPadRow(Int_t patch, Int_t hwAddress) const; | |
51 | Int_t GetGlobalPadRow(Int_t patch, Int_t branch, Int_t fec, Int_t chip, Int_t channel) const; | |
52 | Int_t GetHWAddressSector(Int_t globalpadrow, Int_t pad) const; | |
53 | Int_t GetRcuSector(Int_t globalpadrow, Int_t pad) const; | |
54 | Int_t GetPatchSector(Int_t globalpadrow, Int_t pad) const; | |
55 | Int_t GetBranchSector(Int_t globalpadrow, Int_t pad) const; | |
56 | Int_t GetFEChwSector(Int_t globalpadrow, Int_t pad) const; | |
57 | Int_t GetFECSector(Int_t globalpadrow, Int_t pad) const; | |
58 | Int_t GetChipSector(Int_t globalpadrow, Int_t pad) const; | |
59 | Int_t GetChannelSector(Int_t globalpadrow, Int_t pad) const; | |
60 | ||
61 | // Coding and decoding of hardware addresses | |
62 | Int_t CodeHWAddress(Int_t branch, Int_t fec, Int_t chip, Int_t channel) const; | |
63 | Int_t DecodedHWAddressBranch(Int_t hwAddress) const; | |
64 | Int_t DecodedHWAddressFECaddr(Int_t hwAddress) const; | |
65 | Int_t DecodedHWAddressChipaddr(Int_t hwAddress) const; | |
66 | Int_t DecodedHWAddressChanneladdr(Int_t hwAddress) const; | |
67 | ||
68 | // Pad Geometry on sector level (padrow = 0 ... kNpadrow) | |
69 | Int_t GetNpads(Int_t roc, Int_t padrow) const; | |
70 | Int_t GetNpads(Int_t globalpadrow) const; | |
71 | Int_t GetNpadrows(Int_t roc) const; | |
72 | /* | |
73 | Double_t GetPadXlocal(Int_t globalpadrow) const; | |
74 | Double_t GetPadYlocal(Int_t globalpadrow, Int_t pad) const; | |
75 | Double_t GetPadXglobal(Int_t globalpadrow, Int_t pad, Int_t sector) const; | |
76 | Double_t GetPadYglobal(Int_t globalpadrow, Int_t pad, Int_t sector) const; | |
77 | Double_t GetPadWidth(Int_t globalpadrow) const; | |
78 | Double_t GetPadLength(Int_t globalpadrow) const; | |
79 | */ | |
80 | ||
81 | // Conversion between hardware FEC numbering and official numbering | |
82 | Int_t HwToOffline(Int_t patch, Int_t branch, Int_t fec) const; | |
83 | Int_t OfflineToHwBranch(Int_t patch, Int_t fec) const; | |
84 | Int_t OfflineToHwFec(Int_t patch, Int_t fec) const; | |
85 | ||
86 | // More mapping functions | |
87 | Int_t GetEquipmentID(Int_t roc, Int_t padrow, Int_t pad) const; | |
88 | Int_t GetEquipmentIDsector(Int_t side, Int_t sector, Int_t globalpadrow, Int_t pad) const; | |
89 | Int_t GetEquipmentIDfromPatch(Int_t side, Int_t sector, Int_t patch) const; | |
90 | Int_t GetSectorFromRoc(Int_t roc) const; | |
91 | Int_t GetSideFromRoc(Int_t roc) const; | |
92 | Int_t GetRocFromPatch(Int_t side, Int_t sector, Int_t patch) const; | |
93 | Int_t GetRoc(Int_t side, Int_t sector, Int_t globalpadrow, Int_t pad) const; | |
94 | Int_t GetSideFromEquipmentID(Int_t equipmentID) const; | |
95 | Int_t GetSectorFromEquipmentID(Int_t equipmentID) const; | |
96 | Int_t GetRocFromEquipmentID(Int_t equipmentID) const; | |
97 | Int_t GetPatchFromEquipmentID(Int_t equipmentID) const; | |
98 | ||
99 | // Even more | |
100 | Int_t GetNfec(Int_t patch, Int_t branch) const; | |
101 | Int_t GetNfec(Int_t patch) const; | |
102 | Bool_t IsIROC(Int_t roc) const; | |
103 | Bool_t IsOROC(Int_t roc) const; | |
104 | ||
105 | Int_t GetTpcDdlOffset() const {return fTpcDdlOffset;} | |
106 | Int_t GetNumDdl() const {return fNside*fNsector*fNrcu; } | |
107 | ||
108 | private: | |
109 | ||
110 | Int_t fNside; // TPC has 2 sides | |
111 | Int_t fNsector; // TPC side has 18 sectors | |
112 | Int_t fNrcu; // Sector has 6 RCUs (patches) | |
113 | Int_t fNbranch; // RCU has 2 branches | |
114 | Int_t fNaltro; // FEC has 8 ALTROs | |
115 | Int_t fNchannel; // ALTRO has 16 channels | |
116 | Int_t fNpadrow; // Sector has 159 padrows | |
117 | Int_t fNpadrowIROC; // IROC has 63 padrows | |
118 | Int_t fNpadrowOROC; // OROC has 96 padrows | |
119 | ||
120 | Int_t fTpcDdlOffset; // DDL offset for TPC | |
121 | ||
122 | AliTPCAltroMapping *fMapping[6]; // The ALTRO mapping for each patch (rcu) | |
123 | ||
124 | ClassDef(AliTPCmapper,2) | |
125 | ||
126 | }; | |
127 | ||
128 | #endif |