// $Id: EFocalSurface3DPainter.hh,v 1.4 2005/11/02 02:02:31 thea Exp $
// Author: Alessandro Thea   2005/07/13

/*****************************************************************************
 * ESAF: Euso Simulation and Analysis Framework                              *
 *                                                                           *
 *  Id: EFocalSurface3DPainter                                               *
 *  Package: <packagename>                                                   *
 *  Coordinator: <coordinator>                                               *
 *                                                                           *
 *****************************************************************************/

#ifndef __EFOCALSURFACE3DPAINTER_HH__
#define __EFOCALSURFACE3DPAINTER_HH__

#include <TObject.h>
#include <Gtypes.h>
#include <TLatex.h>

class EEvent;
class EDetector;
class ERunParameters;
class TAxis3D;
class TGaxis;


////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// EFocalSurface3DPainter                                                     //
//                                                                            //  
// <brief class description>                                                  //  
//                                                                            //  
////////////////////////////////////////////////////////////////////////////////

class EFocalSurface3DPainter : public TObject {
public:
    EFocalSurface3DPainter();
    EFocalSurface3DPainter( EEvent* );
    EFocalSurface3DPainter( EDetector*, ERunParameters* );
    virtual ~EFocalSurface3DPainter();

    
    virtual  void Load( EEvent* );
    virtual  void Load( EDetector*, ERunParameters* );
    virtual  void Clear( Option_t* ="" );
    virtual  void Paint( Option_t* ="" );
    virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
    virtual  void Draw( Option_t* ="" );

    virtual Double_t GetAlpha() const { return fAlpha; };
    virtual  Style_t GetMarkerStyle() const { return fMarkerStyle; }
    virtual  Float_t GetMaxMarkerSize() const { return fMaxMarkerSize;}
    virtual  Color_t GetMinMarkerColor() const { return fMinMarkerColor;}
    virtual  Float_t GetMinMarkerSize() const { return fMinMarkerSize;}
    virtual    Int_t GetNumMarkerColors() const { return fNumMarkerColors;}
    virtual  Color_t GetBackgroundColor() const { return fBackgroundColor; }
    virtual  Int_t GetDrawCode() const { return fDrawCode; }

    virtual void SetAlpha( Double_t alpha ) { fAlpha = alpha; Modified(); } // *MENU*
    virtual void SetBackgroundColor( Color_t color ) { fBackgroundColor = color; }
    virtual void SetMarkerStyle(Style_t mstyle ) { fMarkerStyle = mstyle;} // *MENU*
    virtual void SetMinMarkerColor( Color_t color ) { fMinMarkerColor = color; Modified();}// *MENU*
    virtual void SetMaxMarkerSize( Float_t max ) { fMaxMarkerSize = max; Modified();}// *MENU*
    virtual void SetMinMarkerSize( Float_t min ) { fMinMarkerSize = min; Modified();}// *MENU*
    virtual void SetNumMarkerColors( Int_t n ) { fNumMarkerColors = n; Modified();}// *MENU*
    virtual void SetDrawCode( Int_t code ) { fDrawCode = code; Modified();}// *MENU*
        
    virtual Bool_t IsModified() { return fModified; }
    virtual void Modified( Bool_t mod = kTRUE) { fModified = mod; }
    virtual void Update();

private:

    enum { kCodeHits = 0, kCodeSigs = 1 };
    void Constructor();
    
    EDetector *fDetector;
    ERunParameters *fRunPars;

    Double_t fAlpha;
    Double_t fMeanThres;

    Style_t fMarkerStyle; 
    Float_t fMaxMarkerSize;
    Float_t fMinMarkerSize;
    Color_t fMinMarkerColor;
    Int_t   fNumMarkerColors;
    Color_t fBackgroundColor;

    TLatex* fLabel;
    TGaxis* fAxis;
    Int_t fDrawCode;

    TObjArray* fHits;
    Int_t fNumMarkers;

    TObjArray* fSignals;
    Int_t fNumSignals;
    
    TObjArray* fPixels;
    Int_t fNumPixels;

    TAxis3D* fAxis3D;

    Double_t fXmin;
    Double_t fXmax;
    Double_t fYmin;
    Double_t fYmax;
    Double_t fTmin;
    Double_t fTmax;
    Int_t fCmin;
    Int_t fCmax;
    Bool_t fModified;

    ClassDef(EFocalSurface3DPainter,1)
};

#endif  /* __EFOCALSURFACE3DPAINTER_HH__ */