]>
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 | /// Return detection element id | |
53 | Int_t DetElemId() const { return fDetElemId; } | |
54 | ||
55 | /// Return half dimensions in x and y (cm) | |
56 | TVector2 Dimensions() const { return fDimensions; } | |
57 | ||
58 | /// Return half dimensions in x (cm) | |
59 | Double_t DX() const { return fDimensions.X(); } | |
60 | /// Return half dimensions in y (cm) | |
61 | Double_t DY() const { return fDimensions.Y(); } | |
62 | ||
63 | /// Return info whether this is a real pad or a virtual one | |
64 | Bool_t IsReal() const { return fIsReal; } | |
65 | ||
66 | /// Return info whether this pad is saturated or not | |
67 | Bool_t IsSaturated() const { return fIsSaturated; } | |
68 | ||
69 | /// Return true as the function Compare is implemented | |
70 | Bool_t IsSortable() const { return kTRUE; } | |
71 | ||
72 | virtual Int_t Compare(const TObject* obj) const; | |
73 | ||
74 | /// Return true if is used | |
75 | Bool_t IsUsed() const { return fClusterId >= 0; } | |
76 | ||
77 | /// Return x-index | |
78 | Int_t Ix() const { return fIx; } | |
79 | /// Return y-index | |
80 | Int_t Iy() const { return fIy; } | |
81 | ||
82 | virtual void Paint(Option_t* opt=""); | |
83 | ||
84 | /// Return positions in x and y (cm) | |
85 | TVector2 Position() const { return fPosition; } | |
86 | ||
87 | void Print(Option_t* opt = "") const; | |
88 | ||
89 | /// Detach this pad from a cluster | |
90 | void Release() { fClusterId = -1; } | |
91 | ||
92 | /// Set charge to value in backup charge | |
93 | void RevertCharge() { fCharge = fChargeBackup; } | |
94 | ||
95 | /// Set charge | |
96 | void SetCharge(Double_t charge) { fCharge = charge; } | |
97 | ||
98 | /// Set charge backup | |
99 | void SetChargeBackup(Double_t charge) { fChargeBackup = charge; } | |
100 | ||
101 | void SetCoord(Int_t ixy, Double_t Coord); | |
102 | ||
103 | /// Set status word | |
104 | void SetStatus(Int_t status) { fStatus = status; } | |
105 | ||
106 | /// \brief Set cluster id this pad belongs to | |
107 | /// -1 if not attached to a cluster | |
108 | void SetClusterId(Int_t id) { fClusterId = id; } | |
109 | ||
110 | /// Set info whether this pad is saturated or not | |
111 | void SetSaturated(Bool_t val) { fIsSaturated = val; } | |
112 | ||
113 | void SetSize(Int_t ixy, Double_t Size); | |
114 | ||
115 | /// Set info whether this is a real pad or a virtual one | |
116 | void SetReal(Bool_t val) { fIsReal = val; } | |
117 | ||
118 | void Shift(Int_t ixy, Double_t shift); | |
119 | ||
120 | Double_t Size(Int_t ixy) const; | |
121 | ||
122 | /// Return status word | |
123 | Int_t Status() const { return fStatus; } | |
124 | ||
125 | /// Return position in x (cm) | |
126 | Double_t X() const { return fPosition.X(); } | |
127 | /// Return position in y (cm) | |
128 | Double_t Y() const { return fPosition.Y(); } | |
129 | ||
130 | static AliMpArea Overlap(const AliMUONPad& d1, const AliMUONPad& d2); | |
131 | ||
132 | static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2, | |
133 | const TVector2& precision, | |
134 | AliMpArea& overlapArea); | |
135 | ||
136 | static Bool_t AreOverlapping(const AliMUONPad& d1, const AliMUONPad& d2, | |
137 | const TVector2& precision); | |
138 | ||
139 | static Bool_t AreNeighbours(const AliMUONPad& d1, const AliMUONPad& d2); | |
140 | ||
141 | ||
142 | private: | |
143 | void Init(Int_t detElemId, Int_t cathode, | |
144 | Int_t ix, Int_t iy, | |
145 | const TVector2& position, | |
146 | const TVector2& dimensions, | |
147 | Double_t charge); | |
148 | ||
149 | private: | |
150 | Bool_t fIsSaturated; ///< whether this pad is saturated or not | |
151 | Bool_t fIsReal; ///< whether this is a real pad or a virtual one | |
152 | Int_t fClusterId; ///< cluster id this pad belongs to (-1 if not attached to a cluster) | |
153 | Int_t fCathode; ///< cathode number | |
154 | Int_t fDetElemId; ///< detection element id | |
155 | Int_t fIx; ///< x-index | |
156 | Int_t fIy; ///< y-index | |
157 | Int_t fStatus; ///< status word | |
158 | TVector2 fDimensions; ///< half dimensions in x and y (cm) | |
159 | TVector2 fPosition; ///< positions in x and y (cm) | |
160 | Double_t fCharge; ///< pad charge | |
161 | Double_t fChargeBackup; ///< backup charge (usefull if clustering somehow plays with the charge, this one is the "original" one) | |
162 | ||
163 | ClassDef(AliMUONPad,2) // A full grown pad | |
164 | }; | |
165 | ||
166 | #endif |