Refactoring of dN/deta task to common base class
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliBasedNdetaTask.h
1 //
2 // Task to analyse the AOD for for dN/deta in the base regions 
3 //
4 #ifndef ALIBASEDNDETATASK_H
5 #define ALIBASEDNDETATASK_H
6 #include <AliAnalysisTaskSE.h>
7 // #include <AliAODBaseMult.h>
8 class TList;
9 class TH2D;
10 class TH1D;
11 class AliAODEvent;
12
13 /**
14  * Task to determine the 
15  */
16 class AliBasedNdetaTask : public AliAnalysisTaskSE
17 {
18 public:
19   /** 
20    * Constructor 
21    * 
22    */
23   AliBasedNdetaTask();
24   /** 
25    * Constructor
26    * 
27    * @param name    Name of task 
28    * @param maxVtx  Set @f$v_z@f$ range
29    */
30   AliBasedNdetaTask(const char* name);
31
32   /** 
33    * Set the vertex range to use 
34    * 
35    * @param min Minimum (in centermeter)
36    * @param max Maximum (in centermeter)
37    */  
38   void SetVertexRange(Double_t min, Double_t max) { fVtxMin=min; fVtxMax=max; }
39   /** 
40    * Set the rebinning factor 
41    * 
42    * @param rebin Rebinning factor 
43    */
44   void SetRebinning(Int_t rebin) { fRebin = rebin; }
45   /** 
46    * Set the trigger maskl 
47    * 
48    * @param mask Trigger mask
49    */
50   void SetTriggerMask(UShort_t mask) { fTriggerMask = mask; }
51   /** 
52    * Set the trigger mask 
53    * 
54    * @param mask trigger mask 
55    */
56   void SetTriggerMask(const char* mask);
57   /**
58    * Destructor
59    * 
60    */
61   virtual ~AliBasedNdetaTask();
62   /** 
63    * Initialise on master - does nothing
64    * 
65    */
66   virtual void   Init() {}
67   /** 
68    * Create output objects.  
69    *
70    * This is called once per slave process 
71    */
72   virtual void UserCreateOutputObjects();
73   /** 
74    * Process a single event 
75    * 
76    * @param option Not used
77    */
78   virtual void UserExec(Option_t* option);
79   /** 
80    * Called at end of event processing.. 
81    *
82    * This is called once in the master 
83    * 
84    * @param option Not used 
85    */
86   virtual void Terminate(Option_t* option);
87 protected:
88   AliBasedNdetaTask(const AliBasedNdetaTask&);
89   AliBasedNdetaTask& operator=(const AliBasedNdetaTask&) { return *this; }
90
91   /** 
92    * Retrieve the histogram 
93    * 
94    * @param aod AOD event 
95    * @param mc  Whether to get the MC histogram or not
96    * 
97    * @return Retrieved histogram or null
98    */
99   virtual TH2D* GetHistogram(AliAODEvent* aod, Bool_t mc=false) = 0;
100   /** 
101    * Check the trigger and vertex 
102    * 
103    * @param aod 
104    * 
105    * @return 
106    */
107   Bool_t CheckEvent(AliAODEvent* aod);
108   /** 
109    * Clone a 2D histogram
110    * 
111    * @param in    Histogram to clone.
112    * @param name  New name of clone.
113    * 
114    * @return The clone
115    */
116   TH2D* CloneHist(TH2D* in, const char* name);
117   /** 
118    * Make a copy of the input histogram and rebin that histogram
119    * 
120    * @param h  Histogram to rebin
121    * 
122    * @return New (rebinned) histogram
123    */
124   TH1D* Rebin(const TH1D* h) const;
125   /** 
126    * Make an extension of @a h to make it symmetric about 0 
127    * 
128    * @param h Histogram to symmertrice 
129    * 
130    * @return Symmetric extension of @a h 
131    */
132   TH1* Symmetrice(const TH1* h) const;
133   /** 
134    * Project onto the X axis 
135    * 
136    * @param h         2D histogram 
137    * @param name      New name 
138    * @param firstbin  First bin to use 
139    * @param lastbin   Last bin to use
140    * @param error     Whether to calculate errors
141    * 
142    * @return Newly created histogram or null
143    */
144   TH1D* ProjectX(const TH2D* h, 
145                  const char* name,
146                  Int_t firstbin, 
147                  Int_t lastbin, 
148                  bool  corr=true,
149                  bool  error=true) const;
150   /** 
151    * Set histogram graphical options, etc. 
152    * 
153    * @param h       Histogram to modify
154    * @param colour  Marker color 
155    * @param marker  Marker style
156    * @param title   Title of histogram
157    * @param ytitle  Title on y-axis. 
158    */
159   void  SetHistogramAttributes(TH1D* h, Int_t colour, Int_t marker, 
160                                const char* title, 
161                                const char* ytitle="#frac{1}{N} #frac{dN_{ch}}{d#eta}");
162   /** 
163    * Trigger histogram bins 
164    */
165   enum { 
166     kAll        = 1, 
167     kB          = 2, 
168     kA          = 3, 
169     kC          = 4, 
170     kE          = 5,
171     kMB         = 6, 
172     kWithTrigger= 7,
173     kWithVertex = 8, 
174     kAccepted   = 9 
175   };
176
177   TH2D*           fSum;          // Sum of histograms 
178   TH2D*           fSumMC;        // Sum of MC histograms (if any)
179
180   TList*          fSums;         // Container of sums 
181   TList*          fOutput;       // Container of outputs 
182
183   TH1D*           fTriggers;     // Histogram of triggers 
184    
185   Double_t        fVtxMin;       // Minimum v_z
186   Double_t        fVtxMax;       // Maximum v_z
187   Int_t           fTriggerMask;  // Trigger mask 
188   Int_t           fRebin;        // Rebinning factor 
189   Bool_t          fCutEdges;     // Whether to cut edges when rebinning
190   Bool_t          fSymmetrice;   // Whether to symmetrice data 
191   Bool_t          fCorrEmpty;    // Correct for empty bins 
192
193   ClassDef(AliBasedNdetaTask,1); // Determine multiplicity in base area
194 };
195
196 #endif
197 //
198 // Local Variables:
199 //  mode: C++
200 // End:
201 //