CMS 3D CMS Logo

SectorProcessorLUT.cc
Go to the documentation of this file.
2 
3 #include <iostream>
4 #include <fstream>
5 
9 
10 SectorProcessorLUT::SectorProcessorLUT() : version_(0xFFFFFFFF) {}
11 
13 
14 void SectorProcessorLUT::read(bool pc_lut_data, int pc_lut_version) {
15  if (version_ == pc_lut_version)
16  return;
17 
18  edm::LogInfo("L1T") << "EMTF using pc_lut_ver: " << pc_lut_version << ", configured for "
19  << (pc_lut_data ? "data" : "MC");
20 
21  std::string coord_lut_dir = "";
22  if (pc_lut_version == 0)
23  coord_lut_dir = "ph_lut_v1"; // All year 2016
24  else if (pc_lut_version == 1)
25  coord_lut_dir = "ph_lut_v2"; // Beginning of 2017, improved alignment from ideal CMS geometry (MC)
26  else if (pc_lut_version == 2 && pc_lut_data)
27  coord_lut_dir = "ph_lut_v3_data"; // Update in September 2017 from ReReco alignment, data only
28  else if (pc_lut_version == 3 && pc_lut_data)
29  coord_lut_dir = "ph_lut_Run3_2022_data"; // Update in October 2022 from Run 3 2022 alignment, data only
30  else if (pc_lut_version == 2)
31  coord_lut_dir = "ph_lut_v2"; // MC still uses ideal CMS aligment
32  else if (pc_lut_version == -1 && pc_lut_data)
33  coord_lut_dir = "ph_lut_v3_data"; // September 2017 data LCT alignment, but use local CPPF LUTs for RPC
34  else if (pc_lut_version == -1)
35  coord_lut_dir = "ph_lut_v2"; // MC using ideal CMS LCT alignment, but use local CPPF LUTs for RPC
36  else
37  throw cms::Exception("L1TMuonEndCap")
38  << "Trying to use EMTF pc_lut_version = " << pc_lut_version << ", does not exist!";
39  // Will catch user trying to run with Global Tag settings on 2016 data, rather than fakeEmtfParams. - AWB 08.06.17
40 
41  std::string coord_lut_path = "L1Trigger/L1TMuon/data/emtf_luts/" + coord_lut_dir + "/";
42 
43  read_file(coord_lut_path + "ph_init_neighbor.txt", ph_init_neighbor_);
44  read_file(coord_lut_path + "ph_disp_neighbor.txt", ph_disp_neighbor_);
45  read_file(coord_lut_path + "th_init_neighbor.txt", th_init_neighbor_);
46  read_file(coord_lut_path + "th_disp_neighbor.txt", th_disp_neighbor_);
47  read_file(coord_lut_path + "th_lut_neighbor.txt", th_lut_neighbor_);
48  read_file(coord_lut_path + "th_corr_lut_neighbor.txt", th_corr_lut_neighbor_);
49 
50  std::string cppf_coord_lut_path = "L1Trigger/L1TMuon/data/cppf/"; // Coordinate LUTs actually used by CPPF
51  bool use_local_cppf_files = (pc_lut_version == -1);
52  if (use_local_cppf_files) { // More accurate coordinate transformation LUTs from Jia Fu
53  cppf_coord_lut_path = "L1Trigger/L1TMuon/data/cppf_luts/angleScale_v1/";
54  }
55 
56  read_cppf_file(cppf_coord_lut_path,
59  use_local_cppf_files); // cppf filenames are hardcoded in the function
60 
61  if (ph_init_neighbor_.size() != 2 * 6 * 61) { // [endcap_2][sector_6][chamber_61]
62  throw cms::Exception("L1TMuonEndCap") << "Expected ph_init_neighbor_ to get " << 2 * 6 * 61 << " values, "
63  << "got " << ph_init_neighbor_.size() << " values.";
64  }
65 
66  if (ph_disp_neighbor_.size() != 2 * 6 * 61) { // [endcap_2][sector_6][chamber_61]
67  throw cms::Exception("L1TMuonEndCap") << "Expected ph_disp_neighbor_ to get " << 2 * 6 * 61 << " values, "
68  << "got " << ph_disp_neighbor_.size() << " values.";
69  }
70 
71  if (th_init_neighbor_.size() != 2 * 6 * 61) { // [endcap_2][sector_6][chamber_61]
72  throw cms::Exception("L1TMuonEndCap") << "Expected th_init_neighbor_ to get " << 2 * 6 * 61 << " values, "
73  << "got " << th_init_neighbor_.size() << " values.";
74  }
75 
76  if (th_disp_neighbor_.size() != 2 * 6 * 61) { // [endcap_2][sector_6][chamber_61]
77  throw cms::Exception("L1TMuonEndCap") << "Expected th_disp_neighbor_ to get " << 2 * 6 * 61 << " values, "
78  << "got " << th_disp_neighbor_.size() << " values.";
79  }
80 
81  if (th_lut_neighbor_.size() != 2 * 6 * 61 * 128) { // [endcap_2][sector_6][chamber_61][wire_128]
82  throw cms::Exception("L1TMuonEndCap") << "Expected th_lut_neighbor_ to get " << 2 * 6 * 61 * 128 << " values, "
83  << "got " << th_lut_neighbor_.size() << " values.";
84  }
85 
86  if (th_corr_lut_neighbor_.size() != 2 * 6 * 7 * 128) { // [endcap_2][sector_6][chamber_61][strip_wire_128]
87  throw cms::Exception("L1TMuonEndCap") << "Expected th_corr_lut_neighbor_ to get " << 2 * 6 * 7 * 128 << " values, "
88  << "got " << th_corr_lut_neighbor_.size() << " values.";
89  }
90 
91  if (cppf_ph_lut_.size() !=
92  2 * 6 * 6 * 6 * 3 *
93  64) { // [endcap_2][rpc_sector_6][rpc_station_ring_6][rpc_subsector_6][rpc_roll_3][rpc_halfstrip_64]
94  throw cms::Exception("L1TMuonEndCap") << "Expected cppf_ph_lut_ to get " << 2 * 6 * 6 * 6 * 3 * 64 << " values, "
95  << "got " << cppf_ph_lut_.size() << " values.";
96  }
97 
98  if (cppf_th_lut_.size() !=
99  2 * 6 * 6 * 6 * 3) { // [endcap_2][rpc_sector_6][rpc_station_ring_6][rpc_subsector_6][rpc_roll_3]
100  throw cms::Exception("L1TMuonEndCap") << "Expected cppf_th_lut_ to get " << 2 * 6 * 6 * 6 * 3 << " values, "
101  << "got " << cppf_th_lut_.size() << " values.";
102  }
103 
104  // clct pattern convertion array from CMSSW
105  //{0.0, 0.0, -0.60, 0.60, -0.64, 0.64, -0.23, 0.23, -0.21, 0.21, 0.0}
106  // 0 0 -5 +5 -5 +5 -2 +2 -2 +2 0
107  ph_patt_corr_ = {0, 0, 5, 5, 5, 5, 2, 2, 2, 2, 0};
108  if (ph_patt_corr_.size() != 11) {
109  throw cms::Exception("L1TMuonEndCap") << "Expected ph_patt_corr_ to get " << 11 << " values, "
110  << "got " << ph_patt_corr_.size() << " values.";
111  }
112 
113  ph_patt_corr_sign_ = {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0};
114  if (ph_patt_corr_sign_.size() != 11) {
115  throw cms::Exception("L1TMuonEndCap") << "Expected ph_patt_corr_sign_ to get " << 11 << " values, "
116  << "got " << ph_patt_corr_sign_.size() << " values.";
117  }
118 
119  ph_zone_offset_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 95, 114, 132, 95, 114, 133, 98, 116, 135,
120  38, 76, 113, 39, 58, 76, 95, 114, 132, 38, 76, 113, 39, 58, 76, 95, 114, 132,
121  38, 76, 113, 38, 57, 76, 95, 113, 132, 21, 21, 23, 1, 21, 1, 21, 1, 20};
122  if (ph_zone_offset_.size() != 6 * 9) {
123  throw cms::Exception("L1TMuonEndCap") << "Expected ph_zone_offset_ to get " << 6 * 9 << " values, "
124  << "got " << ph_zone_offset_.size() << " values.";
125  }
126 
127  // start phi of each chamber in reduced precision, for zone hits,
128  // with negative offset to allow for possible chamber movement
129  ph_init_hard_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 39, 57, 76, 21, 21, 23, 21, 95, 114, 132, 95,
130  114, 133, 98, 116, 135, 95, 114, 132, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114,
131  132, 1, 21, 0, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114, 132, 1, 21, 0,
132  0, 0, 0, 0, 38, 76, 113, 38, 57, 76, 95, 113, 132, 1, 20, 0, 0, 0, 0, 0};
133  if (ph_init_hard_.size() != 5 * 16) {
134  throw cms::Exception("L1TMuonEndCap") << "Expected ph_init_hard_ to get " << 5 * 16 << " values, "
135  << "got " << ph_init_hard_.size() << " values.";
136  }
137 
138  version_ = pc_lut_version;
139  return;
140 }
141 
142 uint32_t SectorProcessorLUT::get_ph_init(int fw_endcap, int fw_sector, int pc_lut_id) const {
143  const uint32_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
144  uint32_t entry = 0;
145 
146  if (index < ph_init_neighbor_.size()) {
148  } else {
149  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
150  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id;
151  }
152  return entry;
153 }
154 
155 uint32_t SectorProcessorLUT::get_ph_disp(int fw_endcap, int fw_sector, int pc_lut_id) const {
156  const uint32_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
157  uint32_t entry = 0;
158 
159  if (index < ph_disp_neighbor_.size()) {
161  } else {
162  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
163  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id;
164  }
165  return entry;
166 }
167 
168 uint32_t SectorProcessorLUT::get_th_init(int fw_endcap, int fw_sector, int pc_lut_id) const {
169  const uint32_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
170  uint32_t entry = 0;
171 
172  if (index < th_init_neighbor_.size()) {
174  } else {
175  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
176  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id;
177  }
178  return entry;
179 }
180 
181 uint32_t SectorProcessorLUT::get_th_disp(int fw_endcap, int fw_sector, int pc_lut_id) const {
182  const uint32_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
183  uint32_t entry = 0;
184 
185  if (index < th_disp_neighbor_.size()) {
187  } else {
188  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
189  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id;
190  }
191  return entry;
192 }
193 
194 uint32_t SectorProcessorLUT::get_th_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_id) const {
195  int pc_lut_id2 = pc_lut_id;
196 
197  // Make ME1/1a the same as ME1/1b
198  if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
199  pc_lut_id2 -= 9;
200  // Make ME1/1a neighbor the same as ME1/1b
201  if (pc_lut_id2 == 15)
202  pc_lut_id2 -= 3;
203 
204  const uint32_t index = ((fw_endcap * 6 + fw_sector) * 61 + pc_lut_id2) * 128 + pc_wire_id;
205  uint32_t entry = 0;
206 
207  if (index < th_lut_neighbor_.size()) {
209  } else {
210  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
211  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id
212  << ", pc_wire_id: " << pc_wire_id;
213  }
214  return entry;
215 }
216 
217 uint32_t SectorProcessorLUT::get_th_corr_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_strip_id) const {
218  int pc_lut_id2 = pc_lut_id;
219 
220  // Make ME1/1a the same as ME1/1b
221  if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
222  pc_lut_id2 -= 9;
223  // Make ME1/1a neighbor the same as ME1/1b
224  if (pc_lut_id2 == 15)
225  pc_lut_id2 -= 3;
226 
227  if (pc_lut_id2 <= 3) {
228  pc_lut_id2 -= 0;
229  } else if (pc_lut_id2 == 12) {
230  pc_lut_id2 -= 9;
231  } else if (16 <= pc_lut_id2 && pc_lut_id2 < 19) {
232  pc_lut_id2 -= 12;
233  } else {
234  edm::LogError("L1T") << "get_th_corr_lut(): out of range pc_lut_id: " << pc_lut_id;
235  }
236 
237  const uint32_t index = ((fw_endcap * 6 + fw_sector) * 7 + pc_lut_id2) * 128 + pc_wire_strip_id;
238  uint32_t entry = 0;
239 
240  if (index < th_corr_lut_neighbor_.size()) {
242  } else {
243  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
244  << ", fw_sector: " << fw_sector << ", pc_lut_id: " << pc_lut_id
245  << ", pc_wire_strip_id: " << pc_wire_strip_id;
246  }
247  return entry;
248 }
249 
251  const uint32_t index = pattern;
252  uint32_t entry = 0;
253 
254  if (index < ph_patt_corr_.size()) {
255  entry = ph_patt_corr_.at(index);
256  } else {
257  edm::LogError("L1T") << "Could not retrieve entry from LUT. pattern: " << pattern;
258  }
259  return entry;
260 }
261 
263  const uint32_t index = pattern;
264  uint32_t entry = 0;
265 
266  if (index < ph_patt_corr_sign_.size()) {
268  } else {
269  edm::LogError("L1T") << "Could not retrieve entry from LUT. pattern: " << pattern;
270  }
271  return entry;
272 }
273 
274 uint32_t SectorProcessorLUT::get_ph_zone_offset(int pc_station, int pc_chamber) const {
275  const uint32_t index = pc_station * 9 + pc_chamber;
276  uint32_t entry = 0;
277 
278  if (index < ph_zone_offset_.size()) {
280  } else {
281  edm::LogError("L1T") << "Could not retrieve entry from LUT. pc_station: " << pc_station
282  << ", pc_chamber: " << pc_chamber;
283  }
284  return entry;
285 }
286 
287 uint32_t SectorProcessorLUT::get_ph_init_hard(int fw_station, int fw_cscid) const {
288  const uint32_t index = fw_station * 16 + fw_cscid;
289  uint32_t entry = 0;
290 
291  if (index < ph_init_hard_.size()) {
292  entry = ph_init_hard_.at(index);
293  } else {
294  edm::LogError("L1T") << "Could not retrieve entry from LUT. fw_station: " << fw_station
295  << ", fw_cscid: " << fw_cscid;
296  }
297  return entry;
298 }
299 
301  int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const {
302  uint32_t iendcap = (rpc_region == -1) ? 1 : 0;
303  uint32_t isector = (rpc_sector - 1);
304  uint32_t istationring = (rpc_station >= 3) ? ((rpc_station - 3) * 2 + (rpc_ring - 2) + 2) : (rpc_station - 1);
305  uint32_t isubsector = (rpc_subsector - 1);
306  uint32_t iroll = (rpc_roll - 1);
307  return ((((iendcap * 6 + isector) * 6 + istationring) * 6 + isubsector) * 3 + iroll);
308 }
309 
310 uint32_t SectorProcessorLUT::get_cppf_ph_lut(int rpc_region,
311  int rpc_sector,
312  int rpc_station,
313  int rpc_ring,
314  int rpc_subsector,
315  int rpc_roll,
316  int halfstrip,
317  bool is_neighbor) const {
318  const uint32_t th_index = get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
319  const uint32_t ph_index = (th_index * 64) + (halfstrip - 1);
320  uint32_t ph = 0;
321 
322  if (ph_index < cppf_ph_lut_.size()) {
323  ph = cppf_ph_lut_.at(ph_index);
324  } else {
325  edm::LogError("L1T") << "Could not retrieve entry from LUT. rpc_region: " << rpc_region
326  << ", rpc_sector: " << rpc_sector << ", rpc_station: " << rpc_station
327  << ", rpc_ring: " << rpc_ring << ", rpc_subsector: " << rpc_subsector
328  << ", rpc_roll: " << rpc_roll << ", halfstrip: " << halfstrip
329  << ", is_neighbor: " << is_neighbor;
330  }
331 
332  if (!is_neighbor && rpc_subsector == 2)
333  ph += 900;
334  return ph;
335 }
336 
338  int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const {
339  const uint32_t th_index = get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
340  uint32_t th = 0;
341 
342  if (th_index < cppf_th_lut_.size()) {
343  th = cppf_th_lut_.at(th_index);
344  } else {
345  edm::LogError("L1T") << "Could not retrieve entry from LUT. rpc_region: " << rpc_region
346  << ", rpc_sector: " << rpc_sector << ", rpc_station: " << rpc_station
347  << ", rpc_ring: " << rpc_ring << ", rpc_subsector: " << rpc_subsector
348  << ", rpc_roll: " << rpc_roll;
349  }
350  return th;
351 }
352 
353 void SectorProcessorLUT::read_file(const std::string& filename, std::vector<uint32_t>& vec) {
354  vec.clear();
355 
356  std::ifstream infile;
357  infile.open(edm::FileInPath(filename).fullPath().c_str());
358 
359  int buf;
360  while (infile >> buf) {
361  buf = (buf == -999) ? 0 : buf;
362  vec.push_back(buf);
363  }
364  infile.close();
365 }
366 
368  std::vector<uint32_t>& vec1,
369  std::vector<uint32_t>& vec2,
370  bool local) {
371  auto get_rpc_region = [](uint32_t id) { return (static_cast<int>((id >> 0) & 0X3) + (-1)); };
372  auto get_rpc_sector = [](uint32_t id) { return (static_cast<int>((id >> 7) & 0XF) + (1)); };
373  auto get_rpc_ring = [](uint32_t id) { return (static_cast<int>((id >> 2) & 0X7) + (1)); };
374  auto get_rpc_station = [](uint32_t id) { return (static_cast<int>((id >> 5) & 0X3) + (1)); };
375  auto get_rpc_subsector = [](uint32_t id) { return (static_cast<int>((id >> 12) & 0X7) + (1)); };
376  auto get_rpc_roll = [](uint32_t id) { return (static_cast<int>((id >> 15) & 0X7) + (0)); };
377 
378  std::vector<std::string> cppf_filenames = {
379  "angleScale_RPC_CPPFp1.txt",
380  "angleScale_RPC_CPPFp2.txt",
381  "angleScale_RPC_CPPFp3.txt",
382  "angleScale_RPC_CPPFp4.txt",
383  "angleScale_RPC_CPPFn1.txt",
384  "angleScale_RPC_CPPFn2.txt",
385  "angleScale_RPC_CPPFn3.txt",
386  "angleScale_RPC_CPPFn4.txt",
387  };
388 
389  vec1.clear();
390  vec2.clear();
391  vec1.resize(2 * 6 * 6 * 6 * 3 * 64, 0);
392  vec2.resize(2 * 6 * 6 * 6 * 3, 0);
393 
394  for (size_t i = 0; i < cppf_filenames.size(); ++i) {
395  std::ifstream infile;
396  infile.open(edm::FileInPath(filename + cppf_filenames.at(i)).fullPath().c_str());
397 
398  // std::cout << "\n\nOpening CPPF LUT file " << cppf_filenames.at(i) << std::endl;
399 
400  int buf1, buf2, buf3, buf4, buf5, buf6;
401  // Special variables for transforming centrally-provided CPPF LUTs
402  int buf1_prev = 0, buf2_prev = 0, halfstrip_prev = 0; // Values from previous line in file
403  int line_num = 0; // Line number in file
404  int count_dir = -1; // Direction of half-strip counting: +1 is up, -1 is down
405  int dStrip = 0; // Offset for half-strip from full strip
406  while ((infile >> buf1) && (infile >> buf2) && (infile >> buf3) && (infile >> buf4) && (infile >> buf5) &&
407  (infile >> buf6)) {
408  if ((line_num % 192) == 191)
409  line_num += 1; // Gap in central files vs. Jia Fu's files
410  line_num += 1;
411  // On roughly every-other line, files in L1Trigger/L1TMuon/data/cppf have 0 in the first three columns
412  // Skips a "0 0 0" line once every 192 lines
413  if ((line_num % 2) == 1) {
414  buf1_prev = buf1;
415  buf2_prev = buf2;
416  }
417 
418  if (local && (buf1 == 0 || buf2 == 0)) {
419  throw cms::Exception("L1TMuonEndCap") << "Expected non-0 values, got buf1 = " << buf1 << ", buf2 = " << buf2;
420  }
421  if (!local && (buf1_prev == 0 || buf2_prev == 0)) {
422  throw cms::Exception("L1TMuonEndCap")
423  << "Expected non-0 values, got buf1_prev = " << buf1_prev << ", buf2_prev = " << buf2_prev;
424  }
425 
426  uint32_t id = (local ? buf1 : buf1_prev);
427  int32_t rpc_region = get_rpc_region(id);
428  int32_t rpc_sector = get_rpc_sector(id);
429  int32_t rpc_station = get_rpc_station(id);
430  int32_t rpc_ring = get_rpc_ring(id);
431  int32_t rpc_subsector = get_rpc_subsector(id);
432  int32_t rpc_roll = get_rpc_roll(id);
433 
434  // Offset into halfstrips from centrally-provided LUTs
435  if (buf2_prev * 2 > halfstrip_prev + 8 ||
436  buf2_prev * 2 < halfstrip_prev - 8) { // Starting a new series of strips
437  if (buf2_prev == 1)
438  count_dir = +1; // Starting from a low number, counting up
439  else
440  count_dir = -1; // Starting from a high number, counting down
441  }
442  if (count_dir == -1)
443  dStrip = (buf2_prev * 2 == halfstrip_prev ? 1 : 0);
444  if (count_dir == +1)
445  dStrip = (buf2_prev * 2 == halfstrip_prev + 2 ? 1 : 0);
446  if (buf2_prev * 2 < halfstrip_prev - 8 && buf2_prev == 1)
447  dStrip = 1;
448 
449  //uint32_t strip = buf2;
450  uint32_t halfstrip =
451  (local ? buf2
452  : buf2_prev * 2 -
453  dStrip); // I modified the local text files to use 'halfstrip' instead of 'strip' in column 2
454  halfstrip_prev = halfstrip;
455 
456  uint32_t ph = buf5;
457  uint32_t th = buf6;
458 
459  const uint32_t th_index = get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
460  const uint32_t ph_index = (th_index * 64) + (halfstrip - 1);
461 
462  // std::cout << id << " " << rpc_region << " " << rpc_sector << " " << rpc_station << " " << rpc_ring << " "
463  // << rpc_subsector << " " << rpc_roll << " " << halfstrip << " " << th_index << " " << ph_index << std::endl;
464 
465  vec1.at(ph_index) = ph;
466  if (halfstrip == 1)
467  vec2.at(th_index) = th;
468 
469  // Fill gap in centrally-provided LUTs once every 192 lines
470  if (!local && (line_num % 192) == 191)
471  vec1.at(ph_index + 1) = ph;
472 
473  } // End while ((infile >> buf1) && ... && (infile >> buf6))
474  infile.close();
475  } // End loop over CPPF LUT files
476 }
uint32_t get_ph_init_hard(int fw_station, int fw_cscid) const
uint32_t get_ph_patt_corr_sign(int pattern) const
uint32_t get_th_corr_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_strip_id) const
uint32_t get_th_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_id) const
std::vector< uint32_t > ph_zone_offset_
std::vector< uint32_t > cppf_ph_lut_
void read(bool pc_lut_data, int pc_lut_version)
std::vector< uint32_t > th_corr_lut_neighbor_
std::vector< uint32_t > cppf_th_lut_
Log< level::Error, false > LogError
std::vector< uint32_t > th_disp_neighbor_
uint32_t get_ph_patt_corr(int pattern) const
std::vector< uint32_t > ph_patt_corr_
std::vector< double > vec1
Definition: HCALResponse.h:15
std::vector< uint32_t > ph_init_hard_
uint32_t get_ph_zone_offset(int pc_station, int pc_chamber) const
uint32_t get_cppf_th_lut(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const
std::vector< uint32_t > ph_patt_corr_sign_
Log< level::Info, false > LogInfo
uint32_t get_cppf_lut_id(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const
void read_cppf_file(const std::string &filename, std::vector< uint32_t > &vec1, std::vector< uint32_t > &vec2, bool local)
std::vector< uint32_t > th_init_neighbor_
uint32_t get_cppf_ph_lut(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll, int halfstrip, bool is_neighbor) const
uint32_t get_ph_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
uint32_t get_ph_init(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_disp_neighbor_
uint32_t get_th_init(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_init_neighbor_
void read_file(const std::string &filename, std::vector< uint32_t > &vec)
std::vector< vec1 > vec2
Definition: HCALResponse.h:16
uint32_t get_th_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > th_lut_neighbor_