Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <sstream>
00013 #include "CalibFormats/SiPixelObjects/interface/PixelModuleName.h"
00014 #include "CalibFormats/SiPixelObjects/interface/PixelMaskAllPixels.h"
00015 #include "CalibFormats/SiPixelObjects/interface/PixelTimeFormatter.h"
00016 #include "CalibFormats/SiPixelObjects/interface/PixelBase64.h"
00017 #include <fstream>
00018 #include <map>
00019 #include <iostream>
00020 #include <assert.h>
00021 #include <stdexcept>
00022
00023 using namespace pos;
00024 using namespace std;
00025
00026
00027 PixelMaskAllPixels::PixelMaskAllPixels(std::vector< std::vector<std::string> >& tableMat) : PixelMaskBase("","","")
00028 {
00029 std::string mthn = "[PixelMaskAllPixels::PixelMaskAllPixels()]\t\t " ;
00030
00031
00032 std::vector< std::string > ins = tableMat[0];
00033 std::map<std::string , int > colM;
00034 std::vector<std::string > colNames;
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 colNames.push_back("CONFIG_KEY" );
00048 colNames.push_back("KEY_TYPE" );
00049 colNames.push_back("KEY_ALIAS" );
00050 colNames.push_back("VERSION" );
00051 colNames.push_back("KIND_OF_COND");
00052 colNames.push_back("ROC_NAME" );
00053 colNames.push_back("KILL_MASK" );
00054
00055 for(unsigned int c = 0 ; c < ins.size() ; c++)
00056 {
00057 for(unsigned int n=0; n<colNames.size(); n++)
00058 {
00059 if(tableMat[0][c] == colNames[n])
00060 {
00061 colM[colNames[n]] = c;
00062 break;
00063 }
00064 }
00065 }
00066 for(unsigned int n=0; n<colNames.size(); n++)
00067 {
00068 if(colM.find(colNames[n]) == colM.end())
00069 {
00070 std::cerr << mthn << "Couldn't find in the database the column with name " << colNames[n] << std::endl;
00071 assert(0);
00072 }
00073 }
00074 maskbits_.clear() ;
00075 for(unsigned int r = 1 ; r < tableMat.size() ; r++){
00076 std::string currentRocName = tableMat[r][colM["ROC_NAME"]] ;
00077 PixelROCName rocid(currentRocName);
00078 PixelROCMaskBits tmp;
00079 tmp.read(rocid,base64_decode(tableMat[r][colM["KILL_MASK"]])) ;
00080 maskbits_.push_back(tmp);
00081 }
00082 }
00083
00084
00085
00086 PixelMaskAllPixels::PixelMaskAllPixels():PixelMaskBase("","",""){;}
00087
00088
00089 void PixelMaskAllPixels::addROCMaskBits(PixelROCMaskBits bits)
00090 {
00091 maskbits_.push_back(bits);
00092 }
00093
00094
00095 PixelMaskAllPixels::PixelMaskAllPixels(std::string filename):
00096 PixelMaskBase("","",""){
00097
00098 std::string mthn = "[PixelMaskAllPixels::PixelMaskAllPixels()]\t\t " ;
00099
00100 if (filename[filename.size()-1]=='t'){
00101
00102
00103 std::ifstream in(filename.c_str());
00104
00105 if (!in.good()){
00106 std::cout << __LINE__ << "]\t" << mthn << "Could not open: " << filename << std::endl;
00107 throw std::runtime_error("Failed to open file "+filename);
00108 }
00109
00110 std::string tag;
00111 in >> tag;
00112
00113 maskbits_.clear();
00114
00115 while (!in.eof()) {
00116
00117 PixelROCName rocid(in);
00118
00119 PixelROCMaskBits tmp;
00120
00121 tmp.read(rocid,in);
00122
00123 maskbits_.push_back(tmp);
00124
00125 in >> tag;
00126
00127 }
00128
00129 in.close();
00130
00131 }
00132 else{
00133
00134 std::ifstream in(filename.c_str(),std::ios::binary);
00135
00136 char nchar;
00137
00138 in.read(&nchar,1);
00139
00140
00141
00142 std::string s1;
00143
00144
00145 for(int i=0;i< nchar; i++){
00146 char c;
00147 in >>c;
00148 s1.push_back(c);
00149 }
00150
00151
00152
00153 maskbits_.clear();
00154
00155
00156 while (!in.eof()){
00157
00158
00159
00160 PixelROCName rocid(s1);
00161
00162
00163
00164 PixelROCMaskBits tmp;
00165
00166 tmp.readBinary(rocid, in);
00167
00168 maskbits_.push_back(tmp);
00169
00170
00171 in.read(&nchar,1);
00172
00173 s1.clear();
00174
00175 if (in.eof()) continue;
00176
00177
00178
00179
00180 for(int i=0;i< nchar; i++){
00181 char c;
00182 in >>c;
00183
00184 s1.push_back(c);
00185 }
00186
00187
00188
00189 }
00190
00191 in.close();
00192
00193
00194
00195 }
00196
00197
00198
00199
00200 }
00201
00202
00203 const PixelROCMaskBits& PixelMaskAllPixels::getMaskBits(int ROCId) const {
00204
00205 return maskbits_[ROCId];
00206
00207 }
00208
00209
00210 PixelROCMaskBits* PixelMaskAllPixels::getMaskBits(PixelROCName name) {
00211
00212 for(unsigned int i=0;i<maskbits_.size();i++){
00213 if (maskbits_[i].name()==name) return &(maskbits_[i]);
00214 }
00215
00216 return 0;
00217
00218 }
00219
00220
00221 void PixelMaskAllPixels::writeBinary(std::string filename) const{
00222
00223
00224 std::ofstream out(filename.c_str(),std::ios::binary);
00225
00226 for(unsigned int i=0;i<maskbits_.size();i++){
00227 maskbits_[i].writeBinary(out);
00228 }
00229
00230
00231 }
00232
00233
00234 void PixelMaskAllPixels::writeASCII(std::string dir) const{
00235
00236 if (dir!="") dir+="/";
00237 PixelModuleName module(maskbits_[0].name().rocname());
00238 std::string filename=dir+"ROC_Masks_module_"+module.modulename()+".dat";
00239
00240 std::ofstream out(filename.c_str());
00241
00242 for(unsigned int i=0;i<maskbits_.size();i++){
00243 maskbits_[i].writeASCII(out);
00244 }
00245
00246
00247 }
00248
00249
00250 void PixelMaskAllPixels::writeXMLHeader(pos::PixelConfigKey key,
00251 int version,
00252 std::string path,
00253 std::ofstream *outstream,
00254 std::ofstream *out1stream,
00255 std::ofstream *out2stream) const
00256 {
00257 std::string mthn = "[PixelMaskAllPixels::writeXMLHeader()]\t\t\t " ;
00258 std::stringstream maskFullPath ;
00259
00260 maskFullPath << path << "/Pixel_RocMasks_" << PixelTimeFormatter::getmSecTime() << ".xml";
00261 std::cout << __LINE__ << "]\t" << mthn << "Writing to: " << maskFullPath.str() << std::endl ;
00262
00263 outstream->open(maskFullPath.str().c_str()) ;
00264
00265 *outstream << "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" << std::endl ;
00266 *outstream << "<ROOT xmlns:xsi='https://www.w3.org/2001/XMLSchema-instance'>" << std::endl ;
00267 *outstream << "" << std::endl ;
00268 *outstream << " <HEADER>" << std::endl ;
00269 *outstream << " <TYPE>" << std::endl ;
00270 *outstream << " <EXTENSION_TABLE_NAME>ROC_MASKS</EXTENSION_TABLE_NAME>" << std::endl ;
00271 *outstream << " <NAME>ROC Mask Bits</NAME>" << std::endl ;
00272 *outstream << " </TYPE>" << std::endl ;
00273 *outstream << " <RUN>" << std::endl ;
00274 *outstream << " <RUN_TYPE>ROC Mask Bits</RUN_TYPE>" << std::endl ;
00275 *outstream << " <RUN_NUMBER>1</RUN_NUMBER>" << std::endl ;
00276 *outstream << " <RUN_BEGIN_TIMESTAMP>" << PixelTimeFormatter::getTime() << "</RUN_BEGIN_TIMESTAMP>" << std::endl ;
00277 *outstream << " <LOCATION>CERN P5</LOCATION>" << std::endl ;
00278 *outstream << " </RUN>" << std::endl ;
00279 *outstream << " </HEADER>" << std::endl ;
00280 *outstream << "" << std::endl ;
00281 *outstream << " <DATA_SET>" << std::endl ;
00282 *outstream << "" << std::endl ;
00283 *outstream << " <VERSION>" << version << "</VERSION>" << std::endl ;
00284 *outstream << " <COMMENT_DESCRIPTION>" << getComment() << "</COMMENT_DESCRIPTION>" << std::endl ;
00285 *outstream << " <CREATED_BY_USER>" << getAuthor() << "</CREATED_BY_USER>" << std::endl ;
00286 *outstream << "" << std::endl ;
00287 *outstream << " <PART>" << std::endl ;
00288 *outstream << " <NAME_LABEL>CMS-PIXEL-ROOT</NAME_LABEL>" << std::endl ;
00289 *outstream << " <KIND_OF_PART>Detector ROOT</KIND_OF_PART>" << std::endl ;
00290 *outstream << " </PART>" << std::endl ;
00291 *outstream << " " << std::endl ;
00292
00293 }
00294
00295 void PixelMaskAllPixels::writeXML( std::ofstream *outstream,
00296 std::ofstream *out1stream,
00297 std::ofstream *out2stream) const
00298 {
00299 std::string mthn = "[PixelMaskAllPixels::writeXML()]\t\t\t " ;
00300
00301 for(unsigned int i=0;i<maskbits_.size();i++){
00302 maskbits_[i].writeXML(outstream);
00303 }
00304 }
00305
00306 void PixelMaskAllPixels::writeXMLTrailer(std::ofstream *outstream,
00307 std::ofstream *out1stream,
00308 std::ofstream *out2stream ) const
00309 {
00310 std::string mthn = "[PixelMaskAllPixels::writeXMLTrailer()]\t\t\t " ;
00311
00312 *outstream << " " << std::endl ;
00313 *outstream << " </DATA_SET>" << std::endl ;
00314 *outstream << "</ROOT>" << std::endl ;
00315
00316 outstream->close() ;
00317 std::cout << __LINE__ << "]\t" << mthn << "Data written " << std::endl ;
00318
00319 }
00320