Some changes to make it possible to run the DA's
[u/mrichter/AliRoot.git] / FMD / AliFMDPattern.h
1 #ifndef AliFMDPATTERN_H
2 #define AliFMDPATTERN_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4  * reserved. 
5  *
6  * See cxx source for full Copyright notice                               
7  */
8 /** @file    AliFMDPattern.h
9     @author  Christian Holm Christensen <cholm@nbi.dk>
10     @date    Mon Mar 27 12:39:09 2006
11     @brief   FMD Event display (as patterns)
12 */
13 //___________________________________________________________________
14 //
15 // The classes defined here, are utility classes for reading in data
16 // for the FMD.  They are  put in a seperate library to not polute the
17 // normal libraries.  The classes are intended to be used as base
18 // classes for customized class that do some sort of analysis on the
19 // various types of data produced by the FMD. 
20 //
21 #include "AliFMDDisplay.h"
22 #include <TArrayI.h>
23 #include <TObjArray.h>
24 // #include <TGraph.h>
25 #include <TLatex.h>
26 #include <TLine.h>
27 // class AliPhysicsSelection;
28 class TCanvas;
29 class TPad;
30 class TH2;
31
32
33 //___________________________________________________________________
34 /** @class AliFMDPattern 
35     @brief Utility class to visualize FMD data in 2D. 
36     @ingroup FMD_util
37  */
38 class AliFMDPattern : public AliFMDDisplay
39 {
40 public:
41   /** @class AliFMDPatternDetector 
42       @brief Utility for the pattern display. 
43       The name is this long, because the code-checker even cares about
44       nested names, even though it seems a bit nit-picking and
45       retareded.   It's a class rather than a structure, because the
46       code checker thinks that structs are only for POD - sigh! */
47   class AliFMDPatternDetector 
48   {
49   public:
50     /** Constructor */
51     AliFMDPatternDetector(UShort_t id);
52     /** Destructor */
53     ~AliFMDPatternDetector();
54     /** Clear this detector */
55     void  Clear();
56     /** Get the total number of hits */
57     Int_t Total() const { return Int_t(fCounts.GetSum()); }
58     /** Called at the  end of things */ 
59     void  End();
60     /** Initiate. 
61         @param nlvl Number of levels. 
62         @param r    Radius 
63         @param inners Array of inner shapes  
64         @param outers Array of outer shapes */
65     void  Begin(Int_t nlvl, Double_t r, TObjArray& inners, 
66                 TObjArray&  outers);
67     /** Draw everything 
68         @param a Array of shapes to draw */
69     void  DrawShape(const TObjArray& a);
70     /** Add a marker at specified coordinates 
71         @param X X coordinate 
72         @param Y Y coordinate 
73         @param Z Z coordinate 
74         @param max The maximum value to scale to */
75     void  AddMarker(Double_t x, Double_t y, Float_t s, Float_t max);
76     /** 
77      * Get the indentifier 
78      * 
79      * @return Identifier 
80      */
81     Int_t GetId() const { return fId; }
82     /** 
83      * Get the counts array. Number of counts at each level  
84      * 
85      * @return Counts array
86      */
87     TArrayI&     GetCounts() { return fCounts; }
88     /** 
89      * Get the counts array. Number of counts at each level 
90      * 
91      * @return Counts array
92      */
93     const TArrayI& GetCounts() const { return fCounts; }
94     /** 
95      * Get the list of graphs 
96      * 
97      * @return Array of graphs - one for each level
98      */
99     TObjArray& GetGraphs() { return fGraphs; }
100     /** 
101      * Get the list of graphs 
102      * 
103      * @return Array of graphs - one for each level
104      */
105     const TObjArray& GetGraphs() const { return fGraphs; } 
106     /** 
107      * Get the mother frame
108      * 
109      * @return The mother frame 
110      */
111     TH2*& GetFrame() { return fFrame; }
112     /** 
113      * Get the mother frame
114      * 
115      * @return The mother frame 
116      */
117     const TH2* GetFrame() const { return fFrame; }  
118   private:
119     /** 
120      * Copy constructor 
121      * - Not implemented. 
122      */ 
123     AliFMDPatternDetector(const AliFMDPatternDetector&);
124     /** 
125      * Assignement operator 
126      * -- Not implemented 
127      */
128     AliFMDPatternDetector& operator=(const AliFMDPatternDetector&);
129     /** 
130      * Copy shapes
131      * 
132      * @param input  Source
133      * @param own    Ours
134      * @param ang    Angle 
135      * @param fx     Factor x
136      * @param fy     Factor y
137      */
138     void CopyShapes(const TObjArray& input, TObjArray& own, 
139                     Double_t ang=0, Double_t fx=1, Double_t fy=1);
140     Int_t     fId;     // Identifier # 
141     TArrayI   fCounts; // Number of counts at each level 
142     TObjArray fGraphs; // Array of graphs - one for each level
143     TH2*      fFrame;  // The mother frame 
144     TObjArray fInners; // Our own cache of shapes
145     TObjArray fOuters; // Our own cache of shapes
146   };
147   
148   
149   /** Constructor
150       @param gAliceFile galice file*/
151   AliFMDPattern(const char* gAliceFile="galice.root");
152   /** DTOR */
153   virtual ~AliFMDPattern();
154
155   /** Initialize
156       @return  @c false on error */
157   virtual Bool_t Init();
158   /** Called at beginning of an event 
159       @param event Event number
160       @return @c false on error  */
161   virtual Bool_t Begin(Int_t event);
162  protected:
163   /** Copy constructor 
164       - Not implemented. */ 
165   AliFMDPattern(const AliFMDPattern&);
166   /** Assignement operator 
167       -- Not implemented */
168   AliFMDPattern& operator=(const AliFMDPattern&);
169   virtual void AddMarker(Float_t x, Float_t y, Float_t z, 
170                          TObject* o, Float_t s, Float_t min, Float_t max)
171   {
172     AliFMDDisplay::AddMarker(x, y, z, o, s, min, max);
173   }
174   /** Add a marker to the display
175       @param det Detector
176       @param rng Ring
177       @param sec Sector 
178       @param str Strip
179       @param o   Object to refer to
180       @param s   Signal 
181       @param max Maximum of signal */
182   virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec,
183                          UShort_t str, TObject* o, Float_t s, 
184                          Float_t min, Float_t max);
185   /** @param hit Hit to process */
186   virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle*);
187   /** Re-draw the patterns */
188   virtual void Redisplay();
189   /** Called at the end. */
190   virtual void AtEnd();
191   TObjArray fInners;    // Graph to show shape of inner sensor
192   TObjArray fOuters;    // Graph to show shape of outer sensor
193   Float_t fInnerMax;    // Max inner radius
194   Float_t fOuterMax;    // Max outer radius
195   TPad*  fFMD1Pad;      // FMD1 Pad
196   AliFMDPatternDetector fFMD1;  // FMD1 Frame
197   TPad*  fFMD2Pad;      // FMD2 Pad 
198   AliFMDPatternDetector fFMD2;  // FMD2 Frame
199   TPad*  fFMD3Pad;      // FMD3 Pad
200   AliFMDPatternDetector fFMD3;  // FMD3 Frame
201   TPad* fSummary;       // Summary pad
202   TLatex fEvent;        // Text fields
203   TLatex fFMD1Sum;      // Total in FMD1
204   TLatex fFMD2Sum;      // Total in FMD2
205   TLatex fFMD3Sum;      // Total in FMD3
206   TLine  fLine;         // Just a line 
207   TLatex fTotal;        // Total in FMD
208
209   Double_t fFMD1Area;   // estimated FMD1 area
210   Double_t fFMD2Area;   // estimated FMD2 area
211   Double_t fFMD3Area;   // estimated FMD3 area
212
213   // AliPhysicsSelection* fPhysicsSelection;
214   
215   ClassDef(AliFMDPattern,0) // Display FMD data as hit-patterns. 
216 };
217
218
219 #endif
220 //____________________________________________________________________
221 //
222 // Local Variables:
223 //   mode: C++
224 // End:
225 //
226 // EOF
227 //