CMS 3D CMS Logo

SiStripDetCabling.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // Package: SiStripObjects
3 // Class : SiStripDetCabling
4 // Original Author: dkcira
5 // Created: Wed Mar 22 12:24:33 CET 2006
10 
11 #include <iostream>
12 
13 //---- default constructor / destructor
14 SiStripDetCabling::SiStripDetCabling(const TrackerTopology *const topology) : fedCabling_(nullptr), tTopo(topology) {}
16 
17 //---- construct detector view (DetCabling) out of readout view (FedCabling)
19  : fullcabling_(), connected_(), detected_(), undetected_(), fedCabling_(&fedcabling), tTopo(topology) {
20  // --- CONNECTED = have fedid and i2cAddr
21  // create fullcabling_, loop over vector of FedChannelConnection, either make
22  // new element of map, or add to appropriate vector of existing map element
23  // get feds list (vector) from fedcabling object - these are the active FEDs
24  auto feds = fedcabling.fedIds();
25  for (auto ifed = feds.begin(); ifed != feds.end(); ifed++) { // iterate over active feds, get all their
26  // FedChannelConnection-s
28  for (auto iconn = conns.begin(); iconn != conns.end(); iconn++) { // loop over FedChannelConnection objects
29  addDevices(*iconn,
30  fullcabling_); // leave separate method, in case you will need
31  // to add devices also after constructing
32  bool have_fed_id = iconn->fedId();
33  std::vector<int> vector_of_connected_apvs;
34  if (have_fed_id) { // these apvpairs are seen from the readout
35  // there can be at most 6 APVs on one DetId: 0,1,2,3,4,5
36  int which_apv_pair = iconn->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2)
37  // for 768 strips
38 
39  // patch needed to take into account invalid detids or apvPairs
40  if (iconn->detId() == 0 || iconn->detId() == sistrip::invalid32_ ||
41  iconn->apvPairNumber() == sistrip::invalid_ || iconn->nApvPairs() == sistrip::invalid_) {
42  continue;
43  }
44 
45  if (iconn->i2cAddr(0))
46  vector_of_connected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
47  if (iconn->i2cAddr(1))
48  vector_of_connected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
49  }
50  if (!vector_of_connected_apvs.empty()) { // add only is smth. there, obviously
51  std::map<uint32_t, std::vector<int>> map_of_connected_apvs;
52  map_of_connected_apvs.insert(std::make_pair(iconn->detId(), vector_of_connected_apvs));
53  addFromSpecificConnection(connected_, map_of_connected_apvs, &(connectionCount[0]));
54  }
55  }
56  }
57  // --- DETECTED = do not have fedid but have i2cAddr
58  SiStripFedCabling::ConnsConstIterRange detected_fed_connections = fedcabling.detectedDevices();
59  for (std::vector<FedChannelConnection>::const_iterator idtct = detected_fed_connections.begin();
60  idtct != detected_fed_connections.end();
61  ++idtct) {
62  addDevices(*idtct, fullcabling_);
63  bool have_fed_id = idtct->fedId();
64  std::vector<int> vector_of_detected_apvs;
65  if (!have_fed_id) {
66  int which_apv_pair = idtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2)
67  // for 768 strips
68  if (idtct->i2cAddr(0))
69  vector_of_detected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
70  if (idtct->i2cAddr(1))
71  vector_of_detected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
72  }
73  if (!vector_of_detected_apvs.empty()) { // add only is smth. there, obviously
74  std::map<uint32_t, std::vector<int>> map_of_detected_apvs;
75  map_of_detected_apvs.insert(std::make_pair(idtct->detId(), vector_of_detected_apvs));
76  addFromSpecificConnection(detected_, map_of_detected_apvs, &(connectionCount[1]));
77  }
78  }
79  // --- UNDETECTED = have neither fedid nor i2caddr
80  SiStripFedCabling::ConnsConstIterRange undetected_fed_connections = fedcabling.undetectedDevices();
81  for (std::vector<FedChannelConnection>::const_iterator iudtct = undetected_fed_connections.begin();
82  iudtct != undetected_fed_connections.end();
83  ++iudtct) {
84  addDevices(*iudtct, fullcabling_);
85  bool have_fed_id = iudtct->fedId();
86  std::vector<int> vector_of_undetected_apvs;
87  if (!have_fed_id) {
88  int which_apv_pair = iudtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2)
89  // for 768 strips
90  if (iudtct->i2cAddr(0))
91  vector_of_undetected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
92  if (iudtct->i2cAddr(1))
93  vector_of_undetected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
94  }
95  if (!vector_of_undetected_apvs.empty()) { // add only is smth. there, obviously
96  std::map<uint32_t, std::vector<int>> map_of_undetected_apvs;
97  map_of_undetected_apvs.insert(std::make_pair(iudtct->detId(), vector_of_undetected_apvs));
98  addFromSpecificConnection(undetected_, map_of_undetected_apvs, &(connectionCount[2]));
99  }
100  }
101 }
102 
103 //---- add to certain connections
105  std::map<uint32_t, std::vector<const FedChannelConnection *>> &conns) {
106  if (conn.detId() && conn.detId() != sistrip::invalid32_ && // check for valid detid
107  conn.apvPairNumber() != sistrip::invalid_) { // check for valid apv pair number
108  if (conn.fedId() == 0 || conn.fedId() == sistrip::invalid_) {
109  edm::LogInfo("") << " SiStripDetCabling::addDevices for connection "
110  "associated to detid "
111  << conn.detId() << " apvPairNumber " << conn.apvPairNumber() << "the fedId is " << conn.fedId();
112  return;
113  }
114  // check cached vector size is sufficient
115  // if not, resize
116  if (conn.apvPairNumber() >= conns[conn.detId()].size()) {
117  conns[conn.detId()].resize(conn.apvPairNumber() + 1);
118  }
119  // add latest connection object
120  conns[conn.detId()][conn.apvPairNumber()] = &conn;
121  }
122 }
123 
124 //----
126  const FedChannelConnection &conn) { // by default add to fullcabling_ connections - special case of
127  // above class
128  addDevices(conn, fullcabling_); // add to fullcabling_
129 }
130 
131 //---- get vector of connected modules. replaces getActiveDetectorRawIds method
132 //- avoid use of static
133 void SiStripDetCabling::addActiveDetectorsRawIds(std::vector<uint32_t> &vector_to_fill_with_detids) const {
134  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = connected_.begin(); conn_it != connected_.end();
135  ++conn_it) {
136  vector_to_fill_with_detids.push_back(conn_it->first);
137  }
138  // no elements added to vector_to_fill_with_detids is empty connected_
139 }
140 
141 //---- get vector of all modules.
142 void SiStripDetCabling::addAllDetectorsRawIds(std::vector<uint32_t> &vector_to_fill_with_detids) const {
143  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = connected_.begin(); conn_it != connected_.end();
144  ++conn_it) {
145  vector_to_fill_with_detids.push_back(conn_it->first);
146  }
147  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = detected_.begin(); conn_it != detected_.end();
148  ++conn_it) {
149  vector_to_fill_with_detids.push_back(conn_it->first);
150  }
151  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = undetected_.begin(); conn_it != undetected_.end();
152  ++conn_it) {
153  vector_to_fill_with_detids.push_back(conn_it->first);
154  }
155  // no elements added to vector_to_fill_with_detids is empty connected_,
156  // detected_.begin and undetected_.begin
157 }
158 
159 //----
160 const std::vector<const FedChannelConnection *> &SiStripDetCabling::getConnections(
161  uint32_t det_id) const { // return all connections corresponding to one det_id
162  std::map<uint32_t, std::vector<const FedChannelConnection *>>::const_iterator detcabl_it =
163  fullcabling_.find(det_id); // has to be const_iterator because this
164  // function cannot change data members
165  if (!(detcabl_it == fullcabling_.end())) { // found detid in fullcabling_
166  return (detcabl_it->second);
167  } else { // DKwarn : is there need for output message here telling det_id does
168  // not exist?
169  const static std::vector<const FedChannelConnection *> default_empty_fedchannelconnection;
170  return default_empty_fedchannelconnection;
171  }
172 }
173 
174 //----
175 const FedChannelConnection &SiStripDetCabling::getConnection(uint32_t det_id, unsigned short apv_pair) const {
176  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
177  for (std::vector<const FedChannelConnection *>::const_iterator iconn = fcconns.begin(); iconn != fcconns.end();
178  ++iconn) {
179  if (((*iconn) != nullptr) && (((*iconn)->apvPairNumber()) == apv_pair)) { // check if apvPairNumber() of present
180  // FedChannelConnection is the same as requested one
181  return (**iconn); // if yes, return the FedChannelConnection object
182  }
183  }
184  // if did not match none of the above, return some default value - DKwarn :
185  // also output message?
186  const static FedChannelConnection default_empty_fedchannelconnection;
187  return default_empty_fedchannelconnection;
188 }
189 
190 //----
191 const unsigned int SiStripDetCabling::getDcuId(uint32_t det_id) const {
192  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
193  if (!fcconns.empty()) {
194  // patch needed to take into account the possibility that the first
195  // component of fcconns is invalid
196  for (size_t i = 0; i < fcconns.size(); ++i)
197  if (fcconns.at(i) && fcconns.at(i)->detId() != sistrip::invalid32_ && fcconns.at(i)->detId() != 0)
198  return (fcconns.at(i))->dcuId(); // get dcuId of first element - when
199  // you build check this consistency
200  }
201  // default if none of the above is fulfilled
202  unsigned int default_zero_value = 0;
203  return default_zero_value;
204 }
205 
206 //---- one can find the nr of apvs from fullcabling_ ->
207 // std::vector<FedChannelConnection> -> size * 2
208 const uint16_t SiStripDetCabling::nApvPairs(uint32_t det_id) const {
209  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
210  if (!fcconns.empty()) {
211  // patch needed to take into account the possibility that the first
212  // component of fcconns is invalid
213  for (size_t i = 0; i < fcconns.size(); ++i) {
214  if ((fcconns.at(i) != nullptr) && (fcconns.at(i)->nApvPairs() != sistrip::invalid_)) {
215  return fcconns.at(i)->nApvPairs(); // nr of apvpairs for associated module
216  }
217  }
218  }
219  // else {
220  // return 0;
221  // }
222  return 0;
223 }
224 
225 //---- map of detector to list of APVs for APVs seen from FECs and FEDs
226 void SiStripDetCabling::addConnected(std::map<uint32_t, std::vector<int>> &map_to_add_to) const {
227  addFromSpecificConnection(map_to_add_to, connected_);
228 }
229 
230 //--- map of detector to list of APVs for APVs seen neither from FECS or FEDs
231 void SiStripDetCabling::addDetected(std::map<uint32_t, std::vector<int>> &map_to_add_to) const {
232  addFromSpecificConnection(map_to_add_to, detected_);
233 }
234 
235 //---- map of detector to list of APVs for APVs seen neither from FECS or FEDs
236 void SiStripDetCabling::addUnDetected(std::map<uint32_t, std::vector<int>> &map_to_add_to) const {
237  addFromSpecificConnection(map_to_add_to, undetected_);
238 }
239 
240 //---- map of detector to list of APVs that are not connected - combination of
241 // addDetected and addUnDetected
242 void SiStripDetCabling::addNotConnectedAPVs(std::map<uint32_t, std::vector<int>> &map_to_add_to) const {
243  addFromSpecificConnection(map_to_add_to, detected_);
244  addFromSpecificConnection(map_to_add_to, undetected_);
245 }
246 
247 //----
248 void SiStripDetCabling::addFromSpecificConnection(std::map<uint32_t, std::vector<int>> &map_to_add_to,
249  const std::map<uint32_t, std::vector<int>> &specific_connection,
250  std::map<int16_t, uint32_t> *connectionsToFill) const {
251  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = specific_connection.begin();
252  conn_it != specific_connection.end();
253  ++conn_it) {
254  uint32_t new_detid = conn_it->first;
255  std::vector<int> new_apv_vector = conn_it->second;
256  std::map<uint32_t, std::vector<int>>::iterator it = map_to_add_to.find(new_detid);
257  if (it == map_to_add_to.end()) { // detid does not exist in map, add new entry
258  std::sort(new_apv_vector.begin(),
259  new_apv_vector.end()); // not very efficient sort, time consuming?
260  map_to_add_to.insert(std::make_pair(new_detid, new_apv_vector));
261 
262  // Count the number of detIds per layer. Doing it in this "if" we count
263  // each detId only once (otherwise it would be counted once per APV pair)
264  // ATTENTION: consider changing the loop content to avoid this
265  // This is the expected full number of modules (double sided are counted
266  // twice because the two sides have different detId). TIB1 : 336, TIB2 :
267  // 432, TIB3 : 540, TIB4 : 648 TID : each disk has 48+48+40
268  // (ring1+ring2+ring3) TOB1 : 504, TOB2 : 576, TOB3 : 648, TOB4 : 720,
269  // TOB5 : 792, TOB6 : 888 TEC1 : Total number of modules = 6400.
270  if (connectionsToFill) {
271  (*connectionsToFill)[layerSearch(new_detid)]++;
272  }
273 
274  } else { // detid exists already, add to its vector - if its not there
275  // already . . .
276  std::vector<int> existing_apv_vector = it->second;
277  for (std::vector<int>::iterator inew = new_apv_vector.begin(); inew != new_apv_vector.end(); ++inew) {
278  bool there_already = false;
279  for (std::vector<int>::iterator iold = existing_apv_vector.begin(); iold != existing_apv_vector.end(); ++iold) {
280  if (*iold == *inew) {
281  there_already = true;
282  break; // leave the loop
283  }
284  }
285  if (!there_already) {
286  existing_apv_vector.push_back(*inew);
287  std::sort(existing_apv_vector.begin(),
288  existing_apv_vector.end()); // not very efficient sort, time consuming?
289  } else {
290  // edm::LogWarning("Logical") << "apv "<<*inew<<" already exists in
291  // the detector module "<<new_detid;
292  }
293  }
294  }
295  }
296 }
297 
298 int16_t SiStripDetCabling::layerSearch(const uint32_t detId) const {
299  const DetId detectorId = DetId(detId);
300  const int subdet = detectorId.subdetId();
301  if (subdet == StripSubdetector::TIB) {
302  return tTopo->layer(detId);
303  } else if (subdet == StripSubdetector::TID) {
304  // side: 1 = negative, 2 = positive
305  return 10 + (tTopo->side(detId) - 1) * 3 + tTopo->layer(detId);
306  } else if (subdet == StripSubdetector::TOB) {
307  return 100 + tTopo->layer(detId);
308  } else if (subdet == StripSubdetector::TEC) {
309  // side: 1 = negative, 2 = positive
310  return 1000 + (tTopo->side(detId) - 1) * 9 + tTopo->layer(detId);
311  }
312  return 0;
313 }
314 
317 uint32_t SiStripDetCabling::detNumber(const std::string &subDet, const uint16_t layer, const int connectionType) const {
318  uint16_t subDetLayer = layer;
319  // TIB = 1, TID = 2, TOB = 3, TEC = 4
320  if (subDet == "TID-")
321  subDetLayer += 10;
322  else if (subDet == "TID+")
323  subDetLayer += 10 + 3;
324  else if (subDet == "TOB")
325  subDetLayer += 100;
326  else if (subDet == "TEC-")
327  subDetLayer += 1000;
328  else if (subDet == "TEC+")
329  subDetLayer += 1000 + 9;
330  else if (subDet != "TIB") {
331  LogDebug("SiStripDetCabling") << "Error: Wrong subDet. Please use one of TIB, TID, TOB, TEC." << std::endl;
332  return 0;
333  }
334  auto found = connectionCount[connectionType].find(subDetLayer);
335  if (found != connectionCount[connectionType].end()) {
336  return found->second;
337  }
338  return 0;
339 }
340 
341 //---- map of all connected, detected, undetected to contiguous Ids - map reset
342 // first!
343 void SiStripDetCabling::getAllDetectorsContiguousIds(std::map<uint32_t, unsigned int> &allToContiguous) const {
344  allToContiguous.clear(); // reset map
345  std::vector<uint32_t> all;
347  std::sort(all.begin(), all.end()); // get all detids and sort them
348  unsigned int contiguousIndex = 0;
349  for (std::vector<uint32_t>::const_iterator idet = all.begin(); idet != all.end(); ++idet) {
350  ++contiguousIndex;
351  allToContiguous.insert(std::make_pair(*idet, contiguousIndex));
352  }
353 }
354 
355 //---- map of all connected - map reset first!
356 void SiStripDetCabling::getActiveDetectorsContiguousIds(std::map<uint32_t, unsigned int> &connectedToContiguous) const {
357  connectedToContiguous.clear(); // reset map
358  std::vector<uint32_t> connected;
359  addAllDetectorsRawIds(connected);
360  std::sort(connected.begin(),
361  connected.end()); // get connected detids and sort them (not
362  // strictly necessary)
363  std::map<uint32_t, unsigned int> allToContiguous;
364  getAllDetectorsContiguousIds(allToContiguous); // create map of all indices
365  for (std::vector<uint32_t>::const_iterator idet = connected.begin(); idet != connected.end();
366  ++idet) { // select only the indices for active detectors
367  std::map<uint32_t, unsigned int>::iterator deco = allToContiguous.find(*idet);
368  if (deco != allToContiguous.end()) {
369  connectedToContiguous.insert(*deco);
370  }
371  }
372 }
373 
374 bool SiStripDetCabling::IsConnected(const uint32_t &det_id) const { return IsInMap(det_id, connected_); }
375 
376 bool SiStripDetCabling::IsDetected(const uint32_t &det_id) const { return IsInMap(det_id, detected_); }
377 bool SiStripDetCabling::IsUndetected(const uint32_t &det_id) const { return IsInMap(det_id, undetected_); }
378 bool SiStripDetCabling::IsInMap(const uint32_t &det_id, const std::map<uint32_t, std::vector<int>> &map) const {
379  std::map<uint32_t, std::vector<int>>::const_iterator it = map.find(det_id);
380  return (it != map.end());
381 }
382 
383 // -----------------------------------------------------------------------------
385 void SiStripDetCabling::print(std::stringstream &ss) const {
386  uint32_t valid = 0;
387  uint32_t total = 0;
388  typedef std::vector<const FedChannelConnection *> Conns;
389  typedef std::map<uint32_t, Conns> ConnsMap;
390  ConnsMap::const_iterator ii = fullcabling_.begin();
391  ConnsMap::const_iterator jj = fullcabling_.end();
392  ss << "[SiStripDetCabling::" << __func__ << "]"
393  << " Printing DET cabling for " << fullcabling_.size() << " modules " << std::endl;
394  for (; ii != jj; ++ii) {
395  ss << "Printing " << ii->second.size() << " connections for DetId: " << ii->first << std::endl;
396  Conns::const_iterator iii = ii->second.begin();
397  Conns::const_iterator jjj = ii->second.end();
398  for (; iii != jjj; ++iii) {
399  if ((*iii)->isConnected()) {
400  valid++;
401  }
402  total++;
403  ss << **iii << std::endl;
404  }
405  }
406  ss << "Number of connected: " << valid << std::endl << "Number of connections: " << total << std::endl;
407 }
408 
409 void SiStripDetCabling::printSummary(std::stringstream &ss, const TrackerTopology *trackerTopo) const {
410  for (int connectionType = 0; connectionType < 3; ++connectionType) {
411  if (connectionType == 0)
412  ss << "Connected modules:" << std::endl;
413  else if (connectionType == 1)
414  ss << "Detected modules:" << std::endl;
415  else
416  ss << "Undetected modules:" << std::endl;
417  ss << "SubDet and layer\t modules" << std::endl;
418  std::map<int16_t, uint32_t>::const_iterator iter = connectionCount[connectionType].begin();
419  for (; iter != connectionCount[connectionType].end(); ++iter) {
420  uint32_t subDetLayer = iter->first;
421  uint32_t modules = iter->second;
422  if (int(subDetLayer / 10) == 0) {
423  ss << "TIB \t layer " << subDetLayer << " \t" << modules << std::endl;
424  } else if (int(subDetLayer / 100) == 0) {
425  int layer = subDetLayer % 10;
426  if (layer <= 3)
427  ss << "TID- \t disk " << layer << "\t" << modules << std::endl;
428  else
429  ss << "TID+ \t disk " << layer - 3 << "\t" << modules << std::endl;
430  } else if (int(subDetLayer / 1000) == 0) {
431  int layer = subDetLayer % 100;
432  ss << "TOB \t layer " << layer << " \t" << modules << std::endl;
433  } else {
434  int layer = subDetLayer % 100;
435  if (layer <= 9)
436  ss << "TEC- \t disk " << layer << " \t" << modules << std::endl;
437  else
438  ss << "TEC+ \t disk " << layer - 9 << " \t" << modules << std::endl;
439  }
440  }
441  }
442 }
443 
444 void SiStripDetCabling::printDebug(std::stringstream &ss, const TrackerTopology * /*trackerTopo*/) const { print(ss); }
#define LogDebug(id)
ConnsConstIterRange detectedDevices() const
const FedChannelConnection & getConnection(uint32_t det_id, unsigned short apv_pair) const
void addActiveDetectorsRawIds(std::vector< uint32_t > &) const
std::map< uint32_t, std::vector< int > > const & connected() const
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_
CaloTopology const * topology(0)
const unsigned int getDcuId(uint32_t det_id) const
static const uint32_t invalid32_
Definition: Constants.h:15
void addFromSpecificConnection(std::map< uint32_t, std::vector< int >> &, const std::map< uint32_t, std::vector< int >> &, std::map< int16_t, uint32_t > *connectionsToFill=nullptr) const
ConnsConstIterRange undetectedDevices() const
#define nullptr
uint16_t apvPairNumber() const
unsigned int side(const DetId &id) const
bool IsConnected(const uint32_t &det_id) const
int16_t layerSearch(const uint32_t detId) const
const uint16_t & fedId() const
const SiStripFedCabling * fedCabling_
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
boost::iterator_range< ConnsConstIter > ConnsConstIterRange
const uint32_t & detId() const
Class containning control, module, detector and connection information, at the level of a FED channel...
FedsConstIterRange fedIds() const
uint32_t detNumber(const std::string &subDet, const uint16_t layer, const int connectionType) const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
bool IsUndetected(const uint32_t &det_id) const
void printDebug(std::stringstream &ss, const TrackerTopology *trackerTopo) const
void getAllDetectorsContiguousIds(std::map< uint32_t, unsigned int > &) const
#define end
Definition: vmac.h:39
void addDevices(const FedChannelConnection &, std::map< uint32_t, std::vector< const FedChannelConnection * >> &)
void printSummary(std::stringstream &ss, const TrackerTopology *trackerTopo) const
ii
Definition: cuy.py:590
std::map< uint32_t, std::vector< int > > connected_
void addNotConnectedAPVs(std::map< uint32_t, std::vector< int >> &) const
Definition: DetId.h:18
virtual ~SiStripDetCabling()
void addUnDetected(std::map< uint32_t, std::vector< int >> &) const
static const uint16_t invalid_
Definition: Constants.h:16
std::map< uint32_t, std::vector< int > > detected_
ConnsConstIterRange fedConnections(uint16_t fed_id) const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
std::map< uint32_t, std::vector< int > > undetected_
unsigned int layer(const DetId &id) const
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int >> &) const
const uint16_t nApvPairs(uint32_t det_id) const
void getActiveDetectorsContiguousIds(std::map< uint32_t, unsigned int > &) const
const TrackerTopology *const tTopo
std::map< int16_t, uint32_t > connectionCount[3]
void addConnected(std::map< uint32_t, std::vector< int >> &) const
void addAllDetectorsRawIds(std::vector< uint32_t > &vector_to_fill_with_detids) const
bool IsDetected(const uint32_t &det_id) const
void addDetected(std::map< uint32_t, std::vector< int >> &) const
void print(std::stringstream &) const
SiStripDetCabling(const TrackerTopology *const topology)