Bug fix. Removed delete statement
[u/mrichter/AliRoot.git] / STEER / AliCluster.h
1 #ifndef ALICLUSTER_H
2 #define ALICLUSTER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //-------------------------------------------------------------------------
7 //                         Class AliCluster
8 // This is the future base for managing the clusters in barrel detectors.
9 // It is fully interfaced with the ROOT geometrical modeller TGeo.
10 // Each cluster contains XYZ coordinates in the local tracking c.s. and
11 // the unique ID of the sensitive detector element which continas the
12 // cluster. The coordinates in global c.s. are computed using the interface
13 // to TGeo and will be not overwritten by the derived sub-detector cluster
14 // classes.
15 //
16 // cvetan.cheshkov@cern.ch  & jouri.belikov@cern.ch     5/3/2007
17 //-------------------------------------------------------------------------
18
19 #include <TObject.h>
20
21 class TGeoHMatrix;
22 class TGeoPNEntry;
23
24 class AliCluster : public TObject {
25  public:
26   enum {
27     kUsed   =  BIT(14),
28     kShared =  BIT(15)
29   };
30
31   AliCluster();
32   AliCluster(UShort_t volId, const Float_t *hit, Float_t x = 0, Float_t sigyz = 0, const Int_t *lab = NULL);
33   AliCluster(UShort_t volId,
34                  Float_t x, Float_t y, Float_t z,
35                  Float_t sy2, Float_t sz2, Float_t syz,
36                  const Int_t *lab = NULL);
37   AliCluster(const AliCluster& cluster);
38   AliCluster &operator=(const AliCluster& cluster);
39   virtual ~AliCluster() {;}
40
41   Int_t    GetLabel(Int_t i) const {return fTracks[i];}
42   Float_t  GetX()            const {return fX;}
43   Float_t  GetY()            const {return fY;}
44   Float_t  GetZ()            const {return fZ;}
45   Float_t  GetSigmaY2()      const {return fSigmaY2;}
46   Float_t  GetSigmaZ2()      const {return fSigmaZ2;}
47   Float_t  GetSigmaYZ()      const {return fSigmaYZ;}
48   UShort_t GetVolumeId()     const {return fVolumeId;}
49
50   void   IncreaseClusterUsage()  { if (TestBit(kUsed)) SetBit(kShared); else SetBit(kUsed); }
51   Bool_t IsClusterUsed()   const { return TestBit(kUsed);   }
52   Bool_t IsClusterShared() const { return TestBit(kShared); }
53
54   virtual void Use(Int_t = 0) {;}
55
56   Bool_t   GetGlobalXYZ(Float_t xyz[3]) const;
57   virtual Bool_t   GetGlobalCov(Float_t cov[6]) const;
58   Bool_t   GetXRefPlane(Float_t &xref) const;
59
60   Bool_t   Misalign();
61
62   void     SetLabel(Int_t lab,Int_t i)
63   { if (i>=0 && i<3) fTracks[i] = lab;}
64   void     SetX(Float_t x) {fX = x;}
65   void     SetY(Float_t y) {fY = y;}
66   void     SetZ(Float_t z) {fZ = z;}
67   void     SetSigmaY2(Float_t sigy2) {fSigmaY2 = sigy2;}
68   void     SetSigmaZ2(Float_t sigz2) {fSigmaZ2 = sigz2;}
69   void     SetSigmaYZ(Float_t sigyz) {fSigmaYZ = sigyz;};
70   void     SetVolumeId(UShort_t id)  {fVolumeId = id;}
71
72  protected:
73
74   const TGeoHMatrix*   GetTracking2LocalMatrix() const;
75   TGeoHMatrix*         GetMatrix(Bool_t original = kFALSE) const;
76
77  private:
78
79   Int_t    fTracks[3];//MC labels
80   Float_t  fX;        // X of the cluster in the tracking c.s.
81   Float_t  fY;        // Y of the cluster in the tracking c.s.
82   Float_t  fZ;        // Z of the cluster in the tracking c.s.
83   Float_t  fSigmaY2;  // Sigma Y square of cluster
84   Float_t  fSigmaZ2;  // Sigma Z square of cluster
85   Float_t  fSigmaYZ;  // Non-diagonal element of cov.matrix
86   UShort_t fVolumeId; // Volume ID of the detector element
87   Bool_t   fIsMisaligned; // Cluster was misagned or not?
88
89   ClassDef(AliCluster,3) // Barrel detectors cluster
90 };
91
92 #endif