1 #ifndef AliFMDDISPLAY_H
2 #define AliFMDDISPLAY_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
6 * See cxx source for full Copyright notice
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
13 //___________________________________________________________________
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.
21 #include "AliFMDInput.h"
22 #include <TObjArray.h>
30 //___________________________________________________________________
31 /** @class AliFMDDisplay
32 @brief Utility class to visualize FMD data in geometry.
35 class AliFMDDisplay : public AliFMDInput
39 @param onlyFMD Only show the FMD
40 @param gAliceFile galice file*/
41 AliFMDDisplay(Bool_t onlyFMD=kTRUE, const char* gAliceFile="galice.root");
43 virtual ~AliFMDDisplay();
44 /** Singleton access function
45 @return Singleton object. */
46 static AliFMDDisplay* Instance();
48 /** Continue to next event */
49 void Continue() { fWait = kFALSE; }
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; }
55 void Zoom() { fZoomMode = kTRUE; }
57 void Pick() { fZoomMode = kFALSE; }
58 /** Redisplay the event */
59 virtual void Redisplay(); // *MENU*
63 virtual void Render();
66 virtual void ChangeCut();
68 virtual void ChangeFactor();
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 */
73 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
75 @param option Not used */
76 virtual void Paint(Option_t* option="") { (void)option; }
79 @return @c false on error */
80 virtual Bool_t Init();
81 /** Called at beginning of an event
82 @param event Event number
83 @return @c false on error */
84 virtual Bool_t Begin(Int_t event);
85 /** Called at end of an event
86 @return @c false on error */
91 @return @c false on error */
92 virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle* p);
94 @param digit Digit to draw
95 @return @c false on error */
96 virtual Bool_t ProcessDigit(AliFMDDigit* digit);
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);
101 /** Visualize a raw digit
102 @param digit Raw digit.
103 @return @c false on error */
104 virtual Bool_t ProcessRawDigit(AliFMDDigit* digit);
105 /** Visualize a raw digit
106 @param digit Raw digit.
107 @return @c false on error */
108 virtual Bool_t ProcessRawCalibDigit(AliFMDDigit* digit);
109 /** Visualize a reconstructed point.
110 @param recpoint Reconstructed point
111 @return @c false on error */
112 virtual Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint);
113 /** Process ESD data for the FMD. Users should overload this to
115 @param d Detector number (1-3)
116 @param r Ring identifier ('I' or 'O')
117 @param s Sector number (0-19, or 0-39)
118 @param t Strip number (0-511, or 0-255)
119 @param eta Psuedo-rapidity
120 @param mult Psuedo-multiplicity
121 @return @c false on error */
122 virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t,
123 Float_t eta, Float_t mult);
124 /** Look up a color index, based on the value @a x and the maximum
127 @param max Maximum (for example 1023 for digits)
128 @return @c false on error */
129 virtual Int_t LookupColor(Float_t x, Float_t min, Float_t max) const;
131 /** Set range of displayed values */
132 virtual void SetCut(Float_t l=0., Float_t h=1.); //*MENU*
133 virtual void SetFactor(Float_t f=1);
136 @param o Object to copy from */
137 AliFMDDisplay(const AliFMDDisplay& o)
166 fInitialFactor(3./10)
168 /** Assignment operator
169 @return Reference to this object */
170 AliFMDDisplay& operator=(const AliFMDDisplay&) { return *this; }
171 /** Add a marker to the display
175 @param o Object to refer to
177 @param max Maximum of signal */
178 virtual void AddMarker(Float_t x, Float_t y, Float_t z,
179 TObject* o, Float_t s, Float_t min, Float_t max);
180 /** Add a marker to the display
185 @param o Object to refer to
187 @param max Maximum of signal */
188 virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
189 TObject* o, Float_t s, Float_t min, Float_t max);
191 /** Show only the FMD detectors. */
193 /** Make base canvas */
194 virtual void MakeCanvas(const char** which);
195 virtual void MakeAux();
196 virtual void DrawAux();
198 virtual void AtEnd();
199 virtual Bool_t InsideCut(Float_t v, const Float_t& min,
200 const Float_t& max) const;
201 virtual Double_t GetADCThreshold(UShort_t d, Char_t r,
202 UShort_t s, UShort_t t) const;
204 static AliFMDDisplay* fgInstance; // Static instance
205 Bool_t fWait; // Wait until user presses `Continue'
206 TObjArray* fMarkers; // Cache of markers
207 TObjArray* fHits; // Cache of `hits'
208 TCanvas* fCanvas; // Canvas to draw in
209 TPad* fPad; // View pad.
210 TObjArray fButtons; // Continue button
211 TSlider* fSlider; // Cut slider
212 TSlider* fFactor; // Factor slider
213 Bool_t fZoomMode; // Whether we're in Zoom mode
214 Float_t fX0; // X at lower left corner or range
215 Float_t fY0; // Y at lower left corner or range
216 Float_t fX1; // X at upper right corner or range
217 Float_t fY1; // Y at upper right corner or range
218 Int_t fXPixel; // X pixel of mark
219 Int_t fYPixel; // Y pixel of mark
220 Int_t fOldXPixel; // Old x pixel of mark
221 Int_t fOldYPixel; // Old y pixel of mark
222 Bool_t fLineDrawn; // Whether we're drawing a box
223 Bool_t fOnlyFMD; // Whether to only do FMD
224 TH1* fSpec; // Spectra
225 TH1* fSpecCut; // Cut spectra
226 TCanvas* fAux; // Aux canvas.
227 Bool_t fReturn; // Stop
232 Float_t fInitialFactor;
239 static const Range_t fgkEdepRange;
240 static const Range_t fgkAdcRange;
241 static const Range_t fgkMultRange;
243 ClassDef(AliFMDDisplay,0) // FMD specialised event display
247 //____________________________________________________________________