ROOT logo
#ifndef ALIAODCONVERSIONPHOTON_H
#define ALIAODCONVERSIONPHOTON_H

#include "AliConversionPhotonBase.h"
#include "AliKFConversionPhoton.h"
#include "AliAODConversionParticle.h"

class AliAODConversionPhoton : public AliAODConversionParticle, public AliConversionPhotonBase {

	public: 

		enum caloPhotonMCFlags_t {
			kIsPhoton 				= 0x001, kIsElectron 		= 0x002, kIsConversion 	= 0x004, kIsConversionFullyContained 	= 0x008,
			kIsMerged 				= 0x010, kIsMergedPartConv 	= 0x020, kIsDalitz 		= 0x040, kIsDalitzMerged 				= 0x080,
            kIsPhotonWithElecMother = 0x100, kIsShower 			= 0x200, kIsSubLeadingEM= 0x400
		};
		
		//Constructors
		AliAODConversionPhoton();    
		AliAODConversionPhoton(AliKFConversionPhoton *kfphoton);
		AliAODConversionPhoton(TLorentzVector *vec);

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

		//Destructor
		virtual ~AliAODConversionPhoton();

		// Overwrite GetLabelFunctions to Make it accessible via AliAODConversionParticle
        virtual Int_t GetLabel(Int_t i) const { return AliConversionPhotonBase::GetTrackLabel(i); }
        virtual Int_t GetLabel1() const { return AliConversionPhotonBase::GetTrackLabelPositive(); }
        virtual Int_t GetLabel2() const { return AliConversionPhotonBase::GetTrackLabelNegative(); }

		virtual Double_t GetPhotonMass() const {return AliAODConversionParticle::M();}
		virtual Double_t GetPhotonPt() const {return AliAODConversionParticle::Pt();}
		virtual Double_t GetPhotonP() const {return AliAODConversionParticle::P();}
		virtual Double_t GetPhotonEta() const {return AliAODConversionParticle::Eta();}
		virtual Double_t GetPhotonTheta() const {return AliAODConversionParticle::Theta();}
		virtual Double_t GetPhotonPhi() const {return AliAODConversionParticle::Phi();}
		virtual Double_t GetPx() const { return AliAODConversionParticle::Px();}
		virtual Double_t GetPy() const { return AliAODConversionParticle::Py();}
		virtual Double_t GetPz() const { return AliAODConversionParticle::Pz();}
		void CalculateDistanceOfClossetApproachToPrimVtx(const AliVVertex* primVertex);
		void SetMassToZero() { SetE(P()); }
		
		void SetIsTrueConvertedPhoton(){
			fCaloPhoton = 0;
			fCaloPhotonMCFlags = 1;	
		}	
		
		Float_t GetDCAzToPrimVtx()const {return fDCAzPrimVtx;}
		Float_t GetDCArToPrimVtx()const {return fDCArPrimVtx;}
		
		void SetIsCaloPhoton(){fCaloPhoton =1;}
		Bool_t GetIsCaloPhoton(){return fCaloPhoton;}
		void SetCaloPhotonMCLabel(Int_t i, Int_t labelCaloPhoton){fCaloPhotonMCLabels[i] = labelCaloPhoton;}
		Int_t GetCaloPhotonMCLabel(Int_t i){return fCaloPhotonMCLabels[i];}
		void SetNCaloPhotonMCLabels(Int_t nLabels){fNCaloPhotonMCLabels = nLabels;}
		Int_t GetNCaloPhotonMCLabels(){return fNCaloPhotonMCLabels;}
        Int_t GetNCaloPhotonMotherMCLabels(){return fNCaloPhotonMotherMCLabels;}
		void SetCaloPhotonMCFlags(AliStack *MCStack);
		void SetCaloPhotonMCFlagsAOD(AliVEvent* event);
		void SetCaloClusterRef(Long_t ref){fCaloClusterRef = ref;}
		Long_t GetCaloClusterRef()const {return fCaloClusterRef;}
		
		//Calo cluster MC identifiers
		Bool_t IsLargestComponentPhoton(){return fCaloPhotonMCFlags&kIsPhoton;} 					// largest contribution to cluster is photon
		Bool_t IsLargestComponentElectron(){return fCaloPhotonMCFlags&kIsElectron;}					// largest contribution to cluster is electron
		Bool_t IsConversion(){return fCaloPhotonMCFlags&kIsConversion;}								// largest contribution to cluster is converted electron
		Bool_t IsConversionFullyContained(){return fCaloPhotonMCFlags&kIsConversionFullyContained;}	// largest contribution to cluster is converted electron & other electron has been found in cluster as well
		Bool_t IsMerged(){return fCaloPhotonMCFlags&kIsMerged;}										// largest contribution to cluster is photon, second photon or electron from dalitz decay is found in cluster as well
		Bool_t IsMergedPartConv(){return fCaloPhotonMCFlags&kIsMergedPartConv;}						// cluster contains more than 1 particle belonging to the same mother particle (i.e. pi0, eta ...) 
																									// & at least one of the decays was a conversion
		Bool_t IsDalitz(){return fCaloPhotonMCFlags&kIsDalitz;}										// cluster contains particle from Dalitz decay
		Bool_t IsDalitzMerged(){return fCaloPhotonMCFlags&kIsDalitzMerged;}							// cluster contains particle from Dalitz decay & more than one particle of this decay is contained in cluster
		Bool_t IsPhotonWithElecMother(){return fCaloPhotonMCFlags&kIsPhotonWithElecMother;}			// largest contribution to cluster is photon which stems from an electron (i.e. radiation)
		Bool_t IsShower(){return fCaloPhotonMCFlags&kIsShower;}										// largest contribution to cluster seems to stem from a shower
		Bool_t IsEMNonLeading(){return !(fCaloPhotonMCFlags&kIsPhoton) && !(fCaloPhotonMCFlags&kIsElectron);} // largest contribution is from hadron
        Bool_t IsSubLeadingEM(){return fCaloPhotonMCFlags&kIsSubLeadingEM;}                         // cluster contains at least one electron or photon from a pi0 or eta in subleading contribution
		
