CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiStripDetCabling Class Reference

#include <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< const 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
 
std::map< uint32_t, std::vector< int > > const & connected () 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< const FedChannelConnection * > & getConnections (uint32_t det_id) const
 
const unsigned int getDcuId (uint32_t det_id) const
 
const std::map< uint32_t, std::vector< const 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
 
const SiStripDetCablingoperator= (const SiStripDetCabling &)=delete
 
void print (std::stringstream &) const
 
void printDebug (std::stringstream &ss, const TrackerTopology *trackerTopo) const
 
void printSummary (std::stringstream &ss, const TrackerTopology *trackerTopo) const
 
 SiStripDetCabling (const TrackerTopology *const topology)
 
 SiStripDetCabling (const SiStripFedCabling &, const TrackerTopology *const topology)
 
 SiStripDetCabling (const SiStripDetCabling &)=delete
 
const TrackerTopology *const trackerTopology () const
 
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 >> &, std::map< int16_t, uint32_t > *connectionsToFill=nullptr) const
 
uint32_t detNumber (const std::string &subDet, const uint16_t layer, const int connectionType) const
 
bool IsInMap (const uint32_t &det_id, const std::map< uint32_t, std::vector< int >> &) const
 
int16_t layerSearch (const uint32_t detId) const
 

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< const FedChannelConnection * > > fullcabling_
 
const TrackerTopology *const tTopo
 
std::map< uint32_t, std::vector< int > > undetected_
 

Detailed Description

CalibFormats/SiStripObjects/interface/SiStripDetCabling.h

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

Definition at line 21 of file SiStripDetCabling.h.

Constructor & Destructor Documentation

◆ SiStripDetCabling() [1/3]

SiStripDetCabling::SiStripDetCabling ( const TrackerTopology *const  topology)

Definition at line 15 of file SiStripDetCabling.cc.

15 : fedCabling_(nullptr), tTopo(topology) {}
const SiStripFedCabling * fedCabling_
const TrackerTopology *const tTopo

◆ ~SiStripDetCabling()

SiStripDetCabling::~SiStripDetCabling ( )
virtual

Definition at line 16 of file SiStripDetCabling.cc.

16 {}

◆ SiStripDetCabling() [2/3]

SiStripDetCabling::SiStripDetCabling ( const SiStripFedCabling fedcabling,
const TrackerTopology *const  topology 
)

Definition at line 19 of file SiStripDetCabling.cc.

References addDevices(), addFromSpecificConnection(), connected_, connectionCount, detected_, SiStripFedCabling::detectedDevices(), SiStripFedCabling::fedConnections(), SiStripFedCabling::fedIds(), l1tstage2emulator_dqm_sourceclient-live_cfg::feds, fullcabling_, sistrip::invalid32_, sistrip::invalid_, undetected_, and SiStripFedCabling::undetectedDevices().

