CMS 3D CMS Logo

Grid3D.h

Go to the documentation of this file.
00001 #ifndef Grid3D_h
00002 #define Grid3D_h
00003 
00014 #include <vector>
00015 
00016 template <class Value, class T>
00017 class Grid3D {
00018 public:
00019 
00020   typedef Value    ValueType;
00021   typedef T        Scalar;
00022 
00023   Grid3D() {}
00024 
00025   Grid3D( const Grid1D<T>& ga, const Grid1D<T>& gb, const Grid1D<T>& gc,
00026           const std::vector<Value>& data) : 
00027     grida_(ga), gridb_(gb), gridc_(gc), data_(data) {
00028      stride1_ = gridb_.nodes() * gridc_.nodes();
00029      stride2_ = gridc_.nodes();
00030   }
00031 
00032   const Value& operator()( int i, int j, int k) const {
00033     return data_[index(i,j,k)];
00034   }
00035 
00036   const Grid1D<T>& grida() const {return grida_;}
00037   const Grid1D<T>& gridb() const {return gridb_;}
00038   const Grid1D<T>& gridc() const {return gridc_;}
00039 
00040   const std::vector<Value>& data() const {return data_;}
00041 
00042   void dump() const;
00043 
00044 private:
00045 
00046   Grid1D<T> grida_;
00047   Grid1D<T> gridb_;
00048   Grid1D<T> gridc_;
00049 
00050   std::vector<Value> data_;
00051 
00052   int stride1_;
00053   int stride2_;
00054 
00055   int index(int i, int j, int k) const {return i*stride1_ + j*stride2_ + k;}
00056 
00057 };
00058 
00059 #include <iostream>
00060 template <class Value, class T>
00061 void Grid3D<Value,T>::dump() const 
00062 {
00063   for (int j=0; j<gridb().nodes(); ++j) {
00064     for (int k=0; k<gridc().nodes(); ++k) {
00065       for (int i=0; i<grida().nodes(); ++i) {
00066         std::cout << grida().node(i) << " " << gridb().node(j) << " " << gridc().node(k) << " " << operator()(i,j,k) << std::endl;
00067       }
00068     }
00069   }
00070 }
00071 
00072 #endif

Generated on Tue Jun 9 17:40:34 2009 for CMSSW by  doxygen 1.5.4