344 TObjString ostr, *p_ostr;
345 TString path, name, str;
349 if (folder ==
nullptr) {
350 std::cerr << std::endl <<
">> TMusrRunHeader::FillFolder(): **ERROR** folder == nullptr!!" << std::endl;
367 pos = path.Last(
'/');
369 std::cerr << std::endl <<
">> TMusrRunHeader::FillFolder(): **ERROR** somethig is wrong with the path=" << path <<
" !!" << std::endl;
374 oarray =
dynamic_cast<TObjArray*
>(
FindObject(folder, path));
376 std::cerr << std::endl <<
">> TMusrRunHeader::FillFolder(): **ERROR** couldn't create header structure!!" << std::endl;
382 name = ostr.GetString();
385 for (Int_t j=0; j<oarray->GetEntriesFast(); j++) {
386 p_ostr =
dynamic_cast<TObjString*
>(oarray->At(j));
387 if (p_ostr->GetString().BeginsWith(str)) {
388 oarray->AddAt(ostr.Clone(), j);
394 oarray->AddLast(ostr.Clone());
415 if (dir ==
nullptr) {
416 std::cerr << std::endl <<
">> TMusrRunHeader::FillDirectory(): **ERROR** dir == nullptr!!" << std::endl;
424 TString path, name, str;
425 TObjString ostr, *p_ostr;
427 TDirectory *currDir=
nullptr;
428 TObjArray *oarray=
nullptr;
432 pos = path.Last(
'/');
434 std::cerr << std::endl <<
">> TMusrRunHeader::FillDirectory(): **ERROR** somethig is wrong with the path=" << path <<
" !!" << std::endl;
439 currDir = dir->CurrentDirectory();
440 if (currDir->GetList()->Last() ==
nullptr) {
441 oarray =
new TObjArray();
443 oarray =
dynamic_cast<TObjArray*
>(currDir->GetList()->First());
448 name = ostr.GetString();
451 for (Int_t j=0; j<oarray->GetEntriesFast(); j++) {
452 p_ostr =
dynamic_cast<TObjString*
>(oarray->At(j));
453 if (p_ostr->GetString().BeginsWith(str)) {
454 oarray->AddAt(ostr.Clone(), j);
460 oarray->AddLast(ostr.Clone());
480 TString type(
"undef");
484 if (
fStringObj[i].GetPathName() == pathName) {
489 for (Int_t i=0; i<
fIntObj.size(); i++) {
490 if (
fIntObj[i].GetPathName() == pathName) {
496 if (
fDoubleObj[i].GetPathName() == pathName) {
962 TIter next(dir->GetListOfKeys());
967 if (!strcmp(dir->GetName(),
"RunHeader")) {
971 while ((key = (TKey*)next())) {
972 if (strcmp(key->GetClassName(),
"TDirectoryFile") == 0) {
973 TDirectory *subdir = (TDirectory*)key->ReadObj();
975 }
else if (strcmp(key->GetClassName(),
"TObjString") == 0) {
976 entry = (TObjString*)key->ReadObj();
977 TString str = dir->GetPath();
978 Ssiz_t start_idx = str.Index(
"RunHeader/");
1001 TString label(
""), pathName(
""), str(
""), strValue(
""), type(
"");
1002 TObjString *ostr =
nullptr;
1003 TObjArray *tokens =
nullptr;
1008 ostr =
dynamic_cast<TObjString*
>(headerData);
1009 str = ostr->GetString();
1020 pathName = requestedPath + TString(
"/") + label;
1027 if (type ==
"TString") {
1028 Set(pathName, strValue);
1029 }
else if (type ==
"Int_t") {
1030 intValue = strValue.Atoi();
1031 Set(pathName, intValue);
1032 }
else if (type ==
"Double_t") {
1033 dval = strValue.Atof();
1034 Set(pathName, dval);
1035 }
else if (type ==
"TMusrRunPhysicalQuantity") {
1040 tokens = strValue.Tokenize(
";");
1041 if (tokens ==
nullptr) {
1042 std::cerr << std::endl <<
">> **ERROR** Couldn't tokenize entry in Bool_t TMusrRunHeader::ExtractHeaderInformationData(TObjString *headerData, TString requestedPath)" << std::endl;
1046 switch (tokens->GetEntries()) {
1048 ostr =
dynamic_cast<TObjString*
>(tokens->At(1));
1049 str = ostr->GetString();
1050 if (!str.Contains(
"SP:")) {
1055 ostr =
dynamic_cast<TObjString*
>(tokens->At(2));
1056 str = ostr->GetString();
1068 idx1 = strValue.Last(
';');
1071 for (Int_t i=idx1+2; i<strValue.Length(); i++)
1072 last += strValue[i];
1074 if (!last.Contains(
"SP:")) {
1076 for (Int_t i=0; i<idx1; i++)
1082 tokens = strValue.Tokenize(
" +;");
1083 if (tokens ==
nullptr) {
1084 std::cerr << std::endl <<
">> **ERROR** Couldn't tokenize entry in Bool_t TMusrRunHeader::ExtractHeaderInformationData(TObjString *headerData, TString requestedPath)" << std::endl;
1088 switch (tokens->GetEntries()) {
1090 ostr =
dynamic_cast<TObjString*
>(tokens->At(0));
1091 str = ostr->GetString();
1093 ostr =
dynamic_cast<TObjString*
>(tokens->At(1));
1094 str = ostr->GetString();
1098 ostr =
dynamic_cast<TObjString*
>(tokens->At(0));
1099 str = ostr->GetString();
1101 ostr =
dynamic_cast<TObjString*
>(tokens->At(1));
1102 str = ostr->GetString();
1104 ostr =
dynamic_cast<TObjString*
>(tokens->At(2));
1105 str = ostr->GetString();
1107 ostr =
dynamic_cast<TObjString*
>(tokens->At(3));
1108 str = ostr->GetString();
1112 ostr =
dynamic_cast<TObjString*
>(tokens->At(3));
1113 str = ostr->GetString();
1118 ostr =
dynamic_cast<TObjString*
>(tokens->At(0));
1119 str = ostr->GetString();
1121 ostr =
dynamic_cast<TObjString*
>(tokens->At(2));
1122 str = ostr->GetString();
1124 ostr =
dynamic_cast<TObjString*
>(tokens->At(3));
1125 str = ostr->GetString();
1127 ostr =
dynamic_cast<TObjString*
>(tokens->At(5));
1128 str = ostr->GetString();
1140 Set(pathName, prop);
1141 }
else if (type ==
"TStringVector") {
1143 tokens = strValue.Tokenize(
";");
1144 if (tokens ==
nullptr) {
1145 std::cerr << std::endl <<
">> **ERROR** Couldn't tokenize entry in Bool_t TMusrRunHeader::ExtractHeaderInformationData(TObjString *headerData, TString requestedPath)" << std::endl;
1148 for (Int_t i=0; i<tokens->GetEntries(); i++) {
1149 ostr =
dynamic_cast<TObjString*
>(tokens->At(i));
1150 str = ostr->GetString();
1151 str.Remove(TString::kBoth,
' ');
1152 svec.push_back(str);
1158 Set(pathName, svec);
1159 }
else if (type ==
"TIntVector") {
1161 tokens = strValue.Tokenize(
";");
1162 if (tokens ==
nullptr) {
1163 std::cerr << std::endl <<
">> **ERROR** Couldn't tokenize entry in Bool_t TMusrRunHeader::ExtractHeaderInformationData(TObjString *headerData, TString requestedPath)" << std::endl;
1166 for (Int_t i=0; i<tokens->GetEntries(); i++) {
1167 ostr =
dynamic_cast<TObjString*
>(tokens->At(i));
1168 ivec.push_back(ostr->GetString().Atoi());
1174 Set(pathName, ivec);
1175 }
else if (type ==
"TDoubleVector") {
1177 tokens = strValue.Tokenize(
";");
1178 if (tokens ==
nullptr) {
1179 std::cerr << std::endl <<
">> **ERROR** Couldn't tokenize entry in Bool_t TMusrRunHeader::ExtractHeaderInformationData(TObjString *headerData, TString requestedPath)" << std::endl;
1182 for (Int_t i=0; i<tokens->GetEntries(); i++) {
1183 ostr =
dynamic_cast<TObjString*
>(tokens->At(i));
1184 dvec.push_back(ostr->GetString().Atof());
1190 Set(pathName, dvec);
1209 TString label(
""), path(
""), pathName(
""), str(
""), strValue(
""), type(
"");
1210 TObjString *ostr =
nullptr;
1211 TObjArray *tokens =
nullptr;
1217 for (Int_t i=0; i<headerInfo->GetEntries(); i++) {
1219 str = TString(headerInfo->At(i)->ClassName());
1220 if (str ==
"TObjArray") {
1221 path = requestedPath +
"/" + TString(headerInfo->At(i)->GetName());
1224 ostr =
dynamic_cast<TObjString*
>(headerInfo->At(i));
1241 std::cout << std::endl <<
"***************************************";
1242 std::cout << std::endl <<
"header info of file : " <<
fFileName;
1243 std::cout << std::endl <<
"***************************************";
1245 TString str(
""), tstr(
""), fmt(
""), path(
""), name(
""), currentPath(
"");
1251 if (path != currentPath) {
1253 std::cout << std::endl << currentPath;
1262 std::cout << std::endl << str;
1266 for (UInt_t j=0; j<
fIntObj.size(); j++) {
1269 str.Form(
" %03d - %s: %d -@%d", i, name.Data(),
fIntObj[j].GetValue(),
MRH_INT);
1270 std::cout << std::endl << str;
1279 std::cout << std::endl << str;
1286 Int_t digit, digit_d;
1292 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; SP: %%.%dlf; %%s", digit, digit, digit_d);
1295 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; SP: %%.%dlf", digit, digit, digit_d);
1302 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; %%s", digit, digit);
1305 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s", digit, digit);
1312 fmt.Form(
"%%s: %%.%dlf %%s; %%s", digit);
1315 fmt.Form(
"%%s: %%.%dlf %%s", digit);
1323 fmt.Form(
"%%s: %%.%dlf %%s; SP: %%.%dlf; %%s", digit, digit_d);
1326 fmt.Form(
"%%s: %%.%dlf %%s; SP: %%.%dlf", digit, digit_d);
1330 fmt.Form(
"%%s: %%s %%s");
1331 if ((prop.
GetUnit() !=
"n/a"))
1334 tstr.Form(fmt, prop.
GetLabel().Data(),
"n/a",
"n/a");
1337 std::cout << std::endl << str;
1344 str.Form(
" %03d - %s: ", i, name.Data());
1346 for (UInt_t k=0; k<vstr.size()-1; k++)
1347 str += vstr[k] +
"; ";
1348 str += vstr[vstr.size()-1];
1351 std::cout << std::endl << str;
1358 str.Form(
" %03d - %s: ", i, name.Data());
1360 for (UInt_t k=0; k<vint.size()-1; k++) {
1364 str += vint[vint.size()-1];
1367 std::cout << std::endl << str;
1374 str.Form(
" %03d - %s: ", i, name.Data());
1378 for (UInt_t k=0; k<dvec.size()-1; k++) {
1379 subStr.Form(fmt, dvec[k]);
1383 subStr.Form(fmt, dvec[dvec.size()-1]);
1387 std::cout << std::endl << str;
1392 std::cout << std::endl;
1528 TString strValue = TString(
"n/a");
1529 Ssiz_t idx1 = str.First(
':');
1530 Ssiz_t idx2 = str.Last(
'-');
1531 if ((idx1 == -1) || (idx2 == -1)) {
1533 std::cerr << std::endl <<
">> TMusrRunHeader::GetStrValue(): **WARNING** str='" << str <<
"', seems not correctly encoded.";
1534 std::cerr << std::endl <<
">> Will omit it." << std::endl;
1539 strValue = TString(
"");
1540 for (Int_t j=idx1+2; j<idx2-1; j++)
1558 TString result =
"n/a";
1562 Ssiz_t pos = str.Last(
'@');
1566 std::cerr << std::endl <<
">> TMusrRunHeader::GetType(): **WARNING** str=" << str <<
" seems to be an invalid MusrROOT run header string.";
1567 std::cerr << std::endl <<
">> Will omit it." << std::endl;
1573 TString typeStr(str);
1574 typeStr.Remove(0, pos+1);
1576 if (!typeStr.IsDigit()) {
1577 std::cerr << std::endl <<
">> TMusrRunHeader::GetType(): **ERROR** typeStr=" << typeStr <<
" is not supported." << std::endl;
1581 typeVal = typeStr.Atoi();
1591 result =
"Double_t";
1594 result =
"TMusrRunPhysicalQuantity";
1597 result =
"TStringVector";
1600 result =
"TIntVector";
1603 result =
"TDoubleVector";
1606 std::cerr << std::endl <<
">> TMusrRunHeader::GetType(): **ERROR** found unsupport type encoded with: " << typeVal <<
"." << std::endl;
1626 if (path.First(
'/') == -1)
1631 TObject *obj = treeObj->FindObject(str);
1635 std::cerr << std::endl <<
">> TMusrRunHeader::UpdateFolder(): **ERROR** couldn't tokenize path!!" << std::endl;
1640 TObjArray *oarray =
new TObjArray();
1641 if (oarray ==
nullptr) {
1642 std::cerr << std::endl <<
">> TMusrRunHeader::UpdateFolder(): **ERROR** couldn't create header structure!!" << std::endl;
1646 oarray->SetName(str);
1648 if (!strcmp(treeObj->ClassName(),
"TFolder"))
1649 (
dynamic_cast<TFolder*
>(treeObj))->Add(oarray);
1651 (
dynamic_cast<TObjArray*
>(treeObj))->AddLast(oarray);
1671 if (strcmp(topdir->GetName(),
"RunHeader")) {
1672 std::cerr << std::endl <<
">> TMusrRunHeader::UpdateDirTree(): **ERROR** top dir has to be named RunHeader, found '" << topdir->GetName() <<
"' !" << std::endl;
1677 TObjArray *tok =
nullptr;
1678 TObjString *ostr =
nullptr;
1685 tok = str.Tokenize(
"/");
1686 for (UInt_t i=0; i<tok->GetEntries(); i++) {
1687 ostr =
dynamic_cast<TObjString*
>(tok->At(i));
1688 tstr = ostr->GetString();
1689 if (i != tok->GetEntries()-1) {
1690 if ((obj = topdir->FindObjectAny(tstr.Data())) ==
nullptr) {
1691 TDirectory *ndir = dir->mkdir(tstr.Data());
1694 dir =
dynamic_cast<TDirectory*
>(obj);
1717 TObject *obj=
nullptr;
1720 if (strcmp(treeObj->ClassName(),
"TFolder") && strcmp(treeObj->ClassName(),
"TObjArray"))
1723 pos = path.First(
'/');
1725 obj = treeObj->FindObject(path);
1728 TString objName =
GetFirst(path,
'/');
1729 obj = treeObj->FindObject(objName);
1751 TObjString tostr(
"n/a");
1753 TString str(
""), path(
""), name(
""), fmt(
""), tstr(
"");
1762 tostr.SetString(str);
1766 for (UInt_t j=0; j<
fIntObj.size(); j++) {
1769 str.Form(
"%03d - %s: %d -@%d", idx, name.Data(),
fIntObj[j].GetValue(),
MRH_INT);
1770 tostr.SetString(str);
1779 tostr.SetString(str);
1786 Int_t digit, digit_d;
1792 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; SP: %%.%dlf; %%s", digit, digit, digit_d);
1796 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; SP: %%.%dlf", digit, digit, digit_d);
1803 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s; %%s", digit, digit);
1806 fmt.Form(
"%%s: %%.%dlf +- %%.%dlf %%s", digit, digit);
1813 fmt.Form(
"%%s: %%.%dlf %%s; %%s", digit);
1816 fmt.Form(
"%%s: %%.%dlf %%s", digit);
1824 fmt.Form(
"%%s: %%.%dlf %%s; SP: %%.%dlf; %%s", digit, digit_d);
1827 fmt.Form(
"%%s: %%.%dlf %%s; SP: %%.%dlf", digit, digit_d);
1831 fmt.Form(
"%%s: %%.1e %%s");
1835 tostr.SetString(str);
1842 str.Form(
"%03d - %s: ", idx, name.Data());
1844 for (UInt_t k=0; k<vstr.size()-1; k++)
1845 str += vstr[k] +
"; ";
1846 str += vstr[vstr.size()-1];
1849 tostr.SetString(str);
1856 str.Form(
"%03d - %s: ", idx, name.Data());
1858 for (UInt_t k=0; k<vint.size()-1; k++) {
1862 str += vint[vint.size()-1];
1865 tostr.SetString(str);
1872 str.Form(
"%03d - %s: ", idx, name.Data());
1876 for (UInt_t k=0; k<dvec.size()-1; k++) {
1877 subStr.Form(fmt, dvec[k]);
1881 subStr.Form(fmt, dvec[dvec.size()-1]);
1885 tostr.SetString(str);