ROOT logo
#ifndef ALICONVERSIONPHOTONBASE_H
#define ALICONVERSIONPHOTONBASE_H

#include "TMath.h"
#include "TParticle.h"
#include "AliStack.h"
#include "AliLog.h"
#include "TObject.h"
#include "AliMCEvent.h"   
#include "AliESDEvent.h"
#include "AliKFParticle.h"
#include "TParticle.h"
#include <vector>
#include "AliESDpid.h"
#include "TF1.h"
#include "TRandom3.h"
#include "AliPID.h"
#include "AliESDtrack.h"
#include "AliKFVertex.h"
#include "AliMCEventHandler.h"
#include "AliESDtrackCuts.h"
#include "AliGenCocktailEventHeader.h"
#include "TList.h"


using namespace std;

class AliConversionPhotonBase {

 public: 

  //Constructors
  AliConversionPhotonBase();    

  //Copy Constructor
  AliConversionPhotonBase(const AliConversionPhotonBase & g);           
  //assignment operator
  AliConversionPhotonBase & operator = (const AliConversionPhotonBase & g);

  //Destructor
  virtual ~AliConversionPhotonBase();

  ///Set the tag for decay meson
  void SetTag( Bool_t tagged ) { fTagged = tagged; }
  Bool_t IsTagged(){return fTagged;}

  //Get the Chi2 of particle
  void SetChi2perNDF(Float_t chi2) {fChi2perNDF = chi2;}
  Float_t GetChi2perNDF() const {return fChi2perNDF;}

  
  ///Track labels
  void SetLabelPositive(Int_t label){fLabel[0] = label;}
  void SetLabelNegative(Int_t label){fLabel[1] = label;}
  void SetTrackLabels(Int_t label1, Int_t label2){fLabel[0] = label1; fLabel[1] = label2;}
  Int_t GetTrackLabelPositive() const{return fLabel[0];}
  Int_t GetTrackLabelNegative() const {return fLabel[1];}
  Int_t GetTrackLabel(Int_t i) const {return fLabel[i];}
  virtual Int_t GetLabel(Int_t i) const { return GetTrackLabel(i); };
  virtual Int_t GetLabel1() const { return GetTrackLabelPositive(); };
  virtual Int_t GetLabel2() const { return GetTrackLabelNegative(); };

  // MC Label

  void SetMCLabel(Int_t* label){fMCLabel[0]=label[0];fMCLabel[1]=label[1];}
  void SetMCLabelPositive(Int_t label){fMCLabel[0]=label;}
  void SetMCLabelNegative(Int_t label){fMCLabel[1]=label;}
  Int_t GetMCLabel(Int_t i) const{return fMCLabel[i];}
  Int_t GetMCLabelPositive() const{return fMCLabel[0];}
  Int_t GetMCLabelNegative() const{return fMCLabel[1];}
  Int_t GetMCParticleLabel(AliStack *fMCStack);

  // GetMCParticle

  Bool_t IsTruePhoton(AliStack *fMCStack);
  TParticle *GetMCParticle(AliStack *fMCStack);
  TParticle *GetPositiveMCDaughter(AliStack *fMCStack){return GetMCDaughter(fMCStack,0);};
  TParticle *GetNegativeMCDaughter(AliStack *fMCStack){return GetMCDaughter(fMCStack,1);};
  TParticle *GetMCDaughter(AliStack *fMCStack,Int_t label);

  // V0Index
  Int_t GetV0Index() const {return fV0Index;}
  void SetV0Index(Int_t index) {fV0Index=index;}

  // Conversion Point
   void SetConversionPoint(Double_t convpoint[3]){fConversionPoint[0]=convpoint[0];fConversionPoint[1]=convpoint[1];fConversionPoint[2]=convpoint[2];}
  void GetConversionPoint(Double_t convpoint[3]){convpoint[0]=fConversionPoint[0];convpoint[1]=fConversionPoint[1];convpoint[2]=fConversionPoint[2];}
  Double_t GetConversionRadius() const {return TMath::Sqrt(fConversionPoint[0]*fConversionPoint[0]+fConversionPoint[1]*fConversionPoint[1]);}
  Double_t GetConversionX() const {return fConversionPoint[0];}
  Double_t GetConversionY() const {return fConversionPoint[1];}
  Double_t GetConversionZ() const {return fConversionPoint[2];}
  void GetDistanceOfClossetApproachToPrimVtx(const AliVVertex* primVertex, Float_t * dca);
  void DeterminePhotonQuality(AliVTrack* negTrack, AliVTrack* posTrack);
  UChar_t GetPhotonQuality() const {return fQuality;}
  // Armenteros Qt Alpha
  void GetArmenterosQtAlpha(Double_t qtalpha[2]){qtalpha[0]=fArmenteros[0];qtalpha[1]=fArmenteros[1];}
  Double_t GetArmenterosQt() const {return fArmenteros[0];}
  Double_t GetArmenterosAlpha() const {return fArmenteros[1];}

  // virtual functions to be implemented in KF/AOD classes

  virtual Double_t GetPhotonMass() const = 0;
  virtual Double_t GetPhotonPt()const = 0;
  virtual Double_t GetPhotonP() const = 0;
  virtual Double_t GetPhotonEta() const = 0;
  virtual Double_t GetPhotonPhi() const =0;
//  virtual Double_t GetPhotonTheta() const =0;
  virtual Double_t GetPx() const = 0;
  virtual Double_t GetPy() const = 0;
  virtual Double_t GetPz() const = 0;
  

  Float_t GetMass() const { return fIMass; }
  void SetMass( Float_t mass) { fIMass = mass; }

  Float_t GetPsiPair() const {return fPsiPair;}
  void SetPsiPair(Float_t PsiPair){fPsiPair=PsiPair;}

  
 protected:

  Int_t fLabel[2]; // Electron/Positron Track Label
  Int_t fV0Index; // Index of the V0
  Int_t fMCLabel[2]; // Electron/Positron MC Label
  Float_t fChi2perNDF; // Chi2perNDF
  Double_t fArmenteros[2]; // Armenteros Paramters
  Double_t fConversionPoint[3]; // Conversion Point
  Bool_t fTagged; // Is it tagged as decay pion (only for gammas)
  Float_t fIMass; // Invariant Mass of dilepton pair
  Float_t fPsiPair; // Psi Pair Value
  UChar_t fQuality; //Photon Quality: 
                     //0: garbage,
                     //1: both tracks TPC only,
                     //2: 1 track TPC only
                     //3: both tracks more than 1 ITS cluster
  ClassDef(AliConversionPhotonBase,5);
};


#endif



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