Author |
Topic  |
|
a.abc.b35
175 Posts |
Posted - 01/12/2011 : 01:24:50 AM
|
Hi, I dont know whether it is possible or not. So I shall ask someone experienced and hope this time my question gets answered. I have a fitting function which has 4 fitting parameters, say, a,b,c,d. After fitting is done, their values,along with the errors da,db,dc,dd are generated. Also the reduced chai^2 and Adj. R^2. Now I have a lot of plots on which I use this fitting function and get the values from each plot. I want the fitting parameter values (along with corresponding error) and chai^2 and R^2 values to be stored in a file so that I can later call that file to another function where I calculate something with the fit parameters and the errors therein. Or I would like to plot them. So, can anyone tell me, how do I ,after execution of each fit (fitting is done when I click ok from the nonlinear curve fit window after fitting and fit report is generated),store the values in a file ? Or if you can tell me how to take them from the Table (which is generated after fitting), and saving in a file by a Origin C code, it'll be ok. I am specifically looking for a Origin C code for it. Please help. Thanks in advance.
AB |
|
Penn
China
644 Posts |
Posted - 01/12/2011 : 04:59:20 AM
|
Hi AB,
Firstly, you can use the GetReportTree to get the results in the report sheet to a tree. Then, the WriteString method in stdioFile class can be used to write the values to a file. See the example below:
// suppose the report sheet with the results of Gaussian fit is active
void report_to_file()
{
Worksheet wks = Project.ActiveLayer(); // be sure the report sheet
if(!wks)
return;
uint uid;
Tree tr;
if(!(wks.GetReportTree(tr, &uid, 0, GRT_TYPE_RESULTS, true))) // get the report sheet as tree
return;
// out_tree(tr); // can output the tree to see the results
// after Gauss fit, put the parameters to vector
// can set a break point to see the hierarchy of the result tree
vector v;
v.Add(tr.Summary.R1.y0_Value.dVal);
v.Add(tr.Summary.R1.xc_Value.dVal);
v.Add(tr.Summary.R1.w_Value.dVal);
v.Add(tr.Summary.R1.A_Value.dVal);
vector<string> vs;
// convert the double vector to string vector
int iRet = convert_double_vector_to_string_vector(v, vs, v.GetSize());
if(iRet==-1)
{
out_str("convert error");
return;
}
// create a file, readable and writable
stdioFile ff("d:\\parameter.txt",file::modeCreate | file::modeReadWrite);
// write the values to the file
for(int iValue=0; iValue<v.GetSize(); iValue++)
{
ff.WriteString(vs[iValue]);
}
}
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 01/13/2011 : 12:52:32 PM
|
Thanks a lot Penn..thanks a lot. You don't know how much you have helped me here. I really really appreciate that. .... The way you wrote the code, it gives me the fit parameter values in a column. I guess for getting the errors, I have to use "y0_Error" etc. in place of "y0_Value". I shall check it now. .... Now I have to use one of these parameters, say w_value and w_error to , and calculate another parameter. This file should serve as an input to that program. I can pass values of w_value and w_error to it. Say the program is "calculate(double w_value, double w_error)". Now calculate calculates another parameter and output it. I can output that to a file according to the method you just showed. But I do't know how to extract the value of w_value and w_error from the file we created in the last example you showed to this program. .. Hope I am able to explain it. I am new to Origin C but not to Origin. And to my surprise, I find Origin C really exciting (surprised because I have been using origin to plot graphs for a few years now but came to know about Origin C only recently). Any help in this regard will be appreciated. Thanks again Penn.
AB |
 |
|
a.abc.b35
175 Posts |
Posted - 01/13/2011 : 1:30:52 PM
|
In other words, is there a way in which I can save the parameters column by column in the file: like, w,dw,A,dA etc. Now I can save columns of one parameter in a file and I need 4 files to save four columns of data.Instead, I want a single file with four columns !! The reason I am asking this is : I have multiple files and I want the values from other fit windows to get appended below the respective column so that I can call them easily.
AB |
Edited by - a.abc.b35 on 01/13/2011 6:27:05 PM |
 |
