ROOT logo
#ifndef ALICALOTRACKMCREADER_H
#define ALICALOTRACKMCREADER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

//_________________________________________________________________________
// Class for reading data (Kinematics) in order to do prompt gamma 
// or other particle  correlations
// Separates generated particles into charged (CTS) 
// and neutral (PHOS or EMCAL acceptance)
//
// Now, it only works with data stored in Kinematics.root and 
// not in filtered Kinematics branch in AODs
//
//*-- Author: Gustavo Conesa (LNF-INFN) 
//////////////////////////////////////////////////////////////////////////////

//-- Author: Gustavo Conesa (INFN-LNF)

// --- ROOT system ---
class TArrayI   ;
class TParticle ;

// --- AliRoot system ---
#include "AliCaloTrackReader.h" 
class AliVCluster ;
class AliAODTrack ;
class AliAODEvent ;
class AliMCEvent  ;
class AliVEvent   ;

class AliCaloTrackMCReader : public AliCaloTrackReader {
  
 public: 
  
  AliCaloTrackMCReader() ;          // ctor
  virtual ~AliCaloTrackMCReader() ; // virtual dtor

  // Main methos in source file
  
  void   CheckOverlap(Float_t anglethres, Int_t imom, Int_t & iPrimary, Int_t & index, Int_t & pdg);

  void   FillCalorimeters(Int_t & iParticle, TParticle* particle) ;

  Bool_t FillInputEvent(Int_t iEntry, const char * currentFileName) ;
  
  void   InitParameters();
  
  void   MakePi0Decay() ;//, Double_t &angle);

  void   Print(const Option_t * opt) const; 
  
  void   SetCaloClusterPID   (Int_t pdgCode, AliVCluster *calo ) const ;
  
  void   SetTrackChargeAndPID(Int_t pdgCode, AliAODTrack *track) const ;
  
  void   SetInputOutputMCEvent(AliVEvent* esd, AliAODEvent* aod, AliMCEvent* mc) ;

  // Data members setters and getters
  
  AliVEvent*  GetInputEvent()               const { return (AliVEvent *) GetMC()   ; }
  
  void      GetVertex(Double_t v[3]) const ;
  Double_t* GetVertex(Int_t evtIndex) const {return fVertex[evtIndex];}
  void      GetVertex(Double_t vertex[3], Int_t evtIndex) const 
  { vertex[0]=fVertex[evtIndex][0];  vertex[1]=fVertex[evtIndex][1];  vertex[2]=fVertex[evtIndex][2]; }  
  
  // Particle type, status, arrays 
  void      AddNeutralParticlesArray(TArrayI & array)  
      { fNeutralParticlesArray   = new TArrayI(array) ; }
  TArrayI * GetNeutralParticlesArray()      const { return  fNeutralParticlesArray ; }
  Bool_t    SkipNeutralParticles(Int_t pdg) const ;
  
  void      AddChargedParticlesArray(TArrayI & array)  
      { fChargedParticlesArray   = new TArrayI(array) ; }
  TArrayI * GetChargedParticlesArray()      const { return  fChargedParticlesArray ; }
  Bool_t    KeepChargedParticles(Int_t pdg) const ;

  void      AddStatusArray(TArrayI & array)  
      { fStatusArray   = new TArrayI(array) ; }
  TArrayI * GetStatusArray()                const { return  fStatusArray           ; }
  
  void      SwitchOnStatusSelection()             { fKeepAllStatus = kFALSE        ; }
  void      SwitchOffStatusSelection()            { fKeepAllStatus = kTRUE         ; }
  Bool_t    KeepParticleWithStatus(Int_t status) const ;
  
  void      SwitchOnOnlyGeneratorParticles()      { fOnlyGeneratorParticles = kTRUE  ; }
  void      SwitchOffOnlyGeneratorParticles()     { fOnlyGeneratorParticles = kFALSE ; }
  
  // Pi0 Overlapps, decays 
  
  void      SwitchOnPi0Decay()                    { fDecayPi0 = kTRUE              ; } 
  void      SwitchOffPi0Decay()                   { fDecayPi0 = kFALSE             ; } 
  Int_t     IsPi0DecaySwitchedOn()          const { return fDecayPi0               ; }   
  
