]> git.uio.no Git - u/mrichter/AliRoot.git/blob - FMD/AliFMDPattern.h
added test script
[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 TCanvas;
28 class TPad;
29 class TH2;
30
31
32 //___________________________________________________________________
33 /** @class AliFMDPattern 
34     @brief Utility class to visualize FMD data in 2D. 
35     @ingroup FMD_util
36  */
37 class AliFMDPattern : public AliFMDDisplay
38 {
39 public:
40   /** @class AliFMDPatternDetector 
41       @brief Utility for the pattern display. 
42       The name is this long, because the code-checker even cares about
43       nested names, even though it seems a bit nit-picking and
44       retareded.   It's a class rather than a structure, because the
45       code checker thinks that structs are only for POD - sigh! */
46   class AliFMDPatternDetector 
47   {
48   public:
49     /** Constructor */
50     AliFMDPatternDetector(UShort_t id);
51     /** Destructor */
52     ~AliFMDPatternDetector();
53     /** Clear this detector */
54     void  Clear();
55     /** Get the total number of hits */
56     Int_t Total() const { return Int_t(fCounts.GetSum()); }
57     /** Called at the  end of things */ 
58     void  End();
59     /** Initiate. 
60         @param nlvl Number of levels. 
61         @param r    Radius 
62         @param inners Array of inner shapes  
63         @param outers Array of outer shapes */
64     void  Begin(Int_t nlvl, Double_t r, TObjArray& inners, 
65                 TObjArray&  outers);
66     /** Draw everything 
67         @param a Array of shapes to draw */
68     void  DrawShape(TObjArray& a);
69     /** Add a marker at specified coordinates 
70         @param X X coordinate 
71         @param Y Y coordinate 
72         @param Z Z coordinate 
73         @param max The maximum value to scale to */
74     void  AddMarker(Double_t x, Double_t y, Float_t s, Float_t max);
75     Int_t     fId;     // Identifier # 
76     TArrayI   fCounts; // Number of counts at each level 
77     TObjArray fGraphs; // Array of graphs - one for each level
78     TH2*      fFrame;  // The mother frame 
79   private:
80     /** Copy constructor 
81         - Not implemented. */ 
82     AliFMDPatternDetector(const AliFMDPatternDetector&);
83     /** Assignement operator 
84         -- Not implemented */
85     AliFMDPatternDetector& operator=(const AliFMDPatternDetector&);
86     void CopyShapes(TObjArray& input, TObjArray& own, 
87                     Double_t ang=0, Double_t fx=1, Double_t fy=1);
88     /** Our own cache of shapes */
89     TObjArray fInners;
90     /** Our own cache of shapes */
91     TObjArray fOuters;
92   };
93   
94   
95   /** Constructor
96       @param gAliceFile galice file*/
97   AliFMDPattern(const char* gAliceFile="galice.root");
98   /** DTOR */
99   virtual ~AliFMDPattern();
100
101   /** Initialize
102       @return  @c false on error */
103   virtual Bool_t Init();
104   /** Called at beginning of an event 
105       @param event Event number
106       @return @c false on error  */
107   virtual Bool_t Begin(Int_t event);
108  protected:
109   /** Copy constructor 
110       - Not implemented. */ 
111   AliFMDPattern(const AliFMDPattern&);
112   /** Assignement operator 
113       -- Not implemented */
114   AliFMDPattern& operator=(const AliFMDPattern&);
115   virtual void AddMarker(Float_t x, Float_t y, Float_t z, 
116                          TObject* o, Float_t s, Float_t min, Float_t max)
117   {
118     AliFMDDisplay::AddMarker(x, y, z, o, s, min, max);
119   }
120   /** Add a marker to the display
121       @param det Detector
122       @param rng Ring
123       @param sec Sector 
124       @param str Strip
125       @param o   Object to refer to
126       @param s   Signal 
127       @param max Maximum of signal */
128   virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec,
129                          UShort_t str, TObject* o, Float_t s, 
130                          Float_t min, Float_t max);
131   /** @param hit Hit to process */
132   virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle*);
133   /** Re-draw the patterns */
134   virtual void Redisplay();
135   /** Called at the end. */
136   virtual void AtEnd();
137   /** Graph to show shape of inner sensor */
138   TObjArray fInners;    // Graph to show shape of inner sensor
139   /** Graph to show shape of outer sensor */
140   TObjArray fOuters;    // Graph to show shape of outer sensor
141   /** Max inner radius */
142   Float_t fInnerMax;    // Max inner radius
143   /** Max outer radius */
144   Float_t fOuterMax;    // Max outer radius
145   /** FMD1 Pad */
146   TPad*  fFMD1Pad;      // FMD1 Pad
147   /** FMD1 Frame */
148   AliFMDPatternDetector fFMD1;  // FMD1 Frame
149   /** FMD2 Pad  */
150   TPad*  fFMD2Pad;      // FMD2 Pad 
151   /** FMD2 Frame */
152   AliFMDPatternDetector fFMD2;  // FMD2 Frame
153   /** FMD3 Pad */
154   TPad*  fFMD3Pad;      // FMD3 Pad
155   /** FMD3 Frame */
156   AliFMDPatternDetector fFMD3;  // FMD3 Frame
157   /** Summary pad */
158   TPad* fSummary;       // Summary pad
159   /** Text fields */
160   TLatex fEvent;        // Text fields
161   TLatex fFMD1Sum;      // Total in FMD1
162   TLatex fFMD2Sum;      // Total in FMD1
163   TLatex fFMD3Sum;      // Total in FMD1
164   TLine  fLine;         // Just a line 
165   TLatex fTotal;        // Total in FMD
166
167   Double_t fFMD1Area;   // 
168   Double_t fFMD2Area;   // 
169   Double_t fFMD3Area;   // 
170
171   ClassDef(AliFMDPattern,0) // Display FMD data as hit-patterns. 
172 };
173
174
175 #endif
176 //____________________________________________________________________
177 //
178 // Local Variables:
179 //   mode: C++
180 // End:
181 //
182 // EOF
183 //