File indexing completed on 2023-10-25 09:39:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h"
0017
0018
0019 #include <iomanip>
0020
0021
0022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0023
0024
0025 L1GlobalTriggerRecord::L1GlobalTriggerRecord() {
0026
0027 }
0028
0029 L1GlobalTriggerRecord::L1GlobalTriggerRecord(const unsigned int numberPhysTriggers,
0030 const unsigned int numberTechnicalTriggers) {
0031 m_gtDecisionWord.reserve(numberPhysTriggers);
0032 m_gtTechnicalTriggerWord.reserve(numberTechnicalTriggers);
0033
0034 m_gtDecisionWordBeforeMask.reserve(numberPhysTriggers);
0035 m_gtTechnicalTriggerWordBeforeMask.reserve(numberTechnicalTriggers);
0036 }
0037
0038
0039 L1GlobalTriggerRecord::L1GlobalTriggerRecord(const L1GlobalTriggerRecord& result) {
0040 m_gtGlobalDecision = result.m_gtGlobalDecision;
0041
0042 m_gtDecisionWord = result.m_gtDecisionWord;
0043 m_gtTechnicalTriggerWord = result.m_gtTechnicalTriggerWord;
0044
0045 m_gtDecisionWordBeforeMask = result.m_gtDecisionWordBeforeMask;
0046 m_gtTechnicalTriggerWordBeforeMask = result.m_gtTechnicalTriggerWordBeforeMask;
0047
0048 m_gtPrescaleFactorIndexTech = result.m_gtPrescaleFactorIndexTech;
0049 m_gtPrescaleFactorIndexAlgo = result.m_gtPrescaleFactorIndexAlgo;
0050 }
0051
0052
0053 L1GlobalTriggerRecord::~L1GlobalTriggerRecord() {
0054
0055 }
0056
0057
0058 L1GlobalTriggerRecord& L1GlobalTriggerRecord::operator=(const L1GlobalTriggerRecord& result) {
0059 if (this != &result) {
0060 m_gtGlobalDecision = result.m_gtGlobalDecision;
0061
0062 m_gtDecisionWord = result.m_gtDecisionWord;
0063 m_gtTechnicalTriggerWord = result.m_gtTechnicalTriggerWord;
0064
0065 m_gtDecisionWordBeforeMask = result.m_gtDecisionWordBeforeMask;
0066 m_gtTechnicalTriggerWordBeforeMask = result.m_gtTechnicalTriggerWordBeforeMask;
0067
0068 m_gtPrescaleFactorIndexTech = result.m_gtPrescaleFactorIndexTech;
0069 m_gtPrescaleFactorIndexAlgo = result.m_gtPrescaleFactorIndexAlgo;
0070 }
0071
0072 return *this;
0073 }
0074
0075
0076 bool L1GlobalTriggerRecord::operator==(const L1GlobalTriggerRecord& result) const {
0077 if (m_gtGlobalDecision != result.m_gtGlobalDecision) {
0078 return false;
0079 }
0080
0081 if (m_gtDecisionWord != result.m_gtDecisionWord) {
0082 return false;
0083 }
0084
0085 if (m_gtTechnicalTriggerWord != result.m_gtTechnicalTriggerWord) {
0086 return false;
0087 }
0088
0089 if (m_gtDecisionWordBeforeMask != result.m_gtDecisionWordBeforeMask) {
0090 return false;
0091 }
0092
0093 if (m_gtTechnicalTriggerWordBeforeMask != result.m_gtTechnicalTriggerWordBeforeMask) {
0094 return false;
0095 }
0096
0097 if (m_gtPrescaleFactorIndexTech != result.m_gtPrescaleFactorIndexTech) {
0098 return false;
0099 }
0100
0101 if (m_gtPrescaleFactorIndexAlgo != result.m_gtPrescaleFactorIndexAlgo) {
0102 return false;
0103 }
0104
0105
0106 return true;
0107 }
0108
0109
0110 bool L1GlobalTriggerRecord::operator!=(const L1GlobalTriggerRecord& result) const { return !(result == *this); }
0111
0112
0113
0114 void L1GlobalTriggerRecord::setDecision(const bool& dValue) { m_gtGlobalDecision = dValue; }
0115
0116
0117 void L1GlobalTriggerRecord::setDecisionWord(const DecisionWord& dWordValue) { m_gtDecisionWord = dWordValue; }
0118
0119 void L1GlobalTriggerRecord::setTechnicalTriggerWord(const TechnicalTriggerWord& ttWordValue) {
0120 m_gtTechnicalTriggerWord = ttWordValue;
0121 }
0122
0123
0124 void L1GlobalTriggerRecord::setDecisionWordBeforeMask(const DecisionWord& dWordValue) {
0125 m_gtDecisionWordBeforeMask = dWordValue;
0126 }
0127
0128 void L1GlobalTriggerRecord::setTechnicalTriggerWordBeforeMask(const TechnicalTriggerWord& ttWordValue) {
0129 m_gtTechnicalTriggerWordBeforeMask = ttWordValue;
0130 }
0131
0132
0133 void L1GlobalTriggerRecord::printGtDecision(std::ostream& myCout) const {
0134 myCout << std::endl;
0135 myCout << "\n Global decision (FinalOR): " << m_gtGlobalDecision << std::endl;
0136
0137
0138 int sizeW64 = 64;
0139
0140 int iBit = 0;
0141 int nrDecWord = m_gtDecisionWord.size() / sizeW64;
0142
0143 std::ostringstream stream64;
0144
0145 std::vector<std::string> decWord;
0146 decWord.reserve(nrDecWord);
0147
0148 for (std::vector<bool>::const_reverse_iterator ritBit = m_gtDecisionWord.rbegin(); ritBit != m_gtDecisionWord.rend();
0149 ++ritBit) {
0150 stream64 << (*ritBit ? '1' : '0');
0151
0152 if ((((iBit + 1) % 16) == (sizeW64 % 16))) {
0153 stream64 << " ";
0154 }
0155
0156 if (((iBit + 1) % sizeW64) == 0) {
0157 std::string iW = stream64.str();
0158 stream64.str("");
0159
0160 decWord.push_back(iW);
0161 }
0162
0163 iBit++;
0164 }
0165
0166 int iWord = 0;
0167
0168 myCout << "\n DecisionWord after trigger mask (bitset style)";
0169 for (std::vector<std::string>::reverse_iterator ritWord = decWord.rbegin(); ritWord != decWord.rend(); ++ritWord) {
0170 myCout << "\n Bits " << iWord * sizeW64 + sizeW64 - 1 << " : " << iWord * sizeW64 << "\n ";
0171 myCout << *ritWord;
0172
0173 iWord++;
0174 }
0175 }
0176
0177
0178 void L1GlobalTriggerRecord::printTechnicalTrigger(std::ostream& myCout) const {
0179 myCout << "\n Technical triggers after trigger mask (bitset style): \n ";
0180
0181 int sizeW64 = 64;
0182 int iBit = 0;
0183
0184 for (std::vector<bool>::const_reverse_iterator ritBit = m_gtTechnicalTriggerWord.rbegin();
0185 ritBit != m_gtTechnicalTriggerWord.rend();
0186 ++ritBit) {
0187 myCout << (*ritBit ? '1' : '0');
0188
0189 if ((((iBit + 1) % 16) == (sizeW64 % 16)) && (iBit != 63)) {
0190 myCout << " ";
0191 }
0192
0193 iBit++;
0194 }
0195 }
0196
0197
0198 void L1GlobalTriggerRecord::reset() {
0199 m_gtGlobalDecision = false;
0200
0201 for (std::vector<bool>::iterator itBit = m_gtDecisionWord.begin(); itBit != m_gtDecisionWord.end(); ++itBit) {
0202 *itBit = false;
0203 }
0204 for (std::vector<bool>::iterator itBit = m_gtTechnicalTriggerWord.begin(); itBit != m_gtTechnicalTriggerWord.end();
0205 ++itBit) {
0206 *itBit = false;
0207 }
0208 for (std::vector<bool>::iterator itBit = m_gtDecisionWordBeforeMask.begin();
0209 itBit != m_gtDecisionWordBeforeMask.end();
0210 ++itBit) {
0211 *itBit = false;
0212 }
0213
0214 for (std::vector<bool>::iterator itBit = m_gtTechnicalTriggerWordBeforeMask.begin();
0215 itBit != m_gtTechnicalTriggerWordBeforeMask.end();
0216 ++itBit) {
0217 *itBit = false;
0218 }
0219
0220 m_gtPrescaleFactorIndexTech = 0;
0221 m_gtPrescaleFactorIndexAlgo = 0;
0222 }
0223
0224
0225 void L1GlobalTriggerRecord::print(std::ostream& myCout) const {
0226 printGtDecision(myCout);
0227
0228 myCout << std::endl;
0229
0230 printTechnicalTrigger(myCout);
0231
0232 myCout << std::endl;
0233 myCout << "\n Index of prescale factor set for technical triggers: " << m_gtPrescaleFactorIndexTech << std::endl;
0234 myCout << " Index of prescale factor set for algorithm triggers: " << m_gtPrescaleFactorIndexTech << std::endl;
0235 myCout << std::endl;
0236 }
0237
0238
0239 std::ostream& operator<<(std::ostream& streamRec, const L1GlobalTriggerRecord& result) {
0240 result.print(streamRec);
0241 return streamRec;
0242 }