New PID version that uses TPrincipal
[u/mrichter/AliRoot.git] / PHOS / AliPHOSPIDv1.h
1 #ifndef ALIPHOSPIDV1_H
2 #define ALIPHOSPIDV1_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8
9 //_________________________________________________________________________
10 // Implementation version v1 of the PHOS particle identifier 
11 // Identification is based on information from CPV and EMC
12 // Oh yeah                 
13 //*-- Author: Yves Schutz (SUBATECH), Gustavo Conesa.
14
15 // --- ROOT system ---
16 //class TFormula ;
17 class TVector3 ;
18 class TMatrixD ;
19 class TPrincipal ;
20
21 // --- Standard library ---
22
23 // --- AliRoot header files ---
24 class AliPHOSEmcRecPoint ;
25 class AliPHOSRecPoint ;
26
27 #include "AliPHOSPID.h"
28
29 class  AliPHOSPIDv1 : public AliPHOSPID {
30
31 public:
32
33   AliPHOSPIDv1() ;          // ctor            
34   AliPHOSPIDv1(const char* headerFile, const char * tsBranch = "Default", const char * from = 0) ;
35   virtual ~AliPHOSPIDv1() ; // dtor
36
37   virtual void Exec(Option_t * option);
38   virtual char * GetRecParticlesBranch()const {return (char*) fRecParticlesTitle.Data() ;}      
39   virtual char * GetTrackSegmentsBranch()const{return (char*) fTrackSegmentsTitle.Data(); }
40   virtual const Int_t GetRecParticlesInRun() const  {return fRecParticlesInRun ;}  
41  
42   virtual void Print(Option_t * option)const ;
43   // Get CpvtoEmcDistanceCut and TimeGate parameters depending on the custer energy and 
44   // Purity-Efficiency point (possible options "HIGH EFFICIENCY" "MEDIUM EFFICIENCY" "LOW  
45   // EFFICIENCY" and 3 more options changing EFFICIENCY by PURITY)
46   Double_t GetCpvtoEmcDistanceCut(const Float_t Cluster_En, const TString Eff_Pur)const  ;
47   Double_t GetTimeGate(const Float_t Cluster_En, const TString Eff_Pur)const  ;
48
49   // Set all parameters necessary in the PID depending on the custer energy and 
50   // Purity-Efficiency point (possible options "HIGH EFFICIENCY" "MEDIUM EFFICIENCY" "LOW  
51   // EFFICIENCY" and 3 more options changing EFFICIENCY by PURITY)
52   void SetCpvtoEmcDistanceCut(Float_t Cluster_En, TString Eff_Pur, Float_t cut)  ; 
53   void SetTimeGate(Float_t Cluster_En, TString Eff_Pur, Float_t gate)  ; 
54   void SetEllipseXCenter(Float_t Cluster_En, TString Eff_Pur, Float_t x)  ;    
55   void SetEllipseYCenter(Float_t Cluster_En, TString Eff_Pur, Float_t y)  ;   
56   void SetEllipseAParameter(Float_t Cluster_En, TString Eff_Pur, Float_t a)  ;  
57   void SetEllipseBParameter(Float_t Cluster_En, TString Eff_Pur, Float_t b)  ; 
58   void SetEllipseAngle(Float_t Cluster_En, TString Eff_Pur, Float_t angle)  ;    
59   void SetEllipseParameters(Float_t Cluster_En, TString Eff_Pur, Float_t x, Float_t y,Float_t a, Float_t b,Float_t angle) ;  
60   
61   
62   virtual void SetTrackSegmentsBranch(const char* title) { fTrackSegmentsTitle = title;}
63   virtual void SetRecParticlesBranch (const char* title) { fRecParticlesTitle = title;} 
64   virtual const char * Version() const { return "pid-v1" ; }  
65   
66  private:
67
68   virtual void Init() ;
69   void     MakeRecParticles(void ) ;
70   Float_t  GetDistance(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv, Option_t * Axis)const ; // Relative Distance CPV-EMC
71   Int_t    GetPrincipalSign(Double_t* P, Int_t ell, Int_t eff_pur)const ; //Principal cut
72   TVector3 GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv)const ;
73   void     PrintRecParticles(Option_t * option) ;
74   virtual void WriteRecParticles(Int_t event) ; 
75
76  private:
77
78   TString                fFrom ;              // name of Recpoints and TrackSegments 
79   TString                fHeaderFileName ;    // file name with event header
80   TString                fTrackSegmentsTitle; // branch name with track segments
81   TString                fRecPointsTitle ;    // branch name with rec points
82   TString                fRecParticlesTitle ; // branch name with rec particles
83  
84   Int_t                  fNEvent ;            // current event number
85
86   AliPHOSClusterizer   * fClusterizer ;       //!
87   AliPHOSTrackSegmentMaker * fTSMaker ;       //!
88   TPrincipal           * fPrincipal ;         //
89   
90
91
92
93
94   Int_t                  fRecParticlesInRun ; //! Total number of recparticles in one run
95
96   Double_t*              fX ; //! Principal data 
97   Double_t*              fP ; //! Principal eigenvalues
98
99   TMatrixD*              fParameters ;//! Matrix of all identification Parameters
100   TString                fFileName ; // Name of the file which contains the Principal file
101   TString                fFileNamePar ; //Name of the file which contains the parameters
102  
103   ClassDef( AliPHOSPIDv1,2)  // Particle identifier implementation version 1
104
105 };
106
107 #endif // AliPHOSPIDV1_H