Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:22:19

0001 /**
0002  * \class L1GtPsbSetupTrivialProducer
0003  *
0004  *
0005  * Description: ESProducer for the setup of L1 GT PSB boards.
0006  *
0007  * Implementation:
0008  *    <TODO: enter implementation details>
0009  *
0010  * \author: Vasile Mihai Ghete - HEPHY Vienna
0011  *
0012  *
0013  */
0014 
0015 // this class header
0016 #include "L1TriggerConfig/L1GtConfigProducers/interface/L1GtPsbSetupTrivialProducer.h"
0017 
0018 // system include files
0019 #include <memory>
0020 
0021 #include <vector>
0022 
0023 // user include files
0024 #include "FWCore/Utilities/interface/EDMException.h"
0025 
0026 #include "FWCore/Framework/interface/ModuleFactory.h"
0027 #include "FWCore/Framework/interface/ESHandle.h"
0028 
0029 #include "CondFormats/DataRecord/interface/L1GtPsbSetupRcd.h"
0030 
0031 // forward declarations
0032 
0033 //
0034 
0035 // constructor(s)
0036 L1GtPsbSetupTrivialProducer::L1GtPsbSetupTrivialProducer(const edm::ParameterSet& parSet) {
0037   // tell the framework what data is being produced
0038   setWhatProduced(this, &L1GtPsbSetupTrivialProducer::producePsbSetup);
0039 
0040   // now do what ever other initialization is needed
0041 
0042   // detailed input configuration for PSB
0043   std::vector<edm::ParameterSet> psbSetup = parSet.getParameter<std::vector<edm::ParameterSet> >("PsbSetup");
0044 
0045   // reserve space for L1 GT boards
0046   m_gtPsbSetup.reserve(psbSetup.size());
0047 
0048   std::vector<unsigned int> enableRecLvdsInt;
0049   enableRecLvdsInt.reserve(L1GtPsbConfig::PsbNumberLvdsGroups);
0050   std::vector<bool> enableRecLvds;
0051   enableRecLvds.reserve(L1GtPsbConfig::PsbNumberLvdsGroups);
0052 
0053   std::vector<unsigned int> enableRecSerLinkInt;
0054   enableRecSerLinkInt.reserve(L1GtPsbConfig::PsbSerLinkNumberChannels);
0055   std::vector<bool> enableRecSerLink;
0056   enableRecSerLink.reserve(L1GtPsbConfig::PsbSerLinkNumberChannels);
0057 
0058   for (std::vector<edm::ParameterSet>::const_iterator itPSet = psbSetup.begin(); itPSet != psbSetup.end(); ++itPSet) {
0059     //
0060     L1GtPsbConfig psbConfig(itPSet->getParameter<int>("Slot"));
0061 
0062     psbConfig.setGtPsbCh0SendLvds(itPSet->getParameter<bool>("Ch0SendLvds"));
0063     psbConfig.setGtPsbCh1SendLvds(itPSet->getParameter<bool>("Ch1SendLvds"));
0064 
0065     enableRecLvdsInt = itPSet->getParameter<std::vector<unsigned int> >("EnableRecLvds");
0066 
0067     for (std::vector<unsigned int>::const_iterator cIt = enableRecLvdsInt.begin(); cIt != enableRecLvdsInt.end();
0068          ++cIt) {
0069       bool val = *cIt;
0070       enableRecLvds.push_back(val);
0071     }
0072 
0073     psbConfig.setGtPsbEnableRecLvds(enableRecLvds);
0074     enableRecLvds.clear();
0075 
0076     enableRecSerLinkInt = itPSet->getParameter<std::vector<unsigned int> >("EnableRecSerLink");
0077 
0078     for (std::vector<unsigned int>::const_iterator cIt = enableRecSerLinkInt.begin(); cIt != enableRecSerLinkInt.end();
0079          ++cIt) {
0080       bool val = *cIt;
0081       enableRecSerLink.push_back(val);
0082     }
0083 
0084     psbConfig.setGtPsbEnableRecSerLink(enableRecSerLink);
0085     enableRecSerLink.clear();
0086 
0087     // push the board in the vector
0088     m_gtPsbSetup.push_back(psbConfig);
0089   }
0090 }
0091 
0092 // destructor
0093 L1GtPsbSetupTrivialProducer::~L1GtPsbSetupTrivialProducer() {
0094   // empty
0095 }
0096 
0097 // member functions
0098 
0099 // method called to produce the data
0100 std::unique_ptr<L1GtPsbSetup> L1GtPsbSetupTrivialProducer::producePsbSetup(const L1GtPsbSetupRcd& iRecord) {
0101   auto pL1GtPsbSetup = std::make_unique<L1GtPsbSetup>();
0102 
0103   pL1GtPsbSetup->setGtPsbSetup(m_gtPsbSetup);
0104 
0105   return pL1GtPsbSetup;
0106 }