20  : fullcabling_(), connected_(), detected_(), undetected_(), fedCabling_(&fedcabling), tTopo(topology) {
21  // --- CONNECTED = have fedid and i2cAddr
22  // create fullcabling_, loop over vector of FedChannelConnection, either make
23  // new element of map, or add to appropriate vector of existing map element
24  // get feds list (vector) from fedcabling object - these are the active FEDs
25  auto feds = fedcabling.fedIds();
26  for (auto ifed = feds.begin(); ifed != feds.end(); ifed++) { // iterate over active feds, get all their
27  // FedChannelConnection-s
29  for (auto iconn = conns.begin(); iconn != conns.end(); iconn++) { // loop over FedChannelConnection objects
30  addDevices(*iconn,
31  fullcabling_); // leave separate method, in case you will need
32  // 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)
38  // for 768 strips
39 
40  // patch needed to take into account invalid detids or apvPairs
41  if (iconn->detId() == 0 || iconn->detId() == sistrip::invalid32_ ||
42  iconn->apvPairNumber() == sistrip::invalid_ || iconn->nApvPairs() == sistrip::invalid_) {
43  continue;
44  }
45 
46  if (iconn->i2cAddr(0))
47  vector_of_connected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
48  if (iconn->i2cAddr(1))
49  vector_of_connected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
50  }
51  if (!vector_of_connected_apvs.empty()) { // add only is smth. there, obviously
52  std::map<uint32_t, std::vector<int>> map_of_connected_apvs;
53  map_of_connected_apvs.insert(std::make_pair(iconn->detId(), vector_of_connected_apvs));
54  addFromSpecificConnection(connected_, map_of_connected_apvs, &(connectionCount[0]));
55  }
56  }
57  }
58  // --- DETECTED = do not have fedid but have i2cAddr
59  SiStripFedCabling::ConnsConstIterRange detected_fed_connections = fedcabling.detectedDevices();
60  for (std::vector<FedChannelConnection>::const_iterator idtct = detected_fed_connections.begin();
61  idtct != detected_fed_connections.end();
62  ++idtct) {
63  addDevices(*idtct, fullcabling_);
64  bool have_fed_id = idtct->fedId();
65  std::vector<int> vector_of_detected_apvs;
66  if (!have_fed_id) {
67  int which_apv_pair = idtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2)
68  // for 768 strips
69  if (idtct->i2cAddr(0))
70  vector_of_detected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
71  if (idtct->i2cAddr(1))
72  vector_of_detected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
73  }
74  if (!vector_of_detected_apvs.empty()) { // add only is smth. there, obviously
75  std::map<uint32_t, std::vector<int>> map_of_detected_apvs;
76  map_of_detected_apvs.insert(std::make_pair(idtct->detId(), vector_of_detected_apvs));
77  addFromSpecificConnection(detected_, map_of_detected_apvs, &(connectionCount[1]));
78  }
79  }
80  // --- UNDETECTED = have neither fedid nor i2caddr
81  SiStripFedCabling::ConnsConstIterRange undetected_fed_connections = fedcabling.undetectedDevices();
82  for (std::vector<FedChannelConnection>::const_iterator iudtct = undetected_fed_connections.begin();
83  iudtct != undetected_fed_connections.end();
84  ++iudtct) {
85  addDevices(*iudtct, fullcabling_);
86  bool have_fed_id = iudtct->fedId();
87  std::vector<int> vector_of_undetected_apvs;
88  if (!have_fed_id) {
89  int which_apv_pair = iudtct->apvPairNumber(); // APVPair (0,1) for 512 strips and (0,1,2)
90  // for 768 strips
91  if (iudtct->i2cAddr(0))
92  vector_of_undetected_apvs.push_back(2 * which_apv_pair + 0); // first apv of the pair
93  if (iudtct->i2cAddr(1))
94  vector_of_undetected_apvs.push_back(2 * which_apv_pair + 1); // second apv of the pair
95  }
96  if (!vector_of_undetected_apvs.empty()) { // add only is smth. there, obviously
97  std::map<uint32_t, std::vector<int>> map_of_undetected_apvs;
98  map_of_undetected_apvs.insert(std::make_pair(iudtct->detId(), vector_of_undetected_apvs));
99  addFromSpecificConnection(undetected_, map_of_undetected_apvs, &(connectionCount[2]));
100  }
101  }
102 }
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_
static const uint32_t invalid32_
Definition: Constants.h:15
const SiStripFedCabling * fedCabling_
boost::iterator_range< ConnsConstIter > ConnsConstIterRange
void addDevices(const FedChannelConnection &, std::map< uint32_t, std::vector< const FedChannelConnection *>> &)
std::map< uint32_t, std::vector< int > > connected_
ConnsConstIterRange undetectedDevices() const
static const uint16_t invalid_
Definition: Constants.h:16
std::map< uint32_t, std::vector< int > > detected_
std::map< uint32_t, std::vector< int > > undetected_
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
const TrackerTopology *const tTopo
std::map< int16_t, uint32_t > connectionCount[3]
FedsConstIterRange fedIds() const
ConnsConstIterRange detectedDevices() const
ConnsConstIterRange fedConnections(uint16_t fed_id) const

◆ SiStripDetCabling() [3/3]

SiStripDetCabling::SiStripDetCabling ( const SiStripDetCabling )
delete

Member Function Documentation

◆ addActiveDetectorsRawIds()

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

Definition at line 134 of file SiStripDetCabling.cc.

References connected_, and genParticles_cff::map.

Referenced by SiStripQuality::addInvalidConnectionFromCabling(), SiStripGainCosmicCalculator::algoBeginJob(), SiStripMonitorTrack::book(), SiStripCondObjBuilderFromDb::buildStripRelatedObjects(), SiStripMonitorPedestals::createMEs(), SiStripMonitorDigi::createMEs(), SiStripMonitorCluster::createMEs(), SiStripRecHitsValid::createMEs(), SiStripCablingDQM::getActiveDetIds(), SiStripDcsInfo::readCabling(), and SiStripCondObjBuilderFromDb::retrieveActiveDetIds().

