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

////////////////////////////////////////////////
//--------------------------------------------- 
// Class  for handling of background calculation
//---------------------------------------------
////////////////////////////////////////////////

#include <vector>


// --- ROOT system ---
#include <TObject.h> 
#include "AliKFParticle.h"
#include "AliAODConversionPhoton.h"
#include "AliAODConversionMother.h"
#include "TClonesArray.h"
#include "AliESDVertex.h"

#if __GNUC__ >= 3
using namespace std;
#endif

typedef vector<AliAODConversionPhoton*> AliGammaConversionAODVector;
typedef vector<AliAODConversionMother*> AliGammaConversionMotherAODVector;

class AliGammaConversionAODBGHandler : public TObject {

	public: 
	struct GammaConversionVertex{
		Double_t fX;
		Double_t fY;
		Double_t fZ;
		Double_t fEP;
	};
	
	typedef struct GammaConversionVertex GammaConversionVertex; 																//!

	typedef vector<AliGammaConversionAODVector> AliGammaConversionBGEventVector;
	typedef vector<AliGammaConversionBGEventVector> AliGammaConversionMultipicityVector;
	typedef vector<AliGammaConversionMultipicityVector> AliGammaConversionBGVector;

	typedef vector<AliGammaConversionMotherAODVector> AliGammaConversionMotherBGEventVector;
	typedef vector<AliGammaConversionMotherBGEventVector> AliGammaConversionMotherMultipicityVector;
	typedef vector<AliGammaConversionMotherMultipicityVector> AliGammaConversionMotherBGVector;
	
	AliGammaConversionAODBGHandler();																							//constructor
	AliGammaConversionAODBGHandler(UInt_t binsZ,UInt_t binsMultiplicity,UInt_t nEvents);										// constructor
	AliGammaConversionAODBGHandler(UInt_t collisionSystem,UInt_t centMin,UInt_t centMax,UInt_t nEvents, Bool_t useTrackMult, UInt_t mode,UInt_t binsZ, UInt_t binsMultiplicity);
	AliGammaConversionAODBGHandler(const AliGammaConversionAODBGHandler & g);													//copy constructor
	AliGammaConversionAODBGHandler & operator = (const AliGammaConversionAODBGHandler & g);										//assignment operator
	virtual ~AliGammaConversionAODBGHandler();																					//virtual destructor

	void Initialize(Double_t * const zBinLimitsArray, Double_t * const multiplicityBinLimitsArray);

	Int_t GetZBinIndex(Double_t z) const;

	Int_t GetMultiplicityBinIndex(Int_t mult) const;

	void AddEvent(TList* const eventGammas, Double_t xvalue,Double_t yvalue,Double_t zvalue, Int_t multiplicity, Double_t epvalue = -100);
	void AddMesonEvent(TList* const eventMothers, Double_t xvalue,Double_t yvalue,Double_t zvalue, Int_t multiplicity, Double_t epvalue = -100);
	void AddElectronEvent(TClonesArray* const eventENeg, Double_t zvalue, Int_t multiplicity);

	Int_t GetNBGEvents()const {return fNEvents;}

	// Get BG photons
	AliGammaConversionAODVector* GetBGGoodV0s(Int_t zbin, Int_t mbin, Int_t event);
	// Get BG mesons
	AliGammaConversionMotherAODVector* GetBGGoodMesons(Int_t zbin, Int_t mbin, Int_t event);
	// Get BG electron
	AliGammaConversionAODVector* GetBGGoodENeg(Int_t event, Double_t zvalue, Int_t multiplicity);
	
	void PrintBGArray();

	GammaConversionVertex * GetBGEventVertex(Int_t zbin, Int_t mbin, Int_t event){return &fBGEventVertex[zbin][mbin][event];}

	Double_t GetBGProb(Int_t z, Int_t m){return fBGProbability[z][m];}

	private:

		Int_t 								fNEvents; 						// number of events
		Int_t ** 							fBGEventCounter;				//! bg counter
		Int_t ** 							fBGEventENegCounter;			//! bg electron counter
		Int_t ** 							fBGEventMesonCounter;			//! bg counter
		Double_t ** 						fBGProbability; 				//! prob per bin
		GammaConversionVertex *** 			fBGEventVertex;					//! array of event vertex
		Int_t 								fNBinsZ;	 					//n z bins
		Int_t 								fNBinsMultiplicity; 			//n bins multiplicity
		Double_t *							fBinLimitsArrayZ;				//! bin limits z array
		Double_t *							fBinLimitsArrayMultiplicity;	//! bin limit multiplicity array
		AliGammaConversionBGVector 			fBGEvents; 						// photon background events
		AliGammaConversionBGVector 			fBGEventsENeg; 					// electron background electron events
		AliGammaConversionMotherBGVector 	fBGEventsMeson; 				// neutral meson background events
		
