omxComputeEstimateHessian reorg 8/11
[openmx:openmx.git] / src / omxHessianCalculation.h
1 /*
2  *  Copyright 2007-2013 The OpenMx Project
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *       http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *   Unless required by applicable law or agreed to in writing, software
11  *   distributed under the License is distributed on an "AS IS" BASIS,
12  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16
17 #ifndef _OMXHESSIAN_CALCULATION_H
18 #define _OMXHESSIAN_CALCULATION_H
19
20 #include "types.h"
21 #include "omxCompute.h"
22
23 void omxEstimateHessian(double functionPrecision, int r);
24
25 class omxComputeEstimateHessian : public omxCompute {
26         const double stepSize;
27         const int numIter;
28
29         double *hessian;
30         double *gradient;
31
32         SEXP calculatedHessian;
33         SEXP stdErrors;
34
35         void doHessianCalculation(int numParams, int numChildren, 
36                                   struct hess_struct *hess_work);
37
38  public:
39         omxComputeEstimateHessian();
40         virtual ~omxComputeEstimateHessian();
41
42         virtual void initFromFrontend(SEXP rObj) {};
43         virtual void setStartValues(SEXP startVals) {};
44         virtual void compute();
45         virtual void saveState() {};
46         virtual void reportResults(MxRList *out);
47 };
48
49 class omxCompute *newComputeEstimateHessian();
50
51 #endif // _OMXHESSIAN_CALCULATION_H