CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiStripDetCabling Class Reference

#include <CalibFormats/SiStripObjects/interface/SiStripDetCabling.h>

Public Member Functions

void addActiveDetectorsRawIds (std::vector< uint32_t > &) const
 
void addAllDetectorsRawIds (std::vector< uint32_t > &vector_to_fill_with_detids) const
 
void addConnected (std::map< uint32_t, std::vector< int > > &) const
 
void addDetected (std::map< uint32_t, std::vector< int > > &) const
 
void addDevices (const FedChannelConnection &, std::map< uint32_t, std::vector< FedChannelConnection > > &)
 
void addDevices (const FedChannelConnection &)
 
void addNotConnectedAPVs (std::map< uint32_t, std::vector< int > > &) const
 
void addUnDetected (std::map< uint32_t, std::vector< int > > &) const
 
uint32_t connectedNumber (const std::string &subDet, const uint16_t layer) const
 
uint32_t detectedNumber (const std::string &subDet, const uint16_t layer) const
 
const SiStripFedCablingfedCabling () const
 
void getActiveDetectorsContiguousIds (std::map< uint32_t, unsigned int > &) const
 
void getAllDetectorsContiguousIds (std::map< uint32_t, unsigned int > &) const
 
const FedChannelConnectiongetConnection (uint32_t det_id, unsigned short apv_pair) const
 
const std::vector
< FedChannelConnection > & 
getConnections (uint32_t det_id) const
 
const unsigned int getDcuId (uint32_t det_id) const
 
const std::map< uint32_t,
std::vector
< FedChannelConnection > > & 
getDetCabling () const
 
bool IsConnected (const uint32_t &det_id) const
 
bool IsDetected (const uint32_t &det_id) const
 
bool IsUndetected (const uint32_t &det_id) const
 
const uint16_t nApvPairs (uint32_t det_id) const
 
void print (std::stringstream &) const
 
void printDebug (std::stringstream &ss) const
 
void printSummary (std::stringstream &ss) const
 
 SiStripDetCabling ()
 
 SiStripDetCabling (const SiStripFedCabling &)
 
uint32_t undetectedNumber (const std::string &subDet, const uint16_t layer) const
 
virtual ~SiStripDetCabling ()
 

Private Member Functions

void addFromSpecificConnection (std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) 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. More...
 
bool IsInMap (const uint32_t &det_id, const std::map< uint32_t, std::vector< int > > &) const
 
int16_t layerSearch (const uint32_t detId) const
 
const SiStripDetCablingoperator= (const SiStripDetCabling &)
 
 SiStripDetCabling (const SiStripDetCabling &)
 

Private Attributes

std::map< uint32_t,
std::vector< int > > 
connected_
 
std::map< int16_t, uint32_t > connectionCount [3]
 
std::map< uint32_t,
std::vector< int > > 
detected_
 
const SiStripFedCablingfedCabling_
 
std::map< uint32_t,
std::vector
< FedChannelConnection > > 
fullcabling_
 
std::map< uint32_t,
std::vector< int > > 
undetected_
 

Detailed Description

Description: give detector view of the cabling of the silicon strip tracker

Definition at line 20 of file SiStripDetCabling.h.

Constructor & Destructor Documentation

SiStripDetCabling::SiStripDetCabling ( )

Definition at line 17 of file SiStripDetCabling.cc.

17 : fedCabling_(0) {}
const SiStripFedCabling * fedCabling_
SiStripDetCabling::~SiStripDetCabling ( )
virtual

Definition at line 18 of file SiStripDetCabling.cc.

18 {}
SiStripDetCabling::SiStripDetCabling ( const SiStripFedCabling fedcabling)

Definition at line 21 of file SiStripDetCabling.cc.

References addDevices(), addFromSpecificConnection(), connected_, SiStripFedCabling::connections(), SiStripFedCabling::detected(), detected_, SiStripFedCabling::feds(), fullcabling_, sistrip::invalid32_, sistrip::invalid_, SiStripFedCabling::undetected(), and undetected_.

