DbiDetector.cxx

Go to the documentation of this file.
00001 //
00002 // Body for Detector namespace so that CINT recognizes its existence
00003 //
00004 #include "DbiDetector.hxx"
00005 #include "TString.h"
00006 
00007 //_____________________________________________________________________________
00008 Int_t DbiDetector::FullMask()
00009 {
00010    return kNear|kFar|kCalib|kTestStand|kMapper;
00011 }
00012 //_____________________________________________________________________________
00013 const Char_t* DbiDetector::AsString(Detector_t detector)
00014 {
00015    switch (detector) {
00016    case kUnknown:   return "Unknown";    break;
00017    case kNear:      return "Near";       break;
00018    case kFar:       return "Far";        break;
00019    case kCalDet:    return "CalDet";     break;
00020    case kTestStand: return "TestStand";  break;
00021    case kMapper:    return "Mapper";     break;
00022    default:         return "?Unknown?";  break;
00023    }
00024 }
00025 
00026 //_____________________________________________________________________________
00027 DbiDetector::Detector_t DbiDetector::CharToEnum(Char_t c)
00028 {
00029   switch(c) {
00030   case 'N':
00031   case 'n':
00032   case '1':
00033   case 0x01:
00034     return kNear;
00035   case 'F':
00036   case 'f':
00037   case '2':
00038   case 0x02:
00039     return kFar;
00040   case 'C':
00041   case 'c':
00042   case '4':
00043   case 0x04:
00044     return kCalDet;
00045   case 'T':
00046   case 't':
00047   case '8':
00048   case 0x08:
00049     return kTestStand;
00050   case 'M':
00051   case 'm':
00052   case 0x10:
00053     return kMapper;
00054   default:
00055     return kUnknown;
00056   }
00057 }
00058 
00059 //_____________________________________________________________________________
00060 Char_t* DbiDetector::MaskToString(Int_t mask)
00061 {
00062    // Return a mask of Detector as a string
00063    //
00064    // Result is a pointer to a statically allocated string.
00065    // User should copy this into their own buffer before calling
00066    // this method again.
00067 
00068    static Char_t newstring[255] = "";
00069    
00070    Char_t* ptr = newstring;  // start at the beginning
00071 
00072    *ptr = 0; // start with nothing
00073    Int_t fullmask = DbiDetector::FullMask();
00074    
00075    for (Int_t i=0; i<32; i++) {
00076       DbiDetector::Detector_t adet = (DbiDetector::Detector_t)(1<<i);
00077       if (mask & adet & fullmask) {
00078          const Char_t* toadd = DbiDetector::AsString(adet);
00079          if (ptr != newstring) *ptr++ = ',';
00080          strcpy(ptr,toadd);
00081          ptr += strlen(toadd);
00082       }
00083    }
00084    *ptr++ = 0; // ensure trailing 0
00085 
00086    return newstring;
00087 }
00088 
00089 //_____________________________________________________________________________
00090 DbiDetector::Detector_t DbiDetector::StringToEnum(const Char_t* chars, Int_t maxChar)
00091 {
00092    // convert a set of chars to a valid enum
00093 
00094    Int_t mask = DbiDetector::StringToMask(chars,maxChar);
00095 
00096    switch (mask) {
00097    case kUnknown:   return kUnknown;    break;
00098    case kNear:      return kNear;       break;
00099    case kFar:       return kFar;        break;
00100    case kCalib:     return kCalib;      break;
00101    case kTestStand: return kTestStand;  break;
00102    case kMapper:    return kMapper;     break;
00103    default:         return kUnknown;    break;
00104    }
00105 
00106 }
00107 
00108 //_____________________________________________________________________________
00109 Int_t DbiDetector::StringToMask(const Char_t* chars, Int_t maxChar)
00110 {
00111    // convert a set of chars to a mask of enum's
00112    // simple tests for unique characters: {n,f,c,t,m}
00113 
00114    Int_t mask  = 0;
00115 
00116    TString thestring(chars);
00117    if (maxChar>0 && maxChar<thestring.Length()) thestring.Resize(maxChar);
00118 
00119    thestring.ToLower();
00120    if (thestring.Contains("n")) mask |= kNear;
00121    if (thestring.Contains("f")) mask |= kFar;
00122    if (thestring.Contains("c")) mask |= kCalib;
00123    // For the unusual case of TestStand require something more than 
00124    // just the first char.  Sue K. points out that passing "CalDet" 
00125    // (as opposed to "Calib") triggers kTestStand if we don't
00126    // make this additional requirement.
00127    //if (thestring.Contains("t")) mask |= kTestStand;
00128    if (thestring.Contains("test")) mask |= kTestStand;
00129    if (thestring.Contains("m")) mask |= kMapper;
00130 
00131 
00132 
00133    return mask;
00134 }
00135 
00136 //_____________________________________________________________________________
00137 

Generated on 11 Aug 2013 for SKDatabase by  doxygen 1.6.1