More code clean up.
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliFMDHistCollector.h
1 #ifndef ALIROOT_PWG2_FORWARD_ANALYSIS2_ALIFMDHISTCOLLECTOR_H
2 #define ALIROOT_PWG2_FORWARD_ANALYSIS2_ALIFMDHISTCOLLECTOR_H
3 #include <TNamed.h>
4 #include <TList.h>
5 #include <TArrayI.h>
6 #include "AliForwardUtil.h"
7 class AliESDFMD;
8 class TH2D;
9
10 /** 
11  * This class collects the event histograms into single histograms, 
12  * one for each ring in each vertex bin.  
13  *
14  * @par Input:
15  *   - AliESDFMD object possibly corrected for sharing
16  *
17  * @par Output:
18  *   - 5 RingHistos objects - each with a number of vertex dependent 
19  *     2D histograms of the inclusive charge particle density 
20  * 
21  * @par HistCollector used: 
22  *   - AliFMDAnaCalibBackgroundCorrection
23  *
24  * @ingroup pwg2_forward_analysis 
25  */
26 class AliFMDHistCollector : public TNamed
27 {
28 public:
29   /** 
30    * Constructor 
31    */
32   AliFMDHistCollector() 
33     : fNCutBins(0), fCorrectionCut(0), fFirstBins(), fLastBins(), fDebug(0)
34   {}
35   /** 
36    * Constructor 
37    * 
38    * @param title Name of object
39    */
40   AliFMDHistCollector(const char* title)
41     : TNamed("fmdHistCollector", title), 
42       fNCutBins(1), fCorrectionCut(0.5), 
43       fFirstBins(1), fLastBins(1), fDebug(0)
44   {}
45   /** 
46    * Copy constructor 
47    * 
48    * @param o Object to copy from 
49    */
50   AliFMDHistCollector(const AliFMDHistCollector& o)
51     : TNamed(o), 
52       fNCutBins(o.fNCutBins), fCorrectionCut(o.fCorrectionCut),
53       fFirstBins(o.fFirstBins), fLastBins(o.fLastBins), fDebug(o.fDebug) 
54   {}
55
56   /** 
57    * Destructor 
58    */
59   virtual ~AliFMDHistCollector() {}
60   /** 
61    * Assignement operator
62    * 
63    * @return Reference to this object
64    */
65   AliFMDHistCollector& operator=(const AliFMDHistCollector&);
66   /** 
67    * Intialise 
68    * 
69    * @param vtxAxis  Vertex axis 
70    */  
71   virtual void Init(const TAxis& vtxAxis);
72   /** 
73    * Do the calculations 
74    * 
75    * @param hists    Cache of histograms 
76    * @param vtxBin   Vertex bin (1 based)
77    * @param out      Output histogram
78    * 
79    * @return true on successs 
80    */
81   virtual Bool_t Collect(AliForwardUtil::Histos& hists, UShort_t vtxBin, 
82                          TH2D& out);
83   /** 
84    * Set the number of extra bins (beyond the secondary map border) 
85    * to cut away. 
86    * 
87    * @param n Number of bins 
88    */
89   void SetNCutBins(UInt_t n=2) { fNCutBins = n; }
90   /** 
91    * Set the correction cut, that is, when bins in the secondary
92    * correction maps have a value lower than this cut, they are
93    * considered uncertain and not used
94    * 
95    * @param cut Cut-off 
96    */
97   void SetCorrectionCut(Float_t cut=0.5) { fCorrectionCut = cut; }
98   /** 
99    * Set the debug level.  The higher the value the more output 
100    * 
101    * @param dbg Debug level 
102    */
103   void SetDebug(Int_t dbg=1) { fDebug = dbg; }
104   /** 
105    * Print information 
106    * 
107    * @param option Not used
108    */
109   void Print(Option_t* option="") const;
110 protected:
111   /** 
112    * Get the first and last eta bin to use for a given ring and vertex 
113    * 
114    * @param d        Detector
115    * @param r        Ring 
116    * @param vtxBin   Vertex bin (1 based)
117    * @param first    On return, the first eta bin to use 
118    * @param last     On return, the last eta bin to use 
119    */
120   virtual void GetFirstAndLast(UShort_t d, Char_t r, UShort_t vtxBin, 
121                                Int_t& first, Int_t& last) const;
122   /** 
123    * Get the first and last eta bin to use for a given ring and vertex 
124    * 
125    * @param idx      Ring index as given by GetIdx
126    * @param vtxBin   Vertex bin (1 based) 
127    * @param first    On return, the first eta bin to use 
128    * @param last     On return, the last eta bin to use 
129    */
130   virtual void GetFirstAndLast(Int_t idx, UShort_t vtxBin, 
131                                Int_t& first, Int_t& last) const;
132   /** 
133    * Get the first eta bin to use for a given ring and vertex 
134    * 
135    * @param d Detector 
136    * @param r Ring 
137    * @param v vertex bin (1 based)
138    * 
139    * @return First eta bin to use, or -1 in case of problems 
140    */  
141   Int_t GetFirst(UShort_t d, Char_t r, UShort_t v) const; 
142   /** 
143    * Get the first eta bin to use for a given ring and vertex 
144    * 
145    * @param idx Ring index as given by GetIdx
146    * @param v vertex bin (1 based)
147    * 
148    * @return First eta bin to use, or -1 in case of problems 
149    */  
150   Int_t GetFirst(Int_t idx, UShort_t v) const; 
151   /** 
152    * Get the last eta bin to use for a given ring and vertex 
153    * 
154    * @param d Detector 
155    * @param r Ring 
156    * @param v vertex bin (1 based)
157    * 
158    * @return Last eta bin to use, or -1 in case of problems 
159    */  
160   Int_t GetLast(UShort_t d, Char_t r, UShort_t v) const;
161   /** 
162    * Get the last eta bin to use for a given ring and vertex 
163    * 
164    * @param idx Ring index as given by GetIdx
165    * @param v vertex bin (1 based)
166    * 
167    * @return Last eta bin to use, or -1 in case of problems 
168    */  
169   Int_t GetLast(Int_t idx, UShort_t v) const; 
170   /** 
171    * Get the detector and ring from the ring index 
172    * 
173    * @param idx Ring index 
174    * @param d   On return, the detector or 0 in case of errors 
175    * @param r   On return, the ring id or '0' in case of errors 
176    */
177   void GetDetRing(Int_t idx, UShort_t& d, Char_t& r) const;
178   /** 
179    * Get the ring index from detector number and ring identifier 
180    * 
181    * @param d Detector
182    * @param r Ring identifier 
183    * 
184    * @return ring index or -1 in case of problems 
185    */
186   Int_t GetIdx(UShort_t d, Char_t r) const;
187   /** 
188    * Get the possibly overlapping histogram of eta bin @a e in 
189    * detector and ring 
190    * 
191    * @param d Detector
192    * @param r Ring 
193    * @param e Eta bin
194    * @param v Vertex bin (1 based)
195    *
196    * @return Overlapping histogram index or -1
197    */
198   Int_t GetOverlap(UShort_t d, Char_t r, Int_t e, UShort_t v) const;
199   /** 
200    * Get the possibly overlapping histogram of eta bin @a e in 
201    * detector and ring 
202    * 
203    * @param i Ring index
204    * @param e Eta bin
205    * @param v Vertex bin (1 based)
206    *
207    * @return Overlapping histogram index or -1
208    */
209   Int_t GetOverlap(Int_t i, Int_t e, UShort_t v) const;
210   /** 
211    * Check if there's an overlapping histogram with this eta bin of
212    * the detector and ring
213    * 
214    * @param d Detector 
215    * @param r Ring 
216    * @param e eta bin
217    * @param v Vertex bin (1 based)
218    * 
219    * @return True if there's an overlapping histogram 
220    */
221   Bool_t HasOverlap(UShort_t d, Char_t r, Int_t e, UShort_t v) const;
222   /** 
223    * Check if there's an overlapping histogram with this eta bin of
224    * ring
225    * 
226    * @param i Ring index
227    * @param e eta bin
228    * @param v Vertex bin
229    * 
230    * @return True if there's an overlapping histogram 
231    */
232   Bool_t HasOverlap(Int_t i, Int_t e, UShort_t v) const;
233
234
235   Int_t       fNCutBins;        // Number of additional bins to cut away
236   Float_t     fCorrectionCut;   // Cut-off on secondary corrections 
237   TArrayI     fFirstBins;       // Array of first eta bins 
238   TArrayI     fLastBins;        // Array of last eta bins 
239   Int_t       fDebug;           // Debug level 
240
241   ClassDef(AliFMDHistCollector,1); // Calculate Nch density 
242 };
243
244 //____________________________________________________________________
245 inline void
246 AliFMDHistCollector::GetFirstAndLast(UShort_t d, Char_t r, UShort_t vtxbin, 
247                                      Int_t& first, Int_t& last) const
248 {
249   GetFirstAndLast(GetIdx(d,r), vtxbin, first, last);
250 }
251 //____________________________________________________________________
252 inline Int_t
253 AliFMDHistCollector::GetFirst(UShort_t d, Char_t r, UShort_t v) const 
254 {
255   return GetFirst(GetIdx(d,r), v);
256 }
257 //____________________________________________________________________
258 inline Int_t
259 AliFMDHistCollector::GetLast(UShort_t d, Char_t r, UShort_t v) const 
260 {
261   return GetLast(GetIdx(d, r), v);
262 }
263 //____________________________________________________________________
264 inline Bool_t
265 AliFMDHistCollector::HasOverlap(UShort_t d, Char_t r, Int_t e, UShort_t v) const
266 {
267   return GetOverlap(d,r,e,v) >= 0;
268 }
269 //____________________________________________________________________
270 inline Bool_t
271 AliFMDHistCollector::HasOverlap(Int_t i, Int_t e, UShort_t v) const
272 {
273   return GetOverlap(i,e,v) >= 0;
274 }
275
276 #endif
277 // Local Variables:
278 //   mode: C++
279 // End:
280