improved handling for musrt0

This commit is contained in:
nemu 2009-11-11 12:42:55 +00:00
parent d58d7f36e1
commit c2b898a246
3 changed files with 100 additions and 9 deletions

View File

@ -315,13 +315,57 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
Int_t runNo = -1, addRunNo = 0;
Int_t plotNo = -1;
string line;
TString str, sstr, *pstr;
TString logFileName, str, sstr, *pstr;
TObjArray *tokens = 0;
TObjString *ostr = 0;
Bool_t found = false;
Bool_t statisticBlockFound = false;
Bool_t partialStatisticBlockFound = true;
PBoolVector t0TagMissing; // needed for proper musrt0 handling
for (UInt_t i=0; i<fRuns.size(); i++) {
t0TagMissing.push_back(true);
}
PBoolVector backgroundTagMissing; // needed for proper musrt0 handling
for (UInt_t i=0; i<fRuns.size(); i++) {
backgroundTagMissing.push_back(true);
}
PBoolVector dataTagMissing; // needed for proper musrt0 handling
for (UInt_t i=0; i<fRuns.size(); i++) {
dataTagMissing.push_back(true);
}
ifstream fin;
ofstream fout;
// check msr-file for any missing tags first
// open msr-file for reading
fin.open(fFileName.Data(), iostream::in);
if (!fin.is_open()) {
return PMUSR_MSR_LOG_FILE_WRITE_ERROR;
}
while (!fin.eof()) {
// read a line
getline(fin, line);
str = line.c_str();
if (str.BeginsWith("RUN")) {
runNo++;
continue;
}
if (runNo == -1)
continue;
if (str.BeginsWith("t0"))
t0TagMissing[runNo] = false;
else if (str.BeginsWith("background"))
backgroundTagMissing[runNo] = false;
else if (str.BeginsWith("data"))
dataTagMissing[runNo] = false;
}
fin.close();
// construct log file name
// first find the last '.' in the filename
Int_t idx = -1;
@ -332,12 +376,9 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
return PMUSR_MSR_SYNTAX_ERROR;
// remove extension
str = fFileName;
str.Remove(idx+1);
str += "mlog";
ifstream fin;
ofstream fout;
logFileName = fFileName;
logFileName.Remove(idx+1);
logFileName += "mlog";
// open msr-file for reading
fin.open(fFileName.Data(), iostream::in);
@ -346,12 +387,14 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
}
// open mlog-file for writing
fout.open(str.Data(), iostream::out);
fout.open(logFileName.Data(), iostream::out);
if (!fout.is_open()) {
return PMUSR_MSR_LOG_FILE_WRITE_ERROR;
}
tag = MSR_TAG_TITLE;
lineNo = 0;
runNo = -1;
// read msr-file
while (!fin.eof()) {
@ -645,6 +688,7 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
}
fout << endl;
} else if (sstr.BeginsWith("background")) {
backgroundTagMissing[runNo] = false;
fout.width(16);
fout << left << "background";
for (UInt_t j=0; j<fRuns[runNo].GetBkgRangeSize(); j++) {
@ -653,6 +697,7 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
}
fout << endl;
} else if (sstr.BeginsWith("data")) {
dataTagMissing[runNo] = false;
fout.width(16);
fout << left << "data";
for (UInt_t j=0; j<fRuns[runNo].GetDataRangeSize(); j++) {
@ -661,6 +706,7 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
}
fout << endl;
} else if (sstr.BeginsWith("t0")) {
t0TagMissing[runNo] = false;
fout.width(16);
fout << left << "t0";
for (UInt_t j=0; j<fRuns[runNo].GetT0Size(); j++) {
@ -690,6 +736,41 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
fout << endl;
}
} else if (sstr.BeginsWith("fit")) {
// check if missing t0/background/data tag are present eventhough the values are present, if so write these data values
if (t0TagMissing[runNo]) {
if (fRuns[runNo].GetT0Size() > 0) {
fout.width(16);
fout << left << "t0";
for (UInt_t j=0; j<fRuns[runNo].GetT0Size(); j++) {
fout.width(8);
fout << left << fRuns[runNo].GetT0(j);
}
fout << endl;
}
}
if (backgroundTagMissing[runNo]) {
if (fRuns[runNo].GetBkgRangeSize() > 0) {
fout.width(16);
fout << left << "background";
for (UInt_t j=0; j<fRuns[runNo].GetBkgRangeSize(); j++) {
fout.width(8);
fout << left << fRuns[runNo].GetBkgRange(j);
}
fout << endl;
}
}
if (dataTagMissing[runNo]) {
if (fRuns[runNo].GetDataRangeSize() > 0) {
fout.width(16);
fout << left << "data";
for (UInt_t j=0; j<fRuns[runNo].GetDataRangeSize(); j++) {
fout.width(8);
fout << left << fRuns[runNo].GetDataRange(j);
}
fout << endl;
}
}
// write fit range line
fout.width(16);
fout << left << "fit";
for (UInt_t j=0; j<2; j++) {
@ -973,6 +1054,11 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
fout.close();
fin.close();
// clean up
t0TagMissing.clear();
backgroundTagMissing.clear();
dataTagMissing.clear();
return PMUSR_SUCCESS;
}

View File

@ -129,7 +129,6 @@ class PMsrHandler
virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run);
// virtual void InitRunParameterStructure(PMsrRunStructure &param);
virtual void InitFourierParameterStructure(PMsrFourierStructure &fourier);
virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no);

View File

@ -116,6 +116,12 @@ using namespace std;
#define FOURIER_PLOT_POWER 4
#define FOURIER_PLOT_PHASE 5
//-------------------------------------------------------------
/**
* <p> typedef to make to code more readable.
*/
typedef vector<Bool_t> PBoolVector;
//-------------------------------------------------------------
/**
* <p> typedef to make to code more readable.