EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Detector.cxx
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Detector.cxx
1 #include "Detector.h"
2 #include "TString.h"
3 
4 
6 {
8 }
9 
10 const Char_t* Detector::AsString(Detector_t detector)
11 {
12  switch (detector) {
13  case kUnknown:
14  return "Unknown";
15  break;
16  case kCal:
17  return "Califa";
18  break;
19  case kCalCrystal:
20  return "CrystalBall";
21  break;
22  case kDch:
23  return "Dch";
24  break;
25  case kGfi:
26  return "Gfi";
27  break;
28  case kLand:
29  return "Land";
30  break;
31  case kMtof:
32  return "Mtof";
33  break;
34  case kTof:
35  return "Tof";
36  break;
37  case kTracker:
38  return "Tracker";
39  break;
40  default:
41  return "?Unknown?";
42  break;
43  }
44 }
45 
46 
48 {
49  switch(c) {
50  case 'C':
51  case '1':
52  case 0x01:
53  return kCal;
54  case 'c':
55  case '2':
56  case 0x02:
57  return kCalCrystal;
58  case 'D':
59  case 'd':
60  case '4':
61  case 0x04:
62  return kDch;
63  case 'G':
64  case 'g':
65  case '8':
66  case 0x08:
67  return kGfi;
68  case 'L':
69  case 'l':
70  case 0x10:
71  return kLand;
72  case 'M':
73  case 'm':
74  case 0x12:
75  return kMtof;
76  case 't':
77  case 0x14:
78  return kTof;
79  case 'T':
80  case 0x16:
81  return kTracker;
82  default:
83  return kUnknown;
84  }
85 }
86 
87 
88 Char_t* Detector::MaskToString(Int_t mask)
89 {
90  // Return a mask of Detector as a string
91  //
92  // Result is a pointer to a statically allocated string.
93  // User should copy this into their own buffer before calling
94  // this method again.
95 
96  static Char_t newstring[255] = "";
97 
98  Char_t* ptr = newstring; // start at the beginning
99 
100  *ptr = 0; // start with nothing
101  Int_t fullmask = Detector::FullMask();
102 
103  for (Int_t i=0; i<32; i++) {
105  if (mask & adet & fullmask) {
106  const Char_t* toadd = Detector::AsString(adet);
107  if (ptr != newstring) { *ptr++ = ','; }
108  strcpy(ptr,toadd);
109  ptr += strlen(toadd);
110  }
111  }
112  *ptr++ = 0; // ensure trailing 0
113 
114  return newstring;
115 }
116 
117 
118 Detector::Detector_t Detector::StringToEnum(const Char_t* chars, Int_t maxChar)
119 {
120  // convert a set of chars to a valid enum
121 
122  Int_t mask = Detector::StringToMask(chars,maxChar);
123 
124  switch (mask) {
125  case kUnknown:
126  return kUnknown;
127  break;
128  case kCal:
129  return kCal;
130  break;
131  case kCalCrystal:
132  return kCalCrystal;
133  break;
134  case kDch:
135  return kDch;
136  break;
137  case kGfi:
138  return kGfi;
139  break;
140  case kLand:
141  return kLand;
142  break;
143  case kMtof:
144  return kMtof;
145  break;
146  case kTof:
147  return kTof;
148  break;
149  case kTracker:
150  return kTracker;
151  break;
152  default:
153  return kUnknown;
154  break;
155  }
156 
157 }
158 
159 
160 Int_t Detector::StringToMask(const Char_t* chars, Int_t maxChar)
161 {
162  // convert a set of chars to a mask of enum's
163  // simple tests for unique characters: {n,f,c,t,m}
164 
165  Int_t mask = 0;
166 
167  TString thestring(chars);
168  if (maxChar>0 && maxChar<thestring.Length()) { thestring.Resize(maxChar); }
169 
170  thestring.ToLower();
171  if (thestring.Contains("C")) { mask |= kCal; }
172  if (thestring.Contains("c")) { mask |= kCalCrystal; }
173  if (thestring.Contains("D")) { mask |= kDch; }
174  if (thestring.Contains("G")) { mask |= kGfi; }
175  if (thestring.Contains("L")) { mask |= kLand; }
176  if (thestring.Contains("M")) { mask |= kMtof; }
177  if (thestring.Contains("t")) { mask |= kTof; }
178  if (thestring.Contains("T")) { mask |= kTracker; }
179 
180  return mask;
181 }
182 
183 
184