1 #ifndef ALITRDRECOTASK_H
\r
2 #define ALITRDRECOTASK_H
\r
4 ///////////////////////////////////////////////////////
\r
6 // Basic class for Performance/Calibration TRD tasks
\r
8 // Author: Alexandru Bercuci, 10/09/2008
\r
10 //////////////////////////////////////////////////
\r
12 #ifndef ALIANALYSISTASKSE_H
\r
13 #include "AliAnalysisTaskSE.h"
\r
16 #ifndef ALITRDTRACKINFO_H
\r
17 #include "info/AliTRDtrackInfo.h"
\r
20 #ifndef ALITRDEVENTINFO_H
\r
21 #include "info/AliTRDeventInfo.h"
\r
31 class TTreeSRedirector;
\r
32 class AliTRDtrackV1;
\r
33 template <typename Value> class TVectorT;
\r
34 typedef class TVectorT<Float_t> TVector;
\r
35 class AliTRDrecoTask : public AliAnalysisTaskSE
\r
37 friend class AliEveTRDTrackList;
\r
39 enum AliTRDrecoSteeringBits{
\r
42 ,kPostProcess = BIT(20)
\r
43 ,kHeavyIon = BIT(21)
\r
46 class AliTRDrecoProjection : public TNamed
\r
49 AliTRDrecoProjection();
\r
50 virtual ~AliTRDrecoProjection();
\r
51 AliTRDrecoProjection& operator+=(const AliTRDrecoProjection& other);
\r
52 AliTRDrecoProjection& operator=(const AliTRDrecoProjection& other);
\r
53 void Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]);
\r
54 void Increment(Int_t bin[], Double_t v);
\r
55 TH3* H() const { return fH;}
\r
56 TH2* Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid=0, Bool_t del=kTRUE);
\r
57 void SetRebinStrategy(Int_t n, Int_t rebx[], Int_t reby[]);
\r
58 void SetShowRange(Float_t zm, Float_t zM, Float_t em=0., Float_t eM=0.) {fRange[0] = zm; fRange[1] = zM; fRange[2] = em; fRange[3] = eM;}
\r
60 AliTRDrecoProjection(const AliTRDrecoProjection&);
\r
62 TH3 *fH; // data container
\r
63 Int_t fAx[3]; // projection axes
\r
64 Int_t fNrebin; // no. of rebinning steps
\r
65 Int_t *fRebinX; //[fNrebin] rebinning of the X axis
\r
66 Int_t *fRebinY; //[fNrebin] rebinning of the Y axis
\r
67 Float_t fRange[4]; //show range of the z processed
\r
69 ClassDef(AliTRDrecoProjection, 2) // wrapper for a projection container THnSparse -> TH3
\r
73 AliTRDrecoTask(const char *name, const char *title);
\r
74 virtual ~AliTRDrecoTask();
\r
77 virtual void UserCreateOutputObjects();
\r
78 virtual void UserExec(Option_t *opt);
\r
79 virtual void SetDebugLevel(Int_t level);
\r
82 static Float_t GetMeanStat(TH1 *h, Float_t cut=0., Option_t *opt="");
\r
83 Int_t GetNRefFigures() const;
\r
84 const Char_t* GetNameId() const { return fNameId;}
\r
85 TList* GetPlotFunctors() const { return fPlotFuncList;}
\r
86 static Int_t GetPtBinSignificant(Float_t pt);
\r
87 virtual Bool_t GetRefFigure(Int_t ifig);
\r
88 virtual void MakeSummary();
\r
89 void MakeDetectorPlot(Int_t ly=0, const Option_t *opt="eta");
\r
90 void MakeDetectorPlotNEW(Int_t ly=0, const Option_t *opt="eta");
\r
91 Bool_t IsHeavyIon() const { return TestBit(kHeavyIon);};
\r
92 Bool_t IsPP() const { return !TestBit(kHeavyIon);};
\r
93 Bool_t HasFriends() const { return TestBit(kFriends);};
\r
94 Bool_t HasMCdata() const { return TestBit(kMCdata);};
\r
95 Bool_t HasPostProcess() const { return TestBit(kPostProcess);};
\r
96 Bool_t HasRunTerminate() const { return fRunTerminate; }
\r
97 virtual TObjArray* Histos() { return fContainer;}
\r
99 virtual Bool_t Load(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance");
\r
100 virtual Bool_t LoadDetectorMap(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance");
\r
101 virtual Bool_t Save(TObjArray * const res);
\r
102 virtual Bool_t PostProcess();
\r
103 virtual Bool_t PutTrendValue(const Char_t *name, Double_t val, Double_t err=0);
\r
104 virtual void SetFriends(Bool_t fr = kTRUE) {SetBit(kFriends, fr);}
\r
105 virtual void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);}
\r
106 virtual void SetNameId(const Char_t *nid) {snprintf(fNameId, 10, "%s", nid);}
\r
107 virtual void SetPostProcess(Bool_t pp = kTRUE) {SetBit(kPostProcess, pp);}
\r
108 static void SetNormZ(TH2 *h2, Int_t bxmin=1, Int_t bxmax=-1, Int_t bymin=1, Int_t bymax=-1, Float_t thr=0.);
\r
109 static void SetRangeZ(TH2 *h2, Float_t m, Float_t M, Float_t thr=0.);
\r
110 void SetRunTerminate(Bool_t runTerminate = kTRUE) { fRunTerminate = runTerminate; }
\r
111 virtual void Terminate(Option_t *);
\r
114 static TTreeSRedirector* DebugStream() { return fgDebugStream;}
\r
115 virtual void InitFunctorList();
\r
116 Bool_t HasFunctorList() const { return fPlotFuncList != NULL; }
\r
118 Char_t fNameId[10]; // unique identifier of task particularity
\r
119 UChar_t fNRefFigures; // no of reference figures reported by task
\r
120 TObjArray *fDets; //! OLD container to store detector position and status support should be discontinued
\r
121 TVector *fDetsV; //! NEW container to store detector position and status
\r
122 TObjArray *fContainer; //! container to store results
\r
123 AliTRDeventInfo *fEvent; //! Event Info
\r
124 TObjArray *fTracks; //! Array of tracks
\r
125 TObjArray *fClusters; //! Array of clusters
\r
126 const TObjArray *fkClusters; //! current detector clusters array
\r
127 const AliTRDtrackV1 *fkTrack; //! current track
\r
128 const AliTRDtrackInfo::AliMCinfo *fkMC; //! MC info
\r
129 const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info
\r
130 Char_t fSpecies; //! species index +1 with charge sign
\r
131 Float_t fPt; //! p_t of the track being analyzed
\r
132 Float_t fPhi; //! phi of the track being analyzed
\r
133 Float_t fEta; //! eta of the track being analyzed
\r
136 AliTRDrecoTask(const AliTRDrecoTask&);
\r
137 AliTRDrecoTask& operator=(const AliTRDrecoTask&);
\r
139 TList *fPlotFuncList; //! track functors list
\r
140 TList *fDetFuncList; //! detector functors list
\r
141 Bool_t fRunTerminate; // Switch for Terminate Function
\r
142 static TTreeSRedirector *fgDebugStream; //! Debug stream
\r
143 static const Int_t fgNPt0 = 4; // No of significant pt bins
\r
144 static Float_t fgPt0[fgNPt0]; // Array with limits for significant pt bins
\r
146 ClassDef(AliTRDrecoTask, 5) // base TRD reconstruction task
\r