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 // add all data to fMultiGraphData
for (unsigned int i=0; i<fNonMusrData.size(); i++) { 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 // add all the theory to fMultiGraphData
for (unsigned int i=0; i<fNonMusrData.size(); i++) { 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 // add all diff data to fMultiGraphDiff
for (unsigned int i=0; i<fNonMusrData.size(); i++) { 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 // in order to handle names with "." correctly this slightly odd data-filename generation
TObjArray *tokens = fMsrHandler->GetFileName().Tokenize("."); TObjArray *tokens = fMsrHandler->GetFileName().Tokenize(".");
TObjString *ostr; TObjString *ostr;
TString str = TString(""); TString str;
TString flnData = TString("");
TString flnTheo = TString("");
for (int i=0; i<tokens->GetEntries()-1; i++) { for (int i=0; i<tokens->GetEntries()-1; i++) {
ostr = dynamic_cast<TObjString*>(tokens->At(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) { if (tokens) {
delete tokens; delete tokens;
@ -3282,20 +3302,29 @@ void PMusrCanvas::SaveDataAscii()
} }
// open file // open file
ofstream fout; ofstream foutData;
ofstream foutTheo;
// open mlog-file // open output data-file
fout.open(str.Data(), iostream::out); foutData.open(flnData.Data(), iostream::out);
if (!fout.is_open()) { if (!foutData.is_open()) {
cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << str.Data() << " for writing." << endl; cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << flnData.Data() << " for writing." << endl;
return; 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 // extract data
Double_t time, xval, yval; Double_t time, xval, yval;
Int_t xminBin; Int_t xminBin;
Int_t xmaxBin; Int_t xmaxBin;
Int_t theoBin;
Double_t xmin; Double_t xmin;
Double_t xmax; Double_t xmax;
switch (fPlotType) { switch (fPlotType) {
@ -3306,31 +3335,27 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) { switch (fCurrentPlotView) {
case PV_DATA: case PV_DATA:
// write header // write header
fout << endl << "% time (us), "; foutData << "% time (us)";
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << "Diff" << j << ", eDiff" << j << ", "; foutData << ", Diff" << j << ", eDiff" << j;
} }
fout << "Diff" << fData.size()-1 << ", eDiff" << fData.size()-1; foutData << endl;
fout << endl;
// get current x-range // get current x-range
xminBin = fData[0].diff->GetXaxis()->GetFirst(); // first bin of the zoomed range xminBin = fHistoFrame->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].diff->GetXaxis()->GetLast(); // last bin of the zoomed range xmaxBin = fHistoFrame->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].diff->GetXaxis()->GetBinCenter(xminBin); xmin = fHistoFrame->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].diff->GetXaxis()->GetBinCenter(xmaxBin); xmax = fHistoFrame->GetXaxis()->GetBinCenter(xmaxBin);
// get difference data // get difference data
for (int i=1; i<fData[0].diff->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].diff->GetNbinsX()-1; i++) {
time = fData[0].diff->GetBinCenter(i); // get time time = fData[0].diff->GetBinCenter(i); // get time
if ((time < xmin) || (time > xmax)) if ((time < xmin) || (time > xmax))
continue; continue;
fout << time << ", "; foutData << time;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].diff->GetBinContent(i) << ", "; foutData << ", " << fData[j].diff->GetBinContent(i);
fout << fData[j].diff->GetBinError(i) << ", "; foutData << ", " << fData[j].diff->GetBinError(i);
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].diff->GetBinContent(i) << ", ";
fout << fData[fData.size()-1].diff->GetBinError(i);
fout << endl;
} }
break; break;
case PV_FOURIER_REAL: case PV_FOURIER_REAL:
@ -3350,35 +3375,51 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) { switch (fCurrentPlotView) {
case PV_DATA: case PV_DATA:
// write header // write header
fout << endl << "% time (us), "; foutData << endl << "% timeData (us)";
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << "Data" << j << ", eData" << j << ", Theo" << j << ", "; foutData << ", Data" << j << ", eData" << j;
} }
fout << "Data" << fData.size()-1 << ", eData" << fData.size()-1 << ", Theo" << fData.size()-1; foutData << endl;
fout << endl;
foutTheo << ", timeTheo (us)";
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", Theo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].data->GetXaxis()->GetFirst(); // first bin of the zoomed range xminBin = fHistoFrame->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fData[0].data->GetXaxis()->GetLast(); // last bin of the zoomed range xmaxBin = fHistoFrame->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].data->GetXaxis()->GetBinCenter(xminBin); xmin = fHistoFrame->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].data->GetXaxis()->GetBinCenter(xmaxBin); xmax = fHistoFrame->GetXaxis()->GetBinCenter(xmaxBin);
// get data // write data
for (int i=1; i<fData[0].data->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].data->GetNbinsX()-1; i++) {
time = fData[0].data->GetBinCenter(i); // get time time = fData[0].data->GetBinCenter(i); // get time
if ((time < xmin) || (time > xmax)) if ((time < xmin) || (time > xmax))
continue; continue;
fout << time << ", "; foutData << time << ", ";
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size()-1; j++) {
fout << fData[j].data->GetBinContent(i) << ", "; foutData << fData[j].data->GetBinContent(i) << ", ";
fout << fData[j].data->GetBinError(i) << ", "; foutData << fData[j].data->GetBinError(i) << ", ";
theoBin = fData[j].theory->FindBin(time);
fout << fData[j].theory->GetBinContent(theoBin) << ", ";
} }
// write last data set // write last data set
fout << fData[fData.size()-1].data->GetBinContent(i) << ", "; foutData << fData[fData.size()-1].data->GetBinContent(i) << ", ";
fout << fData[fData.size()-1].data->GetBinError(i) << ", "; foutData << fData[fData.size()-1].data->GetBinError(i) << ", ";
theoBin = fData[fData.size()-1].theory->FindBin(time); foutData << endl;
fout << fData[fData.size()-1].theory->GetBinContent(theoBin); }
fout << 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; break;
case PV_FOURIER_REAL: case PV_FOURIER_REAL:
@ -3398,34 +3439,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????"); str += TString(" ????");
break; break;
} }
str += TString(", "); foutData << str.Data();
fout << endl << str.Data(); for (unsigned int j=0; j<fData.size(); j++) {
for (unsigned int j=0; j<fData.size()-1; j++) { foutData << ", RealFourierData" << j;
fout << "RealFourierData" << j << ", RealFourierTheo" << j << ", ";
} }
fout << "RealFourierData" << fData.size()-1 << ", RealFourierTheo" << fData.size()-1; foutData << endl;
fout << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", RealFourierTheo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].dataFourierRe->GetXaxis()->GetFirst(); // first bin of the zoomed 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 xmaxBin = fData[0].dataFourierRe->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin); xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin); xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].dataFourierRe->GetBinContent(i) << ", "; foutData << ", " << fData[j].dataFourierRe->GetBinContent(i);
theoBin = fData[j].theoryFourierRe->FindBin(xval);
fout << fData[j].theoryFourierRe->GetBinContent(theoBin) << ", ";
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].dataFourierRe->GetBinContent(i) << ", "; }
theoBin = fData[fData.size()-1].theoryFourierRe->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierRe->GetBinContent(theoBin); // write theory
fout << endl; 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; break;
case PV_FOURIER_IMAG: case PV_FOURIER_IMAG:
@ -3445,34 +3498,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????"); str += TString(" ????");
break; break;
} }
str += TString(", "); foutData << str.Data();
fout << endl << str.Data(); for (unsigned int j=0; j<fData.size(); j++) {
for (unsigned int j=0; j<fData.size()-1; j++) { foutData << ", ImagFourierData" << j;
fout << "ImagFourierData" << j << ", ImagFourierTheo" << j << ", ";
} }
fout << "ImagFourierData" << fData.size()-1 << ", ImagFourierTheo" << fData.size()-1; foutData << endl;
fout << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", ImagFourierTheo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].dataFourierIm->GetXaxis()->GetFirst(); // first bin of the zoomed 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 xmaxBin = fData[0].dataFourierIm->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xminBin); xmin = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xmaxBin); xmax = fData[0].dataFourierIm->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierIm->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].dataFourierIm->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierIm->GetBinCenter(i); // get x-unit xval = fData[0].dataFourierIm->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].dataFourierIm->GetBinContent(i) << ", "; foutData << ", " << fData[j].dataFourierIm->GetBinContent(i);
theoBin = fData[j].theoryFourierIm->FindBin(xval);
fout << fData[j].theoryFourierIm->GetBinContent(theoBin) << ", ";
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].dataFourierIm->GetBinContent(i) << ", "; }
theoBin = fData[fData.size()-1].theoryFourierIm->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierIm->GetBinContent(theoBin); // write theory
fout << endl; 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; break;
case PV_FOURIER_REAL_AND_IMAG: case PV_FOURIER_REAL_AND_IMAG:
@ -3492,42 +3557,48 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????"); str += TString(" ????");
break; break;
} }
str += TString(", "); foutData << str.Data();
fout << endl << str.Data(); for (unsigned int j=0; j<fData.size(); j++) {
for (unsigned int j=0; j<fData.size()-1; j++) { foutData << ", RealFourierData" << j << ", ImagFourierData" << j;
fout << "RealFourierData" << j << ", RealFourierTheo" << j << ", ";
fout << "ImagFourierData" << j << ", ImagFourierTheo" << j << ", ";
} }
fout << "RealFourierData" << fData.size()-1 << ", RealFourierTheo" << fData.size()-1 << ", "; foutData << endl;
fout << "ImagFourierData" << fData.size()-1 << ", ImagFourierTheo" << fData.size()-1;
fout << endl; foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", RealFourierTheo" << j << ", ImagFourierTheo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].dataFourierRe->GetXaxis()->GetFirst(); // first bin of the zoomed 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 xmaxBin = fData[0].dataFourierRe->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin); xmin = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin); xmax = fData[0].dataFourierRe->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].dataFourierRe->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit xval = fData[0].dataFourierRe->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].dataFourierRe->GetBinContent(i) << ", "; foutData << ", " << fData[j].dataFourierRe->GetBinContent(i);
theoBin = fData[j].theoryFourierRe->FindBin(xval); foutData << ", " << fData[j].dataFourierIm->GetBinContent(i);
fout << fData[j].theoryFourierRe->GetBinContent(theoBin) << ", ";
fout << fData[j].dataFourierIm->GetBinContent(i) << ", ";
theoBin = fData[j].theoryFourierIm->FindBin(xval);
fout << fData[j].theoryFourierIm->GetBinContent(theoBin) << ", ";
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].dataFourierRe->GetBinContent(i) << ", "; }
theoBin = fData[fData.size()-1].theoryFourierRe->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierRe->GetBinContent(theoBin) << ", "; // write theory
fout << fData[fData.size()-1].dataFourierIm->GetBinContent(i) << ", "; for (int i=1; i<fData[0].theoryFourierRe->GetNbinsX()-1; i++) {
theoBin = fData[fData.size()-1].theoryFourierIm->FindBin(xval); xval = fData[0].theoryFourierRe->GetBinCenter(i); // get x-unit
fout << fData[fData.size()-1].theoryFourierIm->GetBinContent(theoBin); if ((xval < xmin) || (xval > xmax))
fout << endl; 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; break;
case PV_FOURIER_PWR: case PV_FOURIER_PWR:
@ -3547,34 +3618,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????"); str += TString(" ????");
break; break;
} }
str += TString(", "); foutData << str.Data();
fout << endl << str.Data(); for (unsigned int j=0; j<fData.size(); j++) {
for (unsigned int j=0; j<fData.size()-1; j++) { foutData << ", PwrFourierData" << j;
fout << "PwrFourierData" << j << ", PwrFourierTheo" << j << ", ";
} }
fout << "PwrFourierData" << fData.size()-1 << ", PwrFourierTheo" << fData.size()-1; foutData << endl;
fout << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", PwrFourierTheo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].dataFourierPwr->GetXaxis()->GetFirst(); // first bin of the zoomed 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 xmaxBin = fData[0].dataFourierPwr->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xminBin); xmin = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xmaxBin); xmax = fData[0].dataFourierPwr->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierPwr->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].dataFourierPwr->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierPwr->GetBinCenter(i); // get x-unit xval = fData[0].dataFourierPwr->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].dataFourierPwr->GetBinContent(i) << ", "; foutData << ", " << fData[j].dataFourierPwr->GetBinContent(i);
theoBin = fData[j].theoryFourierPwr->FindBin(xval);
fout << fData[j].theoryFourierPwr->GetBinContent(theoBin) << ", ";
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].dataFourierPwr->GetBinContent(i) << ", "; }
theoBin = fData[fData.size()-1].theoryFourierPwr->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierPwr->GetBinContent(theoBin); // write theory
fout << endl; 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; break;
case PV_FOURIER_PHASE: case PV_FOURIER_PHASE:
@ -3594,34 +3677,46 @@ void PMusrCanvas::SaveDataAscii()
str += TString(" ????"); str += TString(" ????");
break; break;
} }
str += TString(", "); foutData << str.Data();
fout << endl << str.Data(); for (unsigned int j=0; j<fData.size(); j++) {
for (unsigned int j=0; j<fData.size()-1; j++) { foutData << ", PhaseFourierData" << j;
fout << "PhaseFourierData" << j << ", PhaseFourierTheo" << j << ", ";
} }
fout << "PhaseFourierData" << fData.size()-1 << ", PhaseFourierTheo" << fData.size()-1; foutData << endl;
fout << endl;
foutTheo << str.Data();
for (unsigned int j=0; j<fData.size(); j++) {
foutTheo << ", PhaseFourierTheo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fData[0].dataFourierPhase->GetXaxis()->GetFirst(); // first bin of the zoomed 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 xmaxBin = fData[0].dataFourierPhase->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xminBin); xmin = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xminBin);
xmax = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xmaxBin); xmax = fData[0].dataFourierPhase->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=1; i<fData[0].dataFourierPhase->GetNbinsX()-1; i++) { for (int i=1; i<fData[0].dataFourierPhase->GetNbinsX()-1; i++) {
xval = fData[0].dataFourierPhase->GetBinCenter(i); // get x-unit xval = fData[0].dataFourierPhase->GetBinCenter(i); // get x-unit
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fData.size()-1; j++) { for (unsigned int j=0; j<fData.size(); j++) {
fout << fData[j].dataFourierPhase->GetBinContent(i) << ", "; foutData << ", " << fData[j].dataFourierPhase->GetBinContent(i);
theoBin = fData[j].theoryFourierPhase->FindBin(xval);
fout << fData[j].theoryFourierPhase->GetBinContent(theoBin) << ", ";
} }
// write last data set foutData << endl;
fout << fData[fData.size()-1].dataFourierPhase->GetBinContent(i) << ", "; }
theoBin = fData[fData.size()-1].theoryFourierPhase->FindBin(xval);
fout << fData[fData.size()-1].theoryFourierPhase->GetBinContent(theoBin); // write theory
fout << endl; 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; break;
default: default:
@ -3634,34 +3729,31 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) { switch (fCurrentPlotView) {
case PV_DATA: case PV_DATA:
// write header // write header
fout << "% " << fNonMusrData[0].diff->GetXaxis()->GetTitle() << ", "; foutData << "% " << fNonMusrData[0].diff->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) { 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; foutData << "Diff" << fNonMusrData.size()-1 << ", eDiff" << fNonMusrData.size()-1;
fout << endl; foutData << endl;
// write data
// get current x-range // get current x-range
xminBin = fNonMusrData[0].diff->GetXaxis()->GetFirst(); // first bin of the zoomed range xminBin = fMultiGraphDiff->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fNonMusrData[0].diff->GetXaxis()->GetLast(); // last bin of the zoomed range xmaxBin = fMultiGraphDiff->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fNonMusrData[0].diff->GetXaxis()->GetBinCenter(xminBin); xmin = fMultiGraphDiff->GetXaxis()->GetBinCenter(xminBin);
xmax = fNonMusrData[0].diff->GetXaxis()->GetBinCenter(xmaxBin); xmax = fMultiGraphDiff->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=0; i<fNonMusrData[0].diff->GetN(); i++) { for (int i=0; i<fNonMusrData[0].diff->GetN(); i++) {
fNonMusrData[0].diff->GetPoint(i,xval,yval); // get values fNonMusrData[0].diff->GetPoint(i,xval,yval); // get values
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) { for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fNonMusrData[j].diff->GetPoint(i,xval,yval); // get values fNonMusrData[j].diff->GetPoint(i,xval,yval); // get values
fout << yval << ", "; foutData << ", " << yval;
fout << fNonMusrData[j].diff->GetErrorY(i) << ", "; foutData << ", " << fNonMusrData[j].diff->GetErrorY(i);
} }
// write last data set foutData << endl;
fNonMusrData[fNonMusrData.size()-1].diff->GetPoint(i,xval,yval); // get values
fout << yval << ", ";
fout << fNonMusrData[fNonMusrData.size()-1].diff->GetErrorY(i);
fout << endl;
} }
break; break;
case PV_FOURIER_REAL: case PV_FOURIER_REAL:
@ -3681,40 +3773,49 @@ void PMusrCanvas::SaveDataAscii()
switch (fCurrentPlotView) { switch (fCurrentPlotView) {
case PV_DATA: case PV_DATA:
// write header // write header
fout << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", "; foutData << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) { for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fout << "Data" << j << ", eData" << j << ", Theo" << j << ", "; foutData << ", Data" << j << ", eData" << j;
} }
fout << "Data" << fNonMusrData.size()-1 << ", eData" << fNonMusrData.size()-1 << ", Theo" << fNonMusrData.size()-1; foutData << endl;
fout << endl;
// write data foutTheo << "% " << fNonMusrData[0].data->GetXaxis()->GetTitle() << ", ";
for (unsigned int j=0; j<fNonMusrData.size(); j++) {
foutTheo << ", Theo" << j;
}
foutTheo << endl;
// get current x-range // get current x-range
xminBin = fNonMusrData[0].data->GetXaxis()->GetFirst(); // first bin of the zoomed range xminBin = fMultiGraphData->GetXaxis()->GetFirst(); // first bin of the zoomed range
xmaxBin = fNonMusrData[0].data->GetXaxis()->GetLast(); // last bin of the zoomed range xmaxBin = fMultiGraphData->GetXaxis()->GetLast(); // last bin of the zoomed range
xmin = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xminBin); xmin = fMultiGraphData->GetXaxis()->GetBinCenter(xminBin);
xmax = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xmaxBin); xmax = fMultiGraphData->GetXaxis()->GetBinCenter(xmaxBin);
// get data
// write data
for (int i=0; i<fNonMusrData[0].data->GetN(); i++) { for (int i=0; i<fNonMusrData[0].data->GetN(); i++) {
fNonMusrData[0].data->GetPoint(i,xval,yval); // get values fNonMusrData[0].data->GetPoint(i,xval,yval); // get values
if ((xval < xmin) || (xval > xmax)) if ((xval < xmin) || (xval > xmax))
continue; continue;
fout << xval << ", "; foutData << xval;
for (unsigned int j=0; j<fNonMusrData.size()-1; j++) { for (unsigned int j=0; j<fNonMusrData.size(); j++) {
fNonMusrData[j].data->GetPoint(i,xval,yval); // get values fNonMusrData[j].data->GetPoint(i,xval,yval); // get values
fout << yval << ", "; foutData << ", " << yval;
fout << fNonMusrData[j].data->GetErrorY(i) << ", "; foutData << ", " << fNonMusrData[j].data->GetErrorY(i);
theoBin = FindBin(xval, fNonMusrData[j].theory);
fNonMusrData[j].theory->GetPoint(theoBin,xval,yval); // get values
fout << yval << ", ";
} }
// write last data set foutData << endl;
fNonMusrData[fNonMusrData.size()-1].data->GetPoint(i,xval,yval); // get values }
fout << yval << ", ";
fout << fNonMusrData[fNonMusrData.size()-1].data->GetErrorY(i) << ", "; // write theory
theoBin = FindBin(xval, fNonMusrData[fNonMusrData.size()-1].theory); for (int i=0; i<fNonMusrData[0].theory->GetN(); i++) {
fNonMusrData[fNonMusrData.size()-1].theory->GetPoint(theoBin,xval,yval); // get values fNonMusrData[0].theory->GetPoint(i,xval,yval); // get values
fout << yval; if ((xval < xmin) || (xval > xmax))
fout << endl; 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; break;
case PV_FOURIER_REAL: case PV_FOURIER_REAL:
@ -3737,7 +3838,8 @@ void PMusrCanvas::SaveDataAscii()
} }
// close file // close file
fout.close(); foutData.close();
foutTheo.close();
cout << endl << ">> Data windows saved in ascii format ..." << endl; 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 app.Run(true); // true needed that Run will return after quit so that cleanup works
// clean up // clean up
//cout << endl << "clean up canvas vector ...";
char canvasName[32]; char canvasName[32];
for (unsigned int i=0; i<canvasVector.size(); i++) { for (unsigned int i=0; i<canvasVector.size(); i++) {
// check if canvas is still there before calling the destructor **TO BE DONE** // check if canvas is still there before calling the destructor **TO BE DONE**
sprintf(canvasName, "fMainCanvas%d", i); sprintf(canvasName, "fMainCanvas%d", i);
//cout << endl << ">> canvasName=" << canvasName << ", canvasVector[" << i << "]=" << canvasVector[i];
if (gROOT->GetListOfCanvases()->FindObject(canvasName) != 0) { if (gROOT->GetListOfCanvases()->FindObject(canvasName) != 0) {
//cout << endl << ">> canvasName=" << canvasName << ", found ...";
//cout << endl;
canvasVector[i]->~PMusrCanvas(); canvasVector[i]->~PMusrCanvas();
} else { } else {
//cout << endl << ">> canvasName=" << canvasName << ", NOT found ...";
//cout << endl;
} }
} }
canvasVector.empty(); canvasVector.empty();
} }
//cout << endl;
// clean up // clean up
plotList.clear(); plotList.clear();