ROOT logo
#ifndef ALICLUSTER_H
#define ALICLUSTER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//-------------------------------------------------------------------------
//                         Class AliCluster
// This is the future base for managing the clusters in barrel detectors.
// It is fully interfaced with the ROOT geometrical modeller TGeo.
// Each cluster contains XYZ coordinates in the local tracking c.s. and
// the unique ID of the sensitive detector element which continas the
// cluster. The coordinates in global c.s. are computed using the interface
// to TGeo and will be not overwritten by the derived sub-detector cluster
// classes.
//
// cvetan.cheshkov@cern.ch  & jouri.belikov@cern.ch     5/3/2007
//-------------------------------------------------------------------------

#include <TObject.h>

class TGeoHMatrix;
class TGeoPNEntry;

class AliCluster : public TObject {
 public:
  enum {
    kUsed   =  BIT(14),
    kShared =  BIT(15)
  };

  AliCluster();
  AliCluster(UShort_t volId, const Float_t *hit, Float_t x = 0, Float_t sigyz = 0, const Int_t *lab = NULL);
  AliCluster(UShort_t volId,
		 Float_t x, Float_t y, Float_t z,
		 Float_t sy2, Float_t sz2, Float_t syz,
		 const Int_t *lab = NULL);
  AliCluster(const AliCluster& cluster);
  AliCluster &operator=(const AliCluster& cluster);
  virtual ~AliCluster() {;}

  virtual void Print(Option_t* option = "") const;

  Int_t    GetLabel(Int_t i) const {return fTracks[i];}
  Float_t  GetX()            const {return fX;}
  Float_t  GetY()            const {return fY;}
  Float_t  GetZ()            const {return fZ;}
  Float_t  GetSigmaY2()      const {return fSigmaY2;}
  Float_t  GetSigmaZ2()      const {return fSigmaZ2;}
  Float_t  GetSigmaYZ()      const {return fSigmaYZ;}
  UShort_t GetVolumeId()     const {return fVolumeId;}

  void   IncreaseClusterUsage()  { if (TestBit(kUsed)) SetBit(kShared); else SetBit(kUsed); }
  Bool_t IsClusterUsed()   const { return TestBit(kUsed);   }
  Bool_t IsClusterShared() const { return TestBit(kShared); }

  virtual void Use(Int_t = 0) {SetBit(kUsed);}

  virtual  Bool_t   GetGlobalXYZ(Float_t xyz[3]) const;
  virtual  Bool_t   GetGlobalCov(Float_t cov[6]) const;
  virtual  Bool_t   GetXRefPlane(Float_t &xref) const;
  virtual  Bool_t   GetXAlphaRefPlane(Float_t &x, Float_t &alpha) const;

  Bool_t   Misalign();

  void     SetLabel(Int_t lab,Int_t i)
  { if (i>=0 && i<3) fTracks[i] = lab;}
  void     SetX(Float_t x) {fX = x;}
  void     SetY(Float_t y) {fY = y;}
  void     SetZ(Float_t z) {fZ = z;}
  void     SetSigmaY2(Float_t sigy2) {fSigmaY2 = sigy2;}
  void     SetSigmaZ2(Float_t sigz2) {fSigmaZ2 = sigz2;}
  void     SetSigmaYZ(Float_t sigyz) {fSigmaYZ = sigyz;};
  void     SetVolumeId(UShort_t id)  {fVolumeId = id;}

 protected:

  virtual const TGeoHMatrix*   GetTracking2LocalMatrix() const;
  virtual TGeoHMatrix*         GetMatrix(Bool_t original = kFALSE) const;

 private:

  Int_t    fTracks[3];//MC labels
  Float_t  fX;        // X of the cluster in the tracking c.s.
  Float_t  fY;        // Y of the cluster in the tracking c.s.
  Float_t  fZ;        // Z of the cluster in the tracking c.s.
  Float_t  fSigmaY2;  // Sigma Y square of cluster
  Float_t  fSigmaZ2;  // Sigma Z square of cluster
  Float_t  fSigmaYZ;  // Non-diagonal element of cov.matrix
  UShort_t fVolumeId; // Volume ID of the detector element
  Bool_t   fIsMisaligned; // Cluster was misagned or not?

  ClassDef(AliCluster,3) // Barrel detectors cluster
};

#endif
 AliCluster.h:1
 AliCluster.h:2
 AliCluster.h:3
 AliCluster.h:4
 AliCluster.h:5
 AliCluster.h:6
 AliCluster.h:7
 AliCluster.h:8
 AliCluster.h:9
 AliCluster.h:10
 AliCluster.h:11
 AliCluster.h:12
 AliCluster.h:13
 AliCluster.h:14
 AliCluster.h:15
 AliCluster.h:16
 AliCluster.h:17
 AliCluster.h:18
 AliCluster.h:19
 AliCluster.h:20
 AliCluster.h:21
 AliCluster.h:22
 AliCluster.h:23
 AliCluster.h:24
 AliCluster.h:25
 AliCluster.h:26
 AliCluster.h:27
 AliCluster.h:28
 AliCluster.h:29
 AliCluster.h:30
 AliCluster.h:31
 AliCluster.h:32
 AliCluster.h:33
 AliCluster.h:34
 AliCluster.h:35
 AliCluster.h:36
 AliCluster.h:37
 AliCluster.h:38
 AliCluster.h:39
 AliCluster.h:40
 AliCluster.h:41
 AliCluster.h:42
 AliCluster.h:43
 AliCluster.h:44
 AliCluster.h:45
 AliCluster.h:46
 AliCluster.h:47
 AliCluster.h:48
 AliCluster.h:49
 AliCluster.h:50
 AliCluster.h:51
 AliCluster.h:52
 AliCluster.h:53
 AliCluster.h:54
 AliCluster.h:55
 AliCluster.h:56
 AliCluster.h:57
 AliCluster.h:58
 AliCluster.h:59
 AliCluster.h:60
 AliCluster.h:61
 AliCluster.h:62
 AliCluster.h:63
 AliCluster.h:64
 AliCluster.h:65
 AliCluster.h:66
 AliCluster.h:67
 AliCluster.h:68
 AliCluster.h:69
 AliCluster.h:70
 AliCluster.h:71
 AliCluster.h:72
 AliCluster.h:73
 AliCluster.h:74
 AliCluster.h:75
 AliCluster.h:76
 AliCluster.h:77
 AliCluster.h:78
 AliCluster.h:79
 AliCluster.h:80
 AliCluster.h:81
 AliCluster.h:82
 AliCluster.h:83
 AliCluster.h:84
 AliCluster.h:85
 AliCluster.h:86
 AliCluster.h:87
 AliCluster.h:88
 AliCluster.h:89
 AliCluster.h:90
 AliCluster.h:91
 AliCluster.h:92
 AliCluster.h:93
 AliCluster.h:94
 AliCluster.h:95