CMS 3D CMS Logo

EcalTPGPhysicsConstHandler.cc
Go to the documentation of this file.
2 
11 
12 #include <iostream>
13 
15  : m_name(ps.getUntrackedParameter<std::string>("name", "EcalTPGPhysicsConstHandler")) {
16  edm::LogInfo("EcalTPGPhysicsConstHandler") << "EcalTPGPhysicsConst Source handler constructor.";
17  m_firstRun = static_cast<unsigned int>(atoi(ps.getParameter<std::string>("firstRun").c_str()));
18  m_lastRun = static_cast<unsigned int>(atoi(ps.getParameter<std::string>("lastRun").c_str()));
19  m_sid = ps.getParameter<std::string>("OnlineDBSID");
20  m_user = ps.getParameter<std::string>("OnlineDBUser");
21  m_pass = ps.getParameter<std::string>("OnlineDBPassword");
22  m_locationsource = ps.getParameter<std::string>("LocationSource");
23  m_location = ps.getParameter<std::string>("Location");
24  m_gentag = ps.getParameter<std::string>("GenTag");
25  m_runtype = ps.getParameter<std::string>("RunType");
26 
27  edm::LogInfo("EcalTPGPhysicsConstHandler") << m_sid << "/" << m_user << "/" << m_location << "/" << m_gentag;
28 }
29 
31 
33  edm::LogInfo("EcalTPGPhysicsConstHandler") << "Started GetNewObjects!!!";
34 
35  //check whats already inside of database
36  if (tagInfo().size) {
37  //check whats already inside of database
38  std::cout << "got offlineInfo = " << std::endl;
39  std::cout << "tag name = " << tagInfo().name << std::endl;
40  std::cout << "size = " << tagInfo().size << std::endl;
41  } else {
42  std::cout << " First object for this tag " << std::endl;
43  }
44 
45  unsigned int max_since = 0;
46  max_since = static_cast<unsigned int>(tagInfo().lastInterval.since);
47  edm::LogInfo("EcalTPGPhysicsConstHandler") << "max_since : " << max_since;
48  Ref physC_db = lastPayload();
49 
50  edm::LogInfo("EcalTPGPhysicsConstHandler") << "retrieved last payload ";
51 
52  // here we retrieve all the runs after the last from online DB
53  edm::LogInfo("EcalTPGPhysicsConstHandler") << "Retrieving run list from ONLINE DB ... ";
54 
55  edm::LogInfo("EcalTPGPhysicsConstHandler") << "Making connection...";
56  econn = new EcalCondDBInterface(m_sid, m_user, m_pass);
57  edm::LogInfo("EcalTPGPhysicsConstHandler") << "Done.";
58 
59  if (!econn) {
60  std::cout << " connection parameters " << m_sid << "/" << m_user << std::endl;
61  // cerr << e.what() << std::endl;
62  throw cms::Exception("OMDS not available");
63  }
64 
66  my_locdef.setLocation(m_location);
67 
69  my_rundef.setRunType(m_runtype);
70 
71  RunTag my_runtag;
72  my_runtag.setLocationDef(my_locdef);
73  my_runtag.setRunTypeDef(my_rundef);
74  my_runtag.setGeneralTag(m_gentag);
75 
76  readFromFile("last_tpg_physC_settings.txt");
77 
78  unsigned int min_run;
79 
80  if (m_firstRun < m_i_run_number) {
81  min_run = m_i_run_number + 1;
82  } else {
83  min_run = m_firstRun;
84  }
85 
86  std::cout << "m_i_run_number" << m_i_run_number << "m_firstRun " << m_firstRun << "max_since " << max_since
87  << std::endl;
88 
89  if (min_run < max_since) {
90  min_run = max_since + 1; // we have to add 1 to the last transferred one
91  }
92 
93  unsigned int max_run = m_lastRun;
94  edm::LogInfo("EcalTPGPhysicsConstHandler") << "min_run= " << min_run << "max_run= " << max_run;
95 
96  RunList my_list;
97  my_list = econn->fetchGlobalRunListByLocation(my_runtag, min_run, max_run, my_locdef);
98  // my_list=econn->fetchRunListByLocation(my_runtag,min_run,max_run,my_locdef);
99 
100  std::vector<RunIOV> run_vec = my_list.getRuns();
101  size_t num_runs = run_vec.size();
102 
103  std::cout << "number of runs is : " << num_runs << std::endl;
104 
105  unsigned int irun;
106  if (num_runs > 0) {
107  for (size_t kr = 0; kr < run_vec.size(); kr++) {
108  irun = static_cast<unsigned int>(run_vec[kr].getRunNumber());
109 
110  std::cout << " **************** " << std::endl;
111  std::cout << " **************** " << std::endl;
112  std::cout << " run= " << irun << std::endl;
113 
114  // retrieve the data :
115  std::map<EcalLogicID, RunTPGConfigDat> dataset;
116  econn->fetchDataSet(&dataset, &run_vec[kr]);
117 
118  std::string the_config_tag = "";
119  int the_config_version = 0;
120 
121  std::map<EcalLogicID, RunTPGConfigDat>::const_iterator it;
122 
123  int nr = 0;
124  for (it = dataset.begin(); it != dataset.end(); it++) {
125  ++nr;
126  //EcalLogicID ecalid = it->first;
127  RunTPGConfigDat dat = it->second;
128  the_config_tag = dat.getConfigTag();
129  the_config_version = dat.getVersion();
130  }
131 
132  // it is all the same for all SM... get the last one
133 
134  std::cout << " run= " << irun << " tag " << the_config_tag << " version=" << the_config_version << std::endl;
135 
136  // here we should check if it is the same as previous run.
137 
138  if ((the_config_tag != m_i_tag || the_config_version != m_i_version) && nr > 0) {
139  std::cout << "the tag is different from last transferred run ... retrieving last config set from DB"
140  << std::endl;
141 
142  FEConfigMainInfo fe_main_info;
143  fe_main_info.setConfigTag(the_config_tag);
144  fe_main_info.setVersion(the_config_version);
145 
146  try {
147  std::cout << " before fetch config set" << std::endl;
148  econn->fetchConfigSet(&fe_main_info);
149  std::cout << " after fetch config set" << std::endl;
150 
151  // now get TPGPhysicsConst
152  int linId = fe_main_info.getLinId();
153  int fgrId = fe_main_info.getFgrId();
154  int lutId = fe_main_info.getLUTId();
155 
156  if ((linId != m_i_physClin) || (fgrId != m_i_physCfgr) || (lutId != m_i_physClut)) {
157  std::cout << "one of the parameters: linId, LutId or fgrId is different from" << std::endl;
158  std::cout << "last transferred run ..." << std::endl;
159 
160  FEConfigLinInfo fe_physLin_info;
161  FEConfigFgrInfo fe_physFgr_info;
162  FEConfigLUTInfo fe_physLut_info;
163  fe_physLin_info.setId(linId);
164  fe_physFgr_info.setId(fgrId);
165  fe_physLut_info.setId(lutId);
166 
167  econn->fetchConfigSet(&fe_physLin_info);
168  econn->fetchConfigSet(&fe_physFgr_info);
169  econn->fetchConfigSet(&fe_physLut_info);
170  std::map<EcalLogicID, FEConfigLinParamDat> dataset_TpgPhysicsLin;
171  std::map<EcalLogicID, FEConfigLUTParamDat> dataset_TpgPhysicsLut;
172  std::map<EcalLogicID, FEConfigFgrParamDat> dataset_TpgPhysicsFgr;
173 
174  econn->fetchDataSet(&dataset_TpgPhysicsLin, &fe_physLin_info);
175  econn->fetchDataSet(&dataset_TpgPhysicsLut, &fe_physLut_info);
176  econn->fetchDataSet(&dataset_TpgPhysicsFgr, &fe_physFgr_info);
177 
179  typedef std::map<EcalLogicID, FEConfigLinParamDat>::const_iterator CIfeLin;
180  typedef std::map<EcalLogicID, FEConfigLUTParamDat>::const_iterator CIfeLUT;
181  typedef std::map<EcalLogicID, FEConfigFgrParamDat>::const_iterator CIfeFgr;
182 
183  EcalLogicID ecidLin_xt;
184  EcalLogicID ecidLut_xt;
185  EcalLogicID ecidFgr_xt;
186  FEConfigLinParamDat rd_physLin;
187  FEConfigLUTParamDat rd_physLut;
188  FEConfigFgrParamDat rd_physFgr;
189 
190  std::map<int, float> EtSatLinEB;
191  std::map<int, float> EtSatLinEE;
192  typedef std::map<int, float>::const_iterator itEtSat;
193 
194  std::map<int, EcalTPGPhysicsConst::Item> temporaryMapEB;
195  std::map<int, EcalTPGPhysicsConst::Item> temporaryMapEE;
196  typedef std::map<int, EcalTPGPhysicsConst::Item>::iterator iterEB;
197  typedef std::map<int, EcalTPGPhysicsConst::Item>::iterator iterEE;
198 
199  for (CIfeLin p0 = dataset_TpgPhysicsLin.begin(); p0 != dataset_TpgPhysicsLin.end(); p0++) {
200  ecidLin_xt = p0->first;
201  rd_physLin = p0->second;
202 
203  std::string ecid_nameLin = ecidLin_xt.getName();
204 
205  if (ecid_nameLin == "EB") {
207  EtSatLinEB.insert(std::make_pair(eb.rawId(), rd_physLin.getETSat()));
208  } else if (ecid_nameLin == "EE") {
210  EtSatLinEE.insert(std::make_pair(ee.rawId(), rd_physLin.getETSat()));
211  }
212  }
213 
214  int icells = 0;
215  for (CIfeLUT p1 = dataset_TpgPhysicsLut.begin(); p1 != dataset_TpgPhysicsLut.end(); p1++) {
216  ecidLut_xt = p1->first;
217  rd_physLut = p1->second;
218 
219  std::string ecid_nameLut = ecidLut_xt.getName();
220 
221  // Ecal barrel detector
222  if (ecid_nameLut == "EB") {
224 
225  for (itEtSat it1 = EtSatLinEB.begin(); it1 != EtSatLinEB.end(); it1++) {
226  if (it1->first == (int)eb.rawId()) {
227  float ETSatLin = it1->second;
228 
229  if (rd_physLut.getETSat() == ETSatLin) {
231  item.EtSat = rd_physLut.getETSat();
232  item.ttf_threshold_Low = rd_physLut.getTTThreshlow();
233  item.ttf_threshold_High = rd_physLut.getTTThreshhigh();
234  item.FG_lowThreshold = 0;
235  item.FG_highThreshold = 0;
236  item.FG_lowRatio = 0;
237  item.FG_highRatio = 0;
238  temporaryMapEB.insert(std::make_pair(eb.rawId(), item));
239  } else
240  throw cms::Exception("The values of the ETSatLin and ETSatLut are different.");
241  }
242  }
243 
244  ++icells;
245  } else if (ecid_nameLut == "EE") {
246  // Ecal endcap detector
247 
249 
250  for (itEtSat it2 = EtSatLinEE.begin(); it2 != EtSatLinEE.end(); it2++) {
251  if (it2->first == (int)ee.rawId()) {
252  float ETSatLin = it2->second;
253 
254  if (rd_physLut.getETSat() == ETSatLin) {
256  item.EtSat = rd_physLut.getETSat();
257  item.ttf_threshold_Low = rd_physLut.getTTThreshlow();
258  item.ttf_threshold_High = rd_physLut.getTTThreshhigh();
259  item.FG_lowThreshold = 0;
260  item.FG_highThreshold = 0;
261  item.FG_lowRatio = 0;
262  item.FG_highRatio = 0;
263  temporaryMapEE.insert(std::make_pair(ee.rawId(), item));
264  } else
265  throw cms::Exception("The values of the ETSatLin and ETSatLut are different.");
266  }
267  }
268 
269  ++icells;
270  }
271  }
272 
273  int icellsEB = 0;
274  int icellsEE = 0;
275  for (CIfeFgr p2 = dataset_TpgPhysicsFgr.begin(); p2 != dataset_TpgPhysicsFgr.end(); p2++) {
276  ecidFgr_xt = p2->first;
277  rd_physFgr = p2->second;
278 
279  std::string ecid_nameFgr = ecidFgr_xt.getName();
280 
281  // Ecal barrel detector
282  if (ecid_nameFgr == "EB") {
284 
285  for (iterEB itt = temporaryMapEB.begin(); itt != temporaryMapEB.end(); itt++) {
286  if (itt->first == (int)eb.rawId()) {
287  (itt->second).FG_lowThreshold = rd_physFgr.getFGlowthresh();
288  (itt->second).FG_highThreshold = rd_physFgr.getFGhighthresh();
289  (itt->second).FG_lowRatio = rd_physFgr.getFGlowratio();
290  (itt->second).FG_highRatio = rd_physFgr.getFGhighratio();
291 
292  physC->setValue(eb.rawId(), itt->second);
293  }
294  }
295 
296  ++icellsEB;
297 
298  } else if (ecid_nameFgr == "EE") {
299  // Ecal endcap detector
300 
302 
303  int countEE = 0;
304  for (iterEE itEE = temporaryMapEE.begin(); itEE != temporaryMapEE.end(); itEE++) {
305  if (itEE->first == (int)ee.rawId()) {
306  (itEE->second).FG_lowThreshold = rd_physFgr.getFGlowthresh();
307  (itEE->second).FG_highThreshold = rd_physFgr.getFGhighthresh();
308  // the last two is empty for the EE
309  (itEE->second).FG_lowRatio = rd_physFgr.getFGlowratio();
310  (itEE->second).FG_highRatio = rd_physFgr.getFGhighratio();
311 
312  physC->setValue(ee.rawId(), itEE->second);
313  }
314 
315  countEE++;
316  }
317 
318  ++icellsEE;
319  }
320  }
321 
322  Time_t snc = (Time_t)irun;
323 
324  m_to_transfer.push_back(std::make_pair((EcalTPGPhysicsConst*)physC, snc));
325 
326  m_i_run_number = irun;
327  m_i_tag = the_config_tag;
328  m_i_version = the_config_version;
329  m_i_physClin = linId;
330  m_i_physClut = lutId;
331  m_i_physCfgr = fgrId;
332 
333  writeFile("last_tpg_physC_settings.txt");
334 
335  } else {
336  m_i_run_number = irun;
337  m_i_tag = the_config_tag;
338  m_i_version = the_config_version;
339 
340  writeFile("last_tpg_physC_settings.txt");
341 
342  std::cout << " even if the tag/version is not the same, the physics constants id is the same -> no "
343  "transfer needed "
344  << std::endl;
345  }
346 
347  }
348 
349  catch (std::exception& e) {
350  std::cout << "ERROR: THIS CONFIG DOES NOT EXIST: tag=" << the_config_tag << " version=" << the_config_version
351  << std::endl;
352  std::cout << e.what() << std::endl;
353  m_i_run_number = irun;
354  }
355  std::cout << " **************** " << std::endl;
356 
357  } else if (nr == 0) {
358  m_i_run_number = irun;
359  std::cout << " no tag saved to RUN_TPGCONFIG_DAT by EcalSupervisor -> no transfer needed " << std::endl;
360  std::cout << " **************** " << std::endl;
361  } else {
362  m_i_run_number = irun;
363  m_i_tag = the_config_tag;
364  m_i_version = the_config_version;
365  std::cout << " the tag/version is the same -> no transfer needed " << std::endl;
366  std::cout << " **************** " << std::endl;
367  writeFile("last_tpg_physC_settings.txt");
368  }
369  }
370  }
371 
372  delete econn;
373  edm::LogInfo("EcalTPGPhysicsConstHandler") << "Ecal - > end of getNewObjects -----------";
374 }
375 
377  //-------------------------------------------------------------
378 
379  m_i_tag = "";
380  m_i_version = 0;
381  m_i_run_number = 0;
382  m_i_physClin = 0;
383  m_i_physClut = 0;
384  m_i_physCfgr = 0;
385 
386  FILE* inpFile; // input file
387  inpFile = fopen(inputFile, "r");
388  if (!inpFile) {
389  edm::LogError("EcalTPGPhysicsConstHandler") << "*** Can not open file: " << inputFile;
390  return;
391  }
392 
393  char line[256];
394 
395  std::ostringstream str;
396 
397  fgets(line, 255, inpFile);
398  m_i_tag = to_string(line);
399  str << "gen tag " << m_i_tag << std::endl; // should I use this?
400 
401  fgets(line, 255, inpFile);
402  m_i_version = atoi(line);
403  str << "version= " << m_i_version << std::endl;
404 
405  fgets(line, 255, inpFile);
406  m_i_run_number = atoi(line);
407  str << "run_number= " << m_i_run_number << std::endl;
408 
409  fgets(line, 255, inpFile);
410  m_i_physClin = atoi(line);
411  str << "physClin_config= " << m_i_physClin << std::endl;
412 
413  fgets(line, 255, inpFile);
414  m_i_physClut = atoi(line);
415  str << "physClut_config= " << m_i_physClut << std::endl;
416 
417  fgets(line, 255, inpFile);
418  m_i_physCfgr = atoi(line);
419  str << "physCfgr_config= " << m_i_physCfgr << std::endl;
420 
421  fclose(inpFile); // close inp. file
422 }
423 
425  //-------------------------------------------------------------
426 
427  std::ofstream myfile;
428  myfile.open(inputFile);
429  myfile << m_i_tag << std::endl;
430  myfile << m_i_version << std::endl;
431  myfile << m_i_run_number << std::endl;
432  myfile << m_i_physClin << std::endl;
433  myfile << m_i_physClut << std::endl;
434  myfile << m_i_physCfgr << std::endl;
435 
436  myfile.close();
437 }
size
Write out results.
void setValue(const uint32_t &id, const Item &value)
void setRunTypeDef(const RunTypeDef &runTypeDef)
Definition: RunTag.cc:42
std::vector< RunIOV > getRuns()
Definition: RunList.cc:25
int getFgrId() const
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
float getTTThreshlow() const
std::string getName() const
Definition: EcalLogicID.cc:26
float getTTThreshhigh() const
Definition: RunTag.h:13
EcalTPGPhysicsConstHandler(edm::ParameterSet const &)
std::string to_string(const V &value)
Definition: OMSAccess.h:71
int getVersion() const
Log< level::Error, false > LogError
void setVersion(int id)
void setId(int id)
float getFGhighratio() const
int getLinId() const
void setLocationDef(const LocationDef &locDef)
Definition: RunTag.cc:33
void setId(int id)
Log< level::Info, false > LogInfo
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::string getConfigTag() const
cond::Time_t Time_t
Definition: Time.h:18
std::unique_ptr< EcalTPGPhysicsConst > Ref
void setConfigTag(std::string x)
Definition: IODConfig.h:29
float getFGlowthresh() const
int getLUTId() const
void setGeneralTag(std::string tag)
Definition: RunTag.cc:24
#define str(s)
float getFGlowratio() const
float getFGhighthresh() const
void setId(int id)