21  : fullcabling_(), connected_(), detected_(), undetected_(), fedCabling_(&fedcabling)
22 {
23  // --- CONNECTED = have fedid and i2cAddr
24  // create fullcabling_, loop over vector of FedChannelConnection, either make new element of map, or add to appropriate vector of existing map element
25  // get feds list (vector) from fedcabling object - these are the active FEDs
26  const std::vector<uint16_t>& feds = fedcabling.feds();
27  std::vector<uint16_t>::const_iterator ifed;
28  for ( ifed = feds.begin(); ifed != feds.end(); ifed++ ) { // iterate over active feds, get all their FedChannelConnection-s
29  const std::vector<FedChannelConnection>& conns = fedcabling.connections( *ifed );
30  std::vector<FedChannelConnection>::const_iterator iconn;
31  for ( iconn = conns.begin(); iconn != conns.end(); iconn++ ) { // loop over FedChannelConnection objects
32  addDevices(*iconn, fullcabling_); // leave separate method, in case you will need to add devices also after constructing
33  bool have_fed_id = iconn->fedId();
34  std::vector<int> vector_of_connected_apvs;
35  if(have_fed_id){ // these apvpairs are seen from the readout
36  // there can be at most 6 APVs on one DetId: 0,1,2,3,4,5
37  int which_apv_pair = iconn->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2) for 768 strips
38 
39  // patch needed to take into account invalid detids or apvPairs
40  if( iconn->detId()==0 ||
41  iconn->detId() == sistrip::invalid32_ ||
42  iconn->apvPairNumber() == sistrip::invalid_ ||
43  iconn->nApvPairs() == sistrip::invalid_ ) {
44  continue;
45  }
46 
47  if(iconn->i2cAddr(0)) vector_of_connected_apvs.push_back(2*which_apv_pair + 0); // first apv of the pair
48  if(iconn->i2cAddr(1)) vector_of_connected_apvs.push_back(2*which_apv_pair + 1); // second apv of the pair
49  }
50  if(vector_of_connected_apvs.size() != 0){ // 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, 0);
54  }
55  }
56  }
57  // --- DETECTED = do not have fedid but have i2cAddr
58  const std::vector<FedChannelConnection>& detected_fed_connections = fedcabling.detected();
59  for(std::vector<FedChannelConnection>::const_iterator idtct = detected_fed_connections.begin(); idtct != detected_fed_connections.end(); idtct++){
60  addDevices(*idtct, fullcabling_);
61  bool have_fed_id = idtct->fedId();
62  std::vector<int> vector_of_detected_apvs;
63  if(! have_fed_id){
64  int which_apv_pair = idtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2) for 768 strips
65  if(idtct->i2cAddr(0)) vector_of_detected_apvs.push_back(2*which_apv_pair + 0); // first apv of the pair
66  if(idtct->i2cAddr(1)) vector_of_detected_apvs.push_back(2*which_apv_pair + 1); // second apv of the pair
67  }
68  if(vector_of_detected_apvs.size() != 0){ // add only is smth. there, obviously
69  std::map<uint32_t,std::vector<int> > map_of_detected_apvs;
70  map_of_detected_apvs.insert(std::make_pair(idtct->detId(),vector_of_detected_apvs));
71  addFromSpecificConnection(detected_, map_of_detected_apvs, 1);
72  }
73  }
74  // --- UNDETECTED = have neither fedid nor i2caddr
75  const std::vector<FedChannelConnection>& undetected_fed_connections = fedcabling.undetected();
76  for(std::vector<FedChannelConnection>::const_iterator iudtct = undetected_fed_connections.begin(); iudtct != undetected_fed_connections.end(); iudtct++){
77  addDevices(*iudtct, fullcabling_);
78  bool have_fed_id = iudtct->fedId();
79  std::vector<int> vector_of_undetected_apvs;
80  if(! have_fed_id){
81  int which_apv_pair = iudtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2) for 768 strips
82  if(iudtct->i2cAddr(0)) vector_of_undetected_apvs.push_back(2*which_apv_pair + 0); // first apv of the pair
83  if(iudtct->i2cAddr(1)) vector_of_undetected_apvs.push_back(2*which_apv_pair + 1); // second apv of the pair
84  }
85  if(vector_of_undetected_apvs.size() != 0){ // add only is smth. there, obviously
86  std::map<uint32_t, std::vector<int> > map_of_undetected_apvs;
87  map_of_undetected_apvs.insert(std::make_pair(iudtct->detId(),vector_of_undetected_apvs));
88  addFromSpecificConnection(undetected_, map_of_undetected_apvs, 2);
89  }
90  }
91 }
const std::vector< uint16_t > & feds() const
std::map< uint32_t, std::vector< int > > connected_
static const uint32_t invalid32_
Definition: Constants.h:16
void addFromSpecificConnection(std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) const
void addDevices(const FedChannelConnection &, std::map< uint32_t, std::vector< FedChannelConnection > > &)
const SiStripFedCabling * fedCabling_
std::map< uint32_t, std::vector< int > > detected_
const std::vector< FedChannelConnection > & undetected() const
const std::vector< FedChannelConnection > & detected() const
static const uint16_t invalid_
Definition: Constants.h:17
std::map< uint32_t, std::vector< int > > undetected_
const std::vector< FedChannelConnection > & connections(uint16_t fed_id) const
std::map< uint32_t, std::vector< FedChannelConnection > > fullcabling_
SiStripDetCabling::SiStripDetCabling ( const SiStripDetCabling )
private

