![]() |
![]() |
00001 #ifndef Alignment_CommonAlignment_AlignSetup_h 00002 #define Alignment_CommonAlignment_AlignSetup_h 00003 00019 #include <map> 00020 #include <sstream> 00021 00022 #include "FWCore/Utilities/interface/Exception.h" 00023 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00024 00025 template <class Type> 00026 class AlignSetup 00027 { 00028 typedef typename std::map<std::string, Type> Container; 00029 00030 public: 00031 00033 AlignSetup() {} 00034 00037 Type& get( const std::string& name = "" ); 00038 00041 Type& find( const std::string& name = "" ); 00042 00044 void dump( void ) const; 00045 00046 private: 00047 Container theStore; 00048 }; 00049 00050 00051 template <class Type> 00052 Type& AlignSetup<Type>::get(const std::string& name) 00053 { 00054 return theStore[name]; 00055 } 00056 00057 template <class Type> 00058 Type& AlignSetup<Type>::find(const std::string& name) 00059 { 00060 typename Container::iterator o = theStore.find(name); 00061 00062 if (theStore.end() == o) { 00063 std::ostringstream knownKeys; 00064 for (typename Container::const_iterator it = theStore.begin(); it != theStore.end(); ++it) { 00065 knownKeys << (it != theStore.begin() ? ", " : "") << it->first; 00066 } 00067 throw cms::Exception("AlignSetupError") 00068 << "Cannot find an object of name " << name << " in AlignSetup, know only " 00069 << knownKeys.str() << "."; 00070 } 00071 00072 return o->second; 00073 } 00074 00075 template <class Type> 00076 void AlignSetup<Type>::dump( void ) const 00077 { 00078 edm::LogInfo("AlignSetup") << "Printing out AlignSetup: "; 00079 for ( typename Container::const_iterator it = theStore.begin(); 00080 it != theStore.end(); ++it ) { 00081 edm::LogVerbatim("AlignSetup") << it->first << std::endl; 00082 } 00083 } 00084 00085 #endif