  void      SwitchOnOverlapCheck()                { fCheckOverlap = kTRUE          ; }
  void      SwitchOffOverlapCheck()               { fCheckOverlap = kFALSE         ; }

  Float_t   GetEMCALOverlapAngle()          const { return fEMCALOverlapAngle      ; }
  void      SetEMCALOverlapAngle(Float_t angle)   { fEMCALOverlapAngle = angle     ; }
  
  Float_t   GetPHOSOverlapAngle()           const { return fPHOSOverlapAngle       ; }
  void      SetPHOSOverlapAngle (Float_t angle)   { fPHOSOverlapAngle  = angle     ; }
    
  
private:

  Bool_t    fDecayPi0 ;              // If not decayed, decay pi0 by hand
  TArrayI * fNeutralParticlesArray ; // Do not keep neutral particles of this list in calorimeter.
  TArrayI * fChargedParticlesArray ; // Keep charged particles of this list in calorimeter.
  TArrayI * fStatusArray ;           // Keep particles with status of the list.
  Bool_t    fKeepAllStatus ;         // Do or do not select particles depending on their status code.
  Bool_t    fCheckOverlap;           // Check of overlapped photons from pi0 enter the calorimeter
  Float_t   fEMCALOverlapAngle;      // Aperture angle of photons from decay that is not resolved by EMCAL, in radians
  Float_t   fPHOSOverlapAngle;       // Aperture angle of photons from decay that is not resolved by PHOS, in radians
  Int_t     fIndex2ndPhoton;         // Check overlap of first decay photon already done, internal use.
  Bool_t    fOnlyGeneratorParticles; // Use particles only generated by PYTHIA/HERWIG/... and not by the MC tranport G3/G4/FLUKA ...
  
  TLorentzVector fMomentum;          //! momentum
  TLorentzVector fPi0Momentum;       //! Pi0 momentum
  TLorentzVector fGamDecayMom1;      //! Gamma decay 1 momentum
  TLorentzVector fGamDecayMom2;      //! Gamma decay 2 momentum
  
  AliCaloTrackMCReader(              const AliCaloTrackMCReader & r) ; // cpy ctor	
  AliCaloTrackMCReader & operator = (const AliCaloTrackMCReader & r) ; // cpy assignment
  
  ClassDef(AliCaloTrackMCReader,5)
} ;


