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