#ifndef ALITRDINFOGEN_H
#define ALITRDINFOGEN_H
#ifndef ALIANALYSISTASKSE_H
#include "AliAnalysisTaskSE.h"
#endif
class AliESDEvent;
class AliMCEvent;
class AliESDfriend;
class AliTRDtrackInfo;
class AliTRDeventInfo;
class AliTRDv0Info;
class AliTRDeventCuts;
class AliESDtrackCuts;
class AliESDv0KineCuts;
class TObjArray;
class TString;
class TTreeSRedirector;
class AliTRDReconstructor;
class AliTRDgeometry;
class AliTRDinfoGen : public AliAnalysisTaskSE
{
public:
enum AliTRDinfoGenSteeringBits{
kMCdata = BIT(18)
,kUseLocalTrkSelection = BIT(19)
,kCollision = BIT(20)
,kOCDB = BIT(21)
,kTrkPoints = BIT(22)
};
enum AliTRDinfoGenObjects{
kTracksESD = 0
,kTracksMC
,kV0
,kTPC
,kITS
,kTRDin
,kTRDout
,kBarrel
,kBarrelMC
,kSA
,kSAMC
,kKink
,kKinkMC
,kBarrelFriend
,kSAFriend
,kNObjects
};
enum AliTRDinfoGenClasses{
kStatTrk = 0
,kEvType
,kBC
,kTrigger
,kChmb
,kNclasses
};
AliTRDinfoGen();
AliTRDinfoGen(char* name);
virtual ~AliTRDinfoGen();
static Float_t GetEndITS() { return fgkITS;}
static Float_t GetEndTPC() { return fgkTPC;}
static Float_t GetEndTRD() { return fgkTRD;}
Int_t GetNRefFigures() const { return 1;}
const char* GetOCDB() const {return fOCDB.Data();}
Bool_t GetRefFigure(Int_t ifig);
Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
Bool_t HasMCdata() const { return TestBit(kMCdata);};
Bool_t IsInitOCDB() const {return TestBit(kOCDB);}
Bool_t IsCollision() const {return TestBit(kCollision);}
Bool_t HasTrackPoints() const {return TestBit(kTrkPoints);}
void MakeSummary();
static const AliTRDReconstructor* Reconstructor() {return fgReconstructor;}
static AliTRDgeometry* Geometry() {return fgGeo;}
void SetInitOCDB(Bool_t set=kTRUE) {SetBit(kOCDB, set);}
void SetCollision(Bool_t set=kTRUE) {SetBit(kCollision, set);}
void SetLocalEvSelection(const AliTRDeventCuts &ec);
void SetLocalTrkSelection(Bool_t use=kTRUE) {SetBit(kUseLocalTrkSelection, use);}
void SetLocalV0Selection(const AliTRDv0Info &v0);
void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);}
void SetOCDB(const char *ocdb) {fOCDB=ocdb;}
Bool_t UseLocalEvSelection() const {return Bool_t(fEventCut);}
Bool_t UseLocalTrkSelection() const {return TestBit(kUseLocalTrkSelection);}
void UseTrackPoints(Bool_t use=kTRUE) {SetBit(kTrkPoints, use);}
void UserCreateOutputObjects();
void UserExec(Option_t *);
void Terminate(Option_t* option = "");
private:
static const Float_t fgkITS;
static const Float_t fgkTPC;
static const Float_t fgkTRD;
static const Float_t fgkTrkDCAxy;
static const Float_t fgkTrkDCAz;
static const Int_t fgkNclTPC;
static const Float_t fgkPt;
static const Float_t fgkEta;
static AliTRDReconstructor *fgReconstructor;
static AliTRDgeometry *fgGeo;
AliTRDinfoGen(const AliTRDinfoGen&);
AliTRDinfoGen& operator=(const AliTRDinfoGen&);
TTreeSRedirector* DebugStream();
void MakeChambers();
AliESDEvent *fESDev;
AliMCEvent *fMCev;
AliTRDeventCuts *fEventCut;
AliESDtrackCuts *fTrackCut;
AliESDv0KineCuts *fV0Identifier;
AliTRDv0Info *fV0Cut;
TString fOCDB;
AliTRDtrackInfo *fTrackInfo;
AliTRDeventInfo *fEventInfo;
AliTRDv0Info *fV0Info;
TObjArray *fTracksBarrel;
TObjArray *fTracksITS;
TObjArray *fTracksSA;
TObjArray *fTracksKink;
TObjArray *fV0List;
TObjArray *fClusters;
TObjArray *fContainer;
TObjArray *fRecos;
TTreeSRedirector *fDebugStream;
ClassDef(AliTRDinfoGen, 8)
};
#endif