CMS 3D CMS Logo

PixelFEDConfig.cc
Go to the documentation of this file.
1 //
2 // This class stores the information about a FED.
3 // This include the number, crate, and base address
4 //
5 //
6 
9 #include <fstream>
10 #include <iostream>
11 #include <map>
12 #include <cassert>
13 #include <stdexcept>
14 
15 using namespace pos;
16 using namespace std;
17 
18 PixelFEDConfig::PixelFEDConfig(std::vector<std::vector<std::string> >& tableMat ) : PixelConfigBase(" "," "," "){
19 
20  std::string mthn = "[PixelFEDConfig::PixelFEDConfig()]\t\t\t " ;
21 
22  std::vector< std::string > ins = tableMat[0];
23  std::map<std::string , int > colM;
24  std::vector<std::string > colNames;
25 /*
26  EXTENSION_TABLE_NAME: FED_CRATE_CONFIG (VIEW: CONF_KEY_FED_CRATE_CONFIGV)
27 
28  CONFIG_KEY NOT NULL VARCHAR2(80)
29  KEY_TYPE NOT NULL VARCHAR2(80)
30  KEY_ALIAS NOT NULL VARCHAR2(80)
31  VERSION VARCHAR2(40)
32  KIND_OF_COND NOT NULL VARCHAR2(40)
33  PIXEL_FED NOT NULL NUMBER(38)
34  CRATE_NUMBER NOT NULL NUMBER(38)
35  VME_ADDR NOT NULL VARCHAR2(200)
36 */
37 
38  colNames.push_back("CONFIG_KEY" );
39  colNames.push_back("KEY_TYPE" );
40  colNames.push_back("KEY_ALIAS" );
41  colNames.push_back("VERSION" );
42  colNames.push_back("KIND_OF_COND" );
43  colNames.push_back("PIXEL_FED" );
44  colNames.push_back("CRATE_NUMBER" );
45  colNames.push_back("VME_ADDR" );
46 /*
47  colNames.push_back("PIXEL_FED" ); //0
48  colNames.push_back("CRATE_NUMBER" ); //1
49  colNames.push_back("VME_ADDRS_HEX"); //2
50 */
51  for(unsigned int c = 0 ; c < tableMat[0].size() ; c++)
52  {
53  for(unsigned int n=0; n<colNames.size(); n++)
54  {
55  if(tableMat[0][c] == colNames[n])
56  {
57  colM[colNames[n]] = c;
58  break;
59  }
60  }
61  }//end for
62  /*
63  for(unsigned int n=0; n<colNames.size(); n++)
64  {
65  if(colM.find(colNames[n]) == colM.end())
66  {
67  std::cerr << __LINE__ << "]\t" << mthn << "Couldn't find in the database the column with name " << colNames[n] << std::endl;
68  assert(0);
69  }
70  }
71  */
72 
73  std::string fedname = "";
74  unsigned int fednum = 0;
75  fedconfig_.clear();
76  bool flag = false;
77  for(unsigned int r = 1 ; r < tableMat.size() ; r++){ //Goes to every row of the Matrix
78 
79  fedname = tableMat[r][colM["PIXEL_FED"]]; //This is not going to work if you change in the database "PxlFed_#" in the FED column.Im removing "PlxFed_" and store the number
80  //becuase the PixelFecConfig class ask for the fec number not the name.
81  // 01234567
82  // PxlFED_XX
83 // fedname.erase(0,7);
84  fednum = (unsigned int)atoi(fedname.c_str()) ;
85 
86  if(fedconfig_.empty())
87  {
89  unsigned int vme_base_address = 0 ;
90  vme_base_address = strtoul(tableMat[r][colM["VME_ADDR"]].c_str(), nullptr, 16);
91 // string hexVMEAddr = tableMat[r][colM["VME_ADDRS_HEX"]] ;
92 // sscanf(hexVMEAddr.c_str(), "%x", &vme_base_address) ;
93  tmp.setFEDParameters( fednum, (unsigned int)atoi(tableMat[r][colM["CRATE_NUMBER"]].c_str()) ,
94  vme_base_address);
95  fedconfig_.push_back(tmp);
96  }
97  else
98  {
99  for( unsigned int y = 0; y < fedconfig_.size() ; y++)
100  {
101  if (fedconfig_[y].getFEDNumber() == fednum) // This is to check if there are Pixel Feds already in the vector because
102  { // in the view of the database that I'm reading there are many repeated entries (AS FAR AS THESE PARAMS ARE CONCERNED).
103  flag = true; // This ensure that there are no objects in the fedconfig vector with repeated values.
104  break;
105  }
106  else flag = false;
107  }
108 
109  if(flag == false)
110  {
112  tmp.setFEDParameters( fednum, (unsigned int)atoi(tableMat[r][colM["CRATE_NUMBER"]].c_str()) ,
113  (unsigned int)strtoul(tableMat[r][colM["VME_ADDR"]].c_str(), nullptr, 16));
114  fedconfig_.push_back(tmp);
115  }
116  }//end else
117  }//end for r
118 /*
119  std::cout << __LINE__ << "]\t" << mthn << std::endl;
120 
121  for( unsigned int x = 0 ; x < fedconfig_.size() ; x++)
122  {
123  std::cout<< __LINE__ << "]\t" << mthn << fedconfig_[x] << std::endl;
124  }
125 
126  std::cout<< __LINE__ << "]\t" << mthn << fedconfig_.size() << std::endl;
127 */
128 }//end Constructor
129 
130 
131 
132 //*****************************************************************************************************
133 
134 
135 
136 
138  PixelConfigBase(" "," "," "){
139 
140  std::string mthn = "[PixelFEDConfig::PixelFEDConfig()]\t\t\t " ;
141  std::ifstream in(filename.c_str());
142 
143  if (!in.good()){
144  std::cout << __LINE__ << "]\t" << mthn << "Could not open: " << filename.c_str() << std::endl;
145  throw std::runtime_error("Failed to open file "+filename);
146  }
147  else {
148  std::cout << __LINE__ << "]\t" << mthn << "Opened: " << filename.c_str() << std::endl;
149  }
150 
152 
153  in >> dummy;
154  in >> dummy;
155  in >> dummy;
156  in >> dummy;
157  in >> dummy;
158  in >> dummy;
159 
160  do {
161 
162  unsigned int fednumber;
163  unsigned int crate;
164  unsigned int vme_base_address;
165 
166  in >> fednumber >> crate >> std::hex >> vme_base_address >> std::dec;
167 
168  if (!in.eof() ){
169  // std::cout << __LINE__ << "]\t" << mthn << std::dec << fednumber <<" "<< crate << " 0x"
170  // << std::hex << vme_base_address<<std::dec<<std::endl;
172 
173  tmp.setFEDParameters(fednumber , crate , vme_base_address);
174 
175  fedconfig_.push_back(tmp);
176  }
177 
178  }
179  while (!in.eof());
180  in.close();
181 
182  }
183 
184 //std::ostream& operator<<(std::ostream& s, const PixelFEDConfig& table){
185 
186 //for (unsigned int i=0;i<table.translationtable_.size();i++){
187 // s << table.translationtable_[i]<<std::endl;
188 // }
189 // return s;
190 
191 //}
192 
194 
196 
197  std::string mthn = "[PixelFEDConfig::writeASCII()]\t\t\t\t " ;
198  if (dir!="") dir+="/";
199  string filename=dir+"fedconfig.dat";
200 
201  ofstream out(filename.c_str());
202  if(!out.good()){
203  cout << __LINE__ << "]\t" << mthn << "Could not open file: " << filename << endl;
204  assert(0);
205  }
206 
207  out <<" #FED number crate vme base address" <<endl;
208  for(unsigned int i=0;i<fedconfig_.size();i++){
209  out << fedconfig_[i].getFEDNumber()<<" "
210  << fedconfig_[i].getCrate()<<" "
211  << "0x"<<hex<<fedconfig_[i].getVMEBaseAddress()<<dec<<endl;
212  }
213  out.close();
214 }
215 
216 
217 unsigned int PixelFEDConfig::getNFEDBoards() const{
218 
219  return fedconfig_.size();
220 
221 }
222 
223 unsigned int PixelFEDConfig::getFEDNumber(unsigned int i) const{
224 
225  assert(i<fedconfig_.size());
226  return fedconfig_[i].getFEDNumber();
227 
228 }
229 
230 
231 unsigned int PixelFEDConfig::getCrate(unsigned int i) const{
232 
233  assert(i<fedconfig_.size());
234  return fedconfig_[i].getCrate();
235 
236 }
237 
238 
239 unsigned int PixelFEDConfig::getVMEBaseAddress(unsigned int i) const{
240 
241  assert(i<fedconfig_.size());
242  return fedconfig_[i].getVMEBaseAddress();
243 
244 }
245 
246 
247 unsigned int PixelFEDConfig::crateFromFEDNumber(unsigned int fednumber) const{
248 
249 
250  std::string mthn = "[PixelFEDConfig::crateFromFEDNumber()]\t\t\t " ;
251  for(unsigned int i=0;i<fedconfig_.size();i++){
252  if (fedconfig_[i].getFEDNumber()==fednumber) return fedconfig_[i].getCrate();
253  }
254 
255  std::cout << __LINE__ << "]\t" << mthn << "Could not find FED number: " << fednumber << std::endl;
256 
257  assert(0);
258 
259  return 0;
260 
261 }
262 
263 
264 unsigned int PixelFEDConfig::VMEBaseAddressFromFEDNumber(unsigned int fednumber) const{
265 
266  std::string mthn = "[PixelFEDConfig::VMEBaseAddressFromFEDNumber()]\t\t " ;
267  for(unsigned int i=0;i<fedconfig_.size();i++){
268  if (fedconfig_[i].getFEDNumber()==fednumber) return fedconfig_[i].getVMEBaseAddress();
269  }
270 
271  std::cout << __LINE__ << "]\t" << mthn << "Could not find FED number: " << fednumber << std::endl;
272 
273  assert(0);
274 
275  return 0;
276 
277 }
278 
279 unsigned int PixelFEDConfig::FEDNumberFromCrateAndVMEBaseAddress(unsigned int crate, unsigned int vmebaseaddress) const {
280 
281  std::string mthn = "[PixelFEDConfig::FEDNumberFromCrateAndVMEBaseAddress()]\t " ;
282  for(unsigned int i=0;i<fedconfig_.size();i++){
283  if (fedconfig_[i].getCrate()==crate&&
284  fedconfig_[i].getVMEBaseAddress()==vmebaseaddress) return fedconfig_[i].getFEDNumber();
285  }
286 
287  std::cout << __LINE__ << "]\t" << mthn << "Could not find FED crate and address: "<< crate << ", " << vmebaseaddress << std::endl;
288 
289  assert(0);
290 
291  return 0;
292 
293 }
294 
295 //=============================================================================================
297  int version,
298  std::string path,
299  std::ofstream *outstream,
300  std::ofstream *out1stream,
301  std::ofstream *out2stream) const
302 {
303  std::string mthn = "[PixelFEDConfig::::writeXMLHeader()]\t\t\t " ;
304  std::stringstream fullPath ;
305  fullPath << path << "/Pixel_FedCrateConfig_" << PixelTimeFormatter::getmSecTime() << ".xml" ;
306  cout << __LINE__ << "]\t" << mthn << "Writing to: " << fullPath.str() << endl ;
307 
308  outstream->open(fullPath.str().c_str()) ;
309  *outstream << "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" << endl ;
310  *outstream << "<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" << endl ;
311  *outstream << " <HEADER>" << endl ;
312  *outstream << " <TYPE>" << endl ;
313  *outstream << " <EXTENSION_TABLE_NAME>FED_CRATE_CONFIG</EXTENSION_TABLE_NAME>" << endl ;
314  *outstream << " <NAME>Pixel FED Crate Configuration</NAME>" << endl ;
315  *outstream << " </TYPE>" << endl ;
316  *outstream << " <RUN>" << endl ;
317  *outstream << " <RUN_NAME>Pixel FED Crate Configuration</RUN_NAME>" << endl ;
318  *outstream << " <RUN_BEGIN_TIMESTAMP>" << pos::PixelTimeFormatter::getTime() << "</RUN_BEGIN_TIMESTAMP>" << endl ;
319  *outstream << " <LOCATION>CERN P5</LOCATION>" << endl ;
320  *outstream << " </RUN>" << endl ;
321  *outstream << " </HEADER>" << endl ;
322  *outstream << " " << endl ;
323  *outstream << " <DATA_SET>" << endl ;
324  *outstream << " <PART>" << endl ;
325  *outstream << " <NAME_LABEL>CMS-PIXEL-ROOT</NAME_LABEL>" << endl ;
326  *outstream << " <KIND_OF_PART>Detector ROOT</KIND_OF_PART>" << endl ;
327  *outstream << " </PART>" << endl ;
328  *outstream << " <VERSION>" << version << "</VERSION>" << endl ;
329  *outstream << " <COMMENT_DESCRIPTION>" << getComment() << "</COMMENT_DESCRIPTION>" << endl ;
330  *outstream << " <CREATED_BY_USER>" << getAuthor() << "</CREATED_BY_USER>" << endl ;
331  *outstream << " " << endl ;
332 }
333 
334 //=============================================================================================
335 void PixelFEDConfig::writeXML(std::ofstream *outstream,
336  std::ofstream *out1stream,
337  std::ofstream *out2stream) const
338 {
339  std::string mthn = "[PixelFEDConfig::writeXML()]\t\t\t " ;
340 
341  for(unsigned int i=0;i<fedconfig_.size();i++){
342  *outstream << " <DATA>" << endl ;
343  *outstream << " <PIXEL_FED>" << fedconfig_[i].getFEDNumber() << "</PIXEL_FED>" << endl ;
344  *outstream << " <CRATE_NUMBER>" << fedconfig_[i].getCrate() << "</CRATE_NUMBER>" << endl ;
345  *outstream << " <VME_ADDR>" << "0x" << hex << fedconfig_[i].getVMEBaseAddress() << dec << "</VME_ADDR>" << endl ;
346  *outstream << " </DATA>" << endl ;
347  *outstream << "" << endl ;
348  }
349 
350 }
351 
352 //=============================================================================================
353 void PixelFEDConfig::writeXMLTrailer(std::ofstream *outstream,
354  std::ofstream *out1stream,
355  std::ofstream *out2stream) const
356 {
357  std::string mthn = "[PixelFEDConfig::writeXMLTrailer()]\t\t\t " ;
358 
359  *outstream << " </DATA_SET>" << endl ;
360  *outstream << "</ROOT> " << endl ;
361 
362  outstream->close() ;
363 }
void setFEDParameters(unsigned int fednumber, unsigned int crate, unsigned int vmebaseaddress)
unsigned int FEDNumberFromCrateAndVMEBaseAddress(unsigned int crate, unsigned int vmebaseaddress) const
This file contains the base class for "pixel configuration data" management.
unsigned int crateFromFEDNumber(unsigned int fednumber) const
unsigned int VMEBaseAddressFromFEDNumber(unsigned int fednumber) const
std::vector< PixelFEDParameters > fedconfig_
unsigned int getFEDNumber(unsigned int i) const
ins
Definition: cuy.py:313
static std::string getmSecTime(void)
unsigned int getCrate(unsigned int i) const
static std::string getTime(void)
This class implements..
std::string getComment() const
This class provides utility methods to manipulate ASCII formatted timestamps.
unsigned int getVMEBaseAddress(unsigned int i) const
std::string getAuthor() const
unsigned int getNFEDBoards() const
void writeXMLTrailer(std::ofstream *out, std::ofstream *out1=nullptr, std::ofstream *out2=nullptr) const override
~PixelFEDConfig() override
This class implements..
This class implements..
void writeXMLHeader(pos::PixelConfigKey key, int version, std::string path, std::ofstream *out, std::ofstream *out1=nullptr, std::ofstream *out2=nullptr) const override
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
void writeXML(pos::PixelConfigKey key, int version, std::string path) const override
PixelFEDConfig(std::string filename)
void writeASCII(std::string dir) const override
dbl *** dir
Definition: mlp_gen.cc:35