File indexing completed on 2024-04-06 11:58:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <sstream>
0013 #include "CalibFormats/SiPixelObjects/interface/PixelModuleName.h"
0014 #include "CalibFormats/SiPixelObjects/interface/PixelMaskAllPixels.h"
0015 #include "CalibFormats/SiPixelObjects/interface/PixelTimeFormatter.h"
0016 #include "CalibFormats/SiPixelObjects/interface/PixelBase64.h"
0017 #include <fstream>
0018 #include <map>
0019 #include <iostream>
0020 #include <cassert>
0021 #include <stdexcept>
0022
0023 using namespace pos;
0024 using namespace std;
0025
0026
0027 PixelMaskAllPixels::PixelMaskAllPixels(std::vector<std::vector<std::string> > &tableMat) : PixelMaskBase("", "", "") {
0028 std::string mthn = "[PixelMaskAllPixels::PixelMaskAllPixels()]\t\t ";
0029
0030
0031 std::vector<std::string> ins = tableMat[0];
0032 std::map<std::string, int> colM;
0033 std::vector<std::string> colNames;
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 colNames.push_back("CONFIG_KEY");
0047 colNames.push_back("KEY_TYPE");
0048 colNames.push_back("KEY_ALIAS");
0049 colNames.push_back("VERSION");
0050 colNames.push_back("KIND_OF_COND");
0051 colNames.push_back("ROC_NAME");
0052 colNames.push_back("KILL_MASK");
0053
0054 for (unsigned int c = 0; c < ins.size(); c++) {
0055 for (unsigned int n = 0; n < colNames.size(); n++) {
0056 if (tableMat[0][c] == colNames[n]) {
0057 colM[colNames[n]] = c;
0058 break;
0059 }
0060 }
0061 }
0062 for (unsigned int n = 0; n < colNames.size(); n++) {
0063 if (colM.find(colNames[n]) == colM.end()) {
0064 std::cerr << mthn << "Couldn't find in the database the column with name " << colNames[n] << std::endl;
0065 assert(0);
0066 }
0067 }
0068 maskbits_.clear();
0069 for (unsigned int r = 1; r < tableMat.size(); r++) {
0070 std::string currentRocName = tableMat[r][colM["ROC_NAME"]];
0071 PixelROCName rocid(currentRocName);
0072 PixelROCMaskBits tmp;
0073 tmp.read(rocid,
0074 base64_decode(tableMat[r][colM["KILL_MASK"]]));
0075 maskbits_.push_back(tmp);
0076 }
0077 }
0078
0079
0080
0081 PixelMaskAllPixels::PixelMaskAllPixels() : PixelMaskBase("", "", "") { ; }
0082
0083
0084 void PixelMaskAllPixels::addROCMaskBits(const PixelROCMaskBits &bits) { maskbits_.push_back(bits); }
0085
0086
0087 PixelMaskAllPixels::PixelMaskAllPixels(std::string filename) : PixelMaskBase("", "", "") {
0088 std::string mthn = "[PixelMaskAllPixels::PixelMaskAllPixels()]\t\t ";
0089
0090 if (filename[filename.size() - 1] == 't') {
0091 std::ifstream in(filename.c_str());
0092
0093 if (!in.good()) {
0094 std::cout << __LINE__ << "]\t" << mthn << "Could not open: " << filename << std::endl;
0095 throw std::runtime_error("Failed to open file " + filename);
0096 }
0097
0098 std::string tag;
0099 in >> tag;
0100
0101 maskbits_.clear();
0102
0103 while (!in.eof()) {
0104 PixelROCName rocid(in);
0105
0106 PixelROCMaskBits tmp;
0107
0108 tmp.read(rocid, in);
0109
0110 maskbits_.push_back(tmp);
0111
0112 in >> tag;
0113 }
0114
0115 in.close();
0116
0117 } else {
0118 std::ifstream in(filename.c_str(), std::ios::binary);
0119
0120 char nchar;
0121
0122 in.read(&nchar, 1);
0123
0124
0125
0126 std::string s1;
0127
0128
0129 for (int i = 0; i < nchar; i++) {
0130 char c;
0131 in >> c;
0132 s1.push_back(c);
0133 }
0134
0135
0136
0137 maskbits_.clear();
0138
0139 while (!in.eof()) {
0140
0141
0142 PixelROCName rocid(s1);
0143
0144
0145
0146 PixelROCMaskBits tmp;
0147
0148 tmp.readBinary(rocid, in);
0149
0150 maskbits_.push_back(tmp);
0151
0152 in.read(&nchar, 1);
0153
0154 s1.clear();
0155
0156 if (in.eof())
0157 continue;
0158
0159
0160
0161
0162 for (int i = 0; i < nchar; i++) {
0163 char c;
0164 in >> c;
0165
0166 s1.push_back(c);
0167 }
0168
0169 }
0170
0171 in.close();
0172 }
0173
0174
0175 }
0176
0177
0178 const PixelROCMaskBits &PixelMaskAllPixels::getMaskBits(int ROCId) const { return maskbits_[ROCId]; }
0179
0180
0181 PixelROCMaskBits *PixelMaskAllPixels::getMaskBits(PixelROCName name) {
0182 for (unsigned int i = 0; i < maskbits_.size(); i++) {
0183 if (maskbits_[i].name() == name)
0184 return &(maskbits_[i]);
0185 }
0186
0187 return nullptr;
0188 }
0189
0190
0191 void PixelMaskAllPixels::writeBinary(std::string filename) const {
0192 std::ofstream out(filename.c_str(), std::ios::binary);
0193
0194 for (unsigned int i = 0; i < maskbits_.size(); i++) {
0195 maskbits_[i].writeBinary(out);
0196 }
0197 }
0198
0199
0200 void PixelMaskAllPixels::writeASCII(std::string dir) const {
0201 if (!dir.empty())
0202 dir += "/";
0203 PixelModuleName module(maskbits_[0].name().rocname());
0204 std::string filename = dir + "ROC_Masks_module_" + module.modulename() + ".dat";
0205
0206 std::ofstream out(filename.c_str());
0207
0208 for (unsigned int i = 0; i < maskbits_.size(); i++) {
0209 maskbits_[i].writeASCII(out);
0210 }
0211 }
0212
0213
0214 void PixelMaskAllPixels::writeXMLHeader(pos::PixelConfigKey key,
0215 int version,
0216 std::string path,
0217 std::ofstream *outstream,
0218 std::ofstream *out1stream,
0219 std::ofstream *out2stream) const {
0220 std::string mthn = "[PixelMaskAllPixels::writeXMLHeader()]\t\t\t ";
0221 std::stringstream maskFullPath;
0222
0223 maskFullPath << path << "/Pixel_RocMasks_" << PixelTimeFormatter::getmSecTime() << ".xml";
0224 std::cout << __LINE__ << "]\t" << mthn << "Writing to: " << maskFullPath.str() << std::endl;
0225
0226 outstream->open(maskFullPath.str().c_str());
0227
0228 *outstream << "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" << std::endl;
0229 *outstream << "<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" << std::endl;
0230 *outstream << "" << std::endl;
0231 *outstream << " <HEADER>" << std::endl;
0232 *outstream << " <TYPE>" << std::endl;
0233 *outstream << " <EXTENSION_TABLE_NAME>ROC_MASKS</EXTENSION_TABLE_NAME>" << std::endl;
0234 *outstream << " <NAME>ROC Mask Bits</NAME>" << std::endl;
0235 *outstream << " </TYPE>" << std::endl;
0236 *outstream << " <RUN>" << std::endl;
0237 *outstream << " <RUN_TYPE>ROC Mask Bits</RUN_TYPE>" << std::endl;
0238 *outstream << " <RUN_NUMBER>1</RUN_NUMBER>" << std::endl;
0239 *outstream << " <RUN_BEGIN_TIMESTAMP>" << PixelTimeFormatter::getTime() << "</RUN_BEGIN_TIMESTAMP>" << std::endl;
0240 *outstream << " <LOCATION>CERN P5</LOCATION>" << std::endl;
0241 *outstream << " </RUN>" << std::endl;
0242 *outstream << " </HEADER>" << std::endl;
0243 *outstream << "" << std::endl;
0244 *outstream << " <DATA_SET>" << std::endl;
0245 *outstream << "" << std::endl;
0246 *outstream << " <VERSION>" << version << "</VERSION>" << std::endl;
0247 *outstream << " <COMMENT_DESCRIPTION>" << getComment() << "</COMMENT_DESCRIPTION>" << std::endl;
0248 *outstream << " <CREATED_BY_USER>" << getAuthor() << "</CREATED_BY_USER>" << std::endl;
0249 *outstream << "" << std::endl;
0250 *outstream << " <PART>" << std::endl;
0251 *outstream << " <NAME_LABEL>CMS-PIXEL-ROOT</NAME_LABEL>" << std::endl;
0252 *outstream << " <KIND_OF_PART>Detector ROOT</KIND_OF_PART>" << std::endl;
0253 *outstream << " </PART>" << std::endl;
0254 *outstream << " " << std::endl;
0255 }
0256
0257 void PixelMaskAllPixels::writeXML(std::ofstream *outstream,
0258 std::ofstream *out1stream,
0259 std::ofstream *out2stream) const {
0260 std::string mthn = "[PixelMaskAllPixels::writeXML()]\t\t\t ";
0261
0262 for (unsigned int i = 0; i < maskbits_.size(); i++) {
0263 maskbits_[i].writeXML(outstream);
0264 }
0265 }
0266
0267 void PixelMaskAllPixels::writeXMLTrailer(std::ofstream *outstream,
0268 std::ofstream *out1stream,
0269 std::ofstream *out2stream) const {
0270 std::string mthn = "[PixelMaskAllPixels::writeXMLTrailer()]\t\t\t ";
0271
0272 *outstream << " " << std::endl;
0273 *outstream << " </DATA_SET>" << std::endl;
0274 *outstream << "</ROOT>" << std::endl;
0275
0276 outstream->close();
0277 std::cout << __LINE__ << "]\t" << mthn << "Data written " << std::endl;
0278 }