00001 // -*- C++ -*- 00002 // 00003 // Package: RPCTriggerHwConfig 00004 // Class: RPCTriggerHwConfig 00005 // 00013 // 00014 // Original Author: Tomasz Maciej Frueboes 00015 // Created: Wed Apr 9 13:57:29 CEST 2008 00016 // $Id: RPCTriggerHwConfig.cc,v 1.3 2008/06/24 10:28:58 michals Exp $ 00017 // 00018 // 00019 00020 00021 // system include files 00022 #include <memory> 00023 #include "boost/shared_ptr.hpp" 00024 00025 // user include files 00026 #include "FWCore/Framework/interface/ModuleFactory.h" 00027 #include "FWCore/Framework/interface/ESProducer.h" 00028 00029 #include "FWCore/Framework/interface/ESHandle.h" 00030 00031 #include "CondFormats/DataRecord/interface/L1RPCHwConfigRcd.h" 00032 #include "CondFormats/RPCObjects/interface/L1RPCHwConfig.h" 00033 00034 00035 00036 // 00037 // class decleration 00038 // 00039 00040 class RPCTriggerHwConfig : public edm::ESProducer { 00041 public: 00042 RPCTriggerHwConfig(const edm::ParameterSet&); 00043 ~RPCTriggerHwConfig(); 00044 00045 typedef std::auto_ptr<L1RPCHwConfig> ReturnType; 00046 00047 ReturnType produce(const L1RPCHwConfigRcd&); 00048 private: 00049 // ----------member data --------------------------- 00050 std::vector<int> m_disableTowers; 00051 std::vector<int> m_disableCrates; 00052 00053 std::vector<int> m_enableTowers; 00054 std::vector<int> m_enableCrates; 00055 00056 bool m_disableAll; 00057 00058 int m_firstBX; 00059 int m_lastBX; 00060 00061 }; 00062 00063 // 00064 // constants, enums and typedefs 00065 // 00066 00067 // 00068 // static data member definitions 00069 // 00070 00071 // 00072 // constructors and destructor 00073 // 00074 RPCTriggerHwConfig::RPCTriggerHwConfig(const edm::ParameterSet& iConfig) 00075 { 00076 //the following line is needed to tell the framework what 00077 // data is being produced 00078 setWhatProduced(this); 00079 00080 //now do what ever other initialization is needed 00081 m_disableTowers = iConfig.getParameter<std::vector<int> >("disableTowers"); 00082 m_disableCrates = iConfig.getParameter<std::vector<int> >("disableCrates"); 00083 00084 m_disableAll = iConfig.getParameter<bool>("disableAll"); 00085 00086 m_enableTowers = iConfig.getParameter<std::vector<int> >("enableTowers"); 00087 m_enableCrates = iConfig.getParameter<std::vector<int> >("enableCrates"); 00088 00089 if (m_disableAll) { 00090 m_disableTowers.clear(); 00091 m_disableCrates.clear(); 00092 // check if m_enableTowers & m_enableCrates are not empty? 00093 } 00094 00095 m_firstBX = iConfig.getParameter<int>("firstBX"); 00096 m_lastBX = iConfig.getParameter<int>("lastBX"); 00097 00098 00099 } 00100 00101 00102 RPCTriggerHwConfig::~RPCTriggerHwConfig() 00103 { 00104 00105 // do anything here that needs to be done at desctruction time 00106 // (e.g. close files, deallocate resources etc.) 00107 00108 } 00109 00110 00111 // 00112 // member functions 00113 // 00114 00115 // ------------ method called to produce the data ------------ 00116 RPCTriggerHwConfig::ReturnType 00117 RPCTriggerHwConfig::produce(const L1RPCHwConfigRcd& iRecord) 00118 { 00119 using namespace edm::es; 00120 std::auto_ptr<L1RPCHwConfig> pL1RPCHwConfig = std::auto_ptr<L1RPCHwConfig>( new L1RPCHwConfig() ); 00121 00122 if (m_disableAll) { 00123 pL1RPCHwConfig->enableAll(false); 00124 std::vector<int>::iterator crIt = m_enableCrates.begin(); 00125 for (; crIt!=m_enableCrates.end(); ++crIt){ 00126 pL1RPCHwConfig->enableCrate(*crIt,true); 00127 } 00128 for (unsigned int It=0; It<m_enableTowers.size(); It++) { 00129 if (It%2 == 0) 00130 pL1RPCHwConfig->enableTowerInCrate(m_enableTowers[It+1], m_enableTowers[It], true); 00131 } 00132 } else { 00133 std::vector<int>::iterator crIt = m_disableCrates.begin(); 00134 for (; crIt!=m_disableCrates.end(); ++crIt){ 00135 pL1RPCHwConfig->enableCrate(*crIt,false); 00136 } 00137 for (unsigned int It=0; It<m_disableTowers.size(); It++) { 00138 if (It%2 == 0) 00139 pL1RPCHwConfig->enableTowerInCrate(m_disableTowers[It+1], m_disableTowers[It], false); 00140 } 00141 00142 } 00143 00144 if (m_firstBX > m_lastBX ) 00145 throw cms::Exception("BadConfig") << " firstBX < m_lastBX " << "\n"; 00146 00147 pL1RPCHwConfig->setFirstBX(m_firstBX); 00148 pL1RPCHwConfig->setLastBX(m_lastBX); 00149 00150 return pL1RPCHwConfig ; 00151 } 00152 00153 //define this as a plug-in 00154 DEFINE_FWK_EVENTSETUP_MODULE(RPCTriggerHwConfig);