]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONCluster.h
New cluster class to be used with new clustering scheme,
[u/mrichter/AliRoot.git] / MUON / AliMUONCluster.h
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