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