PRunDataHandler: replace tokenizer TObjArray/TObjString with PStringUtils
Convert all TString::Tokenize() call sites to PStringUtils::Split. The persisted RunSummary TObjArray (read from the MusrRoot file via FindObjectAny and iterated with TObjArrayIter) and the run-title TObjString returned by TLemRunHeader::GetRunTitle() remain ROOT types, since they come from external interfaces / on-disk format, not from tokenization. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+126
-417
@@ -42,6 +42,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <TROOT.h>
|
||||
#include <TSystem.h>
|
||||
@@ -58,6 +59,7 @@
|
||||
#include "TLemRunHeader.h"
|
||||
#include "MuSR_td_PSI_bin.h"
|
||||
#include "mud.h"
|
||||
#include "PStringUtils.h"
|
||||
|
||||
#ifdef PNEXUS_ENABLED
|
||||
#include "PNeXus.h"
|
||||
@@ -1168,30 +1170,22 @@ Bool_t PRunDataHandler::FileExistsCheck(PMsrRunBlock &runInfo, const UInt_t idx)
|
||||
if (pathName.CompareTo("???") == 0) { // not found in local directory and xml path
|
||||
str = TString(musrpath);
|
||||
// MUSRFULLDATAPATH has the structure: path_1:path_2:...:path_n
|
||||
TObjArray *tokens = str.Tokenize(":");
|
||||
TObjString *ostr;
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString() + TString("/") + *runInfo.GetRunName(idx);
|
||||
std::vector<std::string> tokens = PStringUtils::Split(str.Data(), ":");
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = TString(tokens[i]) + TString("/") + *runInfo.GetRunName(idx);
|
||||
TestFileName(str, ext);
|
||||
if (!str.IsNull()) {
|
||||
pathName = str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// cleanup
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// check if the file is found in the generated default path
|
||||
if (pathName.CompareTo("???") == 0) { // not found in MUSRFULLDATAPATH search
|
||||
str = TString(musrpath);
|
||||
// MUSRFULLDATAPATH has the structure: path_1:path_2:...:path_n
|
||||
TObjArray *tokens = str.Tokenize(":");
|
||||
TObjString *ostr;
|
||||
std::vector<std::string> tokens = PStringUtils::Split(str.Data(), ":");
|
||||
pstr = runInfo.GetInstitute(idx);
|
||||
if (pstr == nullptr) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::FileExistsCheck: **ERROR** Couldn't obtain institute data." << std::endl;
|
||||
@@ -1206,9 +1200,8 @@ Bool_t PRunDataHandler::FileExistsCheck(PMsrRunBlock &runInfo, const UInt_t idx)
|
||||
}
|
||||
pstr->ToUpper();
|
||||
runInfo.SetBeamline(*pstr, idx);
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString() + TString("/DATA/") +
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = TString(tokens[i]) + TString("/DATA/") +
|
||||
*runInfo.GetInstitute(idx) + TString("/") +
|
||||
*runInfo.GetBeamline(idx) + TString("/") +
|
||||
*runInfo.GetRunName(idx);
|
||||
@@ -1218,11 +1211,6 @@ Bool_t PRunDataHandler::FileExistsCheck(PMsrRunBlock &runInfo, const UInt_t idx)
|
||||
break;
|
||||
}
|
||||
}
|
||||
// clean up
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// no proper path name found
|
||||
@@ -1307,21 +1295,14 @@ Bool_t PRunDataHandler::FileExistsCheck(const Bool_t fileName, const Int_t idx)
|
||||
if (pathName.CompareTo("???") == 0) { // not found in local directory and xml path
|
||||
str = TString(musrpath);
|
||||
// MUSRFULLDATAPATH has the structure: path_1:path_2:...:path_n
|
||||
TObjArray *tokens = str.Tokenize(":");
|
||||
TObjString *ostr;
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString() + TString("/") + fln;
|
||||
std::vector<std::string> tokens = PStringUtils::Split(str.Data(), ":");
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = TString(tokens[i]) + TString("/") + fln;
|
||||
if (gSystem->AccessPathName(str.Data())!=true) { // found
|
||||
pathName = str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// cleanup
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
// no proper path name found
|
||||
if (pathName.CompareTo("???") == 0) {
|
||||
@@ -1374,21 +1355,14 @@ Bool_t PRunDataHandler::FileExistsCheck(const TString fileName)
|
||||
if (pathName.CompareTo("???") == 0) { // not found in local directory and xml path
|
||||
str = TString(musrpath);
|
||||
// MUSRFULLDATAPATH has the structure: path_1:path_2:...:path_n
|
||||
TObjArray *tokens = str.Tokenize(":");
|
||||
TObjString *ostr;
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString() + TString("/") + fileName;
|
||||
std::vector<std::string> tokens = PStringUtils::Split(str.Data(), ":");
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = TString(tokens[i]) + TString("/") + fileName;
|
||||
if (gSystem->AccessPathName(str.Data())!=true) { // found
|
||||
pathName = str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// cleanup
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
// no proper path name found
|
||||
if (pathName.CompareTo("???") == 0) {
|
||||
@@ -1544,97 +1518,22 @@ Bool_t PRunDataHandler::ReadRootFile()
|
||||
TString s;
|
||||
TObjArrayIter summIter(runSummary);
|
||||
TObjString *os(dynamic_cast<TObjString*>(summIter.Next()));
|
||||
TObjArray *oa(nullptr);
|
||||
TObjString *objTok(nullptr);
|
||||
while (os != nullptr) {
|
||||
s = os->GetString();
|
||||
// will put four parallel if's since it may be that more than one RA-values are on one line
|
||||
if (s.Contains("RA-L")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr) {
|
||||
if (!objTok->GetString().CompareTo("RA-L")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(0, objTok->GetString().Atof()); // fill RA-R value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-R")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-R")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if (objTok != nullptr && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(1, objTok->GetString().Atof()); // fill RA-R value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-T")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-T")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(2, objTok->GetString().Atof()); // fill RA-T value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-B")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-B")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(3, objTok->GetString().Atof()); // fill RA-B value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
// a summary line has the structure 'RA-L = val RA-R = val ...', i.e. the value
|
||||
// follows two tokens after the tag. More than one RA-value may be on one line.
|
||||
std::vector<std::string> oa = PStringUtils::Split(s.Data(), " ");
|
||||
for (UInt_t k=0; k+2 < oa.size(); k++) {
|
||||
if (oa[k+1] != "=")
|
||||
continue;
|
||||
if (oa[k] == "RA-L")
|
||||
runData.SetRingAnode(0, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-R")
|
||||
runData.SetRingAnode(1, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-T")
|
||||
runData.SetRingAnode(2, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-B")
|
||||
runData.SetRingAnode(3, TString(oa[k+2]).Atof());
|
||||
}
|
||||
|
||||
os = dynamic_cast<TObjString*>(summIter.Next()); // next summary line...
|
||||
@@ -1962,97 +1861,22 @@ Bool_t PRunDataHandler::ReadRootFile()
|
||||
TString s;
|
||||
TObjArrayIter summIter(runSummary);
|
||||
TObjString *os(dynamic_cast<TObjString*>(summIter.Next()));
|
||||
TObjArray *oa(nullptr);
|
||||
TObjString *objTok(nullptr);
|
||||
while (os != nullptr) {
|
||||
s = os->GetString();
|
||||
// will put four parallel if's since it may be that more than one RA-values are on one line
|
||||
if (s.Contains("RA-L")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr) {
|
||||
if (!objTok->GetString().CompareTo("RA-L")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(0, objTok->GetString().Atof()); // fill RA-R value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-R")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-R")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(1, objTok->GetString().Atof()); // fill RA-R value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-T")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-T")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(2, objTok->GetString().Atof()); // fill RA-T value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (s.Contains("RA-B")) {
|
||||
oa = s.Tokenize(" ");
|
||||
TObjArrayIter lineIter(oa);
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next());
|
||||
while (objTok != nullptr){
|
||||
if (!objTok->GetString().CompareTo("RA-B")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // "="
|
||||
if ((objTok != nullptr) && !objTok->GetString().CompareTo("=")) {
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // HV value
|
||||
runData.SetRingAnode(3, objTok->GetString().Atof()); // fill RA-B value into the runData structure
|
||||
break;
|
||||
}
|
||||
}
|
||||
objTok = dynamic_cast<TObjString*>(lineIter.Next()); // next token...
|
||||
}
|
||||
// clean up
|
||||
if (oa) {
|
||||
delete oa;
|
||||
oa = nullptr;
|
||||
}
|
||||
// a summary line has the structure 'RA-L = val RA-R = val ...', i.e. the value
|
||||
// follows two tokens after the tag. More than one RA-value may be on one line.
|
||||
std::vector<std::string> oa = PStringUtils::Split(s.Data(), " ");
|
||||
for (UInt_t k=0; k+2 < oa.size(); k++) {
|
||||
if (oa[k+1] != "=")
|
||||
continue;
|
||||
if (oa[k] == "RA-L")
|
||||
runData.SetRingAnode(0, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-R")
|
||||
runData.SetRingAnode(1, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-T")
|
||||
runData.SetRingAnode(2, TString(oa[k+2]).Atof());
|
||||
else if (oa[k] == "RA-B")
|
||||
runData.SetRingAnode(3, TString(oa[k+2]).Atof());
|
||||
}
|
||||
|
||||
os = dynamic_cast<TObjString*>(summIter.Next()); // next summary line...
|
||||
@@ -2454,8 +2278,7 @@ Bool_t PRunDataHandler::ReadWkmFile()
|
||||
// read data ---------------------------------------------------------
|
||||
UInt_t group_counter = 0;
|
||||
Int_t val;
|
||||
TObjArray *tokens;
|
||||
TObjString *ostr;
|
||||
std::vector<std::string> tokens;
|
||||
TString str;
|
||||
UInt_t histoNo = 0;
|
||||
PRawRunDataSet dataSet;
|
||||
@@ -2489,30 +2312,22 @@ Bool_t PRunDataHandler::ReadWkmFile()
|
||||
f.getline(instr, sizeof(instr));
|
||||
continue;
|
||||
}
|
||||
tokens = line.Tokenize(" ");
|
||||
tokens = PStringUtils::Split(line.Data(), " ");
|
||||
|
||||
if (!tokens) { // no tokens found
|
||||
if (tokens.empty()) { // no tokens found
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadWkmFile(): **ERROR** while reading data: coulnd't tokenize run data.";
|
||||
return false;
|
||||
}
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString();
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = tokens[i];
|
||||
val = ToInt(str, ok);
|
||||
if (ok) {
|
||||
histoData.push_back(val);
|
||||
} else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadWkmFile(): **ERROR** while reading data: data line contains non-integer values.";
|
||||
// clean up
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// clean up
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
f.getline(instr, sizeof(instr));
|
||||
@@ -2523,29 +2338,21 @@ Bool_t PRunDataHandler::ReadWkmFile()
|
||||
if (strlen(instr) != 0) {
|
||||
// extract values
|
||||
line = TString(instr);
|
||||
tokens = line.Tokenize(" ");
|
||||
if (!tokens) { // no tokens found
|
||||
tokens = PStringUtils::Split(line.Data(), " ");
|
||||
if (tokens.empty()) { // no tokens found
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadWkmFile(): **ERROR** while reading data: coulnd't tokenize run data.";
|
||||
return false;
|
||||
}
|
||||
for (Int_t i=0; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
str = ostr->GetString();
|
||||
for (UInt_t i=0; i<tokens.size(); i++) {
|
||||
str = tokens[i];
|
||||
val = ToInt(str, ok);
|
||||
if (ok) {
|
||||
histoData.push_back(val);
|
||||
} else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadWkmFile(): **ERROR** while reading data: data line contains non-integer values.";
|
||||
// clean up
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// clean up
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// save the last histo if not empty
|
||||
@@ -3242,8 +3049,7 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
Bool_t headerTag = false;
|
||||
Bool_t dataTag = false;
|
||||
Int_t dataLineCounter = 0;
|
||||
TObjString *ostr;
|
||||
TObjArray *tokens = nullptr;
|
||||
std::vector<std::string> tokens;
|
||||
TString str;
|
||||
Int_t groups = 0;
|
||||
Int_t channels = 0;
|
||||
@@ -3287,9 +3093,9 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
if (workStr.BeginsWith("title:", TString::kIgnoreCase)) {
|
||||
runData.SetRunTitle(TString(workStr.Data()+workStr.First(":")+2));
|
||||
} else if (workStr.BeginsWith("field:", TString::kIgnoreCase)) {
|
||||
tokens = workStr.Tokenize(":("); // field: val (units)
|
||||
tokens = PStringUtils::Split(workStr.Data(), ":("); // field: val (units)
|
||||
// check if expected number of tokens present
|
||||
if (tokens->GetEntries() != 3) {
|
||||
if (tokens.size() != 3) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", invalid field entry in header.";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
std::cerr << std::endl;
|
||||
@@ -3297,9 +3103,8 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
// check if field value is a number
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
if (ostr->GetString().IsFloat()) {
|
||||
dval = ostr->GetString().Atof();
|
||||
if (TString(tokens[1]).IsFloat()) {
|
||||
dval = TString(tokens[1]).Atof();
|
||||
} else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", field value is not float/doulbe.";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
@@ -3308,10 +3113,9 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
// check units, accept (G), (T)
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(2));
|
||||
if (ostr->GetString().Contains("G"))
|
||||
if (TString(tokens[2]).Contains("G"))
|
||||
unitScaling = 1.0;
|
||||
else if (ostr->GetString().Contains("T"))
|
||||
else if (TString(tokens[2]).Contains("T"))
|
||||
unitScaling = 1.0e4;
|
||||
else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", unkown field units.";
|
||||
@@ -3320,17 +3124,11 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
runData.SetField(dval*unitScaling);
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
runData.SetField(dval*unitScaling);
|
||||
} else if (workStr.BeginsWith("temp:", TString::kIgnoreCase)) {
|
||||
tokens = workStr.Tokenize(":("); // temp: val (units)
|
||||
tokens = PStringUtils::Split(workStr.Data(), ":("); // temp: val (units)
|
||||
// check if expected number of tokens present
|
||||
if (tokens->GetEntries() != 3) {
|
||||
if (tokens.size() != 3) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", invalid temperatue entry in header.";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
std::cerr << std::endl;
|
||||
@@ -3338,9 +3136,8 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
// check if field value is a number
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
if (ostr->GetString().IsFloat()) {
|
||||
dval = ostr->GetString().Atof();
|
||||
if (TString(tokens[1]).IsFloat()) {
|
||||
dval = TString(tokens[1]).Atof();
|
||||
} else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", temperature value is not float/doulbe.";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
@@ -3348,13 +3145,7 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
runData.SetTemperature(0, dval, 0.0);
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
runData.SetTemperature(0, dval, 0.0);
|
||||
} else if (workStr.BeginsWith("setup:", TString::kIgnoreCase)) {
|
||||
runData.SetSetup(TString(workStr.Data()+workStr.First(":")+2));
|
||||
} else if (workStr.BeginsWith("groups:", TString::kIgnoreCase)) {
|
||||
@@ -3377,9 +3168,9 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
} else if (workStr.BeginsWith("resolution:", TString::kIgnoreCase)) {
|
||||
tokens = workStr.Tokenize(":("); // resolution: val (units)
|
||||
tokens = PStringUtils::Split(workStr.Data(), ":("); // resolution: val (units)
|
||||
// check if expected number of tokens present
|
||||
if (tokens->GetEntries() != 3) {
|
||||
if (tokens.size() != 3) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", invalid time resolution entry in header.";
|
||||
std::cerr << std::endl << line.Data();
|
||||
std::cerr << std::endl;
|
||||
@@ -3387,9 +3178,8 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
// check if timeresolution value is a number
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
if (ostr->GetString().IsFloat()) {
|
||||
dval = ostr->GetString().Atof();
|
||||
if (TString(tokens[1]).IsFloat()) {
|
||||
dval = TString(tokens[1]).Atof();
|
||||
} else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", time resolution value is not float/doulbe.";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
@@ -3398,14 +3188,13 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
break;
|
||||
}
|
||||
// check units, accept (fs), (ps), (ns), (us)
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(2));
|
||||
if (ostr->GetString().Contains("fs"))
|
||||
if (TString(tokens[2]).Contains("fs"))
|
||||
unitScaling = 1.0e-6;
|
||||
else if (ostr->GetString().Contains("ps"))
|
||||
else if (TString(tokens[2]).Contains("ps"))
|
||||
unitScaling = 1.0e-3;
|
||||
else if (ostr->GetString().Contains("ns"))
|
||||
else if (TString(tokens[2]).Contains("ns"))
|
||||
unitScaling = 1.0;
|
||||
else if (ostr->GetString().Contains("us"))
|
||||
else if (TString(tokens[2]).Contains("us"))
|
||||
unitScaling = 1.0e3;
|
||||
else {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", unkown time resolution units.";
|
||||
@@ -3414,13 +3203,7 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
runData.SetTimeResolution(dval*unitScaling);
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
runData.SetTimeResolution(dval*unitScaling);
|
||||
} else { // error
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** line no " << lineNo << ", illegal header line.";
|
||||
std::cerr << std::endl;
|
||||
@@ -3429,9 +3212,9 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
}
|
||||
} else if (dataTag) {
|
||||
dataLineCounter++;
|
||||
tokens = line.Tokenize(" ,\t");
|
||||
tokens = PStringUtils::Split(line.Data(), " ,\t");
|
||||
// check if the number of data line entries is correct
|
||||
if (tokens->GetEntries() != groups+1) {
|
||||
if (static_cast<Int_t>(tokens.size()) != groups+1) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadMduAsciiFile **ERROR** found data line with a wrong data format, cannot be handled (line no " << lineNo << ")";
|
||||
std::cerr << std::endl << ">> line:";
|
||||
std::cerr << std::endl << ">> " << line.Data();
|
||||
@@ -3439,16 +3222,9 @@ Bool_t PRunDataHandler::ReadMduAsciiFile()
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
for (Int_t i=1; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
data[i-1].push_back(ostr->GetString().Atof());
|
||||
}
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
|
||||
for (UInt_t i=1; i<tokens.size(); i++) {
|
||||
data[i-1].push_back(TString(tokens[i]).Atof());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3638,16 +3414,14 @@ Bool_t PRunDataHandler::ReadAsciiFile()
|
||||
} else if (dataTag) {
|
||||
if (line.IsWhitespace()) // ignore empty lines
|
||||
continue;
|
||||
TObjString *ostr;
|
||||
TObjArray *tokens;
|
||||
|
||||
// Remove trailing end of line
|
||||
line.Remove(TString::kTrailing, '\r');
|
||||
line.Remove(TString::kTrailing, '\r');
|
||||
|
||||
// check if data have x, y [, error y] structure, and that x, y, and error y are numbers
|
||||
tokens = line.Tokenize(" ,\t");
|
||||
std::vector<std::string> tokens = PStringUtils::Split(line.Data(), " ,\t");
|
||||
// check if the number of data line entries is 2 or 3
|
||||
if ((tokens->GetEntries() != 2) && (tokens->GetEntries() != 3)) {
|
||||
if ((tokens.size() != 2) && (tokens.size() != 3)) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** found data line with a structure different than \"x, y [, error y]\", cannot be handled (line no " << lineNo << ")";
|
||||
std::cerr << std::endl;
|
||||
success = false;
|
||||
@@ -3655,35 +3429,32 @@ Bool_t PRunDataHandler::ReadAsciiFile()
|
||||
}
|
||||
|
||||
// get x
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(0));
|
||||
if (!ostr->GetString().IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": x = " << ostr->GetString().Data() << " is not a number, sorry.";
|
||||
if (!TString(tokens[0]).IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": x = " << tokens[0] << " is not a number, sorry.";
|
||||
std::cerr << std::endl;
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
x = ostr->GetString().Atof();
|
||||
x = TString(tokens[0]).Atof();
|
||||
|
||||
// get y
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
if (!ostr->GetString().IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": y = " << ostr->GetString().Data() << " is not a number, sorry.";
|
||||
if (!TString(tokens[1]).IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": y = " << tokens[1] << " is not a number, sorry.";
|
||||
std::cerr << std::endl;
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
y = ostr->GetString().Atof();
|
||||
y = TString(tokens[1]).Atof();
|
||||
|
||||
// get error y if present
|
||||
if (tokens->GetEntries() == 3) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(2));
|
||||
if (!ostr->GetString().IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": error y = " << ostr->GetString().Data() << " is not a number, sorry.";
|
||||
if (tokens.size() == 3) {
|
||||
if (!TString(tokens[2]).IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **ERROR** line no " << lineNo << ": error y = " << tokens[2] << " is not a number, sorry.";
|
||||
std::cerr << std::endl;
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
ey = ostr->GetString().Atof();
|
||||
ey = TString(tokens[2]).Atof();
|
||||
if (ey == 0) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadAsciiFile **WARNING** line no " << lineNo << ": error y = 0 which doesn't make sense. Will set it to 1.0. Please check!!";
|
||||
std::cerr << std::endl;
|
||||
@@ -3695,12 +3466,6 @@ Bool_t PRunDataHandler::ReadAsciiFile()
|
||||
ey = 1.0;
|
||||
}
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
|
||||
// keep values
|
||||
xVec.push_back(x);
|
||||
exVec.push_back(1.0);
|
||||
@@ -3878,8 +3643,7 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
|
||||
// variables needed to tokenize strings
|
||||
TString tstr;
|
||||
TObjString *ostr;
|
||||
TObjArray *tokens = nullptr;
|
||||
std::vector<std::string> tokens;
|
||||
|
||||
while (!f.eof()) {
|
||||
// get next line from file
|
||||
@@ -3915,16 +3679,9 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
dbTag = 4;
|
||||
|
||||
// filter out all data tags
|
||||
tokens = workStr.Tokenize(" ,\t");
|
||||
for (Int_t i=1; i<tokens->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
runData.fDataNonMusr.AppendDataTag(ostr->GetString());
|
||||
}
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
tokens = PStringUtils::Split(workStr.Data(), " ,\t");
|
||||
for (UInt_t i=1; i<tokens.size(); i++) {
|
||||
runData.fDataNonMusr.AppendDataTag(TString(tokens[i]));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -3954,18 +3711,12 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
// check if first real data line
|
||||
if (firstData) {
|
||||
// check if data are given just as rows are as labelled columns (see description above)
|
||||
tokens = workStr.Tokenize(",");
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(0));
|
||||
if (!ostr->GetString().IsFloat()) {
|
||||
tokens = PStringUtils::Split(workStr.Data(), ",");
|
||||
if (!TString(tokens[0]).IsFloat()) {
|
||||
labelledFormat = true;
|
||||
} else {
|
||||
labelledFormat = false;
|
||||
}
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
|
||||
// prepare data vector for use
|
||||
PDoubleVector dummy;
|
||||
@@ -3990,15 +3741,13 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
return false;
|
||||
}
|
||||
// split string in tokens
|
||||
tokens = workStr.Tokenize(","); // line has structure: runNo,,, runTitle
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(0));
|
||||
tstr = ostr->GetString();
|
||||
tokens = PStringUtils::Split(workStr.Data(), ","); // line has structure: runNo,,, runTitle
|
||||
tstr = TString(tokens[0]);
|
||||
if (!tstr.IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: runNo,,, runTitle";
|
||||
std::cerr << std::endl << ">> runNo = " << tstr.Data() << ", seems to be not a number.";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
val = tstr.Atof();
|
||||
@@ -4008,35 +3757,30 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
// remove all possible spaces
|
||||
workStr.ReplaceAll(" ", "");
|
||||
// split string in tokens
|
||||
tokens = workStr.Tokenize("=,"); // line has structure: tag = val,err1,err2,
|
||||
if (tokens->GetEntries() < 3) {
|
||||
tokens = PStringUtils::Split(workStr.Data(), "=,"); // line has structure: tag = val,err1,err2,
|
||||
if (tokens.size() < 3) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: tag = val,err1,err2,\\";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(0));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[0]);
|
||||
idx = GetDataTagIndex(tstr, runData.fDataNonMusr.GetDataTags());
|
||||
if (idx == -1) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> data tag error: " << tstr.Data() << " seems not present in the data tag list";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (tokens->GetEntries()) {
|
||||
switch (tokens.size()) {
|
||||
case 3: // tag = val,,,
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[1]);
|
||||
if (!tstr.IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: tag = val,err1,err2,\\";
|
||||
std::cerr << std::endl << ">> val = " << tstr.Data() << ", seems to be not a number.";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
val = tstr.Atof();
|
||||
@@ -4046,27 +3790,23 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
case 4: // tag = val,err,,
|
||||
case 5: // tag = val,err1,err2,
|
||||
// handle val
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(1));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[1]);
|
||||
if (!tstr.IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: tag = val,err1,err2,\\";
|
||||
std::cerr << std::endl << ">> val = " << tstr.Data() << ", seems to be not a number.";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
val = tstr.Atof();
|
||||
runData.fDataNonMusr.AppendSubData(idx, val);
|
||||
// handle err1 (err2 will be ignored for the time being)
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(2));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[2]);
|
||||
if (!tstr.IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: tag = val,err1,err2,\\";
|
||||
std::cerr << std::endl << ">> err1 = " << tstr.Data() << ", seems to be not a number.";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
val = tstr.Atof();
|
||||
@@ -4076,42 +3816,37 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: tag = val,err1,err2,\\";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
} else { // handle row formated data
|
||||
// split string in tokens
|
||||
tokens = workStr.Tokenize(","); // line has structure: val1, err11, err12, ..., valn, errn1, errn2, runNo, , , , runTitle
|
||||
if (tokens->GetEntries() != static_cast<Int_t>(3*runData.fDataNonMusr.GetDataTags()->size()+1)) {
|
||||
tokens = PStringUtils::Split(workStr.Data(), ","); // line has structure: val1, err11, err12, ..., valn, errn1, errn2, runNo, , , , runTitle
|
||||
if (tokens.size() != 3*runData.fDataNonMusr.GetDataTags()->size()+1) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: val1, err11, err12, ..., valn, errn1, errn2, runNo, , , , runTitle";
|
||||
std::cerr << std::endl << ">> found = " << tokens->GetEntries() << " tokens, however expected " << 3*runData.fDataNonMusr.GetDataTags()->size()+1;
|
||||
std::cerr << std::endl << ">> found = " << tokens.size() << " tokens, however expected " << 3*runData.fDataNonMusr.GetDataTags()->size()+1;
|
||||
std::cerr << std::endl << ">> Perhaps there are commas without space inbetween, like 12.3,, 3.2,...";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
// extract data
|
||||
Int_t j=0;
|
||||
for (Int_t i=0; i<tokens->GetEntries()-1; i+=3) {
|
||||
for (UInt_t i=0; i+1<tokens.size(); i+=3) {
|
||||
// handle value
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[i]);
|
||||
if (!tstr.IsFloat()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDBFile **ERROR** in line no " << lineNo << ":";
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: val1, err11, err12, ..., valn, errn1, errn2, runNo, , , , runTitle";
|
||||
std::cerr << std::endl << ">> value=" << tstr.Data() << " seems not to be a number";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
runData.fDataNonMusr.AppendSubData(j, tstr.Atof());
|
||||
|
||||
// handle 1st error if present (2nd will be ignored for now)
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i+1));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[i+1]);
|
||||
if (tstr.IsWhitespace()) {
|
||||
runData.fDataNonMusr.AppendSubErrData(j, 1.0);
|
||||
} else if (tstr.IsFloat()) {
|
||||
@@ -4121,7 +3856,6 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
std::cerr << std::endl << ">> " << workStr.Data();
|
||||
std::cerr << std::endl << ">> Expected db-data line with structure: val1, err11, err12, ..., valn, errn1, errn2, runNo, , , , runTitle";
|
||||
std::cerr << std::endl << ">> error1=" << tstr.Data() << " seems not to be a number";
|
||||
delete tokens;
|
||||
return false;
|
||||
}
|
||||
j++;
|
||||
@@ -4141,10 +3875,6 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
std::cerr << std::endl << ">> number of LABELS found = " << runData.fDataNonMusr.GetLabels()->size();
|
||||
std::cerr << std::endl << ">> number of Data tags found = " << runData.fDataNonMusr.GetDataTags()->size();
|
||||
std::cerr << std::endl << ">> They have to be equal!!";
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4168,12 +3898,6 @@ Bool_t PRunDataHandler::ReadDBFile()
|
||||
}
|
||||
}
|
||||
|
||||
// clean up tokens
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
|
||||
// keep run name
|
||||
runData.SetRunName(fRunName);
|
||||
|
||||
@@ -4218,8 +3942,7 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
|
||||
// variables needed to tokenize strings
|
||||
TString tstr;
|
||||
TObjString *ostr;
|
||||
TObjArray *tokens = nullptr;
|
||||
std::vector<std::string> tokens;
|
||||
|
||||
UInt_t noOfDataSets = 0, noOfEntries = 0;
|
||||
PBoolVector isData;
|
||||
@@ -4239,8 +3962,8 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
if (line.IsWhitespace())
|
||||
continue;
|
||||
|
||||
tokens = line.Tokenize(" \t");
|
||||
if (tokens == nullptr) { // error
|
||||
tokens = PStringUtils::Split(line.Data(), " \t");
|
||||
if (tokens.empty()) { // error
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDatFile **ERROR** couldn't tokenize the line, in lineNo: " << lineNo;
|
||||
std::cerr << std::endl << ">> line: '" << line << "'.";
|
||||
std::cerr << std::endl;
|
||||
@@ -4253,10 +3976,9 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
|
||||
// filter out all data tags: this labels are used in the msr-file to select the proper data set
|
||||
// for the dat-files, label and dataTag are the same
|
||||
noOfEntries = tokens->GetEntries();
|
||||
for (Int_t i=0; i<noOfEntries; i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
tstr = ostr->GetString();
|
||||
noOfEntries = tokens.size();
|
||||
for (UInt_t i=0; i<noOfEntries; i++) {
|
||||
tstr = TString(tokens[i]);
|
||||
if (!tstr.EndsWith("Err", TString::kExact)) {
|
||||
noOfDataSets++;
|
||||
isData.push_back(true);
|
||||
@@ -4274,8 +3996,8 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
std::cerr << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (tokens->GetEntries() != noOfEntries) { // error
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDatFile **ERROR** data set with wrong number of entries: " << tokens->GetEntries() << ", should be " << noOfEntries << ".";
|
||||
if (tokens.size() != noOfEntries) { // error
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDatFile **ERROR** data set with wrong number of entries: " << tokens.size() << ", should be " << noOfEntries << ".";
|
||||
std::cerr << std::endl << ">> in line: " << lineNo;
|
||||
std::cerr << std::endl << ">> line: '" << line << "'.";
|
||||
std::cerr << std::endl;
|
||||
@@ -4285,8 +4007,7 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
UInt_t idx = 0;
|
||||
for (UInt_t i=0; i<noOfEntries; i++) {
|
||||
// 1st: check that entry is indeed a number
|
||||
ostr = dynamic_cast<TObjString*>(tokens->At(i));
|
||||
tstr = ostr->GetString();
|
||||
tstr = TString(tokens[i]);
|
||||
if (!tstr.IsFloat()) { // make sure it is a number
|
||||
std::cerr << std::endl << ">> PRunDataHandler::ReadDatFile **ERROR** data set entry is not a number: " << tstr.Data();
|
||||
std::cerr << std::endl << ">> in line: " << lineNo;
|
||||
@@ -4310,11 +4031,6 @@ Bool_t PRunDataHandler::ReadDatFile()
|
||||
}
|
||||
}
|
||||
}
|
||||
// cleanup
|
||||
if (tokens) {
|
||||
delete tokens;
|
||||
tokens = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
f.close();
|
||||
@@ -6636,8 +6352,6 @@ TString PRunDataHandler::FileNameFromTemplate(TString &fileNameTemplate, Int_t r
|
||||
{
|
||||
TString result("");
|
||||
|
||||
TObjArray *tok=nullptr;
|
||||
TObjString *ostr;
|
||||
TString str;
|
||||
|
||||
// check year string
|
||||
@@ -6660,19 +6374,18 @@ TString PRunDataHandler::FileNameFromTemplate(TString &fileNameTemplate, Int_t r
|
||||
}
|
||||
|
||||
// tokenize template string
|
||||
tok = fileNameTemplate.Tokenize("[]");
|
||||
if (tok == nullptr) {
|
||||
std::vector<std::string> tok = PStringUtils::Split(fileNameTemplate.Data(), "[]");
|
||||
if (tok.empty()) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::FileNameFromTemplate: **ERROR** couldn't tokenize template!" << std::endl;
|
||||
return result;
|
||||
}
|
||||
if (tok->GetEntries()==1) {
|
||||
if (tok.size()==1) {
|
||||
std::cerr << std::endl << ">> PRunDataHandler::FileNameFromTemplate: **WARNING** template without tags." << std::endl;
|
||||
}
|
||||
|
||||
// go through the tokens and generate the result string
|
||||
for (Int_t i=0; i<tok->GetEntries(); i++) {
|
||||
ostr = dynamic_cast<TObjString*>(tok->At(i));
|
||||
str = ostr->GetString();
|
||||
for (UInt_t i=0; i<tok.size(); i++) {
|
||||
str = TString(tok[i]);
|
||||
|
||||
// check tokens
|
||||
if (!str.CompareTo("yy", TString::kExact)) { // check for 'yy'
|
||||
@@ -6700,10 +6413,6 @@ TString PRunDataHandler::FileNameFromTemplate(TString &fileNameTemplate, Int_t r
|
||||
}
|
||||
}
|
||||
|
||||
// clean up
|
||||
if (tok)
|
||||
delete tok;
|
||||
|
||||
// everything fine here
|
||||
ok = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user