]>
Commit | Line | Data |
---|---|---|
99ccb7f7 | 1 | #ifndef ALIMUONCLUSTER_H |
2 | #define ALIMUONCLUSTER_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 AliMUONCluster | |
11 | /// \brief A group of adjacent pads | |
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 | |
00de388f | 21 | #ifndef ROOT_TString |
22 | # include "TString.h" | |
23 | #endif | |
99ccb7f7 | 24 | #ifndef ALI_MP_AREA_H |
25 | # include "AliMpArea.h" | |
26 | #endif | |
27 | #ifndef ALI_MP_DIRECTION_H | |
28 | # include "AliMpDirection.h" | |
29 | #endif | |
168e9c4d | 30 | #ifndef ALI_MP_ENCODE_PAIR_H |
31 | # include "AliMpEncodePair.h" | |
99ccb7f7 | 32 | #endif |
33 | ||
e0de1dd9 | 34 | #ifndef ROOT_TObjArray |
35 | # include "TObjArray.h" | |
36 | #endif | |
37 | ||
99ccb7f7 | 38 | class AliMUONPad; |
99ccb7f7 | 39 | |
40 | class AliMUONCluster : public TObject | |
41 | { | |
42 | public: | |
43 | AliMUONCluster(); | |
44 | AliMUONCluster(const AliMUONCluster& rhs); | |
45 | AliMUONCluster& operator=(const AliMUONCluster& rhs); | |
46 | ||
47 | virtual ~AliMUONCluster(); | |
00de388f | 48 | |
49 | Bool_t Contains(const AliMUONPad& pad) const; | |
50 | ||
51 | TString AsString() const; | |
52 | ||
53 | static Bool_t AreOverlapping(const AliMUONCluster& c1, const AliMUONCluster& c2); | |
54 | ||
55 | AliMUONPad* AddPad(const AliMUONPad& pad); | |
99ccb7f7 | 56 | |
00de388f | 57 | /// Area that contains all the pads (whatever the cathode) |
99ccb7f7 | 58 | AliMpArea Area() const; |
00de388f | 59 | |
60 | /// Area that contains all the pads of a given cathode | |
61 | AliMpArea Area(Int_t cathode) const; | |
62 | ||
99ccb7f7 | 63 | Float_t Charge() const; |
64 | Float_t Charge(Int_t cathode) const; | |
65 | ||
66 | /// Return the cathode's charges asymmetry | |
67 | Float_t ChargeAsymmetry() const; | |
68 | ||
71a2d3aa | 69 | /// Return chi2 of the RawCharge fit (if any) |
99ccb7f7 | 70 | Float_t Chi2() const { return fChi2; } |
71 | ||
72 | virtual void Copy(TObject& obj) const; | |
73 | ||
71a2d3aa | 74 | /// Return false for pre-cluster |
99ccb7f7 | 75 | Bool_t HasPosition() const { return fHasPosition; } |
76 | ||
77 | /// Whether we have at least one saturated pad in a given cathode | |
78 | Bool_t IsSaturated(Int_t cathode) const { return fIsSaturated[cathode]; } | |
79 | ||
80 | /// Whether we have one saturated pad on *each* cathode | |
81 | Bool_t IsSaturated() const { return IsSaturated(0) && IsSaturated(1); } | |
82 | ||
71a2d3aa | 83 | /// Return the max charge on the chathod |
99ccb7f7 | 84 | Int_t MaxChargeCathode() const { return Charge(0) > Charge(1) ? 0:1; } |
85 | ||
71a2d3aa | 86 | /// Return the max raw charge on the chathod |
99ccb7f7 | 87 | Int_t MaxRawChargeCathode() const { return RawCharge(0) > RawCharge(1) ? 0:1; } |
88 | ||
00de388f | 89 | /// Return the biggest pad dimensions for a given cathode |
90 | TVector2 MaxPadDimensions(Int_t cathode, Int_t statusMask, Bool_t matchMask) const; | |
91 | ||
92 | /// Return the biggest pad dimensions | |
93 | TVector2 MaxPadDimensions(Int_t statusMask, Bool_t matchMask) const; | |
94 | ||
99ccb7f7 | 95 | /// Return the smallest pad dimensions for a given cathode |
96 | TVector2 MinPadDimensions(Int_t cathode, Int_t statusMask, Bool_t matchMask) const; | |
97 | ||
98 | /// Return the smallest pad dimensions | |
00de388f | 99 | TVector2 MinPadDimensions(Int_t statusMask, Bool_t matchMask) const; |
99ccb7f7 | 100 | |
101 | Int_t Multiplicity() const; | |
102 | Int_t Multiplicity(Int_t cathode) const; | |
103 | ||
104 | /// Compute number of pads in X and Y direction for a given cathode. | |
168e9c4d | 105 | Long_t NofPads(Int_t cathode, Int_t statusMask, Bool_t matchMask) const; |
99ccb7f7 | 106 | |
107 | /// Number of pads in (X,Y) direction, whatever the cathode. | |
168e9c4d | 108 | Long_t NofPads(Int_t statusMask, Bool_t matchMask=kTRUE) const; |
99ccb7f7 | 109 | |
00de388f | 110 | /// Return true as the function Compare is implemented |
111 | Bool_t IsSortable() const { return kTRUE; } | |
112 | ||
113 | // Bool_t IsEqual(const TObject* obj) const; | |
114 | ||
115 | virtual Int_t Compare(const TObject* obj) const; | |
116 | ||
99ccb7f7 | 117 | AliMUONPad* Pad(Int_t index) const; |
118 | ||
119 | virtual void Paint(Option_t* opt=""); | |
120 | ||
71a2d3aa | 121 | /// Return (x,y) of that cluster |
99ccb7f7 | 122 | TVector2 Position() const { return fPosition; } |
71a2d3aa | 123 | /// Return errors on (x,y) |
99ccb7f7 | 124 | TVector2 PositionError() const { return fPositionError; } |
125 | ||
126 | virtual void Print(Option_t* opt="") const; | |
127 | ||
128 | /// By default, return the average of both cathode RawCharges. | |
129 | Float_t RawCharge() const; | |
130 | ||
131 | /// Returns the RawCharge on the given cathode. | |
132 | Float_t RawCharge(Int_t cathode) const; | |
133 | ||
134 | /// Return the cathode's raw charges asymmetry | |
135 | Float_t RawChargeAsymmetry() const; | |
136 | ||
137 | void RemovePad(AliMUONPad* pad); | |
71a2d3aa | 138 | |
139 | /// Set cathode (re)computed charges | |
99ccb7f7 | 140 | void SetCharge(Float_t chargeCath0, Float_t chargeCath1) |
141 | { fHasCharge = kTRUE; fCharge[0]=chargeCath0; fCharge[1]=chargeCath1; } | |
71a2d3aa | 142 | |
143 | /// Set chi2 of the RawCharge fit | |
99ccb7f7 | 144 | void SetChi2(Float_t chi2) { fChi2 = chi2; } |
145 | ||
71a2d3aa | 146 | /// Set (x,y) of that cluster and errors |
99ccb7f7 | 147 | void SetPosition(const TVector2& pos, const TVector2& errorOnPos) |
148 | { fHasPosition = kTRUE; fPosition = pos; fPositionError = errorOnPos; } | |
149 | ||
00de388f | 150 | Int_t Cathode() const; |
151 | ||
152 | void AddCluster(const AliMUONCluster& cluster); | |
153 | ||
154 | void Clear(Option_t* opt=""); | |
155 | ||
2103dc37 | 156 | Bool_t IsMonoCathode() const; |
157 | ||
158 | //private: | |
00de388f | 159 | void DumpMe() const; |
99ccb7f7 | 160 | |
161 | private: | |
e0de1dd9 | 162 | TObjArray fPads; ///< AliMUONPad(s) composing this cluster |
99ccb7f7 | 163 | Bool_t fHasPosition; ///< false for pre-cluster (i.e. not yet computed) |
164 | TVector2 fPosition; ///< (x,y) of that cluster (only valid if fHasPosition is kTRUE) | |
165 | TVector2 fPositionError; ///< errors on (x,y) | |
166 | Int_t fMultiplicity[2]; ///< number of pads in each cathode | |
167 | Float_t fRawCharge[2]; ///< cathode RawCharges | |
168 | Bool_t fHasCharge; ///< false if SetCharge has not been called | |
169 | Float_t fCharge[2]; ///< cathode (re)computed charges | |
170 | Float_t fChi2; ///< chi2 of the RawCharge fit (if any) | |
171 | Bool_t fIsSaturated[2]; ///< saturation status of cathodes | |
00de388f | 172 | |
e0de1dd9 | 173 | ClassDef(AliMUONCluster,3) // A cluster of AliMUONPad |
99ccb7f7 | 174 | }; |
175 | ||
176 | #endif |