Files
musrfit/src/external/libGapIntegrals/PMusrCanvas.cpp.BMWpatch
2009-09-19 17:59:16 +00:00

102 lines
3.6 KiB
Plaintext

--- PMusrCanvas.cpp.orig 2009-09-18 18:58:50.000000000 +0200
+++ PMusrCanvas.cpp 2009-09-16 21:51:45.000000000 +0200
@@ -5,7 +5,7 @@
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
- $Id$
+ $Id: PMusrCanvas.cpp 4106 2009-08-31 11:19:03Z nemu $
***************************************************************************/
@@ -3291,6 +3291,36 @@
return;
}
+// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved
+
+ // generate output filename
+
+ // in order to handle names with "." correctly this slightly odd data-filename generation
+ tokens = fMsrHandler->GetFileName().Tokenize(".");
+ str = "";
+ for (int i=0; i<tokens->GetEntries()-1; i++) {
+ ostr = dynamic_cast<TObjString*>(tokens->At(i));
+ str += ostr->GetString() + TString(".");
+ }
+ str += "dataTheory";
+
+ if (tokens) {
+ delete tokens;
+ tokens = 0;
+ }
+
+ // open file
+ ofstream foutTheory;
+
+ // open data-file
+ foutTheory.open(str.Data(), iostream::out);
+ if (!fout.is_open()) {
+ cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << str.Data() << " for writing." << endl;
+ return;
+ }
+
+// endofBMW
+
// extract data
Double_t time, xval, yval;
Int_t xminBin;
@@ -3688,11 +3718,39 @@
fout << "Data" << fNonMusrData.size()-1 << ", eData" << fNonMusrData.size()-1 << ", Theo" << fNonMusrData.size()-1;
fout << endl;
// write data
+
+// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved
+
+ // get current x-range
+ xminBin = fNonMusrData[0].theory->GetXaxis()->GetFirst(); // first bin of the zoomed range
+ xmaxBin = fNonMusrData[0].theory->GetXaxis()->GetLast(); // last bin of the zoomed range
+ xmin = fNonMusrData[0].theory->GetXaxis()->GetBinCenter(xminBin);
+ xmax = fNonMusrData[0].theory->GetXaxis()->GetBinCenter(xmaxBin);
+
+ // get data
+ 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;
+ foutTheory << xval << " ";
+ for (unsigned int j=0; j<fNonMusrData.size()-1; j++) {
+ fNonMusrData[j].theory->GetPoint(i,xval,yval); // get values
+ foutTheory << yval << " ";
+ }
+ // write last data set
+ fNonMusrData[fNonMusrData.size()-1].theory->GetPoint(i,xval,yval); // get values
+ foutTheory << yval << " ";
+ foutTheory << endl;
+ }
+
+// endofBMW
+
// 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
for (int i=0; i<fNonMusrData[0].data->GetN(); i++) {
fNonMusrData[0].data->GetPoint(i,xval,yval); // get values
@@ -3739,6 +3797,12 @@
// close file
fout.close();
+// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved
+
+ foutTheory.close();
+
+// endofBMW
+
cout << endl << ">> Data windows saved in ascii format ..." << endl;
}