]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HMPID/AliHMPIDRecon.h
fix AliHLTGlobalEsdConverterComponent
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDRecon.h
index b9ec332db7e00d8f7bbb63ed032a4e47e1e9df48..6a7b5ef5f196b07dbc9c411926ac1b03d2f05758 100644 (file)
 //////////////////////////////////////////////////////////////////////////
 
 
-#include <TTask.h>        //base class
+#include <TNamed.h>        //base class
 #include <TVector3.h>     //fields 
 
 class TClonesArray; //CkovAngle()
 class AliESDtrack;  //CkovAngle()
+class AliHMPIDParam;//general pourpose
 
-class AliHMPIDRecon : public TTask 
+class AliHMPIDRecon : public TNamed 
 {
 public : 
              AliHMPIDRecon();
-    virtual ~AliHMPIDRecon()                                                          {}
+    virtual ~AliHMPIDRecon() {;} //dtor
 
-  
-  void     CkovAngle    (AliESDtrack *pTrk,TClonesArray *pCluLst,Double_t nmean             );                           //reconstructed Theta Cerenkov
-  Double_t FindPhotCkov (Double_t cluX,Double_t cluY                                        );     //find ckov angle for single photon candidate
-  Double_t FindPhotPhi  (Double_t cluX,Double_t cluY                                        );     //find phi angle for single photon candidate
+  void     InitVars     (Int_t n);                                                                 //init space for variables
+  void     DeleteVars   ()const;                                                                   //delete variables
+  void     CkovAngle    (AliESDtrack *pTrk,TClonesArray *pCluLst,Int_t index,Double_t nmean,Float_t xRa,Float_t yRa );//reconstructed Theta Cerenkov
+  Bool_t   FindPhotCkov (Double_t cluX,Double_t cluY,Double_t &thetaCer,Double_t &phiCer    );     //find ckov angle for single photon candidate
   Double_t FindRingCkov (Int_t iNclus                                                       );     //best ckov for ring formed by found photon candidates
-  Double_t FindRingArea (Double_t ckov                                                      )const;//estimated area of ring in cm^2
-  Int_t    FlagPhot     (Double_t ckov                                                      );     //is photon ckov near most probable track ckov
+  void     FindRingGeom (Double_t ckovAng,Int_t level=1                                     );     //estimated area of ring in cm^2 and portion accepted by geometry
+  TVector2 IntWithEdge  (TVector2 p1,TVector2 p2                                            )const;//find intercection between plane and lines of 2 thetaC
+  Int_t    FlagPhot     (Double_t ckov,TClonesArray *pCluLst,AliESDtrack *pTrk              );     //is photon ckov near most probable track ckov
   Double_t HoughResponse(                                                                   );     //most probable track ckov angle
-  void     Propagate    (const TVector3 &dir,      TVector3 &pos,Double_t z                 )const;//propagate photon alogn the line  
+  void     Propagate    (const TVector3  dir,      TVector3 &pos,Double_t z                 )const;//propagate photon alogn the line  
   void     Refract      (      TVector3 &dir,                    Double_t n1,    Double_t n2)const;//refract photon on the boundary
-  Double_t TracePhot    (Double_t ckovTh,Double_t ckovPh,TVector2 &pos                      )const;//trace photon created by track to PC 
-  void     SetTrack     (Double_t x,Double_t y,Double_t theta,Double_t phi                  ){fTrkDir.SetMagThetaPhi(1,theta,phi);  fTrkPos.Set(x,y);}//set track
-  Double_t SigLoc       (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to cathode segmetation
-  Double_t SigGeom      (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to unknown photon origin
-  Double_t SigCrom      (Double_t ckovTh,Double_t ckovPh,Double_t beta                      )const;//error due to unknonw photon energy
-  Double_t Sigma2       (Double_t ckovTh,Double_t ckovPh                                    )const;//photon candidate sigma
-  enum ETrackingFlags {kMipDistCut=-9,kMipQdcCut=-5,kNoPhotAccept=-11};
+  TVector2 TracePhot    (Double_t ckovTh,Double_t ckovPh                                    )const;//trace photon created by track to PC 
+  void     AddObjectToFriends(TClonesArray *pCluLst, Int_t photonIndex, AliESDtrack *pTrk   );     // Add AliHMPIDCluster object to ESD friends
+  TVector2 TraceForward (TVector3 dirCkov                                                   )const;//tracing forward a photon from (x,y) to PC
+  void     Lors2Trs     (TVector3 dirCkov,Double_t &thetaCer,Double_t &phiCer               )const;//LORS to TRS 
+  void     Trs2Lors     (TVector3 dirCkov,Double_t &thetaCer,Double_t &phiCer               )const;//TRS to LORS
+  TVector2 GetMip       (                                                                   )const 
+                        {return fMipPos;}                                                          //mip coordinates
+  Double_t GetRingArea  (                                                                   )const
+                        {return fRingArea;}                                                        //area of the current ring in cm^2 
+  Double_t GetRingAcc   (                                                                   )const
+                        {return fRingAcc;}                                                         //portion of the ring ([0,1]) accepted by geometry.To scale n. of photons 
+  Double_t FindRingExt  (Double_t ckov,Int_t ch,Double_t xPc,Double_t yPc,Double_t thRa,Double_t phRa);//find ring acceptance by external parameters
+  void     SetTrack     (Double_t xRad,Double_t yRad,Double_t theta,Double_t phi            )
+                                {fTrkDir.SetMagThetaPhi(1,theta,phi);  fTrkPos.Set(xRad,yRad);}    //set track parameter at RAD
+  void     SetImpPC     (Double_t xPc,Double_t yPc                                          )
+                                {fPc.Set(xPc,yPc);}                                                //set track impact to PC 
+  void     SetMip       (Double_t xmip,Double_t ymip                                        )
+                                {fMipPos.Set(xmip,ymip);}                                          //set track impact to PC
+  enum ETrackingFlags {kNotPerformed=-20,kMipDistCut=-9,kMipQdcCut=-5,kNoPhotAccept=-11,kNoRad = -22};
+//
 protected:
-  static const Double_t fgkRadThick;                      //radiator thickness
-  static const Double_t fgkWinThick;                      //window thickness
-  static const Double_t fgkGapThick;                      //proximity gap thickness
-  static const Double_t fgkWinIdx;                        //mean refractive index of WIN material (SiO2) 
-  static const Double_t fgkGapIdx;                        //mean refractive index of GAP material (CH4)
-  Double_t fRadNmean;                          //C6F14 mean refractive index
-  Int_t    fPhotCnt;                           // counter of photons candidate
-  Int_t    fPhotFlag[3000];                    // flags of photon candidates
-  Double_t fPhotCkov[3000];                    // Ckov angles of photon candidates, [rad]
-  Double_t fPhotPhi [3000];                    // phis of photons candidates, [rad]
-  Double_t fPhotWei [3000];                    // weigths of photon candidates
-  Double_t fCkovSigma2;                        // sigma2 of the reconstructed ring
+  Int_t     fPhotCnt;                           // counter of photons candidate
+  Int_t    *fPhotFlag;                          // flags of photon candidates
+  Int_t    *fPhotClusIndex;                     // cluster index of photon candidates
+  Double_t *fPhotCkov;                          // Ckov angles of photon candidates, [rad]
+  Double_t *fPhotPhi;                           // phis of photons candidates, [rad]
+  Double_t *fPhotWei;                           // weigths of photon candidates
+  Double_t  fCkovSigma2;                        // sigma2 of the reconstructed ring
 
-  Bool_t  fIsWEIGHT;                          // flag to consider weight procedure
-  Float_t fDTheta;                            // Step for sliding window
-  Float_t fWindowWidth;                       // Hough width of sliding window
+  Bool_t    fIsWEIGHT;                          // flag to consider weight procedure
+  Float_t   fDTheta;                            // Step for sliding window
+  Float_t   fWindowWidth;                       // Hough width of sliding window
+  
+  Double_t  fRingArea;                          // area of a given ring
+  Double_t  fRingAcc;                           // fraction of the ring accepted by geometry
+  TVector3  fTrkDir;                            // track direction in LORS at RAD
+  TVector2  fTrkPos;                            // track positon in LORS at RAD
+  TVector2  fMipPos;                            // mip positon for a given track
+  TVector2  fPc;                                // track position at PC
+  
+  AliHMPIDParam *fParam;                        // Pointer to AliHMPIDParam
   
-  TVector3 fTrkDir;                           //track direction in LORS
-  TVector2 fTrkPos;                           //track positon in LORS at the middle of radiator
-  ClassDef(AliHMPIDRecon,0)
+private:
+  AliHMPIDRecon(const AliHMPIDRecon& r);              //dummy copy constructor
+  AliHMPIDRecon &operator=(const AliHMPIDRecon& r);   //dummy assignment operator
+//
+  ClassDef(AliHMPIDRecon,3)
 };
 
 #endif // #ifdef AliHMPIDRecon_cxx