]>
Commit | Line | Data |
---|---|---|
5cb4dfc3 | 1 | #ifndef AliRICHRecon_h |
2 | #define AliRICHRecon_h | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
88dd9ad4 | 7 | ////////////////////////////////////////////////////////////////////////// |
8 | // // | |
9 | // AliRICHRecon // | |
10 | // // | |
11 | // RICH class to perfom pattern recognition based on Hough transfrom // | |
12 | // // | |
13 | ////////////////////////////////////////////////////////////////////////// | |
14 | ||
15 | ||
db910db9 | 16 | #include <TTask.h> //base class |
5cb4dfc3 | 17 | |
998b831f | 18 | class AliRICHHelix; |
db910db9 | 19 | class AliRICHParam; |
20 | class TClonesArray; | |
b068561d | 21 | class AliRICHRecon : public TTask |
22 | { | |
23 | public : | |
db910db9 | 24 | AliRICHRecon(); |
25 | virtual ~AliRICHRecon() {} | |
5cb4dfc3 | 26 | |
db910db9 | 27 | Double_t ThetaCerenkov(AliRICHHelix *pHelix,TClonesArray *pCluLst,Int_t &iMipId); // it returns reconstructed Theta Cerenkov |
88dd9ad4 | 28 | void FindThetaPhotonCerenkov(); // |
29 | void FindAreaAndPortionOfRing(); // | |
88dd9ad4 | 30 | void FindPhotonAnglesInDRS(); // |
31 | void FindPhiPoint(); // | |
32 | void FindThetaAtQuartz(Float_t ThetaCer); // | |
db910db9 | 33 | Double_t HoughResponse ( ); //most probable track theta ckov out of all photon candidate thetas |
34 | Int_t FlagPhotons (Double_t theta); //n. of photon candidates which thetas are inside a window around most probable track theta ckov | |
101624cd | 35 | void FindThetaCerenkov(); // |
88dd9ad4 | 36 | void FindIntersectionWithDetector(); // |
88dd9ad4 | 37 | Float_t Cerenkovangle(Float_t n, Float_t b);// |
88dd9ad4 | 38 | Int_t PhotonInBand(); // |
88dd9ad4 | 39 | Int_t CheckDetectorAcceptance() const; // |
40 | Int_t GetFittedHoughPhotons() const{ return fFittedHoughPhotons;} // | |
41 | Int_t GetPhotonFlag() const{ return fPhotonFlag[fPhotonIndex];} // | |
88dd9ad4 | 42 | Int_t GetPhotonsNumber() const{ return fPhotonsNumber;} // |
43 | Int_t GetPhotonIndex() const{ return fPhotonIndex;} // | |
db910db9 | 44 | Float_t GetPhotonEnergy() const{ return fEphot;} // |
88dd9ad4 | 45 | Float_t GetEmissionPoint() const{ return fLengthEmissionPoint;} // |
46 | Float_t GetMassHypotesis() const{ return fMassHypotesis;} // | |
47 | Float_t GetBetaOfParticle() const{ return fTrackBeta;} // | |
48 | Float_t GetEntranceX() const{ return fXtoentr;} // | |
49 | Float_t GetEntranceY() const{ return fYtoentr;} // | |
50 | Float_t GetThetaCerenkov() const{ return fThetaCerenkov;} // | |
51 | Float_t GetThetaPhotonCerenkov() const{ return fThetaPhotonCerenkov;} // | |
88dd9ad4 | 52 | Float_t GetTrackTheta() const{ return fTrackTheta;} // |
53 | Float_t GetTrackPhi() const{ return fTrackPhi;} // | |
88dd9ad4 | 54 | Float_t GetXPointOnCathode() const{ return fPhotonLimitX;} // |
55 | Float_t GetYPointOnCathode() const{ return fPhotonLimitY;} // | |
56 | Float_t GetThetaPhotonInDRS() const{ return fThetaPhotonInDRS;} // | |
57 | Float_t GetPhiPhotonInDRS() const{ return fPhiPhotonInDRS;} // | |
58 | Float_t GetThetaPhotonInTRS() const{ return fThetaPhotonInTRS;} // | |
59 | Float_t GetPhiPhotonInTRS() const{ return fPhiPhotonInTRS;} // | |
60 | Float_t GetThetaAtQuartz() const{ return fThetaAtQuartz;} // | |
101624cd | 61 | Float_t GetPhiPoint() const{ return fPhiPoint[fPhotonIndex];} // |
88dd9ad4 | 62 | Float_t GetXCoordOfEmission() const{ return fXEmiss;} // |
63 | Float_t GetYCoordOfEmission() const{ return fYEmiss;} // | |
64 | Float_t GetXInnerRing() const{ return fXInner;} // | |
65 | Float_t GetYInnerRing() const{ return fYInner;} // | |
66 | Float_t GetRadiusInnerRing() const{ return fInnerRadius;} // | |
67 | Float_t GetXOuterRing() const{ return fXOuter;} // | |
68 | Float_t GetYOuterRing() const{ return fYOuter;} // | |
69 | Float_t GetRadiusOuterRing() const{ return fOuterRadius;} // | |
70 | Float_t GetShiftX() const{ return fShiftX;} // | |
71 | Float_t GetShiftY() const{ return fShiftY;} // | |
72 | Float_t GetDetectorWhereX() const{ return fXcoord;} // | |
73 | Float_t GetDetectorWhereY() const{ return fYcoord;} // | |
74 | Float_t GetIntersectionX() const{ return fIntersectionX;} // | |
75 | Float_t GetIntersectionY() const{ return fIntersectionY;} // | |
76 | Float_t GetThetaOfRing() const{ return fThetaOfRing;} // | |
77 | Float_t GetAreaOfRing() const{ return fAreaOfRing;} // | |
78 | Float_t GetPortionOfRing() const{ return fPortionOfRing;} // | |
79 | Float_t GetHoughArea() const{ return fHoughArea;} // | |
80 | Float_t GetPhotonEta() const{ return fPhotonEta[fPhotonIndex];} // | |
81 | Float_t GetPhotonWeight() const{ return fPhotonWeight[fPhotonIndex];} // | |
82 | Float_t GetHoughRMS() const{ return fHoughRMS;} // | |
fab9e039 | 83 | Double_t GetPhotBKG() const{ return fnPhotBKG;} // |
88dd9ad4 | 84 | Float_t GetFittedTrackTheta() const{ return fFittedTrackTheta;} // |
85 | Float_t GetFittedTrackPhi() const{ return fFittedTrackPhi;} // | |
86 | Float_t GetFittedThetaCerenkov() const{ return fFittedThetaCerenkov;} // | |
db910db9 | 87 | void SetPhotonEnergy(Float_t e) { fEphot = e;} // |
88dd9ad4 | 88 | void SetEmissionPoint(Float_t LengthEmissionPoint) { fLengthEmissionPoint = LengthEmissionPoint;} // |
88dd9ad4 | 89 | void SetEntranceX(Float_t Xtoentr) { fXtoentr = Xtoentr;} // |
90 | void SetEntranceY(Float_t Ytoentr) { fYtoentr = Ytoentr;} // | |
91 | void SetThetaPhotonInTRS(Float_t Theta) {fThetaPhotonInTRS = Theta;} // | |
92 | void SetPhiPhotonInTRS(Float_t Phi) {fPhiPhotonInTRS = Phi;} // | |
93 | void SetThetaPhotonInDRS(Float_t Theta) {fThetaPhotonInDRS = Theta;} // | |
94 | void SetPhiPhotonInDRS(Float_t Phi) {fPhiPhotonInDRS = Phi;} // | |
95 | void SetThetaAtQuartz(Float_t ThetaAtQuartz) {fThetaAtQuartz = ThetaAtQuartz;} // | |
101624cd | 96 | void SetPhiPoint(Float_t PhiPoint){ fPhiPoint[fPhotonIndex] = PhiPoint;} // |
88dd9ad4 | 97 | void SetXCoordOfEmission(Float_t XEmiss) {fXEmiss = XEmiss;} // |
98 | void SetYCoordOfEmission(Float_t YEmiss) {fYEmiss = YEmiss;} // | |
99 | void SetXPointOnCathode(Float_t PhotonLimitX) { fPhotonLimitX = PhotonLimitX;} // | |
100 | void SetYPointOnCathode(Float_t PhotonLimitY) { fPhotonLimitY = PhotonLimitY;} // | |
101 | void SetXInnerRing(Float_t XInner) {fXInner = XInner;} // | |
102 | void SetYInnerRing(Float_t YInner) {fYInner = YInner;} // | |
103 | void SetRadiusInnerRing(Float_t InnerRadius) {fInnerRadius = InnerRadius;} // | |
104 | void SetXOuterRing(Float_t XOuter) {fXOuter = XOuter;} // | |
105 | void SetYOuterRing(Float_t YOuter) {fYOuter = YOuter;} // | |
106 | void SetRadiusOuterRing(Float_t OuterRadius) {fOuterRadius = OuterRadius;} // | |
107 | void SetThetaCerenkov(Float_t ThetaCer) {fThetaCerenkov = ThetaCer;} // | |
108 | void SetThetaPhotonCerenkov(Float_t ThetaPhotCer) {fThetaPhotonCerenkov = ThetaPhotCer;} // | |
88dd9ad4 | 109 | void SetTrackTheta(Float_t TrackTheta) { fTrackTheta = TrackTheta;} // |
110 | void SetTrackPhi(Float_t TrackPhi) { fTrackPhi = TrackPhi;} // | |
88dd9ad4 | 111 | void SetShiftX(Float_t ShiftX) { fShiftX = ShiftX;} // |
112 | void SetShiftY(Float_t ShiftY) { fShiftY = ShiftY;} // | |
113 | void SetDetectorWhereX(Float_t Xcoord) { fXcoord = Xcoord;} // | |
114 | void SetDetectorWhereY(Float_t Ycoord) { fYcoord = Ycoord;} // | |
115 | void SetIntersectionX(Float_t IntersectionX) { fIntersectionX = IntersectionX;} // | |
116 | void SetIntersectionY(Float_t IntersectionY) { fIntersectionY = IntersectionY;} // | |
117 | void SetThetaOfRing(Float_t ThetaOfRing) { fThetaOfRing = ThetaOfRing;} // | |
118 | void SetAreaOfRing(Float_t AreaOfRing) { fAreaOfRing = AreaOfRing;} // | |
119 | void SetPortionOfRing(Float_t PortionOfRing) { fPortionOfRing = PortionOfRing;} // | |
120 | void SetHoughArea(Float_t HoughArea) { fHoughArea = HoughArea;} // | |
121 | void SetPhotonsNumber(Int_t PhotonsNumber) { fPhotonsNumber = PhotonsNumber;} // | |
122 | void SetPhotonIndex(Int_t PhotonIndex) { fPhotonIndex = PhotonIndex;} // | |
123 | void SetPhotonEta(Float_t PhotonEta) { fPhotonEta[fPhotonIndex] = PhotonEta;} // | |
124 | void SetPhotonFlag(Int_t PhotonFlag) { fPhotonFlag[fPhotonIndex] = PhotonFlag;} // | |
125 | void SetPhotonWeight(Float_t PhotonWeight) { fPhotonWeight[fPhotonIndex] = PhotonWeight;} // | |
fab9e039 | 126 | void SetPhotBKG(Double_t nPhotBKG) {fnPhotBKG=nPhotBKG;} // |
88dd9ad4 | 127 | void SetHoughRMS(Float_t HoughRMS) { fHoughRMS = HoughRMS;} // |
88dd9ad4 | 128 | void SetFittedTrackTheta(Float_t FittedTrackTheta) { fFittedTrackTheta = FittedTrackTheta;} // |
129 | void SetFittedTrackPhi(Float_t FittedTrackPhi) { fFittedTrackPhi = FittedTrackPhi;} // | |
130 | void SetFittedThetaCerenkov(Float_t FittedThetaCerenkov) { fFittedThetaCerenkov = FittedThetaCerenkov;}// | |
131 | void SetFittedHoughPhotons(Int_t FittedHoughPhotons) { fFittedHoughPhotons = FittedHoughPhotons;} // | |
88dd9ad4 | 132 | Float_t SnellAngle(Float_t n1, Float_t n2, Float_t theta1); // |
133 | Float_t FromEmissionToCathode(); // | |
134 | ||
b068561d | 135 | protected: |
db910db9 | 136 | TClonesArray *fClusters; //tmp pointer to list of clusters |
137 | AliRICHParam *fParam; //tmp pointer to AliRICHParam instance containing all the parameters needed for proccessing | |
88dd9ad4 | 138 | Int_t fPhotonsNumber; // Number of photons candidate |
139 | Int_t fPhotonIndex; // index of photons | |
140 | Int_t fPhotonFlag[3000]; // flag for photons | |
88dd9ad4 | 141 | Int_t fFittedHoughPhotons; // n. photons after Hough and after minimization |
910735ae | 142 | Int_t fMinNumPhots; // minimum number of photons for a given ring |
998b831f | 143 | |
88dd9ad4 | 144 | Float_t fTrackTheta; // Theta of track at RICH |
145 | Float_t fTrackPhi; // Phi of track at RICH | |
88dd9ad4 | 146 | Float_t fMinDist; // min distance between extrapolated track and MIP |
147 | Float_t fTrackBeta; // beta of the track | |
148 | Float_t fXtoentr; // X entrance to RICH | |
149 | Float_t fYtoentr; // Y entrance to RICH | |
150 | Float_t fThetaPhotonInTRS; // Theta of photon in the Track Reference System (TRS) | |
151 | Float_t fPhiPhotonInTRS; // Phi of photon in TRS | |
152 | Float_t fThetaPhotonInDRS; // Theta of photon in Detector Reference System (DRS) | |
153 | Float_t fPhiPhotonInDRS; // Phi of photon in DRS | |
154 | Float_t fThetaAtQuartz; // Theta at the quartz entrance | |
101624cd | 155 | Float_t fPhiPoint[3000]; // array of phi of ring photons |
88dd9ad4 | 156 | Float_t fXEmiss; // x emission |
157 | Float_t fYEmiss; // y emission | |
158 | Float_t fXInner; // X inner ring | |
159 | Float_t fYInner; // Y inner ring | |
160 | Float_t fXOuter; // X outer ring | |
161 | Float_t fYOuter; // Y outer ring | |
162 | Float_t fInnerRadius; // inner radius | |
163 | Float_t fOuterRadius; // outer radius | |
db910db9 | 164 | Float_t fEphot; // photon energy |
88dd9ad4 | 165 | Float_t fLengthEmissionPoint; // lenght of emmission point |
166 | Float_t fPhotonLimitX; // X phys limit for photon | |
167 | Float_t fPhotonLimitY; // Y phys limit for photon | |
168 | Float_t fDistanceFromCluster; // distance from cluster | |
88dd9ad4 | 169 | Float_t fCerenkovAnglePad; // cherenkov angle of pad |
170 | Float_t fThetaPhotonCerenkov; // theta cerenkov for photon | |
171 | Float_t fShiftX; // x shift to entrance in radiator | |
172 | Float_t fShiftY; // y shift to entrance in radiator | |
173 | Float_t fXcoord; // .. | |
174 | Float_t fYcoord; // .. | |
175 | Float_t fIntersectionX; // .. | |
176 | Float_t fIntersectionY; // .. | |
998b831f | 177 | Float_t fMassHypotesis; // |
88dd9ad4 | 178 | Float_t fThetaOfRing; // theta of ring |
179 | Float_t fAreaOfRing; // area of the ring | |
180 | Float_t fPortionOfRing; // fraction of the accepted ring | |
181 | Float_t fHoughArea; // area Hough | |
182 | Float_t fPhotonEta[3000]; // theta cerenkov of photon candidates | |
183 | Float_t fPhotonWeight[3000]; // weigth | |
184 | Float_t fHoughRMS; // rms Hough | |
185 | Float_t* fCandidatePhotonX; // x photon candidates | |
186 | Float_t* fCandidatePhotonY; // y photon candidates | |
88dd9ad4 | 187 | Float_t fFittedTrackTheta; // theta track after minim. |
188 | Float_t fFittedTrackPhi; // phi track after minim. | |
189 | Float_t fFittedThetaCerenkov; // thetacerenkov after minim. | |
88dd9ad4 | 190 | Float_t fThetaMin,fThetaMax; // min max |
88dd9ad4 | 191 | Bool_t fIsWEIGHT; // flag to consider weight procedure |
192 | Bool_t fIsBACKGROUND; // flag to simulate bkg | |
88dd9ad4 | 193 | Float_t fDTheta; // Step for sliding window |
194 | Float_t fWindowWidth; // Hough width of sliding window | |
195 | ||
196 | Int_t fNumEtaPhotons; // Number of photons | |
197 | Int_t fEtaFlag[3000]; // flag for good photons | |
198 | Float_t fEtaPhotons[3000]; // Cerenkov angle each photon | |
199 | Float_t fWeightPhotons[3000]; // weight for each photon | |
fab9e039 | 200 | Double_t fnPhotBKG; // # estimated BKG photons in the ring |
88dd9ad4 | 201 | Float_t fThetaCerenkov; // Theta angle for Hough |
202 | Float_t fWeightThetaCerenkov; // Theta Cerenkov angle weighted | |
203 | Float_t fThetaPeakPos; // Peak position | |
204 | ||
b068561d | 205 | ClassDef(AliRICHRecon,0) |
5cb4dfc3 | 206 | }; |
207 | ||
208 | #endif // #ifdef AliRICHRecon_cxx | |
209 |