]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDDisplay.h
Moving the FMD offline trigger to its own class, AliFMDOfflineTrigger
[u/mrichter/AliRoot.git] / FMD / AliFMDDisplay.h
index 04ff8e142dcc0db743d93ef78e1e55d6b138985a..b3801192fc3e3713a112d277c2e51e5163864c21 100644 (file)
@@ -5,6 +5,11 @@
  *
  * 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);
+  /** 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);
+  /** 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);
+  /** 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 raw digit
+      @param digit Raw digit.
+      @return @c false on error  */
+  virtual Bool_t ProcessRawCalibDigit(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*
+  virtual void SetFactor(Float_t f=1);
 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(), 
+      fInitialMin(0), 
+      fInitialMax(1), 
+      fInitialFactor(3./10)
+  { } 
+  /** 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;
+  virtual Double_t GetADCThreshold(UShort_t d, Char_t r, 
+                                  UShort_t s, UShort_t t) 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 
@@ -61,6 +220,26 @@ protected:
   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;
+  Float_t               fInitialMin;
+  Float_t               fInitialMax;
+  Float_t               fInitialFactor;
+
+  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
 };