134  {
135  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = connected_.begin(); conn_it != connected_.end();
136  ++conn_it) {
137  vector_to_fill_with_detids.push_back(conn_it->first);
138  }
139  // no elements added to vector_to_fill_with_detids is empty connected_
140 }
std::map< uint32_t, std::vector< int > > connected_

◆ addAllDetectorsRawIds()

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

Definition at line 143 of file SiStripDetCabling.cc.

References connected_, detected_, genParticles_cff::map, and undetected_.

Referenced by getActiveDetectorsContiguousIds(), SiStripCablingDQM::getActiveDetIds(), and getAllDetectorsContiguousIds().

143  {
144  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = connected_.begin(); conn_it != connected_.end();
145  ++conn_it) {
146  vector_to_fill_with_detids.push_back(conn_it->first);
147  }
148  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = detected_.begin(); conn_it != detected_.end();
149  ++conn_it) {
150  vector_to_fill_with_detids.push_back(conn_it->first);
151  }
152  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = undetected_.begin(); conn_it != undetected_.end();
153  ++conn_it) {
154  vector_to_fill_with_detids.push_back(conn_it->first);
155  }
156  // no elements added to vector_to_fill_with_detids is empty connected_,
157  // detected_.begin and undetected_.begin
158 }
std::map< uint32_t, std::vector< int > > connected_
std::map< uint32_t, std::vector< int > > detected_
std::map< uint32_t, std::vector< int > > undetected_

◆ addConnected()

void SiStripDetCabling::addConnected ( std::map< uint32_t, std::vector< int >> &  map_to_add_to) const

Definition at line 227 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and connected_.

Referenced by TrackerPSimHitSelector::select().

227  {
228  addFromSpecificConnection(map_to_add_to, connected_);
229 }
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 >> &, std::map< int16_t, uint32_t > *connectionsToFill=nullptr) const

◆ addDetected()

void SiStripDetCabling::addDetected ( std::map< uint32_t, std::vector< int >> &  map_to_add_to) const

Definition at line 232 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and detected_.

232  {
233  addFromSpecificConnection(map_to_add_to, detected_);
234 }
std::map< uint32_t, std::vector< int > > detected_
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

◆ addDevices() [1/2]

void SiStripDetCabling::addDevices ( const FedChannelConnection conn,
std::map< uint32_t, std::vector< const FedChannelConnection *>> &  conns 
)

Definition at line 105 of file SiStripDetCabling.cc.

References getInfo::conn, sistrip::invalid32_, and sistrip::invalid_.

Referenced by addDevices(), and SiStripDetCabling().

106  {
107  if (conn.detId() && conn.detId() != sistrip::invalid32_ && // check for valid detid
108  conn.apvPairNumber() != sistrip::invalid_) { // check for valid apv pair number
109  if (conn.fedId() == 0 || conn.fedId() == sistrip::invalid_) {
110  edm::LogInfo("") << " SiStripDetCabling::addDevices for connection "
111  "associated to detid "
112  << conn.detId() << " apvPairNumber " << conn.apvPairNumber() << "the fedId is " << conn.fedId();
113  return;
114  }
115  // check cached vector size is sufficient
116  // if not, resize
117  if (conn.apvPairNumber() >= conns[conn.detId()].size()) {
118  conns[conn.detId()].resize(conn.apvPairNumber() + 1);
119  }
120  // add latest connection object
121  conns[conn.detId()][conn.apvPairNumber()] = &conn;
122  }
123 }
static const uint32_t invalid32_
Definition: Constants.h:15
Log< level::Info, false > LogInfo
static const uint16_t invalid_
Definition: Constants.h:16
conn
Definition: getInfo.py:9

◆ addDevices() [2/2]

void SiStripDetCabling::addDevices ( const FedChannelConnection conn)

Definition at line 126 of file SiStripDetCabling.cc.

References addDevices(), getInfo::conn, and fullcabling_.

127  { // by default add to fullcabling_ connections - special case of
128  // above class
129  addDevices(conn, fullcabling_); // add to fullcabling_
130 }
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_
void addDevices(const FedChannelConnection &, std::map< uint32_t, std::vector< const FedChannelConnection *>> &)
conn
Definition: getInfo.py:9

◆ addFromSpecificConnection()

void SiStripDetCabling::addFromSpecificConnection ( std::map< uint32_t, std::vector< int >> &  map_to_add_to,
const std::map< uint32_t, std::vector< int >> &  specific_connection,
std::map< int16_t, uint32_t > *  connectionsToFill = nullptr 
) const
private

Definition at line 249 of file SiStripDetCabling.cc.

References layerSearch(), genParticles_cff::map, and jetUpdater_cfi::sort.

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

