New classes for residual studies (Philippe P.
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterInfo.h
1 #ifndef ALIMUONCLUSTERINFO_H
2 #define ALIMUONCLUSTERINFO_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 evaluation 
10 /// \class AliMUONClusterInfo
11 /// \brief Class to summarize ESD data at cluster
12 //  Author Philippe Pillot, Subatech
13
14
15 #include <TObject.h>
16 #include <TClonesArray.h>
17 #include <AliMUONPadInfo.h>
18
19 class AliMUONClusterInfo : public TObject {
20 public:
21   AliMUONClusterInfo(); // Constructor
22   virtual ~AliMUONClusterInfo(); //< Destructor
23   AliMUONClusterInfo(const AliMUONClusterInfo& cluster);
24   AliMUONClusterInfo& operator=(const AliMUONClusterInfo& cluster);
25   
26   virtual void Clear(Option_t* opt = "");
27   
28   void     Print(Option_t * option = "") const;  
29   
30   
31   // ------ general info ------
32   /// set event number
33   void     SetEventId(Int_t eventId) {fEventId = eventId;}
34   /// return event ID
35   Int_t    GetEventId() const {return fEventId;}
36   
37   /// Set cluster/track Z-position (cm)
38   void     SetZ(Double_t z) {fZ = z;}
39   /// Return cluster/track Z-position (cm)
40   Double_t GetZ() const {return fZ;}
41   
42   
43   // ------ cluster info ------
44   /// set cluster ID
45   void     SetClusterId(UInt_t clusterId) {fClusterId = clusterId; SetUniqueID(clusterId);}
46   /// return cluster ID
47   UInt_t   GetClusterId() const    {return fClusterId;}
48   /// Return chamber ID (0..), part of the cluster ID
49   Int_t    GetChamberId() const    {return (fClusterId & 0xF0000000) >> 28;}
50   /// Return detection element ID, part of the cluster ID
51   Int_t    GetDetElemId() const    {return (fClusterId & 0x0FFE0000) >> 17;}
52   /// Return the index of this cluster (0..), part of the cluster ID
53   Int_t    GetClusterIndex() const {return (fClusterId & 0x0001FFFF);}
54   
55   /// Set cluster coordinates (cm)
56   void     SetClusterXY(Double_t x, Double_t y) {fClusterX = x; fClusterY = y;}
57   /// Return cluster X-position (cm)
58   Double_t GetClusterX() const {return fClusterX;}
59   /// Return cluster Y-position (cm)
60   Double_t GetClusterY() const {return fClusterY;}
61   
62   /// Set cluster resolution (cm)
63   void     SetClusterXYErr(Double_t xErr, Double_t yErr) {fClusterXErr = xErr; fClusterYErr = yErr;}
64   /// Return cluster X-resolution (cm)
65   Double_t GetClusterXErr() const {return fClusterXErr;}
66   /// Return cluster Y-resolution (cm)
67   Double_t GetClusterYErr() const {return fClusterYErr;}
68   
69   /// set cluster Chi2
70   void     SetClusterChi2(Double_t clusterChi2) {fClusterChi2 = clusterChi2;}
71   /// return cluster Chi2
72   Double_t GetClusterChi2() const {return fClusterChi2;}
73
74   /// Set the total cluster charge
75   void     SetClusterCharge(Double_t charge) {fClusterCharge = charge;}
76   /// Return the total cluster charge
77   Double_t GetClusterCharge() const {return fClusterCharge;}
78   
79   
80   // ------ track info ------
81   /// set track ID
82   void     SetTrackId(UInt_t trackId) {fTrackId = trackId;}
83   /// return track ID
84   UInt_t   GetTrackId() const {return fTrackId;}
85   
86   /// Set track coordinates (cm)
87   void     SetTrackXY(Double_t x, Double_t y) {fTrackX = x; fTrackY = y;}
88   /// Return track X-position (cm)
89   Double_t GetTrackX() const {return fTrackX;}
90   /// Return track Y-position (cm)
91   Double_t GetTrackY() const {return fTrackY;}
92   /// Set track angles (radian)
93   void     SetTrackThetaXY(Double_t thetaX, Double_t thetaY) {fTrackThetaX = thetaX; fTrackThetaY = thetaY;}
94   /// Return track ThetaX angle (radian)
95   Double_t GetTrackThetaX() const {return fTrackThetaX;}
96   /// Return track ThetaY angle (radian)
97   Double_t GetTrackThetaY() const {return fTrackThetaY;}
98   /// Set track momentum (MeV/c)
99   void     SetTrackP(Double_t p) {fTrackP = p;}
100   /// Return track momentum (MeV/c)
101   Double_t GetTrackP() const {return fTrackP;}
102   
103   /// Set track resolution (cm)
104   void     SetTrackXYErr(Double_t xErr, Double_t yErr) {fTrackXErr = xErr; fTrackYErr = yErr;}
105   /// Return track X-resolution (cm)
106   Double_t GetTrackXErr() const {return fTrackXErr;}
107   /// Return track Y-resolution (cm)
108   Double_t GetTrackYErr() const {return fTrackYErr;}
109
110   /// set track Chi2
111   void     SetTrackChi2(Double_t trackChi2) {fTrackChi2 = trackChi2;}
112   /// return track Chi2
113   Double_t GetTrackChi2() const {return fTrackChi2;}
114   
115   /// Set the muon charge
116   void     SetTrackCharge(Short_t charge) {fTrackCharge = charge;}
117   /// Return the muon charge
118   Short_t  GetTrackCharge() const {return fTrackCharge;}
119   
120   
121   // ------ pad info ------
122   /// return the number of pads attached to the cluster
123   Int_t    GetNPads() const {return fPads->GetEntriesFast();}
124   /// return the array of pads attached to the cluster
125   TClonesArray& GetPads() const {return *fPads;}
126   /// attach a pad to the cluster
127   void     AddPad(const AliMUONPadInfo &pad) {new ((*fPads)[fNPads++]) AliMUONPadInfo(pad);}
128
129     
130 protected:
131   
132   // general info
133   Int_t      fEventId;    ///< event number
134   Double32_t fZ;          ///< track/cluster Z position
135   
136   // cluster info
137   UInt_t     fClusterId;     ///< cluster ID
138   Double32_t fClusterX;      ///< cluster X position
139   Double32_t fClusterY;      ///< cluster Y position
140   Double32_t fClusterXErr;   ///< cluster X resolution
141   Double32_t fClusterYErr;   ///< cluster Y resolution
142   Double32_t fClusterChi2;   ///< cluster chi2
143   Double32_t fClusterCharge; ///< cluster charge
144   
145   // track info
146   UInt_t     fTrackId;     ///< track ID
147   Double32_t fTrackX;      ///< track X position
148   Double32_t fTrackY;      ///< track Y position
149   Double32_t fTrackThetaX; ///< track Theta_X angle
150   Double32_t fTrackThetaY; ///< track Theta_Y angle
151   Double32_t fTrackP;      ///< track momentum
152   Double32_t fTrackXErr;   ///< track X resolution
153   Double32_t fTrackYErr;   ///< track Y resolution
154   Double32_t fTrackChi2;   ///< track normalized chi2
155   Short_t    fTrackCharge; ///< track charge  
156   
157   Int_t         fNPads; ///< nPads  
158   TClonesArray* fPads;  ///< Array of pads attached to the cluster
159     
160   ClassDef(AliMUONClusterInfo, 2)
161 };
162
163 #endif