improved parsing

This commit is contained in:
nemu 2011-09-20 15:25:08 +00:00
parent bbbab12a1a
commit 5fede09cd1
5 changed files with 38 additions and 16 deletions

View File

@ -1103,11 +1103,12 @@ void TPsiRunHeader::Set(TString pathName, TIntVector value)
*/
Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *headerInfo, TString requestedPath)
{
TString name(""), path(""), pathName(""), str(""), strValue("");
TString headerName(""), name(""), path(""), pathName(""), str(""), strValue("");
TObjString *ostr = 0;
TObjArray *tokens = 0;
Bool_t required=false;
UInt_t idx;
Ssiz_t idx1, idx2;
Int_t intValue;
// go through all entries of this header information from the PSI-ROOT file
@ -1115,12 +1116,19 @@ Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *headerInfo, TString re
required=false;
ostr = dynamic_cast<TObjString*>(headerInfo->At(i));
str = ostr->GetString();
// get header name
idx1 = str.First('-');
idx2 = str.First(':');
headerName = TString("");
for (Int_t j=idx1+2; j<idx2; j++)
headerName += str[j];
// handle required entry
for (UInt_t j=0; j<fEntry.size(); j++) {
// check if the XML entry has the right requested path
if (fEntry[j].GetPathName().Contains(requestedPath)) {
SplitPathName(fEntry[j].GetPathName(), path, name);
if (str.Contains(name)) {
if (!headerName.CompareTo(name)) {
required=true;
idx = j;
break;
@ -1129,7 +1137,6 @@ Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *headerInfo, TString re
}
if (required) { // handle required entry
// get the name
Ssiz_t idx1, idx2;
idx1 = str.First('-');
idx2 = str.First(':');
name = TString("");
@ -1295,12 +1302,19 @@ Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *headerInfo, TString re
required=false;
ostr = dynamic_cast<TObjString*>(headerInfo->At(i));
str = ostr->GetString();
// get header name
idx1 = str.First('-');
idx2 = str.First(':');
headerName = TString("");
for (Int_t j=idx1+2; j<idx2; j++)
headerName += str[j];
// handle additional entries, i.e. not required entries
for (UInt_t j=0; j<fEntry.size(); j++) {
// check if the XML entry has the right requested path
if (fEntry[j].GetPathName().Contains(requestedPath)) {
SplitPathName(fEntry[j].GetPathName(), path, name);
if (str.Contains(name)) {
if (!headerName.CompareTo(name)) {
required=true;
break;
}
@ -1308,7 +1322,6 @@ Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *headerInfo, TString re
}
if (!required) { // handle not required but fitting the requested path
// get the name
Ssiz_t idx1, idx2;
idx1 = str.First('-');
idx2 = str.First(':');
name = TString("");

View File

@ -132,6 +132,10 @@
<name>RunInfo/Red-Green Description</name>
<type>TStringVector</type>
</entry>
<entry>
<name>RunInfo/Slow Control Histo Names</name>
<type>TStringVector</type>
</entry>
<entry>
<name>SampleEnv/Cryo</name>
<type>TString</type>

View File

@ -74,7 +74,7 @@ int main(int argc, char *argv[])
header->Set("RunInfo/Run Start Time", "2011-04-19 14:25:22");
header->Set("RunInfo/Run Stop Time", "2011-04-19 19:13:47");
prop.Set("Time Resolution", 0.193525, "ns", "TDC 9999");
prop.Set("Time Resolution", 0.1953125, "ns", "TDC 9999");
header->Set("RunInfo/Time Resolution", prop);
prop.Set("Sample Temperature", 3.2, 3.21, 0.05, "K", "CF1");
@ -153,8 +153,8 @@ int main(int argc, char *argv[])
}
// root file header related things
TFolder *runHeader = gROOT->GetRootFolder()->AddFolder("RunHeaderInfo", "PSI Run Header Info");
gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeaderInfo");
TFolder *runHeader = gROOT->GetRootFolder()->AddFolder("RunHeader", "PSI Run Header Info");
gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeader");
TObjArray runInfo;
header->GetHeaderInfo("RunInfo", runInfo);
@ -200,9 +200,9 @@ int main(int argc, char *argv[])
}
runHeader = 0;
f->GetObject("RunHeaderInfo", runHeader);
f->GetObject("RunHeader", runHeader);
if (runHeader == 0) {
cerr << endl << ">> **ERROR** Couldn't get top folder RunHeaderInfo";
cerr << endl << ">> **ERROR** Couldn't get top folder RunHeader";
f->Close();
return -1;
}
@ -213,7 +213,7 @@ int main(int argc, char *argv[])
// get RunHeader
oarray = (TObjArray*) runHeader->FindObjectAny("RunInfo");
if (oarray == 0) {
cerr << endl << ">> **ERROR** Couldn't get RunHeader" << endl;
cerr << endl << ">> **ERROR** Couldn't get RunInfo" << endl;
}
header->ExtractHeaderInformation(oarray, "RunInfo");

View File

@ -68,9 +68,9 @@ int main(int argc, char *argv[])
}
TFolder *runHeader = 0;
f->GetObject("RunHeaderInfo", runHeader);
f->GetObject("RunHeader", runHeader);
if (runHeader == 0) {
cerr << endl << ">> **ERROR** Couldn't get top folder RunHeaderInfo";
cerr << endl << ">> **ERROR** Couldn't get top folder RunHeader";
f->Close();
return -1;
}

View File

@ -117,7 +117,7 @@ int main(int argc, char *argv[])
header->Set("RunInfo/Histo Length", 8192);
prop.Set("Time Resolution", 0.193525, "ns", "TDC 9999");
prop.Set("Time Resolution", 0.1953125, "ns", "TDC 9999");
header->Set("RunInfo/Time Resolution", prop);
TIntVector t0;
@ -142,6 +142,11 @@ int main(int argc, char *argv[])
redGreenDescription.push_back("E-field/light on/on");
header->Set("RunInfo/Red-Green Description", redGreenDescription);
TStringVector scHistoNames;
scHistoNames.push_back("Sample Temperature");
scHistoNames.push_back("Sample Magnetic Field");
header->Set("RunInfo/Slow Control Histo Names", scHistoNames);
TStringVector dummyTest;
dummyTest.push_back("dummy1");
dummyTest.push_back("dummy2");
@ -199,8 +204,8 @@ int main(int argc, char *argv[])
}
// root file header related things
TFolder *runHeader = gROOT->GetRootFolder()->AddFolder("RunHeaderInfo", "PSI Run Header Info");
gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeaderInfo");
TFolder *runHeader = gROOT->GetRootFolder()->AddFolder("RunHeader", "PSI Run Header Info");
gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeader");
TObjArray runInfo;
header->GetHeaderInfo("RunInfo", runInfo);