ROOT logo
//
// Store the data related to each Super Module
//
//  Author: Magali Estienne (magali.estienne@cern.ch)
//  June 30 2008
//

#ifndef ALIEVEEMCALSMODULEDATA_H
#define ALIEVEEMCALSMODULEDATA_H

#include <vector>

#include <AliEveEMCALData.h>

class TClonesArray;
class TGeoNode;
class TGeoMatrix;
class TEvePointSet;
class TEveQuadSet;

class TEveBoxSet;
class TEveFrameBox;
class TEvePointSet;
class TEveTrans;
class TTree;
class TStyle;
class TGedFrame;
class TBuffer3DTypes;
class TBuffer3D;
class TVirtualPad;
class TVirtualViewer3D;
class AliRun;
class AliEMCALGeometry;
class AliESDEvent;
class AliEMCAL;
class AliEMCALHit;
class AliEMCALDigit;
class AliEMCALGeometry;


class AliEveEMCALSModuleData : public TObject
{
public:
  AliEveEMCALSModuleData(Int_t chamber,AliEMCALGeometry* geom,TGeoNode* node, TGeoHMatrix* m);
  virtual ~AliEveEMCALSModuleData();

  void        DropData();
  void        Init(Int_t sm);
  void        RegisterDigit(Int_t AbsId, Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz);
  void        RegisterCluster(Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz); 
  void        RegisterHit(Int_t AbsId, Int_t isupMod, Double_t iamp, Double_t ix, Double_t iy, Double_t iz); 
  Int_t       GetNDigits()   const { return fNDigits;   }; 
  Int_t       GetNClusters() const { return fNClusters; }; 
  Int_t       GetNHits()     const { return fNHits;     }; 
  Int_t       GetSmId()      const { return fSmId; };
  Int_t       GetNsm()       const {return fNsm;};
  Int_t       GetNsmf()      const {return fNsmfull;};
  Int_t       GetNsmh()      const {return fNsmhalf;};
  std::vector< std::vector<Double_t> > GetDigitBuffer() const  { return fDigitArray;   };  
  std::vector< std::vector<Double_t> > GetClusterBuffer() const { return fClusterArray; };  
  std::vector< std::vector<Float_t> > GetHitBuffer() const { return fHitArray;     };  

  void        GetSModuleBigBox(Float_t& bbox0, Float_t& bbox1, Float_t& bbox2) 
  const { bbox0 = fgSModuleBigBox0; bbox1 = fgSModuleBigBox1; bbox2 = fgSModuleBigBox2;};
  void        GetSModuleSmallBox(Float_t& bbox0, Float_t& bbox1, Float_t& bbox2) 
  const { bbox0 = fgSModuleSmallBox0; bbox1 = fgSModuleSmallBox1; bbox2 = fgSModuleSmallBox2;};
  void        GetSModuleCenter(Float_t& bboxCenter0, Float_t& bboxCenter1, Float_t& bboxCenter2) 
  const { bboxCenter0 = fgSModuleCenter0; bboxCenter1 = fgSModuleCenter1; bboxCenter2 = fgSModuleCenter2;};
  Float_t     GetPhiTileSize() const  {return fPhiTileSize;};
  Float_t     GetEtaTileSize() const  {return fEtaTileSize;};
  TGeoMatrix* GetSModuleMatrix() const {return fMatrix;};
  
 protected:
  AliEMCALGeometry* fGeom;                 // Data member to set/call EMCAL geometry
  TGeoNode*         fNode;                 // Node for bbox definition
  Int_t             fSmId;                 // number of the chamber, 0 to 13 
  Int_t             fNsm;                  // Total number of super modules
  Int_t             fNsmfull;              // Number of full super modules
  Int_t             fNsmhalf;              // Number of half super modules
  Int_t             fNDigits;              // number of found digits 
  Int_t             fNClusters;            // number of found rec points 
  Int_t             fNHits;                // number of simulation hits 
  
  Float_t           fPhiTileSize;          // Typical phi size of a QuadSet (digit)
  Float_t           fEtaTileSize;          // Typical eta size of a QuadSet (digit)
  
  std::vector< std::vector<Float_t> > fHitArray;     //|| Hit coordinates, etc.
  std::vector< std::vector<Double_t> > fDigitArray;   //|| Digit coordinates, etc.
  std::vector< std::vector<Double_t> > fClusterArray; //|| Rec point coordinates, etc.
  
  static Float_t    fgSModuleBigBox0;       // SM envelope box
  static Float_t    fgSModuleBigBox1;       // SM envelope box
  static Float_t    fgSModuleBigBox2;       // SM envelope box
  static Float_t    fgSModuleSmallBox0;     // SM envelope box
  static Float_t    fgSModuleSmallBox1;     // SM envelope box
  static Float_t    fgSModuleSmallBox2;     // SM envelope box
  static Float_t    fgSModuleCenter0;       // SM envelope box
  static Float_t    fgSModuleCenter1;       // SM envelope box
  static Float_t    fgSModuleCenter2;       // SM envelope box

  TGeoMatrix*   fMatrix;                   // Matrix for local to global transformation
  TGeoHMatrix*  fHMatrix;                  // Matrix for local to global transformation

 private:
  AliEveEMCALSModuleData(const AliEveEMCALSModuleData& esmdata);            
  AliEveEMCALSModuleData& operator=(const AliEveEMCALSModuleData&); // Not implemented
  
