File indexing completed on 2023-03-17 10:46:40
0001 #include <CondFormats/CSCObjects/interface/CSCReadoutMapping.h>
0002 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0003 #include <iostream>
0004
0005 CSCReadoutMapping::CSCReadoutMapping() : myName_("CSCReadoutMapping"), debugV_(false) {}
0006
0007 CSCReadoutMapping::~CSCReadoutMapping() {}
0008
0009 int CSCReadoutMapping::chamber(int endcap, int station, int vme, int dmb, int tmb) const {
0010
0011 int cid = 0;
0012 int hid = hwId(endcap, station, vme, dmb, tmb);
0013
0014 std::map<int, int>::const_iterator it = hw2sw_.find(hid);
0015 if (it != hw2sw_.end()) {
0016 cid = it->second;
0017
0018
0019 } else {
0020 edm::LogError("CSC") << " cannot find requested hw id = " << hid << " in mapping.";
0021 }
0022 return cid;
0023 }
0024
0025 CSCDetId CSCReadoutMapping::detId(int endcap, int station, int vme, int dmb, int tmb, int cfeb, int layer) const {
0026
0027 int cid = chamber(endcap, station, vme, dmb, tmb);
0028
0029
0030
0031
0032 endcap = CSCDetId::endcap(cid);
0033 station = CSCDetId::station(cid);
0034 int chamber = CSCDetId::chamber(cid);
0035 int ring = CSCDetId::ring(cid);
0036
0037
0038
0039 if (station == 1 && ring == 1 && cfeb >= 4 && cfeb <= 6) {
0040
0041 ring = 4;
0042 }
0043
0044 return CSCDetId(endcap, station, ring, chamber, layer);
0045 }
0046
0047 void CSCReadoutMapping::addRecord(int endcap,
0048 int station,
0049 int ring,
0050 int chamber,
0051 int vmecrate,
0052 int dmb,
0053 int tmb,
0054 int tsector,
0055 int cscid,
0056 int ddu,
0057 int dcc) {
0058 CSCLabel newRecord(endcap, station, ring, chamber, vmecrate, dmb, tmb, tsector, cscid, ddu, dcc);
0059 mapping_.push_back(newRecord);
0060 int hid = hwId(endcap, station, vmecrate, dmb, tmb);
0061 int sid = swId(endcap, station, ring, chamber);
0062
0063 if (hw2sw_.insert(std::make_pair(hid, sid)).second) {
0064
0065 } else {
0066 edm::LogError("CSC") << " already have key = " << hid;
0067 }
0068
0069 sw2hw_.insert(std::make_pair(sid, newRecord));
0070 }
0071
0072 int CSCReadoutMapping::swId(int endcap, int station, int ring, int chamber) const {
0073
0074 return CSCDetId::rawIdMaker(endcap, station, ring, chamber, 0);
0075 }
0076
0077 CSCReadoutMapping::CSCLabel CSCReadoutMapping::findHardwareId(const CSCDetId& id) const {
0078 CSCLabel hid;
0079 int sid = CSCDetId::rawIdMaker(id.endcap(), id.station(), id.ring(), id.chamber(), 0);
0080
0081 std::map<int, CSCLabel>::const_iterator it = sw2hw_.find(sid);
0082 if (it != sw2hw_.end()) {
0083 hid = it->second;
0084
0085
0086 } else {
0087 edm::LogError("CSC") << " cannot find requested sw id = " << id << " in mapping.";
0088 }
0089 return hid;
0090 }
0091
0092 int CSCReadoutMapping::crate(const CSCDetId& id) const {
0093 CSCLabel hid = findHardwareId(id);
0094 return hid.vmecrate_;
0095 }
0096 int CSCReadoutMapping::dmbId(const CSCDetId& id) const {
0097 CSCLabel hid = findHardwareId(id);
0098 return hid.dmb_;
0099 }
0100 int CSCReadoutMapping::dduId(const CSCDetId& id) const {
0101 CSCLabel hid = findHardwareId(id);
0102 return hid.ddu_;
0103 }
0104 int CSCReadoutMapping::dccId(const CSCDetId& id) const {
0105 CSCLabel hid = findHardwareId(id);
0106 return hid.dcc_;
0107 }