]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HMPID/AliHMPIDRecon.h
HTA (Hidden track algorithm) improved+minors
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDRecon.h
1 #ifndef AliHMPIDRecon_h
2 #define AliHMPIDRecon_h
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //////////////////////////////////////////////////////////////////////////
8 //                                                                      //
9 // AliHMPIDRecon                                                         //
10 //                                                                      //
11 // HMPID class to perfom pattern recognition based on Hough transfrom    //
12 //                                                                      //
13 //////////////////////////////////////////////////////////////////////////
14
15
16 #include <TTask.h>        //base class
17 #include <TVector3.h>     //fields 
18
19 class TClonesArray; //CkovAngle()
20 class AliESDtrack;  //CkovAngle()
21
22 class AliHMPIDRecon : public TTask 
23 {
24 public : 
25              AliHMPIDRecon();
26     virtual ~AliHMPIDRecon()                                                          {}
27
28
29   void     CkovAngle    (AliESDtrack *pTrk,TClonesArray *pCluLst,Double_t nmean             );     //reconstructed Theta Cerenkov
30   Bool_t   FindPhotCkov (Double_t cluX,Double_t cluY,Double_t &thetaCer,Double_t &phiCer    );     //find ckov angle for single photon candidate
31   Double_t FindRingCkov (Int_t iNclus                                                       );     //best ckov for ring formed by found photon candidates
32   Double_t FindRingArea (Double_t ckov                                                      )const;//estimated area of ring in cm^2
33   Int_t    FlagPhot     (Double_t ckov                                                      );     //is photon ckov near most probable track ckov
34   Double_t HoughResponse(                                                                   );     //most probable track ckov angle
35   void     Propagate    (const TVector3  dir,      TVector3 &pos,Double_t z                 )const;//propagate photon alogn the line  
36   void     Refract      (      TVector3 &dir,                    Double_t n1,    Double_t n2)const;//refract photon on the boundary
37   TVector2 TracePhot    (Double_t ckovTh,Double_t ckovPh                                    )const;//trace photon created by track to PC 
38   TVector2 TraceForward (TVector3 dirCkov                                                   )const;//tracing forward a photon from (x,y) to PC
39   void     RecPhot      (TVector3 dirCkov,Double_t &thetaCer,Double_t &phiCer               );     //theta,phi cerenkov reconstructed
40   void     SetTrack     (Double_t xRad,Double_t yRad,Double_t theta,Double_t phi            )
41                                 {fTrkDir.SetMagThetaPhi(1,theta,phi);  fTrkPos.Set(xRad,yRad);}    //set track parameter at RAD
42   void     SetImpPC     (Double_t xPc,Double_t yPc                                          )
43                                 {fPc.Set(xPc,yPc);}                                                //set track impact to PC 
44   Double_t SigLoc       (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to cathode segmetation
45   Double_t SigGeom      (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to unknown photon origin
46   Double_t SigCrom      (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to unknonw photon energy
47   Double_t Sigma2       (Double_t ckovTh,Double_t ckovPh                                    )const;//photon candidate sigma
48   enum ETrackingFlags {kMipDistCut=-9,kMipQdcCut=-5,kNoPhotAccept=-11};
49 // HTA hidden track algorithm
50   Int_t    CkovHiddenTrk    (AliESDtrack *pTrk,TClonesArray *pCluLst,Double_t nmean);              //Pattern recognition without trackinf information
51   void     CluPreFilter     (                                    );                                //Pre clustering filter to cut bkg clusters
52   Bool_t   DoRecHiddenTrk   (                                    );                                //Calling to the fitted procedures
53   Bool_t   FitEllipse       (Double_t &phiRec                    );                                //Fit clusters with a conical section (kTRUE only for ellipses)
54   Bool_t   FitFree          (Double_t phiRec                     );                                //Fit (th,ph) of the track and ckovFit as result
55   Double_t FunConSect       (Double_t *c,Double_t x,Double_t y   );                                //Function of a general conical section
56   void     SetCkovFit       (Double_t ckov                       ) {fCkovFit=ckov;}                //Setter for ckof fitted
57   void     SetTrkFit        (Double_t th,Double_t ph             ) {fThTrkFit = th;fPhTrkFit = ph;}//Setter for (th,ph) of the track
58   void     SetRadXY         (Double_t  x,Double_t y              ) {fRadX = x;fRadY = y;}          //Setter for (th,ph) of the track
59   static void     FunMinEl  (Int_t&/* */,Double_t* /* */,Double_t &f,Double_t *par,Int_t /* */);   //Fit function to find ellipes parameters
60   static void     FunMinPhot(Int_t&/* */,Double_t* /* */,Double_t &f,Double_t *par,Int_t iflag);   //Fit function to minimize thetaCer RMS/Sqrt(n) of n clusters
61   Int_t    IdxMip       ()const {return fIdxMip;}                                                  //Getter index of MIP
62   Double_t MipX         ()const {return fMipX;}                                                    //Getter of x MIP in LORS
63   Double_t MipY         ()const {return fMipY;}                                                    //Getter of y MIP in LORS
64   Double_t MipQ         ()const {return fMipQ;}                                                    //Getter of Q MIP
65   Double_t RadX         ()const {return fRadX;}                                                    //Getter of x at RAD in LORS
66   Double_t RadY         ()const {return fRadY;}                                                    //Getter of y at RAD in LORS
67   Int_t    NClu         ()const {return fNClu;}                                                    //Getter of cluster multiplicity
68   Double_t XClu         (Int_t i)const {return fXClu[i];}                                          //Getter of x clu
69   Double_t YClu         (Int_t i)const {return fYClu[i];}                                          //Getter of y clu
70   Double_t CkovFit      ()const {return fCkovFit;}                                                 //Getter of ckov angle fitted
71   Double_t ThTrkFit     ()const {return fThTrkFit;}                                                //Getter of theta fitted of the track
72   Double_t PhTrkFit     ()const {return fPhTrkFit;}                                                //Getter of phi fitted of the track
73 //
74 protected:
75   Double_t fRadNmean;                          //C6F14 mean refractive index
76   Int_t    fPhotCnt;                           // counter of photons candidate
77   Int_t    fPhotFlag[3000];                    // flags of photon candidates
78   Double_t fPhotCkov[3000];                    // Ckov angles of photon candidates, [rad]
79   Double_t fPhotPhi [3000];                    // phis of photons candidates, [rad]
80   Double_t fPhotWei [3000];                    // weigths of photon candidates
81   Double_t fCkovSigma2;                        // sigma2 of the reconstructed ring
82
83   Bool_t   fIsWEIGHT;                          // flag to consider weight procedure
84   Float_t  fDTheta;                            // Step for sliding window
85   Float_t  fWindowWidth;                       // Hough width of sliding window
86   
87   TVector3 fTrkDir;                            //track direction in LORS at RAD
88   TVector2 fTrkPos;                            //track positon in LORS at RAD
89   TVector2 fPc;                                //track position at PC
90 // HTA hidden track algorithm
91   Double_t fMipX;                              //mip X position for Hidden Track Algorithm  
92   Double_t fMipY;                              //mip Y position for Hidden Track Algorithm
93   Double_t fMipQ;                              //mip Q          for Hidden Track Algorithm
94   Double_t fRadX;                              //rad X position for Hidden Track Algorithm  
95   Double_t fRadY;                              //rad Y position for Hidden Track Algorithm
96   Int_t    fIdxMip;                            //mip index in the clus list
97   Int_t    fNClu;                              //n clusters to fit
98   Double_t fXClu[1000];                        //container for x clus position
99   Double_t fYClu[1000];                        //container for y clus position
100   Double_t fThTrkFit;                          //theta fitted of the track
101   Double_t fPhTrkFit;                          //phi   fitted of the track
102   Double_t fCkovFit;                           //estimated ring Cherenkov angle
103 //
104 private:
105   static const Double_t fgkRadThick;                      //radiator thickness
106   static const Double_t fgkWinThick;                      //window thickness
107   static const Double_t fgkGapThick;                      //proximity gap thickness
108   static const Double_t fgkWinIdx;                        //mean refractive index of WIN material (SiO2) 
109   static const Double_t fgkGapIdx;                        //mean refractive index of GAP material (CH4)
110
111   ClassDef(AliHMPIDRecon,0)
112 };
113
114 #endif // #ifdef AliHMPIDRecon_cxx
115