Member Function Documentation

void SiStripDetCabling::addActiveDetectorsRawIds ( std::vector< uint32_t > &  vector_to_fill_with_detids) const

Definition at line 118 of file SiStripDetCabling.cc.

References connected_, and python.multivaluedict::map().

Referenced by SiStripQuality::addInvalidConnectionFromCabling(), SiStripCondObjBuilderFromDb::buildStripRelatedObjects(), and SiStripCondObjBuilderFromDb::retrieveActiveDetIds().

118  {
119  for(std::map< uint32_t, std::vector<int> >::const_iterator conn_it = connected_.begin(); conn_it!=connected_.end(); conn_it++){
120  vector_to_fill_with_detids.push_back(conn_it->first);
121  }
122  // no elements added to vector_to_fill_with_detids is empty connected_
123 }
std::map< uint32_t, std::vector< int > > connected_
void SiStripDetCabling::addAllDetectorsRawIds ( std::vector< uint32_t > &  vector_to_fill_with_detids) const

Definition at line 126 of file SiStripDetCabling.cc.

References connected_, detected_, python.multivaluedict::map(), and undetected_.

Referenced by getActiveDetectorsContiguousIds(), and getAllDetectorsContiguousIds().

126  {
127  for(std::map< uint32_t, std::vector<int> >::const_iterator conn_it = connected_.begin(); conn_it!=connected_.end(); conn_it++){
128  vector_to_fill_with_detids.push_back(conn_it->first);
129  }
130  for(std::map< uint32_t, std::vector<int> >::const_iterator conn_it = detected_.begin(); conn_it!=detected_.end(); conn_it++){
131  vector_to_fill_with_detids.push_back(conn_it->first);
132  }
133  for(std::map< uint32_t, std::vector<int> >::const_iterator conn_it = undetected_.begin(); conn_it!=undetected_.end(); conn_it++){
134  vector_to_fill_with_detids.push_back(conn_it->first);
135  }
136  // no elements added to vector_to_fill_with_detids is empty connected_, detected_.begin and undetected_.begin
137 }
std::map< uint32_t, std::vector< int > > connected_
std::map< uint32_t, std::vector< int > > detected_
std::map< uint32_t, std::vector< int > > undetected_
void SiStripDetCabling::addConnected ( std::map< uint32_t, std::vector< int > > &  map_to_add_to) const

Definition at line 192 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and connected_.

192  {
193  addFromSpecificConnection(map_to_add_to, connected_);
194 }
std::map< uint32_t, std::vector< int > > connected_
void addFromSpecificConnection(std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) const
void SiStripDetCabling::addDetected ( std::map< uint32_t, std::vector< int > > &  map_to_add_to) const

Definition at line 197 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and detected_.

197  {
198  addFromSpecificConnection(map_to_add_to, detected_);
199 }
void addFromSpecificConnection(std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) const
std::map< uint32_t, std::vector< int > > detected_
void SiStripDetCabling::addDevices ( const FedChannelConnection conn,
std::map< uint32_t, std::vector< FedChannelConnection > > &  conns 
)

Definition at line 94 of file SiStripDetCabling.cc.

