7 #include "St_base/StMessMgr.h"
11 static void detectorIdInit();
13 void detectorId(
int *ids=0,
char** cds=0)
17 if (!ids) { ids = myIds; cds = myCds; }
19 memset(ids,0,
sizeof(ids[0])*100);
20 memset(cds,0,
sizeof(cds[0])*100);
22 TString myPath(
"$STAR/StRoot/StEvent/StEnumerations.h");
23 gSystem->ExpandPathName(myPath);
25 int notExi = gSystem->AccessPathName(myPath.Data(),kFileExists);
26 if (notExi) { ids[0]=-1;
return;}
27 FILE *fp = fopen(myPath.Data(),
"r");
28 if (!fp) { ids[0]=-1;
return;}
46 if (tb.Index(
"enum")<0)
continue;
47 if (tb.Index(
"StDetectorId")<0)
continue;
48 if (tb.Index(
"=")<0)
continue;
49 if (tb.Index(
"kUnknownId")<0)
continue;
52 tb.ReplaceAll(
" ",
"");
53 if (tb.Index(
"//")==0)
continue;
54 int myK = tb.Index(
"k");
if (myK <0)
break;
55 int myEq= tb.Index(
"=");
if (myEq<0)
break;
56 int myE = tb.Index(
",");
57 if (myE<0) myE = tb.Index(
"}");
59 TString com(tb.Data()+myK,myEq-myK);
60 int id = gROOT->ProcessLineFast(com);
63 cds[ids[0]] =
new char[com.Length()+1];
64 strcpy(cds[ids[0]],com.Data());
66 if (tb[myE]==
'}')
break;
69 for (
int i=1;i<=ids[0];i++) {
70 printf(
"%d = %s\n",ids[i],cds[i]);
74 const char *detectorNameById(StDetectorId
id)
76 if (ids[0]<0)
return "Unknown";
77 if (!ids[0] ) detectorIdInit();
79 for (
int i=1;i<=ids[0];i++) {
if (ids[i]==
id)
return cds[i]+1;}
83 StDetectorId detectorIdByName(
const char *name)
85 if (ids[0]<0)
return kUnknownId;
86 if (!ids[0] ) detectorIdInit();
87 TString tName(name); tName.ReplaceAll(
"Id",
"");
88 for (
int i=1;i<=ids[0];i++){
89 TString tds(cds[i]+1); tds.ReplaceAll(
"Id",
"");
90 if (tName.Contains(tds,TString::kIgnoreCase))
return (StDetectorId)ids[i];
97 detectorId( ids, cds );
99 LOG_FATAL <<
"Failed to parse StEnumerations.h / StDetectorId enumeration. Kaboom." << endm;