new design: derived from TTask
[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 PPSD and EMC
12 // Oh yeah                 
13 //*-- Author: Yves Schutz (SUBATECH)
14
15 // --- ROOT system ---
16 class TFormula ;
17 class TVector3 ;
18
19 // --- Standard library ---
20
21 // --- AliRoot header files ---
22 class AliPHOSEmcRecPoint ;
23 class AliPHOSRecPoint ;
24
25 #include "AliPHOSPID.h"
26
27 class  AliPHOSPIDv1 : public AliPHOSPID {
28
29 public:
30
31   AliPHOSPIDv1() ;          // ctor            
32   AliPHOSPIDv1(const char* headerFile, const char * tsBranch = 0) ;
33   virtual ~AliPHOSPIDv1() ; // dtor
34
35   virtual void Exec(Option_t * option);
36   virtual char * GetRecParticlesBranch()const {return (char*) fRecparticlesTitle.Data() ;}      
37   virtual char * GetTrackSegmentsBranch()const{return (char*) fTSTitle.Data(); }
38
39   virtual void Init() ;
40
41   virtual void PlotDispersionCuts()const ;
42
43   virtual void Print(Option_t * option)const ; 
44   
45   virtual Bool_t ReadTrackSegments() ;
46
47   virtual void SetIdentificationMethod(char * option = "CPV DISP" ){fIDOptions = option ;} 
48
49   virtual void SetShowerProfileCut(char * formula = 
50                                    "0.35*0.35 - (x-1.386)*(x-1.386) - 1.707*1.707*(y-1.008)*(y-1.008)") ;
51
52   virtual void SetDispersionCut(Float_t cut){fDispersion = cut ; } 
53   virtual void SetCpvtoEmcDistanceCut(Float_t cut ) {fCpvEmcDistance = cut ;}
54   virtual void SetTrackSegmentsBranch(const char* title) { fTSTitle = title;}
55   virtual void SetRecParticlesBranch (const char* title) { fRecparticlesTitle = title;} 
56
57   virtual void WriteRecParticles() ; 
58                      
59
60  private:
61   void     MakeRecParticles(void ) ;
62   Float_t  GetDistance(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv, Option_t * Axis)const ; 
63                                      // Relative Distance PPSD-EMC
64   TVector3 GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv, AliPHOSRecPoint * ppsd)const ;
65
66   void     PrintRecParticles(Option_t * option) ;
67
68  private:
69
70   TString                fHeaderFileName ;
71   TString                fTSTitle;
72   TString                fRecPointsTitle ;
73   TString                fRecparticlesTitle ;
74
75   TString                fIDOptions ;
76
77   Int_t                  fNEvent ;
78   TObjArray            * fEmcRecPoints ;  // ! initial EMC RecPoints
79   TObjArray            * fCpvRecPoints ;  // ! initial CPV RecPoints
80   TClonesArray         * fTrackSegments;  // ! initial list of TrackSegments
81   TClonesArray         * fRecParticles ;  // ! output
82
83   AliPHOSClusterizer   * fClusterizer ;    // !
84   AliPHOSTrackSegmentMaker * fTSMaker ;    // !
85
86   AliPHOSGeometry      * fGeom ;           // !pointer to PHOS geometry  
87   TFormula             * fFormula ;        // formula to define cut on the shouer elips axis
88   Float_t                fDispersion ;     // dispersion cut
89   Float_t                fCpvEmcDistance ; 
90
91   Bool_t                 fIsInitialized ;
92
93
94
95
96   ClassDef( AliPHOSPIDv1,1)  // Particle identifier implementation version 1
97
98 };
99
100 #endif // AliPHOSPIDV1_H