]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONCluster.h
adapted for reading Digits or RecPoints (Philippe)
[u/mrichter/AliRoot.git] / MUON / AliMUONCluster.h
CommitLineData
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
31class AliMUONPad;
32class TObjArray;
33
34class AliMUONCluster : public TObject
35{
36public:
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
115private:
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