	ClassDef(AliGammaConversionAODBGHandler,5)
};
#endif
 AliGammaConversionAODBGHandler.h:1
 AliGammaConversionAODBGHandler.h:2
 AliGammaConversionAODBGHandler.h:3
 AliGammaConversionAODBGHandler.h:4
 AliGammaConversionAODBGHandler.h:5
 AliGammaConversionAODBGHandler.h:6
 AliGammaConversionAODBGHandler.h:7
 AliGammaConversionAODBGHandler.h:8
 AliGammaConversionAODBGHandler.h:9
 AliGammaConversionAODBGHandler.h:10
 AliGammaConversionAODBGHandler.h:11
 AliGammaConversionAODBGHandler.h:12
 AliGammaConversionAODBGHandler.h:13
 AliGammaConversionAODBGHandler.h:14
 AliGammaConversionAODBGHandler.h:15
 AliGammaConversionAODBGHandler.h:16
 AliGammaConversionAODBGHandler.h:17
 AliGammaConversionAODBGHandler.h:18
 AliGammaConversionAODBGHandler.h:19
 AliGammaConversionAODBGHandler.h:20
 AliGammaConversionAODBGHandler.h:21
 AliGammaConversionAODBGHandler.h:22
 AliGammaConversionAODBGHandler.h:23
 AliGammaConversionAODBGHandler.h:24
 AliGammaConversionAODBGHandler.h:25
 AliGammaConversionAODBGHandler.h:26
 AliGammaConversionAODBGHandler.h:27
 AliGammaConversionAODBGHandler.h:28
 AliGammaConversionAODBGHandler.h:29
 AliGammaConversionAODBGHandler.h:30
 AliGammaConversionAODBGHandler.h:31
 AliGammaConversionAODBGHandler.h:32
 AliGammaConversionAODBGHandler.h:33
 AliGammaConversionAODBGHandler.h:34
 AliGammaConversionAODBGHandler.h:35
 AliGammaConversionAODBGHandler.h:36
 AliGammaConversionAODBGHandler.h:37
 AliGammaConversionAODBGHandler.h:38
 AliGammaConversionAODBGHandler.h:39
 AliGammaConversionAODBGHandler.h:40
 AliGammaConversionAODBGHandler.h:41
 AliGammaConversionAODBGHandler.h:42
 AliGammaConversionAODBGHandler.h:43
 AliGammaConversionAODBGHandler.h:44
 AliGammaConversionAODBGHandler.h:45
 AliGammaConversionAODBGHandler.h:46
 AliGammaConversionAODBGHandler.h:47
 AliGammaConversionAODBGHandler.h:48
 AliGammaConversionAODBGHandler.h:49
 AliGammaConversionAODBGHandler.h:50
 AliGammaConversionAODBGHandler.h:51
 AliGammaConversionAODBGHandler.h:52
 AliGammaConversionAODBGHandler.h:53
 AliGammaConversionAODBGHandler.h:54
 AliGammaConversionAODBGHandler.h:55
 AliGammaConversionAODBGHandler.h:56
 AliGammaConversionAODBGHandler.h:57
 AliGammaConversionAODBGHandler.h:58
 AliGammaConversionAODBGHandler.h:59
 AliGammaConversionAODBGHandler.h:60
 AliGammaConversionAODBGHandler.h:61
 AliGammaConversionAODBGHandler.h:62
 AliGammaConversionAODBGHandler.h:63
 AliGammaConversionAODBGHandler.h:64
 AliGammaConversionAODBGHandler.h:65
 AliGammaConversionAODBGHandler.h:66
 AliGammaConversionAODBGHandler.h:67
 AliGammaConversionAODBGHandler.h:68
 AliGammaConversionAODBGHandler.h:69
 AliGammaConversionAODBGHandler.h:70
 AliGammaConversionAODBGHandler.h:71
 AliGammaConversionAODBGHandler.h:72
 AliGammaConversionAODBGHandler.h:73
 AliGammaConversionAODBGHandler.h:74
 AliGammaConversionAODBGHandler.h:75
 AliGammaConversionAODBGHandler.h:76
 AliGammaConversionAODBGHandler.h:77
 AliGammaConversionAODBGHandler.h:78
 AliGammaConversionAODBGHandler.h:79
 AliGammaConversionAODBGHandler.h:80
 AliGammaConversionAODBGHandler.h:81
 AliGammaConversionAODBGHandler.h:82
 AliGammaConversionAODBGHandler.h:83
 AliGammaConversionAODBGHandler.h:84
 AliGammaConversionAODBGHandler.h:85
 AliGammaConversionAODBGHandler.h:86
 AliGammaConversionAODBGHandler.h:87
 AliGammaConversionAODBGHandler.h:88
 AliGammaConversionAODBGHandler.h:89
 AliGammaConversionAODBGHandler.h:90
 AliGammaConversionAODBGHandler.h:91
 AliGammaConversionAODBGHandler.h:92
 AliGammaConversionAODBGHandler.h:93
 AliGammaConversionAODBGHandler.h:94
 AliGammaConversionAODBGHandler.h:95
 AliGammaConversionAODBGHandler.h:96
 AliGammaConversionAODBGHandler.h:97
 AliGammaConversionAODBGHandler.h:98
 AliGammaConversionAODBGHandler.h:99
 AliGammaConversionAODBGHandler.h:100
 AliGammaConversionAODBGHandler.h:101