CMS 3D CMS Logo

CastorDbASCIIIO.cc
Go to the documentation of this file.
1 //
2 // F.Ratnikov (UMd), Oct 28, 2005
3 //
4 #include <vector>
5 #include <string>
6 #include <cstdio>
7 
11 
15 
16 namespace CastorDbASCIIIO {
17  class DetIdLess {
18  public:
19  bool operator()(DetId fFirst, DetId fSecond) const {
20  HcalGenericDetId first(fFirst);
21  HcalGenericDetId second(fSecond);
22  if (first.genericSubdet() != second.genericSubdet())
23  return first.genericSubdet() < second.genericSubdet();
24  if (first.isHcalDetId()) {
26  HcalDetId s1(second);
27  return f1.zside() != s1.zside()
28  ? f1.zside() < s1.zside()
29  : f1.iphi() != s1.iphi()
30  ? f1.iphi() < s1.iphi()
31  : f1.ietaAbs() != s1.ietaAbs() ? f1.ietaAbs() < s1.ietaAbs() : f1.depth() < s1.depth();
32  } else {
33  return first.rawId() < second.rawId();
34  }
35  }
36  };
38  public:
40  return first.readoutVMECrateId() != second.readoutVMECrateId()
41  ? first.readoutVMECrateId() < second.readoutVMECrateId()
42  : first.htrSlot() != second.htrSlot()
43  ? first.htrSlot() < second.htrSlot()
44  : first.htrTopBottom() != second.htrTopBottom()
45  ? first.htrTopBottom() < second.htrTopBottom()
46  : first.fiberIndex() != second.fiberIndex() ? first.fiberIndex() < second.fiberIndex()
47  : first.fiberChanId() < second.fiberChanId();
48  }
49  };
50 
51  std::vector<std::string> splitString(const std::string& fLine) {
52  std::vector<std::string> result;
53  int start = 0;
54  bool empty = true;
55  for (unsigned i = 0; i <= fLine.size(); i++) {
56  if (fLine[i] == ' ' || i == fLine.size()) {
57  if (!empty) {
58  std::string item(fLine, start, i - start);
59  result.push_back(item);
60  empty = true;
61  }
62  start = i + 1;
63  } else {
64  if (empty)
65  empty = false;
66  }
67  }
68  return result;
69  }
70 
71  DetId getId(const std::vector<std::string>& items) {
73  return converter.getId();
74  }
75 
76  void dumpId(std::ostream& fOutput, DetId id) {
78  char buffer[1024];
79  sprintf(buffer,
80  " %15s %15s %15s %15s",
81  converter.getField1().c_str(),
82  converter.getField2().c_str(),
83  converter.getField3().c_str(),
84  converter.getFlavor().c_str());
85  fOutput << buffer;
86  }
87 
88  template <class S, class T>
89  bool getCastorObject(std::istream& fInput, T& fObject) {
90  char buffer[1024];
91  while (fInput.getline(buffer, 1024)) {
92  if (buffer[0] == '#')
93  continue; //ignore comment
94  std::vector<std::string> items = splitString(std::string(buffer));
95  if (items.empty())
96  continue; // blank line
97  if (items.size() < 8) {
98  edm::LogWarning("Format Error") << "Bad line: " << buffer
99  << "\n line must contain 8 items: eta, phi, depth, subdet, 4x values"
100  << std::endl;
101  continue;
102  }
103  DetId id = getId(items);
104 
105  // if (fObject->exists(id) )
106  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
107  // else
108  // {
109  S fCondObject(id, atof(items[4].c_str()), atof(items[5].c_str()), atof(items[6].c_str()), atof(items[7].c_str()));
110  fObject.addValues(fCondObject);
111  // }
112  }
113 
114  return true;
115  }
116 
117  template <class T>
118  bool dumpCastorObject(std::ostream& fOutput, const T& fObject) {
119  char buffer[1024];
120  sprintf(buffer,
121  "# %15s %15s %15s %15s %8s %8s %8s %8s %10s\n",
122  "eta",
123  "phi",
124  "dep",
125  "det",
126  "cap0",
127  "cap1",
128  "cap2",
129  "cap3",
130  "DetId");
131  fOutput << buffer;
132  std::vector<DetId> channels = fObject.getAllChannels();
133  //std::sort (channels.begin(), channels.end(), DetIdLess ());
134  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
135  const float* values = fObject.getValues(*channel)->getValues();
136  if (values) {
137  dumpId(fOutput, *channel);
138  sprintf(
139  buffer, " %8.5f %8.5f %8.5f %8.5f %10X\n", values[0], values[1], values[2], values[3], channel->rawId());
140  fOutput << buffer;
141  }
142  }
143  return true;
144  }
145 
146  template <class S, class T>
147  bool getCastorSingleFloatObject(std::istream& fInput, T& fObject) {
148  char buffer[1024];
149  while (fInput.getline(buffer, 1024)) {
150  if (buffer[0] == '#')
151  continue; //ignore comment
152  std::vector<std::string> items = splitString(std::string(buffer));
153  if (items.empty())
154  continue; // blank line
155  if (items.size() < 5) {
156  edm::LogWarning("Format Error") << "Bad line: " << buffer
157  << "\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
158  continue;
159  }
160  DetId id = getId(items);
161 
162  // if (fObject->exists(id) )
163  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
164  // else
165  // {
166  S fCondObject(id, atof(items[4].c_str()));
167  fObject.addValues(fCondObject);
168  // }
169  }
170  return true;
171  }
172 
173  template <class T>
174  bool dumpCastorSingleFloatObject(std::ostream& fOutput, const T& fObject) {
175  char buffer[1024];
176  sprintf(buffer, "# %15s %15s %15s %15s %8s %10s\n", "eta", "phi", "dep", "det", "value", "DetId");
177  fOutput << buffer;
178  std::vector<DetId> channels = fObject.getAllChannels();
179  std::sort(channels.begin(), channels.end(), DetIdLess());
180  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
181  const float value = fObject.getValues(*channel)->getValue();
182  dumpId(fOutput, *channel);
183  sprintf(buffer, " %8.5f %10X\n", value, channel->rawId());
184  fOutput << buffer;
185  }
186  return true;
187  }
188 
189  template <class S, class T>
190  bool getCastorSingleIntObject(std::istream& fInput, T& fObject, S* fCondObject) {
191  char buffer[1024];
192  while (fInput.getline(buffer, 1024)) {
193  if (buffer[0] == '#')
194  continue; //ignore comment
195  std::vector<std::string> items = splitString(std::string(buffer));
196  if (items.empty())
197  continue; // blank line
198  if (items.size() < 5) {
199  edm::LogWarning("Format Error") << "Bad line: " << buffer
200  << "\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
201  continue;
202  }
203  DetId id = getId(items);
204 
205  // if (fObject->exists(id) )
206  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
207  // else
208  // {
209  fCondObject = new S(id, atoi(items[4].c_str()));
210  fObject.addValues(*fCondObject);
211  delete fCondObject;
212  // }
213  }
214  return true;
215  }
216 
217  template <class T>
218  bool dumpCastorSingleIntObject(std::ostream& fOutput, const T& fObject) {
219  char buffer[1024];
220  sprintf(buffer, "# %15s %15s %15s %15s %8s %10s\n", "eta", "phi", "dep", "det", "value", "DetId");
221  fOutput << buffer;
222  std::vector<DetId> channels = fObject.getAllChannels();
223  std::sort(channels.begin(), channels.end(), DetIdLess());
224  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
225  const int value = fObject.getValues(*channel)->getValue();
226  dumpId(fOutput, *channel);
227  sprintf(buffer, " %15d %10X\n", value, channel->rawId());
228  fOutput << buffer;
229  }
230  return true;
231  }
232 
233  bool getObject(std::istream& fInput, CastorGains& fObject) { return getCastorObject<CastorGain>(fInput, fObject); }
234  bool dumpObject(std::ostream& fOutput, const CastorGains& fObject) { return dumpCastorObject(fOutput, fObject); }
235  bool getObject(std::istream& fInput, CastorGainWidths& fObject) {
236  return getCastorObject<CastorGainWidth>(fInput, fObject);
237  }
238  bool dumpObject(std::ostream& fOutput, const CastorGainWidths& fObject) { return dumpCastorObject(fOutput, fObject); }
239 
240  bool getObject(std::istream& fInput, CastorSaturationCorrs& fObject) {
241  return getCastorSingleFloatObject<CastorSaturationCorr>(fInput, fObject);
242  }
243  bool dumpObject(std::ostream& fOutput, const CastorSaturationCorrs& fObject) {
244  return dumpCastorSingleFloatObject(fOutput, fObject);
245  }
246 
247  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
248  bool getObject(std::istream& fInput, CastorPedestals& fObject) {
249  char buffer[1024];
250 
251  while (fInput.getline(buffer, 1024)) {
252  std::vector<std::string> items = splitString(std::string(buffer));
253  if (items.empty())
254  continue; // blank line
255  else {
256  if (items[0] == "#U") {
257  if (items[1] == (std::string) "ADC")
258  fObject.setUnitADC(true);
259  else if (items[1] == (std::string) "fC")
260  fObject.setUnitADC(false);
261  else {
262  edm::LogWarning("Pedestal Unit Error") << "Unrecognized unit for pedestals. Assuming fC." << std::endl;
263  fObject.setUnitADC(false);
264  }
265  break;
266  } else {
267  edm::LogWarning("Pedestal Unit Missing")
268  << "The unit for the pedestals is missing in the txt file." << std::endl;
269  return false;
270  }
271  }
272  }
273  while (fInput.getline(buffer, 1024)) {
274  if (buffer[0] == '#')
275  continue;
276  std::vector<std::string> items = splitString(std::string(buffer));
277  if (items.empty())
278  continue; // blank line
279  if (items.size() < 8) {
280  edm::LogWarning("Format Error")
281  << "Bad line: " << buffer << "\n line must contain 8 items: eta, phi, depth, subdet, 4x values"
282  << " or 12 items: eta, phi, depth, subdet, 4x values for mean, 4x values for width" << std::endl;
283  continue;
284  }
285  DetId id = getId(items);
286 
287  // if (fObject.exists(id) )
288  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
289  // else
290  // {
291 
292  if (items.size() < 12) // old format without widths
293  {
294  CastorPedestal fCondObject(id,
295  atof(items[4].c_str()),
296  atof(items[5].c_str()),
297  atof(items[6].c_str()),
298  atof(items[7].c_str()),
299  0.,
300  0.,
301  0.,
302  0.);
303  fObject.addValues(fCondObject);
304  } else // new format with widths
305  {
306  CastorPedestal fCondObject(id,
307  atof(items[4].c_str()),
308  atof(items[5].c_str()),
309  atof(items[6].c_str()),
310  atof(items[7].c_str()),
311  atof(items[8].c_str()),
312  atof(items[9].c_str()),
313  atof(items[10].c_str()),
314  atof(items[11].c_str()));
315  fObject.addValues(fCondObject);
316  }
317 
318  // }
319  }
320  return true;
321  }
322 
323  bool dumpObject(std::ostream& fOutput, const CastorPedestals& fObject) {
324  char buffer[1024];
325  if (fObject.isADC())
326  sprintf(buffer, "#U ADC << this is the unit \n");
327  else
328  sprintf(buffer, "#U fC << this is the unit \n");
329  fOutput << buffer;
330 
331  sprintf(buffer,
332  "# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
333  "eta",
334  "phi",
335  "dep",
336  "det",
337  "cap0",
338  "cap1",
339  "cap2",
340  "cap3",
341  "widthcap0",
342  "widthcap1",
343  "widthcap2",
344  "widthcap3",
345  "DetId");
346  fOutput << buffer;
347 
348  std::vector<DetId> channels = fObject.getAllChannels();
349  std::sort(channels.begin(), channels.end(), DetIdLess());
350  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
351  const float* values = fObject.getValues(*channel)->getValues();
352  if (values) {
353  dumpId(fOutput, *channel);
354  sprintf(buffer,
355  " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
356  values[0],
357  values[1],
358  values[2],
359  values[3],
360  values[4],
361  values[5],
362  values[6],
363  values[7],
364  channel->rawId());
365  fOutput << buffer;
366  }
367  }
368  return true;
369  }
370 
371  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
372  bool getObject(std::istream& fInput, CastorChannelQuality& fObject) {
373  char buffer[1024];
374  while (fInput.getline(buffer, 1024)) {
375  if (buffer[0] == '#')
376  continue; //ignore comment
377  std::vector<std::string> items = splitString(std::string(buffer));
378  if (items.empty())
379  continue; // blank line
380  if (items.size() < 5) {
381  edm::LogWarning("Format Error") << "Bad line: " << buffer
382  << "\n line must contain 5 items: eta, phi, depth, subdet, GOOD/BAD/HOT/DEAD"
383  << std::endl;
384  continue;
385  }
386  DetId id = getId(items);
387 
388  if (fObject.exists(id)) {
389  edm::LogWarning("Redefining Channel")
390  << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
391  continue;
392  }
393  // else
394  // {
395  uint32_t mystatus;
396  std::unique_ptr<CastorChannelStatus> fCondObject;
397  if (items[4].substr(0, 2) == "0x") {
398  sscanf(items[4].c_str(), "%X", &mystatus);
399  fCondObject = std::make_unique<CastorChannelStatus>(id, mystatus);
400  } else if (isalpha(items[4].c_str()[0])) {
401  fCondObject = std::make_unique<CastorChannelStatus>(id, items[4]);
402  } else {
403  sscanf(items[4].c_str(), "%u", &mystatus);
404  fCondObject = std::make_unique<CastorChannelStatus>(id, mystatus);
405  }
406  fObject.addValues(*fCondObject);
407  // }
408  }
409  return true;
410  }
411 
412  bool dumpObject(std::ostream& fOutput, const CastorChannelQuality& fObject) {
413  char buffer[1024];
414  sprintf(buffer, "# %15s %15s %15s %15s %15s %10s\n", "eta", "phi", "dep", "det", "value", "DetId");
415  fOutput << buffer;
416  std::vector<DetId> channels = fObject.getAllChannels();
417  std::sort(channels.begin(), channels.end(), DetIdLess());
418  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
419  const int value = fObject.getValues(*channel)->getValue();
420  dumpId(fOutput, *channel);
421  sprintf(buffer, " %15X %10X\n", value, channel->rawId());
422  fOutput << buffer;
423  }
424  return true;
425  }
426 
427  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
428  bool getObject(std::istream& fInput, CastorPedestalWidths& fObject) {
429  char buffer[1024];
430  int linecounter = 0;
431 
432  while (fInput.getline(buffer, 1024)) {
433  linecounter++;
434  std::vector<std::string> items = splitString(std::string(buffer));
435  if (items.empty())
436  continue; // blank line
437  else {
438  if (items[0] == (std::string) "#U") {
439  if (items[1] == (std::string) "ADC")
440  fObject.setUnitADC(true);
441  else if (items[1] == (std::string) "fC")
442  fObject.setUnitADC(false);
443  else {
444  edm::LogWarning("Pedestal Width Unit Error")
445  << "Unrecognized unit for pedestal widths. Assuming fC." << std::endl;
446  fObject.setUnitADC(false);
447  }
448  break;
449  } else {
450  edm::LogWarning("Pedestal Width Unit Missing")
451  << "The unit for the pedestal widths is missing in the txt file." << std::endl;
452  return false;
453  }
454  }
455  }
456 
457  while (fInput.getline(buffer, 1024)) {
458  linecounter++;
459  if (buffer[0] == '#')
460  continue; //ignore comment
461  std::vector<std::string> items = splitString(std::string(buffer));
462  if (items.empty())
463  continue; // blank line
464  if (items.size() < 14) {
465  edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line number: " << linecounter
466  << "\n line must contain 14 items: eta, phi, depth, subdet, 10x correlations"
467  << " or 20 items: eta, phi, depth, subdet, 16x correlations" << std::endl;
468  continue;
469  }
470  DetId id = getId(items);
471 
472  // if (fObject.exists(id) )
473  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
474  // else
475  // {
476 
477  if (items.size() < 20) //old format
478  {
480  values.setSigma(0, 0, atof(items[4].c_str()));
481  values.setSigma(1, 0, atof(items[5].c_str()));
482  values.setSigma(1, 1, atof(items[6].c_str()));
483  values.setSigma(2, 0, atof(items[7].c_str()));
484  values.setSigma(2, 1, atof(items[8].c_str()));
485  values.setSigma(2, 2, atof(items[9].c_str()));
486  values.setSigma(3, 0, atof(items[10].c_str()));
487  values.setSigma(3, 1, atof(items[11].c_str()));
488  values.setSigma(3, 2, atof(items[12].c_str()));
489  values.setSigma(3, 3, atof(items[13].c_str()));
490  values.setSigma(0, 1, 0.);
491  values.setSigma(0, 2, 0.);
492  values.setSigma(0, 3, 0.);
493  values.setSigma(1, 2, 0.);
494  values.setSigma(1, 3, 0.);
495  values.setSigma(2, 3, 0.);
496  fObject.addValues(values);
497  } else // new format
498  {
500  values.setSigma(0, 0, atof(items[4].c_str()));
501  values.setSigma(0, 1, atof(items[5].c_str()));
502  values.setSigma(0, 2, atof(items[6].c_str()));
503  values.setSigma(0, 3, atof(items[7].c_str()));
504  values.setSigma(1, 0, atof(items[8].c_str()));
505  values.setSigma(1, 1, atof(items[9].c_str()));
506  values.setSigma(1, 2, atof(items[10].c_str()));
507  values.setSigma(1, 3, atof(items[11].c_str()));
508  values.setSigma(2, 0, atof(items[12].c_str()));
509  values.setSigma(2, 1, atof(items[13].c_str()));
510  values.setSigma(2, 2, atof(items[14].c_str()));
511  values.setSigma(2, 3, atof(items[15].c_str()));
512  values.setSigma(3, 0, atof(items[16].c_str()));
513  values.setSigma(3, 1, atof(items[17].c_str()));
514  values.setSigma(3, 2, atof(items[18].c_str()));
515  values.setSigma(3, 3, atof(items[19].c_str()));
516  fObject.addValues(values);
517  }
518 
519  // }
520  }
521  return true;
522  }
523 
524  bool dumpObject(std::ostream& fOutput, const CastorPedestalWidths& fObject) {
525  char buffer[1024];
526  if (fObject.isADC())
527  sprintf(buffer, "#U ADC << this is the unit \n");
528  else
529  sprintf(buffer, "#U fC << this is the unit \n");
530  fOutput << buffer;
531 
532  sprintf(buffer,
533  "# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
534  "eta",
535  "phi",
536  "dep",
537  "det",
538  "cov_0_0",
539  "cov_0_1",
540  "cov_0_2",
541  "cov_0_3",
542  "cov_1_0",
543  "cov_1_1",
544  "cov_1_2",
545  "cov_1_3",
546  "cov_2_0",
547  "cov_2_1",
548  "cov_2_2",
549  "cov_2_3",
550  "cov_3_0",
551  "cov_3_1",
552  "cov_3_2",
553  "cov_3_3",
554  "DetId");
555  fOutput << buffer;
556  std::vector<DetId> channels = fObject.getAllChannels();
557  std::sort(channels.begin(), channels.end(), DetIdLess());
558  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
559  const CastorPedestalWidth* item = fObject.getValues(*channel);
560  if (item) {
561  dumpId(fOutput, *channel);
562  sprintf(
563  buffer,
564  " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
565  item->getSigma(0, 0),
566  item->getSigma(0, 1),
567  item->getSigma(0, 2),
568  item->getSigma(0, 3),
569  item->getSigma(1, 0),
570  item->getSigma(1, 1),
571  item->getSigma(1, 2),
572  item->getSigma(1, 3),
573  item->getSigma(2, 0),
574  item->getSigma(2, 1),
575  item->getSigma(2, 2),
576  item->getSigma(2, 3),
577  item->getSigma(3, 0),
578  item->getSigma(3, 1),
579  item->getSigma(3, 2),
580  item->getSigma(3, 3),
581  channel->rawId());
582  fOutput << buffer;
583  }
584  }
585  return true;
586  }
587 
588  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
589  bool getObject(std::istream& fInput, CastorQIEData& fObject) {
590  char buffer[1024];
591  while (fInput.getline(buffer, 1024)) {
592  if (buffer[0] == '#')
593  continue; //ignore comment
594  std::vector<std::string> items = splitString(std::string(buffer));
595  if (items.empty())
596  continue;
597  if (items[0] == "SHAPE") { // basic shape
598  if (items.size() < 33) {
599  edm::LogWarning("Format Error")
600  << "Bad line: " << buffer << "\n line must contain 33 items: SHAPE 32 x low QIE edges for first 32 bins"
601  << std::endl;
602  continue;
603  }
604  //float lowEdges [32];
605  //int i = 32;
606  //while (--i >= 0) lowEdges [i] = atof (items [i+1].c_str ());
607  // fObject.setShape (lowEdges);
608  } else { // QIE parameters
609  if (items.size() < 36) {
610  edm::LogWarning("Format Error") << "Bad line: " << buffer
611  << "\n line must contain 36 items: eta, phi, depth, subdet, 4 capId x 4 "
612  "Ranges x offsets, 4 capId x 4 Ranges x slopes"
613  << std::endl;
614  continue;
615  }
616  DetId id = getId(items);
617  fObject.sort();
618  // try {
619  // fObject.getCoder (id);
620  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
621  // }
622  // catch (cms::Exception& e) {
623  CastorQIECoder coder(id.rawId());
624  int index = 4;
625  for (unsigned capid = 0; capid < 4; capid++) {
626  for (unsigned range = 0; range < 4; range++) {
627  coder.setOffset(capid, range, atof(items[index++].c_str()));
628  }
629  }
630  for (unsigned capid = 0; capid < 4; capid++) {
631  for (unsigned range = 0; range < 4; range++) {
632  coder.setSlope(capid, range, atof(items[index++].c_str()));
633  }
634  }
635  fObject.addCoder(coder);
636  // }
637  }
638  }
639  fObject.sort();
640  return true;
641  }
642 
643  bool dumpObject(std::ostream& fOutput, const CastorQIEData& fObject) {
644  char buffer[1024];
645  fOutput << "# QIE basic shape: SHAPE 32 x low edge values for first 32 channels" << std::endl;
646  sprintf(buffer, "SHAPE ");
647  fOutput << buffer;
648  for (unsigned bin = 0; bin < 32; bin++) {
649  sprintf(buffer, " %8.5f", fObject.getShape().lowEdge(bin));
650  fOutput << buffer;
651  }
652  fOutput << std::endl;
653 
654  fOutput << "# QIE data" << std::endl;
655  sprintf(buffer,
656  "# %15s %15s %15s %15s %36s %36s %36s %36s %36s %36s %36s %36s\n",
657  "eta",
658  "phi",
659  "dep",
660  "det",
661  "4 x offsets cap0",
662  "4 x offsets cap1",
663  "4 x offsets cap2",
664  "4 x offsets cap3",
665  "4 x slopes cap0",
666  "4 x slopes cap1",
667  "4 x slopes cap2",
668  "4 x slopes cap3");
669  fOutput << buffer;
670  std::vector<DetId> channels = fObject.getAllChannels();
671  std::sort(channels.begin(), channels.end(), DetIdLess());
672  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
673  const CastorQIECoder* coder = fObject.getCoder(*channel);
674  dumpId(fOutput, *channel);
675  for (unsigned capid = 0; capid < 4; capid++) {
676  for (unsigned range = 0; range < 4; range++) {
677  sprintf(buffer, " %8.5f", coder->offset(capid, range));
678  fOutput << buffer;
679  }
680  }
681  for (unsigned capid = 0; capid < 4; capid++) {
682  for (unsigned range = 0; range < 4; range++) {
683  sprintf(buffer, " %8.5f", coder->slope(capid, range));
684  fOutput << buffer;
685  }
686  }
687  fOutput << std::endl;
688  }
689  return true;
690  }
691 
692  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
693  bool getObject(std::istream& fInput, CastorCalibrationQIEData& fObject) {
694  char buffer[1024];
695  while (fInput.getline(buffer, 1024)) {
696  if (buffer[0] == '#')
697  continue; //ignore comment
698  std::vector<std::string> items = splitString(std::string(buffer));
699  if (items.size() < 36) {
700  edm::LogWarning("Format Error") << "Bad line: " << buffer
701  << "\n line must contain 36 items: eta, phi, depth, subdet, 32 bin values"
702  << std::endl;
703  continue;
704  }
705  DetId id = getId(items);
706  fObject.sort();
707  // try {
708  // fObject.getCoder (id);
709  // edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
710  // }
711  // catch (cms::Exception& e) {
712  CastorCalibrationQIECoder coder(id.rawId());
713  int index = 4;
714  float values[32];
715  for (unsigned bin = 0; bin < 32; bin++) {
716  values[bin] = atof(items[index++].c_str());
717  }
718  coder.setMinCharges(values);
719  fObject.addCoder(coder);
720  // }
721  }
722  fObject.sort();
723  return true;
724  }
725 
726  bool dumpObject(std::ostream& fOutput, const CastorCalibrationQIEData& fObject) {
727  char buffer[1024];
728  fOutput << "# QIE data in calibration mode" << std::endl;
729  sprintf(buffer, "# %15s %15s %15s %15s %288s\n", "eta", "phi", "dep", "det", "32 x charges");
730  fOutput << buffer;
731  std::vector<DetId> channels = fObject.getAllChannels();
732  std::sort(channels.begin(), channels.end(), DetIdLess());
733  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
734  const CastorCalibrationQIECoder* coder = fObject.getCoder(*channel);
735  if (coder) {
736  dumpId(fOutput, *channel);
737  const float* lowEdge = coder->minCharges();
738  for (unsigned bin = 0; bin < 32; bin++) {
739  sprintf(buffer, " %8.5f", lowEdge[bin]);
740  fOutput << buffer;
741  }
742  fOutput << std::endl;
743  }
744  }
745  return true;
746  }
747 
748  // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
749  bool getObject(std::istream& fInput, CastorElectronicsMap& fObject) {
750  char buffer[1024];
751  while (fInput.getline(buffer, 1024)) {
752  if (buffer[0] == '#')
753  continue; //ignore comment
754  std::vector<std::string> items = splitString(std::string(buffer));
755  if (items.size() < 12) {
756  if (items.empty())
757  continue; // no warning here
758  if (items.size() < 9) {
759  edm::LogError("MapFormat") << "CastorElectronicsMap-> line too short: " << buffer;
760  continue;
761  }
762  if (items[8] == "NA" || items[8] == "NT") {
763  while (items.size() < 12)
764  items.push_back(""); // don't worry here
765  } else if (items[8] == "HT") {
766  if (items.size() == 11)
767  items.push_back("");
768  else {
769  edm::LogError("MapFormat") << "CastorElectronicsMap-> Bad line: " << buffer
770  << "\n HT line must contain at least 11 items: i cr sl tb dcc spigot fiber "
771  "fiberchan subdet=HT ieta iphi";
772  continue;
773  }
774  } else {
775  edm::LogError("MapFormat")
776  << "CastorElectronicsMap-> Bad line: " << buffer
777  << "\n line must contain 12 items: i cr sl tb dcc spigot fiber fiberchan subdet ieta iphi depth";
778  continue;
779  }
780  }
781  // std::cout << "CastorElectronicsMap-> processing line: " << buffer << std::endl;
782  int crate = atoi(items[1].c_str());
783  int slot = atoi(items[2].c_str());
784  int top = 1;
785  if (items[3] == "b")
786  top = 0;
787  int dcc = atoi(items[4].c_str());
788  int spigot = atoi(items[5].c_str());
789  CastorElectronicsId elId;
790  if (items[8] == "HT" || items[8] == "NT") {
791  int slb = atoi(items[6].c_str());
792  int slbCh = atoi(items[7].c_str());
793  elId = CastorElectronicsId(slbCh, slb, spigot, dcc, crate, slot, top);
794  } else {
795  int fiber = atoi(items[6].c_str());
796  int fiberCh = atoi(items[7].c_str());
797 
798  elId = CastorElectronicsId(fiberCh, fiber, spigot, dcc);
799  elId.setHTR(crate, slot, top);
800  }
801 
802  // first, handle undefined cases
803  if (items[8] == "NA") { // undefined channel
804  fObject.mapEId2chId(elId, DetId(HcalDetId::Undefined));
805  } else if (items[8] == "NT") { // undefined trigger channel
807  } else {
809  if (converter.isHcalCastorDetId()) {
810  fObject.mapEId2chId(elId, converter.getId());
811  } else {
812  edm::LogWarning("Format Error") << "CastorElectronicsMap-> Unknown subdetector: " << items[8] << '/'
813  << items[9] << '/' << items[10] << '/' << items[11] << std::endl;
814  }
815  }
816  }
817  fObject.sort();
818  return true;
819  }
820 
821  bool dumpObject(std::ostream& fOutput, const CastorElectronicsMap& fObject) {
822  std::vector<CastorElectronicsId> eids = fObject.allElectronicsId();
823  char buf[1024];
824  // changes by Jared, 6.03.09/(included 25.03.09)
825  // sprintf (buf, "#%10s %6s %6s %6s %6s %6s %6s %6s %15s %15s %15s %15s",
826  sprintf(buf,
827  "# %7s %3s %3s %3s %4s %7s %10s %14s %7s %5s %5s %6s",
828  "i",
829  "cr",
830  "sl",
831  "tb",
832  "dcc",
833  "spigot",
834  "fiber/slb",
835  "fibcha/slbcha",
836  "subdet",
837  "ieta",
838  "iphi",
839  "depth");
840  fOutput << buf << std::endl;
841 
842  for (unsigned i = 0; i < eids.size(); i++) {
843  CastorElectronicsId eid = eids[i];
844  if (eid.isTriggerChainId()) {
845  DetId trigger = fObject.lookupTrigger(eid);
846  if (trigger.rawId()) {
848  // changes by Jared, 6.03.09/(included 25.03.09)
849  // sprintf (buf, " %10X %6d %6d %6c %6d %6d %6d %6d %15s %15s %15s %15s",
850  sprintf(
851  buf,
852  " %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
853  // i,
854  converter.getId().rawId(),
855  // changes by Jared, 6.03.09/(included 25.03.09)
856  // eid.readoutVMECrateId(), eid.htrSlot(), eid.htrTopBottom()>0?'t':'b', eid.dccid(), eid.spigot(), eid.fiberIndex(), eid.fiberChanId(),
857  eid.readoutVMECrateId(),
858  eid.htrSlot(),
859  eid.htrTopBottom() > 0 ? 't' : 'b',
860  eid.dccid(),
861  eid.spigot(),
862  eid.slbSiteNumber(),
863  eid.slbChannelIndex(),
864  converter.getFlavor().c_str(),
865  converter.getField1().c_str(),
866  converter.getField2().c_str(),
867  converter.getField3().c_str());
868  fOutput << buf << std::endl;
869  }
870  } else {
871  DetId channel = fObject.lookup(eid);
872  if (channel.rawId()) {
874  // changes by Jared, 6.03.09/(included 25.03.09)
875  // sprintf (buf, " %10X %6d %6d %6c %6d %6d %6d %6d %15s %15s %15s %15s",
876  sprintf(buf,
877  " %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
878  // i,
879  converter.getId().rawId(),
880  eid.readoutVMECrateId(),
881  eid.htrSlot(),
882  eid.htrTopBottom() > 0 ? 't' : 'b',
883  eid.dccid(),
884  eid.spigot(),
885  eid.fiberIndex(),
886  eid.fiberChanId(),
887  converter.getFlavor().c_str(),
888  converter.getField1().c_str(),
889  converter.getField2().c_str(),
890  converter.getField3().c_str());
891  fOutput << buf << std::endl;
892  }
893  }
894  }
895  return true;
896  }
897 
898  bool getObject(std::istream& fInput, CastorRecoParams& fObject) {
899  char buffer[1024];
900  while (fInput.getline(buffer, 1024)) {
901  if (buffer[0] == '#')
902  continue; //ignore comment
903  std::vector<std::string> items = splitString(std::string(buffer));
904  if (items.empty())
905  continue; // blank line
906  if (items.size() < 6) {
907  edm::LogWarning("Format Error")
908  << "Bad line: " << buffer
909  << "\n line must contain 6 items: eta, phi, depth, subdet, firstSample, samplesToAdd" << std::endl;
910  continue;
911  }
912  DetId id = getId(items);
913 
914  CastorRecoParam fCondObject(id, atoi(items[4].c_str()), atoi(items[5].c_str()));
915  fObject.addValues(fCondObject);
916  }
917  return true;
918  }
919 
920  bool dumpObject(std::ostream& fOutput, const CastorRecoParams& fObject) {
921  char buffer[1024];
922  sprintf(buffer,
923  "# %15s %15s %15s %15s %18s %15s %10s\n",
924  "eta",
925  "phi",
926  "dep",
927  "det",
928  "firstSample",
929  "samplesToAdd",
930  "DetId");
931  fOutput << buffer;
932  std::vector<DetId> channels = fObject.getAllChannels();
933  std::sort(channels.begin(), channels.end(), DetIdLess());
934  for (std::vector<DetId>::iterator channel = channels.begin(); channel != channels.end(); ++channel) {
935  dumpId(fOutput, *channel);
936  sprintf(buffer,
937  " %15d %15d %16X\n",
938  fObject.getValues(*channel)->firstSample(),
939  fObject.getValues(*channel)->samplesToAdd(),
940  channel->rawId());
941  fOutput << buffer;
942  }
943  return true;
944  }
945 
946 } // namespace CastorDbASCIIIO
CastorDbASCIIIO::dumpCastorSingleFloatObject
bool dumpCastorSingleFloatObject(std::ostream &fOutput, const T &fObject)
Definition: CastorDbASCIIIO.cc:174
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
CastorDbASCIIIO::dumpId
void dumpId(std::ostream &fOutput, DetId id)
Definition: CastorDbASCIIIO.cc:76
HcalDetId::Undefined
static const HcalDetId Undefined
Definition: HcalDetId.h:273
CastorCondObjectContainer::getValues
const Item * getValues(DetId fId, bool throwOnFail=true) const
Definition: CastorCondObjectContainer.h:65
mps_fire.i
i
Definition: mps_fire.py:428
CastorCondObjectContainer::exists
const bool exists(DetId fId) const
Definition: CastorCondObjectContainer.h:88
CastorGainWidths
Definition: CastorGainWidths.h:18
start
Definition: start.py:1
MessageLogger.h
CastorPedestalWidths::setUnitADC
void setUnitADC(bool isADC)
Definition: CastorPedestalWidths.h:27
CastorText2DetIdConverter
Definition: CastorText2DetIdConverter.h:12
HcalGenericDetId
Definition: HcalGenericDetId.h:15
HcalDetId::iphi
constexpr int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
CastorCalibrationQIEData::getCoder
const CastorCalibrationQIECoder * getCoder(DetId fId) const
get QIE parameters
Definition: CastorCalibrationQIEData.h:27
converter
Definition: CandidateProducer.h:25
CastorQIECoder::slope
float slope(unsigned fCapId, unsigned fRange) const
Definition: CastorQIECoder.cc:44
CastorPedestals::setUnitADC
void setUnitADC(bool isADC)
Definition: CastorPedestals.h:27
CastorPedestals::isADC
bool isADC() const
Definition: CastorPedestals.h:25
AllObjects.h
CastorQIECoder::setOffset
void setOffset(unsigned fCapId, unsigned fRange, float fValue)
Definition: CastorQIECoder.cc:46
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
HcalGenericDetId.h
HcalDetId::depth
constexpr int depth() const
get the tower depth
Definition: HcalDetId.h:164
CastorElectronicsId
Readout chain identification for Castor Bits for the readout chain : some names need change!...
Definition: CastorElectronicsId.h:20
CastorPedestal::getValues
const float * getValues() const
get value for all capId = 0..3
Definition: CastorPedestal.h:19
CastorPedestal
Definition: CastorPedestal.h:16
CastorPedestalWidth
Definition: CastorPedestalWidth.h:16
CastorQIEShape::lowEdge
float lowEdge(unsigned fAdc) const
Definition: CastorQIEShape.cc:34
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
CastorCondObjectContainer::getAllChannels
std::vector< DetId > getAllChannels() const
Definition: CastorCondObjectContainer.h:119
mps_monitormerge.items
list items
Definition: mps_monitormerge.py:29
CastorRecoParam
Definition: CastorRecoParam.h:13
CastorCalibrationQIECoder::setMinCharges
void setMinCharges(const float fValue[32])
Definition: CastorCalibrationQIECoder.cc:46
edmScanValgrind.buffer
buffer
Definition: edmScanValgrind.py:171
slb
static int slb(const HcalTriggerPrimitiveSample &theSample)
Definition: CastorUnpacker.cc:71
CastorDbASCIIIO
Definition: CastorDbASCIIIO.h:37
DetId
Definition: DetId.h:17
contentValuesCheck.values
values
Definition: contentValuesCheck.py:38
CastorElectronicsMap::sort
void sort()
Definition: CastorElectronicsMap.h:78
CastorElectronicsMap::mapEId2tId
bool mapEId2tId(CastorElectronicsId fElectronicsId, HcalTrigTowerDetId fTriggerId)
Definition: CastorElectronicsMap.cc:201
CastorPedestalWidths::isADC
bool isADC() const
Definition: CastorPedestalWidths.h:25
CastorDbASCIIIO::getCastorObject
bool getCastorObject(std::istream &fInput, T &fObject)
Definition: CastorDbASCIIIO.cc:89
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
CastorPedestals
Definition: CastorPedestals.h:18
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
S
double S(const TLorentzVector &, const TLorentzVector &)
Definition: Particle.cc:97
CastorElectronicsId.h
CastorDbASCIIIO::dumpObject
bool dumpObject(std::ostream &fOutput, const CastorPedestals &fObject)
Definition: CastorDbASCIIIO.cc:323
CastorDbASCIIIO::getObject
bool getObject(std::istream &fInput, CastorPedestals &fObject)
Definition: CastorDbASCIIIO.cc:248
CastorElectronicsId::setHTR
void setHTR(int crate, int slot, int tb)
Definition: CastorElectronicsId.cc:56
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
CastorDbASCIIIO::CastorElectronicsIdLess::operator()
bool operator()(CastorElectronicsId first, CastorElectronicsId second) const
Definition: CastorDbASCIIIO.cc:39
HcalTrigTowerDetId::Undefined
static const HcalTrigTowerDetId Undefined
Definition: HcalTrigTowerDetId.h:62
CastorDbASCIIIO::DetIdLess::operator()
bool operator()(DetId fFirst, DetId fSecond) const
Definition: CastorDbASCIIIO.cc:19
HcalDetId
Definition: HcalDetId.h:12
CastorCondObjectContainer::addValues
bool addValues(const Item &myItem)
Definition: CastorCondObjectContainer.h:98
runTauDisplay.eid
eid
Definition: runTauDisplay.py:298
CastorCalibrationQIEData::addCoder
bool addCoder(const CastorCalibrationQIECoder &fCoder)
Definition: CastorCalibrationQIEData.h:31
CastorQIEData::getCoder
const CastorQIECoder * getCoder(DetId fId) const
get QIE parameters
Definition: CastorQIEData.h:37
CastorChannelStatus::getValue
uint32_t getValue() const
Definition: CastorChannelStatus.h:68
value
Definition: value.py:1
CastorRecoParams
Definition: CastorRecoParams.h:9
CastorDbASCIIIO::getCastorSingleIntObject
bool getCastorSingleIntObject(std::istream &fInput, T &fObject, S *fCondObject)
Definition: CastorDbASCIIIO.cc:190
CastorText2DetIdConverter.h
CastorGains
Definition: CastorGains.h:18
B2GTnPMonitor_cfi.item
item
Definition: B2GTnPMonitor_cfi.py:147
CastorQIEData::addCoder
bool addCoder(const CastorQIECoder &fCoder)
Definition: CastorQIEData.h:42
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
CastorQIECoder::setSlope
void setSlope(unsigned fCapId, unsigned fRange, float fValue)
Definition: CastorQIECoder.cc:54
visDQMUpload.buf
buf
Definition: visDQMUpload.py:154
CastorChannelQuality
Definition: CastorChannelQuality.h:17
CastorDbASCIIIO::DetIdLess
Definition: CastorDbASCIIIO.cc:17
CastorQIEData::sort
void sort()
Definition: CastorQIEData.h:44
newFWLiteAna.bin
bin
Definition: newFWLiteAna.py:161
CastorDbASCIIIO.h
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
CastorCalibrationQIEData::sort
void sort()
Definition: CastorCalibrationQIEData.h:33
T
long double T
Definition: Basic3DVectorLD.h:48
CastorElectronicsMap::lookup
const DetId lookup(CastorElectronicsId fId) const
lookup the logical detid associated with the given electronics id
Definition: CastorElectronicsMap.cc:105
relativeConstraints.empty
bool empty
Definition: relativeConstraints.py:46
ewkTauDQM_cfi.channels
channels
Definition: ewkTauDQM_cfi.py:14
CastorDbASCIIIO::getCastorSingleFloatObject
bool getCastorSingleFloatObject(std::istream &fInput, T &fObject)
Definition: CastorDbASCIIIO.cc:147
CastorDbASCIIIO::getId
DetId getId(const std::vector< std::string > &items)
Definition: CastorDbASCIIIO.cc:71
CastorDbASCIIIO::CastorElectronicsIdLess
Definition: CastorDbASCIIIO.cc:37
CastorPedestalWidths
Definition: CastorPedestalWidths.h:18
S
Definition: CSCDBL1TPParametersExtended.h:16
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
CastorElectronicsMap::lookupTrigger
const DetId lookupTrigger(CastorElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
Definition: CastorElectronicsMap.cc:115
CastorQIECoder
Definition: CastorQIECoder.h:21
CastorQIECoder::offset
float offset(unsigned fCapId, unsigned fRange) const
Definition: CastorQIECoder.cc:42
trigger
Definition: HLTPrescaleTableCond.h:8
CastorElectronicsMap::mapEId2chId
bool mapEId2chId(CastorElectronicsId fElectronicsId, DetId fId)
Definition: CastorElectronicsMap.cc:216
CastorElectronicsMap
Definition: CastorElectronicsMap.h:30
CastorRecoParam::firstSample
unsigned int firstSample() const
Definition: CastorRecoParam.h:22
mps_fire.result
result
Definition: mps_fire.py:311
CastorDbASCIIIO::dumpCastorSingleIntObject
bool dumpCastorSingleIntObject(std::ostream &fOutput, const T &fObject)
Definition: CastorDbASCIIIO.cc:218
CastorSaturationCorrs
Definition: CastorSaturationCorrs.h:9
HcalDetId::ietaAbs
constexpr int ietaAbs() const
get the absolute value of the cell ieta
Definition: HcalDetId.h:148
CastorCalibrationQIEData
Definition: CastorCalibrationQIEData.h:24
CastorQIEData
Definition: CastorQIEData.h:25
HcalDetId::zside
constexpr int zside() const
get the z-side of the cell (1/-1)
Definition: HcalDetId.h:141
DeadROC_duringRun.f1
f1
Definition: DeadROC_duringRun.py:219
CastorDbASCIIIO::splitString
std::vector< std::string > splitString(const std::string &fLine)
Definition: CastorDbASCIIIO.cc:51
CastorElectronicsMap::allElectronicsId
std::vector< CastorElectronicsId > allElectronicsId() const
Definition: CastorElectronicsMap.cc:149
CastorCalibrationQIECoder
Definition: CastorCalibrationQIECoder.h:17
CastorCalibrationQIECoder::minCharges
const float * minCharges() const
Definition: CastorCalibrationQIECoder.cc:35
CastorRecoParam::samplesToAdd
unsigned int samplesToAdd() const
Definition: CastorRecoParam.h:23
CastorDbASCIIIO::dumpCastorObject
bool dumpCastorObject(std::ostream &fOutput, const T &fObject)
Definition: CastorDbASCIIIO.cc:118
CastorQIEData::getShape
const CastorQIEShape & getShape() const
get basic shape
Definition: CastorQIEData.h:35