251  {
252  for (std::map<uint32_t, std::vector<int>>::const_iterator conn_it = specific_connection.begin();
253  conn_it != specific_connection.end();
254  ++conn_it) {
255  uint32_t new_detid = conn_it->first;
256  std::vector<int> new_apv_vector = conn_it->second;
257  std::map<uint32_t, std::vector<int>>::iterator it = map_to_add_to.find(new_detid);
258  if (it == map_to_add_to.end()) { // detid does not exist in map, add new entry
259  std::sort(new_apv_vector.begin(),
260  new_apv_vector.end()); // not very efficient sort, time consuming?
261  map_to_add_to.insert(std::make_pair(new_detid, new_apv_vector));
262 
263  // Count the number of detIds per layer. Doing it in this "if" we count
264  // each detId only once (otherwise it would be counted once per APV pair)
265  // ATTENTION: consider changing the loop content to avoid this
266  // This is the expected full number of modules (double sided are counted
267  // twice because the two sides have different detId). TIB1 : 336, TIB2 :
268  // 432, TIB3 : 540, TIB4 : 648 TID : each disk has 48+48+40
269  // (ring1+ring2+ring3) TOB1 : 504, TOB2 : 576, TOB3 : 648, TOB4 : 720,
270  // TOB5 : 792, TOB6 : 888 TEC1 : Total number of modules = 6400.
271  if (connectionsToFill) {
272  (*connectionsToFill)[layerSearch(new_detid)]++;
273  }
274 
275  } else { // detid exists already, add to its vector - if its not there
276  // already . . .
277  std::vector<int> existing_apv_vector = it->second;
278  for (std::vector<int>::iterator inew = new_apv_vector.begin(); inew != new_apv_vector.end(); ++inew) {
279  bool there_already = false;
280  for (std::vector<int>::iterator iold = existing_apv_vector.begin(); iold != existing_apv_vector.end(); ++iold) {
281  if (*iold == *inew) {
282  there_already = true;
283  break; // leave the loop
284  }
285  }
286  if (!there_already) {
287  existing_apv_vector.push_back(*inew);
288  std::sort(existing_apv_vector.begin(),
289  existing_apv_vector.end()); // not very efficient sort, time consuming?
290  } else {
291  // edm::LogWarning("Logical") << "apv "<<*inew<<" already exists in
292  // the detector module "<<new_detid;
293  }
294  }
295  }
296  }
297 }
int16_t layerSearch(const uint32_t detId) const

◆ addNotConnectedAPVs()

void SiStripDetCabling::addNotConnectedAPVs ( std::map< uint32_t, std::vector< int >> &  map_to_add_to) const

Definition at line 243 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), detected_, and undetected_.

243  {
244  addFromSpecificConnection(map_to_add_to, detected_);
245  addFromSpecificConnection(map_to_add_to, undetected_);
246 }
std::map< uint32_t, std::vector< int > > detected_
std::map< uint32_t, std::vector< int > > undetected_
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

◆ addUnDetected()

void SiStripDetCabling::addUnDetected ( std::map< uint32_t, std::vector< int >> &  map_to_add_to) const

Definition at line 237 of file SiStripDetCabling.cc.

References addFromSpecificConnection(), and undetected_.

237  {
238  addFromSpecificConnection(map_to_add_to, undetected_);
239 }
std::map< uint32_t, std::vector< int > > undetected_
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

◆ connected()

std::map<uint32_t, std::vector<int> > const& SiStripDetCabling::connected ( ) const
inline

Definition at line 89 of file SiStripDetCabling.h.

References connected_.

Referenced by getActiveDetectorsContiguousIds().

89 { return connected_; }
std::map< uint32_t, std::vector< int > > connected_

◆ connectedNumber()

uint32_t SiStripDetCabling::connectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 79 of file SiStripDetCabling.h.

References detNumber(), and pixelTopology::layer.

Referenced by SiStripCertificationInfo::fillSiStripCertificationMEs(), and SiStripQualityChecker::fillSubDetStatus().

79  {
80  return detNumber(subDet, layer, 0);
81  }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
uint32_t detNumber(const std::string &subDet, const uint16_t layer, const int connectionType) const

◆ detectedNumber()

uint32_t SiStripDetCabling::detectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 82 of file SiStripDetCabling.h.

References detNumber(), and pixelTopology::layer.

82 { return detNumber(subDet, layer, 1); }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
uint32_t detNumber(const std::string &subDet, const uint16_t layer, const int connectionType) const