References FedChannelConnection::apvPairNumber(), FedChannelConnection::detId(), FedChannelConnection::fedId(), sistrip::invalid32_, and sistrip::invalid_.

Referenced by addDevices(), and SiStripDetCabling().

95  {
96  if( conn.detId() && conn.detId() != sistrip::invalid32_ && // check for valid detid
97  conn.apvPairNumber() != sistrip::invalid_ ) { // check for valid apv pair number
98  if( conn.fedId()==0 || conn.fedId()==sistrip::invalid_ ){
99  edm::LogInfo("") << " SiStripDetCabling::addDevices for connection associated to detid " << conn.detId() << " apvPairNumber " << conn.apvPairNumber() << "the fedId is " << conn.fedId();
100  return;
101  }
102  // check cached vector size is sufficient
103  // if not, resize
104  if( conn.apvPairNumber() >= conns[conn.detId()].size() ) {
105  conns[conn.detId()].resize( conn.apvPairNumber()+1 );
106  }
107  // add latest connection object
108  conns[conn.detId()][conn.apvPairNumber()] = conn;
109  }
110 }
static const uint32_t invalid32_
Definition: Constants.h:16
uint16_t apvPairNumber() const
const uint16_t & fedId() const
const uint32_t & detId() const
static const uint16_t invalid_
Definition: Constants.h:17
void SiStripDetCabling::addDevices ( const FedChannelConnection conn)

Definition at line 113 of file SiStripDetCabling.cc.

References addDevices(), and fullcabling_.

113  { // by default add to fullcabling_ connections - special case of above class
114  addDevices(conn, fullcabling_ ); // add to fullcabling_
115 }
void addDevices(const FedChannelConnection &, std::map< uint32_t, std::vector< FedChannelConnection > > &)
std::map< uint32_t, std::vector< FedChannelConnection > > fullcabling_
void SiStripDetCabling::addFromSpecificConnection ( std::map< uint32_t, std::vector< int > > &  map_to_add_to,
const std::map< uint32_t, std::vector< int > > &  specific_connection,
const int  connectionType = -1 
) const
private

Definition at line 213 of file SiStripDetCabling.cc.

References connectionCount, layerSearch(), python.multivaluedict::map(), and python.multivaluedict::sort().

Referenced by addConnected(), addDetected(), addNotConnectedAPVs(), addUnDetected(), and SiStripDetCabling().

