]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrBase/AliCaloTrackMCReader.h
Move from ESD and AOD readers the common methods for centrality, v0 and B field acces...
[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 // Now, it only works with data stored in Kinematics.root and 
14 // not in filtered Kinematics branch in AODs
15 //
16 //*-- Author: Gustavo Conesa (LNF-INFN) 
17 //////////////////////////////////////////////////////////////////////////////
18
19 //-- Author: Gustavo Conesa (INFN-LNF)
20
21 // --- ROOT system ---
22 class TArrayI   ;
23 class TParticle ;
24
25 // --- AliRoot system ---
26 #include "AliCaloTrackReader.h" 
27 class AliVCluster ;
28 class AliAODTrack ;
29 class AliAODEvent ;
30 class AliMCEvent  ;
31 class AliVEvent   ;
32
33 class AliCaloTrackMCReader : public AliCaloTrackReader {
34   
35  public: 
36   AliCaloTrackMCReader() ; // ctor
37   virtual ~AliCaloTrackMCReader() ;//virtual dtor
38  private :
39   AliCaloTrackMCReader(const AliCaloTrackMCReader & g) ; // cpy ctor    
40   AliCaloTrackMCReader & operator = (const AliCaloTrackMCReader & g) ;//cpy assignment
41
42 public:
43   void   InitParameters();
44   
45   void   Print(const Option_t * opt) const; 
46   
47   void   SwitchOnPi0Decay()           { fDecayPi0 = kTRUE  ; } 
48   void   SwitchOffPi0Decay()          { fDecayPi0 = kFALSE ; } 
49   Int_t  IsPi0DecaySwitchedOn() const { return fDecayPi0   ; } 
50   
51   void      AddNeutralParticlesArray(TArrayI & array)  
52       { fNeutralParticlesArray   = new TArrayI(array) ; }
53   TArrayI * GetNeutralParticlesArray()      const {return  fNeutralParticlesArray;}
54   Bool_t    SkipNeutralParticles(Int_t pdg) const ;
55   
56   void      AddChargedParticlesArray(TArrayI & array)  
57       { fChargedParticlesArray   = new TArrayI(array) ; }
58   TArrayI * GetChargedParticlesArray()   const {return  fChargedParticlesArray;}
59   Bool_t    KeepChargedParticles(Int_t pdg) const ;
60
61   void AddStatusArray(TArrayI & array)  
62       { fStatusArray   = new TArrayI(array) ; }
63   TArrayI * GetStatusArray()             const {return  fStatusArray;}
64   
65   void   SwitchOnStatusSelection()  { fKeepAllStatus = kFALSE ; }
66   void   SwitchOffStatusSelection() { fKeepAllStatus = kTRUE  ; }
67   Bool_t KeepParticleWithStatus(Int_t status) const ;
68   
69   void   SwitchOnOnlyGeneratorParticles()  {fOnlyGeneratorParticles = kTRUE  ; }
70   void   SwitchOffOnlyGeneratorParticles() {fOnlyGeneratorParticles = kFALSE ; }
71   
72   void      GetVertex(Double_t v[3]) const ;
73   Double_t* GetVertex(const Int_t evtIndex) const {return fVertex[evtIndex];}
74   void      GetVertex(Double_t vertex[3], const Int_t evtIndex) const 
75     {vertex[0]=fVertex[evtIndex][0];  vertex[1]=fVertex[evtIndex][1];  vertex[2]=fVertex[evtIndex][2];}   
76   
77   Bool_t FillInputEvent(const Int_t iEntry, const char * currentFileName) ;
78   AliVEvent*  GetInputEvent() const {return (AliVEvent *) GetMC();}
79   void   SetInputOutputMCEvent(AliVEvent* esd, AliAODEvent* aod, AliMCEvent* mc) ;
80   
81   void   SetCaloClusterPID(const Int_t pdgCode, AliVCluster *calo)     const ;
82   void   SetTrackChargeAndPID(const Int_t pdgCode, AliAODTrack *track) const ;
83   
84   void   SwitchOnOverlapCheck()  {fCheckOverlap = kTRUE  ; }
85   void   SwitchOffOverlapCheck() {fCheckOverlap = kFALSE ; }
86
87   Float_t GetEMCALOverlapAngle() const {return fEMCALOverlapAngle ; }
88   Float_t GetPHOSOverlapAngle()  const {return fPHOSOverlapAngle  ; }
89   void    SetEMCALOverlapAngle(Float_t angle)  {fEMCALOverlapAngle = angle ; }
90   void    SetPHOSOverlapAngle(Float_t angle)   {fPHOSOverlapAngle  = angle ; }
91     
92  private:
93   
94   void   CheckOverlap(const Float_t anglethres, const Int_t imom, Int_t & iPrimary, Int_t & index, TLorentzVector & mom, Int_t & pdg);
95   void   MakePi0Decay(TLorentzVector &p0, TLorentzVector &p1, TLorentzVector &p2) const ;//, Double_t &angle); 
96   void   FillCalorimeters(Int_t & iParticle, TParticle* particle, TLorentzVector & momentum) ;
97   
98   private:
99   Bool_t    fDecayPi0 ;              // If not decayed, decay pi0 by hand
100   TArrayI * fNeutralParticlesArray ; // Do not keep neutral particles of this list in calorimeter.
101   TArrayI * fChargedParticlesArray ; // Keep charged particles of this list in calorimeter.
102   TArrayI * fStatusArray ;           // Keep particles with status of the list.
103   Bool_t    fKeepAllStatus ;         // Do or do not select particles depending on their status code.
104   Bool_t    fCheckOverlap;           // Check of overlapped photons from pi0 enter the calorimeter
105   Float_t   fEMCALOverlapAngle;      // Aperture angle of photons from decay that is not resolved by EMCAL, in radians
106   Float_t   fPHOSOverlapAngle;       // Aperture angle of photons from decay that is not resolved by PHOS, in radians
107   Int_t     fIndex2ndPhoton;         // Check overlap of first decay photon already done, internal use.
108   Bool_t    fOnlyGeneratorParticles; // Use particles only generated by PYTHIA/HERWIG/... and not by the MC tranport G3/G4/FLUKA ...
109   
110   ClassDef(AliCaloTrackMCReader,4)
111 } ;
112
113
114 #endif //ALICALOTRACKMCREADER_H
115
116
117