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<const 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