215  {
216  for(std::map< uint32_t, std::vector<int> >::const_iterator conn_it = specific_connection.begin(); conn_it!=specific_connection.end(); ++conn_it){
217  uint32_t new_detid = conn_it->first;
218  std::vector<int> new_apv_vector = conn_it->second;
219  std::map<uint32_t, std::vector<int> >::iterator it = map_to_add_to.find(new_detid);
220  if( it == map_to_add_to.end() ){ // detid does not exist in map, add new entry
221  std::sort(new_apv_vector.begin(),new_apv_vector.end()); // not very efficient sort, time consuming?
222  map_to_add_to.insert(std::make_pair(new_detid,new_apv_vector));
223 
224  // Count the number of detIds per layer. Doing it in this "if" we count each detId only once
225  // (otherwise it would be counted once per APV pair)
226  // ATTENTION: consider changing the loop content to avoid this
227  // This is the expected full number of modules (double sided are counted twice because the two
228  // sides have different detId).
229  // TIB1 : 336, TIB2 : 432, TIB3 : 540, TIB4 : 648
230  // TID : each disk has 48+48+40 (ring1+ring2+ring3)
231  // TOB1 : 504, TOB2 : 576, TOB3 : 648, TOB4 : 720, TOB5 : 792, TOB6 : 888
232  // TEC1 : Total number of modules = 6400.
233  if( connectionType != -1 ) {
234  connectionCount[connectionType][layerSearch(new_detid)]++;
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 }
int16_t layerSearch(const uint32_t detId) const
std::map< int16_t, uint32_t > connectionCount[3]
void SiStripDetCabling::addNotConnectedAPVs ( std::map< uint32_t, std::vector< int > > &  map_to_add_to) const

Definition at line 207 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), detected_, and undetected_.

207  {
208  addFromSpecificConnection(map_to_add_to, detected_);
209  addFromSpecificConnection(map_to_add_to, undetected_);
210 }
void addFromSpecificConnection(std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) const
std::map< uint32_t, std::vector< int > > detected_
std::map< uint32_t, std::vector< int > > undetected_
void SiStripDetCabling::addUnDetected ( std::map< uint32_t, std::vector< int > > &  map_to_add_to) const

Definition at line 202 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and undetected_.

202  {
203  addFromSpecificConnection(map_to_add_to, undetected_);
204 }
void addFromSpecificConnection(std::map< uint32_t, std::vector< int > > &, const std::map< uint32_t, std::vector< int > > &, const int connectionType=-1) const
std::map< uint32_t, std::vector< int > > undetected_
uint32_t SiStripDetCabling::connectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 58 of file SiStripDetCabling.h.

References detNumber().

58 { return detNumber(subDet, layer, 0); }
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.
uint32_t SiStripDetCabling::detectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 59 of file SiStripDetCabling.h.

References detNumber().

59 { return detNumber(subDet, layer, 1); }
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.
uint32_t SiStripDetCabling::detNumber ( const std::string &  subDet,
const uint16_t  layer,
const int  connectionType 
) const
private

Return the number of modules for the specified subDet, layer and connectionType.

Definition at line 278 of file SiStripDetCabling.cc.

References connectionCount, and LogDebug.

Referenced by connectedNumber(), detectedNumber(), and undetectedNumber().

278  {
279  uint16_t subDetLayer = layer;
280  // TIB = 1, TID = 2, TOB = 3, TEC = 4
281  if( subDet == "TID-" ) subDetLayer += 10;
282  else if( subDet == "TID+" ) subDetLayer += 10 + 3;
283  else if( subDet == "TOB" ) subDetLayer += 100;
284  else if( subDet == "TEC-" ) subDetLayer += 1000;
285  else if( subDet == "TEC+" ) subDetLayer += 1000 + 9;
286  else if( subDet != "TIB" ) {
287  LogDebug("SiStripDetCabling") << "Error: Wrong subDet. Please use one of TIB, TID, TOB, TEC." << std::endl;
288  return 0;
289  }
290  return connectionCount[connectionType][subDetLayer];
291 }
#define LogDebug(id)
std::map< int16_t, uint32_t > connectionCount[3]
const SiStripFedCabling* SiStripDetCabling::fedCabling ( ) const
inline

Definition at line 61 of file SiStripDetCabling.h.

References fedCabling_.

Referenced by SiStripQuality::add(), and SiStripQuality::turnOffFeds().

61 {return fedCabling_;}
const SiStripFedCabling * fedCabling_
void SiStripDetCabling::getActiveDetectorsContiguousIds ( std::map< uint32_t, unsigned int > &  connectedToContiguous) const

Definition at line 305 of file SiStripDetCabling.cc.

References addAllDetectorsRawIds(), getAllDetectorsContiguousIds(), and python.multivaluedict::sort().

305  {
306  connectedToContiguous.clear(); // reset map
307  std::vector<uint32_t> connected; addAllDetectorsRawIds(connected); std::sort(connected.begin(), connected.end()); // get connected detids and sort them (not strictly necessary)
308  std::map<uint32_t, unsigned int> allToContiguous; getAllDetectorsContiguousIds(allToContiguous); // create map of all indices
309  for(std::vector<uint32_t>::const_iterator idet = connected.begin(); idet!= connected.end(); ++idet){ // select only the indices for active detectors
310  std::map<uint32_t, unsigned int>::iterator deco = allToContiguous.find(*idet);
311  if(deco!=allToContiguous.end()){
312  connectedToContiguous.insert(*deco);
313  }
314  }
315 }
void getAllDetectorsContiguousIds(std::map< uint32_t, unsigned int > &) const
void addAllDetectorsRawIds(std::vector< uint32_t > &vector_to_fill_with_detids) const
void SiStripDetCabling::getAllDetectorsContiguousIds ( std::map< uint32_t, unsigned int > &  allToContiguous) const

Definition at line 294 of file SiStripDetCabling.cc.

References addAllDetectorsRawIds(), cond::ecalcond::all, and python.multivaluedict::sort().

Referenced by getActiveDetectorsContiguousIds().

294  {
295  allToContiguous.clear(); // reset map
296  std::vector<uint32_t> all; addAllDetectorsRawIds(all); std::sort(all.begin(), all.end()); // get all detids and sort them
297  unsigned int contiguousIndex = 0;
298  for(std::vector<uint32_t>::const_iterator idet = all.begin(); idet!= all.end(); ++idet){
299  ++contiguousIndex;
300  allToContiguous.insert(std::make_pair(*idet,contiguousIndex));
301  }
302 }
void addAllDetectorsRawIds(std::vector< uint32_t > &vector_to_fill_with_detids) const
const FedChannelConnection & SiStripDetCabling::getConnection ( uint32_t  det_id,
unsigned short  apv_pair 
) const

Definition at line 151 of file SiStripDetCabling.cc.

References getConnections().

151  {
152  const std::vector<FedChannelConnection>& fcconns = getConnections(det_id);
153  for(std::vector<FedChannelConnection>::const_iterator iconn = fcconns.begin(); iconn!=fcconns.end();iconn++){
154  if ( (iconn->apvPairNumber()) == apv_pair){ // check if apvPairNumber() of present FedChannelConnection is the same as requested one
155  return (*iconn); // if yes, return the FedChannelConnection object
156  }
157  }
158  // if did not match none of the above, return some default value - DKwarn : also output message?
159  static FedChannelConnection default_empty_fedchannelconnection;
160  return default_empty_fedchannelconnection;
161 }
Class containning control, module, detector and connection information, at the level of a FED channel...
const std::vector< FedChannelConnection > & getConnections(uint32_t det_id) const
const std::vector< FedChannelConnection > & SiStripDetCabling::getConnections ( uint32_t  det_id) const

Definition at line 140 of file SiStripDetCabling.cc.

References fullcabling_.

Referenced by SiStripQuality::addInvalidConnectionFromCabling(), APVShotsAnalyzer::analyze(), SiStripCondObjBuilderFromDb::buildConnections(), getConnection(), getDcuId(), and nApvPairs().

140  { // return all connections corresponding to one det_id
141  std::map< uint32_t, std::vector<FedChannelConnection> >::const_iterator detcabl_it = fullcabling_.find(det_id); // has to be const_iterator because this function cannot change data members
142  if( ! (detcabl_it==fullcabling_.end()) ){ // found detid in fullcabling_
143  return ( detcabl_it->second );
144  }else{ // DKwarn : is there need for output message here telling det_id does not exist?
145  static std::vector<FedChannelConnection> default_empty_fedchannelconnection;
146  return default_empty_fedchannelconnection;
147  }
148 }
std::map< uint32_t, std::vector< FedChannelConnection > > fullcabling_
const unsigned int SiStripDetCabling::getDcuId ( uint32_t  det_id) const

Definition at line 164 of file SiStripDetCabling.cc.

References getConnections(), i, and sistrip::invalid32_.

164  {
165  const std::vector<FedChannelConnection>& fcconns = getConnections( det_id );
166  if(fcconns.size()!=0) {
167  // patch needed to take into account the possibility that the first component of fcconns is invalid
168  for(size_t i=0;i<fcconns.size();++i)
169  if (fcconns.at(i).detId() != sistrip::invalid32_ && fcconns.at(i).detId() != 0 )
170  return ( fcconns.at(i) ).dcuId(); // get dcuId of first element - when you build check this consistency
171  }
172  // default if none of the above is fulfilled
173  unsigned int default_zero_value = 0;
174  return default_zero_value;
175 }
int i
Definition: DBlmapReader.cc:9
static const uint32_t invalid32_
Definition: Constants.h:16
const std::vector< FedChannelConnection > & getConnections(uint32_t det_id) const
const std::map< uint32_t, std::vector<FedChannelConnection> >& SiStripDetCabling::getDetCabling ( ) const
inline

Definition at line 29 of file SiStripDetCabling.h.

References fullcabling_.

29 { return fullcabling_; }
std::map< uint32_t, std::vector< FedChannelConnection > > fullcabling_
bool SiStripDetCabling::IsConnected ( const uint32_t &  det_id) const

Definition at line 317 of file SiStripDetCabling.cc.

References connected_, and IsInMap().

Referenced by SiStripQuality::addNotConnectedConnectionFromCabling(), and SiStripQuality::IsModuleUsable().

317  {
318  return IsInMap(det_id,connected_);
319 }
std::map< uint32_t, std::vector< int > > connected_
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int > > &) const
bool SiStripDetCabling::IsDetected ( const uint32_t &  det_id) const

Definition at line 321 of file SiStripDetCabling.cc.

References detected_, and IsInMap().

321  {
322  return IsInMap(det_id,detected_);
323 }
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int > > &) const
std::map< uint32_t, std::vector< int > > detected_
bool SiStripDetCabling::IsInMap ( const uint32_t &  det_id,
const std::map< uint32_t, std::vector< int > > &  map 
) const
private

