ATLAS Offline Software
Loading...
Searching...
No Matches
IdToFixedIdTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include <iostream>
8#include <sstream>
9#include <string>
10
13
14namespace MuonCalib {
15
16 IdToFixedIdTool::IdToFixedIdTool(const std::string& t, const std::string& n, const IInterface* p) :
17 AthAlgTool(t, n, p), m_print_level(0) {
18 declareInterface<IIdToFixedIdTool>(this);
19 declareProperty("print_level", m_print_level);
20 }
21
23 ATH_MSG_VERBOSE("Initialisation started");
24 ATH_CHECK(m_idHelperSvc.retrieve());
25 return StatusCode::SUCCESS;
26 }
27
29 bool done{false};
30 MuonFixedId fixedId;
31
32 if (!(m_idHelperSvc->isMuon(id))) {
33 ATH_MSG_DEBUG(" MuonIdentifier doesn't correspond to a muon ");
34 } else {
35 // setting the Muon specific fields
37 m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(id))));
38 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (general) ");
39 if (m_idHelperSvc->isMdt(id)) {
40 done = fixedId.setTechnology(0); // MDT = 0;
41 // setting the Mdt specific fields
42 if (done) done = fixedId.setStationEta(m_idHelperSvc->mdtIdHelper().stationEta(id));
43 if (done) done = fixedId.setStationPhi(m_idHelperSvc->mdtIdHelper().stationPhi(id));
44
45 if (done) done = fixedId.setMdtTube(m_idHelperSvc->mdtIdHelper().tube(id));
46 if (done) done = fixedId.setMdtTubeLayer(m_idHelperSvc->mdtIdHelper().tubeLayer(id));
47 if (done) done = fixedId.setMdtMultilayer(m_idHelperSvc->mdtIdHelper().multilayer(id));
48 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (MDT) ");
49 } else if (m_idHelperSvc->isRpc(id)) {
50 done = fixedId.setTechnology(3); // RPC = 3;
51 // setting the Rpc specific fields
52 if (done) done = fixedId.setStationEta(m_idHelperSvc->rpcIdHelper().stationEta(id));
53 if (done) done = fixedId.setStationPhi(m_idHelperSvc->rpcIdHelper().stationPhi(id));
54
55 if (done) done = fixedId.setRpcDoubletR(m_idHelperSvc->rpcIdHelper().doubletR(id));
56 if (done) done = fixedId.setRpcDoubletZ(m_idHelperSvc->rpcIdHelper().doubletZ(id));
57 if (done) done = fixedId.setRpcDoubletPhi(m_idHelperSvc->rpcIdHelper().doubletPhi(id));
58 if (done) done = fixedId.setRpcGasGap(m_idHelperSvc->rpcIdHelper().gasGap(id));
59 if (done) done = fixedId.setRpcMeasuresPhi(m_idHelperSvc->rpcIdHelper().measuresPhi(id));
60 if (done) done = fixedId.setRpcStrip(m_idHelperSvc->rpcIdHelper().strip(id));
61 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (RPC) ");
62 } else if (m_idHelperSvc->isCsc(id)) {
63 done = fixedId.setTechnology(1); // CSC = 1;
64 // setting the Csc specific fields
65 if (done) done = fixedId.setStationEta(m_idHelperSvc->cscIdHelper().stationEta(id));
66 if (done) done = fixedId.setStationPhi(m_idHelperSvc->cscIdHelper().stationPhi(id));
67
68 if (done) done = fixedId.setCscChamberLayer(m_idHelperSvc->cscIdHelper().chamberLayer(id));
69 if (done) done = fixedId.setCscWireLayer(m_idHelperSvc->cscIdHelper().wireLayer(id));
70 if (done) done = fixedId.setCscMeasuresPhi(m_idHelperSvc->cscIdHelper().measuresPhi(id));
71 if (done) done = fixedId.setCscStrip(m_idHelperSvc->cscIdHelper().strip(id));
72 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (CSC) ");
73 } else if (m_idHelperSvc->isTgc(id)) {
74 done = fixedId.setTechnology(2); // TGC = 2;
75 // setting the Tgc specific fields
76 if (done) done = fixedId.setStationEta(m_idHelperSvc->tgcIdHelper().stationEta(id));
77 if (done) done = fixedId.setStationPhi(m_idHelperSvc->tgcIdHelper().stationPhi(id));
78
79 if (done) done = fixedId.setTgcGasGap(m_idHelperSvc->tgcIdHelper().gasGap(id));
80 if (done) done = fixedId.setTgcIsStrip(m_idHelperSvc->tgcIdHelper().isStrip(id));
81 if (done) done = fixedId.setTgcChannel(m_idHelperSvc->tgcIdHelper().channel(id));
82 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (TGC) ");
83 }
84 }
85 return fixedId;
86 }
87
89 Identifier tmp;
90 if (fid.is_mdt()) {
91 tmp = m_idHelperSvc->mdtIdHelper().channelID(fid.stationNameString(), fid.eta(), fid.phi(), fid.mdtMultilayer(),
92 fid.mdtTubeLayer(), fid.mdtTube());
93 } else if (fid.is_rpc()) {
94 tmp =
95 m_idHelperSvc->rpcIdHelper().channelID(fid.stationNameString(), fid.eta(), fid.phi(), fid.rpcDoubletR(), fid.rpcDoubletZ(),
96 fid.rpcDoubletPhi(), fid.rpcGasGap(), fid.rpcMeasuresPhi(), fid.rpcStrip());
97 } else if (m_idHelperSvc->hasCSC() && fid.is_csc()) {
98 tmp = m_idHelperSvc->cscIdHelper().channelID(fid.stationNameString(), fid.eta(), fid.phi(), fid.cscChamberLayer(),
99 fid.cscWireLayer(), fid.cscMeasuresPhi(), fid.cscStrip());
100 } else if (fid.is_tgc()) {
101 tmp = m_idHelperSvc->tgcIdHelper().channelID(fid.stationNameString(), fid.eta(), fid.phi(), fid.tgcGasGap(), fid.tgcIsStrip(),
102 fid.tgcChannel());
103 }
104 return tmp;
105 }
106
108 bool done{false};
109 MuonFixedLongId fixedId;
110
111 if (!(m_idHelperSvc->isMuon(id))) {
112 ATH_MSG_DEBUG(" MuonIdentifier doesn't correspond to a muon ");
113 } else {
114 // setting the Muon specific fields
116 m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(id))));
117 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (general) ");
118 if (m_idHelperSvc->isMdt(id)) {
119 done = fixedId.setTechnology(MuonFixedLongId::technologyMDT); // MDT = 0;
120 // setting the Mdt specific fields
121 if (done) done = fixedId.setStationEta(m_idHelperSvc->mdtIdHelper().stationEta(id));
122 if (done) done = fixedId.setStationPhi(m_idHelperSvc->mdtIdHelper().stationPhi(id));
123
124 if (done) done = fixedId.setMdtTube(m_idHelperSvc->mdtIdHelper().tube(id));
125 if (done) done = fixedId.setMdtTubeLayer(m_idHelperSvc->mdtIdHelper().tubeLayer(id));
126 if (done) done = fixedId.setMdtMultilayer(m_idHelperSvc->mdtIdHelper().multilayer(id));
127 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (MDT) ");
128 } else if (m_idHelperSvc->isRpc(id)) {
129 done = fixedId.setTechnology(MuonFixedLongId::technologyRPC); // RPC = 3;
130 // setting the Rpc specific fields
131 if (done) done = fixedId.setStationEta(m_idHelperSvc->rpcIdHelper().stationEta(id));
132 if (done) done = fixedId.setStationPhi(m_idHelperSvc->rpcIdHelper().stationPhi(id));
133
134 if (done) done = fixedId.setRpcDoubletR(m_idHelperSvc->rpcIdHelper().doubletR(id));
135 if (done) done = fixedId.setRpcDoubletZ(m_idHelperSvc->rpcIdHelper().doubletZ(id));
136 if (done) done = fixedId.setRpcDoubletPhi(m_idHelperSvc->rpcIdHelper().doubletPhi(id));
137 if (done) done = fixedId.setRpcGasGap(m_idHelperSvc->rpcIdHelper().gasGap(id));
138 if (done) done = fixedId.setRpcMeasuresPhi(m_idHelperSvc->rpcIdHelper().measuresPhi(id));
139 if (done) done = fixedId.setRpcStrip(m_idHelperSvc->rpcIdHelper().strip(id));
140 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (RPC) ");
141 } else if (m_idHelperSvc->isCsc(id)) {
142 done = fixedId.setTechnology(MuonFixedLongId::technologyCSC); // CSC = 1;
143 // setting the Csc specific fields
144 if (done) done = fixedId.setStationEta(m_idHelperSvc->cscIdHelper().stationEta(id));
145 if (done) done = fixedId.setStationPhi(m_idHelperSvc->cscIdHelper().stationPhi(id));
146
147 if (done) done = fixedId.setCscChamberLayer(m_idHelperSvc->cscIdHelper().chamberLayer(id));
148 if (done) done = fixedId.setCscWireLayer(m_idHelperSvc->cscIdHelper().wireLayer(id));
149 if (done) done = fixedId.setCscMeasuresPhi(m_idHelperSvc->cscIdHelper().measuresPhi(id));
150 if (done) done = fixedId.setCscStrip(m_idHelperSvc->cscIdHelper().strip(id));
151 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (CSC) ");
152 } else if (m_idHelperSvc->isTgc(id)) {
153 done = fixedId.setTechnology(MuonFixedLongId::technologyTGC); // TGC = 2;
154 // setting the Tgc specific fields
155 if (done) done = fixedId.setStationEta(m_idHelperSvc->tgcIdHelper().stationEta(id));
156 if (done) done = fixedId.setStationPhi(m_idHelperSvc->tgcIdHelper().stationPhi(id));
157
158 if (done) done = fixedId.setTgcGasGap(m_idHelperSvc->tgcIdHelper().gasGap(id));
159 if (done) done = fixedId.setTgcIsStrip(m_idHelperSvc->tgcIdHelper().isStrip(id));
160 if (done) done = fixedId.setTgcChannel(m_idHelperSvc->tgcIdHelper().channel(id));
161 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (TGC) ");
162 } else if (m_idHelperSvc->isMM(id)) {
164 // setting the MMG specific fields
165 if (done) done = fixedId.setStationEta(m_idHelperSvc->mmIdHelper().stationEta(id));
166 if (done) done = fixedId.setStationPhi(m_idHelperSvc->mmIdHelper().stationPhi(id));
167
168 if (done) done = fixedId.setMmgMultilayer(m_idHelperSvc->mmIdHelper().multilayer(id));
169 if (done) done = fixedId.setMmgGasGap(m_idHelperSvc->mmIdHelper().gasGap(id));
170 if (done) done = fixedId.setMmgStrip(m_idHelperSvc->mmIdHelper().channel(id));
171 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (MMG) ");
172 } else if (m_idHelperSvc->issTgc(id)) {
174 // setting the sTGC specific fields
175 if (done) done = fixedId.setStationEta(m_idHelperSvc->stgcIdHelper().stationEta(id));
176 if (done) done = fixedId.setStationPhi(m_idHelperSvc->stgcIdHelper().stationPhi(id));
177
178 // Convert the channel type enum
180 switch (m_idHelperSvc->stgcIdHelper().channelType(id)) {
183 break;
186 break;
189 break;
190 default:
191 ATH_MSG_WARNING("Cannot convert StgChannelType");
192 done = false;
193 break;
194 }
195
196 if (done) done = fixedId.setStgMultilayer(m_idHelperSvc->stgcIdHelper().multilayer(id));
197 if (done) done = fixedId.setStgGasGap(m_idHelperSvc->stgcIdHelper().gasGap(id));
198 if (done) done = fixedId.setStgChannelType(channelType);
199 if (done) done = fixedId.setStgChannel(m_idHelperSvc->stgcIdHelper().channel(id));
200 if (!done) ATH_MSG_INFO("Something went wrong in the conversion id->fid (STG) ");
201 }
202 }
203 return fixedId;
204 }
205
207 Identifier tmp;
208 if (fid.is_mdt()) {
209 tmp = m_idHelperSvc->mdtIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(), fid.mdtMultilayer(),
210 fid.mdtTubeLayer(), fid.mdtTube());
211 } else if (fid.is_rpc()) {
212 tmp =
213 m_idHelperSvc->rpcIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(), fid.rpcDoubletR(), fid.rpcDoubletZ(),
214 fid.rpcDoubletPhi(), fid.rpcGasGap(), fid.rpcMeasuresPhi(), fid.rpcStrip());
215 } else if (m_idHelperSvc->hasCSC() && fid.is_csc()) {
216 tmp = m_idHelperSvc->cscIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(), fid.cscChamberLayer(),
217 fid.cscWireLayer(), fid.cscMeasuresPhi(), fid.cscStrip());
218 } else if (fid.is_tgc()) {
219 tmp = m_idHelperSvc->tgcIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(), fid.tgcGasGap(), fid.tgcIsStrip(),
220 fid.tgcChannel());
221 } else if (fid.is_mmg()) {
222 tmp = m_idHelperSvc->mmIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(),
223 fid.mmgMultilayer(), fid.mmgGasGap(), fid.mmgStrip());
224 } else if (fid.is_stg()) {
225 // Convert the channel type enum
227 switch (fid.stgChannelType()) {
230 break;
233 break;
236 break;
237 default:
238 ATH_MSG_WARNING("Cannot convert StgChannelType");
239 break;
240 }
241 tmp = m_idHelperSvc->stgcIdHelper().channelID(std::string(fid.stationNameString()), fid.eta(), fid.phi(),
242 fid.stgMultilayer(), fid.stgGasGap(), channelType, fid.stgChannel());
243 }
244 return tmp;
245 }
246
247 Identifier IdToFixedIdTool::regionKeyToId(std::string region) const {
248 // unpack the region key string used by the calibration framework and return
249 // an Athena Identifier
250 int eta, phi, ml;
251 std::string stnName(region, 0, 3);
252 std::string::size_type separator1 = region.find_first_of('_');
253 std::string::size_type separator2 = region.find_last_of('_');
254 if ((separator1 == std::string::npos) || (separator2 == std::string::npos) || (separator1 == separator2)) {
255 ATH_MSG_WARNING("IdToFixedIdTool::regionKeyToId : invalid region key " << region);
256 return Identifier();
257 }
258 std::string::size_type separator3 = region.find('_', separator1 + 1);
259 if (separator3 != separator2) {
260 // format STN_ETA_PHI_ML
261 std::string stnPhi(region, separator1 + 1, separator2 - separator1 - 1);
262 std::string stnEta(region, separator2 + 1, separator3 - separator2 - 1);
263 std::istringstream is1, is2;
264 is1.str(stnEta);
265 is1 >> eta;
266 is2.str(stnPhi);
267 is2 >> phi;
268 std::string Ml(region, separator3 + 1, region.size() - separator3 - 1);
269 std::istringstream is3;
270 is3.str(Ml);
271 is3 >> ml;
272 } else {
273 // format STN_ETA_PHI
274 std::string stnPhi(region, separator1 + 1, separator2 - separator1 - 1);
275 std::string stnEta(region, separator2 + 1, region.size() - separator2 - 1);
276 std::istringstream is1, is2;
277 is1.str(stnEta);
278 is1 >> eta;
279 is2.str(stnPhi);
280 is2 >> phi;
281 ml = 0;
282 }
283 // figure out what to do here when ml!=0 ...
284 Identifier athenaId = m_idHelperSvc->mdtIdHelper().elementID(stnName, eta, phi);
285 return athenaId;
286 }
287
288 void IdToFixedIdTool::print(const Identifier& id) const {
289 MuonFixedId tmp = idToFixedId(id);
290 Identifier test = fixedIdToId(tmp);
291 if (id != test) ATH_MSG_WARNING("SOMETHING WENT WRONG PROCESSING FIXEDID<->ID");
292
293 m_idHelperSvc->mdtIdHelper().print(id);
294 }
295
296 void IdToFixedIdTool::print(const MuonFixedId& fid) const { ATH_MSG_INFO("MuonFixedId conversion yields: " << fid); }
297
298 void IdToFixedIdTool::print(const MuonFixedLongId& fid) const { ATH_MSG_INFO("MuonFixedLongId conversion yields: " << fid); }
299
300} // namespace MuonCalib
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
IdToFixedIdTool(const std::string &type, const std::string &name, const IInterface *parent)
AlgTool constructor.
Identifier fixedLongIdToId(const MuonFixedLongId &fid) const override
Convert MuonFixedLongId to ATHENA Identifier.
MuonFixedLongId idToFixedLongId(const Identifier &id) const override
Convert ATHENA Identifier to MuonFixedLongId.
virtual StatusCode initialize() override
IdToFixedIdTool initialization: retrieve all the IdHelpers needed to do strap the ATHENA Identifier.
MuonFixedId idToFixedId(const Identifier &id) const override
Convert ATHENA Identifier to MuonFixedId.
Identifier regionKeyToId(std::string region) const override
Returns an ATHENA Identifier for a given Region key.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Identifier fixedIdToId(const MuonFixedId &fid) const override
Convert MuonFixedId to ATHENA Identifier.
void print(const Identifier &id) const override
print method to output an ATHENA Identifier, warning the user when the conversion and reconversion yi...
int m_print_level
Sets printlevel of output.
Implements fixed identifiers not dependent upon Athena Identifier for internal use in the calibration...
Definition MuonFixedId.h:50
bool setTgcIsStrip(int num)
Tgc specific: set is_strip to num.
bool setRpcDoubletZ(int num)
Rpc specific: set doublet_Z to num.
bool setCscWireLayer(int num)
Csc specific: set wire layer to num.
int cscWireLayer() const
Csc specific:
bool setTgcGasGap(int num)
Tgc specific: set gas_gap to num.
bool setCscChamberLayer(int num)
Csc specific: set chamber layer to num.
bool setRpcGasGap(int num)
Rpc specific: set gas_gap to num.
bool setTechnology(int num)
set technology to num in the fixed identifier
bool setStationEta(int num)
set station eta to num in the fixed identifier
bool setCscMeasuresPhi(int num)
Csc specific: set measures_phi to num.
bool setTgcChannel(int num)
Tgc specific: set channel to num.
int rpcDoubletPhi() const
Rpc specific:
int tgcIsStrip() const
Tgc specific:
bool setCscStrip(int num)
Csc specific: set strip to num.
bool setRpcMeasuresPhi(int num)
Rpc specific: set measures_phi to num.
bool setMdtTubeLayer(int num)
Mdt specific: set layer to num.
bool setStationPhi(int num)
set station phi to num in the fixed identifier
bool setMdtTube(int num)
Mdt specific: set tube to num.
int mdtTubeLayer() const
Mdt specific:
int mdtTube() const
Mdt specific:
int tgcGasGap() const
Tgc specific:
int rpcGasGap() const
Rpc specific:
bool setRpcStrip(int num)
Rpc specific: set strip to num.
int cscMeasuresPhi() const
Csc specific:
bool setRpcDoubletR(int num)
Rpc specific: set doublet_R to num.
int rpcMeasuresPhi() const
Rpc specific:
int cscStrip() const
Csc specific:
bool setMdtMultilayer(int num)
Mdt specific: set multilayer to num.
bool setRpcDoubletPhi(int num)
Rpc specific: set doublet_Phi to num.
int tgcChannel() const
Tgc specific:
int rpcDoubletR() const
Rpc specific:
std::string stationNameString() const
bool setStationName(int num)
set station name to num in the fixed identifier
static int stationStringToFixedStationNumber(const std::string &station)
int rpcStrip() const
Rpc specific:
int mdtMultilayer() const
Mdt specific:
int rpcDoubletZ() const
Rpc specific:
int cscChamberLayer() const
Csc specific:
bool setRpcDoubletPhi(int num)
Rpc specific: set doublet_Phi to num.
int stgMultilayer() const
Stg specific:
int tgcIsStrip() const
Tgc specific:
bool setCscStrip(int num)
Csc specific: set strip to num.
bool setRpcDoubletR(int num)
Rpc specific: set doublet_R to num.
bool setRpcDoubletZ(int num)
Rpc specific: set doublet_Z to num.
bool setMdtMultilayer(int num)
Mdt specific: set multilayer to num.
int mmgGasGap() const
Mmg specific:
StgChannelType
an enum with the STGC channel types
int rpcStrip() const
Rpc specific:
int mmgStrip() const
Mmg specific:
bool setTgcGasGap(int num)
Tgc specific: set gas_gap to num.
int cscWireLayer() const
Csc specific:
bool setTechnology(Technology num)
set technology to num in the fixed identifier
bool setStationName(StationName num)
set station name to num in the fixed identifier
bool setMdtTubeLayer(int num)
Mdt specific: set layer to num.
int rpcGasGap() const
Rpc specific:
std::string_view stationNameString() const
bool setRpcGasGap(int num)
Rpc specific: set gas_gap to num.
int rpcDoubletPhi() const
Rpc specific:
bool setRpcMeasuresPhi(int num)
Rpc specific: set measures_phi to num.
int tgcChannel() const
Tgc specific:
bool setMdtTube(int num)
Mdt specific: set tube to num.
bool setStationEta(int num)
set station eta to num in the fixed identifier
int tgcGasGap() const
Tgc specific:
bool setMmgStrip(int num)
Mmg specific: set strip to num.
int stgChannel() const
Stg specific:
int stgGasGap() const
Stg specific:
bool setCscMeasuresPhi(int num)
Csc specific: set measures_phi to num.
bool setStgGasGap(int num)
Stg specific: set gas_gap to num.
int rpcDoubletZ() const
Rpc specific:
bool setMmgMultilayer(int num)
Mmg specific: set multilayer to num.
int cscChamberLayer() const
Csc specific:
bool setStgChannelType(StgChannelType num)
Stg specific: set channel_type to num.
bool setTgcChannel(int num)
Tgc specific: set channel to num.
bool setStgMultilayer(int num)
Stg specific: set multilayer to num.
bool setMmgGasGap(int num)
Mmg specific: set gas_gap to num.
int mdtTubeLayer() const
Mdt specific:
bool setTgcIsStrip(int num)
Tgc specific: set is_strip to num.
StgChannelType stgChannelType() const
Stg specific:
bool setCscWireLayer(int num)
Csc specific: set wire layer to num.
bool setRpcStrip(int num)
Rpc specific: set strip to num.
int mdtTube() const
Mdt specific:
int cscStrip() const
Csc specific:
int rpcDoubletR() const
Rpc specific:
int rpcMeasuresPhi() const
Rpc specific:
int mdtMultilayer() const
Mdt specific:
int mmgMultilayer() const
Mmg specific:
bool setStationPhi(int num)
set station phi to num in the fixed identifier
bool setCscChamberLayer(int num)
Csc specific: set chamber layer to num.
static StationName stationStringToFixedStationNumber(std::string_view station)
int cscMeasuresPhi() const
Csc specific:
bool setStgChannel(int num)
Stg specific: set channel to num.
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.