Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

SimFlag.cxx

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

Generated on Thu Nov 1 15:53:47 2007 for loon by  doxygen 1.3.9.1