]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIMUONPAD_H | |
2 | #define ALIMUONPAD_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | // $Id$ | |
8 | ||
9 | /// \ingroup rec | |
10 | /// \class AliMUONPad | |
11 | /// \brief Combination of digit and mppad informations. | |
12 | /// | |
13 | // Author Laurent Aphecetche | |
14 | ||
15 | #ifndef ROOT_TObject | |
16 | # include "TObject.h" | |
17 | #endif | |
18 | #ifndef ROOT_TVector2 | |
19 | # include "TVector2.h" | |
20 | #endif | |
21 | #ifndef ALI_MP_AREA_H | |
22 | # include "AliMpArea.h" | |
23 | #endif | |
24 | ||
25 | class AliMUONPad : public TObject | |
26 | { | |
27 | public: | |
28 | AliMUONPad(); | |
29 | AliMUONPad(Double_t x, Double_t y, | |
30 | Double_t dx, Double_t dy, Double_t charge); | |
31 | AliMUONPad(const TVector2& position, const TVector2& dimensions, | |
32 | Double_t charge); | |
33 | AliMUONPad(Int_t detElemId, Int_t cathode, | |
34 | Int_t ix, Int_t iy, Double_t x, Double_t y, | |
35 | Double_t dx, Double_t dy, Double_t charge); | |
36 | virtual ~AliMUONPad(); | |
37 | ||
38 | /// \brief Backup charge | |
39 | /// Usefull if clustering somehow plays with the charge, this one is the "original" one | |
40 | void BackupCharge() { fChargeBackup = fCharge; } | |
41 | ||
42 | /// Return cathode number | |
43 | Int_t Cathode() const { return fCathode; } | |
44 | ||
45 | Double_t Coord(Int_t ixy) const; | |
46 | ||
47 | /// Return pad charge | |
48 | Double_t Charge() const { return fCharge; } | |
49 | /// Return backup charge | |
50 | Double_t ChargeBackup() const { return fChargeBackup; } | |
51 | ||
52 | virtual Int_t Compare(const TObject* obj) const; | |
53 | ||
54 | /// Return detection element id | |
55 | Int_t DetElemId() const { return fDetElemId; } | |
56 | ||
57 | /// \brief Return corresponding digit index | |
58 | /// To get back the digit from which this pad was constructed, if needed | |
59 | Int_t DigitIndex() const { return fDigitIndex; } | |
60 | ||
61 | /// Return half dimensions in x and y (cm) | |
62 | TVector2 Dimensions() const { return fDimensions; } | |
63 | ||
64 | /// Return half dimensions in x (cm) | |
65 | Double_t DX() const { return fDimensions.X(); } | |
66 | /// Return half dimensions in y (cm) | |
67 | Double_t DY() const { return fDimensions.Y(); } | |
68 | ||
69 | /// Return info whether this is a real pad or a virtual one | |
70 | Bool_t IsReal() const { return fIsReal; } | |
71 | ||
72 | /// Return info whether this pad is saturated or not | |
73 | Bool_t IsSaturated() const { return fIsSaturated; } | |
74 | ||
75 | /// Return true as the function Sort is implemented | |
76 | Bool_t IsSortable() const { return kTRUE; } | |
77 | ||
78 | /// Return true if is used | |
79 | Bool_t IsUsed() const { return fClusterId >= 0; } | |
80 | ||
81 | /// Return x-index | |
82 | Int_t Ix() const { return fIx; } | |
83 | /// Return y-index | |
84 | Int_t Iy() const { return fIy; } | |
85 | ||
86 | virtual void Paint(Option_t* opt=""); | |
87 | ||
88 | /// Return positions in x and y (cm) | |
89 | TVector2 Position() const { return fPosition; } | |
90 | ||
91 | void Print(Option_t* opt = "") const; | |
92 | ||
93 | /// Detach this pad from a cluster | |
94 | void Release() { fClusterId = -1; } | |
95 | ||
96 | /// Set charge to value in backup charge | |
97 | void RevertCharge() { fCharge = fChargeBackup; } | |
98 | ||
99 | /// Set charge | |
100 | void SetCharge(Double_t charge) { fCharge = charge; } | |
101 | ||
102 | /// Set charge backup | |
103 | void SetChargeBackup(Double_t charge) { fChargeBackup = charge; } | |
104 | ||
105 | void SetCoord(Int_t ixy, Double_t Coord); | |
106 | ||
107 | /// \brief Set corresponding digit index | |
108 | /// To get back the digit from which this pad was constructed, if needed | |
109 | void SetDigitIndex(Int_t digitIndex) { fDigitIndex = digitIndex; } | |
110 | ||
111 | /// Set status word | |
112 | void SetStatus(Int_t status) { fStatus = status; } | |
113 | ||
114 | /// \brief Set cluster id this pad belongs to | |
115 | /// -1 if not attached to a cluster | |
116 | void SetClusterId(Int_t id) { fClusterId = id; } | |
117 | ||
118 | /// Set info whether this pad is saturated or not | |
119 | void SetSaturated(Bool_t val) { fIsSaturated = val; } | |
120 | ||
121 | void SetSize(Int_t ixy, Double_t Size); | |
122 | ||
123 | /// Set info whether this is a real pad or a virtual one | |
124 | void SetReal(Bool_t val) { fIsReal = val; } | |
125 | ||
126 | void Shift(Int_t ixy, Double_t shift); | |
127 | ||
128 | Double_t Size(Int_t ixy) const; | |
129 | ||
130 | /// Return status word | |
131 | Int_t Status() const { return fStatus; } | |
132 | ||
133 | /// Return position in x (cm) | |
134 | Double_t X() const { return fPosition.X(); } | |
135 | /// Return position in y (cm) | |
136 | Double_t Y() const { return fPosition.Y(); } | |
137 | ||
138 | static AliMpArea Overlap(const AliMUONPad& d1, const AliMUONPad& d2); | |
139 | ||
140 | static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2, | |
141 | const TVector2& precision, | |
142 | AliMpArea& overlapArea); | |
143 | ||
144 | static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2, | |
145 | const TVector2& precision); | |
146 | ||
147 | static Bool_t AreNeighbours(const AliMUONPad& d1, const AliMUONPad& d2); | |
148 | ||
149 | ||
150 | private: | |
151 | void Init(Int_t detElemId, Int_t cathode, | |
152 | Int_t ix, Int_t iy, | |
153 | const TVector2& position, | |
154 | const TVector2& dimensions, | |
155 | Double_t charge); | |
156 | ||
157 | private: | |
158 | Bool_t fIsSaturated; ///< whether this pad is saturated or not | |
159 | Bool_t fIsReal; ///< whether this is a real pad or a virtual one | |
160 | Int_t fClusterId; ///< cluster id this pad belongs to (-1 if not attached to a cluster) | |
161 | Int_t fCathode; ///< cathode number | |
162 | Int_t fDetElemId; ///< detection element id | |
163 | Int_t fDigitIndex; ///< corresponding digit index (to get back the digit from which this pad was constructed, if needed) | |
164 | Int_t fIx; ///< x-index | |
165 | Int_t fIy; ///< y-index | |
166 | Int_t fStatus; ///< status word | |
167 | TVector2 fDimensions; ///< half dimensions in x and y (cm) | |
168 | TVector2 fPosition; ///< positions in x and y (cm) | |
169 | Double_t fCharge; ///< pad charge | |
170 | Double_t fChargeBackup; ///< backup charge (usefull if clustering somehow plays with the charge, this one is the "original" one) | |
171 | ||
172 | ClassDef(AliMUONPad,1) // A full grown pad | |
173 | }; | |
174 | ||
175 | #endif |