File indexing completed on 2023-03-17 11:14:24
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Framework/interface/ModuleFactory.h"
0024 #include "FWCore/Framework/interface/ESProducer.h"
0025
0026 #include "FWCore/Framework/interface/ESHandle.h"
0027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0028 #include <FWCore/ParameterSet/interface/FileInPath.h>
0029
0030 #include "CondFormats/DataRecord/interface/L1RPCConfigRcd.h"
0031 #include "CondFormats/L1TObjects/interface/L1RPCConfig.h"
0032 #include <string>
0033
0034 #include "L1Trigger/RPCTrigger/interface/RPCPatternsParser.h"
0035
0036
0037
0038
0039 class RPCTriggerConfig : public edm::ESProducer {
0040 public:
0041 RPCTriggerConfig(const edm::ParameterSet&);
0042 ~RPCTriggerConfig() override;
0043
0044 typedef std::unique_ptr<L1RPCConfig> ReturnType;
0045
0046 ReturnType produce(const L1RPCConfigRcd&);
0047
0048 private:
0049
0050
0051 int m_ppt;
0052 std::string m_patternsDir;
0053 };
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 RPCTriggerConfig::RPCTriggerConfig(const edm::ParameterSet& iConfig) {
0067
0068
0069 setWhatProduced(this);
0070
0071
0072
0073 m_ppt = iConfig.getUntrackedParameter<int>("PACsPerTower");
0074 std::string dataDir = iConfig.getUntrackedParameter<std::string>("filedir");
0075
0076 edm::FileInPath fp(dataDir + "pacPat_t0sc0sg0.xml");
0077 std::string patternsDirNameUnstriped = fp.fullPath();
0078 m_patternsDir = patternsDirNameUnstriped.substr(0, patternsDirNameUnstriped.find_last_of('/') + 1);
0079 }
0080
0081 RPCTriggerConfig::~RPCTriggerConfig() {
0082
0083
0084 }
0085
0086
0087
0088
0089
0090
0091 RPCTriggerConfig::ReturnType RPCTriggerConfig::produce(const L1RPCConfigRcd& iRecord) {
0092 auto pL1RPCConfig = std::make_unique<L1RPCConfig>();
0093
0094 pL1RPCConfig->setPPT(m_ppt);
0095
0096
0097 int scCnt = 0, sgCnt = 0;
0098 if (m_ppt == 1) {
0099 scCnt = 1;
0100 sgCnt = 1;
0101 } else if (m_ppt == 12) {
0102 scCnt = 1;
0103 sgCnt = 12;
0104 } else if (m_ppt == 144) {
0105 scCnt = 12;
0106 sgCnt = 12;
0107 } else {
0108 throw cms::Exception("BadConfig") << "Bad number of ppt requested: " << m_ppt << "\n";
0109 }
0110
0111 for (int tower = 0; tower < RPCConst::m_TOWER_COUNT; ++tower) {
0112 for (int logSector = 0; logSector < scCnt; ++logSector) {
0113 for (int logSegment = 0; logSegment < sgCnt; ++logSegment) {
0114 std::stringstream fname;
0115 fname << m_patternsDir << "pacPat_t" << tower << "sc" << logSector << "sg" << logSegment << ".xml";
0116
0117
0118 LogDebug("RPCTriggerConfig") << "Parsing: " << fname.str() << std::endl;
0119
0120 RPCPatternsParser parser;
0121 parser.parse(fname.str());
0122
0123 RPCPattern::RPCPatVec npats = parser.getPatternsVec(tower, logSector, logSegment);
0124 for (unsigned int ip = 0; ip < npats.size(); ip++) {
0125 npats[ip].setCoords(tower, logSector, logSegment);
0126 pL1RPCConfig->m_pats.push_back(npats[ip]);
0127 }
0128
0129 RPCPattern::TQualityVec nquals = parser.getQualityVec();
0130 for (unsigned int iq = 0; iq < nquals.size(); iq++) {
0131 nquals[iq].m_tower = tower;
0132 nquals[iq].m_logsector = logSector;
0133 nquals[iq].m_logsegment = logSegment;
0134 pL1RPCConfig->m_quals.push_back(nquals[iq]);
0135 }
0136
0137 LogDebug("RPCTriggerConfig") << " RPCPatterns: " << npats.size() << " qualities: " << nquals.size()
0138 << std::endl;
0139
0140 }
0141 }
0142 }
0143
0144 return pL1RPCConfig;
0145 }
0146
0147
0148 DEFINE_FWK_EVENTSETUP_MODULE(RPCTriggerConfig);