00001
00002
00003
00004 #include "Conventions/SimFlag.h"
00005 #include "TMath.h"
00006 #include "TString.h"
00007
00008
00009
00010 Int_t SimFlag::FullMask()
00011 {
00012 return kData|kDaqFakeData|kMC|kReroot;
00013 }
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
00033 const Char_t* SimFlag::MaskToString(Int_t mask)
00034 {
00035
00036
00037
00038
00039
00040
00041 static Char_t newstring[255] = "";
00042
00043 Char_t* ptr = newstring;
00044
00045 *ptr = 0;
00046 Int_t fullmask = SimFlag::FullMask();
00047
00048 for (Int_t i=0; i<32; i++) {
00049 SimFlag::SimFlag_t flag = (SimFlag::SimFlag_t)(1<<i);
00050 if (mask & flag & fullmask) {
00051 const Char_t* toadd = SimFlag::AsString(flag);
00052 if (ptr != newstring) *ptr++ = ',';
00053 strcpy(ptr,toadd);
00054 ptr += strlen(toadd);
00055 }
00056 }
00057 *ptr++ = 0;
00058
00059 return newstring;
00060 }
00061
00062
00063
00064 SimFlag::SimFlag_t SimFlag::StringToEnum(const Char_t* chars, Int_t maxChar)
00065 {
00066
00067
00068 Int_t mask = SimFlag::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 SimFlag::StringToMask(const Char_t* chars, Int_t maxChar)
00084 {
00085
00086
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 SimFlag::Compact(SimFlag_t simFlag)
00105 {
00106
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 SimFlag::SimFlag_t SimFlag::Expand(Int_t compactSimFlag)
00122 {
00123
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