CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/RecoMuon/DetLayers/src/GeneralBinFinderInR.h

Go to the documentation of this file.
00001 #ifndef GeneralBinFinderInR_H
00002 #define GeneralBinFinderInR_H
00003 
00012 #include <Utilities/BinningTools/interface/BaseBinFinder.h>
00013 #include "RBorderFinder.h"
00014 
00015 #include <cmath>
00016 #include <vector>
00017 
00018 template <class T>
00019 class GeneralBinFinderInR : public BaseBinFinder<T>{
00020 public:
00021   
00022   typedef RBorderFinder::Det Det; //FIXME!!!
00023 
00024   GeneralBinFinderInR() : theNbins(0) {}
00025 
00027   GeneralBinFinderInR(const RBorderFinder& bf) {
00028     theBorders=bf.RBorders();
00029     theBins=bf.RBins();
00030     theNbins=theBins.size();
00031   }
00032 
00034   GeneralBinFinderInR(std::vector<Det*>::const_iterator first,
00035                       std::vector<Det*>::const_iterator last)
00036     : theNbins( last-first)
00037   {
00038     std::vector<Det*> dets(first,last);
00039     RBorderFinder bf(dets);
00040     theBorders=bf.RBorders();
00041     theBins=bf.RBins();
00042     theNbins=theBins.size();
00043   }
00044 
00045   
00048   virtual int binIndex( T R) const {
00049     int i;
00050     for (i = 0; i<theNbins; i++) {
00051       if (R < theBorders[i]){
00052          break;
00053       }
00054     }
00055     return binIndex(i-1);
00056   }
00057 
00059   virtual int binIndex( int i) const {
00060     return std::min( std::max( i, 0), theNbins-1);
00061   }
00062    
00064   virtual T binPosition( int ind) const {
00065     return theBins[binIndex(ind)];
00066   }
00067 
00068 
00069 private:
00070   int theNbins;
00071   std::vector<T> theBorders;
00072   std::vector<T> theBins;
00073 
00074 };
00075 #endif
00076