ATLAS Offline Software
Loading...
Searching...
No Matches
RPCchamberdata.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
9#include <iomanip>
10
11using namespace RPC_CondCabling;
12
14 int chams{0}, stripsInEtaCon{0}, stripsInPhiCon{0};
15
16 reset_data();
17
18 m_fail = false;
19 if (!(data("station") >> m_station)) return;
20 if (!(data("made of") >> chams >> "chamber. Strips in connectors:")) return;
21 if (!(data("eta") >> stripsInEtaCon)) return;
22 if (!(data("phi") >> stripsInPhiCon)) return;
23 assert(stripsInEtaCon !=0);
24 (++data)("{");
25 do {
27 params.sectorType = type;
28 params.station = m_station;
29 params.stripsInEtaCon = stripsInEtaCon;
30 params.stripsInPhiCon = stripsInPhiCon;
31
32 if (get_data(data, params)) { m_rpc.emplace_back(params); }
33 ++data;
34 } while (!data("}"));
35}
36
38
40 int strips = (side == ViewType::Phi) ? params.phiStrips : params.etaStrips;
41
42 if (side == ViewType::Phi)
43 params.phiConnectors = strips / params.stripsInPhiCon;
44 else
45 params.etaConnectors = strips / params.stripsInEtaCon;
46
47 int connectors = (side == ViewType::Phi) ? params.phiConnectors : params.etaConnectors;
48 int strips_in_conn = (side == ViewType::Phi) ? params.stripsInPhiCon : params.stripsInEtaCon;
49 float str = (float)strips / (float)connectors;
50 std::string view = (side == ViewType::Phi) ? "phi" : "eta";
51
52 std::ostringstream disp;
53
54 if (str > strips_in_conn) {
55 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "RPCchamberdata")
56 << "RPCdata error in configuration for Sector Type " << params.sectorType << ", station " << params.station << ", RPC number "
57 << params.number << std::endl
58 << " " << view << " strips into connectors must be less than " << strips_in_conn << " (instead are " << std::setprecision(2)
59 << str << ")";
60 return false;
61 }
62 if (params.number == 0 && ((params.etaStrips % 2) || params.etaConnectors % 2)) {
63 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "RPCchamberdata")
64 << "RPCdata error in configuration for Sector Type " << params.sectorType << ", station " << params.station << ", RPC number "
65 << params.number << std::endl
66 << " " << view << " strips and/or connectors must be "
67 << "multiple of 2 "
68 << " (eta_strips " << params.etaStrips << ", eta_conn " << params.etaConnectors << ")";
69 return false;
70 }
71 if (strips_in_conn * connectors != strips) {
72 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "RPCchamberdata")
73 << "RPCdata error in configuration for Sector Type " << params.sectorType << ", station " << params.station << ", RPC number "
74 << params.number << std::endl
75 << " strips into " << view << " connectors are " << std::setprecision(2) << str << " instead of " << strips_in_conn;
76 return false;
77 }
78 return true;
79}
80
82 int ijk = (side == ViewType::Phi) ? params.ijk_PhiReadOut : params.ijk_EtaReadOut;
83 std::string view = (side == ViewType::Phi) ? "phi" : "eta";
84
85 std::ostringstream disp;
86
87 if (ijk != 1 && ijk != 10) {
88 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "RPCchamberdata")
89 << "RPCdata error in configuration for Sector Type " << params.sectorType << ", station " << params.station << ", RPC number "
90 << params.number << std::endl
91 << " " << view << " ijk readout must be 01 or 10; "
92 << " on the contrary it is " << std::setw(2) << std::setfill('0') << ijk << std::setfill(' ');
93 return false;
94 }
95
96 return true;
97}
98
100 reset_data();
101 if (data("cham") >> params.number >> params.chamberName >> params.stationEta >> params.doubletR >> params.doubletZ >>
102 params.phiReadOutPanels >> "Eview" >> params.etaStrips >> params.ijk_EtaReadOut >> "Pview" >> params.phiStrips >>
103 params.ijk_PhiReadOut) {
104 m_fail = false;
106 if (!confirm_ijk(ViewType::Eta, params) || !confirm_ijk(ViewType::Phi, params)) m_fail = true;
107 }
108
109 return !m_fail;
110}
111
112std::unique_ptr<RPCchamber> RPCchamberdata::give_rpc() {
113 if (!m_rpc.empty()) {
114 std::unique_ptr<RPCchamber> cham = std::make_unique<RPCchamber>(m_rpc.front());
115 m_rpc.pop_front();
116 return cham;
117 }
118 return nullptr;
119}
120
121void RPCchamberdata::Print(std::ostream& stream, bool detail) const {
122 // stream << "RPC data of station n. " << params.station;
123 // stream << " belonging to sector type " << params.sectorType << std::endl;
124 stream << "It contains " << m_rpc.size();
125 stream << " RPC chambers:" << std::endl;
126 std::list<RPCchamber>::const_iterator it;
127 for (it = m_rpc.begin(); it != m_rpc.end(); ++it) stream << ShowRequest<RPCchamber>(*it, detail);
128}
@ Logic
Definition BaseObject.h:11
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
ViewType
Definition RPCdef.h:8
@ Phi
Definition RPCdef.h:8
@ Eta
Definition RPCdef.h:8
BaseObject(ObjectType, const std::string &)
Definition BaseObject.cxx:7
std::unique_ptr< RPCchamber > give_rpc()
bool confirm_connectors(ViewType, RPCchamber::chamberParameters &params)
bool get_data(DBline &, RPCchamber::chamberParameters &params)
bool confirm_ijk(ViewType, RPCchamber::chamberParameters &params)
virtual void Print(std::ostream &, bool) const override