Fix to avoid deleting cached CDB objects - modified fix by Peter.
[u/mrichter/AliRoot.git] / FMD / AliFMDDisplay.h
index 80a7448..cbcd00d 100644 (file)
@@ -20,6 +20,7 @@
 //
 #include "AliFMDInput.h"
 #include <TObjArray.h>
+#include <TTimer.h>
 class TCanvas;
 class TPad;
 class TButton;
@@ -34,94 +35,183 @@ class TH1;
 class AliFMDDisplay : public AliFMDInput
 {
 public:
-  /** Constructor
-      @param onlyFMD Only show the FMD
-      @param gAliceFile galice file*/
+  /** 
+   * Constructor
+   *
+   * @param onlyFMD Only show the FMD
+   * @param gAliceFile galice file
+   */
   AliFMDDisplay(Bool_t onlyFMD=kTRUE, const char* gAliceFile="galice.root");
-  /** DTOR */
+  /** 
+   * DTOR 
+   */
   virtual ~AliFMDDisplay();
-  /** Singleton access function
-      @return Singleton object. */
+  /** 
+   * Singleton access function
+   *
+   * @return Singleton object. 
+   */
   static AliFMDDisplay* Instance();
 
-  /** Continue to next event */
+  /** 
+   * Continue to next event 
+   */
   void  Continue() { fWait = kFALSE; }
-  /** Zoom mode */
+  /** 
+   * 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 */
+  /** 
+   * Pick mode 
+   */
   void  Pick() { fZoomMode = kFALSE; }
-  /** Redisplay the event */ 
+  /** 
+   * Redisplay the event 
+   */ 
   virtual void Redisplay(); // *MENU*
-  /** Break */
+  /** 
+   * Break 
+   */
   virtual void Break();
-  /** Render in 3D */
+  /** 
+   * Render in 3D 
+   */
   virtual void Render();
   
-  /** Change cut */
+  /** 
+   * Change cut 
+   */
   virtual void ChangeCut();
-  /** Change cut */
+  /** 
+   * 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 */
+  /** 
+   * 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 */
+  /** 
+   * Paint into canvas 
+   *
+   * @param option Not used 
+   */
   virtual void  Paint(Option_t* option="") { (void)option; }
 
-  /** Initialize
-      @return  @c false on error */
+  /** 
+   * 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  */
+  /** 
+   * 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  */
+  /** 
+   * 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  */
+  /** 
+   * 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  */
+  /** 
+   * Visualize a digit
+   *
+   * @param digit Digit to draw
+   * @return @c false on error  
+   */
   virtual Bool_t ProcessDigit(AliFMDDigit* digit);
-  /** Visualize a raw digit
-      @param digit Raw digit.
-      @return @c false on error  */
-  virtual Bool_t ProcessRaw(AliFMDDigit* digit);
-  /** Visualize a reconstructed point.
-      @param recpoint Reconstructed point
-      @return @c false on error  */
+  /** 
+   * 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);
-  /** 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  */
+  /** 
+   * 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  */
+  /** 
+   * 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*
+  /** 
+   * Set the noise factor
+   * 
+   * @param f  Noise factor 
+   */
+  virtual void SetFactor(Float_t f=1);
 protected:
-  /** Copy constructor 
-      @param o Object to copy from  */
+  /** 
+   * Copy constructor 
+   *
+   * @param o Object to copy from  
+   */
   AliFMDDisplay(const AliFMDDisplay& o) 
     : AliFMDInput(o),
       fWait(kFALSE),
@@ -146,41 +236,96 @@ protected:
       fSpec(0), 
       fSpecCut(0),
       fAux(0),
-      fReturn(kFALSE)
+      fReturn(kFALSE),
+      fContinous(kFALSE), 
+      fTimeout(), 
+      fInitialMin(0), 
+      fInitialMax(1), 
+      fInitialFactor(3./10)
   { } 
-  /** Assignment operator 
-      @return Reference to this object */
+  /** 
+   * 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 */
+  /** 
+   * 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 */
+  /** 
+   * 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. */
+  /** 
+   * Show only the FMD detectors. 
+   */
   void ShowOnlyFMD();
-  /** Make base canvas */ 
+  /** 
+   * Make base canvas 
+   */ 
   virtual void MakeCanvas(const char** which);
+  /** 
+   * Make AUX canvas 
+   * 
+   */
   virtual void MakeAux();
+  /** 
+   * Draw AUX canvas 
+   * 
+   */
   virtual void DrawAux();
+  /** 
+   * Set the ROOT event loop to idle 
+   * 
+   */
   virtual void Idle();
+  /** 
+   * Called at end of event loop
+   * 
+   */
   virtual void AtEnd();
+  /** 
+   * Whether a point is inside 
+   * 
+   * @param v   Point
+   * @param min Minimum
+   * @param max Maximum
+   * 
+   * @return true if @a v is inside cut 
+   */
   virtual Bool_t InsideCut(Float_t v, const Float_t& min, 
                         const Float_t& max) const;
+  /** 
+   * Get the ADC threshold
+   * 
+   * @param d Detector
+   * @param r Ring 
+   * @param s Sector 
+   * @param t Strip 
+   * 
+   * @return The threshold 
+   */
+  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'
@@ -206,6 +351,21 @@ protected:
   TH1*                  fSpecCut;   // Cut spectra
   TCanvas*              fAux;       // Aux canvas.
   Bool_t                fReturn;    // Stop 
+  Bool_t                fContinous; // Run continuous - do not stop
+  TTimer                fTimeout;   // Timeout 
+  Float_t               fInitialMin;// Initial minimum
+  Float_t               fInitialMax;// Initial maximum
+  Float_t               fInitialFactor;//Initial factor 
+
+  struct Range_t { 
+    UInt_t  fNbins;  // Number of bins
+    Float_t fLow;    // Low cut
+    Float_t fHigh;   // High cut
+  };
+  static const Range_t fgkEdepRange; // Energy loss range
+  static const Range_t fgkAdcRange;  // ADC counts range 
+  static const Range_t fgkMultRange; // Multiplicity range 
+
   ClassDef(AliFMDDisplay,0)  // FMD specialised event display
 };