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