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