Line data Source code
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 29850 : 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 0 : void BackupCharge() { fChargeBackup = fCharge; }
41 :
42 : /// Return cathode number
43 81034 : Int_t Cathode() const { return fCathode; }
44 :
45 : Double_t Coord(Int_t ixy) const;
46 :
47 : /// Return pad charge
48 9112340 : Double_t Charge() const { return fCharge; }
49 : /// Return backup charge
50 0 : Double_t ChargeBackup() const { return fChargeBackup; }
51 :
52 : /// Return detection element id
53 20626 : Int_t DetElemId() const { return fDetElemId; }
54 :
55 : /// Return half dimensions in x and y (cm)
56 197920 : TVector2 Dimensions() const { return fDimensions; }
57 :
58 : /// Return half dimensions in x (cm)
59 50214 : Double_t DX() const { return fDimensions.X(); }
60 : /// Return half dimensions in y (cm)
61 56334 : Double_t DY() const { return fDimensions.Y(); }
62 :
63 : /// Return info whether this is a real pad or a virtual one
64 30368 : Bool_t IsReal() const { return fIsReal; }
65 :
66 : /// Return info whether this pad is saturated or not
67 859836 : Bool_t IsSaturated() const { return fIsSaturated; }
68 :
69 : /// Return true as the function Compare is implemented
70 3738 : Bool_t IsSortable() const { return kTRUE; }
71 :
72 : virtual Int_t Compare(const TObject* obj) const;
73 :
74 : /// Return true if is used
75 2648 : Bool_t IsUsed() const { return fClusterId >= 0; }
76 :
77 : /// Return x-index
78 0 : Int_t Ix() const { return fIx; }
79 : /// Return y-index
80 0 : Int_t Iy() const { return fIy; }
81 :
82 : virtual void Paint(Option_t* opt="");
83 :
84 : /// Return positions in x and y (cm)
85 104256 : TVector2 Position() const { return fPosition; }
86 :
87 : void Print(Option_t* opt = "") const;
88 :
89 : /// Detach this pad from a cluster
90 0 : void Release() { fClusterId = -1; }
91 :
92 : /// Set charge to value in backup charge
93 80198 : void RevertCharge() { fCharge = fChargeBackup; }
94 :
95 : /// Set charge
96 3394 : void SetCharge(Double_t charge) { fCharge = charge; }
97 :
98 : /// Set charge backup
99 160216 : void SetChargeBackup(Double_t charge) { fChargeBackup = charge; }
100 :
101 : void SetCoord(Int_t ixy, Double_t Coord);
102 :
103 : /// Set status word
104 5356 : 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 2860 : void SetClusterId(Int_t id) { fClusterId = id; }
109 :
110 : /// Set info whether this pad is saturated or not
111 0 : 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 106 : 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 1010516 : Int_t Status() const { return fStatus; }
124 :
125 : /// Return position in x (cm)
126 134634 : Double_t X() const { return fPosition.X(); }
127 : /// Return position in y (cm)
128 134964 : 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 18 : ClassDef(AliMUONPad,2) // A full grown pad
164 : };
165 :
166 : #endif
|