CMS 3D CMS Logo

EcalTPGWeightIdMapHandler.cc
Go to the documentation of this file.
2 
10 
11 #include<iostream>
12 #include<fstream>
13 
14 
15 #include <ctime>
16 #include <unistd.h>
17 
18 #include <string>
19 #include <cstdio>
20 #include <typeinfo>
21 #include <sstream>
22 
23 
25  : m_name(ps.getUntrackedParameter<std::string>("name","EcalTPGWeightIdMapHandler")) {
26 
27  edm::LogInfo("EcalTPGWeightIdMapHandler") << "EcalTPGWeightIdMap Source handler constructor";
28  m_firstRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("firstRun").c_str()));
29  m_lastRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("lastRun").c_str()));
30  m_sid= ps.getParameter<std::string>("OnlineDBSID");
31  m_user= ps.getParameter<std::string>("OnlineDBUser");
32  m_pass= ps.getParameter<std::string>("OnlineDBPassword");
33  m_locationsource= ps.getParameter<std::string>("LocationSource");
34  m_location=ps.getParameter<std::string>("Location");
35  m_gentag=ps.getParameter<std::string>("GenTag");
36  m_runtype=ps.getParameter<std::string>("RunType");
37  m_file_type = ps.getParameter<std::string>("fileType"); // xml/txt
38  m_file_name = ps.getParameter<std::string>("fileName");
39 
40  edm::LogInfo("EcalTPGWeightIdMapHandler") << m_sid<<"/"<<m_user<<"/"<<m_location<<"/"<<m_gentag;
41 
42 }
43 
45 }
46 
47 
49  if(m_file_type == "txt") {
50  readtxtFile();
51  }
52  else if(m_file_type == "xml") {
53  readxmlFile();
54  }
55  else {
56  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Started GetNewObjects!!!";
57 
58  //check whats already inside of database
59  if (tagInfo().size){
60  //check whats already inside of database
61  edm::LogInfo("got offlineInfo = ");
62  edm::LogInfo("tag name = ") << tagInfo().name;
63  edm::LogInfo("size = ") << tagInfo().size;
64  } else {
65  edm::LogInfo(" First object for this tag ");
66  }
67 
68  unsigned int max_since=0;
69  max_since=static_cast<unsigned int>(tagInfo().lastInterval.first);
70  edm::LogInfo("EcalTPGWeightIdMapHandler") << "max_since : " << max_since;
71  Ref weightIdMap_db = lastPayload();
72 
73  edm::LogInfo("EcalTPGWeightIdMapHandler") << "retrieved last payload ";
74 
75  // here we retrieve all the runs after the last from online DB
76  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Retrieving run list from ONLINE DB ... ";
77 
78  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Making connection...";
80  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Done.";
81 
82  if (!econn)
83  {
84  edm::LogInfo(" connection parameters ") <<m_sid <<"/"<<m_user;
85  // cerr << e.what() << std::endl;
86  throw cms::Exception("OMDS not available");
87  }
88 
89 
90  LocationDef my_locdef;
91  my_locdef.setLocation(m_location);
92 
93  RunTypeDef my_rundef;
94  my_rundef.setRunType(m_runtype);
95 
96  RunTag my_runtag;
97  my_runtag.setLocationDef( my_locdef );
98  my_runtag.setRunTypeDef( my_rundef );
99  my_runtag.setGeneralTag(m_gentag);
100 
101  readFromFile("last_tpg_weightIdMap_settings.txt");
102 
103 
104  unsigned int min_run=m_i_run_number+1;
105 
107  min_run=m_i_run_number+1;
108  } else {
109  min_run=m_firstRun;
110  }
111 
112  if(min_run<max_since) {
113  min_run=max_since+1; // we have to add 1 to the last transferred one
114  }
115 
116  edm::LogInfo("m_i_run_number")<< m_i_run_number <<"m_firstRun "<<m_firstRun<< "max_since " <<max_since;
117 
118  unsigned int max_run=m_lastRun;
119  edm::LogInfo("EcalTPGWeightIdMapHandler") << "min_run= " << min_run << "max_run= " << max_run;
120 
121  RunList my_list;
122  my_list=econn->fetchGlobalRunListByLocation(my_runtag, min_run, max_run, my_locdef);
123  // my_list=econn->fetchRunListByLocation(my_runtag,min_run,max_run,my_locdef);
124 
125  std::vector<RunIOV> run_vec= my_list.getRuns();
126  size_t num_runs=run_vec.size();
127  edm::LogInfo("EcalTPGWeightIdMapHandler") << "number of Mon runs is : "<< num_runs;
128 
129  unsigned int irun;
130  if(num_runs>0){
131  for(size_t kr=0; kr<run_vec.size(); kr++){
132 
133  irun=static_cast<unsigned int>(run_vec[kr].getRunNumber());
134 
135  edm::LogInfo(" run= ")<<irun;
136 
137  // retrieve the data :
138  std::map<EcalLogicID, RunTPGConfigDat> dataset;
139  econn->fetchDataSet(&dataset, &run_vec[kr]);
140 
141  std::string the_config_tag="";
142  int the_config_version=0;
143 
144  std::map< EcalLogicID, RunTPGConfigDat>::const_iterator it;
145 
146  int nr=0;
147  for( it=dataset.begin(); it!=dataset.end(); it++ )
148  {
149  ++nr;
150  //EcalLogicID ecalid = it->first;
151  RunTPGConfigDat dat = it->second;
152  the_config_tag=dat.getConfigTag();
153  the_config_version=dat.getVersion();
154  }
155 
156 
157  // it is all the same for all SM... get the last one
158 
159 
160  edm::LogInfo(" run= ")<<irun<<" tag "<<the_config_tag<<" version="<<the_config_version;
161 
162  // here we should check if it is the same as previous run.
163 
164 
165  if((the_config_tag != m_i_tag || the_config_version != m_i_version ) && nr>0 ) {
166  edm::LogInfo("the tag is different from last transferred run ... retrieving last config set from DB");
167 
168  FEConfigMainInfo fe_main_info;
169  fe_main_info.setConfigTag(the_config_tag);
170  fe_main_info.setVersion(the_config_version);
171 
172  try{
173  econn-> fetchConfigSet(&fe_main_info);
174 
175 
176  // now get TPGWeightIdMap
177  int weightId=fe_main_info.getWeiId();
178 
179  if( weightId != m_i_weightIdMap ) {
180 
181  FEConfigWeightInfo fe_weight_info;
182  fe_weight_info.setId(weightId);
183  econn-> fetchConfigSet(&fe_weight_info);
184  std::map<EcalLogicID, FEConfigWeightGroupDat> dataset_TpgWeight;
185  econn->fetchDataSet(&dataset_TpgWeight, &fe_weight_info);
186  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Got object!";
187  EcalTPGWeightIdMap* weightMap = new EcalTPGWeightIdMap;
188  typedef std::map<EcalLogicID, FEConfigWeightGroupDat>::const_iterator CIfeweight;
189  EcalLogicID ecid_xt;
191 
192  int igroups=0;
193  for (CIfeweight p = dataset_TpgWeight.begin(); p != dataset_TpgWeight.end(); p++) {
194 
195  rd_w = p->second;
196  // EB and EE data
197  EcalTPGWeights w;
198  unsigned int weight0 = static_cast<unsigned int>(rd_w.getWeight4());
199  unsigned int weight1 = static_cast<unsigned int>(rd_w.getWeight3());
200  unsigned int weight2 = static_cast<unsigned int>(rd_w.getWeight2());
201  unsigned int weight3 = static_cast<unsigned int>(rd_w.getWeight1()- 0x80);
202  unsigned int weight4 = static_cast<unsigned int>(rd_w.getWeight0());
203 
204  w.setValues(weight0,weight1,weight2,weight3,weight4);
205  weightMap->setValue(rd_w.getWeightGroupId(),w);
206 
207  ++igroups;
208  }
209 
210  edm::LogInfo("EcalTPGWeightIdMapHandler") << "found " << igroups << "Weight groups";
211 
212  Time_t snc= (Time_t) irun;
213  m_to_transfer.push_back(std::make_pair((EcalTPGWeightIdMap*)weightMap,snc));
214 
215  m_i_run_number=irun;
216  m_i_tag=the_config_tag;
217  m_i_version=the_config_version;
218  m_i_weightIdMap=weightId;
219 
220  writeFile("last_tpg_weightIdMap_settings.txt");
221 
222  } else {
223 
224  m_i_run_number=irun;
225  m_i_tag=the_config_tag;
226  m_i_version=the_config_version;
227 
228  writeFile("last_tpg_weightIdMap_settings.txt");
229 
230  edm::LogInfo(" even if the tag/version is not the same, the weightIdMap id is the same -> no transfer needed ");
231 
232  }
233 
234  } catch (std::exception &e) {
235  edm::LogInfo("ERROR: THIS CONFIG DOES NOT EXIST: tag=") <<the_config_tag
236  <<" version="<<the_config_version;
237  edm::LogInfo("error")<<e.what();
238  m_i_run_number=irun;
239 
240  }
241 
242  } else if(nr==0) {
243  m_i_run_number=irun;
244  edm::LogInfo( " no tag saved to RUN_TPGCONFIG_DAT by EcalSupervisor, no transfer needed ");
245  } else {
246  m_i_run_number=irun;
247  m_i_tag=the_config_tag;
248  m_i_version=the_config_version;
249  edm::LogInfo(" the tag/version is the same, no transfer needed ");
250  writeFile("last_tpg_weightIdMap_settings.txt");
251  }
252 
253  }
254  }
255 
256  delete econn;
257  } // usual way
258  edm::LogInfo("EcalTPGWeightIdMapHandler") << "Ecal - > end of getNewObjects -----------";
259 }
261  edm::LogInfo(" reading the input file ") << m_file_name;
262  std::ifstream fInput;
263  fInput.open(m_file_name);
264  if(!fInput.is_open()) {
265  edm::LogInfo("ERROR : cannot open file ") << m_file_name;
266  exit (1);
267  }
268  unsigned int wloc[5];
269  EcalTPGWeights w;
270  EcalTPGWeightIdMap* weightMap = new EcalTPGWeightIdMap;
271  int igroups = 0;
272  for (int ifirst = 0; ifirst < 2; ifirst++) {
273  for (int isecond = 0; isecond < 5; isecond++)
274  fInput >> wloc[isecond];
275  w.setValues(wloc[0], wloc[1], wloc[2], wloc[3], wloc[4]);
276  weightMap->setValue(igroups, w);
277  igroups++;
278  }
279  edm::LogInfo("EcalTPGWeightIdMapHandler") << "found " << igroups << "Weight groups";
280  try{
281  Time_t snc= (Time_t) m_firstRun;
282  m_to_transfer.push_back(std::make_pair((EcalTPGWeightIdMap*)weightMap, snc));
283  } catch (std::exception &e) {
284  edm::LogInfo("EcalTPGWeightIdMapHandler::readtxtFile error : ") << e.what() << std::endl;
285  }
286 }
287 
289  edm::LogInfo(" reading the input file ") << m_file_name;
290  std::ifstream fxml;
291  fxml.open(m_file_name);
292  if(!fxml.is_open()) {
293  edm::LogInfo("ERROR : cannot open file ") << m_file_name;
294  exit (1);
295  }
296  std::string dummyLine, bid;
297  unsigned int wloc[5];
298  EcalTPGWeights w;
299  EcalTPGWeightIdMap* weightMap = new EcalTPGWeightIdMap;
300  int ngroups, igroups;
301  edm::LogInfo("EcalTPGWeightIdMapHandler") << "found " << igroups << "Weight groups";
302  for(int i = 0; i < 5; i++) std::getline(fxml, dummyLine); // skip first lines
303  fxml >> bid;
304  std::string stt = bid.substr(7, 1);
305  std::istringstream sc(stt);
306  sc >> ngroups;
307  if(ngroups != 2) {
308  edm::LogInfo(" line : ") << bid << " ngroups " << ngroups;
309  exit(-1);
310  }
311  for(int i = 0; i < 3; i++) std::getline(fxml, dummyLine);
312  fxml >> bid;
313  stt = bid.substr(7, 1);
314  std::istringstream sg1(stt);
315  sg1 >> igroups;
316  if(igroups != 0) {
317  edm::LogInfo(" group 1: ") << bid << " igroups " << igroups;
318  exit(-1);
319  }
320  for(int i = 0; i < 2; i++) std::getline(fxml, dummyLine);
321  for(int i = 0; i < 5; i++) {
322  fxml >> bid;
323  std::size_t found = bid.find("</");
324  stt = bid.substr(5, found - 5);
325  std::istringstream w(stt);
326  w >> wloc[i];
327  }
328  w.setValues(wloc[0], wloc[1], wloc[2], wloc[3], wloc[4]);
329  weightMap->setValue(igroups, w);
330  // second group
331  for(int i = 0; i < 4; i++) std::getline(fxml, dummyLine);
332  fxml >> bid;
333  stt = bid.substr(7, 1);
334  std::istringstream sg2(stt);
335  sg2 >> igroups;
336  if(igroups != 1) {
337  edm::LogInfo(" group 2 : ") << bid << " igroups " << igroups;
338  exit(-1);
339  }
340  for(int i = 0; i < 2; i++) std::getline(fxml, dummyLine);
341  for(int i = 0; i < 5; i++) {
342  fxml >> bid;
343  std::size_t found = bid.find("</");
344  stt = bid.substr(5, found - 5);
345  std::istringstream w(stt);
346  w >> wloc[i];
347  }
348  w.setValues(wloc[0], wloc[1], wloc[2], wloc[3], wloc[4]);
349  weightMap->setValue(igroups, w);
350  try{
351  Time_t snc= (Time_t) m_firstRun;
352  m_to_transfer.push_back(std::make_pair((EcalTPGWeightIdMap*)weightMap, snc));
353  } catch (std::exception &e) {
354  edm::LogInfo("EcalTPGWeightIdMapHandler::readxmlFile error : ") << e.what();
355  }
356 }
357 
359  //-------------------------------------------------------------
360 
361  m_i_tag="";
362  m_i_version=0;
363  m_i_run_number=0;
364  m_i_weightIdMap=0;
365 
366  FILE *inpFile; // input file
367  inpFile = fopen(inputFile,"r");
368  if(!inpFile) {
369  edm::LogError("EcalTPGWeightIdMapHandler")<<"*** Can not open file: "<<inputFile;
370  return;
371  }
372 
373  char line[256];
374 
375  std::ostringstream str;
376 
377  fgets(line,255,inpFile);
378  m_i_tag=to_string(line);
379  str << "gen tag " << m_i_tag << std::endl ; // should I use this?
380 
381  fgets(line,255,inpFile);
382  m_i_version=atoi(line);
383  str << "version= " << m_i_version << std::endl ;
384 
385  fgets(line,255,inpFile);
386  m_i_run_number=atoi(line);
387  str << "run_number= " << m_i_run_number << std::endl ;
388 
389  fgets(line,255,inpFile);
390  m_i_weightIdMap=atoi(line);
391  str << "weightIdMap_config= " << m_i_weightIdMap << std::endl ;
392 
393 
394  fclose(inpFile); // close inp. file
395 
396 }
397 
399  //-------------------------------------------------------------
400 
401 
402  std::ofstream myfile;
403  myfile.open (inputFile);
404  myfile << m_i_tag <<std::endl;
405  myfile << m_i_version <<std::endl;
406  myfile << m_i_run_number <<std::endl;
407  myfile << m_i_weightIdMap <<std::endl;
408 
409  myfile.close();
410 
411 }
size
Write out results.
T getParameter(std::string const &) const
void setRunTypeDef(const RunTypeDef &runTypeDef)
Definition: RunTag.cc:70
std::vector< RunIOV > getRuns()
Definition: RunList.cc:35
RunList fetchGlobalRunListByLocation(const RunTag &tag, int min_run, int max_run, const LocationDef &locDef) noexcept(false)
std::string getConfigTag() const
const double w
Definition: UKUtility.cc:23
int getVersion() const
Definition: RunTag.h:13
size_t size
Definition: Types.h:77
void setVersion(int id)
void fetchDataSet(std::map< EcalLogicID, DATT > *fillMap, IOVT *iov) noexcept(false)
std::string name
Definition: Types.h:73
cond::ValidityInterval lastInterval
Definition: Types.h:75
int getWeiId() const
void setLocationDef(const LocationDef &locDef)
Definition: RunTag.cc:53
void setValue(const uint32_t &id, const EcalTPGWeights &value)
EcalTPGWeightIdMapHandler(edm::ParameterSet const &)
void setRunType(std::string runtype)
Definition: RunTypeDef.cc:33
void setConfigTag(std::string x)
Definition: IODConfig.h:31
void setLocation(std::string loc)
Definition: LocationDef.cc:33
void setGeneralTag(std::string tag)
Definition: RunTag.cc:36
void setValues(const uint32_t &w0, const uint32_t &w1, const uint32_t &w2, const uint32_t &w3, const uint32_t &w4)
#define str(s)