]>
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 | |
21 | #ifndef ALI_MP_AREA_H | |
22 | # include "AliMpArea.h" | |
23 | #endif | |
24 | #ifndef ALI_MP_DIRECTION_H | |
25 | # include "AliMpDirection.h" | |
26 | #endif | |
27 | #ifndef ALI_MP_INT_PAIR_H | |
28 | # include "AliMpIntPair.h" | |
29 | #endif | |
30 | ||
31 | class AliMUONPad; | |
32 | class TObjArray; | |
33 | ||
34 | class AliMUONCluster : public TObject | |
35 | { | |
36 | public: | |
37 | AliMUONCluster(); | |
38 | AliMUONCluster(const AliMUONCluster& rhs); | |
39 | AliMUONCluster& operator=(const AliMUONCluster& rhs); | |
40 | ||
41 | virtual ~AliMUONCluster(); | |
42 | ||
43 | void AddPad(const AliMUONPad& pad); | |
44 | ||
45 | /// Area that contains all the pads. | |
46 | AliMpArea Area() const; | |
47 | ||
48 | Float_t Charge() const; | |
49 | Float_t Charge(Int_t cathode) const; | |
50 | ||
51 | /// Return the cathode's charges asymmetry | |
52 | Float_t ChargeAsymmetry() const; | |
53 | ||
54 | Float_t Chi2() const { return fChi2; } | |
55 | ||
56 | virtual void Copy(TObject& obj) const; | |
57 | ||
58 | Bool_t HasPosition() const { return fHasPosition; } | |
59 | ||
60 | /// Whether we have at least one saturated pad in a given cathode | |
61 | Bool_t IsSaturated(Int_t cathode) const { return fIsSaturated[cathode]; } | |
62 | ||
63 | /// Whether we have one saturated pad on *each* cathode | |
64 | Bool_t IsSaturated() const { return IsSaturated(0) && IsSaturated(1); } | |
65 | ||
66 | Int_t MaxChargeCathode() const { return Charge(0) > Charge(1) ? 0:1; } | |
67 | ||
68 | Int_t MaxRawChargeCathode() const { return RawCharge(0) > RawCharge(1) ? 0:1; } | |
69 | ||
70 | /// Return the smallest pad dimensions for a given cathode | |
71 | TVector2 MinPadDimensions(Int_t cathode, Int_t statusMask, Bool_t matchMask) const; | |
72 | ||
73 | /// Return the smallest pad dimensions | |
74 | TVector2 MinPadDimensions( Int_t statusMask, Bool_t matchMask) const; | |
75 | ||
76 | Int_t Multiplicity() const; | |
77 | Int_t Multiplicity(Int_t cathode) const; | |
78 | ||
79 | /// Compute number of pads in X and Y direction for a given cathode. | |
80 | AliMpIntPair NofPads(Int_t cathode, Int_t statusMask, Bool_t matchMask) const; | |
81 | ||
82 | /// Number of pads in (X,Y) direction, whatever the cathode. | |
83 | AliMpIntPair NofPads(Int_t statusMask, Bool_t matchMask=kTRUE) const; | |
84 | ||
85 | AliMUONPad* Pad(Int_t index) const; | |
86 | ||
87 | virtual void Paint(Option_t* opt=""); | |
88 | ||
89 | TVector2 Position() const { return fPosition; } | |
90 | TVector2 PositionError() const { return fPositionError; } | |
91 | ||
92 | virtual void Print(Option_t* opt="") const; | |
93 | ||
94 | /// By default, return the average of both cathode RawCharges. | |
95 | Float_t RawCharge() const; | |
96 | ||
97 | /// Returns the RawCharge on the given cathode. | |
98 | Float_t RawCharge(Int_t cathode) const; | |
99 | ||
100 | /// Return the cathode's raw charges asymmetry | |
101 | Float_t RawChargeAsymmetry() const; | |
102 | ||
103 | void RemovePad(AliMUONPad* pad); | |
104 | ||
105 | void SetCharge(Float_t chargeCath0, Float_t chargeCath1) | |
106 | { fHasCharge = kTRUE; fCharge[0]=chargeCath0; fCharge[1]=chargeCath1; } | |
107 | ||
108 | void SetChi2(Float_t chi2) { fChi2 = chi2; } | |
109 | ||
110 | void SetPosition(const TVector2& pos, const TVector2& errorOnPos) | |
111 | { fHasPosition = kTRUE; fPosition = pos; fPositionError = errorOnPos; } | |
112 | ||
113 | void Sort(); | |
114 | ||
115 | private: | |
116 | TObjArray* fPads; ///< AliMUONPad(s) composing this cluster | |
117 | Bool_t fHasPosition; ///< false for pre-cluster (i.e. not yet computed) | |
118 | TVector2 fPosition; ///< (x,y) of that cluster (only valid if fHasPosition is kTRUE) | |
119 | TVector2 fPositionError; ///< errors on (x,y) | |
120 | Int_t fMultiplicity[2]; ///< number of pads in each cathode | |
121 | Float_t fRawCharge[2]; ///< cathode RawCharges | |
122 | Bool_t fHasCharge; ///< false if SetCharge has not been called | |
123 | Float_t fCharge[2]; ///< cathode (re)computed charges | |
124 | Float_t fChi2; ///< chi2 of the RawCharge fit (if any) | |
125 | Bool_t fIsSaturated[2]; ///< saturation status of cathodes | |
126 | Bool_t fIsSorted; ///< whether pads are sorted or not | |
127 | ClassDef(AliMUONCluster,1) // A cluster of AliMUONPad | |
128 | }; | |
129 | ||
130 | #endif |