ROOT logo
#ifndef HSHOWERGEOMETRY_H
#define HSHOWERGEOMETRY_H

#include "hparcond.h"
#include "hlocation.h"
#include "hshowerpad.h"
#include "hshowerwiretab.h"
#include "hshowerframe.h"
#include "hgeomtransform.h"
#include "hgeomvector2.h"

class HShowerGeomPar;

class HShowerGeometry: public HParCond {
private:
  Int_t nSectors; //! number of sectors
  Int_t nModules; //! number of modules
  Int_t nRows;    //! number of rows
  Int_t nColumns; //! number of columns

  HGeomTransform sectorTransform[6];  //! lab coordinates of module 0 wire planes
  HGeomTransform moduleTransform[18]; //! lab coordinates of pad planes

  HShowerFrame frames[3];   //! definitions of local coordinates of frames
  HShowerWireTab wires[3];  // definitions of local coordinates of wires
  HShowerPadTab pads[3];    // definitions of local coordinates of pads
  HShowerGeomPar* pGeomPar; //! pointer to ShowerGeomPar parameter container
public:
  HShowerGeometry(const Char_t* name="ShowerGeometry",
                  const Char_t* title="Shower geometry parameters",
                  const Char_t* context="GeomProduction");
  ~HShowerGeometry();

  Bool_t init(HParIo*,Int_t*);
  void   clear();
  void   putParams(HParamList*);
  Bool_t getParams(HParamList*);
  Bool_t fillFromGeomPar();
  void printParams();

  Int_t getSectors() {return nSectors;}
  Int_t getModules() {return nModules;}
  Int_t getRows()    {return nRows;}
  Int_t getColumns() {return nColumns;}

  HShowerFrame*   getFrame(Int_t nMod)     {return &frames[nMod];}
  HShowerWireTab* getWireTab(Int_t nMod)   {return &wires[nMod];}
  HShowerPadTab*   getPadParam(Int_t nMod) {return &pads[nMod];}

  void getLocalCoord(HLocation& loc, HGeomVector& v);
  void getLabCoord(HLocation& loc, HGeomVector2& v);
  void getSphereCoord(HLocation& loc, HGeomVector2& v, HGeomVector *pvTarget = NULL);
  void transLabToSphereCoord(HGeomVector2& labIn, HGeomVector2& sphereOut, HGeomVector *pvTarget);
  void transVectToLab(HLocation& loc, HGeomVector vLocal, HGeomVector2& vLab); 

  const HGeomTransform& getTransform(Int_t sec) {
    return sectorTransform[sec];
  }
  const HGeomTransform& getTransform(Int_t sec, Int_t mod) {
    return moduleTransform[sec*nModules+mod];
  }

  Bool_t transPadToLab();

  ClassDef(HShowerGeometry,3)//Class for PreShower geometry container
};

#endif /* !HSHOWERGEOMETRY_H */
 hshowergeometry.h:1
 hshowergeometry.h:2
 hshowergeometry.h:3
 hshowergeometry.h:4
 hshowergeometry.h:5
 hshowergeometry.h:6
 hshowergeometry.h:7
 hshowergeometry.h:8
 hshowergeometry.h:9
 hshowergeometry.h:10
 hshowergeometry.h:11
 hshowergeometry.h:12
 hshowergeometry.h:13
 hshowergeometry.h:14
 hshowergeometry.h:15
 hshowergeometry.h:16
 hshowergeometry.h:17
 hshowergeometry.h:18
 hshowergeometry.h:19
 hshowergeometry.h:20
 hshowergeometry.h:21
 hshowergeometry.h:22
 hshowergeometry.h:23
 hshowergeometry.h:24
 hshowergeometry.h:25
 hshowergeometry.h:26
 hshowergeometry.h:27
 hshowergeometry.h:28
 hshowergeometry.h:29
 hshowergeometry.h:30
 hshowergeometry.h:31
 hshowergeometry.h:32
 hshowergeometry.h:33
 hshowergeometry.h:34
 hshowergeometry.h:35
 hshowergeometry.h:36
 hshowergeometry.h:37
 hshowergeometry.h:38
 hshowergeometry.h:39
 hshowergeometry.h:40
 hshowergeometry.h:41
 hshowergeometry.h:42
 hshowergeometry.h:43
 hshowergeometry.h:44
 hshowergeometry.h:45
 hshowergeometry.h:46
 hshowergeometry.h:47
 hshowergeometry.h:48
 hshowergeometry.h:49
 hshowergeometry.h:50
 hshowergeometry.h:51
 hshowergeometry.h:52
 hshowergeometry.h:53
 hshowergeometry.h:54
 hshowergeometry.h:55
 hshowergeometry.h:56
 hshowergeometry.h:57
 hshowergeometry.h:58
 hshowergeometry.h:59
 hshowergeometry.h:60
 hshowergeometry.h:61
 hshowergeometry.h:62
 hshowergeometry.h:63
 hshowergeometry.h:64
 hshowergeometry.h:65
 hshowergeometry.h:66
 hshowergeometry.h:67
 hshowergeometry.h:68