#endif //ALICALOTRACKMCREADER_H



 AliCaloTrackMCReader.h:1
 AliCaloTrackMCReader.h:2
 AliCaloTrackMCReader.h:3
 AliCaloTrackMCReader.h:4
 AliCaloTrackMCReader.h:5
 AliCaloTrackMCReader.h:6
 AliCaloTrackMCReader.h:7
 AliCaloTrackMCReader.h:8
 AliCaloTrackMCReader.h:9
 AliCaloTrackMCReader.h:10
 AliCaloTrackMCReader.h:11
 AliCaloTrackMCReader.h:12
 AliCaloTrackMCReader.h:13
 AliCaloTrackMCReader.h:14
 AliCaloTrackMCReader.h:15
 AliCaloTrackMCReader.h:16
 AliCaloTrackMCReader.h:17
 AliCaloTrackMCReader.h:18
 AliCaloTrackMCReader.h:19
 AliCaloTrackMCReader.h:20
 AliCaloTrackMCReader.h:21
 AliCaloTrackMCReader.h:22
 AliCaloTrackMCReader.h:23
 AliCaloTrackMCReader.h:24
 AliCaloTrackMCReader.h:25
 AliCaloTrackMCReader.h:26
 AliCaloTrackMCReader.h:27
 AliCaloTrackMCReader.h:28
 AliCaloTrackMCReader.h:29
 AliCaloTrackMCReader.h:30
 AliCaloTrackMCReader.h:31
 AliCaloTrackMCReader.h:32
 AliCaloTrackMCReader.h:33
 AliCaloTrackMCReader.h:34
 AliCaloTrackMCReader.h:35
 AliCaloTrackMCReader.h:36
 AliCaloTrackMCReader.h:37
 AliCaloTrackMCReader.h:38
 AliCaloTrackMCReader.h:39
 AliCaloTrackMCReader.h:40
 AliCaloTrackMCReader.h:41
 AliCaloTrackMCReader.h:42
 AliCaloTrackMCReader.h:43
 AliCaloTrackMCReader.h:44
 AliCaloTrackMCReader.h:45
 AliCaloTrackMCReader.h:46
 AliCaloTrackMCReader.h:47
 AliCaloTrackMCReader.h:48
 AliCaloTrackMCReader.h:49
 AliCaloTrackMCReader.h:50
 AliCaloTrackMCReader.h:51
 AliCaloTrackMCReader.h:52
 AliCaloTrackMCReader.h:53
 AliCaloTrackMCReader.h:54
 AliCaloTrackMCReader.h:55
 AliCaloTrackMCReader.h:56
 AliCaloTrackMCReader.h:57
 AliCaloTrackMCReader.h:58
 AliCaloTrackMCReader.h:59
 AliCaloTrackMCReader.h:60
 AliCaloTrackMCReader.h:61
 AliCaloTrackMCReader.h:62
 AliCaloTrackMCReader.h:63
 AliCaloTrackMCReader.h:64
 AliCaloTrackMCReader.h:65
 AliCaloTrackMCReader.h:66
 AliCaloTrackMCReader.h:67
 AliCaloTrackMCReader.h:68
 AliCaloTrackMCReader.h:69
 AliCaloTrackMCReader.h:70
 AliCaloTrackMCReader.h:71
 AliCaloTrackMCReader.h:72
 AliCaloTrackMCReader.h:73
 AliCaloTrackMCReader.h:74
 AliCaloTrackMCReader.h:75
 AliCaloTrackMCReader.h:76
 AliCaloTrackMCReader.h:77
 AliCaloTrackMCReader.h:78
 AliCaloTrackMCReader.h:79
 AliCaloTrackMCReader.h:80
 AliCaloTrackMCReader.h:81
 AliCaloTrackMCReader.h:82
 AliCaloTrackMCReader.h:83
 AliCaloTrackMCReader.h:84
 AliCaloTrackMCReader.h:85
 AliCaloTrackMCReader.h:86
 AliCaloTrackMCReader.h:87
 AliCaloTrackMCReader.h:88
 AliCaloTrackMCReader.h:89
 AliCaloTrackMCReader.h:90
 AliCaloTrackMCReader.h:91
 AliCaloTrackMCReader.h:92
 AliCaloTrackMCReader.h:93
 AliCaloTrackMCReader.h:94
 AliCaloTrackMCReader.h:95
 AliCaloTrackMCReader.h:96
 AliCaloTrackMCReader.h:97
 AliCaloTrackMCReader.h:98
 AliCaloTrackMCReader.h:99
 AliCaloTrackMCReader.h:100
 AliCaloTrackMCReader.h:101
 AliCaloTrackMCReader.h:102
 AliCaloTrackMCReader.h:103
 AliCaloTrackMCReader.h:104
 AliCaloTrackMCReader.h:105
 AliCaloTrackMCReader.h:106
 AliCaloTrackMCReader.h:107
 AliCaloTrackMCReader.h:108
 AliCaloTrackMCReader.h:109
 AliCaloTrackMCReader.h:110
 AliCaloTrackMCReader.h:111
 AliCaloTrackMCReader.h:112
 AliCaloTrackMCReader.h:113
 AliCaloTrackMCReader.h:114
 AliCaloTrackMCReader.h:115
 AliCaloTrackMCReader.h:116
 AliCaloTrackMCReader.h:117
 AliCaloTrackMCReader.h:118
 AliCaloTrackMCReader.h:119
 AliCaloTrackMCReader.h:120
 AliCaloTrackMCReader.h:121
 AliCaloTrackMCReader.h:122
 AliCaloTrackMCReader.h:123
 AliCaloTrackMCReader.h:124
 AliCaloTrackMCReader.h:125
 AliCaloTrackMCReader.h:126
 AliCaloTrackMCReader.h:127
 AliCaloTrackMCReader.h:128
 AliCaloTrackMCReader.h:129
 AliCaloTrackMCReader.h:130
 AliCaloTrackMCReader.h:131
 AliCaloTrackMCReader.h:132
 AliCaloTrackMCReader.h:133
 AliCaloTrackMCReader.h:134