00001 #include <CondFormats/CSCObjects/interface/CSCReadoutMapping.h>
00002 #include <FWCore/MessageLogger/interface/MessageLogger.h>
00003 #include <iostream>
00004
00005 CSCReadoutMapping::CSCReadoutMapping() : myName_("CSCReadoutMapping"), debugV_( false ) {}
00006
00007 CSCReadoutMapping::~CSCReadoutMapping(){}
00008
00009 int CSCReadoutMapping::chamber( int endcap, int station, int vme, int dmb, int tmb ) const {
00010
00011 int cid = 0;
00012 int hid = hwId( endcap, station, vme, dmb, tmb );
00013
00014 std::map<int,int>::const_iterator it = hw2sw_.find( hid );
00015 if ( it != hw2sw_.end() ) {
00016 cid = it->second;
00017
00018
00019 }
00020 else {
00021 edm::LogError("CSC") << " cannot find requested hw id = " << hid << " in mapping.";
00022 }
00023 return cid;
00024 }
00025
00026 CSCDetId CSCReadoutMapping::detId( int endcap, int station, int vme, int dmb, int tmb, int cfeb,
00027 int layer ) const {
00028
00029
00030 int cid = chamber( endcap, station, vme, dmb, tmb );
00031
00032
00033
00034
00035 endcap = CSCDetId::endcap( cid );
00036 station = CSCDetId::station( cid );
00037 int chamber = CSCDetId::chamber( cid );
00038 int ring = CSCDetId::ring( cid );
00039
00040
00041
00042 if ( station == 1 && ring == 1 && cfeb >= 4 && cfeb <= 6 ) {
00043
00044 ring = 4;
00045 }
00046
00047 return CSCDetId( endcap, station, ring, chamber, layer );
00048 }
00049
00050 void CSCReadoutMapping::addRecord( int endcap, int station, int ring, int chamber,
00051 int vmecrate, int dmb, int tmb, int tsector, int cscid, int ddu, int dcc ) {
00052
00053 CSCLabel newRecord( endcap, station, ring, chamber, vmecrate, dmb, tmb, tsector, cscid, ddu, dcc );
00054 mapping_.push_back( newRecord );
00055 int hid = hwId( endcap, station, vmecrate, dmb, tmb );
00056 int sid = swId( endcap, station, ring, chamber);
00057
00058 if ( hw2sw_.insert( std::make_pair(hid, sid) ).second ) {
00059
00060 }
00061 else {
00062 edm::LogError("CSC") << " already have key = " << hid;
00063 }
00065 sw2hw_.insert( std::make_pair(sid, newRecord) );
00066
00067 }
00068
00069 int CSCReadoutMapping::swId( int endcap, int station, int ring, int chamber ) const {
00070
00071 return CSCDetId::rawIdMaker( endcap, station, ring, chamber, 0 );
00072 }
00073
00074 CSCReadoutMapping::CSCLabel CSCReadoutMapping::findHardwareId(const CSCDetId & id) const{
00075 CSCLabel hid;
00076 int sid=CSCDetId::rawIdMaker(id.endcap(), id.station(), id.ring(), id.chamber(), 0 );
00078 std::map<int,CSCLabel>::const_iterator it = sw2hw_.find( sid );
00079 if ( it != sw2hw_.end() ) {
00080 hid = it->second;
00081
00082
00083 }
00084 else {
00085 edm::LogError("CSC") << " cannot find requested sw id = " << id << " in mapping.";
00086 }
00087 return hid;
00088 }
00089
00090 int CSCReadoutMapping::crate(const CSCDetId & id) const {
00091 CSCLabel hid = findHardwareId(id);
00092 return hid.vmecrate_;
00093 }
00094 int CSCReadoutMapping::dmbId(const CSCDetId & id) const {
00095 CSCLabel hid = findHardwareId(id);
00096 return hid.dmb_;
00097 }
00098 int CSCReadoutMapping::dduId(const CSCDetId & id) const {
00099 CSCLabel hid = findHardwareId(id);
00100 return hid.ddu_;
00101 }
00102 int CSCReadoutMapping::dccId(const CSCDetId & id) const {
00103 CSCLabel hid = findHardwareId(id);
00104 return hid.dcc_;
00105 }