00001 #ifndef ES_COND_OBJECT_CONTAINER_HH 00002 #define ES_COND_OBJECT_CONTAINER_HH 00003 00004 #include "DataFormats/EcalDetId/interface/EcalContainer.h" 00005 #include "DataFormats/EcalDetId/interface/ESDetId.h" 00006 00007 template < typename T > 00008 class ESCondObjectContainer { 00009 public: 00010 typedef T Item; 00011 typedef Item value_type; 00012 typedef ESCondObjectContainer<T> self; 00013 typedef typename std::vector<Item> Items; 00014 typedef typename std::vector<Item>::const_iterator const_iterator; 00015 typedef typename std::vector<Item>::iterator iterator; 00016 00017 ESCondObjectContainer() {}; 00018 ~ESCondObjectContainer() {}; 00019 00020 inline 00021 const Items & preshowerItems() const { return es_.items(); }; 00022 00023 inline 00024 const Item & preshower( size_t hashedIndex ) const { 00025 return es_.item(hashedIndex); 00026 } 00027 00028 inline 00029 void insert( std::pair<uint32_t, Item> const &a ) { 00030 DetId id(a.first); 00031 switch (id.subdetId()) { 00032 case EcalPreshower : 00033 { 00034 es_.insert(a); 00035 } 00036 break; 00037 default: 00038 // FIXME (add throw) 00039 return; 00040 } 00041 } 00042 00043 inline 00044 const_iterator find( uint32_t rawId ) const { 00045 DetId id(rawId); 00046 const_iterator it = es_.end(); 00047 if(id.subdetId()== EcalPreshower) { 00048 it = es_.find(rawId); 00049 if ( it != es_.end() ) { 00050 return it; 00051 } 00052 } 00053 return it; 00054 } 00055 00056 inline 00057 const_iterator begin() const { 00058 return es_.begin(); 00059 } 00060 00061 inline 00062 const_iterator end() const { 00063 return es_.end(); 00064 } 00065 00066 inline 00067 void setValue(const uint32_t id, const Item &item) { 00068 (*this)[id] = item; 00069 } 00070 00071 inline 00072 const self & getMap() const { 00073 return *this; 00074 } 00075 00076 inline 00077 size_t size() const { 00078 return es_.size() ; 00079 } 00080 // add coherent operator++, not needed now -- FIXME 00081 00082 inline 00083 Item & operator[]( uint32_t rawId ) { 00084 DetId id(rawId); 00085 static Item dummy; 00086 switch (id.subdetId()) { 00087 case EcalPreshower : 00088 { 00089 return es_[rawId]; 00090 } 00091 break; 00092 default: 00093 // FIXME (add throw) 00094 return dummy; 00095 } 00096 } 00097 00098 inline 00099 Item const & operator[]( uint32_t rawId ) const { 00100 DetId id(rawId); 00101 static Item dummy; 00102 switch (id.subdetId()) { 00103 case EcalPreshower : 00104 { 00105 return es_[rawId]; 00106 } 00107 break; 00108 default: 00109 // FIXME (add throw) 00110 return dummy; 00111 } 00112 } 00113 00114 private: 00115 EcalContainer< ESDetId, Item > es_; 00116 }; 00117 00118 typedef ESCondObjectContainer<float> ESFloatCondObjectContainer; 00119 #endif