#ifndef ALITRDCHECKESD_H
#define ALITRDCHECKESD_H
#ifndef ALIANALYSISTASK_H
#include "AliAnalysisTaskSE.h"
#endif
class AliESDEvent;
class AliMCEvent;
class AliESDpid;
class AliCFContainer;
class AliAnalysisCuts;
class AliESDtrack;
class TH1;
class TH2;
class TH1F;
class TH1D;
class TH2F;
class TH3F;
class TH3;
class TObjArray;
class TGraph;
class TGraphErrors;
class TAxis;
class AliTRDcheckESD : public AliAnalysisTaskSE {
public:
enum ETRDcheckESDstatus {
kMC = BIT(0)
,kCollision = BIT(1)
};
enum ETrdCfVariables {
kEventVtxZ=0,
kEventMult,
kEventTrigger,
kEventBC,
kTrackTOFBC,
kTrackDCAxy,
kTrackDCAz,
kTrackCharge,
kTrackOuterParamRadius,
kTrackPhi,
kTrackPhiTRD,
kTrackEta,
kTrackEtaTRD,
kTrackPt,
kTrackPtTRD,
kTrackP,
kTrackPTRD,
kTrackTrdChi2,
kTrackTrdTracklets,
kTrackTrdClusters,
kTrackTrdQuality,
kTrackTRDBudget,
kTrackTOFchi2,
kTrackletQtot,
kTrackletClustersVsRows,
kTrackletClusters,
kTrackletP,
kTrackPlossTRDlayer,
kTrackletLayer,
kTrackletSlice,
kTrackletPHslice,
kNTrdCfVariables,
kNMaxAssignedTriggers = 200
};
enum ETrdCfSteps {
kTPCreference=0,
kTRD,
kTOF,
kTOFin,
kTOFout,
kNSteps
};
AliTRDcheckESD();
AliTRDcheckESD(char* name);
virtual ~AliTRDcheckESD();
void UserCreateOutputObjects();
void UserExec(Option_t *);
void SetRefTrackFilter(AliAnalysisCuts* const filter) {fReferenceTrackFilter = filter;}
Bool_t HasMC() const { return TESTBIT(fStatus, kMC);}
Bool_t IsCollision() const {return TESTBIT(fStatus, kCollision);}
void SetCollision(Bool_t set=kTRUE) {set ? SETBIT(fStatus, kCollision) : CLRBIT(fStatus, kCollision);}
TObjArray* Histos();
Int_t GetTriggerCounter(const Char_t* triggerName) const;
void PrintTriggers() const;
Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL);
void SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
Bool_t PutTrendValue(const Char_t *name, Double_t val);
void Terminate(Option_t *);
void MakeSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="", Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
Int_t GetNAssignedTriggers();
void AddUserTrigger(const Char_t* name) {fUserEnabledTriggers += name; fUserEnabledTriggers += ";";}
void AddCFContainer(const Char_t* name, const Char_t* title, Int_t nSteps, Int_t* steps,
Int_t nVars, UInt_t* vars, TArrayD* binLimits);
private:
static const Float_t fgkxTPC;
static const Float_t fgkxTOF;
static const Char_t* fgkVarNames[kNTrdCfVariables];
static const Char_t* fgkStepNames[kNSteps];
void PlotTrackingSummaryFromCF(Double_t* trendValues=0x0,
const Char_t* triggerName="",
Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
void PlotPidSummaryFromCF(Double_t* trendValues=0x0,
const Char_t* triggerName="",
Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
void PlotCentSummaryFromCF(Double_t* trendValues=0x0, const Char_t* triggerName="",
Bool_t useIsolatedBC=kFALSE, Bool_t cutTOFbc=kFALSE);
void PlotOtherSummaryFromCF(Double_t* trendValues);
AliTRDcheckESD(const AliTRDcheckESD&);
AliTRDcheckESD& operator=(const AliTRDcheckESD&);
Int_t Pdg2Idx(Int_t pdg) const;
void Process(TH1 **h, TGraphErrors *g);
void Process2D(TH2 * const h, TGraphErrors **g);
void PrintStatus(ULong_t s);
TH2F* Proj3D(TH3* hist, TH2* accMap, Int_t binLow, Int_t binHigh, Float_t &entries);
TH1D* Proj2D(TH2* hist, TH1* mpvErr=0x0, TH1* widthErr=0x0, TH1* chi2=0x0);
TH1F* EfficiencyTRD(TH3* tpc3D, TH3* trd3D, Bool_t useAcceptance=kTRUE);
TH1F* EfficiencyFromPhiPt(AliCFContainer* cf, Int_t minNtrkl, Int_t maxNtrkl, Int_t stepNom, Int_t stepDenom, Int_t var=kTrackPt);
void DrawTRDGrid();
void SetStyle(TH1* hist, Int_t lineStyle, Int_t lineColor, Int_t lineWidth,
Int_t markerStyle, Int_t markerColor, Int_t markerSize);
void SetStyle(TAxis* axis, const Char_t* title, Float_t titleSize, Float_t titleOffset, Bool_t centerTitle,
Float_t labelSize);
void CheckActiveSM(TH1D* phiProj, Bool_t activeSM[18]);
void FindIsolatedBCs(TH1D* bcHist, Bool_t isIsolated[3500]);
void InitializeCFContainers();
Int_t GetTriggerIndex(const Char_t* name, Bool_t createNew=kTRUE);
void FillEventInfo(Double_t* values);
void FillTrackInfo(Double_t* values, AliESDtrack* esdTrack);
void FillTrackletInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iPlane,
Double_t* localSagitaPhi, Double_t localMom[][3], Bool_t* localMomGood);
void FillTrackletSliceInfo(Double_t* values, AliESDtrack* esdTrack, Int_t iSlice);
void FillCFContainer(AliCFContainer* cf, Double_t* values, Bool_t* stepSelections);
Bool_t IsTrackSelected(AliESDtrack* track, Double_t* values, Int_t step);
void FillGlobalTrackContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
void FillTrdTrackletContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
void FillTrdSliceContainers(Double_t* values, Bool_t* stepSelections, Int_t itrig);
Int_t fStatus;
Int_t fNRefFigures;
AliESDEvent *fESD;
AliMCEvent *fMC;
AliESDpid *fESDpid;
static FILE *fgFile;
TObjArray* fHistos;
AliAnalysisCuts* fReferenceTrackFilter;
Bool_t fPhysSelTriggersEnabled;
TString fUserEnabledTriggers;
Int_t fNAssignedTriggers;
ClassDef(AliTRDcheckESD, 10)
};
#endif