4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
13 class AliRICHRecon : public TTask {
16 AliRICHRecon(const char*, const char*);
17 ~AliRICHRecon(){EndProcessEvent();}
19 AliRICH* Rich() {return fRich;}
20 void StartProcessEvent();
21 void EndProcessEvent();
29 void FillHistograms();
31 void FindThetaPhotonCerenkov();
32 void FindAreaAndPortionOfRing();
34 void FindEmissionPoint();
37 Float_t PhotonPositionOnCathode();
39 void FindPhotonAnglesInDRS();
41 void FindThetaAtQuartz(Float_t ThetaCerenkov);
43 Float_t FindMassOfParticle();
45 Float_t Cerenkovangle(Float_t n, Float_t beta);
48 void HoughFiltering(float HCS[]);
50 void FindWeightThetaCerenkov();
52 void EstimationOfTheta();
53 void FindIntersectionWithDetector();
54 Int_t CheckDetectorAcceptance();
57 void DrawEvent(Int_t flag);
61 //////////////////////////////////////
62 Float_t GetEventVertexZ() { return fEventVertZ;}
63 Float_t GetEventMultiplicity() { return fEventMultiplicity;}
64 Float_t GetPhotonEnergy() { return fPhotonEnergy;}
65 Float_t GetFreonRefractiveIndex() { return fFreonRefractiveIndex;}
66 Float_t GetQuartzRefractiveIndex() { return fQuartzRefractiveIndex;}
67 Float_t GetGasRefractiveIndex() { return fGasRefractiveIndex;}
69 Float_t GetFreonScaleFactor() { return fFreonScaleFactor;}
71 Float_t GetEmissionPoint() { return fLengthEmissionPoint;}
72 Float_t GetMassHypotesis() { return fMassHypotesis;}
73 Float_t GetBetaOfParticle() { return fTrackBeta;}
74 Float_t GetEntranceX() { return fXtoentr;}
75 Float_t GetEntranceY() { return fYtoentr;}
76 Float_t GetThetaCerenkov() { return fThetaCerenkov;}
77 Float_t GetThetaPhotonCerenkov() { return fThetaPhotonCerenkov;}
78 Float_t GetTrackMomentum() { return fTrackMomentum;}
79 Float_t GetTrackEta() { return fTrackEta;}
80 Float_t GetTrackTheta() { return fTrackTheta;}
81 Float_t GetTrackPhi() { return fTrackPhi;}
82 Float_t GetTrackPt() { return fTrackPt;}
83 Int_t GetTrackCharge() { return fTrackCharge;}
84 Float_t GetTrackTPCLastZ() { return fTrackTPCLastZ;}
85 Float_t GetMinDist() { return fMinDist;}
86 Float_t GetXPointOnCathode() { return fPhotonLimitX;}
87 Float_t GetYPointOnCathode() { return fPhotonLimitY;}
90 Float_t GetThetaPhotonInDRS() { return fThetaPhotonInDRS;}
91 Float_t GetPhiPhotonInDRS() { return fPhiPhotonInDRS;}
92 Float_t GetThetaPhotonInTRS() { return fThetaPhotonInTRS;}
93 Float_t GetPhiPhotonInTRS() { return fPhiPhotonInTRS;}
95 Float_t GetThetaAtQuartz() { return fThetaAtQuartz;}
97 Float_t GetPhiPoint(){ return fPhiPoint;}
98 Float_t GetXCoordOfEmission() {return fXEmiss;}
99 Float_t GetYCoordOfEmission() {return fYEmiss;}
101 Float_t GetXInnerRing() {return fXInner;}
102 Float_t GetYInnerRing() {return fYInner;}
103 Float_t GetRadiusInnerRing() {return fInnerRadius;}
105 Float_t GetXOuterRing() {return fXOuter;}
106 Float_t GetYOuterRing() {return fYOuter;}
107 Float_t GetRadiusOuterRing() {return fOuterRadius;}
108 Float_t GetShiftX() { return fShiftX;}
109 Float_t GetShiftY() { return fShiftY;}
110 Float_t GetDetectorWhereX() { return fXcoord;}
111 Float_t GetDetectorWhereY() { return fYcoord;}
112 Float_t GetIntersectionX() {return fIntersectionX;}
113 Float_t GetIntersectionY() {return fIntersectionY;}
115 Float_t GetThetaOfRing() { return fThetaOfRing;}
116 Float_t GetAreaOfRing() {return fAreaOfRing;}
117 Float_t GetPortionOfRing() {return fPortionOfRing;}
118 Float_t GetHoughArea() { return fHoughArea;}
120 Int_t GetPhotonsNumber() { return fPhotonsNumber;}
121 Int_t GetPhotonIndex() { return fPhotonIndex;}
122 Float_t GetPhotonEta() { return fPhotonEta[fPhotonIndex];}
123 Int_t GetPhotonFlag() { return fPhotonFlag[fPhotonIndex];}
124 Float_t GetPhotonWeight() { return fPhotonWeight[fPhotonIndex];}
126 Float_t GetHoughRMS() { return fHoughRMS;}
128 Int_t GetMipIndex() { return fMipIndex;}
129 Int_t GetTrackIndex() { return fTrackIndex;}
130 Float_t* GetCandidatePhotonX() { return fCandidatePhotonX;}
131 Float_t* GetCandidatePhotonY() { return fCandidatePhotonY;}
132 Int_t GetCandidatePhotonsNumber() { return fCandidatePhotonsNumber;}
134 Int_t GetHoughPhotons() { return fHoughPhotons;}
135 Float_t GetHoughPhotonsNorm() { return fHoughPhotonsNorm;}
137 Float_t GetFittedTrackTheta() { return fFittedTrackTheta;}
138 Float_t GetFittedTrackPhi() { return fFittedTrackPhi;}
139 Float_t GetFittedThetaCerenkov() { return fFittedThetaCerenkov;}
140 Int_t GetFittedHoughPhotons() { return fFittedHoughPhotons;}
141 Float_t GetEstimationOfTheta() { return fEstimationOfTheta;}
142 Float_t GetEstimationOfThetaRMS() { return fEstimationOfThetaRMS;}
144 void SetEventVertexZ(Float_t EventVertZ) { fEventVertZ = EventVertZ;}
145 void SetEventMultiplicity(Float_t EventMultiplicity) { fEventMultiplicity = EventMultiplicity;}
146 void SetPhotonEnergy(Float_t PhotonEnergy) { fPhotonEnergy = PhotonEnergy;}
147 void SetFreonRefractiveIndex() {fFreonRefractiveIndex = fFreonScaleFactor*(1.177+0.0172*fPhotonEnergy);}
148 void SetQuartzRefractiveIndex() {fQuartzRefractiveIndex = sqrt(1+(46.411/(113.763556-TMath::Power(fPhotonEnergy,2)))+(228.71/(328.51563-TMath::Power(fPhotonEnergy,2))));}
149 void SetGasRefractiveIndex() { fGasRefractiveIndex = 1.;}
151 void SetFreonScaleFactor(Float_t FreonScaleFactor) {fFreonScaleFactor = FreonScaleFactor;}
153 void SetEmissionPoint(Float_t LengthEmissionPoint) { fLengthEmissionPoint = LengthEmissionPoint;}
154 void SetMassHypotesis(Float_t mass) {fMassHypotesis = mass;}
156 void SetBetaOfParticle() { fTrackBeta = fTrackMomentum/sqrt(TMath::Power(fTrackMomentum,2)+TMath::Power(fMassHypotesis,2));}
158 void SetEntranceX(Float_t Xtoentr) { fXtoentr = Xtoentr;}
159 void SetEntranceY(Float_t Ytoentr) { fYtoentr = Ytoentr;}
161 void SetThetaPhotonInTRS(Float_t Theta) {fThetaPhotonInTRS = Theta;}
162 void SetPhiPhotonInTRS(Float_t Phi) {fPhiPhotonInTRS = Phi;}
163 void SetThetaPhotonInDRS(Float_t Theta) {fThetaPhotonInDRS = Theta;}
164 void SetPhiPhotonInDRS(Float_t Phi) {fPhiPhotonInDRS = Phi;}
166 void SetThetaAtQuartz(Float_t ThetaAtQuartz) {fThetaAtQuartz = ThetaAtQuartz;}
168 void SetPhiPoint(Float_t PhiPoint){ fPhiPoint = PhiPoint;}
170 void SetXCoordOfEmission(Float_t XEmiss) {fXEmiss = XEmiss;}
171 void SetYCoordOfEmission(Float_t YEmiss) {fYEmiss = YEmiss;}
174 void SetXPointOnCathode(Float_t PhotonLimitX) { fPhotonLimitX = PhotonLimitX;}
175 void SetYPointOnCathode(Float_t PhotonLimitY) { fPhotonLimitY = PhotonLimitY;}
177 void SetXInnerRing(Float_t XInner) {fXInner = XInner;}
178 void SetYInnerRing(Float_t YInner) {fYInner = YInner;}
179 void SetRadiusInnerRing(Float_t InnerRadius) {fInnerRadius = InnerRadius;}
181 void SetXOuterRing(Float_t XOuter) {fXOuter = XOuter;}
182 void SetYOuterRing(Float_t YOuter) {fYOuter = YOuter;}
183 void SetRadiusOuterRing(Float_t OuterRadius) {fOuterRadius = OuterRadius;}
185 void SetThetaCerenkov(Float_t ThetaCer) {fThetaCerenkov = ThetaCer;}
186 void SetThetaPhotonCerenkov(Float_t ThetaPhotCer) {fThetaPhotonCerenkov = ThetaPhotCer;}
188 void SetTrackMomentum(Float_t TrackMomentum) {fTrackMomentum = TrackMomentum;}
189 void SetTrackEta(Float_t TrackEta) {fTrackEta = TrackEta;}
190 void SetTrackTheta(Float_t TrackTheta) { fTrackTheta = TrackTheta;}
191 void SetTrackPhi(Float_t TrackPhi) { fTrackPhi = TrackPhi;}
192 void SetTrackPt(Float_t TrackPt) { fTrackPt = TrackPt;}
193 void SetTrackCharge(Int_t TrackCharge) { fTrackCharge = TrackCharge;}
194 void SetTrackTPCLastZ(Float_t TrackTPCLastZ) { fTrackTPCLastZ = TrackTPCLastZ;}
195 void SetMinDist(Float_t MinDist) { fMinDist = MinDist;}
196 void SetShiftX(Float_t ShiftX) { fShiftX = ShiftX;}
197 void SetShiftY(Float_t ShiftY) { fShiftY = ShiftY;}
199 void SetDetectorWhereX(Float_t Xcoord) { fXcoord = Xcoord;}
200 void SetDetectorWhereY(Float_t Ycoord) { fYcoord = Ycoord;}
202 void SetIntersectionX(Float_t IntersectionX) { fIntersectionX = IntersectionX;}
203 void SetIntersectionY(Float_t IntersectionY) { fIntersectionY = IntersectionY;}
205 void SetThetaOfRing(Float_t ThetaOfRing) { fThetaOfRing = ThetaOfRing;}
206 void SetAreaOfRing(Float_t AreaOfRing) { fAreaOfRing = AreaOfRing;}
207 void SetPortionOfRing(Float_t PortionOfRing) { fPortionOfRing = PortionOfRing;}
208 void SetHoughArea(Float_t HoughArea) { fHoughArea = HoughArea;}
211 void SetPhotonsNumber(Int_t PhotonsNumber) { fPhotonsNumber = PhotonsNumber;}
212 void SetPhotonIndex(Int_t PhotonIndex) { fPhotonIndex = PhotonIndex;}
213 void SetPhotonEta(Float_t PhotonEta) { fPhotonEta[fPhotonIndex] = PhotonEta;}
214 void SetPhotonFlag(Int_t PhotonFlag) { fPhotonFlag[fPhotonIndex] = PhotonFlag;}
215 void SetPhotonWeight(Float_t PhotonWeight) { fPhotonWeight[fPhotonIndex] = PhotonWeight;}
217 void SetHoughRMS(Float_t HoughRMS) { fHoughRMS = HoughRMS;}
218 void SetMipIndex(Int_t MipIndex) { fMipIndex = MipIndex;}
219 void SetTrackIndex(Int_t TrackIndex) { fTrackIndex = TrackIndex;}
221 void SetCandidatePhotonX(Float_t *CandidatePhotonX) { fCandidatePhotonX = CandidatePhotonX;}
222 void SetCandidatePhotonY(Float_t *CandidatePhotonY) { fCandidatePhotonY = CandidatePhotonY;}
223 void SetCandidatePhotonsNumber(Int_t CandidatePhotonsNumber) { fCandidatePhotonsNumber = CandidatePhotonsNumber;}
224 void SetHoughPhotons(Int_t HoughPhotons) { fHoughPhotons = HoughPhotons;}
225 void SetHoughPhotonsNorm(Float_t HoughPhotonsNorm) { fHoughPhotonsNorm = HoughPhotonsNorm;}
227 void SetFittedTrackTheta(Float_t FittedTrackTheta) { fFittedTrackTheta = FittedTrackTheta;}
228 void SetFittedTrackPhi(Float_t FittedTrackPhi) { fFittedTrackPhi = FittedTrackPhi;}
229 void SetFittedThetaCerenkov(Float_t FittedThetaCerenkov) { fFittedThetaCerenkov = FittedThetaCerenkov;}
230 void SetFittedHoughPhotons(Int_t FittedHoughPhotons) { fFittedHoughPhotons = FittedHoughPhotons;}
231 void SetEstimationOfTheta(Float_t EstimationOfTheta) { fEstimationOfTheta = EstimationOfTheta;}
232 void SetEstimationOfThetaRMS(Float_t EstimationOfThetaRMS) { fEstimationOfThetaRMS = EstimationOfThetaRMS;}
234 void FindBetaFromTheta(Float_t ThetaCerenkov) {fTrackBeta = 1/(fFreonRefractiveIndex*cos(ThetaCerenkov));}
236 Float_t SnellAngle(Float_t n1, Float_t n2, Float_t theta1);
238 Float_t FromEmissionToCathode();
239 //////////////////////////////////////
245 Float_t fEventMultiplicity;
249 Float_t fTrackMomentum;
253 Float_t fTrackTPCLastZ;
260 Float_t fThetaPhotonInTRS;
261 Float_t fPhiPhotonInTRS;
263 Float_t fThetaPhotonInDRS;
264 Float_t fPhiPhotonInDRS;
266 Float_t fThetaAtQuartz;
276 Float_t fInnerRadius;
277 Float_t fOuterRadius;
279 Float_t fPhotonEnergy;
280 Float_t fFreonRefractiveIndex;
281 Float_t fQuartzRefractiveIndex;
282 Float_t fGasRefractiveIndex;
284 Float_t fFreonScaleFactor;
286 Float_t fLengthEmissionPoint;
288 Float_t fPhotonLimitX;
289 Float_t fPhotonLimitY;
290 Float_t fDistanceFromCluster;
292 Float_t fMassHypotesis;
294 Float_t fCerenkovAnglePad;
296 Float_t fThetaPhotonCerenkov;
304 Float_t fIntersectionX;
305 Float_t fIntersectionY;
307 Float_t fThetaOfRing;
309 Float_t fPortionOfRing;
312 Int_t fPhotonsNumber;
314 Float_t fPhotonEta[3000];
315 Int_t fPhotonFlag[3000];
316 Float_t fPhotonWeight[3000];
323 Float_t* fCandidatePhotonX;
324 Float_t* fCandidatePhotonY;
325 Int_t fCandidatePhotonsNumber;
328 Float_t fHoughPhotonsNorm;
330 Float_t fFittedTrackTheta;
331 Float_t fFittedTrackPhi;
332 Float_t fFittedThetaCerenkov;
333 Int_t fFittedHoughPhotons;
335 Float_t fEstimationOfTheta;
336 Float_t fEstimationOfThetaRMS;
340 Int_t fNumEtaPhotons; // Number of photons
341 Int_t fEtaFlag[3000]; // flag for good photons
342 Float_t fEtaPhotons[3000]; // Cerenkov angle each photon
343 Float_t fWeightPhotons[3000]; // weight for each photon
344 Float_t fThetaCerenkov; // Theta angle for Hough
345 Float_t fWeightThetaCerenkov; // Theta Cerenkov angle weighted
346 Float_t fThetaPeakPos; // Peak position
349 ClassDef(AliRICHRecon,0)
353 #endif // #ifdef AliRICHRecon_cxx