CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/RecoMuon/MuonIsolation/interface/Range.h

Go to the documentation of this file.
00001 #ifndef MuonIsolation_Range_H
00002 #define MuonIsolation_Range_H
00003 
00008 #include <iostream>
00009 #include <utility>
00010 #include <algorithm>
00011 
00012 namespace muonisolation {
00013 
00014 template<class T> class Range : public std::pair<T,T> {
00015 public:
00016 
00017   Range() { }
00018 
00019   Range(const T & aMin, const T & aMax) : std::pair<T,T> (aMin,aMax) { }
00020 
00021   Range(const std::pair<T,T> & aPair ) : std::pair<T,T> (aPair) { }  
00022 
00023   const T & min() const { return this->first; }
00024 
00025   const T & max() const { return this->second; }
00026 
00027   T mean() const { return (this->first+this->second)/2.; }
00028 
00029   bool empty() const { return (this->second < this->first); }
00030 
00031   bool inside(const T & value) const {
00032     if (value < this->first || this->second < value)  return false; else  return true;
00033   }
00034 
00035   void sort() { if (empty() ) std::swap(this->first,this->second); }
00036 };
00037 
00038 }
00039 
00040 template <class T> std::ostream & operator<<( std::ostream& out, const muonisolation::Range<T>& r) 
00041 { return out << "("<<r.min()<<","<<r.max()<<")"; }
00042 
00043 #endif