Definition at line 327 of file SiStripDetCabling.cc.

References python.multivaluedict::map().

Referenced by IsConnected(), IsDetected(), and IsUndetected().

327  {
328  std::map< uint32_t, std::vector<int> >::const_iterator it=map.find(det_id);
329  return (it!=map.end());
330 }
bool SiStripDetCabling::IsUndetected ( const uint32_t &  det_id) const

Definition at line 324 of file SiStripDetCabling.cc.

References IsInMap(), and undetected_.

324  {
325  return IsInMap(det_id,undetected_);
326 }
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int > > &) const
std::map< uint32_t, std::vector< int > > undetected_
int16_t SiStripDetCabling::layerSearch ( const uint32_t  detId) const
private

Definition at line 257 of file SiStripDetCabling.cc.

References TOBDetId::layerNumber(), TIBDetId::layerNumber(), TIDDetId::side(), TECDetId::side(), SiStripDetId::TEC, SiStripDetId::TIB, SiStripDetId::TID, SiStripDetId::TOB, TIDDetId::wheel(), and TECDetId::wheel().

Referenced by addFromSpecificConnection().

258 {
259  if(SiStripDetId(detId).subDetector()==SiStripDetId::TIB){
260  TIBDetId D(detId);
261  return D.layerNumber();
262  } else if (SiStripDetId(detId).subDetector()==SiStripDetId::TID){
263  TIDDetId D(detId);
264  // side: 1 = negative, 2 = positive
265  return 10+(D.side() -1)*3 + D.wheel();
266  } else if (SiStripDetId(detId).subDetector()==SiStripDetId::TOB){
267  TOBDetId D(detId);
268  return 100+D.layerNumber();
269  } else if (SiStripDetId(detId).subDetector()==SiStripDetId::TEC){
270  TECDetId D(detId);
271  // side: 1 = negative, 2 = positive
272  return 1000+(D.side() -1)*9 + D.wheel();
273  }
274  return 0;
275 }
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:150
const uint16_t SiStripDetCabling::nApvPairs ( uint32_t  det_id) const