|
a.abc.b35
175 Posts |
Posted - 01/13/2011 : 3:27:09 PM
|
I have changed the code to below and it works. I can now store one of the fitting parameter values to a column in the file. But the problem which remains is that I am not able to create files with multiple column where each column lists the value of the parameter for all the FitNL worksheets in the particular workbook. I want columns like : K,dk, m , dm etc. (where dK and dm are corresponding errors) .......... Below is the code I used for getting a file with only columns, based on your code: ..........
#include <Origin.h> void FitParameters2File() { // enter Workbook whose FiTNL worksheets are to be scanned for values string wpName = InputBox("Please enter the WorkBook name ", "data"); if(wpName.IsEmpty()) // executed if user does not enter anything in the InputBox pop up window { printf("Try again.Enter a workbook name next time.Operation Cancelled!\n"); return; } WorksheetPage wp(wpName); vector v; // to store the numeric data vector<string> vs; // to store the converted string data from numeric data printf("Below are the FitNL files which has been scanned for the parameter values:\n"); // loop all worksheets in the workbook, add plots to graph for(int iwks = 0; iwks <wp.Layers.Count();iwks++) { Worksheet wks = wp.Layers(iwks); uint uid; Tree tr; if(wks.GetReportTree(tr, &uid, 0, GRT_TYPE_RESULTS, true)) { out_str(wks.GetName()); //out_tree(tr); // can output the tree to see the results // after the particular fit, put the parameters to vector (change here for different fitting functions) // the below four parameters are for the 'OrderParameterNotCenterAtZero' user defined fitting function // can set a break point to see the hierarchy of the result tree // v.Add(tr.Summary.R1.K_Value.dVal); // adds value of fit parameter K to the vector v v.Add(tr.Summary.R1.m_Value.dVal); // adding ony one fit parameter m (only value) to the vector // v.Add(tr.Summary.R1.y0_Value.dVal); // adds value of fit parameter y0 to the vector v // v.Add(tr.Summary.R1.x0_Value.dVal); // adds value of fit parameter x0 to the vector v // v.Add(tr.Summary.R1.K_Error.dVal); // adds Error value of fit parameter K to the vector v // v.Add(tr.Summary.R1.m_Error.dVal); // adds Error value of fit parameter m to the vector // v.Add(tr.Summary.R1.y0_Error.dVal); // adds Error value of fit parameter y0 to the vector v // v.Add(tr.Summary.R1.x0_Error.dVal); // adds Error value of fit parameter x0 to the vector v } } // convert the double vector to string vector int iRet = convert_double_vector_to_string_vector(v, vs, v.GetSize()); if(iRet==-1) { out_str("convert error"); return; } // create a file, readable and writable stdioFile ff("C:\..\Documents\..\test.txt",file::modeCreate | file::modeReadWrite); // write the values to the file for(int iValue=0; iValue<v.GetSize(); iValue++) { ff.WriteString(vs[iValue]); } } |
Edited by - a.abc.b35 on 01/13/2011 6:32:14 PM |
 |
|
a.abc.b35
175 Posts |
Posted - 01/13/2011 : 6:36:00 PM
|
Also, is it possible to add a warning and prompt the user with a option to give a different file name other than test.txt if it already exists or replace the existing one ?
AB |
 |
