File indexing completed on 2024-04-06 12:19:54
0001 #include "L1Trigger/GlobalCaloTrigger/test/gctTestElectrons.h"
0002
0003 #include "FWCore/Utilities/interface/Exception.h"
0004
0005 #include "L1Trigger/GlobalCaloTrigger/interface/L1GlobalCaloTrigger.h"
0006 #include "L1Trigger/GlobalCaloTrigger/interface/L1GctElectronSorter.h"
0007
0008 #include <fstream> //for file IO
0009 #include <iostream>
0010 #include <sstream> //for int->char conversion
0011
0012 using std::cout;
0013 using std::endl;
0014 using std::string;
0015 using std::vector;
0016
0017
0018
0019
0020
0021 gctTestElectrons::gctTestElectrons() {
0022 m_theIsoEmCandSorter = new L1GctElectronSorter(18, 0);
0023 m_nonIsoEmCandSorter = new L1GctElectronSorter(18, 1);
0024 }
0025
0026 gctTestElectrons::~gctTestElectrons() {
0027 delete m_theIsoEmCandSorter;
0028 delete m_nonIsoEmCandSorter;
0029 }
0030
0031
0032
0033
0034 std::vector<L1CaloEmCand> gctTestElectrons::loadEvent(L1GlobalCaloTrigger*& gct,
0035 const std::string fileName,
0036 const int16_t bx) {
0037 m_fileNameUsed = fileName;
0038
0039
0040 for (int i = 0; i < 18; i++) {
0041 std::stringstream ss;
0042 string fileNo;
0043 ss << i;
0044 ss >> fileNo;
0045 LoadFileData(m_fileNameUsed + fileNo, bx);
0046 }
0047
0048
0049 std::vector<L1CaloEmCand> temp(m_theIsoEmCandsFromFileInput);
0050 temp.insert(temp.end(), m_nonIsoEmCandsFromFileInput.begin(), m_nonIsoEmCandsFromFileInput.end());
0051
0052
0053 gct->fillEmCands(temp);
0054
0055 return temp;
0056 }
0057
0058
0059
0060
0061 void gctTestElectrons::fillElectronData(const L1GlobalCaloTrigger* gct) {
0062 m_theIsoEmCandsFromGct = gct->getIsoElectrons();
0063 m_nonIsoEmCandsFromGct = gct->getNonIsoElectrons();
0064
0065 cout << "=========== From the GCT chain ===============" << endl;
0066 cout << "Iso electrons are: " << endl;
0067 print(m_theIsoEmCandsFromGct);
0068 cout << "Non-iso electrons are: " << endl;
0069 print(m_nonIsoEmCandsFromGct);
0070 }
0071
0072
0073
0074
0075 bool gctTestElectrons::checkElectrons(const L1GlobalCaloTrigger* gct, const int bxStart, const int numOfBx) {
0076 bool testPass = true;
0077
0078
0079 m_theIsoEmCandsFromFileSorted.clear();
0080 m_nonIsoEmCandsFromFileSorted.clear();
0081
0082 vector<L1GctEmCand>::iterator theIsoItr = m_theIsoEmCandsFromFileSorted.end();
0083 vector<L1GctEmCand>::iterator nonIsoItr = m_nonIsoEmCandsFromFileSorted.end();
0084
0085 int16_t bx = bxStart;
0086 for (int i = 0; i < numOfBx; i++) {
0087
0088 for (int i = 0; i < 18; i++) {
0089 std::stringstream ss;
0090 string fileNo;
0091 ss << i;
0092 ss >> fileNo;
0093 LoadFileData(m_fileNameUsed + fileNo, bx);
0094 }
0095
0096 std::cout << "Filling sorters" << std::endl;
0097 for (unsigned int i = 0; i != 72; i++) {
0098 m_theIsoEmCandSorter->setInputEmCand(m_theIsoEmCandsFromFileInput[i]);
0099 m_nonIsoEmCandSorter->setInputEmCand(m_nonIsoEmCandsFromFileInput[i]);
0100 }
0101 m_theIsoEmCandSorter->process();
0102 m_nonIsoEmCandSorter->process();
0103
0104 m_theIsoEmCandsFromFileSorted.insert(
0105 theIsoItr, m_theIsoEmCandSorter->getOutputCands().begin(), m_theIsoEmCandSorter->getOutputCands().end());
0106 m_nonIsoEmCandsFromFileSorted.insert(
0107 nonIsoItr, m_nonIsoEmCandSorter->getOutputCands().begin(), m_nonIsoEmCandSorter->getOutputCands().end());
0108
0109 bx++;
0110 }
0111
0112 cout << "=================From files externally sorted=============" << endl;
0113 cout << "Iso electrons are:" << endl;
0114 print(m_theIsoEmCandsFromFileSorted);
0115 cout << "Non-iso electrons are:" << endl;
0116 print(m_nonIsoEmCandsFromFileSorted);
0117
0118 testPass &= m_theIsoEmCandsFromFileSorted == m_theIsoEmCandsFromGct;
0119 testPass &= m_nonIsoEmCandsFromFileSorted == m_nonIsoEmCandsFromGct;
0120
0121 return testPass;
0122 }
0123
0124
0125
0126 void gctTestElectrons::LoadFileData(const string& inputFile, const int16_t bx) {
0127 using namespace std;
0128
0129 ifstream file;
0130
0131
0132 file.open(inputFile.c_str(), ios::in);
0133
0134 if (!file) {
0135 throw cms::Exception("ErrorOpenFile") << "Cannot open input data file" << endl;
0136 }
0137
0138 unsigned candRank = 0, candRegion = 0, candCard = 0, candCrate = 0;
0139 short dummy;
0140 string bxNo = "poels";
0141 bool candIso = false;
0142
0143
0144
0145
0146
0147 file >> bxNo;
0148 file >> std::dec >> dummy;
0149 for (int i = 0; i < 58; i++) {
0150 if (i < 8) {
0151 file >> std::hex >> dummy;
0152 candRank = dummy & 0x3f;
0153 candRegion = (dummy >> 6) & 0x1;
0154 candCard = (dummy >> 7) & 0x7;
0155 candIso = (i >= 4);
0156 L1CaloEmCand electron(candRank, candRegion, candCard, candCrate, candIso);
0157 electron.setBx(bx);
0158 if (candIso) {
0159 m_theIsoEmCandsFromFileInput.push_back(electron);
0160 } else {
0161 m_nonIsoEmCandsFromFileInput.push_back(electron);
0162 }
0163 } else {
0164 file >> std::hex >> dummy;
0165 }
0166 }
0167 file.close();
0168
0169 return;
0170 }
0171
0172 void gctTestElectrons::print(const vector<L1GctEmCand> cands) const {
0173 for (unsigned int i = 0; i != cands.size(); i++) {
0174 cout << " Rank: " << cands[i].rank() << " Eta: " << cands[i].etaIndex()
0175 << " Phi: " << cands[i].phiIndex() << endl;
0176 }
0177 return;
0178 }