00001
00002
00003
00004
00005
00006
00007 #ifndef GEAR_LayerLayoutImpl_H
00008 #define GEAR_LayerLayoutImpl_H 1
00009
00010
00011 #include "gear/LayerLayout.h"
00012 #include <vector>
00013
00014
00015 namespace gear {
00016
00024 class LayerLayoutImpl : public LayerLayout {
00025
00026 public:
00027
00029 struct Layer {
00030 double Distance;
00031 double Thickness ;
00032 double AbsorberThickness ;
00033 double CellSize0 ;
00034 double CellSize1 ;
00035 } ;
00036
00037 typedef std::vector<Layer> LayerVec ;
00038
00040 virtual ~LayerLayoutImpl() { ; }
00041
00044 virtual int getNLayers() const { return _vec.size() ; }
00045
00049 virtual double getDistance(int layerIndex) const { return _vec.at( layerIndex ).Distance ; }
00050
00054 virtual double getThickness(int layerIndex) const { return _vec.at( layerIndex ).Thickness ; }
00055
00059 virtual double getAbsorberThickness(int layerIndex) const {
00060 return _vec.at( layerIndex ).AbsorberThickness ;
00061 }
00062
00066 virtual double getCellSize0(int layerIndex) const {
00067 return _vec.at( layerIndex ).CellSize0 ;
00068 }
00069
00072 virtual double getCellSize1(int layerIndex) const {
00073 return _vec.at( layerIndex ).CellSize1 ;
00074 }
00075
00079 virtual void positionLayer(double distance, double thickness, double cellSize0, double cellSize1, double absorberThickness = 0. ) ;
00080
00083 virtual void addLayer(double thickness, double cellSize0, double cellSize1, double absorberThickness = 0. ) ;
00084
00085 protected:
00086 LayerVec _vec ;
00087
00088 };
00089
00090 }
00091
00092 #endif