ATLAS Offline Software
EvenPhiCMA.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "GaudiKernel/MsgStream.h"
7 
11 
12 #include <fstream>
13 #include <stdexcept>
14 
15 using namespace RPC_CondCabling;
16 
20 
21 bool EvenPhiCMA::inversion() const { return m_inversion; }
22 
24  m_inversion = false;
26 
27  // Set the memory for storing the cabling data
28  if (!pivot_station()) {
29  m_pivot_rpc_read = 1;
31  }
32  if (!lowPt_station()) {
33  m_lowPt_rpc_read = 1;
35  }
36  if (!highPt_station()) {
39  }
40 }
41 
43  : CMAparameters(cma),
44  m_pivot_WORs (cma.pivot_WORs()),
45  m_lowPt_WORs (cma.lowPt_WORs()),
46  m_highPt_WORs (cma.highPt_WORs()),
47  m_inversion (cma.inversion())
48 {
50 }
51 
52 EvenPhiCMA::~EvenPhiCMA() = default;
53 
55  if (this != &cma) {
57  m_pivot_WORs.clear();
58  m_pivot_WORs = cma.pivot_WORs();
59  m_lowPt_WORs.clear();
60  m_lowPt_WORs = cma.lowPt_WORs();
61  m_highPt_WORs.clear();
62  m_highPt_WORs = cma.highPt_WORs();
63 
64  m_inversion = cma.inversion();
65  }
66  return *this;
67 }
68 
70  if (pivot_station()) // Check and connect strips with Pivot matrix channels
71  {
73  WiredOR* wor = (*found).second;
74 
77 
78  int start = pivot_start_st();
79  int stop = pivot_stop_st();
80  int max_st = wor->give_max_phi_strips();
81 
82  int first_ch_cabled = 32;
83  int last_ch_cabled = -1;
84 
85  std::vector<int> multiplicity(max_st);
86 
87  for (int i = 0; i < m_pivot_rpc_read; ++i) {
88  const RPCchamber* rpc = wor->connected_rpc(i);
89  int rpc_st = rpc->phi_strips();
90  int cham = rpc->number();
91  int local_strip = start - (max_st - rpc_st);
92  int final_strip = stop - (max_st - rpc_st);
93 
94  int chs = (id().Ixx_index() == 0) ? pivot_channels - abs(stop - start) - 1 : 0;
95  chs += (local_strip >= 0) ? 0 : abs(local_strip) + 1;
96  if (chs >= pivot_channels) {
97  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("Pivot");
98  return false;
99  }
100  if (chs <= first_ch_cabled) first_ch_cabled = chs;
101 
102  if (local_strip <= 0) local_strip = 1;
103  do {
104  if (chs == pivot_channels) {
105  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("Pivot");
106  return false;
107  }
108  if (local_strip > 0 && local_strip <= rpc_st) {
109  if (rpc->ijk_phiReadout() == 1) {
110  m_pivot[i][0][chs] = cham * 100 + local_strip - 1;
111  m_pivot[i][1][chs] = 10000 + cham * 100 + local_strip - 1;
112  } else {
113  m_pivot[i][1][chs] = cham * 100 + local_strip - 1;
114  m_pivot[i][0][chs] = 10000 + cham * 100 + local_strip - 1;
115  }
116  multiplicity[local_strip - 1 + (max_st - rpc_st)] = 1;
117  }
118  ++chs;
119  } while (++local_strip <= final_strip);
120 
121  if (chs - 1 >= last_ch_cabled) last_ch_cabled = chs - 1;
122  if (chs > m_active_pivot_chs) m_active_pivot_chs = chs;
123  }
124  wor->add_even_read_mul(multiplicity);
125 
126  // Set first and last connectors code
127  int code = pivot_station() * 100000 + 1 * 100000000;
128  int ch = 0;
129 
130  // first_ch_cabled and last_ch_cabled are initialized with "out-of-bound" values
131  // of the m_pivot array; proper values should be assigned during the loop;
132  // the init values though are "misused" for certain conditions, too, therefore
133  // they cannot be changed; but the following if should NEVER fire.
134  if (first_ch_cabled >= pivot_channels || last_ch_cabled < 0) {
135  std::ostringstream disp;
136  disp << "EvenPhiCMA::cable_CMA_channels - out of bound array indices (m_pivot)! Values:"
137  << first_ch_cabled << ", " << last_ch_cabled
138  << " at " << __FILE__ << ":" << __LINE__ ;
139  throw std::runtime_error(disp.str());
140  }
141 
142  for (ch = 0; ch < m_pivot_rpc_read; ++ch)
143  if (m_pivot[ch][0][first_ch_cabled] >= 0) break;
144  if (ch == m_pivot_rpc_read) --ch;
145  m_first_pivot_code = code + m_pivot[ch][0][first_ch_cabled];
146 
147  for (ch = 0; ch < m_pivot_rpc_read; ++ch)
148  if (m_pivot[ch][0][last_ch_cabled] >= 0) break;
149  if (ch == m_pivot_rpc_read) --ch;
150  m_last_pivot_code = code + m_pivot[ch][0][last_ch_cabled];
151  }
152 
153  if (lowPt_station() && lowPt_start_ch() != -1) { // Check and connect strips with Low Pt matrix channels
154  for (int i = lowPt_start_ch(); i <= lowPt_stop_ch(); ++i) {
156  m_lowPt_rpc_read += (*found).second->RPCacquired();
157  }
158 
160 
161  int start = lowPt_start_st();
162  int stop = lowPt_stop_st();
163  int max_st = get_max_strip_readout(lowPt_station());
164 
165  int first_ch_cabled = 64;
166  int last_ch_cabled = -1;
167 
168  int r = 0;
169 
170  for (int w = lowPt_start_ch(); w <= lowPt_stop_ch(); ++w) {
172  WiredOR* wor = (*found).second;
173  std::vector<int> multiplicity(wor->give_max_phi_strips(),0);
174 
175  for (int i = 0; i < wor->RPCacquired(); ++i) {
176  const RPCchamber* rpc = wor->connected_rpc(i);
177 
178  int rpc_st = rpc->phi_strips();
179  int cham = rpc->number();
180  int local_strip = start - (max_st - rpc_st);
181  int final_strip = stop - (max_st - rpc_st);
182 
183  int chs = (id().Ixx_index() == 0) ? 40 - max_st / 2 : 0;
184 
185  bool isBME = false;
186  char E = rpc->chamber_name()[2];
187  // E='A';
188  if (E == 'E') isBME = true;
189 
190  if (isBME && id().Ixx_index() == 1) {
191  // ok for sector 24 (side C [and side A], cm1, ijk=2 and 3)
192  chs = 8;
193  local_strip = 1;
194  final_strip = 32;
195  }
196  if (isBME && id().Ixx_index() == 0) {
197  // ok for sector 24 (side C [and side A], cm0, ijk=2 and 3)
198  chs = 24;
199  local_strip = 1;
200  final_strip = 32;
201  }
202 
203  chs += (local_strip >= 0) ? 0 : abs(local_strip) + 1;
204 
205  if (chs >= confirm_channels) {
206  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("Low Pt");
207  return false;
208  }
209  if (chs <= first_ch_cabled) first_ch_cabled = chs;
210 
211  if (local_strip <= 0) local_strip = 1;
212  do {
213  if (chs == confirm_channels) {
214  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("Low Pt");
215  return false;
216  }
217  if (local_strip > 0 && local_strip <= rpc_st) {
218  if (rpc->ijk_phiReadout() == 1) {
219  m_lowPt[r][0][chs] = cham * 100 + local_strip - 1;
220  m_lowPt[r][1][chs] = 10000 + cham * 100 + local_strip - 1;
221  } else {
222  m_lowPt[r][1][chs] = cham * 100 + local_strip - 1;
223  m_lowPt[r][0][chs] = 10000 + cham * 100 + local_strip - 1;
224  }
225  if (max_st > wor->give_max_phi_strips()) {
226  multiplicity[local_strip - 1] = 1;
227  } else {
228  multiplicity[local_strip - 1 + (max_st - rpc_st)] = 1;
229  }
230  }
231  ++chs;
232  } while (++local_strip <= final_strip);
233 
234  ++r;
235  if (chs - 1 >= last_ch_cabled) last_ch_cabled = chs - 1;
236  if (chs > m_active_lowPt_chs) m_active_lowPt_chs = chs;
237  }
238 
239  wor->add_even_read_mul(multiplicity);
240 
241  // Set first and last connectors code
242  int code = lowPt_station() * 100000 + 1 * 100000000;
243  int ch = 0;
244 
245  // first_ch_cabled and last_ch_cabled are initialized with "out-of-bound" values
246  // of the m_lowPt array; proper values should be assigned during the loop;
247  // the init values though are "misused" for certain conditions, too, therefore
248  // they cannot be changed; but the following if should NEVER fire.
249  if (first_ch_cabled >= confirm_channels || last_ch_cabled < 0) {
250  std::ostringstream disp;
251  disp << "EvenPhiCMA::cable_CMA_channels - out of bound array indices (m_lowPt)! Values:"
252  << first_ch_cabled << ", " << last_ch_cabled
253  << " at " << __FILE__ << ":" << __LINE__ ;
254  throw std::runtime_error(disp.str());
255  }
256 
257  for (ch = 0; ch < m_lowPt_rpc_read; ++ch)
258  if (m_lowPt[ch][0][first_ch_cabled] >= 0) break;
259  if (ch == m_lowPt_rpc_read) --ch;
260  m_first_lowPt_code = code + m_lowPt[ch][0][first_ch_cabled];
261 
262  for (ch = 0; ch < m_lowPt_rpc_read; ++ch)
263  if (m_lowPt[ch][0][last_ch_cabled] >= 0) break;
264  if (ch == m_lowPt_rpc_read) --ch;
265  m_last_lowPt_code = code + m_lowPt[ch][0][last_ch_cabled];
266  }
267  }
268 
269  if (highPt_station() && highPt_start_ch() != -1) { // Check and connect strips with High Pt matrix channels
270  for (int i = highPt_start_ch(); i <= highPt_stop_ch(); ++i) {
272  m_highPt_rpc_read += (*found).second->RPCacquired();
273  }
274 
276 
277  int start = highPt_start_st();
278  int stop = highPt_stop_st();
279  int max_st = get_max_strip_readout(highPt_station());
280 
281  int first_ch_cabled = 64;
282  int last_ch_cabled = -1;
283 
284  int r = 0;
285 
286  for (int w = highPt_start_ch(); w <= highPt_stop_ch(); ++w) {
288  WiredOR* wor = (*found).second;
289  std::vector<int> multiplicity(wor->give_max_phi_strips(),0);
290 
291 
292  for (int i = 0; i < wor->RPCacquired(); ++i) {
293  const RPCchamber* rpc = wor->connected_rpc(i);
294 
295  int rpc_st = rpc->phi_strips();
296  int cham = rpc->number();
297  int local_strip = start - (max_st - rpc_st);
298  int final_strip = stop - (max_st - rpc_st);
299 
300  int chs = (id().Ixx_index() == 0) ? 40 - max_st / 2 : 0;
301 
302  char L = rpc->chamber_name()[2];
303  int sEta = rpc->stationEta();
304 
305  bool isBOE = false;
306  if (abs(sEta) == 8 && L == 'L') isBOE = true;
307  if (isBOE && id().Ixx_index() == 1) {
308  chs = 0;
309  local_strip = 13;
310  final_strip = 64;
311  }
312 
313  if (isBOE && id().Ixx_index() == 0) {
314  chs = 4;
315  final_strip = 52;
316  local_strip = 1;
317  }
318 
319  chs += (local_strip >= 0) ? 0 : abs(local_strip) + 1;
320  if (chs >= confirm_channels) {
321  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("High Pt");
322  return false;
323  }
324  if (chs <= first_ch_cabled) first_ch_cabled = chs;
325 
326  if (local_strip <= 0) local_strip = 1;
327  do {
328  if (chs == confirm_channels) {
329  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << noMoreChannels("High Pt");
330  return false;
331  }
332  bool skipChannel = false;
333  if (isBOE && id().Ixx_index() == 1 && ((chs > 3 && chs < 8) || (chs > 39 && chs < 44))) skipChannel = true;
334  if (isBOE && id().Ixx_index() == 0 && ((chs > 19 && chs < 24) || (chs > 55 && chs < 60))) skipChannel = true;
335  if (skipChannel) {
336  --local_strip;
337  } else {
338  if (local_strip > 0 && local_strip <= rpc_st) {
339  if (rpc->ijk_phiReadout() == 1) {
340  m_highPt[r][0][chs] = cham * 100 + local_strip - 1;
341  m_highPt[r][1][chs] = 10000 + cham * 100 + local_strip - 1;
342  } else {
343  m_highPt[r][1][chs] = cham * 100 + local_strip - 1;
344  m_highPt[r][0][chs] = 10000 + cham * 100 + local_strip - 1;
345  }
346  }
347  if (max_st > wor->give_max_phi_strips()) {
348  multiplicity[local_strip - 1] = 1;
349  } else {
350  multiplicity[local_strip - 1 + (max_st - rpc_st)] = 1;
351  }
352  }
353  ++chs;
354  } while (++local_strip <= final_strip);
355 
356  ++r;
357  if (chs - 1 >= last_ch_cabled) last_ch_cabled = chs - 1;
358  if (chs > m_active_highPt_chs) m_active_highPt_chs = chs;
359  }
360 
361  wor->add_even_read_mul(multiplicity);
362 
363  // Set first and last connectors code
364  int code = highPt_station() * 100000 + 1 * 100000000;
365  int ch = 0;
366 
367  // first_ch_cabled and last_ch_cabled are initialized with "out-of-bound" values
368  // of the m_highPt array; proper values should be assigned during the loop;
369  // the init values though are "misused" for certain conditions, too, therefore
370  // they cannot be changed; but the following if should NEVER fire.
371  if (first_ch_cabled >= confirm_channels || last_ch_cabled < 0) {
372  std::ostringstream disp;
373  disp << "EvenPhiCMA::cable_CMA_channels - out of bound array indices (m_highPt)! Values:"
374  << first_ch_cabled << ", " << last_ch_cabled
375  << " at " << __FILE__ << ":" << __LINE__ ;
376  throw std::runtime_error(disp.str());
377  }
378 
379  for (ch = 0; ch < m_highPt_rpc_read; ++ch)
380  if (m_highPt[ch][0][first_ch_cabled] >= 0) break;
381  if (ch == m_highPt_rpc_read) --ch;
382  m_first_highPt_code = code + m_highPt[ch][0][first_ch_cabled];
383 
384  for (ch = 0; ch < m_highPt_rpc_read; ++ch)
385  if (m_highPt[ch][0][last_ch_cabled] >= 0) break;
386  if (ch == m_highPt_rpc_read) --ch;
387  m_last_highPt_code = code + m_highPt[ch][0][last_ch_cabled];
388  }
389  }
390 
391  return true;
392 }
393 
395  if (pivot_station()) // Check and connect Pivot plane chambers
396  {
397  for (int i = pivot_start_ch(); i <= pivot_stop_ch(); ++i) {
398  WiredOR* wor = setup.find_wor(pivot_station(), i);
399  if (wor) {
400  wor->add_cma(this);
401  m_pivot_WORs.insert(WORlink::value_type(i, wor));
402  } else {
403  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_connection_error("WOR", i);
404  return false;
405  }
406  }
407  }
408  if (lowPt_station()) // Check and connect Low Pt plane chambers
409  {
410  std::list<const EtaCMA*> CMAs = setup.find_eta_CMAs_in_PAD(id().PAD_index());
411  if (CMAs.empty()) {
412  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << "have no Eta matrix into PAD!";
413  return false;
414  }
415 
416  // get last CMA fake
417  const EtaCMA* cmaFake = CMAs.back();
418 
419  // remove fake CMAs
420  std::list<const EtaCMA*>::iterator cm = CMAs.begin();
421  while (cm != CMAs.end()) {
422  if (!(*cm)->pivot_station() || (*cm)->lowPt_start_ch() == -1) cm = CMAs.erase(cm);
423  ++cm;
424  }
425 
426  int start_ch = (CMAs.size()) ? CMAs.front()->lowPt_start_ch() : cmaFake->lowPt_start_ch();
427  int stop_ch = (CMAs.size()) ? CMAs.back()->lowPt_stop_ch() : cmaFake->lowPt_stop_ch();
428 
429  if (start_ch != -1 && stop_ch != -1) {
430  RPCchamber* start = setup.find_chamber(lowPt_station(), start_ch);
431  RPCchamber* stop = setup.find_chamber(lowPt_station(), stop_ch);
432 
433  if (start->readoutWORs().empty()) {
434  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_wor_readout(start->number(), lowPt_station());
435  return false;
436  }
437  if (stop->readoutWORs().empty()) {
438  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_wor_readout(stop->number(), lowPt_station());
439  return false;
440  }
441 
442  m_lowPt_start_ch = start->readoutWORs().front()->number();
443  m_lowPt_stop_ch = stop->readoutWORs().front()->number();
444  int max = 0;
445 
446  for (int i = lowPt_start_ch(); i <= lowPt_stop_ch(); ++i) {
447  WiredOR* wor = setup.find_wor(lowPt_station(), i);
448  if (wor) {
449  wor->add_cma(this);
450  m_lowPt_WORs.insert(WORlink::value_type(i, wor));
451  if (wor->give_max_phi_strips() > max) max = wor->give_max_phi_strips();
452  } else {
453  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_connection_error("WOR", i);
454  return false;
455  }
456  }
457 
459  }
460  }
461  if (highPt_station()) // Check and connect High Pt plane chambers
462  {
463  std::list<const EtaCMA*> CMAs = setup.find_eta_CMAs_in_PAD(id().PAD_index());
464  if (CMAs.empty()) {
465  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << "have no Eta matrix into PAD!";
466  return false;
467  }
468 
469  // get last CMA fake
470  const EtaCMA* cmaFake = CMAs.back();
471 
472  // remove fake CMAs
473  std::list<const EtaCMA*>::iterator cm = CMAs.begin();
474  while (cm != CMAs.end()) {
475  if (!(*cm)->pivot_station() || (*cm)->highPt_start_ch() == -1) cm = CMAs.erase(cm);
476  ++cm;
477  }
478 
479  int start_ch = (CMAs.size()) ? CMAs.front()->highPt_start_ch() : cmaFake->highPt_start_ch();
480  int stop_ch = (CMAs.size()) ? CMAs.back()->highPt_stop_ch() : cmaFake->highPt_stop_ch();
481 
482  if (start_ch != -1 && stop_ch != -1) {
483  RPCchamber* start = setup.find_chamber(highPt_station(), start_ch);
484  RPCchamber* stop = setup.find_chamber(highPt_station(), stop_ch);
485 
486  if (start->readoutWORs().empty()) {
487  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_wor_readout(start->number(), highPt_station());
488  return false;
489  }
490  if (stop->readoutWORs().empty()) {
491  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_wor_readout(stop->number(), highPt_station());
492  return false;
493  }
494 
495  m_highPt_start_ch = start->readoutWORs().front()->number();
496  m_highPt_stop_ch = stop->readoutWORs().front()->number();
497  int max = 0;
498 
499  for (int i = highPt_start_ch(); i <= highPt_stop_ch(); ++i) {
500  WiredOR* wor = setup.find_wor(highPt_station(), i);
501  if (wor) {
502  wor->add_cma(this);
503  m_highPt_WORs.insert(WORlink::value_type(i, wor));
504  if (wor->give_max_phi_strips() > max) max = wor->give_max_phi_strips();
505  } else {
506  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << no_connection_error("WOR", i);
507  return false;
508  }
509  }
511  }
512  }
513  return true;
514 }
515 
517  if (stat == lowPt_station()) {
518  if (id().Ixx_index() == 0) {
519  m_lowPt_start_st = 1;
520  m_lowPt_stop_st = confirm_channels - (40 - max / 2);
522  } else if (id().Ixx_index() == 1) {
524  m_lowPt_start_st = max - confirm_channels + 1 + (40 - max / 2);
525  if (m_lowPt_start_st <= 0) m_lowPt_start_st = 1;
526  }
527 
528  } else if (stat == highPt_station()) {
529  if (id().Ixx_index() == 0) {
530  m_highPt_start_st = 1;
531  m_highPt_stop_st = confirm_channels - (40 - max / 2);
533  } else if (id().Ixx_index() == 1) {
535  m_highPt_start_st = max - confirm_channels + 1 + (40 - max / 2);
536  if (m_highPt_start_st <= 0) m_highPt_start_st = 1;
537  }
538  }
539 }
540 
542  int max = 0;
543  if (stat == pivot_station()) {
544  EvenPhiCMA::WORlink::const_iterator it = m_pivot_WORs.begin();
545  while (it != m_pivot_WORs.end()) {
546  max = (max > (*it).second->give_max_phi_strips()) ? max : (*it).second->give_max_phi_strips();
547  ++it;
548  }
549  } else if (stat == lowPt_station()) {
550  EvenPhiCMA::WORlink::const_iterator it = m_lowPt_WORs.begin();
551  while (it != m_lowPt_WORs.end()) {
552  max = (max > (*it).second->give_max_phi_strips()) ? max : (*it).second->give_max_phi_strips();
553  ++it;
554  }
555  } else if (stat == highPt_station()) {
556  EvenPhiCMA::WORlink::const_iterator it = m_highPt_WORs.begin();
557  while (it != m_highPt_WORs.end()) {
558  max = (max > (*it).second->give_max_phi_strips()) ? max : (*it).second->give_max_phi_strips();
559  ++it;
560  }
561  }
562  return max;
563 }
564 
566  EvenPhiCMA* prev = setup.previousCMA(*this);
567  if (prev && pivot_station()) {
568  if (pivot_start_ch() == prev->pivot_stop_ch()) {
569  if (!(pivot_start_st() == prev->pivot_stop_st() + 1)) {
570  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << two_obj_error_message("strips mismatch", prev);
571  return false;
572  }
573 
574  } else if (!(pivot_start_ch() == prev->pivot_stop_ch() + 1)) {
575  REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "EvenPhiCMA") << two_obj_error_message("chambers mismatch", prev);
576  return false;
577  } else {
578  }
579  } else {
580  }
581 
582  if (!connect(setup)) return false;
583  if (!cable_CMA_channels()) return false;
584 
585  // invert the strip cabling if needed
586  // if( !doInversion(setup) ) return false;
587 
588  // olny 1 repository allowed so far
589  std::string LVL1_configuration_repository;
590  LVL1_configuration_repository = "ATLAS.data";
591 
592  // Read the program file if exist
593  SectorLogicSetup::SECTORlist sectors = setup.sectors();
594  SectorLogicSetup::SECTORlist::const_iterator it = sectors.begin();
595 
596  char s_tag[4];
597  sprintf(s_tag, "s%02d", *it);
598 
599  char t_tag[3];
600  sprintf(t_tag, "t%1d", id().PAD_index());
601 
602  char c_tag[4] = {'_', 'c', '0', '\0'};
603  if (id().phi_index() == 1) c_tag[2] = '1';
604 
605  std::ifstream CMAprogLow;
606  std::istringstream CMAprogLow_COOL;
607  char name[200];
608  for (int i = 0; i < 200; ++i) name[i] = '\0';
609 
610  // LB retrieve pointer to the map of the trigger roads
611  const std::map<std::string, std::string>* p_trigroads = setup.GetPtoTrigRoads();
612 
613  // Read trigger configurations from files
614  if (p_trigroads == nullptr) {
615  while (!CMAprogLow.is_open() && it != sectors.end()) {
616  std::ostringstream namestr;
617  for (int i = 0; i < 200; ++i) name[i] = '\0';
618 
619  if ((*it) % 2 == 0) // load only the Phi program of the Even sectors
620  {
621  std::string dir;
622  dir = setup.online_database();
623  namestr << dir << "/" << s_tag << "_" << t_tag << "_pl" << c_tag << ".txt" << std::ends; // M.C. search for local files
624 
625  namestr.str().copy(name, namestr.str().length(), 0);
626  name[namestr.str().length()] = 0;
627 
628  CMAprogLow.open(name);
629  if (!CMAprogLow.is_open()) CMAprogLow.clear();
630  namestr.clear();
631  }
632  ++it;
633  }
634  }
635  // Trigger configuration loaded from COOL
636  else {
637  while (CMAprogLow_COOL.str().empty() && it != sectors.end()) {
638  std::ostringstream namestr;
639  for (int i = 0; i < 200; ++i) name[i] = '\0';
640 
641  if ((*it) % 2 == 0) // load only the Phi program of the Even sectors
642  {
643  namestr << s_tag << "_" << t_tag << "_pl" << c_tag << ".txt" << std::ends;
644  namestr.str().copy(name, namestr.str().length(), 0);
645  name[namestr.str().length()] = 0;
646  std::map<std::string, std::string>::const_iterator itc;
647  itc = p_trigroads->find(name);
648  if (itc != p_trigroads->end()) {
649  if (log.level() <= MSG::VERBOSE) {
650  log << MSG::VERBOSE << "EvenPhiCMA low: key " << name << "found in the Trigger Road Map --> OK"
651  << ", EvenPhiCMA low: key " << itc->second.c_str() << endmsg;
652  }
653  CMAprogLow_COOL.str(itc->second.c_str());
654  if (log.level() <= MSG::VERBOSE) {
655  log << MSG::VERBOSE << "LBTAG-CMAPROGLOWO " << CMAprogLow_COOL.str() << endmsg;
656  }
657  }
658  }
659  ++it;
660  namestr.clear();
661  }
662  }
663  if (CMAprogLow.is_open()) {
664  std::unique_ptr<CMAprogram> program = std::make_unique<CMAprogram>(CMAprogLow, true);
665  if (program->check()) {
666  m_lowPt_program = std::move(program);
667  if (setup.cosmic()) {
668  m_lowPt_program->open_threshold(0);
669  m_lowPt_program->open_threshold(1);
670  }
671  for (unsigned int i = 0; i < 3; ++i) {
672  if (!m_lowPt_program->hasProgrammed(i)) {
673  if (log.level() <= MSG::DEBUG) {
674  log << MSG::DEBUG << s_tag << ": " << id() << ": low-pt: has threshold " << i
675  << " not programmed." << endmsg;
676  }
677  }
678  }
679  }
680  CMAprogLow.close();
681  } else if (!CMAprogLow_COOL.str().empty()) {
682  std::unique_ptr<CMAprogram> program = std::make_unique<CMAprogram>(CMAprogLow_COOL, true);
683  if (program->check()) {
684  m_lowPt_program = std::move(program);
685  if (setup.cosmic()) {
686  m_lowPt_program->open_threshold(0);
687  m_lowPt_program->open_threshold(1);
688  }
689  for (unsigned int i = 0; i < 3; ++i) {
690  if (!m_lowPt_program->hasProgrammed(i)) {
691  if (log.level() <= MSG::DEBUG) {
692  log << MSG::DEBUG << s_tag << ": " << id() << ": low-pt: has threshold " << i
693  << " not programmed." << endmsg;
694  }
695  }
696  }
697  }
698  CMAprogLow_COOL.str("");
699  } else if (name[0] != '\0') {
700  if (log.level() <= MSG::DEBUG) {
701  log << MSG::DEBUG << name << " not found! Putting a dummy configuration" << endmsg;
702  }
703  m_lowPt_program = std::make_unique<CMAprogram>();
704  m_lowPt_program->open_threshold(0);
705  }
706 
707  std::ifstream CMAprogHigh;
708  std::istringstream CMAprogHigh_COOL;
709 
710  it = sectors.begin();
711 
712  if (p_trigroads == nullptr) {
713  while (!CMAprogHigh.is_open() && it != sectors.end()) {
714  std::ostringstream namestr;
715  for (int i = 0; i < 200; ++i) name[i] = '\0';
716 
717  if ((*it) % 2 == 0) // load only the Phi program of the Even sectors
718  {
719  std::string dir;
720  dir = setup.online_database();
721  namestr << dir << "/" << s_tag << "_" << t_tag << "_ph" << c_tag << ".txt" << std::ends;
722 
723  namestr.str().copy(name, namestr.str().length(), 0);
724  name[namestr.str().length()] = 0;
725 
726  CMAprogHigh.open(name);
727  if (!CMAprogHigh.is_open()) CMAprogHigh.clear();
728  namestr.clear();
729  }
730  ++it;
731  }
732  }
733  // Trigger configuration loaded from COOL
734  else {
735  it = sectors.begin();
736  while (CMAprogHigh_COOL.str().empty() && it != sectors.end()) {
737  std::ostringstream namestr;
738  for (int i = 0; i < 200; ++i) name[i] = '\0';
739 
740  if ((*it) % 2 == 0) // load only the Phi program of the Even sectors
741  {
742  namestr << s_tag << "_" << t_tag << "_ph" << c_tag << ".txt" << std::ends;
743  namestr.str().copy(name, namestr.str().length(), 0);
744  name[namestr.str().length()] = 0;
745  std::map<std::string, std::string>::const_iterator itc;
746  itc = p_trigroads->find(name);
747  if (itc != p_trigroads->end()) {
748  if (log.level() <= MSG::VERBOSE) {
749  log << MSG::VERBOSE << "EvenPhiCMA high: key " << name << "found in the Trigger Road Map --> OK"
750  << ", EvenPhiCMA high: key " << itc->second.c_str() << endmsg;
751  }
752  CMAprogHigh_COOL.str(itc->second.c_str());
753  if (log.level() <= MSG::DEBUG) {
754  log << MSG::DEBUG << "CMAPROGHIGH " << CMAprogHigh_COOL.str() << endmsg;
755  }
756  }
757  }
758  ++it;
759  namestr.clear();
760  }
761  }
762 
763  if (CMAprogHigh.is_open()) {
764  std::unique_ptr<CMAprogram> program = std::make_unique<CMAprogram>(CMAprogHigh, true);
765  if (program->check()) {
766  m_highPt_program = std::move(program);
767  if (setup.cosmic()) {
768  m_highPt_program->open_threshold(0);
769  m_highPt_program->open_threshold(1);
770  }
771  for (unsigned int i = 0; i < 3; ++i) {
772  if (!m_highPt_program->hasProgrammed(i)) {
773  if (log.level() <= MSG::DEBUG) {
774  log << MSG::DEBUG << s_tag << ": " << id() << ": high-pt: has threshold " << i
775  << " not programmed." << endmsg;
776  }
777  }
778  }
779  }
780  CMAprogHigh.close();
781  } else if (!CMAprogHigh_COOL.str().empty()) {
782  std::unique_ptr<CMAprogram> program = std::make_unique<CMAprogram>(CMAprogHigh_COOL, true);
783  if (program->check()) {
784  m_highPt_program = std::move(program);
785  if (setup.cosmic()) {
786  m_highPt_program->open_threshold(0);
787  m_highPt_program->open_threshold(1);
788  }
789  for (unsigned int i = 0; i < 3; ++i) {
790  if (!m_highPt_program->hasProgrammed(i)) {
791  if (log.level() <= MSG::DEBUG) {
792  log << MSG::DEBUG << s_tag << ": " << id() << ": high-pt: has threshold " << i
793  << " not programmed." << endmsg;
794  }
795  }
796  }
797  }
798  CMAprogHigh_COOL.str("");
799  } else if (name[0] != '\0') {
800  if (log.level() <= MSG::DEBUG) {
801  log << MSG::DEBUG << name << " not found! Putting a dummy configuration" << endmsg;
802  }
803  m_highPt_program = std::make_unique<CMAprogram>();
804  m_highPt_program->open_threshold(0);
805  }
806 
807  return true;
808 }
809 
811  SectorLogicSetup::SECTORlist Sectors = setup.sectors();
812  SectorLogicSetup::SECTORlist::const_iterator it = Sectors.begin();
813  int sector = *it;
814 
815  WORlink::const_iterator wor;
816  if (lowPt_station() && lowPt_number_co() != -1) {
817  wor = m_lowPt_WORs.begin();
818  WiredOR::RPClink Linked = (*wor).second->RPCread();
819  WiredOR::RPClink::const_iterator link = Linked.begin();
820  if ((*link).second->inversion(sector)) { m_inversion = true; }
821  }
822 
823  if (pivot_station()) {
824  wor = m_pivot_WORs.begin();
825  WiredOR::RPClink Linked = (*wor).second->RPCread();
826  WiredOR::RPClink::const_iterator link = Linked.begin();
827  if ((*link).second->inversion(sector)) { m_inversion = true; }
828  }
829 
830  if (highPt_station() && highPt_number_co() != -1) {
831  wor = m_highPt_WORs.begin();
832  WiredOR::RPClink Linked = (*wor).second->RPCread();
833  WiredOR::RPClink::const_iterator link = Linked.begin();
834  if ((*link).second->inversion(sector)) { m_inversion = true; }
835  }
836 
837  if (m_inversion) m_id->inversion();
838 
839  return true;
840 }
CMAparameters::two_obj_error_message
std::string two_obj_error_message(const std::string &, CMAparameters *)
Definition: CMAparameters.cxx:516
CMAparameters::highPt_start_st
int highPt_start_st() const
Definition: CMAparameters.cxx:39
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
CMAparameters::m_highPt_stop_st
int m_highPt_stop_st
Definition: CMAparameters.h:82
beamspotman.r
def r
Definition: beamspotman.py:676
EvenPhiCMA.h
CMAparameters::lowPt_station
int lowPt_station() const
Definition: CMAparameters.cxx:49
RPC_CondCabling::EvenPhiCMA::~EvenPhiCMA
virtual ~EvenPhiCMA()
BaseObject::name
const std::string & name() const
Definition: BaseObject.h:23
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
RPC_CondCabling::SectorLogicSetup::SECTORlist
std::list< int > SECTORlist
Definition: SectorLogicSetup.h:32
CMAparameters::highPt_start_ch
int highPt_start_ch() const
Definition: CMAparameters.cxx:40
RPC_CondCabling::WiredOR::connected_rpc
const RPCchamber * connected_rpc(int) const
Definition: WiredOR.cxx:48
RPC_CondCabling::EvenPhiCMA::inversion
bool inversion() const
Definition: EvenPhiCMA.cxx:21
setup
bool setup(asg::AnaToolHandle< Interface > &tool, const std::string &type, const std::vector< std::string > &config, const std::string &progressFile="")
mostly useful for athena, which will otherwise re-use the previous tool
Definition: fbtTestBasics.cxx:185
SectorLogicSetup.h
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
CMAparameters::m_active_lowPt_chs
int m_active_lowPt_chs
Definition: CMAparameters.h:86
RPC_CondCabling::EvenPhiCMA::WORlink
std::map< int, WiredOR *, std::less< int > > WORlink
Definition: EvenPhiCMA.h:22
RPC_CondCabling::EtaCMA
Definition: EtaCMA.h:20
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
skel.it
it
Definition: skel.GENtoEVGEN.py:396
CMAparameters::m_first_highPt_code
unsigned int m_first_highPt_code
Definition: CMAparameters.h:97
CMAparameters::highPt_stop_ch
int highPt_stop_ch() const
Definition: CMAparameters.cxx:42
CMAparameters::m_first_pivot_code
unsigned int m_first_pivot_code
Definition: CMAparameters.h:93
CMAparameters::m_pivot_rpc_read
int m_pivot_rpc_read
Definition: CMAparameters.h:89
RPC_CondCabling::RPCchamber::phi_strips
int phi_strips() const
Definition: RPCchamber.cxx:26
CMAprogram::check
bool check(void) const
Definition: CMAprogram.h:122
CMAparameters::m_id
std::unique_ptr< CMAidentity > m_id
Definition: CMAparameters.h:73
RPC_CondCabling::WiredOR::add_cma
void add_cma(const CMAparameters *)
Definition: WiredOR.cxx:58
CMAparameters::id
const CMAidentity & id() const
Definition: CMAparameters.cxx:17
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
CMAparameters::m_conf_type
CMAconfiguration m_conf_type
Definition: CMAparameters.h:107
RPC_CondCabling
Definition: CMAcablingdata.h:18
CMAparameters::m_pivot
int(* m_pivot)[2][pivot_channels]
Definition: CMAparameters.h:100
CMAparameters::m_lowPt_rpc_read
int m_lowPt_rpc_read
Definition: CMAparameters.h:90
CMAparameters::pivot_start_st
int pivot_start_st() const
Definition: CMAparameters.cxx:22
CMAparameters::highPt_number_co
int highPt_number_co() const
Definition: CMAparameters.cxx:32
CMAparameters::m_last_lowPt_code
unsigned int m_last_lowPt_code
Definition: CMAparameters.h:96
CMAparameters::confirm_channels
static constexpr int confirm_channels
Definition: CMAparameters.h:70
CMAparameters::m_highPt_stop_ch
int m_highPt_stop_ch
Definition: CMAparameters.h:83
RPC_CondCabling::EvenPhiCMA::m_highPt_WORs
WORlink m_highPt_WORs
Definition: EvenPhiCMA.h:26
RPC_CondCabling::EvenPhiCMA::setup
bool setup(SectorLogicSetup &, MsgStream &)
Definition: EvenPhiCMA.cxx:565
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
CMAparameters::lowPt_start_ch
int lowPt_start_ch() const
Definition: CMAparameters.cxx:35
SG::Linked
@ Linked
Mark that this variable is linked to another one.
Definition: AuxTypes.h:77
CMAparameters::m_highPt
int(* m_highPt)[2][confirm_channels]
Definition: CMAparameters.h:102
CMAparameters::m_lowPt_stop_st
int m_lowPt_stop_st
Definition: CMAparameters.h:77
CMAparameters::m_first_lowPt_code
unsigned int m_first_lowPt_code
Definition: CMAparameters.h:95
histSizes.code
code
Definition: histSizes.py:129
CMAparameters::m_active_pivot_chs
int m_active_pivot_chs
Definition: CMAparameters.h:85
CMAparameters::m_highPt_rpc_read
int m_highPt_rpc_read
Definition: CMAparameters.h:91
lumiFormat.i
int i
Definition: lumiFormat.py:85
RPC_CondCabling::RPCchamber::stationEta
int stationEta() const
Definition: RPCchamber.cxx:35
CMAparameters::pivot_station
int pivot_station() const
Definition: CMAparameters.cxx:48
RPC_CondCabling::EvenPhiCMA::get_max_strip_readout
int get_max_strip_readout(int)
Definition: EvenPhiCMA.cxx:541
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
CMAparameters::m_active_highPt_chs
int m_active_highPt_chs
Definition: CMAparameters.h:87
CMAparameters::m_highPt_program
std::unique_ptr< CMAprogram > m_highPt_program
Definition: CMAparameters.h:105
RPC_CondCabling::WiredOR::add_even_read_mul
void add_even_read_mul(ReadoutCh &)
Definition: WiredOR.cxx:60
CMAparameters::m_last_highPt_code
unsigned int m_last_highPt_code
Definition: CMAparameters.h:98
CMAparameters::operator=
CMAparameters & operator=(const CMAparameters &)
Definition: CMAparameters.cxx:138
CMAparameters::m_lowPt_stop_ch
int m_lowPt_stop_ch
Definition: CMAparameters.h:78
CMAparameters::m_lowPt
int(* m_lowPt)[2][confirm_channels]
Definition: CMAparameters.h:101
RPC_CondCabling::SectorLogicSetup
Definition: SectorLogicSetup.h:23
RPC_CondCabling::WiredOR::give_max_phi_strips
int give_max_phi_strips() const
Definition: WiredOR.cxx:34
CMAparameters::noMoreChannels
std::string noMoreChannels(const std::string &stat)
Definition: CMAparameters.cxx:481
CMAparameters::lowPt_start_st
int lowPt_start_st() const
Definition: CMAparameters.cxx:34
CMAparameters::create_lowPt_map
void create_lowPt_map(int)
Definition: CMAparameters.cxx:236
CMAparameters::no_wor_readout
std::string no_wor_readout(int, int)
Definition: CMAparameters.cxx:540
beamspotman.stat
stat
Definition: beamspotman.py:266
RPC_CondCabling::EvenPhiCMA::operator=
EvenPhiCMA & operator=(const EvenPhiCMA &)
Definition: EvenPhiCMA.cxx:54
RPC_CondCabling::EvenPhiCMA::pivot_WORs
const WORlink & pivot_WORs() const
Definition: EvenPhiCMA.cxx:17
beamspotman.dir
string dir
Definition: beamspotman.py:623
RPC_CondCabling::EvenPhiCMA::cable_CMA_channels
bool cable_CMA_channels(void)
Definition: EvenPhiCMA.cxx:69
REPORT_MESSAGE_WITH_CONTEXT
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:345
RPC_CondCabling::EvenPhiCMA::lowPt_WORs
const WORlink & lowPt_WORs() const
Definition: EvenPhiCMA.cxx:18
CMAidentity::Ixx_index
int Ixx_index() const
Definition: CMAidentity.cxx:123
CMAparameters::create_highPt_map
void create_highPt_map(int)
Definition: CMAparameters.cxx:245
RPC_CondCabling::EvenPhiCMA::m_pivot_WORs
WORlink m_pivot_WORs
Definition: EvenPhiCMA.h:24
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CMAparameters::m_highPt_start_ch
int m_highPt_start_ch
Definition: CMAparameters.h:81
RPC_CondCabling::RPCchamber::ijk_phiReadout
int ijk_phiReadout() const
Definition: RPCchamber.cxx:31
RPC_CondCabling::RPCchamber
Definition: RPCchamber.h:23
CablingObject::number
int number() const
Definition: CablingObject.cxx:12
CMAparameters::parseParams
Definition: CMAparameters.h:51
CMAparameters::lowPt_stop_st
int lowPt_stop_st() const
Definition: CMAparameters.cxx:36
CMAparameters::lowPt_stop_ch
int lowPt_stop_ch() const
Definition: CMAparameters.cxx:37
CMAparameters::m_lowPt_start_ch
int m_lowPt_start_ch
Definition: CMAparameters.h:76
RPC_CondCabling::EvenPhiCMA::m_lowPt_WORs
WORlink m_lowPt_WORs
Definition: EvenPhiCMA.h:25
RPC_CondCabling::WiredOR
Definition: WiredOR.h:26
CMAparameters::highPt_station
int highPt_station() const
Definition: CMAparameters.cxx:50
RPC_CondCabling::EvenPhiCMA::connect
bool connect(SectorLogicSetup &)
Definition: EvenPhiCMA.cxx:394
CMAparameters
Definition: CMAparameters.h:21
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
CMAparameters::m_last_pivot_code
unsigned int m_last_pivot_code
Definition: CMAparameters.h:94
RPC_CondCabling::EvenPhiCMA::m_inversion
bool m_inversion
Definition: EvenPhiCMA.h:28
CMAparameters::lowPt_number_co
int lowPt_number_co() const
Definition: CMAparameters.cxx:28
RPC_CondCabling::EvenPhiCMA::EvenPhiCMA
EvenPhiCMA(const parseParams &parse)
Definition: EvenPhiCMA.cxx:23
CMAparameters::highPt_stop_st
int highPt_stop_st() const
Definition: CMAparameters.cxx:41
DEBUG
#define DEBUG
Definition: page_access.h:11
RPC_CondCabling::EvenPhiCMA
Definition: EvenPhiCMA.h:20
CMAprogram.h
CMAparameters::m_highPt_start_st
int m_highPt_start_st
Definition: CMAparameters.h:80
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
CMAparameters::m_lowPt_program
std::unique_ptr< CMAprogram > m_lowPt_program
Definition: CMAparameters.h:104
CMAparameters::pivot_start_ch
int pivot_start_ch() const
Definition: CMAparameters.cxx:21
CablingObject::no_connection_error
std::string no_connection_error(const std::string &, int) const
Definition: CablingObject.cxx:30
CMAparameters::pivot_channels
static constexpr int pivot_channels
Definition: CMAparameters.h:69
CMAparameters::create_pivot_map
void create_pivot_map(int)
Definition: CMAparameters.cxx:227
RPC_CondCabling::EvenPhiCMA::doInversion
bool doInversion(SectorLogicSetup &)
Definition: EvenPhiCMA.cxx:810
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
RPC_CondCabling::EvenPhiCMA::get_confirm_strip_boundaries
void get_confirm_strip_boundaries(int, int)
Definition: EvenPhiCMA.cxx:516
RPC_CondCabling::WiredOR::RPCacquired
int RPCacquired() const
Definition: WiredOR.h:89
CMAparameters::Atlas
@ Atlas
Definition: CMAparameters.h:23
CMAparameters::pivot_stop_ch
int pivot_stop_ch() const
Definition: CMAparameters.cxx:23
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
RPC_CondCabling::RPCchamber::chamber_name
const std::string & chamber_name() const
Definition: RPCchamber.cxx:33
RPC_CondCabling::EvenPhiCMA::highPt_WORs
const WORlink & highPt_WORs() const
Definition: EvenPhiCMA.cxx:19
CMAparameters::pivot_stop_st
int pivot_stop_st() const
Definition: CMAparameters.cxx:24
CMAparameters::m_lowPt_start_st
int m_lowPt_start_st
Definition: CMAparameters.h:75
RPC_CondCabling::WiredOR::RPClink
std::map< int, const RPCchamber *, std::less< int > > RPClink
Definition: WiredOR.h:28