New data member (cerenkov angle) in Cerenkov data structure.
[u/mrichter/AliRoot.git] / RICH / DataStructures.h
1 #ifndef RICHDataStructures_H
2 #define RICHDataStructures_H
3
4
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6  * See cxx source for full Copyright notice                               */
7
8 /* $Id$ */
9
10
11 #include "AliHit.h"
12 #include "AliDigit.h"
13 #include <TObjArray.h>
14 #include <TArrayF.h>
15 #include <TMath.h>
16
17
18 class AliRICHHit : public AliHit {
19  public:
20     Int_t     fChamber;       // Chamber number
21     Float_t   fParticle;      // Geant3 particle type
22     Float_t   fTheta ;        // Incident theta angle in degrees      
23     Float_t   fPhi   ;        // Incident phi angle in degrees
24     Float_t   fTlength;       // Track length inside the chamber
25     Float_t   fEloss;         // ionisation energy loss in gas   
26     Float_t   fPHfirst;       // first padhit
27     Float_t   fPHlast;        // last padhit
28     Float_t   fLoss;          // did it hit the freon?
29     Float_t   fMomX;            // Local Momentum
30     Float_t   fMomY;            // Local Momentum
31     Float_t   fMomZ;            // Local Momentum
32  public:
33     AliRICHHit() {}
34     AliRICHHit(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *hits);
35     virtual ~AliRICHHit() {}
36     
37     ClassDef(AliRICHHit,1)  //Hits object for set:RICH
38 };
39         
40 //------------------------------------------------
41 // Cerenkov photon  object
42 //------------------------------------------------
43
44 class AliRICHCerenkov: public AliHit {
45  public:
46     Int_t     fChamber;         // Chamber number
47     Float_t   fTheta ;          // Incident theta angle in degrees      
48     Float_t   fPhi   ;          // Incident phi angle in degrees
49     Float_t   fTlength;         // Track length inside the chamber
50     Float_t   fEloss;           // ionisation energy loss in gas
51     Int_t     fPHfirst;         // first padhit
52     Int_t     fPHlast;          // last padhit
53     Int_t     fCMother;         // index of mother particle
54     Float_t   fLoss;            // nature of particle loss
55     Float_t   fIndex;           // Index of photon
56     Float_t   fProduction;      // Point of production
57     Float_t   fMomX;            // Local Momentum
58     Float_t   fMomY;            // Local Momentum
59     Float_t   fMomZ;            // Local Momentum
60     Float_t   fCerenkovAngle;   // Cerenkov Angle
61  public:
62     AliRICHCerenkov() {}
63     AliRICHCerenkov(Int_t fIshunt, Int_t track, Int_t *vol, Float_t *Cerenkovs);
64     virtual ~AliRICHCerenkov() {}
65     
66     ClassDef(AliRICHCerenkov,1)  //Cerenkovs object for set:RICH
67 };
68
69 // 
70 class AliRICHPadHit : public TObject {
71  public:
72     
73     Int_t     fHitNumber;    // Hit number
74     Int_t     fCathode;      // Cathode number
75     Int_t     fQ  ;          // Total charge      
76     Int_t     fPadX  ;       // Pad number along X
77     Int_t     fPadY  ;       // Pad number along Y
78     Int_t     fQpad  ;       // Charge per pad
79     Int_t     fRSec  ;       // R -sector of pad
80     
81  public:
82     AliRICHPadHit() {
83         fHitNumber=fQ=fPadX=fPadY=fQpad=fRSec=0;   
84     }
85     AliRICHPadHit(Int_t *clhits);
86     virtual ~AliRICHPadHit() {;}
87     
88     ClassDef(AliRICHPadHit,1)  //Cluster object for set:RICH
89 };
90
91 class AliRICHDigit : public TObject {
92  public:
93     Int_t     fPadX;        // Pad number along x
94     Int_t     fPadY ;       // Pad number along y
95     Int_t     fSignal;      // Signal amplitude
96     
97     
98     Int_t     fTcharges[100];  // charge per track making this digit (up to 10)
99     Int_t     fTracks[100];    // tracks making this digit (up to 10)
100     Int_t     fPhysics;        // physics contribution to signal 
101     Int_t     fHit;            // hit number - temporary solution
102     
103  public:
104     AliRICHDigit() {}
105     AliRICHDigit(Int_t *digits);
106     AliRICHDigit(Int_t *tracks, Int_t *charges, Int_t *digits);
107     virtual ~AliRICHDigit() {}
108     ClassDef(AliRICHDigit,1)  //Digits for set:RICH
109 };
110 //_____________________________________________________________________________
111
112 class AliRICHTransientDigit : public AliRICHDigit {
113  public:
114     Int_t          fRpad;       // r_pos of pad
115     Int_t          fChamber;       // chamber number of pad
116     TObjArray     *fTrackList; 
117  public:
118     AliRICHTransientDigit() {fTrackList=0;}
119     AliRICHTransientDigit(Int_t ich, Int_t *digits);
120     virtual ~AliRICHTransientDigit() {}
121     
122     TObjArray  *TrackList()   {return fTrackList;}
123     
124     ClassDef(AliRICHTransientDigit,1)  //Digits for set:RICH
125 };
126 //___________________________________________
127 class AliRICHRawCluster : public TObject {
128 public:
129     Int_t       fTracks[3];      //labels of overlapped tracks
130     Int_t       fQ  ;            // Q of cluster (in ADC counts)     
131     Float_t     fX  ;            // X of cluster
132     Float_t     fY  ;            // Y of cluster
133     Int_t       fPeakSignal;
134     Int_t       fIndexMap[50];   //indeces of digits
135     Int_t       fOffsetMap[50];  
136     Float_t     fContMap[50];    //Contribution from digit
137     Int_t       fPhysicsMap[50];
138     Int_t       fMultiplicity;   //cluster multiplicity
139     Int_t       fNcluster[2];
140     Int_t       fClusterType;
141     Int_t       fCtype;          //CL0, CL1, etc...
142  public:
143     AliRICHRawCluster() {
144         fTracks[0]=fTracks[1]=fTracks[2]=-1; 
145         fQ=0; fX=fY=0; fMultiplicity=0;
146         for (int k=0;k<50;k++) {
147             fIndexMap[k]=-1;
148             fOffsetMap[k]=0;
149             fContMap[k]=0;
150             fPhysicsMap[k]=-1;
151             fCtype=-1;
152         }
153         fNcluster[0]=fNcluster[1]=-1;
154     }
155     virtual ~AliRICHRawCluster() {}
156     
157     Float_t GetRadius() {return TMath::Sqrt(fX*fX+fY*fY);}
158     
159     Bool_t IsSortable() const {return kTRUE;}
160     Int_t  Compare(TObject *obj);
161     Int_t PhysicsContribution();
162     static Int_t BinarySearch(Float_t r, TArrayF, Int_t from, Int_t upto);
163     static void  SortMin(Int_t *,Float_t *,Float_t *,Float_t *,Float_t *,Int_t);
164     
165    ClassDef(AliRICHRawCluster,1)  //Cluster object for set:RICH
166 };
167 //___________________________________________
168 class AliRICHRecHit : public TObject {
169 public:
170   Float_t     Theta  ;            //Incidence Angle theta
171   Float_t     Phi  ;              //Incidence Angle phi
172   Float_t     Omega;              //Cherenkov angle omega
173   Float_t     fX;                 //Impact coordinate x
174   Float_t     fY;                 //Impact coordinate y
175  public:
176     AliRICHRecHit() {
177       Theta=Phi=Omega=0;
178     }
179     AliRICHRecHit(Int_t id, Float_t* rechit);
180     virtual ~AliRICHRecHit() {}
181     ClassDef(AliRICHRecHit,1)  //Reconstructed hit object for set:RICH
182 };
183
184 #endif