Definition at line 178 of file SiStripDetCabling.cc.

References getConnections(), i, and sistrip::invalid_.

Referenced by SiStripQuality::addInvalidConnectionFromCabling().

178  {
179  const std::vector<FedChannelConnection>& fcconns = getConnections( det_id );
180  if(fcconns.size()!=0) {
181  // patch needed to take into account the possibility that the first component of fcconns is invalid
182  for(size_t i=0;i<fcconns.size();++i)
183  if (fcconns.at(i).nApvPairs() != sistrip::invalid_)
184  return fcconns.at(i).nApvPairs(); // nr of apvpairs for associated module
185  }else{
186  return 0;
187  }
188  return 0;
189 }
int i
Definition: DBlmapReader.cc:9
const std::vector< FedChannelConnection > & getConnections(uint32_t det_id) const
static const uint16_t invalid_
Definition: Constants.h:17
const SiStripDetCabling& SiStripDetCabling::operator= ( const SiStripDetCabling )
private
void SiStripDetCabling::print ( std::stringstream &  ss) const

Added missing print method.

Definition at line 334 of file SiStripDetCabling.cc.

References fullcabling_, pileupDistInMC::total, and TrackValidation_HighPurity_cff::valid.

Referenced by printDebug().

334  {
335  uint32_t valid = 0;
336  uint32_t total = 0;
337  typedef std::vector<FedChannelConnection> Conns;
338  typedef std::map<uint32_t,Conns> ConnsMap;
339  ConnsMap::const_iterator ii = fullcabling_.begin();
340  ConnsMap::const_iterator jj = fullcabling_.end();
341  ss << "[SiStripDetCabling::" << __func__ << "]"
342  << " Printing DET cabling for " << fullcabling_.size()
343  << " modules " << std::endl;
344  for ( ; ii != jj; ++ii ) {
345  ss << "Printing " << ii->second.size()
346  << " connections for DetId: " << ii->first << std::endl;
347  Conns::const_iterator iii = ii->second.begin();
348  Conns::const_iterator jjj = ii->second.end();
349  for ( ; iii != jjj; ++iii ) {
350  if ( iii->isConnected() ) { valid++; }
351  total++;
352  ss << *iii << std::endl;
353  }
354  }
355  ss << "Number of connected: " << valid << std::endl
356  << "Number of connections: " << total << std::endl;
357 }
std::map< uint32_t, std::vector< FedChannelConnection > > fullcabling_
void SiStripDetCabling::printDebug ( std::stringstream &  ss) const

