#ifndef LCDEventDisplay_h
#define LCDEventDisplay_h

#include "TCanvas.h"
#include "TPad.h"
#include "TTUBE.h"
#include "TNode.h"
//#include "TObject.h"

#include "LCDGetParameters.h"
#include "LCDEvent.h"
#include "LCDDetectorVolume.h"
#include "LCDSwimTraj.h"

class LCDEventDisplay {
public :

  LCDEventDisplay();
  LCDEventDisplay(LCDGetParameters* gp);
  virtual ~LCDEventDisplay();
  //~LCDEventDisplay(){}

  void Delete();

  void Draw(LCDEvent* event);           // draw this event
  void SetClusterParam();
  
  void SetCOIL()  {m_COIL   = 1;}
  void SetNoCOIL()  {m_COIL   = 0;}

  void SetEMCAL() {m_EMCAL   = 1;}
  void SetNoEMCAL() {m_EMCAL   = 0;}

  void SetEMCALHit() {m_EMCALHit = 1;}
  void SetNoEMCALHit() {m_EMCALHit = 0;}

  void SetENDCAL() {m_ENDCAL = 1;}
  void SetNoENDCAL() {m_ENDCAL = 0;}

  void SetENDCALHit() {m_ENDCALHit = 1;}
  void SetNoENDCALHit() {m_ENDCALHit = 0;}

  void SetHDCAL(){m_HDCAL = 1;}
  void SetNoHDCAL(){m_HDCAL = 0;}

  void SetHDCALHit() {m_HDCALHit = 1;}
  void SetNoHDCALHit() {m_HDCALHit = 0;}

  void SetMUCAL() {m_MUCAL  = 1;}
  void SetNoMUCAL() {m_MUCAL  = 0;}
  
  void SetMUCALHit() {m_MUCALHit  = 1;}
  void SetNoMUCALHit() {m_MUCALHit  = 0;}
  
  void SetLMCAL() {m_LMCAL  = 1;}
  void SetNoLMCAL() {m_LMCAL  = 0;}
  
  void SetLMCALHit() {m_LMCALHit  = 1;}
  void SetNoLMCALHit() {m_LMCALHit  = 0;}
  
  void SetTRK() {m_TRK  = 1;}
  void SetNoTRK() {m_TRK  = 0;}
  
  void SetTRKHit() {m_TRKHit  = 1;}
  void SetNoTRKHit() {m_TRKHit  = 0;}
  
  void SetVXD() {m_VXD  = 1;}
  void SetNoVXD() {m_VXD  = 0;}
  
  void SetGismo() {m_Gismo =1;}
  void SetNoGismo() {m_Gismo =0;}

  void SetColor()      {m_BW   = 0;}
  void SetBlackWhite() {m_BW   = 1;}
  
  void SetTheta(Double_t theta){m_Theta = theta;}
  void SetPhi(Double_t phi){m_Phi = phi;}
  
  void SetDetectorParameters(LCDGetParameters* gp);

private:
  LCDGetParameters*  m_gp;
  
  TObjArray* m_TrackList;      // list of Tracks
  TObjArray* m_ClusterList;    // list of Clusters
  TObjArray* m_CalHitList;     // list of Cal hits
  TObjArray* m_TrackerHitsList;// list of tracker hit points
  TObjArray* m_VXDHitsList;    // list of VXD hit points

  TCanvas* m_canvas;
  TPad* m_viewpad;

  TTUBE* m_beampipe;
  TTUBE* m_tracker;
  TTUBE* m_barrel_EM;
  TTUBE* m_coil;
  TTUBE* m_barrel_HAD;
  TTUBE* m_barrel_MU;
  
  TNode* node0;
  TNode* node1;
  TNode* node2;
  TNode* node3;
  TNode* node4;
  TNode* node5;

  Int_t m_COIL;
  Int_t m_BW;

  Int_t m_EMCAL;
  Int_t m_EMCALHit;
  Int_t m_ENDCAL;
  Int_t m_ENDCALHit;
  Int_t m_HDCAL;
  Int_t m_HDCALHit;
  Int_t m_MUCAL;
  Int_t m_MUCALHit;
  Int_t m_LMCAL;
  Int_t m_LMCALHit;
  Int_t m_TRK;
  Int_t m_TRKHit;
  Int_t m_VXD;

  Int_t m_Gismo;
  
  Float_t m_hitEscale[4];
  Float_t m_hitThetaSeg[4];
  Float_t m_hitphiSeg[4];
  Float_t m_barrelThick[4]; 
  Float_t m_endcapThick[4]; 
  Float_t m_barrelInner[4]; 
  Float_t m_endcapInner[4];

  Double_t m_Theta;
  Double_t m_Phi;
  
  LCDSwimTraj    traj;
  LCDDetectorVolume* pVolumes;       // Array of detector volumes
  LCDDetectorVolume* pInnerVolume;   // Innermost volume about IP
  Int_t           nVolumes;       // Number of detector volumes in array
  
  void Init();

public:
  ClassDef(LCDEventDisplay,3) // Event Display classes

};

#endif

