*
* See cxx source for full Copyright notice
*/
+/** @file AliFMDDisplay.h
+ @author Christian Holm Christensen <cholm@nbi.dk>
+ @date Mon Mar 27 12:39:09 2006
+ @brief FMD Event display
+*/
//___________________________________________________________________
//
// The classes defined here, are utility classes for reading in data
// various types of data produced by the FMD.
//
#include "AliFMDInput.h"
-class TObjArray;
+#include <TObjArray.h>
+#include <TTimer.h>
class TCanvas;
class TPad;
class TButton;
+class TSlider;
+class TH1;
//___________________________________________________________________
+/** @class AliFMDDisplay
+ @brief Utility class to visualize FMD data in geometry.
+ @ingroup FMD_util
+ */
class AliFMDDisplay : public AliFMDInput
{
public:
- AliFMDDisplay(const char* gAliceFile="galice.root");
- virtual ~AliFMDDisplay() {}
+ /** Constructor
+ @param onlyFMD Only show the FMD
+ @param gAliceFile galice file*/
+ AliFMDDisplay(Bool_t onlyFMD=kTRUE, const char* gAliceFile="galice.root");
+ /** DTOR */
+ virtual ~AliFMDDisplay();
+ /** Singleton access function
+ @return Singleton object. */
static AliFMDDisplay* Instance();
+ /** Continue to next event */
void Continue() { fWait = kFALSE; }
+ /** Run throug events as fast as possible */
+ void Start() { fContinous = kTRUE; fWait = kFALSE; }
+ /** Pause the processing */
+ void Pause() { fContinous = kFALSE; fWait = kTRUE; }
+ /** Zoom mode */
void Zoom() { fZoomMode = kTRUE; }
+ /** Pick mode */
void Pick() { fZoomMode = kFALSE; }
- void ExecuteEvent(Int_t event, Int_t px, Int_t py);
- Int_t DistancetoPrimitive(Int_t px, Int_t py);
- void Paint(Option_t* option="") { (void)option; }
+ /** Redisplay the event */
+ virtual void Redisplay(); // *MENU*
+ /** Break */
+ virtual void Break();
+ /** Render in 3D */
+ virtual void Render();
+
+ /** Change cut */
+ virtual void ChangeCut();
+ /** Change cut */
+ virtual void ChangeFactor();
+ /** Called when a mouse or similar event happens in the display.
+ @param event Event type
+ @param px where the event happened in pixels along X
+ @param py where the event happened in pixels along Y */
+ virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
+ /** Calculate distance from point @f$ (p_x,p_y)@f$ to this object.
+ @param px Pixel X coordinate
+ @param py Pixel Y coordinate
+ @return distance. */
+ virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
+ /** Paint into canvas
+ @param option Not used */
+ virtual void Paint(Option_t* option="") { (void)option; }
+ /** Initialize
+ @return @c false on error */
virtual Bool_t Init();
+ /** Called at beginning of an event
+ @param event Event number
+ @return @c false on error */
virtual Bool_t Begin(Int_t event);
+ /** Called at end of an event
+ @return @c false on error */
virtual Bool_t End();
+ /** Visualize a hit
+ @param hit Hit
+ @param p Track
+ @return @c false on error */
virtual Bool_t ProcessHit(AliFMDHit* hit, TParticle* p);
+ /** Visualize a digit
+ @param digit Digit to draw
+ @return @c false on error */
virtual Bool_t ProcessDigit(AliFMDDigit* digit);
- virtual Bool_t ProcessRaw(AliFMDDigit* digit);
+ /** Visualize a summable digit
+ @param sdigit Summable digit to draw
+ @return @c false on error */
+ virtual Bool_t ProcessSDigit(AliFMDSDigit* sdigit);
+ /** Visualize a raw digit
+ @param digit Raw digit.
+ @return @c false on error */
+ virtual Bool_t ProcessRawDigit(AliFMDDigit* digit);
+ /** Visualize a reconstructed point.
+ @param recpoint Reconstructed point
+ @return @c false on error */
virtual Bool_t ProcessRecPoint(AliFMDRecPoint* recpoint);
- virtual Int_t LookupColor(Float_t x, Float_t max) const;
+ /** Process ESD data for the FMD. Users should overload this to
+ deal with ESD data.
+ @param d Detector number (1-3)
+ @param r Ring identifier ('I' or 'O')
+ @param s Sector number (0-19, or 0-39)
+ @param t Strip number (0-511, or 0-255)
+ @param eta Psuedo-rapidity
+ @param mult Psuedo-multiplicity
+ @return @c false on error */
+ virtual Bool_t ProcessESD(UShort_t d, Char_t r, UShort_t s, UShort_t t,
+ Float_t eta, Float_t mult);
+ /** Look up a color index, based on the value @a x and the maximum
+ value of @a x
+ @param x Value
+ @param max Maximum (for example 1023 for digits)
+ @return @c false on error */
+ virtual Int_t LookupColor(Float_t x, Float_t min, Float_t max) const;
+
+ /** Set range of displayed values */
+ virtual void SetCut(Float_t l=0., Float_t h=1.); //*MENU*
protected:
+ /** Copy constructor
+ @param o Object to copy from */
+ AliFMDDisplay(const AliFMDDisplay& o)
+ : AliFMDInput(o),
+ fWait(kFALSE),
+ fMarkers(0),
+ fHits(0),
+ fCanvas(0),
+ fPad(0),
+ fButtons(0),
+ fSlider(0),
+ fFactor(0),
+ fZoomMode(0),
+ fX0(0),
+ fY0(0),
+ fX1(0),
+ fY1(0),
+ fXPixel(0),
+ fYPixel(0),
+ fOldXPixel(0),
+ fOldYPixel(0),
+ fLineDrawn(0),
+ fOnlyFMD(kTRUE),
+ fSpec(0),
+ fSpecCut(0),
+ fAux(0),
+ fReturn(kFALSE),
+ fContinous(kFALSE),
+ fTimeout()
+ { }
+ /** Assignment operator
+ @return Reference to this object */
+ AliFMDDisplay& operator=(const AliFMDDisplay&) { return *this; }
+ /** Add a marker to the display
+ @param x X position
+ @param y Y position
+ @param z Z position
+ @param o Object to refer to
+ @param s Signal
+ @param max Maximum of signal */
+ virtual void AddMarker(Float_t x, Float_t y, Float_t z,
+ TObject* o, Float_t s, Float_t min, Float_t max);
+ /** Add a marker to the display
+ @param det Detector
+ @param rng Ring
+ @param sec Sector
+ @param str Strip
+ @param o Object to refer to
+ @param s Signal
+ @param max Maximum of signal */
+ virtual void AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str,
+ TObject* o, Float_t s, Float_t min, Float_t max);
+
+ /** Show only the FMD detectors. */
+ void ShowOnlyFMD();
+ /** Make base canvas */
+ virtual void MakeCanvas(const char** which);
+ virtual void MakeAux();
+ virtual void DrawAux();
+ virtual void Idle();
+ virtual void AtEnd();
+ virtual Bool_t InsideCut(Float_t v, const Float_t& min,
+ const Float_t& max) const;
+
static AliFMDDisplay* fgInstance; // Static instance
Bool_t fWait; // Wait until user presses `Continue'
TObjArray* fMarkers; // Cache of markers
TObjArray* fHits; // Cache of `hits'
TCanvas* fCanvas; // Canvas to draw in
TPad* fPad; // View pad.
- TButton* fButton; // Continue button
- TButton* fZoom; // Zoom button
- TButton* fPick; // Pick button
+ TObjArray fButtons; // Continue button
+ TSlider* fSlider; // Cut slider
+ TSlider* fFactor; // Factor slider
Bool_t fZoomMode; // Whether we're in Zoom mode
Float_t fX0; // X at lower left corner or range
Float_t fY0; // Y at lower left corner or range
Int_t fOldXPixel; // Old x pixel of mark
Int_t fOldYPixel; // Old y pixel of mark
Bool_t fLineDrawn; // Whether we're drawing a box
+ Bool_t fOnlyFMD; // Whether to only do FMD
+ TH1* fSpec; // Spectra
+ TH1* fSpecCut; // Cut spectra
+ TCanvas* fAux; // Aux canvas.
+ Bool_t fReturn; // Stop
+ Bool_t fContinous;
+ TTimer fTimeout;
+
+
+ struct Range_t {
+ UInt_t fNbins;
+ Float_t fLow;
+ Float_t fHigh;
+ };
+ static const Range_t fgkEdepRange;
+ static const Range_t fgkAdcRange;
+ static const Range_t fgkMultRange;
+
ClassDef(AliFMDDisplay,0) // FMD specialised event display
};