		Bool_t IsTrueConvertedPhoton() {
			if (!fCaloPhoton && fCaloPhotonMCFlags == 1) return kTRUE;
				else return kFALSE;
		}
		
		Float_t fDCArPrimVtx;
		Float_t fDCAzPrimVtx;
		Bool_t fCaloPhoton;
		Long_t fCaloClusterRef;
		Int_t fNCaloPhotonMCLabels;
        Int_t fNCaloPhotonMotherMCLabels;
        Int_t fCaloPhotonMCFlags;
        Int_t fCaloPhotonMCLabels[20];
        Int_t fCaloPhotonMotherMCLabels[20];
		
	
	ClassDef(AliAODConversionPhoton,4)
};


#endif



 AliAODConversionPhoton.h:1
 AliAODConversionPhoton.h:2
 AliAODConversionPhoton.h:3
 AliAODConversionPhoton.h:4
 AliAODConversionPhoton.h:5
 AliAODConversionPhoton.h:6
 AliAODConversionPhoton.h:7
 AliAODConversionPhoton.h:8
 AliAODConversionPhoton.h:9
 AliAODConversionPhoton.h:10
 AliAODConversionPhoton.h:11
 AliAODConversionPhoton.h:12
 AliAODConversionPhoton.h:13
 AliAODConversionPhoton.h:14
 AliAODConversionPhoton.h:15
 AliAODConversionPhoton.h:16
 AliAODConversionPhoton.h:17
 AliAODConversionPhoton.h:18
 AliAODConversionPhoton.h:19
 AliAODConversionPhoton.h:20
 AliAODConversionPhoton.h:21
 AliAODConversionPhoton.h:22
 AliAODConversionPhoton.h:23
 AliAODConversionPhoton.h:24
 AliAODConversionPhoton.h:25
 AliAODConversionPhoton.h:26
 AliAODConversionPhoton.h:27
 AliAODConversionPhoton.h:28
 AliAODConversionPhoton.h:29
 AliAODConversionPhoton.h:30
 AliAODConversionPhoton.h:31
 AliAODConversionPhoton.h:32
 AliAODConversionPhoton.h:33
 AliAODConversionPhoton.h:34
 AliAODConversionPhoton.h:35
 AliAODConversionPhoton.h:36
 AliAODConversionPhoton.h:37
 AliAODConversionPhoton.h:38
 AliAODConversionPhoton.h:39
 AliAODConversionPhoton.h:40
 AliAODConversionPhoton.h:41
 AliAODConversionPhoton.h:42
 AliAODConversionPhoton.h:43
 AliAODConversionPhoton.h:44
 AliAODConversionPhoton.h:45
 AliAODConversionPhoton.h:46
 AliAODConversionPhoton.h:47
 AliAODConversionPhoton.h:48
 AliAODConversionPhoton.h:49
 AliAODConversionPhoton.h:50
 AliAODConversionPhoton.h:51
 AliAODConversionPhoton.h:52
 AliAODConversionPhoton.h:53
 AliAODConversionPhoton.h:54
 AliAODConversionPhoton.h:55
 AliAODConversionPhoton.h:56
 AliAODConversionPhoton.h:57
 AliAODConversionPhoton.h:58
 AliAODConversionPhoton.h:59
 AliAODConversionPhoton.h:60
 AliAODConversionPhoton.h:61
 AliAODConversionPhoton.h:62
 AliAODConversionPhoton.h:63
 AliAODConversionPhoton.h:64
 AliAODConversionPhoton.h:65
 AliAODConversionPhoton.h:66
 AliAODConversionPhoton.h:67
 AliAODConversionPhoton.h:68
 AliAODConversionPhoton.h:69
 AliAODConversionPhoton.h:70
 AliAODConversionPhoton.h:71
 AliAODConversionPhoton.h:72
 AliAODConversionPhoton.h:73
 AliAODConversionPhoton.h:74
 AliAODConversionPhoton.h:75
 AliAODConversionPhoton.h:76
 AliAODConversionPhoton.h:77
 AliAODConversionPhoton.h:78
 AliAODConversionPhoton.h:79
 AliAODConversionPhoton.h:80
 AliAODConversionPhoton.h:81
 AliAODConversionPhoton.h:82
 AliAODConversionPhoton.h:83
 AliAODConversionPhoton.h:84
 AliAODConversionPhoton.h:85
 AliAODConversionPhoton.h:86
 AliAODConversionPhoton.h:87
 AliAODConversionPhoton.h:88
 AliAODConversionPhoton.h:89
 AliAODConversionPhoton.h:90
 AliAODConversionPhoton.h:91
 AliAODConversionPhoton.h:92
 AliAODConversionPhoton.h:93
 AliAODConversionPhoton.h:94
 AliAODConversionPhoton.h:95
 AliAODConversionPhoton.h:96
 AliAODConversionPhoton.h:97
 AliAODConversionPhoton.h:98
 AliAODConversionPhoton.h:99
 AliAODConversionPhoton.h:100
 AliAODConversionPhoton.h:101
 AliAODConversionPhoton.h:102
 AliAODConversionPhoton.h:103
 AliAODConversionPhoton.h:104
 AliAODConversionPhoton.h:105
 AliAODConversionPhoton.h:106