◆ detNumber()

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 318 of file SiStripDetCabling.cc.

References connectionCount, mps_fire::end, newFWLiteAna::found, pixelTopology::layer, and LogDebug.

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

318  {
319  uint16_t subDetLayer = layer;
320  // TIB = 1, TID = 2, TOB = 3, TEC = 4
321  if (subDet == "TID-")
322  subDetLayer += 10;
323  else if (subDet == "TID+")
324  subDetLayer += 10 + 3;
325  else if (subDet == "TOB")
326  subDetLayer += 100;
327  else if (subDet == "TEC-")
328  subDetLayer += 1000;
329  else if (subDet == "TEC+")
330  subDetLayer += 1000 + 9;
331  else if (subDet != "TIB") {
332  LogDebug("SiStripDetCabling") << "Error: Wrong subDet. Please use one of TIB, TID, TOB, TEC." << std::endl;
333  return 0;
334  }
335  auto found = connectionCount[connectionType].find(subDetLayer);
336  if (found != connectionCount[connectionType].end()) {
337  return found->second;
338  }
339  return 0;
340 }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
std::map< int16_t, uint32_t > connectionCount[3]
#define LogDebug(id)

◆ fedCabling()

const SiStripFedCabling* SiStripDetCabling::fedCabling ( ) const
inline

◆ getActiveDetectorsContiguousIds()

void SiStripDetCabling::getActiveDetectorsContiguousIds ( std::map< uint32_t, unsigned int > &  connectedToContiguous) const

Definition at line 357 of file SiStripDetCabling.cc.

References addAllDetectorsRawIds(), connected(), getAllDetectorsContiguousIds(), and jetUpdater_cfi::sort.

357  {
358  connectedToContiguous.clear(); // reset map
359  std::vector<uint32_t> connected;
361  std::sort(connected.begin(),
362  connected.end()); // get connected detids and sort them (not
363  // strictly necessary)
364  std::map<uint32_t, unsigned int> allToContiguous;
365  getAllDetectorsContiguousIds(allToContiguous); // create map of all indices
366  for (std::vector<uint32_t>::const_iterator idet = connected.begin(); idet != connected.end();
367  ++idet) { // select only the indices for active detectors
368  std::map<uint32_t, unsigned int>::iterator deco = allToContiguous.find(*idet);
369  if (deco != allToContiguous.end()) {
370  connectedToContiguous.insert(*deco);
371  }
372  }
373 }
std::map< uint32_t, std::vector< int > > const & connected() const
void getAllDetectorsContiguousIds(std::map< uint32_t, unsigned int > &) const
void addAllDetectorsRawIds(std::vector< uint32_t > &vector_to_fill_with_detids) const

◆ getAllDetectorsContiguousIds()

void SiStripDetCabling::getAllDetectorsContiguousIds ( std::map< uint32_t, unsigned int > &  allToContiguous) const

Definition at line 344 of file SiStripDetCabling.cc.

References addAllDetectorsRawIds(), python.cmstools::all(), and jetUpdater_cfi::sort.

Referenced by getActiveDetectorsContiguousIds().

344  {
345  allToContiguous.clear(); // reset map
346  std::vector<uint32_t> all;
348  std::sort(all.begin(), all.end()); // get all detids and sort them
349  unsigned int contiguousIndex = 0;
350  for (std::vector<uint32_t>::const_iterator idet = all.begin(); idet != all.end(); ++idet) {
351  ++contiguousIndex;
352  allToContiguous.insert(std::make_pair(*idet, contiguousIndex));
353  }
354 }
def all(container)
workaround iterator generators for ROOT classes
Definition: cmstools.py:25
void addAllDetectorsRawIds(std::vector< uint32_t > &vector_to_fill_with_detids) const

◆ getConnection()

const FedChannelConnection & SiStripDetCabling::getConnection ( uint32_t  det_id,
unsigned short  apv_pair 
) const

Definition at line 176 of file SiStripDetCabling.cc.

References getConnections().

Referenced by APVShotsAnalyzer::analyze(), APVShotsFilter::filter(), SiStripGainCosmicCalculator::getNewObject(), and ws_sso_content_reader.HTTPSClientAuthHandler::https_open().

176  {
177  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
178  for (std::vector<const FedChannelConnection *>::const_iterator iconn = fcconns.begin(); iconn != fcconns.end();
179  ++iconn) {
180  if (((*iconn) != nullptr) && (((*iconn)->apvPairNumber()) == apv_pair)) { // check if apvPairNumber() of present
181  // FedChannelConnection is the same as requested one
182  return (**iconn); // if yes, return the FedChannelConnection object
183  }
184  }
185  // if did not match none of the above, return some default value - DKwarn :
186  // also output message?
187  const static FedChannelConnection default_empty_fedchannelconnection;
188  return default_empty_fedchannelconnection;
189 }
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
Class containning control, module, detector and connection information, at the level of a FED channel...

