/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
CondFormats/CSCObjects/src/CSCReadoutMapping.cc
107 строк
4 KB
Cms Build
Clang-Format
22 май 2019, 04:56
22 май 2019, 04:56
28f175a
Код
Авторство
О чём код?
#include <CondFormats/CSCObjects/interface/CSCReadoutMapping.h> #include <FWCore/MessageLogger/interface/MessageLogger.h> #include <iostream> CSCReadoutMapping::CSCReadoutMapping() : myName_("CSCReadoutMapping"), debugV_(false) {} CSCReadoutMapping::~CSCReadoutMapping() {} int CSCReadoutMapping::chamber(int endcap, int station, int vme, int dmb, int tmb) const { // Build hw id from input, find sw id to match int cid = 0; int hid = hwId(endcap, station, vme, dmb, tmb); // Search for that hw id in mapping std::map<int, int>::const_iterator it = hw2sw_.find(hid); if (it != hw2sw_.end()) { cid = it->second; // std::cout << "hwid = " << hid << ", swid = " << cid << std::endl; // LogDebug("CSC") << " for requested hw id = " << hid << ", found sw id = " << cid; } else { edm::LogError("CSC") << " cannot find requested hw id = " << hid << " in mapping."; } return cid; } CSCDetId CSCReadoutMapping::detId(int endcap, int station, int vme, int dmb, int tmb, int cfeb, int layer) const { // Find CSCDetId index of chamber corresponding to the hardware readout arguments int cid = chamber(endcap, station, vme, dmb, tmb); // Decode the individual labels // ... include endcap & station for MTCC when they are unique in the mapping file // and so do not need to be specified as input arguments endcap = CSCDetId::endcap(cid); station = CSCDetId::station(cid); int chamber = CSCDetId::chamber(cid); int ring = CSCDetId::ring(cid); // Now sort out ME1a from ME11-combined // cfeb =0-3 for ME1b, cfeb=4 for ME1a (pre-LS1) cfeb=4-6 (post-LS1) if (station == 1 && ring == 1 && cfeb >= 4 && cfeb <= 6) { // This is ME1a region ring = 4; // reset from 1 to 4 which flags ME1a } return CSCDetId(endcap, station, ring, chamber, layer); } void CSCReadoutMapping::addRecord(int endcap, int station, int ring, int chamber, int vmecrate, int dmb, int tmb, int tsector, int cscid, int ddu, int dcc) { CSCLabel newRecord(endcap, station, ring, chamber, vmecrate, dmb, tmb, tsector, cscid, ddu, dcc); mapping_.push_back(newRecord); int hid = hwId(endcap, station, vmecrate, dmb, tmb); int sid = swId(endcap, station, ring, chamber); // LogDebug("CSC") << " map hw " << hid << " to sw " << sid; if (hw2sw_.insert(std::make_pair(hid, sid)).second) { // LogDebug("CSC") << " insert pair succeeded."; } else { edm::LogError("CSC") << " already have key = " << hid; } ///reverse mapping for software -> hadrware labels sw2hw_.insert(std::make_pair(sid, newRecord)); } int CSCReadoutMapping::swId(int endcap, int station, int ring, int chamber) const { // Software id is just CSCDetId for the chamber - but no distinction within ME11 return CSCDetId::rawIdMaker(endcap, station, ring, chamber, 0); // usual detid for chamber, i.e. layer=0 } CSCReadoutMapping::CSCLabel CSCReadoutMapping::findHardwareId(const CSCDetId& id) const { CSCLabel hid; int sid = CSCDetId::rawIdMaker(id.endcap(), id.station(), id.ring(), id.chamber(), 0); /// Search for that sw id in mapping std::map<int, CSCLabel>::const_iterator it = sw2hw_.find(sid); if (it != sw2hw_.end()) { hid = it->second; // std::cout << "hwid = " << hid << ", swid = " << cid << std::endl; // LogDebug("CSC") << " for requested hw id = " << hid << ", found sw id = " << cid; } else { edm::LogError("CSC") << " cannot find requested sw id = " << id << " in mapping."; } return hid; } int CSCReadoutMapping::crate(const CSCDetId& id) const { CSCLabel hid = findHardwareId(id); return hid.vmecrate_; } int CSCReadoutMapping::dmbId(const CSCDetId& id) const { CSCLabel hid = findHardwareId(id); return hid.dmb_; } int CSCReadoutMapping::dduId(const CSCDetId& id) const { CSCLabel hid = findHardwareId(id); return hid.ddu_; } int CSCReadoutMapping::dccId(const CSCDetId& id) const { CSCLabel hid = findHardwareId(id); return hid.dcc_; }