  ClassDef(AliEveEMCALSModuleData, 0);     // class with data for one chamber
};

#endif
 AliEveEMCALSModuleData.h:1
 AliEveEMCALSModuleData.h:2
 AliEveEMCALSModuleData.h:3
 AliEveEMCALSModuleData.h:4
 AliEveEMCALSModuleData.h:5
 AliEveEMCALSModuleData.h:6
 AliEveEMCALSModuleData.h:7
 AliEveEMCALSModuleData.h:8
 AliEveEMCALSModuleData.h:9
 AliEveEMCALSModuleData.h:10
 AliEveEMCALSModuleData.h:11
 AliEveEMCALSModuleData.h:12
 AliEveEMCALSModuleData.h:13
 AliEveEMCALSModuleData.h:14
 AliEveEMCALSModuleData.h:15
 AliEveEMCALSModuleData.h:16
 AliEveEMCALSModuleData.h:17
 AliEveEMCALSModuleData.h:18
 AliEveEMCALSModuleData.h:19
 AliEveEMCALSModuleData.h:20
 AliEveEMCALSModuleData.h:21
 AliEveEMCALSModuleData.h:22
 AliEveEMCALSModuleData.h:23
 AliEveEMCALSModuleData.h:24
 AliEveEMCALSModuleData.h:25
 AliEveEMCALSModuleData.h:26
 AliEveEMCALSModuleData.h:27
 AliEveEMCALSModuleData.h:28
 AliEveEMCALSModuleData.h:29
 AliEveEMCALSModuleData.h:30
 AliEveEMCALSModuleData.h:31
 AliEveEMCALSModuleData.h:32
 AliEveEMCALSModuleData.h:33
 AliEveEMCALSModuleData.h:34
 AliEveEMCALSModuleData.h:35
 AliEveEMCALSModuleData.h:36
 AliEveEMCALSModuleData.h:37
 AliEveEMCALSModuleData.h:38
 AliEveEMCALSModuleData.h:39
 AliEveEMCALSModuleData.h:40
 AliEveEMCALSModuleData.h:41
 AliEveEMCALSModuleData.h:42
 AliEveEMCALSModuleData.h:43
 AliEveEMCALSModuleData.h:44
 AliEveEMCALSModuleData.h:45
 AliEveEMCALSModuleData.h:46
 AliEveEMCALSModuleData.h:47
 AliEveEMCALSModuleData.h:48
 AliEveEMCALSModuleData.h:49
 AliEveEMCALSModuleData.h:50
 AliEveEMCALSModuleData.h:51
 AliEveEMCALSModuleData.h:52
 AliEveEMCALSModuleData.h:53
 AliEveEMCALSModuleData.h:54
 AliEveEMCALSModuleData.h:55
 AliEveEMCALSModuleData.h:56
 AliEveEMCALSModuleData.h:57
 AliEveEMCALSModuleData.h:58
 AliEveEMCALSModuleData.h:59
 AliEveEMCALSModuleData.h:60
 AliEveEMCALSModuleData.h:61
 AliEveEMCALSModuleData.h:62
 AliEveEMCALSModuleData.h:63
 AliEveEMCALSModuleData.h:64
 AliEveEMCALSModuleData.h:65
 AliEveEMCALSModuleData.h:66
 AliEveEMCALSModuleData.h:67
 AliEveEMCALSModuleData.h:68
 AliEveEMCALSModuleData.h:69
 AliEveEMCALSModuleData.h:70
 AliEveEMCALSModuleData.h:71
 AliEveEMCALSModuleData.h:72
 AliEveEMCALSModuleData.h:73
 AliEveEMCALSModuleData.h:74
 AliEveEMCALSModuleData.h:75
 AliEveEMCALSModuleData.h:76
 AliEveEMCALSModuleData.h:77
 AliEveEMCALSModuleData.h:78
 AliEveEMCALSModuleData.h:79
 AliEveEMCALSModuleData.h:80
 AliEveEMCALSModuleData.h:81
 AliEveEMCALSModuleData.h:82
 AliEveEMCALSModuleData.h:83
 AliEveEMCALSModuleData.h:84
 AliEveEMCALSModuleData.h:85
 AliEveEMCALSModuleData.h:86
 AliEveEMCALSModuleData.h:87
 AliEveEMCALSModuleData.h:88
 AliEveEMCALSModuleData.h:89
 AliEveEMCALSModuleData.h:90
 AliEveEMCALSModuleData.h:91
 AliEveEMCALSModuleData.h:92
 AliEveEMCALSModuleData.h:93
 AliEveEMCALSModuleData.h:94
 AliEveEMCALSModuleData.h:95
 AliEveEMCALSModuleData.h:96
 AliEveEMCALSModuleData.h:97
 AliEveEMCALSModuleData.h:98
 AliEveEMCALSModuleData.h:99
 AliEveEMCALSModuleData.h:100
 AliEveEMCALSModuleData.h:101
 AliEveEMCALSModuleData.h:102
 AliEveEMCALSModuleData.h:103
 AliEveEMCALSModuleData.h:104
 AliEveEMCALSModuleData.h:105
 AliEveEMCALSModuleData.h:106
 AliEveEMCALSModuleData.h:107
 AliEveEMCALSModuleData.h:108
 AliEveEMCALSModuleData.h:109
 AliEveEMCALSModuleData.h:110
 AliEveEMCALSModuleData.h:111