◆ getConnections()

const std::vector< const FedChannelConnection * > & SiStripDetCabling::getConnections ( uint32_t  det_id) const

Definition at line 161 of file SiStripDetCabling.cc.

References fullcabling_.

Referenced by SiStripQuality::addInvalidConnectionFromCabling(), SiStripMonitorDigi::analyze(), SiStripMonitorCluster::analyze(), SiStripMonitorPedestals::analyze(), CommonModeAnalyzer::analyze(), SiStripApvGainFromFileBuilder::analyze(), APVShotsAnalyzer::analyze(), SiStripSpyDisplayModule::analyze(), SiStripCondObjBuilderFromDb::buildConnections(), SiStripBadChannelPatcher::fedFromDetId(), SiStripMonitorTrack::fillControlViewHistos(), APVShotsFilter::filter(), SiStripCablingDQM::getActiveDetIds(), getConnection(), getDcuId(), SiStripTrackerMapCreator::getDetectorFlagAndComment(), nApvPairs(), and TrackerMap::TrackerMap().

162  { // return all connections corresponding to one det_id
163  std::map<uint32_t, std::vector<const FedChannelConnection *>>::const_iterator detcabl_it =
164  fullcabling_.find(det_id); // has to be const_iterator because this
165  // function cannot change data members
166  if (!(detcabl_it == fullcabling_.end())) { // found detid in fullcabling_
167  return (detcabl_it->second);
168  } else { // DKwarn : is there need for output message here telling det_id does
169  // not exist?
170  const static std::vector<const FedChannelConnection *> default_empty_fedchannelconnection;
171  return default_empty_fedchannelconnection;
172  }
173 }
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_

◆ getDcuId()

const unsigned int SiStripDetCabling::getDcuId ( uint32_t  det_id) const

Definition at line 192 of file SiStripDetCabling.cc.

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

192  {
193  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
194  if (!fcconns.empty()) {
195  // patch needed to take into account the possibility that the first
196  // component of fcconns is invalid
197  for (size_t i = 0; i < fcconns.size(); ++i)
198  if (fcconns.at(i) && fcconns.at(i)->detId() != sistrip::invalid32_ && fcconns.at(i)->detId() != 0)
199  return (fcconns.at(i))->dcuId(); // get dcuId of first element - when
200  // you build check this consistency
201  }
202  // default if none of the above is fulfilled
203  unsigned int default_zero_value = 0;
204  return default_zero_value;
205 }
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
static const uint32_t invalid32_
Definition: Constants.h:15

◆ getDetCabling()

const std::map<uint32_t, std::vector<const FedChannelConnection *> >& SiStripDetCabling::getDetCabling ( ) const
inline

Definition at line 33 of file SiStripDetCabling.h.

References fullcabling_.

Referenced by SiStripTrackerMapCreator::setTkMapFromAlarm().

33  {
34  return fullcabling_;
35  }
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_

◆ IsConnected()

bool SiStripDetCabling::IsConnected ( const uint32_t &  det_id) const

Definition at line 375 of file SiStripDetCabling.cc.

References connected_, and IsInMap().

Referenced by SiStripQuality::addNotConnectedConnectionFromCabling(), SiStripMonitorQuality::analyze(), SiStripMonitorQuality::bookHistograms(), SiStripQuality::IsModuleUsable(), and SiStripDcsInfo::readStatus().

375 { return IsInMap(det_id, connected_); }
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int >> &) const
std::map< uint32_t, std::vector< int > > connected_

◆ IsDetected()

bool SiStripDetCabling::IsDetected ( const uint32_t &  det_id) const

Definition at line 377 of file SiStripDetCabling.cc.

References detected_, and IsInMap().

377 { return IsInMap(det_id, detected_); }
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int >> &) const
std::map< uint32_t, std::vector< int > > detected_

◆ IsInMap()

bool SiStripDetCabling::IsInMap ( const uint32_t &  det_id,
const std::map< uint32_t, std::vector< int >> &  map 
) const
private

Definition at line 379 of file SiStripDetCabling.cc.

References genParticles_cff::map.

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

379  {
380  std::map<uint32_t, std::vector<int>>::const_iterator it = map.find(det_id);
381  return (it != map.end());
382 }

