Correct and clean the vertex retrieval in case of SE or ME analysis
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliCaloTrackMCReader.h
1 #ifndef ALICALOTRACKMCREADER_H
2 #define ALICALOTRACKMCREADER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id:  $ */
6
7 //_________________________________________________________________________
8 // Class for reading data (Kinematics) in order to do prompt gamma 
9 // or other particle  correlations
10 // Separates generated particles into charged (CTS) 
11 // and neutral (PHOS or EMCAL acceptance)
12 //
13 //*-- Author: Gustavo Conesa (LNF-INFN) 
14 //////////////////////////////////////////////////////////////////////////////
15
16 //-- Author: Gustavo Conesa (INFN-LNF)
17
18 // --- ROOT system ---
19 class TArrayI   ;
20 class TParticle ;
21
22 // --- AliRoot system ---
23 #include "AliCaloTrackReader.h" 
24 class AliVCluster ;
25 class AliAODTrack ;
26 class AliAODEvent ;
27 class AliMCEvent  ;
28 class AliVEvent   ;
29
30 class AliCaloTrackMCReader : public AliCaloTrackReader {
31   
32  public: 
33   AliCaloTrackMCReader() ; // ctor
34   virtual ~AliCaloTrackMCReader() ;//virtual dtor
35  private :
36   AliCaloTrackMCReader(const AliCaloTrackMCReader & g) ; // cpy ctor    
37   AliCaloTrackMCReader & operator = (const AliCaloTrackMCReader & g) ;//cpy assignment
38
39 public:
40   void InitParameters();
41   
42   void Print(const Option_t * opt) const; 
43   
44   void SwitchOnPi0Decay()  { fDecayPi0 = kTRUE ; } 
45   void SwitchOffPi0Decay() { fDecayPi0 = kFALSE ; } 
46   Int_t IsPi0DecaySwitchedOn() const { return fDecayPi0 ; } 
47   
48   void AddNeutralParticlesArray(TArrayI & array)  
49   { fNeutralParticlesArray   = new TArrayI(array) ; }
50   TArrayI * GetNeutralParticlesArray() const   {return  fNeutralParticlesArray;}
51   Bool_t SkipNeutralParticles(Int_t pdg) const ;
52   
53   void AddChargedParticlesArray(TArrayI & array)  
54   { fChargedParticlesArray   = new TArrayI(array) ; }
55   TArrayI * GetChargedParticlesArray() const   {return  fChargedParticlesArray;}
56   Bool_t KeepChargedParticles(Int_t pdg) const ;
57
58   void AddStatusArray(TArrayI & array)  
59   { fStatusArray   = new TArrayI(array) ; }
60   TArrayI * GetStatusArray() const   {return  fStatusArray;}
61   
62   void SwitchOnStatusSelection()  {fKeepAllStatus = kFALSE;}
63   void SwitchOffStatusSelection() {fKeepAllStatus = kTRUE;}
64   Bool_t KeepParticleWithStatus(Int_t status) const ;
65   
66   void GetVertex(Double_t v[3]) const ;
67   Double_t* GetVertex(const Int_t evtIndex) const {return fVertex[evtIndex];}
68   void GetVertex(Double_t vertex[3], const Int_t evtIndex) const 
69     {vertex[0]=fVertex[evtIndex][0];  vertex[1]=fVertex[evtIndex][1];  vertex[2]=fVertex[evtIndex][2];}   
70   
71   Bool_t FillInputEvent(const Int_t iEntry, const char * currentFileName) ;
72   AliVEvent*  GetInputEvent() const {return (AliVEvent *) GetMC();}
73   void SetInputOutputMCEvent(AliVEvent* esd, AliAODEvent* aod, AliMCEvent* mc) ;
74   
75   void SetCaloClusterPID(const Int_t pdgCode, AliVCluster *calo) const ;
76   void SetTrackChargeAndPID(const Int_t pdgCode, AliAODTrack *track) const ;
77   
78   void SwitchOnOverlapCheck()  {fCheckOverlap = kTRUE;}
79   void SwitchOffOverlapCheck() {fCheckOverlap = kFALSE;}
80
81   Float_t GetEMCALOverlapAngle()  const {return fEMCALOverlapAngle ;}
82   Float_t GetPHOSOverlapAngle() const {return fPHOSOverlapAngle ;}
83   void SetEMCALOverlapAngle(Float_t angle)  {fEMCALOverlapAngle = angle;}
84   void SetPHOSOverlapAngle(Float_t angle) {fPHOSOverlapAngle = angle;}
85
86  private:
87   
88   void CheckOverlap(const Float_t anglethres, const Int_t imom, Int_t & iPrimary, Int_t & index, TLorentzVector & mom, Int_t & pdg);
89   void MakePi0Decay(TLorentzVector &p0, TLorentzVector &p1, TLorentzVector &p2) const ;//, Double_t &angle); 
90   void FillCalorimeters(Int_t & iParticle, TParticle* particle, TLorentzVector momentum) ;
91   
92   private:
93   Bool_t    fDecayPi0 ;              // If not decayed, decay pi0 by hand
94   TArrayI * fNeutralParticlesArray ; // Do not keep neutral particles of this list in calorimeter.
95   TArrayI * fChargedParticlesArray ; // Keep charged particles of this list in calorimeter.
96   TArrayI * fStatusArray ;           // Keep particles with status of the list.
97   Bool_t    fKeepAllStatus ;         // Do or do not select particles depending on their status code.
98   Bool_t    fCheckOverlap;           // Check of overlapped photons from pi0 enter the calorimeter
99   Float_t   fEMCALOverlapAngle;      // Aperture angle of photons from decay that is not resolved by EMCAL, in radians
100   Float_t   fPHOSOverlapAngle;       // Aperture angle of photons from decay that is not resolved by PHOS, in radians
101   Int_t     fIndex2ndPhoton;         // Check overlap of first decay photon already done, internal use.
102
103   ClassDef(AliCaloTrackMCReader,3)
104 } ;
105
106
107 #endif //ALICALOTRACKMCREADER_H
108
109
110