#ifndef __HSTLTOOL_H__ #define __HSTLTOOL_H__ #include "TObject.h" #include #include #include #include #include #include using namespace std; class HSTLTool : public TObject { public: HSTLTool(); ~HSTLTool(); //------------------------------------------------------------- // min / max element index template static Int_t maxIndex(vector& v){ return v.empty() ? -1 : max_element(v.begin(), v.end()) - v.begin(); } template static Int_t minIndex(vector& v){ return v.empty() ? -1 : min_element(v.begin(), v.end()) - v.begin(); } //------------------------------------------------------------- // min max element template static T maxVal(vector& v){ return v.empty() ? -1 : *max_element(v.begin(), v.end()); } template static T minVal(vector& v){ return v.empty() ? -1 : *min_element(v.begin(), v.end()); } //------------------------------------------------------------- // sum up range template static T sum(vector& v,Int_t ind1 = -1,Int_t ind2 =-1){ Int_t size = v.size(); T sum = 0; Int_t start = ind1 >=0 && ind1 < size ? ind1 : 0; Int_t end = ind2 >=0 && ind2 < size ? ind2 : size; for(Int_t i = start; i < end; i ++){ sum += v[i]; } return sum; } //------------------------------------------------------------- // find in range template static Int_t find(vector& v,T val){ typename vector::iterator result = std::find(v.begin(), v.end(), val); if(result == v.end()) return -1; else { return result - v.begin(); } } /* //------------------------------------------------------------- // find in range template static Int_t find(vector& v,T val, Int_t ind1=-1, Int_t ind2=-1){ Int_t size = v.size(); Int_t start = ind1 >=0 && ind1 < size-1 ? ind1 : 0; Int_t end = ind2 >=0 && ind2 < size-1 ? ind2 : size; if(size == 0 || ind2 < ind1) return -1; typename vector::iterator i1 = (v.begin() + start); typename vector::iterator i2 = (v.begin() + end); cout<::iterator result = std::find( (v.begin() + start), (v.begin() + end), val); cout<<"test "<<*result< static T print(vector& v,Int_t ind1 = -1,Int_t ind2 =-1){ Int_t size = v.size(); T sum = 0; Int_t start = ind1 >=0 && ind1 < size ? ind1 : 0; Int_t end = ind2 >=0 && ind2 < size ? ind2 : size; for(Int_t i = start; i < end; i ++){ cout<