00001
00002
00003
00004 #include "Conventions/DetectorType.h"
00005 #include "TString.h"
00006
00007 ClassImp(DetectorType)
00008
00009
00010 Int_t DetectorType::FullMask()
00011 {
00012 return kNear|kFar|kCalib|kTestStand|kMapper;
00013 }
00014
00015 const Char_t* DetectorType::AsString(Detector_t detector)
00016 {
00017 switch (detector) {
00018 case kUnknown: return "Unknown"; break;
00019 case kNear: return "Near"; break;
00020 case kFar: return "Far"; break;
00021 case kCalDet: return "CalDet"; break;
00022 case kTestStand: return "TestStand"; break;
00023 case kMapper: return "Mapper"; break;
00024 default: return "?Unknown?"; break;
00025 }
00026 }
00027
00028
00029 DetectorType::Detector_t DetectorType::CharToEnum(Char_t c)
00030 {
00031 switch(c) {
00032 case 'N':
00033 case 'n':
00034 case '1':
00035 case 0x01:
00036 return kNear;
00037 case 'F':
00038 case 'f':
00039 case '2':
00040 case 0x02:
00041 return kFar;
00042 case 'C':
00043 case 'c':
00044 case '4':
00045 case 0x04:
00046 return kCalDet;
00047 case 'T':
00048 case 't':
00049 case '8':
00050 case 0x08:
00051 return kTestStand;
00052 case 'M':
00053 case 'm':
00054 case 0x10:
00055 return kMapper;
00056 default:
00057 return kUnknown;
00058 }
00059 }
00060
00061
00062 Char_t* DetectorType::MaskToString(Int_t mask)
00063 {
00064
00065
00066
00067
00068
00069
00070 static Char_t newstring[255] = "";
00071
00072 Char_t* ptr = newstring;
00073
00074 *ptr = 0;
00075 Int_t fullmask = DetectorType::FullMask();
00076
00077 for (Int_t i=0; i<32; i++) {
00078 DetectorType::Detector_t adet = (DetectorType::Detector_t)(1<<i);
00079 if (mask & adet & fullmask) {
00080 const Char_t* toadd = DetectorType::AsString(adet);
00081 if (ptr != newstring) *ptr++ = ',';
00082 strcpy(ptr,toadd);
00083 ptr += strlen(toadd);
00084 }
00085 }
00086 *ptr++ = 0;
00087
00088 return newstring;
00089 }
00090
00091
00092 DetectorType::Detector_t DetectorType::StringToEnum(const Char_t* chars, Int_t maxChar)
00093 {
00094
00095
00096 Int_t mask = DetectorType::StringToMask(chars,maxChar);
00097
00098 switch (mask) {
00099 case kUnknown: return kUnknown; break;
00100 case kNear: return kNear; break;
00101 case kFar: return kFar; break;
00102 case kCalib: return kCalib; break;
00103 case kTestStand: return kTestStand; break;
00104 case kMapper: return kMapper; break;
00105 default: return kUnknown; break;
00106 }
00107
00108 }
00109
00110
00111 Int_t DetectorType::StringToMask(const Char_t* chars, Int_t maxChar)
00112 {
00113
00114
00115
00116 Int_t mask = 0;
00117
00118 TString thestring(chars);
00119 if (maxChar>0 && maxChar<thestring.Length()) thestring.Resize(maxChar);
00120
00121 thestring.ToLower();
00122 if (thestring.Contains("n")) mask |= kNear;
00123 if (thestring.Contains("f")) mask |= kFar;
00124 if (thestring.Contains("c")) mask |= kCalib;
00125 if (thestring.Contains("t")) mask |= kTestStand;
00126 if (thestring.Contains("m")) mask |= kMapper;
00127
00128 return mask;
00129 }
00130
00131
00132