]>
Commit | Line | Data |
---|---|---|
4b6f2cee | 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); | |
71a2d3aa | 36 | virtual ~AliMUONPad(); |
4b6f2cee | 37 | |
71a2d3aa | 38 | /// \brief Backup charge |
39 | /// Usefull if clustering somehow plays with the charge, this one is the "original" one | |
4b6f2cee | 40 | void BackupCharge() { fChargeBackup = fCharge; } |
41 | ||
71a2d3aa | 42 | /// Return cathode number |
4b6f2cee | 43 | Int_t Cathode() const { return fCathode; } |
44 | ||
45 | Double_t Coord(Int_t ixy) const; | |
46 | ||
71a2d3aa | 47 | /// Return pad charge |
4b6f2cee | 48 | Double_t Charge() const { return fCharge; } |
71a2d3aa | 49 | /// Return backup charge |
4b6f2cee | 50 | Double_t ChargeBackup() const { return fChargeBackup; } |
51 | ||
71a2d3aa | 52 | /// Return detection element id |
4b6f2cee | 53 | Int_t DetElemId() const { return fDetElemId; } |
54 | ||
71a2d3aa | 55 | /// Return half dimensions in x and y (cm) |
4b6f2cee | 56 | TVector2 Dimensions() const { return fDimensions; } |
57 | ||
71a2d3aa | 58 | /// Return half dimensions in x (cm) |
4b6f2cee | 59 | Double_t DX() const { return fDimensions.X(); } |
71a2d3aa | 60 | /// Return half dimensions in y (cm) |
4b6f2cee | 61 | Double_t DY() const { return fDimensions.Y(); } |
62 | ||
71a2d3aa | 63 | /// Return info whether this is a real pad or a virtual one |
4b6f2cee | 64 | Bool_t IsReal() const { return fIsReal; } |
65 | ||
71a2d3aa | 66 | /// Return info whether this pad is saturated or not |
4b6f2cee | 67 | Bool_t IsSaturated() const { return fIsSaturated; } |
68 | ||
8f473fdb | 69 | /// Return true as the function Compare is implemented |
4b6f2cee | 70 | Bool_t IsSortable() const { return kTRUE; } |
71 | ||
8f473fdb | 72 | virtual Int_t Compare(const TObject* obj) const; |
73 | ||
71a2d3aa | 74 | /// Return true if is used |
4b6f2cee | 75 | Bool_t IsUsed() const { return fClusterId >= 0; } |
76 | ||
71a2d3aa | 77 | /// Return x-index |
4b6f2cee | 78 | Int_t Ix() const { return fIx; } |
71a2d3aa | 79 | /// Return y-index |
4b6f2cee | 80 | Int_t Iy() const { return fIy; } |
81 | ||
82 | virtual void Paint(Option_t* opt=""); | |
83 | ||
71a2d3aa | 84 | /// Return positions in x and y (cm) |
4b6f2cee | 85 | TVector2 Position() const { return fPosition; } |
86 | ||
87 | void Print(Option_t* opt = "") const; | |
88 | ||
71a2d3aa | 89 | /// Detach this pad from a cluster |
4b6f2cee | 90 | void Release() { fClusterId = -1; } |
91 | ||
71a2d3aa | 92 | /// Set charge to value in backup charge |
4b6f2cee | 93 | void RevertCharge() { fCharge = fChargeBackup; } |
94 | ||
71a2d3aa | 95 | /// Set charge |
4b6f2cee | 96 | void SetCharge(Double_t charge) { fCharge = charge; } |
97 | ||
71a2d3aa | 98 | /// Set charge backup |
4b6f2cee | 99 | void SetChargeBackup(Double_t charge) { fChargeBackup = charge; } |
100 | ||
101 | void SetCoord(Int_t ixy, Double_t Coord); | |
102 | ||
71a2d3aa | 103 | /// Set status word |
4b6f2cee | 104 | void SetStatus(Int_t status) { fStatus = status; } |
105 | ||
71a2d3aa | 106 | /// \brief Set cluster id this pad belongs to |
107 | /// -1 if not attached to a cluster | |
4b6f2cee | 108 | void SetClusterId(Int_t id) { fClusterId = id; } |
109 | ||
71a2d3aa | 110 | /// Set info whether this pad is saturated or not |
4b6f2cee | 111 | void SetSaturated(Bool_t val) { fIsSaturated = val; } |
112 | ||
113 | void SetSize(Int_t ixy, Double_t Size); | |
114 | ||
71a2d3aa | 115 | /// Set info whether this is a real pad or a virtual one |
4b6f2cee | 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 | ||
71a2d3aa | 122 | /// Return status word |
4b6f2cee | 123 | Int_t Status() const { return fStatus; } |
124 | ||
71a2d3aa | 125 | /// Return position in x (cm) |
4b6f2cee | 126 | Double_t X() const { return fPosition.X(); } |
71a2d3aa | 127 | /// Return position in y (cm) |
4b6f2cee | 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: | |
71a2d3aa | 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 | |
71a2d3aa | 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) | |
4b6f2cee | 162 | |
2060b217 | 163 | ClassDef(AliMUONPad,2) // A full grown pad |
4b6f2cee | 164 | }; |
165 | ||
166 | #endif |