Add new global configuration for prod shuttle.
[u/mrichter/AliRoot.git] / MFT / AliMFTCluster.h
1 #ifndef AliMFTCluster_H
2 #define AliMFTCluster_H 
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //====================================================================================================================================================
8 //
9 //      Class for the description of the clusters of the ALICE Muon Forward Tracker
10 //
11 //      Contact author: antonio.uras@cern.ch
12 //
13 //====================================================================================================================================================
14
15 #include "AliMUONRawCluster.h"
16 #include "AliMUONVCluster.h"
17 #include "AliMFTDigit.h"
18 #include "TClonesArray.h"
19 #include "TObject.h"
20 #include "AliMFTConstants.h"
21
22 //====================================================================================================================================================
23
24 class AliMFTCluster : public TObject {
25
26 public:
27
28   AliMFTCluster();
29   AliMFTCluster(const AliMFTCluster&);
30   AliMFTCluster& operator=(const AliMFTCluster&);
31   virtual ~AliMFTCluster() { if(fDigitsInCluster){fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster=NULL;}}
32   
33   virtual void Clear(const Option_t* /*opt*/) { if(fDigitsInCluster) {fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = 0x0;} }
34   
35   void SetXYZ(Double_t x, Double_t y, Double_t z) { fX=x; fY=y; fZ=z; }
36   
37   void SetX(Double_t x) { if(fIsClusterEditable) fX = x; }
38   void SetY(Double_t y) { if(fIsClusterEditable) fY = y; }
39   void SetZ(Double_t z) { if(fIsClusterEditable) fZ = z; }
40
41   Double_t GetX() const { return fX; }
42   Double_t GetY() const { return fY; }
43   Double_t GetZ() const { return fZ; }
44   
45   void SetErrXYZ(Double_t errX, Double_t errY, Double_t errZ) { if(fIsClusterEditable) { fErrX = errX; fErrY = errY; fErrZ = errZ; } }
46        
47   void SetErrX(Double_t errX) { if(fIsClusterEditable) fErrX = errX; }
48   void SetErrY(Double_t errY) { if(fIsClusterEditable) fErrY = errY; }
49   void SetErrZ(Double_t errZ) { if(fIsClusterEditable) fErrZ = errZ; }
50
51   Double_t GetErrX()  const { return fErrX; }
52   Double_t GetErrY()  const { return fErrY; }
53   Double_t GetErrZ()  const { return fErrZ; }
54   Double_t GetErrX2() const { return fErrX*fErrX; }
55   Double_t GetErrY2() const { return fErrY*fErrY; }
56   Double_t GetErrZ2() const { return fErrZ*fErrZ; }
57   
58   void     SetNElectrons(Double_t nElectrons) { if(fIsClusterEditable) fNElectrons = nElectrons; }
59   Double_t GetNElectrons() const { return fNElectrons; }
60   
61   void  AddMCLabel(Int_t label);
62   Int_t GetNMCTracks() const { return fNMCTracks; }
63   Int_t GetMCLabel(Int_t track) const { if (track<fNMCTracks && track>=0) return fMCLabel[track]; else return -1; }
64   void  SetMCLabel(Int_t track, Int_t labelMC) { if (track<fNMCTracks && track>=0) fMCLabel[track]=labelMC; }
65
66   void  SetPlane(Int_t plane) { if(fIsClusterEditable) fPlane = plane; }
67   Int_t GetPlane() const { return fPlane; }
68
69   void SetDetElemID(Int_t detElemID) { fDetElemID = detElemID; }
70   Int_t GetDetElemID() { return fDetElemID; }
71
72   void  SetSize(Int_t size) { if(fIsClusterEditable) fSize = size; }
73   Int_t GetSize() const { return fSize; }
74
75   void SetLocalChi2(Double_t chi2) { fLocalChi2 = chi2; }
76   void SetTrackChi2(Double_t chi2) { fTrackChi2 = chi2; }
77
78   Double_t GetLocalChi2() { return fLocalChi2; }
79   Double_t GetTrackChi2() { return fTrackChi2; }
80
81   Bool_t AddPixel(AliMFTDigit *pixel);
82
83   Bool_t IsClusterEditable() { return fIsClusterEditable; }
84   void SetClusterEditable(Bool_t isClusterEditable) { fIsClusterEditable = isClusterEditable; }
85   void TerminateCluster();
86
87   Double_t GetDistanceFromPixel(AliMFTDigit *pixel);
88
89   AliMUONRawCluster* CreateMUONCluster();
90   
91 private:
92
93   static const Int_t fNMaxMCTracks         = AliMFTConstants::fNMaxMCTracksPerCluster;
94   static const Int_t fNMaxDigitsPerCluster = AliMFTConstants::fNMaxDigitsPerCluster;
95   
96   Double_t fX, fY, fZ;   // cluster global coordinates
97   Double_t fErrX, fErrY, fErrZ;
98
99   Double_t fNElectrons;
100   Int_t fNMCTracks;
101   Int_t fPlane, fDetElemID;
102   Int_t fMCLabel[fNMaxMCTracks];
103
104   Int_t fSize;   // the number of digits composing the cluster
105
106   Double_t fTrackChi2; // Chi2 of the track when the associated cluster was attached
107   Double_t fLocalChi2; // Local chi2 of the associated cluster with respect to the track
108   
109   TClonesArray *fDigitsInCluster;   //! (Temporary) Array of the digits composing the cluster
110
111   Bool_t fIsClusterEditable;
112
113   ClassDef(AliMFTCluster, 1)
114
115 };
116
117 //====================================================================================================================================================
118         
119 #endif
120