CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/CondFormats/ESObjects/interface/ESCondObjectContainer.h

Go to the documentation of this file.
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