25db19aa907df5c3ea2a9c30b3dbfc6ffcb99b8c
[u/mrichter/AliRoot.git] / ITS / AliITSRecPoint.h
1 #ifndef ALIITSRECPOINT_H
2 #define ALIITSRECPOINT_H 
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /*
7   $Id$
8 */
9
10 ///////////////////////////////////////////////////////////////////////////////
11 //  Reconstructed space point class for set:ITS   
12 //  Reconstructed points are expressed simultaneously in two different 
13 //  reference frames, both differing from the global system.
14 //  The first is referred to the sensor (see AliITSsegmentation for the
15 //  definition) and each point is represented by two coordinates: fXloc and
16 //  fZloc. This system in the code is referred to as "local"
17 //  The second is used for tracking (V2, SA and MI versions) and the X axis 
18 //  represents the radial coordinate (this system is, in the bending plane, 
19 //  a rotated system w.r.t. the global reference system). 
20 //  Each reaconstructed point is represented by two coordinates: fY and fZ, 
21 //  inherited from AliCluster. This system in the code is referred to as 
22 //  "trackingV2".
23 ///////////////////////////////////////////////////////////////////////////////
24
25 #include <AliCluster.h>
26 #include <Riostream.h>
27 #include <AliLog.h>
28
29 using std::ostream;
30 using std::istream;
31
32 class AliITSRecPoint : public AliCluster {
33  public:
34   AliITSRecPoint();
35   AliITSRecPoint(Int_t *lab,Float_t *hit, Int_t *info, Bool_t local = kFALSE);
36   AliITSRecPoint(const AliITSRecPoint& pt);
37   AliITSRecPoint& operator=(const AliITSRecPoint &source);
38   
39   virtual ~AliITSRecPoint() {}; // distructor
40   Bool_t  IsSortable() const {return kTRUE;} // allows for sorting
41   Float_t GetDetLocalX() const {return fXloc;} // gets fX
42   Float_t GetDetLocalZ() const {return fZloc;} // gets fZ
43   Float_t GetdEdX() const {return fdEdX;} // gets fdEdX
44   Float_t GetSigmaDetLocX2() const {return GetSigmaY2();} // gets fSigmaX2
45   void    SetdEdX(Float_t dedx){fdEdX=dedx;} // sets fdEdX
46   Int_t Compare(const TObject *) const {return 0;} //to be defined
47   void Print(ostream *os); 
48   // Reads in the content of this class in the format of Print
49   void Read(istream *is);
50   virtual void Print(Option_t *option="") const {TObject::Print(option);}
51   virtual Int_t Read(const char *name) {return TObject::Read(name);}
52   
53   void Use(Int_t = 0) {fQ=-fQ;}
54   void UnUse() {fQ=TMath::Abs(fQ);}
55   void SetQ(Float_t q) {fQ=q;}
56   void SetDetectorIndex(Int_t i) { fIndex=i; }
57   void SetLayer(Int_t layer) {fLayer=layer;}
58   void SetNz(Int_t nz) {fNz =nz;}
59   void SetNy(Int_t ny){fNy=ny;}
60   void SetChargeRatio(Float_t ratio) { fChargeRatio = ratio;}
61   void SetPhiR(Float_t y) { fChargeRatio=y; }
62   void SetType(Int_t type){ fType=type;}
63   void SetDeltaProbability(Float_t prob){fDeltaProb = prob;}
64   void SetDriftTime(Float_t tim) {fDriftTime=tim;}
65   void SetDriftSide(Int_t sid) {fDriftSide=sid;}
66  
67   Int_t IsUsed() const {return (fQ<0)?1:0;}
68   Float_t GetQ() const {return TMath::Abs(fQ);}
69   Int_t GetDetectorIndex() const { return 0x3FF&fIndex; }
70   Int_t GetLayer() const {return fLayer;}
71   Int_t GetNz() const {return fNz;}
72   Int_t GetNy() const {return fNy;}
73   Float_t GetChargeRatio() const {return fChargeRatio;}
74   Float_t GetPhiR() const {return fChargeRatio;}
75   Int_t GetPindex() const { return 0xFFF00000&fIndex; }  //SSD clusters only
76   Int_t GetNindex() const { return 0xFFC00&fIndex; }  //SSD clusters only
77   Int_t GetType() const {return fType;}  // type of the cluster (for SPD the number of pixels in the cluster)
78   Float_t GetDeltaProbability() const{return fDeltaProb;} //probability to belong to the delta ray
79   Float_t GetDriftTime() const{return  fDriftTime;}
80   Int_t GetDriftSide() const {return fDriftSide;}
81   Int_t GetNpixels() const; // for SPD returns fType, i.e. the number of pixels in the cluster (-1 for SDD and SSD)
82   Int_t GetSPDclusterType() const; // for SPD returns cluster type according to conventional numbering (-1 for SDD and SSD)
83   Int_t GetSDDclusterType() const; 
84   Int_t GetSSDclusterType() const; 
85   static void DecodeSDDclusterType(Int_t cluType, Int_t &cluSizAn, Int_t& cluSizTb, Int_t &drSide);
86
87   Int_t GetClusterType() const {
88     if(fLayer<=1) return GetSPDclusterType();
89     if(fLayer==2 || fLayer==3) return GetSDDclusterType();
90     return GetSSDclusterType();
91   }
92  protected:
93
94   Float_t   fXloc ;        //X of cluster (local coordinates)
95   Float_t   fZloc ;        //Z of cluster (local coordinates)
96   Float_t   fdEdX;      //dE/dX inside this cluster
97
98   Int_t    fIndex;    // detector index
99   Float_t  fQ ;       // Q of cluster (in ADC counts)
100   Char_t   fLayer;    // layer number
101   Short_t  fNz;       //number of digits in Z direction
102   Short_t  fNy;       //number of digits in y direction 
103   Float_t  fChargeRatio; //charge ratio
104   Int_t    fType;         //quality factor of the cluster
105   Float_t  fDeltaProb;    // probability to be delta electron
106   Float_t  fDriftTime;    // drift time in SDD
107   Char_t   fDriftSide;    // drift region in SDD (0=left=positive xlocal, 1=right)
108     
109   ClassDef(AliITSRecPoint,7)  // AliITSRecPoint class
110 };
111 // Input and output function for standard C++ input/output.
112 ostream& operator<<(ostream &os,AliITSRecPoint &source);
113 istream& operator>>(istream &is,AliITSRecPoint &source);
114 #endif