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:
parent
9af5f415f7
commit
fe71e7b9c8
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user