New data member (cerenkov angle) in Cerenkov data structure.
[u/mrichter/AliRoot.git] / RICH / DataStructures.h
CommitLineData
e885d048 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
18class 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
44class 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
04ac79df 60 Float_t fCerenkovAngle; // Cerenkov Angle
e885d048 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//
70class 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
91class 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
112class 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//___________________________________________
127class AliRICHRawCluster : public TObject {
128public:
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//___________________________________________
168class AliRICHRecHit : public TObject {
169public:
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