HGCal Test Beam  03a93d6239a951948e06fb3ef8dae4cbdebfad30
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
HGCalCondObjectTextIO.cc
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <string.h>
3 #include <sstream>
4 #include "HGCal/CondObjects/interface/HGCalCondObjectTextIO.h"
5 #include "HGCal/DataFormats/interface/HGCalTBDetId.h"
6 #include "HGCal/DataFormats/interface/HGCalTBElectronicsId.h"
7 
8 static HGCalTBDetId tb_detid_load(const char* buffer, int& ptr)
9 {
10  int v1, v2, v3, v4, v5, v6;
11  int found = sscanf(buffer, "%d %d %d %d %d %d %n ", &v1, &v2, &v3, &v4, &v5, &v6, &ptr);
12  if (found == 6) {
13  return HGCalTBDetId(abs(v1), v2, v3, v4, v5, v6);
14  } else return HGCalTBDetId(0);
15 }
16 static void tb_detid_store(HGCalTBDetId id, FILE* f)
17 {
18  fprintf(f, "%08x %5d %9d %9d %3d %3d %4d ", id.rawId(), id.layer()*id.zside(), id.sensorIU(), id.sensorIV(), id.iu(), id.iv(), id.cellType());
19 }
20 
21 bool HGCalCondObjectTextIO::load(const std::string& filename, HGCalCondObjectContainer<float>& cont)
22 {
23  FILE* f = fopen(filename.c_str(), "r");
24  if (f == 0) {
25  fprintf(stderr, "Unable to open '%s'\n", filename.c_str());
26  return false;
27  }
28 
29  char buffer[100];
30  // first line is the scheme code
31  uint64_t code(0);
32  buffer[0] = 0;
33  fgets(buffer, 100, f);
34  if (sscanf(buffer, "SCHEME_CODE %lu", &code) != 1) {
35  fprintf(stderr, "Expected 'SCHEME_CODE <value>' on first line of file\n");
36  fclose(f);
37  return false;
38  }
39  // clear the container
40  cont = HGCalCondObjectContainer<float>(p_scheme, code);
41 
42  while (!feof(f)) {
43  buffer[0] = 0;
44  fgets(buffer, 100, f);
45  // trim comments
46  char* p_comment = index(buffer, '#');
47  if (p_comment != 0) *p_comment = 0;
48  // try to unpack...
49  int ptr, dummy;
50  // remove the first column
51  const char* process = buffer;
52  int found = sscanf(process, "%d %n ", &dummy, &ptr);
53  if (found == 1) {
54  process += ptr;
55  } else continue;
56  // get the detid
57  HGCalTBDetId id = tb_detid_load(process, ptr);
58  if (!id.null()) {
59  process += ptr;
60  float value = atof(process);
61  cont.set(id, value);
62  }
63  }
64  fclose(f);
65  return true;
66 }
67 bool HGCalCondObjectTextIO::store(const std::string& filename, const HGCalCondObjectContainer<float>& cont)
68 {
69  FILE* f = fopen(filename.c_str(), "w");
70  if (f == 0) return false;
71 
72  fprintf(f, "SCHEME_CODE %lu\n", cont.schemeCode());
73  fprintf(f, "# CODE LAYER SENSOR_IU SENSOR_IV IU IV TYPE VALUE\n");
74  for (size_t i = 0; i < cont.size(); i++) {
75  if (cont.get(i).id.null()) continue;
76  tb_detid_store(HGCalTBDetId(cont.get(i).id), f);
77  fprintf(f, " %.6g\n", cont.get(i).value);
78  }
79  fclose(f);
80  return true;
81 }
82 
83 
84 bool HGCalCondObjectTextIO::load(const std::string& filename, HGCalElectronicsMap& emap)
85 {
86  FILE* f = fopen(filename.c_str(), "r");
87  if (f == 0) {
88  fprintf(stderr, "Unable to open '%s'\n", filename.c_str());
89  return false;
90  }
91 
92  char buffer[100];
93  while (!feof(f)) {
94  buffer[0] = 0;
95  fgets(buffer, 100, f);
96  // trim comments
97  char* p_comment = index(buffer, '#');
98  if (p_comment != 0) *p_comment = 0;
99  // try to unpack...
100  int ptr;
101 
102  // electronics id sections
103  int iskiroc, icell;
104  const char* process = buffer;
105  int found = sscanf(process, "%d %d %n", &iskiroc, &icell, &ptr);
106  if (found == 2) {
107  process += ptr;
108  } else continue;
109  // get the detid
110  HGCalTBDetId id = tb_detid_load(process, ptr);
111  if (!id.null()) {
112  HGCalTBElectronicsId eid(iskiroc, icell);
113  emap.insert(eid.rawId(), id);
114  }
115  }
116  fclose(f);
117  return true;
118 }
119 bool HGCalCondObjectTextIO::store(const std::string& filename, const HGCalElectronicsMap& emap)
120 {
121  FILE* f = fopen(filename.c_str(), "w");
122  if (f == 0) return false;
123 
124  fprintf(f, "# SKIROC CHAN | LAYER SENSOR_IU SENSOR_IV IU IV TYPE \n");
125  for (size_t i = 0; i < emap.size(); i++) {
126  HGCalTBElectronicsId eid(emap.eidAt(i));
127  HGCalTBDetId did(emap.didAt(i));
128  fprintf(f, " %6d %4d %5d %9d %9d %3d %3d %4d\n", eid.iskiroc(), eid.ichan(),
129  did.layer()*did.zside(), did.sensorIU(), did.sensorIV(), did.iu(), did.iv(), did.cellType());
130  }
131 
132 
133  fclose(f);
134  return true;
135 }
bool store(const std::string &filename, const HGCalCondObjectContainer< float > &)
saves condition to file
bool load(const std::string &filename, HGCalCondObjectContainer< float > &)
load conditions from file
void insert(uint32_t, DetId did)
const Item * get(DetId id) const
uint32_t eidAt(size_t i) const
uint32_t rawId() const
DetId didAt(size_t i) const
void set(DetId id, const Payload &value)
provides the conversion between electronics Id to DetId