DbiSimFlag.cxx

Go to the documentation of this file.
00001 //
00002 // Body for SimFlag class so that CINT recognizes its existence
00003 //
00004 #include "DbiSimFlag.hxx"
00005 #include "TMath.h"
00006 #include "TString.h"
00007 
00008 //_____________________________________________________________________________
00009 
00010 Int_t DbiSimFlag::FullMask()
00011 {
00012    return kData|kDaqFakeData|kMC|kReroot;
00013 }
00014 
00015 //_____________________________________________________________________________
00016 
00017 const Char_t* DbiSimFlag::AsString(SimFlag_t simFlag)
00018 {
00019    // static function to return mapping enum --> string
00020 
00021    switch (simFlag) {
00022    case kUnknown:     return "Unknown";     break;
00023    case kData:        return "Data";        break;
00024    case kDaqFakeData: return "DaqFakeData"; break;
00025    case kMC:          return "MC";          break;
00026    case kReroot:      return "Reroot";      break;
00027    default:           return "?Data?";      break;
00028    }
00029 }
00030 
00031 //_____________________________________________________________________________
00032 
00033 const Char_t* DbiSimFlag::MaskToString(Int_t mask)
00034 {
00035    // Return a mask of SimFlags as a string
00036    //
00037    // Result is a pointer to a statically allocated string.
00038    // User should copy this into their own buffer before calling
00039    // this method again.
00040 
00041    static Char_t newstring[255] = "";
00042    
00043    Char_t* ptr = newstring;  // start at the beginning
00044 
00045    *ptr = 0; // start with nothing
00046    Int_t fullmask = DbiSimFlag::FullMask();
00047 
00048    for (Int_t i=0; i<32; i++) {
00049       DbiSimFlag::SimFlag_t flag = (DbiSimFlag::SimFlag_t)(1<<i);
00050       if (mask & flag & fullmask) {
00051          const Char_t* toadd = DbiSimFlag::AsString(flag);
00052          if (ptr != newstring) *ptr++ = ',';
00053          strcpy(ptr,toadd);
00054          ptr += strlen(toadd);
00055       }
00056    }
00057    *ptr++ = 0; // ensure trailing 0
00058 
00059    return newstring;
00060 }
00061 
00062 //_____________________________________________________________________________
00063 
00064 DbiSimFlag::SimFlag_t DbiSimFlag::StringToEnum(const Char_t* chars, Int_t maxChar)
00065 {
00066    // convert a set of chars to a valid enum
00067 
00068    Int_t mask = DbiSimFlag::StringToMask(chars,maxChar);
00069 
00070    switch (mask) {
00071    case kUnknown:     return kUnknown;     break;
00072    case kData:        return kData;        break;
00073    case kDaqFakeData: return kDaqFakeData; break;
00074    case kMC:          return kMC;          break;
00075    case kReroot:      return kReroot;      break;
00076    default:           return kUnknown;     break;
00077    }
00078 
00079 }
00080 
00081 //_____________________________________________________________________________
00082 
00083 Int_t DbiSimFlag::StringToMask(const Char_t* chars, Int_t maxChar)
00084 {
00085    // convert a set of chars to a mask of enum's
00086    // simple tests for unique characters: {d,f,m,r}
00087 
00088    Int_t mask  = 0;
00089 
00090    TString thestring(chars);
00091    if (maxChar>0 && maxChar<thestring.Length()) thestring.Resize(maxChar);
00092 
00093    thestring.ToLower();
00094    if (thestring.Contains("d")) mask |= kData;
00095    if (thestring.Contains("f")) mask |= kDaqFakeData;
00096    if (thestring.Contains("m")) mask |= kMC;
00097    if (thestring.Contains("r")) mask |= kReroot;
00098 
00099    return mask;
00100 }
00101 
00102 //_____________________________________________________________________________
00103 
00104 Int_t DbiSimFlag::Compact(SimFlag_t simFlag)
00105 {
00106    // turn mask-like enum value into sequential int
00107 
00108    switch (simFlag) {
00109    case kUnknown:     return -1;  break;
00110    case kData:        return  0;  break;
00111    case kDaqFakeData: return  1;  break;
00112    case kMC:          return  2;  break;
00113    case kReroot:      return  3;  break;
00114    default:           return -1;  break;
00115    }
00116 
00117 }
00118 
00119 //_____________________________________________________________________________
00120 
00121 DbiSimFlag::SimFlag_t DbiSimFlag::Expand(Int_t compactSimFlag)
00122 {
00123    // turn sequential int into mask-like enum value
00124 
00125    switch (compactSimFlag) {
00126    case  0:  return kData;        break;
00127    case  1:  return kDaqFakeData; break;
00128    case  2:  return kMC;          break;
00129    case  3:  return kReroot;      break;
00130    default:  return kUnknown;     break;
00131    }
00132 }
00133 
00134 //_____________________________________________________________________________

Generated on 11 Aug 2013 for SKDatabase by  doxygen 1.6.1