00001 00002 // File: RecoCollectionFP420.cc 00003 // Date: 11.2007 00004 // Description: RecoCollectionFP420 for FP420 00005 // Modifications: 00007 #include "DataFormats/FP420Cluster/interface/RecoCollectionFP420.h" 00008 #include <iostream> 00009 using namespace std; 00010 //#define mydigidebug 00011 00012 void RecoCollectionFP420::put(RecoCollectionFP420::Range input, unsigned int stationID) { 00013 // put in RecHits of stationID 00014 00015 // store size of vector before put 00016 RecoCollectionFP420::IndexRange inputRange; 00017 00018 // put in RecoFP420s from input 00019 bool first = true; 00020 00021 // fill input in temporary vector for sorting 00022 std::vector<RecoFP420> temporary; 00023 RecoCollectionFP420::ContainerIterator sort_begin = input.first; 00024 RecoCollectionFP420::ContainerIterator sort_end = input.second; 00025 #ifdef mydigidebug 00026 std::cout <<" !!!!!!!!!!!!!!!! RecoCollectionFP420:: !!!! put !!!! start " << std::endl; 00027 #endif 00028 for ( ;sort_begin != sort_end; ++sort_begin ) { 00029 #ifdef mydigidebug 00030 std::cout <<"put: temporary.push_back " << std::endl; 00031 #endif 00032 temporary.push_back(*sort_begin); 00033 } 00034 std::sort(temporary.begin(),temporary.end()); 00035 00036 // iterators over input 00037 RecoCollectionFP420::ContainerIterator begin = temporary.begin(); 00038 RecoCollectionFP420::ContainerIterator end = temporary.end(); 00039 for ( ;begin != end; ++begin ) { 00040 container_.push_back(*begin); 00041 if ( first ) { 00042 inputRange.first = container_.size()-1; 00043 // inputRange.first = container_.size(); 00044 first = false; 00045 } 00046 } 00047 00048 // since we start from 0, then the last element will be size-1 00049 if(container_.size() != 0) { 00050 inputRange.second = container_.size()-1; 00051 } 00052 else { 00053 inputRange.first = container_.size(); 00054 inputRange.second = container_.size(); 00055 } 00056 00057 // inputRange.second = container_.size()-1; 00058 // //inputRange.second = container_.size(); 00059 00060 #ifdef mydigidebug 00061 std::cout <<"put: container_.size() = " << container_.size() << std::endl; 00062 std::cout <<"put: inputRange.first = " << inputRange.first << std::endl; 00063 std::cout <<"put: inputRange.second = " << inputRange.second << std::endl; 00064 #endif 00065 00066 // fill map 00067 map_[stationID] = inputRange; 00068 00069 } 00070 00071 const RecoCollectionFP420::Range RecoCollectionFP420::get(unsigned int stationID) const { 00072 // get RecHits of stationID 00073 00074 #ifdef mydigidebug 00075 std::cout <<"RecoCollectionFP420::get:stationID= " << stationID << std::endl; 00076 #endif 00077 RecoCollectionFP420::RegistryIterator returnIndex = map_.find(stationID); 00078 RecoCollectionFP420::IndexRange returnIndexRange = returnIndex->second; 00079 #ifdef mydigidebug 00080 std::cout <<"RecoCollectionFP420::get1: returnIndexRange.first= " << returnIndexRange.first << std::endl; 00081 std::cout <<"RecoCollectionFP420::get1: returnIndexRange.second= " << returnIndexRange.second << std::endl; 00082 #endif 00083 00084 RecoCollectionFP420::Range returnRange; 00085 returnRange.first = container_.begin()+returnIndexRange.first; 00086 if(returnIndexRange.second != 0 ) { 00087 returnRange.second = container_.begin()+returnIndexRange.second+1; 00088 }else{ 00089 returnRange.second = container_.begin()+returnIndexRange.second; 00090 } 00091 #ifdef mydigidebug 00092 std::cout <<"RecoCollectionFP420::get2: container_.size() = " << container_.size() << std::endl; 00093 std::cout <<"RecoCollectionFP420::get2: returnIndexRange.first= " << returnIndexRange.first << std::endl; 00094 std::cout <<"RecoCollectionFP420::get2: returnIndexRange.second= " << returnIndexRange.second << std::endl; 00095 #endif 00096 return returnRange; 00097 } 00098 00099 00100 00101 void RecoCollectionFP420::clear() { 00102 container_.clear(); 00103 } 00104 void RecoCollectionFP420::putclear(RecoCollectionFP420::Range input, unsigned int stationID) { 00105 00106 RecoCollectionFP420::IndexRange inputRange; 00107 00108 std::vector<RecoFP420> temporary; 00109 RecoCollectionFP420::ContainerIterator sort_begin = input.first; 00110 RecoCollectionFP420::ContainerIterator sort_end = input.second; 00111 for ( ;sort_begin != sort_end; ++sort_begin ) { 00112 temporary.push_back(*sort_begin); 00113 } 00114 std::sort(temporary.begin(),temporary.end()); 00115 00116 // temporary.clear(); 00117 RecoCollectionFP420::ContainerIterator begin = temporary.begin(); 00118 RecoCollectionFP420::ContainerIterator end = temporary.end(); 00119 for ( ;begin != end; ++begin ) { 00120 container_.push_back(*begin); 00121 } 00122 //container_.clear(); 00123 inputRange.first = container_.size()-container_.size(); 00124 inputRange.second = container_.size()-container_.size(); 00125 00126 #ifdef mydigidebug 00127 std::cout <<"putclear: container_.size() = " << container_.size() << std::endl; 00128 std::cout <<"putclear: inputRange.first = " << inputRange.first << std::endl; 00129 std::cout <<"putclear: inputRange.second = " << inputRange.second << std::endl; 00130 #endif 00131 00132 00133 map_[stationID] = inputRange; 00134 } 00135 00136 00137 00138 00139 00140 00141 const std::vector<unsigned int> RecoCollectionFP420::stationIDs() const { 00142 // returns vector of stationIDs in map 00143 00144 #ifdef mydigidebug 00145 std::cout <<"RecoCollectionFP420::stationIDs:start " << std::endl; 00146 #endif 00147 RecoCollectionFP420::RegistryIterator begin = map_.begin(); 00148 RecoCollectionFP420::RegistryIterator end = map_.end(); 00149 00150 std::vector<unsigned int> output; 00151 00152 for (; begin != end; ++begin) { 00153 output.push_back(begin->first); 00154 } 00155 00156 return output; 00157 00158 }