]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/TRD/AliTRDrecoTask.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDrecoTask.h
1 #ifndef ALITRDRECOTASK_H\r
2 #define ALITRDRECOTASK_H\r
3 \r
4 ///////////////////////////////////////////////////////\r
5 //\r
6 // Basic class for Performance/Calibration TRD tasks\r
7 //\r
8 // Author: Alexandru Bercuci, 10/09/2008\r
9 //\r
10 //////////////////////////////////////////////////\r
11 \r
12 #ifndef ALIANALYSISTASKSE_H\r
13 #include "AliAnalysisTaskSE.h"\r
14 #endif\r
15 \r
16 #ifndef ALITRDTRACKINFO_H\r
17 #include "info/AliTRDtrackInfo.h"\r
18 #endif\r
19 \r
20 #ifndef ALITRDEVENTINFO_H\r
21 #include "info/AliTRDeventInfo.h"\r
22 #endif\r
23 \r
24 class TAxis;\r
25 class TH1;\r
26 class TH2;\r
27 class TH3;\r
28 class TF1;\r
29 class TList;\r
30 class TObjArray;\r
31 class TTreeSRedirector;\r
32 class AliTRDtrackV1;\r
33 class AliTRDrecoTask : public AliAnalysisTaskSE\r
34 {\r
35 friend class AliEveTRDTrackList;\r
36 public:\r
37   enum AliTRDrecoSteeringBits{\r
38      kMCdata      = BIT(18)\r
39     ,kFriends     = BIT(19)\r
40     ,kPostProcess = BIT(20)\r
41     ,kHeavyIon    = BIT(21)\r
42   };\r
43   \r
44   class AliTRDrecoProjection : public TNamed\r
45   {\r
46   public:\r
47     AliTRDrecoProjection();\r
48     virtual ~AliTRDrecoProjection();\r
49     AliTRDrecoProjection& operator+=(const AliTRDrecoProjection& other);\r
50     AliTRDrecoProjection& operator=(const AliTRDrecoProjection& other);\r
51     void      Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]);\r
52     Double_t  GetTrendValue(const Int_t mid=0, Double_t *m=NULL, Double_t *s=NULL, Double_t *se=NULL) const;\r
53     TH3*      H() const { return fH;}\r
54     void      Increment(Int_t bin[], Double_t v);\r
55     TH2*      Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid=0, Bool_t del=kTRUE);\r
56     TH2*      Projection2Dbin(Int_t ibin=-1, Bool_t mc=kFALSE);\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
59   private:\r
60     AliTRDrecoProjection(const AliTRDrecoProjection&);\r
61   protected:\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 *fRebin[2];  //[fNrebin] rebinning of the X nd Y axes\r
66     Float_t fRange[4]; //show range of the z processed\r
67 \r
68     ClassDef(AliTRDrecoProjection, 2)  // wrapper for a projection container THnSparse -> TH3\r
69   };\r
70 \r
71   AliTRDrecoTask();\r
72   AliTRDrecoTask(const char *name, const char *title);\r
73   virtual ~AliTRDrecoTask();\r
74   \r
75   \r
76   virtual void   UserCreateOutputObjects();\r
77   virtual void   UserExec(Option_t *opt);\r
78   virtual void   SetDebugLevel(Int_t level);\r
79   \r
80     \r
81   static Float_t GetMeanStat(TH1 *h, Float_t cut=0., Int_t opt=0, Float_t *sigma=NULL);\r
82   Int_t          GetNRefFigures() const; \r
83   const Char_t*  GetNameId() const       { return fNameId;}\r
84   TList*         GetPlotFunctors() const { return fPlotFuncList;}\r
85   Int_t          GetPtBin(Float_t pt);\r
86   virtual Bool_t GetRefFigure(Int_t ifig);\r
87   virtual void   MakeSummary();\r
88   void           MakeDetectorPlot(Int_t ly=0, const Option_t *opt="");\r
89   void           MakeDetectorPlotOLD(Int_t ly=0, const Option_t *opt="");\r
90   Bool_t         IsHeavyIon() const      { return TestBit(kHeavyIon);};\r
91   Bool_t         IsPP() const            { return !TestBit(kHeavyIon);};\r
92   Bool_t         HasFriends() const      { return TestBit(kFriends);};\r
93   Bool_t         HasMCdata() const       { return TestBit(kMCdata);};\r
94   Bool_t         HasPostProcess() const  { return TestBit(kPostProcess);};\r
95   Bool_t         HasRunTerminate() const { return fRunTerminate; }\r
96   virtual TObjArray* Histos()            { return fContainer;}\r
97 \r
98   virtual Bool_t Load(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance");\r
99   virtual Bool_t LoadDetectorMap(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance");\r
100   virtual Bool_t Save(TObjArray * const res);\r
101   virtual Bool_t PostProcess();\r
102   virtual Bool_t PutTrendValue(const Char_t *name, Double_t val, Double_t err=0);\r
103   static Int_t   Rebin(TH2 *h, Int_t n, Int_t rebinX[], Int_t rebinY[], Int_t nstat);\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 Float_t 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   void           SetTriggerList(const Char_t *tl);\r
112   virtual void   Terminate(Option_t *);\r
113 \r
114 protected:\r
115   static TTreeSRedirector* DebugStream() { return fgDebugStream;}\r
116   virtual void   InitFunctorList();\r
117   Bool_t         HasFunctorList() const { return fPlotFuncList != NULL; }\r
118   Bool_t         MakeMomSegmentation();\r
119 \r
120   Char_t                fNameId[10];       // unique identifier of task particularity\r
121   UChar_t               fNRefFigures;      // no of reference figures reported by task\r
122   TObjArray             *fDets;            //! OLD container to store detector position and status support should be discontinued \r
123   TObjArray             *fDetsV;           //! NEW container to store detector position and status\r
124   TObjArray             *fContainer;       //! container to store results\r
125   AliTRDeventInfo       *fEvent;           //! Event Info\r
126   TObjArray             *fTracks;          //! Array of tracks\r
127   TObjArray             *fClusters;        //! Array of clusters\r
128   const TObjArray       *fkClusters;       //! current detector clusters array\r
129   const AliTRDtrackV1   *fkTrack;          //! current track\r
130   const AliTRDtrackInfo::AliMCinfo  *fkMC; //! MC info\r
131   const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info\r
132   Char_t                 fSpecies;         //! species index +1 with charge sign\r
133   Char_t                 fTriggerSlot;     //! selected triggers map (if requested)\r
134   Float_t                fPt;              //! p_t of the track being analyzed\r
135   Float_t                fPhi;             //! phi of the track being analyzed\r
136   Float_t                fEta;             //! eta of the track being analyzed\r
137   Int_t                  fNpt;             // no of pt/p bins actually used\r
138   TObjArray             *fTriggerList;     //! optional trigger list to be monitored\r
139 \r
140 private:\r
141   AliTRDrecoTask(const AliTRDrecoTask&);\r
142   AliTRDrecoTask& operator=(const AliTRDrecoTask&);\r
143 \r
144   TList             *fPlotFuncList;        //! track functors list\r
145   TList             *fDetFuncList;         //! detector functors list\r
146   Bool_t             fRunTerminate;        // Switch for Terminate Function\r
147   static TTreeSRedirector *fgDebugStream;  //! Debug stream\r
148   static TH1        *fgProjector;          //! Projector histogram for Z statistics\r
149 protected:\r
150   static const Int_t fgNPt = 25;           //! No of debug pt bins\r
151   static Float_t         fgPt[fgNPt+1];    //! Array with limits for debug pt bins\r
152 \r
153   ClassDef(AliTRDrecoTask, 5) // base TRD reconstruction task\r
154 };\r
155 \r
156 #endif\r
157 \r