◆ IsUndetected()

bool SiStripDetCabling::IsUndetected ( const uint32_t &  det_id) const

Definition at line 378 of file SiStripDetCabling.cc.

References IsInMap(), and undetected_.

378 { return IsInMap(det_id, undetected_); }
bool IsInMap(const uint32_t &det_id, const std::map< uint32_t, std::vector< int >> &) const
std::map< uint32_t, std::vector< int > > undetected_

◆ layerSearch()

int16_t SiStripDetCabling::layerSearch ( const uint32_t  detId) const
private

Definition at line 299 of file SiStripDetCabling.cc.

References TrackerTopology::layer(), TrackerTopology::side(), DetId::subdetId(), StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, and tTopo.

Referenced by addFromSpecificConnection().

299  {
300  const DetId detectorId = DetId(detId);
301  const int subdet = detectorId.subdetId();
302  if (subdet == StripSubdetector::TIB) {
303  return tTopo->layer(detId);
304  } else if (subdet == StripSubdetector::TID) {
305  // side: 1 = negative, 2 = positive
306  return 10 + (tTopo->side(detId) - 1) * 3 + tTopo->layer(detId);
307  } else if (subdet == StripSubdetector::TOB) {
308  return 100 + tTopo->layer(detId);
309  } else if (subdet == StripSubdetector::TEC) {
310  // side: 1 = negative, 2 = positive
311  return 1000 + (tTopo->side(detId) - 1) * 9 + tTopo->layer(detId);
312  }
313  return 0;
314 }
static constexpr auto TEC
unsigned int side(const DetId &id) const
unsigned int layer(const DetId &id) const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
static constexpr auto TOB
Definition: DetId.h:17
static constexpr auto TIB
const TrackerTopology *const tTopo
static constexpr auto TID

◆ nApvPairs()

const uint16_t SiStripDetCabling::nApvPairs ( uint32_t  det_id) const

Definition at line 209 of file SiStripDetCabling.cc.

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

Referenced by SiStripQuality::addInvalidConnectionFromCabling(), SiStripMonitorDigi::analyze(), SiStripMonitorCluster::analyze(), SiStripMonitorQuality::bookHistograms(), SiStripMonitorTrack::bookLayerMEs(), SiStripMonitorTrack::bookModMEs(), SiStripMonitorTrack::bookRingMEs(), SiStripMonitorPedestals::createMEs(), SiStripMonitorDigi::createModuleMEs(), SiStripMonitorCluster::createModuleMEs(), SiStripMonitorPedestals::fillCondDBMEs(), and SiStripCablingDQM::getActiveDetIds().

209  {
210  const std::vector<const FedChannelConnection *> &fcconns = getConnections(det_id);
211  if (!fcconns.empty()) {
212  // patch needed to take into account the possibility that the first
213  // component of fcconns is invalid
214  for (size_t i = 0; i < fcconns.size(); ++i) {
215  if ((fcconns.at(i) != nullptr) && (fcconns.at(i)->nApvPairs() != sistrip::invalid_)) {
216  return fcconns.at(i)->nApvPairs(); // nr of apvpairs for associated module
217  }
218  }
219  }
220  // else {
221  // return 0;
222  // }
223  return 0;
224 }
const std::vector< const FedChannelConnection * > & getConnections(uint32_t det_id) const
static const uint16_t invalid_
Definition: Constants.h:16

◆ operator=()

const SiStripDetCabling& SiStripDetCabling::operator= ( const SiStripDetCabling )
delete

◆ print()

void SiStripDetCabling::print ( std::stringstream &  ss) const

Added missing print method.

Definition at line 386 of file SiStripDetCabling.cc.

References fullcabling_, cuy::ii, findQualityFiles::jj, contentValuesCheck::ss, dqmMemoryStats::total, and validateGeometry_cfg::valid.

Referenced by SiStripFedCablingReader::beginRun(), and printDebug().

386  {
387  uint32_t valid = 0;
388  uint32_t total = 0;
389  typedef std::vector<const FedChannelConnection *> Conns;
390  typedef std::map<uint32_t, Conns> ConnsMap;
391  ConnsMap::const_iterator ii = fullcabling_.begin();
392  ConnsMap::const_iterator jj = fullcabling_.end();
393  ss << "[SiStripDetCabling::" << __func__ << "]"
394  << " Printing DET cabling for " << fullcabling_.size() << " modules " << std::endl;
395  for (; ii != jj; ++ii) {
396  ss << "Printing " << ii->second.size() << " connections for DetId: " << ii->first << std::endl;
397  Conns::const_iterator iii = ii->second.begin();
398  Conns::const_iterator jjj = ii->second.end();
399  for (; iii != jjj; ++iii) {
400  if ((*iii)->isConnected()) {
401  valid++;
402  }
403  total++;
404  ss << **iii << std::endl;
405  }
406  }
407  ss << "Number of connected: " << valid << std::endl << "Number of connections: " << total << std::endl;
408 }
std::map< uint32_t, std::vector< const FedChannelConnection * > > fullcabling_
ii
Definition: cuy.py:589

