File indexing completed on 2024-04-06 12:22:23
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "L1TriggerConfig/L1ScalesProducers/interface/L1MuTriggerScalesOnlineProducer.h"
0014 #include "L1TriggerConfig/L1ScalesProducers/interface/ScaleRecordHelper.h"
0015 #include <cmath>
0016
0017 using namespace std;
0018
0019 L1MuTriggerScalesOnlineProducer::L1MuTriggerScalesOnlineProducer(const edm::ParameterSet& ps)
0020 : L1ConfigOnlineProdBase<L1MuTriggerScalesRcd, L1MuTriggerScales>(ps),
0021 m_scales(ps.getParameter<int>("nbitPackingDTEta"),
0022 ps.getParameter<bool>("signedPackingDTEta"),
0023 ps.getParameter<int>("nbinsDTEta"),
0024 ps.getParameter<double>("minDTEta"),
0025 ps.getParameter<double>("maxDTEta"),
0026 ps.getParameter<int>("offsetDTEta"),
0027
0028 ps.getParameter<int>("nbitPackingCSCEta"),
0029 ps.getParameter<int>("nbinsCSCEta"),
0030 ps.getParameter<double>("minCSCEta"),
0031 ps.getParameter<double>("maxCSCEta"),
0032
0033 ps.getParameter<std::vector<double> >("scaleRPCEta"),
0034 ps.getParameter<int>("nbitPackingBrlRPCEta"),
0035 ps.getParameter<bool>("signedPackingBrlRPCEta"),
0036 ps.getParameter<int>("nbinsBrlRPCEta"),
0037 ps.getParameter<int>("offsetBrlRPCEta"),
0038 ps.getParameter<int>("nbitPackingFwdRPCEta"),
0039 ps.getParameter<bool>("signedPackingFwdRPCEta"),
0040 ps.getParameter<int>("nbinsFwdRPCEta"),
0041 ps.getParameter<int>("offsetFwdRPCEta"),
0042
0043
0044
0045
0046 0,
0047
0048 0,
0049
0050 std::vector<double>(1),
0051
0052 0,
0053
0054 false,
0055
0056 0,
0057
0058 0,
0059
0060 0),
0061
0062 m_nbitPackingPhi(ps.getParameter<int>("nbitPackingPhi")),
0063 m_nbitPackingEta(ps.getParameter<int>("nbitPackingGMTEta")),
0064 m_nbinsEta(ps.getParameter<int>("nbinsGMTEta")),
0065 m_signedPackingPhi(ps.getParameter<bool>("signedPackingPhi")) {}
0066
0067 L1MuTriggerScalesOnlineProducer::~L1MuTriggerScalesOnlineProducer() {}
0068
0069
0070
0071
0072
0073 class PhiScaleHelper {
0074 public:
0075 static L1MuBinnedScale* makeBinnedScale(l1t::OMDSReader::QueryResults& record, int nBits, bool signedPacking) {
0076 short nbins = 0;
0077 record.fillVariable(BinsColumn, nbins);
0078 float lowMark = 0.;
0079 record.fillVariable(LowMarkColumn, lowMark);
0080 float step = 0.;
0081 record.fillVariable(StepColumn, step);
0082
0083 return new L1MuBinnedScale(nBits, signedPacking, nbins, deg2rad(lowMark), deg2rad(lowMark + nbins * step));
0084 }
0085
0086 static void pushColumnNames(vector<string>& columns) {
0087 columns.push_back(BinsColumn);
0088 columns.push_back(LowMarkColumn);
0089 columns.push_back(StepColumn);
0090 }
0091
0092 static double deg2rad(double deg) { return deg * M_PI / 180.0; }
0093 static double rad2deg(double rad) { return rad / M_PI * 180.0; }
0094
0095 static const string BinsColumn;
0096 static const string LowMarkColumn;
0097 static const string StepColumn;
0098 };
0099
0100 const string PhiScaleHelper::BinsColumn = "PHI_BINS";
0101 const string PhiScaleHelper::LowMarkColumn = "PHI_DEG_BIN_LOW_0";
0102 const string PhiScaleHelper::StepColumn = "PHI_DEG_BIN_STEP";
0103
0104
0105 std::unique_ptr<L1MuTriggerScales> L1MuTriggerScalesOnlineProducer::newObject(const std::string& objectKey) {
0106
0107
0108
0109 vector<string> foreignKeys;
0110
0111 const std::string etaKeyColumn("SC_MUON_ETA_FK");
0112 const std::string phiKeyColumn("SC_MUON_PHI_FK");
0113
0114 foreignKeys.push_back(etaKeyColumn);
0115 foreignKeys.push_back(phiKeyColumn);
0116
0117 l1t::OMDSReader::QueryResults keysRecord = m_omdsReader.basicQuery(
0118
0119 foreignKeys,
0120
0121 "CMS_GT",
0122
0123 "L1T_SCALES",
0124
0125 "L1T_SCALES.ID",
0126
0127 m_omdsReader.singleAttribute(objectKey));
0128
0129 if (keysRecord.numberRows() != 1)
0130 {
0131 throw cond::Exception(
0132 "Problem finding L1MuTriggerScales associated "
0133 "with scales key `" +
0134 objectKey + "'");
0135 }
0136
0137 std::string etaKeyValue;
0138 std::string phiKeyValue;
0139 keysRecord.fillVariable(etaKeyColumn, etaKeyValue);
0140 keysRecord.fillVariable(phiKeyColumn, phiKeyValue);
0141
0142 vector<string> columns;
0143
0144
0145 ScaleRecordHelper etaHelper("ETA_BIN_LOW", m_nbinsEta);
0146 etaHelper.pushColumnNames(columns);
0147
0148 l1t::OMDSReader::QueryResults etaRecord = m_omdsReader.basicQuery(
0149
0150 columns,
0151
0152 "CMS_GT",
0153
0154 "L1T_SCALE_MUON_ETA",
0155
0156 "L1T_SCALE_MUON_ETA.ID",
0157
0158 m_omdsReader.singleAttribute(etaKeyValue));
0159
0160 vector<double> etaScales;
0161 etaHelper.extractScales(etaRecord, etaScales);
0162
0163 unique_ptr<L1MuSymmetricBinnedScale> ptrEtaScale(
0164 new L1MuSymmetricBinnedScale(m_nbitPackingEta, m_nbinsEta, etaScales));
0165 m_scales.setGMTEtaScale(*ptrEtaScale);
0166
0167 columns.clear();
0168
0169
0170 PhiScaleHelper phiHelper;
0171
0172 l1t::OMDSReader::QueryResults phiRecord = m_omdsReader.basicQuery(
0173
0174 columns,
0175
0176 "CMS_GT",
0177
0178 "L1T_SCALE_MUON_PHI",
0179
0180 "L1T_SCALE_MUON_PHI.ID",
0181
0182 m_omdsReader.singleAttribute(phiKeyValue));
0183
0184 unique_ptr<L1MuBinnedScale> ptrPhiScale(phiHelper.makeBinnedScale(phiRecord, m_nbitPackingPhi, m_signedPackingPhi));
0185
0186 m_scales.setPhiScale(*ptrPhiScale);
0187
0188 return std::make_unique<L1MuTriggerScales>(m_scales);
0189 }