![]() |
![]() |
00001 // Last commit: $Id: SiStripFedCablingESSource.h,v 1.8 2007/05/24 15:21:50 bainbrid Exp $ 00002 00003 #ifndef CalibTracker_SiStripConnectivity_SiStripFedCablingESSource_H 00004 #define CalibTracker_SiStripConnectivity_SiStripFedCablingESSource_H 00005 00006 #include "FWCore/Framework/interface/ESProducer.h" 00007 #include "FWCore/Framework/interface/ESHandle.h" 00008 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" 00009 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00010 #include "boost/cstdint.hpp" 00011 #include <memory> 00012 00013 class SiStripFedCabling; 00014 class SiStripFedCablingRcd; 00015 00021 class SiStripFedCablingESSource : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { 00022 00023 public: 00024 00025 SiStripFedCablingESSource( const edm::ParameterSet& ); 00026 virtual ~SiStripFedCablingESSource() {;} 00027 00028 virtual std::auto_ptr<SiStripFedCabling> produce( const SiStripFedCablingRcd& ); 00029 00030 // Utility methods that generate control structure numbering 00031 static inline uint16_t fecCrate( const uint16_t& module ); // 4 crates within system 00032 static inline uint16_t fecSlot( const uint16_t& module ); // 11 FECs per crate 00033 static inline uint16_t fecRing( const uint16_t& module ); // 8 control rings per FEC 00034 static inline uint16_t ccuAddr( const uint16_t& module ); // 8 CCUMs per control ring 00035 static inline uint16_t ccuChan( const uint16_t& module ); // 8 modules per CCUM 00036 00037 protected: 00038 00039 virtual void setIntervalFor( const edm::eventsetup::EventSetupRecordKey&, 00040 const edm::IOVSyncValue&, 00041 edm::ValidityInterval& ); 00042 00043 private: 00044 00045 SiStripFedCablingESSource( const SiStripFedCablingESSource& ); 00046 const SiStripFedCablingESSource& operator=( const SiStripFedCablingESSource& ); 00047 00048 virtual SiStripFedCabling* makeFedCabling() = 0; 00049 00050 }; 00051 00052 // ---------- inline methods ---------- 00053 00054 uint16_t SiStripFedCablingESSource::fecCrate( const uint16_t& module ) { return (module/(8*8*8*11)) % 4 + 1; } 00055 uint16_t SiStripFedCablingESSource::fecSlot( const uint16_t& module ) { return (module/(8*8*8)) % 11 + 2; } 00056 uint16_t SiStripFedCablingESSource::fecRing( const uint16_t& module ) { return (module/(8*8)) % 8 + 1; } 00057 uint16_t SiStripFedCablingESSource::ccuAddr( const uint16_t& module ) { return (module/8) % 8 + 1; } 00058 uint16_t SiStripFedCablingESSource::ccuChan( const uint16_t& module ) { return (module/1) % 8 + 16; } 00059 00060 #endif // CalibTracker_SiStripConnectivity_SiStripFedCablingESSource_H 00061