The printDebug method returns all the connected/detected/undetected modules.

Definition at line 390 of file SiStripDetCabling.cc.

References print().

390  {
391  print(ss);
392 }
void print(std::stringstream &) const
void SiStripDetCabling::printSummary ( std::stringstream &  ss) const

The printSummary method outputs the number of connected/detected/undetected modules for each layer of each subdetector.

Definition at line 359 of file SiStripDetCabling.cc.

References connectionCount.

359  {
360  for( int connectionType = 0; connectionType < 3; ++connectionType ) {
361  if( connectionType == 0 ) ss << "Connected modules:" << std::endl;
362  else if( connectionType == 1 ) ss << "Detected modules:" << std::endl;
363  else ss << "Undetected modules:" << std::endl;
364  ss << "SubDet and layer\t modules" << std::endl;
365  std::map< int16_t, uint32_t >::const_iterator iter = connectionCount[connectionType].begin();
366  for( ; iter != connectionCount[connectionType].end(); ++iter ) {
367  uint32_t subDetLayer = iter->first;
368  uint32_t modules = iter->second;
369  if( int(subDetLayer/10) == 0 ) {
370  ss << "TIB \t layer " << subDetLayer << " \t" << modules << std::endl;
371  }
372  else if( int(subDetLayer/100) == 0 ) {
373  int layer = subDetLayer%10;
374  if( layer <= 3 ) ss << "TID- \t disk " << layer << "\t" << modules << std::endl;
375  else ss << "TID+ \t disk " << layer-3 << "\t" << modules << std::endl;
376  }
377  else if( int(subDetLayer/1000) == 0 ) {
378  int layer = subDetLayer%100;
379  ss << "TOB \t layer " << layer << " \t" << modules << std::endl;
380  }
381  else {
382  int layer = subDetLayer%100;
383  if( layer <= 9 ) ss << "TEC- \t disk " << layer << " \t" << modules << std::endl;
384  else ss << "TEC+ \t disk " << layer-9 << " \t" << modules << std::endl;
385  }
386  }
387  }
388 }
std::map< int16_t, uint32_t > connectionCount[3]
uint32_t SiStripDetCabling::undetectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 60 of file SiStripDetCabling.h.

References detNumber().

60 { return detNumber(subDet, layer, 2); }
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.

Member Data Documentation

std::map< uint32_t, std::vector<int> > SiStripDetCabling::connected_
private
std::map< int16_t, uint32_t > SiStripDetCabling::connectionCount[3]
mutableprivate

Definition at line 84 of file SiStripDetCabling.h.

Referenced by addFromSpecificConnection(), detNumber(), and printSummary().

std::map< uint32_t, std::vector<int> > SiStripDetCabling::detected_
private
const SiStripFedCabling* SiStripDetCabling::fedCabling_
private

Definition at line 85 of file SiStripDetCabling.h.

Referenced by fedCabling().

std::map< uint32_t, std::vector<FedChannelConnection> > SiStripDetCabling::fullcabling_
private
std::map< uint32_t, std::vector<int> > SiStripDetCabling::undetected_
private