00001
00002
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
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
00035
00036
00037
00038
00039
00040 static Char_t newstring[255] = "";
00041
00042 Char_t* ptr = newstring;
00043
00044 *ptr = 0;
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;
00057
00058 return newstring;
00059 }
00060
00061
00062 SimFlag::SimFlag_t SimFlag::StringToEnum(const Char_t* chars, Int_t maxChar)
00063 {
00064
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
00083
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
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
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