Bug fix
[u/mrichter/AliRoot.git] / FMD / AliFMDDisplay.h
1 #ifndef AliFMDDISPLAY_H
2 #define AliFMDDISPLAY_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    AliFMDDisplay.h
9     @author  Christian Holm Christensen <cholm@nbi.dk>
10     @date    Mon Mar 27 12:39:09 2006
11     @brief   FMD Event display 
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 "AliFMDInput.h"
22 #include <TObjArray.h>
23 class TCanvas;
24 class TPad;
25 class TButton;
26 class TSlider;
27 class TH1;
28
29 //___________________________________________________________________
30 /** @class AliFMDDisplay 
31     @brief Utility class to visualize FMD data in geometry. 
32     @ingroup FMD_util
33  */
34 class AliFMDDisplay : public AliFMDInput
35 {
36 public:
37   /** Constructor
38       @param onlyFMD Only show the FMD
39       @param gAliceFile galice file*/
40   AliFMDDisplay(Bool_t onlyFMD=kTRUE, const char* gAliceFile="galice.root");
41   /** DTOR */
42   virtual ~AliFMDDisplay();
43   /** Singleton access function
44       @return Singleton object. */
45   static AliFMDDisplay* Instance();
46
47   /** Continue to next event */
48   void  Continue() { fWait = kFALSE; }
49   /** Zoom mode */
50   void  Zoom() { fZoomMode = kTRUE; }
51   /** Pick mode */
52   void  Pick() { fZoomMode = kFALSE; }
53   /** Redisplay the event */ 
54   virtual void Redisplay(); // *MENU*
55   /** Change cut */
56   virtual void ChangeCut();
57   /** Called when a mouse or similar event happens in the display. 
58       @param event Event type
59       @param px    where the event happened in pixels along X
60       @param py    where the event happened in pixels along Y */
61   virtual void  ExecuteEvent(Int_t event, Int_t px, Int_t py);
62   /** Calculate distance from point @f$ (p_x,p_y)@f$ to this object. 
63       @param px Pixel X coordinate 
64       @param py Pixel Y coordinate 
65       @return distance. */
66   virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
67   /** Paint into canvas 
68       @param option Not used */
69   virtual void  Paint(Option_t* option="") { (void)option; }
70
71   /** Initialize
72       @return  @c false on error */
73   virtual Bool_t Init();
74   /** Called at beginning of an event 
75       @param event Event number
76       @return @c false on error  */
77   virtual Bool_t Begin(Int_t event);
78   /** Called at end of an event 
79       @return @c false on error  */
80   virtual Bool_t End();
81   /** Visualize a hit
82       @param hit Hit
83       @param p   Track
84       @return @c false on error  */
85   virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle* p);
86   /** Visualize a digit
87       @param digit Digit to draw
88       @return @c false on error  */
89   virtual Bool_t ProcessDigit(AliFMDDigit* digit);
90   /** Visualize a raw digit
91       @param digit Raw digit.
92       @return @c false on error  */
93   virtual Bool_t ProcessRaw(AliFMDDigit* digit);
94   /** Visualize a reconstructed point.
95       @param recpoint Reconstructed point
96       @return @c false on error  */
97   virtual Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint);
98   /** Process ESD data for the FMD.  Users should overload this to
99       deal with ESD data. 
100       @param d    Detector number (1-3)
101       @param r    Ring identifier ('I' or 'O')
102       @param s    Sector number (0-19, or 0-39)
103       @param t    Strip number (0-511, or 0-255)
104       @param eta  Psuedo-rapidity 
105       @param mult Psuedo-multiplicity 
106       @return  @c false on error  */
107   virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
108                             Float_t eta, Float_t mult);
109   /** Look up a color index, based on the value @a x and the maximum
110       value of @a x
111       @param x   Value 
112       @param max Maximum (for example 1023 for digits)
113       @return @c false on error  */
114   virtual Int_t  LookupColor(Float_t x, Float_t max)  const;
115   /** Set multiplicity cut 
116       @param cut Cut-off in multiplicity */
117   virtual void SetMultiplicityCut(Float_t c=.01) { fMultCut = c; }//*MENU*
118   /** Set pedestal width factor 
119       @param fac Factor */
120   virtual void SetPedestalFactor(Float_t f=3) { fPedestalFactor = f; }//*MENU*
121 protected:
122   /** Copy constructor 
123       @param o Object to copy from  */
124   AliFMDDisplay(const AliFMDDisplay& o) 
125     : AliFMDInput(o),
126       fWait(kFALSE),
127       fMarkers(0),
128       fHits(0),
129       fCanvas(0),
130       fPad(0),
131       fSlider(0),
132       fZoomMode(0),
133       fX0(0),
134       fY0(0),
135       fX1(0),
136       fY1(0),
137       fMultCut(0),
138       fPedestalFactor(0),
139       fXPixel(0),
140       fYPixel(0),
141       fOldXPixel(0),
142       fOldYPixel(0),
143       fLineDrawn(0)
144   { } 
145   /** Assignment operator 
146       @return Reference to this object */
147   AliFMDDisplay& operator=(const AliFMDDisplay&) { return *this; } 
148   /** Add a marker to the display
149       @param det Detector
150       @param rng Ring
151       @param sec Sector 
152       @param str Strip
153       @param o   Object to refer to
154       @param s   Signal 
155       @param max Maximum of signal */
156   virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, 
157                          TObject* o, Float_t s, Float_t max);
158   
159   /** Show only the FMD detectors. */
160   void ShowOnlyFMD();
161   /** Make base canvas */ 
162   virtual void MakeCanvas(const char** which);
163   virtual void MakeAux();
164   virtual void DrawAux();
165   virtual void Idle();
166   virtual void AtEnd();
167   
168   static AliFMDDisplay* fgInstance; // Static instance 
169   Bool_t                fWait;      // Wait until user presses `Continue'
170   TObjArray*            fMarkers;   // Cache of markers
171   TObjArray*            fHits;      // Cache of `hits'
172   TCanvas*              fCanvas;    // Canvas to draw in 
173   TPad*                 fPad;       // View pad. 
174   TObjArray             fButtons;   // Continue button
175   TSlider*              fSlider;    // Cut slider
176   Bool_t                fZoomMode;  // Whether we're in Zoom mode
177   Float_t               fX0;        // X at lower left corner or range 
178   Float_t               fY0;        // Y at lower left corner or range 
179   Float_t               fX1;        // X at upper right corner or range 
180   Float_t               fY1;        // Y at upper right corner or range 
181   Float_t               fMultCut;   // Multiplicity cut  
182   Float_t               fPedestalFactor; // ADC acceptance factor 
183   Int_t                 fXPixel;    // X pixel of mark
184   Int_t                 fYPixel;    // Y pixel of mark
185   Int_t                 fOldXPixel; // Old x pixel of mark
186   Int_t                 fOldYPixel; // Old y pixel of mark
187   Bool_t                fLineDrawn; // Whether we're drawing a box
188   Bool_t                fOnlyFMD;
189   TH1*                  fSpec;
190   TH1*                  fSpecCut;
191   TCanvas*              fAux;
192   ClassDef(AliFMDDisplay,0)  // FMD specialised event display
193 };
194
195 #endif
196 //____________________________________________________________________
197 //
198 // Local Variables:
199 //   mode: C++
200 // End:
201 //
202 // EOF
203 //