◆ printDebug()

void SiStripDetCabling::printDebug ( std::stringstream &  ss,
const TrackerTopology trackerTopo 
) const

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

Definition at line 445 of file SiStripDetCabling.cc.

References print(), and contentValuesCheck::ss.

445 { print(ss); }
void print(std::stringstream &) const

◆ printSummary()

void SiStripDetCabling::printSummary ( std::stringstream &  ss,
const TrackerTopology trackerTopo 
) const

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

Definition at line 410 of file SiStripDetCabling.cc.

References connectionCount, pixelTopology::layer, and contentValuesCheck::ss.

410  {
411  for (int connectionType = 0; connectionType < 3; ++connectionType) {
412  if (connectionType == 0)
413  ss << "Connected modules:" << std::endl;
414  else if (connectionType == 1)
415  ss << "Detected modules:" << std::endl;
416  else
417  ss << "Undetected modules:" << std::endl;
418  ss << "SubDet and layer\t modules" << std::endl;
419  std::map<int16_t, uint32_t>::const_iterator iter = connectionCount[connectionType].begin();
420  for (; iter != connectionCount[connectionType].end(); ++iter) {
421  uint32_t subDetLayer = iter->first;
422  uint32_t modules = iter->second;
423  if (int(subDetLayer / 10) == 0) {
424  ss << "TIB \t layer " << subDetLayer << " \t" << modules << std::endl;
425  } else if (int(subDetLayer / 100) == 0) {
426  int layer = subDetLayer % 10;
427  if (layer <= 3)
428  ss << "TID- \t disk " << layer << "\t" << modules << std::endl;
429  else
430  ss << "TID+ \t disk " << layer - 3 << "\t" << modules << std::endl;
431  } else if (int(subDetLayer / 1000) == 0) {
432  int layer = subDetLayer % 100;
433  ss << "TOB \t layer " << layer << " \t" << modules << std::endl;
434  } else {
435  int layer = subDetLayer % 100;
436  if (layer <= 9)
437  ss << "TEC- \t disk " << layer << " \t" << modules << std::endl;
438  else
439  ss << "TEC+ \t disk " << layer - 9 << " \t" << modules << std::endl;
440  }
441  }
442  }
443 }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
std::map< int16_t, uint32_t > connectionCount[3]

◆ trackerTopology()

const TrackerTopology* const SiStripDetCabling::trackerTopology ( ) const
inline

Definition at line 87 of file SiStripDetCabling.h.

References tTopo.

Referenced by SiStripQuality::turnOffFeds().

87 { return tTopo; }
const TrackerTopology *const tTopo

◆ undetectedNumber()

uint32_t SiStripDetCabling::undetectedNumber ( const std::string &  subDet,
const uint16_t  layer 
) const
inline

Definition at line 83 of file SiStripDetCabling.h.

References detNumber(), and pixelTopology::layer.

83  {
84  return detNumber(subDet, layer, 2);
85  }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
uint32_t detNumber(const std::string &subDet, const uint16_t layer, const int connectionType) const

Member Data Documentation

◆ connected_

std::map<uint32_t, std::vector<int> > SiStripDetCabling::connected_
private

◆ connectionCount

std::map<int16_t, uint32_t> SiStripDetCabling::connectionCount[3]
private

Definition at line 113 of file SiStripDetCabling.h.

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

◆ detected_

std::map<uint32_t, std::vector<int> > SiStripDetCabling::detected_
private

◆ fedCabling_

const SiStripFedCabling* SiStripDetCabling::fedCabling_
private

Definition at line 114 of file SiStripDetCabling.h.

Referenced by fedCabling().

◆ fullcabling_

std::map<uint32_t, std::vector<const FedChannelConnection *> > SiStripDetCabling::fullcabling_
private

◆ tTopo

const TrackerTopology* const SiStripDetCabling::tTopo
private

Definition at line 115 of file SiStripDetCabling.h.

Referenced by layerSearch(), and trackerTopology().

◆ undetected_

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