improved ascii export (MUSR-87,MUSR-92). Produce now two files, one for the data and one for the theory. There are still some issues concerning root ownership which sometimes result in crashes at the exit of the musrview. db export still needs to be done.

This commit is contained in:
nemu 2009-10-22 11:07:50 +00:00
parent 9af5f415f7
commit fe71e7b9c8
2 changed files with 290 additions and 195 deletions

View File

@ -2427,11 +2427,19 @@ void PMusrCanvas::PlotData()
// add all data to fMultiGraphData
for (unsigned int i=0; i<fNonMusrData.size(); i++) {
fMultiGraphData->Add(fNonMusrData[i].data, "p");
// the next two lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleaing
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].data));
fMultiGraphData->Add(ge, "p");
}
// add all the theory to fMultiGraphData
for (unsigned int i=0; i<fNonMusrData.size(); i++) {
fMultiGraphData->Add(fNonMusrData[i].theory, "l");
// the next two lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleaing
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].theory));
fMultiGraphData->Add(ge, "l");
}
}
@ -2535,7 +2543,11 @@ void PMusrCanvas::PlotDifference()
// add all diff data to fMultiGraphDiff
for (unsigned int i=0; i<fNonMusrData.size(); i++) {
fMultiGraphDiff->Add(fNonMusrData[i].diff, "p");
// the next two lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleaing
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].diff));
fMultiGraphDiff->Add(ge, "p");
}
}
@ -3269,12 +3281,20 @@ void PMusrCanvas::SaveDataAscii()
// in order to handle names with "." correctly this slightly odd data-filename generation
TObjArray *tokens = fMsrHandler->GetFileName().Tokenize(".");
TObjString *ostr;
TString str = TString("");
TString str;
TString flnData = TString("");
TString flnTheo = TString("");
for (int i=0; i<tokens->GetEntries()-1; i++) {
ostr = dynamic_cast<TObjString*>(tokens->At(i));
str += ostr->GetString() + TString(".");
flnData += ostr->GetString() + TString(".");
flnTheo += ostr->GetString() + TString(".");
}
str += "data";
if (!fDifferenceView) {
flnData += "data.ascii";
} else {
flnData += "diff.ascii";
}
flnTheo += "theo.ascii";
if (tokens) {
delete tokens;
@ -3282,20 +3302,29 @@ void PMusrCanvas::SaveDataAscii()
}
// open file
ofstream fout;
ofstream foutData;
ofstream foutTheo;
// open mlog-file
fout.open(str.Data(), iostream::out);
if (!fout.is_open()) {
cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << str.Data() << " for writing." << endl;
// open output data-file
foutData.open(flnData.Data(), iostream::out);
if (!foutData.is_open()) {
cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << flnData.Data() << " for writing." << endl;
return;
}
if (!fDifferenceView) {
// open output theory-file
foutTheo.open(flnTheo.Data(), iostream::out);
if (!foutTheo.is_open()) {
cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << flnTheo.Data() << " for writing." << endl;
return;
}
}
// extract data
Double_t time, xval, yval;
Int_t xminBin;
Int_t xmaxBin;
Int_t theoBin;
Double_t xmin;
Double_t xmax;
switch (fPlotType) {
@ -3306,31 +3335,27 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) {
case PV_DATA:
// write header
fout << endl << "% time (us), ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "Diff" << j << ", eDiff" << j << ", ";
foutData << "% time (us)";
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", Diff" << j << ", eDiff" << j;
}
fout << "Diff" << fData.size()-1 << ", eDiff" << fData.size()-1;
fout << endl;
foutData << endl;
// get current x-range
xminBin = fData[0].diff->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].diff->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].diff->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].diff->GetXaxis()->GetBinCenter(xmaxBin);
xminBin = fHistoFrame->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fHistoFrame->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fHistoFrame->GetXaxis()->GetBinCenter(xminBin);
xmax = fHistoFrame->GetXaxis()->GetBinCenter(xmaxBin);
// get difference data
for (int i=1; i<fData[0].diff->GetNbinsX()-1; i++) {
time = fData[0].diff->GetBinCenter(i); // get time
if ((time < xmin) || (time > xmax))
continue;
fout << time << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].diff->GetBinContent(i) << ", ";
fout << fData[j].diff->GetBinError(i) << ", ";
foutData << time;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].diff->GetBinContent(i);
foutData << ", " << fData[j].diff->GetBinError(i);
}
// write last data set
fout << fData[fData.size()-1].diff->GetBinContent(i) << ", ";
fout << fData[fData.size()-1].diff->GetBinError(i);
fout << endl;
foutData << endl;
}
break;
case PV_FOURIER_REAL:
@ -3350,35 +3375,51 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) {
case PV_DATA:
// write header
fout << endl << "% time (us), ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "Data" << j << ", eData" << j << ", Theo" << j << ", ";
foutData << endl << "% timeData (us)";
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", Data" << j << ", eData" << j;
}
fout << "Data" << fData.size()-1 << ", eData" << fData.size()-1 << ", Theo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << ", timeTheo (us)";
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", Theo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].data->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].data->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].data->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].data->GetXaxis()->GetBinCenter(xmaxBin);
// get data
xminBin = fHistoFrame->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fHistoFrame->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fHistoFrame->GetXaxis()->GetBinCenter(xminBin);
xmax = fHistoFrame->GetXaxis()->GetBinCenter(xmaxBin);
// write data
for (int i=1; i<fData[0].data->GetNbinsX()-1; i++) {
time = fData[0].data->GetBinCenter(i); // get time
if ((time < xmin) || (time > xmax))
continue;
fout << time << ", ";
foutData << time << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].data->GetBinContent(i) << ", ";
fout << fData[j].data->GetBinError(i) << ", ";
theoBin = fData[j].theory->FindBin(time);
fout << fData[j].theory->GetBinContent(theoBin) << ", ";
foutData << fData[j].data->GetBinContent(i) << ", ";
foutData << fData[j].data->GetBinError(i) << ", ";
}
// write last data set
fout << fData[fData.size()-1].data->GetBinContent(i) << ", ";
fout << fData[fData.size()-1].data->GetBinError(i) << ", ";
theoBin = fData[fData.size()-1].theory->FindBin(time);
fout << fData[fData.size()-1].theory->GetBinContent(theoBin);
fout << endl;
foutData << fData[fData.size()-1].data->GetBinContent(i) << ", ";
foutData << fData[fData.size()-1].data->GetBinError(i) << ", ";
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theory->GetNbinsX()-1; i++) {
time = fData[0].theory->GetBinCenter(i); // get time
if ((time < xmin) || (time > xmax))
continue;
foutTheo << time << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
foutTheo << fData[j].theory->GetBinContent(i) << ", ";
}
// write last data set
foutTheo << fData[fData.size()-1].data->GetBinContent(i) << ", ";
foutTheo << endl;
}
break;
case PV_FOURIER_REAL:
@ -3398,34 +3439,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????");
break;
}
str += TString(", ");
fout << endl << str.Data();
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "RealFourierData" << j << ", RealFourierTheo" << j << ", ";
foutData << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", RealFourierData" << j;
}
fout << "RealFourierData" << fData.size()-1 << ", RealFourierTheo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", RealFourierTheo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].dataFourierRe->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].dataFourierRe->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].dataFourierRe->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierRe->FindBin(xval);
fout << fData[j].theoryFourierRe->GetBinContent(theoBin) << ", ";
foutData << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].dataFourierRe->GetBinContent(i);
}
// write last data set
fout << fData[fData.size()-1].dataFourierRe->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierRe->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierRe->GetBinContent(theoBin);
fout << endl;
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theoryFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].theoryFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", " << fData[j].theoryFourierRe->GetBinContent(i);
}
foutTheo << endl;
}
break;
case PV_FOURIER_IMAG:
@ -3445,34 +3498,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????");
break;
}
str += TString(", ");
fout << endl << str.Data();
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "ImagFourierData" << j << ", ImagFourierTheo" << j << ", ";
foutData << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", ImagFourierData" << j;
}
fout << "ImagFourierData" << fData.size()-1 << ", ImagFourierTheo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", ImagFourierTheo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].dataFourierIm->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].dataFourierIm->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierIm->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierIm->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].dataFourierIm->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierIm->FindBin(xval);
fout << fData[j].theoryFourierIm->GetBinContent(theoBin) << ", ";
foutData << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].dataFourierIm->GetBinContent(i);
}
// write last data set
fout << fData[fData.size()-1].dataFourierIm->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierIm->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierIm->GetBinContent(theoBin);
fout << endl;
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theoryFourierIm->GetNbinsX()-1; i++) {
xval = fData[0].theoryFourierIm->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", " << fData[j].theoryFourierIm->GetBinContent(i);
}
foutTheo << endl;
}
break;
case PV_FOURIER_REAL_AND_IMAG:
@ -3492,42 +3557,48 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????");
break;
}
str += TString(", ");
fout << endl << str.Data();
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "RealFourierData" << j << ", RealFourierTheo" << j << ", ";
fout << "ImagFourierData" << j << ", ImagFourierTheo" << j << ", ";
foutData << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", RealFourierData" << j << ", ImagFourierData" << j;
}
fout << "RealFourierData" << fData.size()-1 << ", RealFourierTheo" << fData.size()-1 << ", ";
fout << "ImagFourierData" << fData.size()-1 << ", ImagFourierTheo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", RealFourierTheo" << j << ", ImagFourierTheo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].dataFourierRe->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].dataFourierRe->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].dataFourierRe->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierRe->FindBin(xval);
fout << fData[j].theoryFourierRe->GetBinContent(theoBin) << ", ";
fout << fData[j].dataFourierIm->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierIm->FindBin(xval);
fout << fData[j].theoryFourierIm->GetBinContent(theoBin) << ", ";
foutData << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].dataFourierRe->GetBinContent(i);
foutData << ", " << fData[j].dataFourierIm->GetBinContent(i);
}
// write last data set
fout << fData[fData.size()-1].dataFourierRe->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierRe->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierRe->GetBinContent(theoBin) << ", ";
fout << fData[fData.size()-1].dataFourierIm->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierIm->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierIm->GetBinContent(theoBin);
fout << endl;
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theoryFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].theoryFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", " << fData[j].theoryFourierRe->GetBinContent(i);
foutTheo << ", " << fData[j].theoryFourierIm->GetBinContent(i);
}
foutTheo << endl;
}
break;
case PV_FOURIER_PWR:
@ -3547,34 +3618,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????");
break;
}
str += TString(", ");
fout << endl << str.Data();
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "PwrFourierData" << j << ", PwrFourierTheo" << j << ", ";
foutData << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", PwrFourierData" << j;
}
fout << "PwrFourierData" << fData.size()-1 << ", PwrFourierTheo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", PwrFourierTheo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].dataFourierPwr->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].dataFourierPwr->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierPwr->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierPwr->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].dataFourierPwr->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierPwr->FindBin(xval);
fout << fData[j].theoryFourierPwr->GetBinContent(theoBin) << ", ";
foutData << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].dataFourierPwr->GetBinContent(i);
}
// write last data set
fout << fData[fData.size()-1].dataFourierPwr->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierPwr->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierPwr->GetBinContent(theoBin);
fout << endl;
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theoryFourierPwr->GetNbinsX()-1; i++) {
xval = fData[0].theoryFourierPwr->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", " << fData[j].theoryFourierPwr->GetBinContent(i);
}
foutTheo << endl;
}
break;
case PV_FOURIER_PHASE:
@ -3594,34 +3677,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????");
break;
}
str += TString(", ");
fout << endl << str.Data();
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << "PhaseFourierData" << j << ", PhaseFourierTheo" << j << ", ";
foutData << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", PhaseFourierData" << j;
}
fout << "PhaseFourierData" << fData.size()-1 << ", PhaseFourierTheo" << fData.size()-1;
fout << endl;
foutData << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", PhaseFourierTheo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fData[0].dataFourierPhase->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].dataFourierPhase->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierPhase->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierPhase->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].dataFourierPhase->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierPhase->FindBin(xval);
fout << fData[j].theoryFourierPhase->GetBinContent(theoBin) << ", ";
foutData << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutData << ", " << fData[j].dataFourierPhase->GetBinContent(i);
}
// write last data set
fout << fData[fData.size()-1].dataFourierPhase->GetBinContent(i) << ", ";
theoBin = fData[fData.size()-1].theoryFourierPhase->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierPhase->GetBinContent(theoBin);
fout << endl;
foutData << endl;
}
// write theory
for (int i=1; i<fData[0].theoryFourierPhase->GetNbinsX()-1; i++) {
xval = fData[0].theoryFourierPhase->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", " << fData[j].theoryFourierPhase->GetBinContent(i);
}
foutTheo << endl;
}
break;
default:
@ -3634,34 +3729,31 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) {
case PV_DATA:
// write header
fout << "% " << fNonMusrData[0].diff->GetXaxis()->GetTitle() << ", ";
foutData << "% " << fNonMusrData[0].diff->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) {
fout << "Diff" << j << ", eDiff" << j << ", ";
foutData << "Diff" << j << ", eDiff" << j << ", ";
}
fout << "Diff" << fNonMusrData.size()-1 << ", eDiff" << fNonMusrData.size()-1;
fout << endl;
// write data
foutData << "Diff" << fNonMusrData.size()-1 << ", eDiff" << fNonMusrData.size()-1;
foutData << endl;
// get current x-range
xminBin = fNonMusrData[0].diff->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fNonMusrData[0].diff->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fNonMusrData[0].diff->GetXaxis()->GetBinCenter(xminBin);
xmax = fNonMusrData[0].diff->GetXaxis()->GetBinCenter(xmaxBin);
// get data
xminBin = fMultiGraphDiff->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fMultiGraphDiff->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fMultiGraphDiff->GetXaxis()->GetBinCenter(xminBin);
xmax = fMultiGraphDiff->GetXaxis()->GetBinCenter(xmaxBin);
// write data
for (int i=0; i<fNonMusrData[0].diff->GetN(); i++) {
fNonMusrData[0].diff->GetPoint(i,xval,yval); // get values
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) {
foutData << xval;
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fNonMusrData[j].diff->GetPoint(i,xval,yval); // get values
fout << yval << ", ";
fout << fNonMusrData[j].diff->GetErrorY(i) << ", ";
foutData << ", " << yval;
foutData << ", " << fNonMusrData[j].diff->GetErrorY(i);
}
// write last data set
fNonMusrData[fNonMusrData.size()-1].diff->GetPoint(i,xval,yval); // get values
fout << yval << ", ";
fout << fNonMusrData[fNonMusrData.size()-1].diff->GetErrorY(i);
fout << endl;
foutData << endl;
}
break;
case PV_FOURIER_REAL:
@ -3681,40 +3773,49 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) {
case PV_DATA:
// write header
fout << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) {
fout << "Data" << j << ", eData" << j << ", Theo" << j << ", ";
foutData << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
foutData << ", Data" << j << ", eData" << j;
}
fout << "Data" << fNonMusrData.size()-1 << ", eData" << fNonMusrData.size()-1 << ", Theo" << fNonMusrData.size()-1;
fout << endl;
// write data
foutData << endl;
foutTheo << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
foutTheo << ", Theo" << j;
}
foutTheo << endl;
// get current x-range
xminBin = fNonMusrData[0].data->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fNonMusrData[0].data->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xminBin);
xmax = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xmaxBin);
// get data
xminBin = fMultiGraphData->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fMultiGraphData->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fMultiGraphData->GetXaxis()->GetBinCenter(xminBin);
xmax = fMultiGraphData->GetXaxis()->GetBinCenter(xmaxBin);
// write data
for (int i=0; i<fNonMusrData[0].data->GetN(); i++) {
fNonMusrData[0].data->GetPoint(i,xval,yval); // get values
if ((xval < xmin) || (xval > xmax))
continue;
fout << xval << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) {
foutData << xval;
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fNonMusrData[j].data->GetPoint(i,xval,yval); // get values
fout << yval << ", ";
fout << fNonMusrData[j].data->GetErrorY(i) << ", ";
theoBin = FindBin(xval, fNonMusrData[j].theory);
fNonMusrData[j].theory->GetPoint(theoBin,xval,yval); // get values
fout << yval << ", ";
foutData << ", " << yval;
foutData << ", " << fNonMusrData[j].data->GetErrorY(i);
}
// write last data set
fNonMusrData[fNonMusrData.size()-1].data->GetPoint(i,xval,yval); // get values
fout << yval << ", ";
fout << fNonMusrData[fNonMusrData.size()-1].data->GetErrorY(i) << ", ";
theoBin = FindBin(xval, fNonMusrData[fNonMusrData.size()-1].theory);
fNonMusrData[fNonMusrData.size()-1].theory->GetPoint(theoBin,xval,yval); // get values
fout << yval;
fout << endl;
foutData << endl;
}
// write theory
for (int i=0; i<fNonMusrData[0].theory->GetN(); i++) {
fNonMusrData[0].theory->GetPoint(i,xval,yval); // get values
if ((xval < xmin) || (xval > xmax))
continue;
foutTheo << xval;
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fNonMusrData[j].theory->GetPoint(i,xval,yval); // get values
foutTheo << ", " << yval;
}
foutTheo << endl;
}
break;
case PV_FOURIER_REAL:
@ -3737,7 +3838,8 @@ void PMusrCanvas::SaveDataAscii()
}
// close file
fout.close();
foutData.close();
foutTheo.close();
cout << endl << ">> Data windows saved in ascii format ..." << endl;
}

View File

@ -309,24 +309,17 @@ cout << endl;
app.Run(true); // true needed that Run will return after quit so that cleanup works
// clean up
//cout << endl << "clean up canvas vector ...";
char canvasName[32];
for (unsigned int i=0; i<canvasVector.size(); i++) {
// check if canvas is still there before calling the destructor **TO BE DONE**
sprintf(canvasName, "fMainCanvas%d", i);
//cout << endl << ">> canvasName=" << canvasName << ", canvasVector[" << i << "]=" << canvasVector[i];
if (gROOT->GetListOfCanvases()->FindObject(canvasName) != 0) {
//cout << endl << ">> canvasName=" << canvasName << ", found ...";
//cout << endl;
canvasVector[i]->~PMusrCanvas();
} else {
//cout << endl << ">> canvasName=" << canvasName << ", NOT found ...";
//cout << endl;
}
}
canvasVector.empty();
}
//cout << endl;
// clean up
plotList.clear();