CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/TrackingTools/DetLayers/interface/PeriodicBinFinderInZ.h

Go to the documentation of this file.
00001 #ifndef DetLayers_PeriodicBinFinderInZ_H
00002 #define DetLayers_PeriodicBinFinderInZ_H
00003 
00004 #include "Utilities/BinningTools/interface/BaseBinFinder.h"
00005 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00006 #include <cmath>
00007 
00012 template <class T>
00013 class PeriodicBinFinderInZ : public BaseBinFinder<T> {
00014 public:
00015 
00016   PeriodicBinFinderInZ() : theNbins(0), theZStep(0), theZOffset(0) {}
00017 
00018   PeriodicBinFinderInZ(std::vector<const GeomDet*>::const_iterator first,
00019                        std::vector<const GeomDet*>::const_iterator last) :
00020     theNbins( last-first) 
00021   {
00022     float zFirst = (**first).surface().position().z();
00023     theZStep = ((**(last-1)).surface().position().z() - zFirst) / (theNbins-1);
00024     theZOffset = zFirst - 0.5*theZStep;
00025   }
00026 
00028   virtual int binIndex( T z) const {
00029     return binIndex( int((z-theZOffset)/theZStep));
00030   }
00031 
00033   virtual int binIndex( int i) const {
00034     return std::min( std::max( i, 0), theNbins-1);
00035   }
00036    
00038   virtual T binPosition( int ind) const {
00039     return theZOffset + theZStep * ( ind + 0.5);
00040   }
00041 
00042 private:
00043 
00044   int theNbins;
00045   T theZStep;
00046   T theZOffset;
00047 
00048 };
00049 #endif