CMS 3D CMS Logo

CSCReadoutMapping.cc
Go to the documentation of this file.
3 #include <iostream>
4 
5 CSCReadoutMapping::CSCReadoutMapping() : myName_("CSCReadoutMapping"), debugV_(false) {}
6 
8 
9 int CSCReadoutMapping::chamber(int endcap, int station, int vme, int dmb, int tmb) const {
10  // Build hw id from input, find sw id to match
11  int cid = 0;
12  int hid = hwId(endcap, station, vme, dmb, tmb);
13  // Search for that hw id in mapping
14  std::map<int, int>::const_iterator it = hw2sw_.find(hid);
15  if (it != hw2sw_.end()) {
16  cid = it->second;
17  // std::cout << "hwid = " << hid << ", swid = " << cid << std::endl;
18  // LogDebug("CSC") << " for requested hw id = " << hid << ", found sw id = " << cid;
19  } else {
20  edm::LogError("CSC") << " cannot find requested hw id = " << hid << " in mapping.";
21  }
22  return cid;
23 }
24 
25 CSCDetId CSCReadoutMapping::detId(int endcap, int station, int vme, int dmb, int tmb, int cfeb, int layer) const {
26  // Find CSCDetId index of chamber corresponding to the hardware readout arguments
27  int cid = chamber(endcap, station, vme, dmb, tmb);
28 
29  // Decode the individual labels
30  // ... include endcap & station for MTCC when they are unique in the mapping file
31  // and so do not need to be specified as input arguments
32  endcap = CSCDetId::endcap(cid);
34  int chamber = CSCDetId::chamber(cid);
35  int ring = CSCDetId::ring(cid);
36 
37  // Now sort out ME1a from ME11-combined
38  // cfeb =0-3 for ME1b, cfeb=4 for ME1a (pre-LS1) cfeb=4-6 (post-LS1)
39  if (station == 1 && ring == 1 && cfeb >= 4 && cfeb <= 6) {
40  // This is ME1a region
41  ring = 4; // reset from 1 to 4 which flags ME1a
42  }
43 
45 }
46 
48  int station,
49  int ring,
50  int chamber,
51  int vmecrate,
52  int dmb,
53  int tmb,
54  int tsector,
55  int cscid,
56  int ddu,
57  int dcc) {
58  CSCLabel newRecord(endcap, station, ring, chamber, vmecrate, dmb, tmb, tsector, cscid, ddu, dcc);
59  mapping_.push_back(newRecord);
60  int hid = hwId(endcap, station, vmecrate, dmb, tmb);
61  int sid = swId(endcap, station, ring, chamber);
62  // LogDebug("CSC") << " map hw " << hid << " to sw " << sid;
63  if (hw2sw_.insert(std::make_pair(hid, sid)).second) {
64  // LogDebug("CSC") << " insert pair succeeded.";
65  } else {
66  edm::LogError("CSC") << " already have key = " << hid;
67  }
69  sw2hw_.insert(std::make_pair(sid, newRecord));
70 }
71 
72 int CSCReadoutMapping::swId(int endcap, int station, int ring, int chamber) const {
73  // Software id is just CSCDetId for the chamber - but no distinction within ME11
74  return CSCDetId::rawIdMaker(endcap, station, ring, chamber, 0); // usual detid for chamber, i.e. layer=0
75 }
76 
78  CSCLabel hid;
79  int sid = CSCDetId::rawIdMaker(id.endcap(), id.station(), id.ring(), id.chamber(), 0);
81  std::map<int, CSCLabel>::const_iterator it = sw2hw_.find(sid);
82  if (it != sw2hw_.end()) {
83  hid = it->second;
84  // std::cout << "hwid = " << hid << ", swid = " << cid << std::endl;
85  // LogDebug("CSC") << " for requested hw id = " << hid << ", found sw id = " << cid;
86  } else {
87  edm::LogError("CSC") << " cannot find requested sw id = " << id << " in mapping.";
88  }
89  return hid;
90 }
91 
92 int CSCReadoutMapping::crate(const CSCDetId& id) const {
93  CSCLabel hid = findHardwareId(id);
94  return hid.vmecrate_;
95 }
96 int CSCReadoutMapping::dmbId(const CSCDetId& id) const {
97  CSCLabel hid = findHardwareId(id);
98  return hid.dmb_;
99 }
100 int CSCReadoutMapping::dduId(const CSCDetId& id) const {
101  CSCLabel hid = findHardwareId(id);
102  return hid.ddu_;
103 }
104 int CSCReadoutMapping::dccId(const CSCDetId& id) const {
105  CSCLabel hid = findHardwareId(id);
106  return hid.dcc_;
107 }
static int rawIdMaker(int iendcap, int istation, int iring, int ichamber, int ilayer)
Definition: CSCDetId.h:146
virtual int hwId(int endcap, int station, int vme, int dmb, int tmb) const =0
Log< level::Error, false > LogError
constexpr std::array< uint8_t, layerIndexSize > layer
int dduId(const CSCDetId &) const
returns DDU# given CSCDetId
std::vector< CSCLabel > mapping_
int swId(int endcap, int station, int ring, int chamber) const
void addRecord(int endcap, int station, int ring, int chamber, int vmecrate, int dmb, int tmb, int tsector, int cscid, int ddu, int dcc)
CSCLabel findHardwareId(const CSCDetId &) const
returns hardware ids given chamber id
int dccId(const CSCDetId &) const
returns DCC# given CSCDetId
int chamber() const
Definition: CSCDetId.h:62
int crate(const CSCDetId &) const
returns vmecrate given CSCDetId
int chamber(int endcap, int station, int vmecrate, int dmb, int tmb) const
int dmbId(const CSCDetId &) const
returns dmbId given CSCDetId
std::map< int, CSCLabel > sw2hw_
int station() const
Definition: CSCDetId.h:79
int endcap() const
Definition: CSCDetId.h:85
std::map< int, int > hw2sw_
CSCReadoutMapping()
Default constructor.
int ring() const
Definition: CSCDetId.h:68
CSCDetId detId(int endcap, int station, int vmecrate, int dmb, int tmb, int cfeb, int layer=0) const
virtual ~CSCReadoutMapping()
Destructor.