00001 #include "Conventions/Hardware.h"
00002
00003 #include <cctype>
00004 #include <string>
00005 #include <algorithm>
00006 using namespace std;
00007
00008
00009 static const char* names[] = {
00010 "Unknown",
00011 "Pmt8inch",
00012 "Pmt2inch",
00013 "Rpc",
00014 "Fee",
00015 "Fec",
00016 "Rot",
00017 "Rom",
00018 "HighVoltage",
00019 0
00020 };
00021
00022 const char* DayaBay::Hardware::AsString(Hardware_t type)
00023 {
00024 if (type < 0 || type > kHighVoltage) return names[0];
00025 return names[type];
00026 }
00027
00028 DayaBay::Hardware::Hardware_t DayaBay::Hardware::FromString(const char* str)
00029 {
00030 string s = str;
00031 transform(s.begin(),s.end(),s.begin(),::toupper);
00032
00033 for (int ind=1; names[ind]; ++ind) {
00034 if (s == names[ind]) return (Hardware::Hardware_t)ind;
00035 }
00036 return kUnknown;
00037 }
00038
00039 DayaBay::HardwareId::~HardwareId()
00040 {
00041 }
00042
00043 bool DayaBay::operator<(const DayaBay::HardwareId& a,
00044 const DayaBay::HardwareId& b)
00045 {
00046 return a.fullPackedData() < b.fullPackedData();
00047 }
00048
00049 std::ostream& DayaBay::operator<<(std::ostream& str,
00050 const DayaBay::HardwareId& hardwareId)
00051 {
00052 return str << DayaBay::Hardware::AsString(hardwareId.type())
00053 << " " << hardwareId.id();
00054 }
00055
00056 std::ostream& DayaBay::operator<<(std::ostream& str,
00057 const DayaBay::PmtHardwareId& pmtHrdwId)
00058 {
00059 return str << DayaBay::Hardware::AsString(pmtHrdwId.type())
00060 << " " << pmtHrdwId.id();
00061 }
00062
00063 std::ostream& DayaBay::operator<<(std::ostream& str,
00064 const DayaBay::RpcHardwareId& rpcHrdwId)
00065 {
00066 return str << DayaBay::Hardware::AsString(rpcHrdwId.type())
00067 << " panel: " << rpcHrdwId.panelId()
00068 << " layer: " << rpcHrdwId.layer()
00069 << " strip: " << rpcHrdwId.strip();
00070 }
00071
00072 std::ostream& DayaBay::operator<<(std::ostream& str,
00073 const DayaBay::FeeHardwareId& feeHrdwId)
00074 {
00075 return str << DayaBay::Hardware::AsString(feeHrdwId.type())
00076 << " board: " << feeHrdwId.boardId()
00077 << " connector: " << feeHrdwId.connector();
00078 }
00079
00080 std::ostream& DayaBay::operator<<(std::ostream& str,
00081 const DayaBay::FecHardwareId& fecHrdwId)
00082 {
00083 return str << DayaBay::Hardware::AsString(fecHrdwId.type())
00084 << " board: " << fecHrdwId.boardId()
00085 << " connector: " << fecHrdwId.connector();
00086 }