File indexing completed on 2024-04-06 11:58:17
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "CalibFormats/SiPixelObjects/interface/PixelPortcardMap.h"
0010 #include "CalibFormats/SiPixelObjects/interface/PixelTimeFormatter.h"
0011
0012 #include <sstream>
0013 #include <cassert>
0014 #include <stdexcept>
0015
0016 using namespace pos;
0017 using namespace std;
0018
0019 PixelPortcardMap::PixelPortcardMap(std::vector<std::vector<std::string> > &tableMat) : PixelConfigBase(" ", " ", " ") {
0020 std::string mthn = "[PixelPortcardMap::PixelPortcardMap()]\t\t\t ";
0021 std::vector<std::string> ins = tableMat[0];
0022 std::map<std::string, int> colM;
0023 std::vector<std::string> colNames;
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 colNames.push_back("CONFIG_KEY");
0038 colNames.push_back("KEY_TYPE");
0039 colNames.push_back("KEY_ALIAS");
0040 colNames.push_back("VERSION");
0041 colNames.push_back("KIND_OF_COND");
0042 colNames.push_back("PORT_CARD");
0043 colNames.push_back("PANEL_NAME");
0044 colNames.push_back("TBM_MODE");
0045 colNames.push_back("AOH_CHAN");
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 for (unsigned int c = 0; c < ins.size(); c++) {
0058 for (unsigned int n = 0; n < colNames.size(); n++) {
0059 if (tableMat[0][c] == colNames[n]) {
0060 colM[colNames[n]] = c;
0061 break;
0062 }
0063 }
0064 }
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077 std::string portcardname;
0078 std::string modulename;
0079 unsigned int aoh;
0080 std::string aohstring;
0081 std::string tbmChannel;
0082
0083 for (unsigned int r = 1; r < tableMat.size(); r++) {
0084
0085 portcardname = tableMat[r][colM["PORT_CARD"]];
0086 modulename = tableMat[r][colM["PANEL_NAME"]];
0087 aohstring = tableMat[r][colM["AOH_CHAN"]];
0088 tbmChannel = tableMat[r][colM["TBM_MODE"]];
0089
0090
0091
0092
0093
0094
0095
0096 aoh = (((unsigned int)atoi(aohstring.c_str())));
0097
0098 PixelModuleName module(modulename);
0099 if (module.modulename() != modulename) {
0100 std::cout << __LINE__ << "]\t" << mthn << "Modulename: " << modulename << std::endl;
0101 std::cout << __LINE__ << "]\t" << mthn << "Parsed to : " << module.modulename() << std::endl;
0102 assert(0);
0103 }
0104 if (tbmChannel.empty()) {
0105 tbmChannel = "A";
0106 }
0107 PixelChannel channel(module, tbmChannel);
0108 std::pair<std::string, int> portcardAndAOH(portcardname, aoh);
0109 map_[channel] = portcardAndAOH;
0110 }
0111
0112 }
0113
0114
0115 PixelPortcardMap::PixelPortcardMap(std::string filename) : PixelConfigBase(" ", " ", " ") {
0116 std::string mthn = "[PixelPortcardMap::PixelPortcardMap()]\t\t\t ";
0117 std::ifstream in(filename.c_str());
0118
0119 if (!in.good()) {
0120 std::cout << __LINE__ << "]\t" << mthn << "Could not open: " << filename << std::endl;
0121 throw std::runtime_error("Failed to open file " + filename);
0122 } else {
0123 std::cout << __LINE__ << "]\t" << mthn << "Reading from: " << filename << std::endl;
0124 }
0125
0126 std::string dummy;
0127
0128 in >> dummy;
0129 in >> dummy;
0130 in >> dummy;
0131 in >> dummy;
0132 in >> dummy;
0133
0134 do {
0135 std::string portcardname;
0136 std::string modulename;
0137 std::string TBMChannel = "A";
0138 std::string aoh_string;
0139 unsigned int aoh;
0140
0141 in >> portcardname >> modulename >> aoh_string;
0142 if (aoh_string == "A" ||
0143 aoh_string == "B")
0144 {
0145 TBMChannel = aoh_string;
0146 in >> aoh_string;
0147 }
0148 aoh = atoi(aoh_string.c_str());
0149
0150 if (!in.eof()) {
0151 PixelModuleName module(modulename);
0152 if (module.modulename() != modulename) {
0153 std::cout << __LINE__ << "]\t" << mthn << "Modulename: " << modulename << std::endl;
0154 std::cout << __LINE__ << "]\t" << mthn << "Parsed to : " << module.modulename() << std::endl;
0155 assert(0);
0156 }
0157
0158 PixelChannel channel(module, TBMChannel);
0159 std::pair<std::string, int> portcardAndAOH(portcardname, aoh);
0160 map_[channel] = portcardAndAOH;
0161 }
0162
0163 } while (!in.eof());
0164 }
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178 PixelPortcardMap::~PixelPortcardMap() {}
0179
0180 void PixelPortcardMap::writeASCII(std::string dir) const {
0181 std::string mthn = "[PixelPortcardMap::writeASCII()]\t\t\t\t ";
0182 if (!dir.empty())
0183 dir += "/";
0184 string filename = dir + "portcardmap.dat";
0185
0186 ofstream out(filename.c_str());
0187 if (!out.good()) {
0188 cout << __LINE__ << "]\t" << mthn << "Could not open file: " << filename << endl;
0189 assert(0);
0190 }
0191
0192 out << "# Portcard Module AOH channel" << endl;
0193 std::map<PixelChannel, std::pair<std::string, int> >::const_iterator i = map_.begin();
0194 for (; i != map_.end(); ++i) {
0195 out << i->second.first << " " << i->first.module() << " " << i->first.TBMChannel() << " "
0196 << i->second.second << endl;
0197 }
0198 out.close();
0199 }
0200
0201 const std::set<std::pair<std::string, int> > PixelPortcardMap::PortCardAndAOHs(const PixelModuleName &aModule) const {
0202 std::set<std::pair<std::string, int> > returnThis;
0203
0204
0205 for (std::map<PixelChannel, std::pair<std::string, int> >::const_iterator map_itr = map_.begin();
0206 map_itr != map_.end();
0207 ++map_itr) {
0208 if (map_itr->first.modulename() == aModule.modulename()) {
0209 returnThis.insert(map_itr->second);
0210 }
0211 }
0212
0213 return returnThis;
0214 }
0215
0216
0217 bool PixelPortcardMap::getName(std::string moduleName, std::string &portcardName) {
0218 for (std::map<PixelChannel, std::pair<std::string, int> >::const_iterator map_itr = map_.begin();
0219 map_itr != map_.end();
0220 ++map_itr) {
0221 if (map_itr->first.modulename() == moduleName) {
0222 portcardName = map_itr->second.first;
0223 return true;
0224 }
0225 }
0226 return false;
0227 }
0228
0229 const std::set<std::string> PixelPortcardMap::portcards(const PixelModuleName &aModule) const {
0230 std::set<std::string> returnThis;
0231 const std::set<std::pair<std::string, int> > portCardAndAOHs = PortCardAndAOHs(aModule);
0232 for (std::set<std::pair<std::string, int> >::const_iterator portCardAndAOHs_itr = portCardAndAOHs.begin();
0233 portCardAndAOHs_itr != portCardAndAOHs.end();
0234 ++portCardAndAOHs_itr) {
0235 returnThis.insert((*portCardAndAOHs_itr).first);
0236 }
0237 return returnThis;
0238 }
0239
0240 const std::pair<std::string, int> PixelPortcardMap::PortCardAndAOH(const PixelModuleName &aModule,
0241 const PixelTBMChannel &TBMChannel) const {
0242 return PortCardAndAOH(PixelChannel(aModule, TBMChannel));
0243 }
0244
0245 const std::pair<std::string, int> PixelPortcardMap::PortCardAndAOH(const PixelModuleName &aModule,
0246 const std::string &TBMChannel) const {
0247 return PortCardAndAOH(PixelChannel(aModule, TBMChannel));
0248 }
0249
0250 const std::pair<std::string, int> PixelPortcardMap::PortCardAndAOH(const PixelChannel &aChannel) const {
0251 std::map<PixelChannel, std::pair<std::string, int> >::const_iterator found = map_.find(aChannel);
0252 if (found == map_.end()) {
0253 std::pair<std::string, int> returnThis("none", 0);
0254 return returnThis;
0255 } else {
0256 return found->second;
0257 }
0258 }
0259
0260 std::set<PixelModuleName> PixelPortcardMap::modules(std::string portCardName) const {
0261 std::set<PixelModuleName> returnThis;
0262
0263
0264 for (std::map<PixelChannel, std::pair<std::string, int> >::const_iterator map_itr = map_.begin();
0265 map_itr != map_.end();
0266 ++map_itr) {
0267 if (map_itr->second.first == portCardName) {
0268 returnThis.insert(map_itr->first.module());
0269 }
0270 }
0271
0272 return returnThis;
0273 }
0274
0275 std::set<std::string> PixelPortcardMap::portcards(const PixelDetectorConfig *detconfig) {
0276 std::set<std::string> returnThis;
0277
0278 if (detconfig != nullptr) {
0279
0280
0281 const std::vector<PixelModuleName> &moduleList = detconfig->getModuleList();
0282 std::set<std::string> moduleNames;
0283 for (std::vector<PixelModuleName>::const_iterator it = moduleList.begin(), it_end = moduleList.end(); it != it_end;
0284 ++it) {
0285 moduleNames.insert(it->modulename());
0286 }
0287
0288 for (std::map<PixelChannel, std::pair<std::string, int> >::const_iterator map_itr = map_.begin();
0289 map_itr != map_.end();
0290 ++map_itr) {
0291 if (moduleNames.find(map_itr->first.modulename()) != moduleNames.end()) {
0292 returnThis.insert(map_itr->second.first);
0293 }
0294 }
0295
0296 } else {
0297 for (std::map<PixelChannel, std::pair<std::string, int> >::const_iterator map_itr = map_.begin();
0298 map_itr != map_.end();
0299 ++map_itr) {
0300 returnThis.insert(map_itr->second.first);
0301 }
0302 }
0303
0304 return returnThis;
0305 }
0306
0307 void PixelPortcardMap::writeXMLHeader(pos::PixelConfigKey key,
0308 int version,
0309 std::string path,
0310 std::ofstream *outstream,
0311 std::ofstream *out1stream,
0312 std::ofstream *out2stream) const {
0313 std::string mthn = "[PixelPortcardMap::writeXMLHeader()]\t\t\t ";
0314 std::stringstream fullPath;
0315 fullPath << path << "/Pixel_PortCardMap_" << PixelTimeFormatter::getmSecTime() << ".xml";
0316 std::cout << __LINE__ << "]\t" << mthn << "Writing to: " << fullPath.str() << std::endl;
0317
0318 outstream->open(fullPath.str().c_str());
0319
0320 *outstream << "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" << std::endl;
0321 *outstream << "<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" << std::endl;
0322 *outstream << " <HEADER>" << std::endl;
0323 *outstream << " <TYPE>" << std::endl;
0324 *outstream << " <EXTENSION_TABLE_NAME>PIXEL_PORTCARD_MAP</EXTENSION_TABLE_NAME>" << std::endl;
0325 *outstream << " <NAME>Pixel Port Card Map</NAME>" << std::endl;
0326 *outstream << " </TYPE>" << std::endl;
0327 *outstream << " <RUN>" << std::endl;
0328 *outstream << " <RUN_TYPE>Pixel Port Card Map</RUN_TYPE>" << std::endl;
0329 *outstream << " <RUN_NUMBER>1</RUN_NUMBER>" << std::endl;
0330 *outstream << " <RUN_BEGIN_TIMESTAMP>" << pos::PixelTimeFormatter::getTime() << "</RUN_BEGIN_TIMESTAMP>"
0331 << std::endl;
0332 *outstream << " <LOCATION>CERN P5</LOCATION>" << std::endl;
0333 *outstream << " </RUN>" << std::endl;
0334 *outstream << " </HEADER>" << std::endl;
0335 *outstream << "" << std::endl;
0336 *outstream << " <DATA_SET>" << std::endl;
0337 *outstream << " <PART>" << std::endl;
0338 *outstream << " <NAME_LABEL>CMS-PIXEL-ROOT</NAME_LABEL>" << std::endl;
0339 *outstream << " <KIND_OF_PART>Detector ROOT</KIND_OF_PART>" << std::endl;
0340 *outstream << " </PART>" << std::endl;
0341 *outstream << " <VERSION>" << version << "</VERSION>" << std::endl;
0342 *outstream << " <COMMENT_DESCRIPTION>" << getComment() << "</COMMENT_DESCRIPTION>" << std::endl;
0343 *outstream << " <CREATED_BY_USER>" << getAuthor() << "</CREATED_BY_USER>" << std::endl;
0344 }
0345
0346
0347 void PixelPortcardMap::writeXML(std::ofstream *outstream, std::ofstream *out1stream, std::ofstream *out2stream) const {
0348 std::string mthn = "[PixelPortcardMap::writeXML()]\t\t\t ";
0349
0350 std::map<PixelChannel, std::pair<std::string, int> >::const_iterator i = map_.begin();
0351 for (; i != map_.end(); ++i) {
0352 *outstream << " <DATA>" << std::endl;
0353 *outstream << " <PORT_CARD>" << i->second.first << "</PORT_CARD>" << std::endl;
0354 *outstream << " <PANEL_NAME>" << i->first.module() << "</PANEL_NAME>" << std::endl;
0355 *outstream << " <TBM_MODE>" << i->first.TBMChannel() << "</TBM_MODE>" << std::endl;
0356 *outstream << " <AOH_CHAN>" << i->second.second << "</AOH_CHAN>" << std::endl;
0357 *outstream << " </DATA>" << std::endl;
0358 }
0359 }
0360
0361
0362 void PixelPortcardMap::writeXMLTrailer(std::ofstream *outstream,
0363 std::ofstream *out1stream,
0364 std::ofstream *out2stream) const {
0365 std::string mthn = "[PixelPortcardMap::writeXMLTrailer()]\t\t\t ";
0366
0367 *outstream << " </DATA_SET>" << std::endl;
0368 *outstream << "</ROOT> " << std::endl;
0369
0370 outstream->close();
0371 }