15 minutes interval for calculation of drift correction
[u/mrichter/AliRoot.git] / TPC / AliTPCmapper.h
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