]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/AliFMDDisplay.h
Various small fixes
[u/mrichter/AliRoot.git] / FMD / AliFMDDisplay.h
CommitLineData
bf000c32 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 */
c2fc1258 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*/
bf000c32 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"
a9579262 22#include <TObjArray.h>
2eddac03 23#include <TTimer.h>
bf000c32 24class TCanvas;
25class TPad;
26class TButton;
a9579262 27class TSlider;
28class TH1;
bf000c32 29
30//___________________________________________________________________
9f662337 31/** @class AliFMDDisplay
32 @brief Utility class to visualize FMD data in geometry.
33 @ingroup FMD_util
34 */
bf000c32 35class AliFMDDisplay : public AliFMDInput
36{
37public:
9f662337 38 /** Constructor
a9579262 39 @param onlyFMD Only show the FMD
9f662337 40 @param gAliceFile galice file*/
a9579262 41 AliFMDDisplay(Bool_t onlyFMD=kTRUE, const char* gAliceFile="galice.root");
9f662337 42 /** DTOR */
a9579262 43 virtual ~AliFMDDisplay();
9f662337 44 /** Singleton access function
45 @return Singleton object. */
bf000c32 46 static AliFMDDisplay* Instance();
47
9f662337 48 /** Continue to next event */
bf000c32 49 void Continue() { fWait = kFALSE; }
2eddac03 50 /** Run throug events as fast as possible */
51 void Start() { fContinous = kTRUE; fWait = kFALSE; }
52 /** Pause the processing */
53 void Pause() { fContinous = kFALSE; fWait = kTRUE; }
9f662337 54 /** Zoom mode */
bf000c32 55 void Zoom() { fZoomMode = kTRUE; }
9f662337 56 /** Pick mode */
bf000c32 57 void Pick() { fZoomMode = kFALSE; }
a9579262 58 /** Redisplay the event */
59 virtual void Redisplay(); // *MENU*
d98fbfa5 60 /** Break */
61 virtual void Break();
62 /** Render in 3D */
63 virtual void Render();
64
a9579262 65 /** Change cut */
66 virtual void ChangeCut();
d98fbfa5 67 /** Change cut */
68 virtual void ChangeFactor();
9f662337 69 /** Called when a mouse or similar event happens in the display.
70 @param event Event type
71 @param px where the event happened in pixels along X
72 @param py where the event happened in pixels along Y */
a9579262 73 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
9f662337 74 /** Calculate distance from point @f$ (p_x,p_y)@f$ to this object.
75 @param px Pixel X coordinate
76 @param py Pixel Y coordinate
77 @return distance. */
a9579262 78 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
9f662337 79 /** Paint into canvas
80 @param option Not used */
a9579262 81 virtual void Paint(Option_t* option="") { (void)option; }
bf000c32 82
9f662337 83 /** Initialize
84 @return @c false on error */
bf000c32 85 virtual Bool_t Init();
9f662337 86 /** Called at beginning of an event
87 @param event Event number
88 @return @c false on error */
bf000c32 89 virtual Bool_t Begin(Int_t event);
9f662337 90 /** Called at end of an event
91 @return @c false on error */
bf000c32 92 virtual Bool_t End();
9f662337 93 /** Visualize a hit
94 @param hit Hit
95 @param p Track
96 @return @c false on error */
bf000c32 97 virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle* p);
9f662337 98 /** Visualize a digit
99 @param digit Digit to draw
100 @return @c false on error */
bf000c32 101 virtual Bool_t ProcessDigit(AliFMDDigit* digit);
42f1b2f5 102 /** Visualize a summable digit
103 @param sdigit Summable digit to draw
104 @return @c false on error */
105 virtual Bool_t ProcessSDigit(AliFMDSDigit* sdigit);
9f662337 106 /** Visualize a raw digit
107 @param digit Raw digit.
108 @return @c false on error */
59194467 109 virtual Bool_t ProcessRawDigit(AliFMDDigit* digit);
9f662337 110 /** Visualize a reconstructed point.
111 @param recpoint Reconstructed point
112 @return @c false on error */
bf000c32 113 virtual Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint);
a9579262 114 /** Process ESD data for the FMD. Users should overload this to
115 deal with ESD data.
116 @param d Detector number (1-3)
117 @param r Ring identifier ('I' or 'O')
118 @param s Sector number (0-19, or 0-39)
119 @param t Strip number (0-511, or 0-255)
120 @param eta Psuedo-rapidity
121 @param mult Psuedo-multiplicity
122 @return @c false on error */
123 virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t,
124 Float_t eta, Float_t mult);
9f662337 125 /** Look up a color index, based on the value @a x and the maximum
126 value of @a x
127 @param x Value
128 @param max Maximum (for example 1023 for digits)
129 @return @c false on error */
d98fbfa5 130 virtual Int_t LookupColor(Float_t x, Float_t min, Float_t max) const;
ef8e8623 131
132 /** Set range of displayed values */
133 virtual void SetCut(Float_t l=0., Float_t h=1.); //*MENU*
bf000c32 134protected:
15b17c89 135 /** Copy constructor
136 @param o Object to copy from */
b5ee4425 137 AliFMDDisplay(const AliFMDDisplay& o)
138 : AliFMDInput(o),
139 fWait(kFALSE),
140 fMarkers(0),
141 fHits(0),
142 fCanvas(0),
143 fPad(0),
2b893216 144 fButtons(0),
a9579262 145 fSlider(0),
d98fbfa5 146 fFactor(0),
b5ee4425 147 fZoomMode(0),
148 fX0(0),
149 fY0(0),
150 fX1(0),
151 fY1(0),
b5ee4425 152 fXPixel(0),
153 fYPixel(0),
154 fOldXPixel(0),
155 fOldYPixel(0),
2b893216 156 fLineDrawn(0),
157 fOnlyFMD(kTRUE),
158 fSpec(0),
159 fSpecCut(0),
d98fbfa5 160 fAux(0),
2eddac03 161 fReturn(kFALSE),
162 fContinous(kFALSE),
163 fTimeout()
b5ee4425 164 { }
15b17c89 165 /** Assignment operator
166 @return Reference to this object */
02a27b50 167 AliFMDDisplay& operator=(const AliFMDDisplay&) { return *this; }
d98fbfa5 168 /** Add a marker to the display
169 @param x X position
170 @param y Y position
171 @param z Z position
172 @param o Object to refer to
173 @param s Signal
174 @param max Maximum of signal */
175 virtual void AddMarker(Float_t x, Float_t y, Float_t z,
176 TObject* o, Float_t s, Float_t min, Float_t max);
15b17c89 177 /** Add a marker to the display
178 @param det Detector
179 @param rng Ring
180 @param sec Sector
181 @param str Strip
182 @param o Object to refer to
183 @param s Signal
184 @param max Maximum of signal */
a9579262 185 virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
d98fbfa5 186 TObject* o, Float_t s, Float_t min, Float_t max);
a9579262 187
188 /** Show only the FMD detectors. */
189 void ShowOnlyFMD();
190 /** Make base canvas */
191 virtual void MakeCanvas(const char** which);
192 virtual void MakeAux();
193 virtual void DrawAux();
194 virtual void Idle();
195 virtual void AtEnd();
d98fbfa5 196 virtual Bool_t InsideCut(Float_t v, const Float_t& min,
197 const Float_t& max) const;
02a27b50 198
bf000c32 199 static AliFMDDisplay* fgInstance; // Static instance
200 Bool_t fWait; // Wait until user presses `Continue'
201 TObjArray* fMarkers; // Cache of markers
202 TObjArray* fHits; // Cache of `hits'
203 TCanvas* fCanvas; // Canvas to draw in
204 TPad* fPad; // View pad.
a9579262 205 TObjArray fButtons; // Continue button
206 TSlider* fSlider; // Cut slider
d98fbfa5 207 TSlider* fFactor; // Factor slider
bf000c32 208 Bool_t fZoomMode; // Whether we're in Zoom mode
209 Float_t fX0; // X at lower left corner or range
210 Float_t fY0; // Y at lower left corner or range
211 Float_t fX1; // X at upper right corner or range
212 Float_t fY1; // Y at upper right corner or range
213 Int_t fXPixel; // X pixel of mark
214 Int_t fYPixel; // Y pixel of mark
215 Int_t fOldXPixel; // Old x pixel of mark
216 Int_t fOldYPixel; // Old y pixel of mark
217 Bool_t fLineDrawn; // Whether we're drawing a box
5c96b03f 218 Bool_t fOnlyFMD; // Whether to only do FMD
219 TH1* fSpec; // Spectra
220 TH1* fSpecCut; // Cut spectra
221 TCanvas* fAux; // Aux canvas.
d98fbfa5 222 Bool_t fReturn; // Stop
2eddac03 223 Bool_t fContinous;
224 TTimer fTimeout;
225
ef8e8623 226
227 struct Range_t {
228 UInt_t fNbins;
229 Float_t fLow;
230 Float_t fHigh;
231 };
232 static const Range_t fgkEdepRange;
233 static const Range_t fgkAdcRange;
234 static const Range_t fgkMultRange;
235
bf000c32 236 ClassDef(AliFMDDisplay,0) // FMD specialised event display
237};
238
239#endif
240//____________________________________________________________________
241//
242// Local Variables:
243// mode: C++
244// End:
245//
246// EOF
247//