#ifndef ROOT_TEveCaloData
#define ROOT_TEveCaloData
#include <vector>
#include "Rtypes.h"
#include "TEveUtil.h"
class TH2F;
class TAxis;
class THStack;
class TEveCaloData: public TEveRefBackPtr
{
public:
   struct SliceInfo_t
   {
      TString  fName;
      Float_t  fThreshold;
      Int_t    fID;
      Color_t  fColor;
      TH2F    *fHist;
      SliceInfo_t(): fName(""), fThreshold(0), fID(-1), fColor(Color_t(4)), fHist(0){}
      SliceInfo_t(TH2F* h): fName(""), fThreshold(0), fID(-1), fColor(Color_t(4)), fHist(h) {}
      virtual ~SliceInfo_t() {}
      void Setup(const char* name, Float_t threshold, Color_t col)
      {
         fName      = name;
         fThreshold = threshold;
         fColor     = col;
      };
      ClassDef(SliceInfo_t, 0); 
   };
   typedef std::vector<SliceInfo_t>           vSliceInfo_t;
   typedef std::vector<SliceInfo_t>::iterator vSliceInfo_i;
   
   struct CellId_t
   {
      
      Int_t fTower;
      Int_t fSlice;
      CellId_t(Int_t t, Int_t s):fTower(t), fSlice(s){}
   };
   struct CellData_t
   {
      
      Float_t fValue;
      Float_t fPhiMin;
      Float_t fPhiMax;
      Float_t fThetaMin;  
      Float_t fThetaMax;
      Float_t fEtaMin;
      Float_t fEtaMax;
      Int_t   fZSideSign;
      CellData_t(): fValue(0), fPhiMin(0), fPhiMax(0), fThetaMin(0), fThetaMax(0), fZSideSign(1) {}
      void Configure(Float_t v, Float_t e1, Float_t e2, Float_t p1, Float_t p2);
      Float_t Value(Bool_t)    const;
      Float_t EtaMin()   const { return fEtaMin; }
      Float_t EtaMax()   const { return fEtaMax; }
      Float_t Eta()      const { return (fEtaMin+fEtaMax)*0.5f; }
      Float_t EtaDelta() const { return fEtaMax-fEtaMin; }
      Float_t ThetaMin() const { return fThetaMin; }
      Float_t ThetaMax() const { return fThetaMax; }
      Float_t Theta() const { return (fThetaMax+fThetaMin)*0.5f; }
      Float_t ThetaDelta() const { return fThetaMax-fThetaMin; }
      Float_t PhiMin()   const { return fPhiMin; }
      Float_t PhiMax()   const { return fPhiMax; }
      Float_t Phi()      const { return (fPhiMin+fPhiMax)*0.5f; }
      Float_t PhiDelta() const { return fPhiMax-fPhiMin; }
      Float_t ZSideSign()const { return fZSideSign;}
      void Dump() const;
   };
   typedef std::vector<CellId_t>           vCellId_t;
   typedef std::vector<CellId_t>::iterator vCellId_i;
private:
   TEveCaloData(const TEveCaloData&);            
   TEveCaloData& operator=(const TEveCaloData&); 
protected:
   vSliceInfo_t fSliceInfos;
   TAxis*       fEtaAxis;
   TAxis*       fPhiAxis;
public:
   TEveCaloData();
   virtual ~TEveCaloData(){}
   virtual void GetCellList(Float_t etaMin, Float_t etaMax,
                            Float_t phi, Float_t phiRng, vCellId_t &out) const = 0;
   virtual void GetCellData(const CellId_t &id, CellData_t& data) const = 0;
   virtual void GetCellData(const CellId_t &id, Float_t  phiMin, Float_t phiRng, CellData_t& data) const = 0;
  
   virtual void SetSliceThreshold(Int_t slice, Float_t threshold);
   virtual void SetSliceColor(Int_t slice, Color_t col);
   virtual void  InvalidateUsersCellIdCache();
   virtual void  DataChanged();
   virtual Bool_t SupportsEtaBinning(){ return kFALSE; }
   virtual Bool_t SupportsPhiBinning(){ return kFALSE; }
   virtual TAxis* GetEtaBins(){ return fEtaAxis;} 
   virtual TAxis* GetPhiBins(){ return fPhiAxis ;}
   virtual Int_t    GetNSlices() const = 0; 
   virtual Float_t  GetMaxVal(Bool_t et) const = 0;
   SliceInfo_t&     RefSliceInfo(Int_t s) { return fSliceInfos[s]; }
   virtual void  GetEtaLimits(Double_t &min, Double_t &max) const = 0;
   virtual void  GetPhiLimits(Double_t &min, Double_t &max) const = 0;
   ClassDef(TEveCaloData, 0); 
};
class TEveCaloDataHist: public TEveCaloData
{
private:
   TEveCaloDataHist(const TEveCaloDataHist&);            
   TEveCaloDataHist& operator=(const TEveCaloDataHist&); 
protected:
   THStack*    fHStack;
   Float_t     fMaxValEt; 
   Float_t     fMaxValE;  
public:
   TEveCaloDataHist();
   virtual ~TEveCaloDataHist();
   THStack* GetStack() { return fHStack; }  
   virtual void  DataChanged();
   virtual void GetCellList( Float_t etaMin, Float_t etaMax,
                             Float_t phi, Float_t phiRng, vCellId_t &out) const;
   virtual void GetCellData(const TEveCaloData::CellId_t &id, TEveCaloData::CellData_t& data) const;
   virtual void GetCellData(const CellId_t &id, Float_t  phiMin, Float_t phiRng, CellData_t& data) const;
   virtual Bool_t SupportsEtaBinning(){ return kTRUE; }
   virtual Bool_t SupportsPhiBinning(){ return kTRUE; }
   virtual void    GetEtaLimits(Double_t &min, Double_t &max) const;
   virtual void    GetPhiLimits(Double_t &min, Double_t &max) const;
   Int_t   AddHistogram(TH2F* hist);
   virtual Float_t GetMaxVal(Bool_t et) const {return (et)? fMaxValEt:fMaxValE;}
   virtual Int_t   GetNSlices() const;
   ClassDef(TEveCaloDataHist, 0); 
};
#endif
Last change: Wed Jun 25 08:36:35 2008
Last generated: 2008-06-25 08:36
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.