|
Penn
China
644 Posts |
Posted - 01/14/2011 : 01:03:57 AM
|
Hi AB,
The ReadString method can read a string line from the file each time. Then separate the string by using okutil_get_tokensfunction, and convert the separated string to double value by using atof function.
Suppose there is a file (d:\parameter.txt) with data like below:
y0 y0Error 5.34198 0.583405
The following code will read the file data and then convert the second line into two values.
void read_and_convert()
{
stdioFile ff;
// open a file
bool bRet = ff.Open("d:\\parameter.txt", file::modeRead);
if(!bRet)
{
out_str("file not found");
return;
}
string strTemp;
vector<string> vs;
// read the file
while(ff.ReadString(strTemp))
{
vs.Add(strTemp);
//out_str(strTemp);
}
ff.Close();
StringArray sa;
// separate the string by tab
int n = okutil_get_tokens(vs[1], &sa, '\t', NULL);
// convert string to double
double y0 = atof(sa[0]);
double y0Error = atof(sa[1]);
printf("y0=%f, y0Error=%f\n", y0, y0Error);
}
About other questions you have mentioned, including multiple columns in a file, warning and prompting the user to give a different file name, you can refer to the following example. I just make some changes basic on my code I posted before.
// suppose the report sheet with the result of Gaussian fit is active
void FitParameter2File()
{
Worksheet wks = Project.ActiveLayer(); // be sure the report sheet
if(!wks)
return;
uint uid;
Tree tr;
if(!(wks.GetReportTree(tr, &uid, 0, GRT_TYPE_RESULTS, true))) // get the report sheet as tree
return;
// after Gauss fit, put the parameters to vector
// can set a break point to see the hierarchy of the result tree
vector<string> v;
// add string to vector, use tab to separate each column
v.Add("y0\tdy0");
v.Add(ftoa(tr.Summary.R1.y0_Value.dVal, "*6") + "\t" + ftoa(tr.Summary.R1.y0_Error.dVal, "*6"));
string strFileName = "parameter.txt";
string strNewName;
strNewName = strFileName;
// the specified file exists or not. if exists, replace or create a new one
bool bRet = replace_new_file(strFileName, "d:\\", strNewName);
if(bRet == true)
{
// if select replace the existing file, can delete the old one
DeleteFile("d:\\"+strNewName);
}
// create a new file
stdioFile ff("d:\\"+strNewName,file::modeCreate | file::modeReadWrite);
// write the values to the file
for(int iValue=0; iValue<v.GetSize(); iValue++)
{
ff.WriteString(v[iValue]);
}
}
// return: true to replace, false to create a new one
bool replace_new_file(LPCTSTR strFileName, LPSTR strPath, string& strNewFileName)
{
bool bRet;
strNewFileName = strFileName;
// check whether the file exists
if(FindFile(strFileName, strPath, NULL, FALSE))
{
// message box to prompt
int iRet = MessageBox(GetWindow(), "File exsits. \"Yes\" to replace the existing file, \"No\" to crate a new file.", "File Existing", MB_YESNO);
if(iRet == IDYES)
{
bRet = true;
}
else if(iRet == IDNO)
{
// specify a new file name to create
while(FindFile(strNewFileName, strPath, NULL, FALSE))
{
GETN_BOX(trTemp)
GETN_STR(newName, "File exists. Give a new file name.", strNewFileName)
if(GetNBox(trTemp))
{
strNewFileName = trTemp.newName.strVal;
bRet = false;
}
else
{
MessageBox(GetWindow(), "No new file name specified, will replace the existing file.", "No New File Name", MB_OK);
bRet = true;
break;
}
}
}
}
return bRet;
}
The functions I have used in the example, you can search them on the Origin C help document (Help: Programming: Origin C).
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 01/19/2011 : 11:56:57 PM
|
Thanks a lot Penn. I have another question..if you could help me within 12 hours i may be saved from my advisor !!! :) .... I tried to use the same function as above (the 1st one),especially this part : Worksheet wks = wp.Layers(iwks); uint uid; Tree tr; if(wks.GetReportTree(tr, &uid, 0, GRT_TYPE_RESULTS, true)) { out_str(wks.GetName()); //out_tree(tr); // can output the tree to see the results // after the particular fit, put the parameters to vector (change here for different fitting functions) user1.xc1v.Add(tr.Parameters.R2.xc1_Value.dVal); // adding the value of xc1 to its vector user1.xc1e.Add(tr.Parameters.R2.xc1_Error.dVal); // adding the value of xc1 error to its vector user1.xc2v.Add(tr.Parameters.R5.xc2_Value.dVal); // adding the value of xc2 to its vector user1.xc2e.Add(tr.Parameters.R2.xc2_Error.dVal); // adding the value of xc2 error to its vector }
..... now the problem is I am using this to extract values from a Multiple Peaks Fit Report 1 ( by multiple lorentzian fit) from a worksheet and I get error "Multiple Peaks Fit Report1 TreeNode does not exist, access denied"... Am at a loss what to do. Please help.
AB |
 |
|
a.abc.b35
175 Posts |
Posted - 01/20/2011 : 12:26:50 AM
|
If I do "out_tree(tr);" I can see the results printed in results window. So I think the problem is probably the way i am calling the tree to get me the values of xc1 and xc2. Here is a screen shot of the Multiple Peaks Fit Report 1:
.....
AB |
Edited by - a.abc.b35 on 01/20/2011 12:28:30 AM |
 |
|
a.abc.b35
175 Posts |
Posted - 01/20/2011 : 01:57:33 AM
|
Anyone listening ?
AB |
 |
|
Penn
China
644 Posts |
Posted - 01/20/2011 : 02:04:32 AM
|
Hi AB,
In your code, you are trying to access a treenode that does not exist. You can use the out_tree(tr); to output the results to the results window. However, please note that the real hierarchy of the treenode is different from the output results.
To see the real hierarchy of the treenode, please set a break point to the line after calling GetReportTree method. Then the program will stop on this line when the function is called. In the Variables window of Code Builder (if not show, select menu View: Local Variables from the Code Builder), you can see the real hierarchy of the tree variable (here is "tr"). Then you can change your code according to this tree to access the values.
In your case here, Multiple Peaks Fit with lorentzian function, the code for accessing the report tree may be like:
v.Add(tr.Parameters.R1.C1.dVal);
v.Add(tr.Parameters.R1.C2.dVal);
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 01/20/2011 : 02:45:46 AM
|
Thanks a lot Penn...this solves my particular code. I have no idea how to set break point in origin c. Could you please help me in this regard also ?
AB |
 |
|
Penn
China
644 Posts |
Posted - 01/20/2011 : 8:05:03 PM
|
Hi AB,
About how to set break point, please refer to the Code Builder Users Guide. You can select Origin main menu Help: Programming: Code Builder, and then locate to the Debugger chapter.
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 01/27/2011 : 3:14:02 PM
|
Hi there. I have written the following code for collecting some parameters (shown in the picture) from a worksheet. It compiles fine but when I run it on a workbook, it gives me following error: C:\..\OriginC\test.c(64) :Origin C Function Runtime Error, general operation failure .......... Below is the code in green: ............................................ #include <Origin.h>
/////////////////////////////////////////////////////////////////////////////////////// // structure to collect and store data from the input workbook struct userval{ // vectors to store the values of the parameters vector KVal;vector mVal;vector y0Val;vector x0Val; vector KErr;vector mErr;vector y0Err;vector x0Err; }; //////////////////////////////////////////////////////////////////////////////////////
void test() { // structure to store the values of the parameters userval user; // name of the workbook to collect data string wpName1; // get the values of the parameters and store in the vector strings defined above user = getvalues1(wpName1); if(!wpName1.IsEmpty()) { // creates new worksheet and does the math. see function for details. CreateAndCalculate1(user); } }
//----------------------------------------------------------------------------------------------------------// // gets the values of the parameters from the tree, stores them in the defined vectors // and returns the converted string vector for each set.
userval getvalues1(string &wpName1) {
// initialize return string vector for any mal-function of program userval user0 = {0,0,0,0,0,0,0,0}; // return string vector for the function userval user1; // enter Workbook whose FiTNL worksheets are to be scanned for values wpName1 = InputBox("Please enter the WorkBook name to collect data ", "data"); if(wpName1.IsEmpty()) // executed if user does not enter anything in the InputBox pop up window { printf("Try again.Enter a workbook name next time.Operation Cancelled!\n"); return user0; } if (!wpName1.IsEmpty()) { WorksheetPage wp(wpName1); printf("Below are the FitNL files which has been scanned for the parameter values:\n"); // loop all worksheets in the workbook, add plots to graph for(int iwks = 0; iwks <wp.Layers.Count();iwks++) { Worksheet wks = wp.Layers(iwks); uint uid; Tree tr; if(wks.GetReportTree(tr, &uid, 0, GRT_TYPE_RESULTS, true)) { out_str(wks.GetName()); //out_tree(tr); // can output the tree to see the results // after the particular fit, put the parameters to vector (change here for different fitting functions) user1.KVal.Add(tr.Summary.R1.K_Value.dVal); // adding the value of K to its vector user1.KErr.Add(tr.Summary.R1.K_Error.dVal); // adding the value of K error to its vector user1.mVal.Add(tr.Summary.R1.m_Value.dVal); // adding the value of m to its vector user1.mErr.Add(tr.Summary.R1.m_Error.dVal); // adding the value of m error to its vector user1.y0Val.Add(tr.Summary.R1.y0_Value.dVal); // adding the value of y0 to its vector user1.y0Err.Add(tr.Summary.R1.y0_Error.dVal); // adding the value of y0 error to its vector user1.x0Val.Add(tr.Summary.R1.x0_Value.dVal); // adding the value of x0 to its vector user1.x0Err.Add(tr.Summary.R1.x0_Error.dVal); // adding the value of x0 error to its vector } } return user1; } else { printf("Operation aborted due to mal-function by the idiot seating in front of the idiot box.\n"); printf("This idiot is afraid that the one seating in front will have to do it again.\n\n"); return user0; } }
//--------------------------------------------------------------------------------------------------------// // create a new worksheet and store the data there. // also do the math
void CreateAndCalculate1(userval user) { // Promt user for the name of the workbook to create where this data will be saved string wpName2 = InputBox("Please enter the short name of the WorkBook(less than 13 alphanumeric char) to store the data", "data"); if (!wpName2.IsEmpty()) { // checks if same named workbook exist in the project and nags for a different name foreach(WorksheetPage wksPg in Project.WorksheetPages) { while(wpName2==wksPg.GetName()) // get workbook name and compare with input name wpName2 = InputBox("There exist a WorkBook with same name in the project.Please enter a different name for the workbook to store the data", "data1"); } } if (!wpName2.IsEmpty()) { // Create workbook WorksheetPage wp; wp.Create("origin", CREATE_VISIBLE); if( !wp ) { printf("From CreateAndCalculate: Invalid workbook.Operation Cancelled! Data is already saved in the files though."); return; } wp.SetName(wpName2); // sets the name of the workbook as given by user // sets the total number of columns of worksheet1 of the workbook Worksheet wks= wp.Layers(0); wks.SetSize(-1,11); // nRows = -1 (keeps current no of rows),nCol=9(total no. of columns) if(wks.IsValid()) { // set column width foreach(Column cc in wks.Columns) { cc.SetWidth(8); // set column width [BOOL SetWidth( int iWidth = -1(default) )] } // create datasets for the parameters to store in a worksheet Dataset KValds,KErrds,mValds,mErrds,y0Valds,y0Errds,x0Valds,x0Errds; // attach the datasets to the worksheet columns. 1st three columns are left untouched for inputs from user string strWksname = wks.GetPage().GetName(); // gets the name of the worksheet printf("The data is added to %s worksheet of %s workbook.\n",strWksname, wpName2); KValds.Attach(strWksname,3); // attaches to column 4 (index is 3 as counting starts from 0) KErrds.Attach(strWksname,4); mValds.Attach(strWksname,5); // attaches to column 6 (index is 5 as counting starts from 0) mErrds.Attach(strWksname,6); y0Valds.Attach(strWksname,7); // attaches to column 8 (index is 7 as counting starts from 0) y0Errds.Attach(strWksname,8); x0Valds.Attach(strWksname,9); // attaches to column 10 (index is 9 as counting starts from 0) x0Errds.Attach(strWksname,10); // puts the data in the datasets one by one KValds = user.KVal; KErrds = user.KErr; mValds = user.mVal; mErrds = user.mErr; y0Valds = user.y0Val; y0Errds = user.y0Err; x0Valds = user.x0Val; x0Errds = user.x0Err; // Set short name,long name, label, size ,type etc. string NameC0 = "File"; string NameC1 = "Strain"; string NameC2 = "Time"; string NameC3 = "K"; string NameC4 = "K_Err"; string NameC5 = "m"; string NameC6 = "m_Err"; string NameC7 = "y0"; string NameC8 = "y0_Err"; string NameC9 = "x0"; string NameC10 = "x0_Err"; string unitC1 = "%"; string unitC2 = "min"; wks.Columns(0).SetName(NameC0); // change the name of the 1st column wks.Columns(1).SetName(NameC1); // change the name of the 2nd column wks.Columns(2).SetName(NameC2); // change the name of the 3rd column wks.Columns(3).SetName(NameC3); // change the name of the 4th column wks.Columns(4).SetName(NameC4); // change the name of the 5th column wks.Columns(5).SetName(NameC5); // change the name of the 6th column wks.Columns(6).SetName(NameC6); // change the name of the 7th column wks.Columns(7).SetName(NameC7); // change the name of the 8th column wks.Columns(8).SetName(NameC8); // change the name of the 9th column wks.Columns(9).SetName(NameC9); // change the name of the 10th column wks.Columns(10).SetName(NameC10);// change the name of the 11th column wks.Columns(0).SetLongName(NameC0); // change the name of the 1st column wks.Columns(1).SetLongName(NameC1); // change the name of the 2nd column wks.Columns(2).SetLongName(NameC2); // change the name of the 3rd column wks.Columns(3).SetLongName(NameC3); // change the name of the 4th column wks.Columns(4).SetLongName(NameC4); // change the name of the 5th column wks.Columns(5).SetLongName(NameC5); // change the name of the 6th column wks.Columns(6).SetLongName(NameC6); // change the name of the 7th column wks.Columns(7).SetLongName(NameC7); // change the name of the 8th column wks.Columns(8).SetLongName(NameC8); // change the name of the 9th column wks.Columns(9).SetLongName(NameC9); // change the name of the 10th column wks.Columns(10).SetLongName(NameC10); // change the name of the 11th column
wks.Columns(0).SetType(OKDATAOBJ_DESIGNATION_X); // sets it as 'X' wks.Columns(1).SetType(OKDATAOBJ_DESIGNATION_X); // sets it as 'X' wks.Columns(2).SetType(OKDATAOBJ_DESIGNATION_X); // sets it as 'X' wks.Columns(3).SetType(OKDATAOBJ_DESIGNATION_Y); // sets it as 'Y' wks.Columns(4).SetType(OKDATAOBJ_DESIGNATION_ERROR); // sets it as 'ERR_Y' wks.Columns(5).SetType(OKDATAOBJ_DESIGNATION_Y); // sets it as 'Y' wks.Columns(6).SetType(OKDATAOBJ_DESIGNATION_ERROR); // sets it as 'ERR_Y' wks.Columns(7).SetType(OKDATAOBJ_DESIGNATION_Y); // sets it as 'Y' wks.Columns(8).SetType(OKDATAOBJ_DESIGNATION_ERROR); // sets it as 'ERR_Y' wks.Columns(9).SetType(OKDATAOBJ_DESIGNATION_Y); // sets it as 'Y' wks.Columns(10).SetType(OKDATAOBJ_DESIGNATION_ERROR); // sets it as 'ERR_Y' wks.Columns(1).SetUnits(unitC1); wks.Columns(2).SetUnits(unitC2); wks.AutoSize();// autosizes the worksheets after column renames string comment = "Fit Parameters from OP_Fit for strain upto 110%"; for(int k=0; k<wks.GetNumCols();k++) wks.Columns(k).SetComments(comment); return; } } else { printf("Workbook name to store the data is empty.Operation aborted!"); } } ...................................... Here is a snapshot of the file:

AB |
 |
|
a.abc.b35
175 Posts |
Posted - 01/27/2011 : 3:25:36 PM
|
The error is in line 64 which is " for(int iwks = 0; iwks <wp.Layers.Count();iwks++)
AB |
 |
|
Penn
China
644 Posts |
Posted - 01/27/2011 : 8:58:12 PM
|
Hi AB,
I am afraid that you have specified a non-existing workbook name when you are running your code. Maybe you need to add an if condition for whether the workbook exists. For example, after the line WorksheetPage wp(wpName1);, you can add:
if(!wp)
return user0;
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 01/28/2011 : 11:53:49 AM
|
Yes Penn you are right.I have changed the long name of the workbook to "data" but short name still remained "Book1" which I did not see. I was calling the workbook by "data" whereas the short name was "Book1". So I got the error. Thanks for pointing that out.
AB |
 |
|
a.abc.b35
175 Posts |
Posted - 05/27/2011 : 1:09:51 PM
|
One more problem : I want to import the red. chai square value also. In my code , I use "value.Add(tr.Summary.R1.K_Value.dVal);" to add the value of parameter K to a vector value. But it does not seem to work for Statistics (refer the fig) . How do I import the value of red. chai sqaure from the summary part ? Please help. Also How to import values of say K,y0 from Parameters part and red. chai sq. from statistics part ? ..........

AB |
 |
|
Penn
China
644 Posts |
Posted - 05/30/2011 : 04:54:59 AM
|
Hi AB,
To get the reduced Chi-Square value, you can use tr.RegStats.C1.ReducedChiSq.dVal. Actually, you can set a break point on the line where is calling GetReportTree method, when the function is executed to this line, it will stop here, then press F8 to execute this line, and now you can see all the tree structure in the Variables window of the Code Builder. This tree structure includes the structure of the report worksheet, you can use this tree structure to read the report values.
Penn |
 |
|
a.abc.b35
175 Posts |
Posted - 05/31/2011 : 02:01:30 AM
|
Thanks a lot Penn
AB |
 |
|
|
Topic  |
|
|
|