Merging the FitExpectation branch into the trunk.
[openmx:openmx.git] / R / MxExpectation.R
1 #
2 #   Copyright 2007-2012 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 #
18 # The virtual base class for all expectations
19 #
20 setClass(Class = "MxBaseExpectation", 
21         representation = representation(
22                 name = "character",
23                 data = "MxCharOrNumber",
24         info = "list", "VIRTUAL"))
25
26 setClassUnion("MxExpectation", c("NULL", "MxBaseExpectation"))
27
28 setGeneric("genericExpDependencies",
29         function(.Object, dependencies) {
30         return(standardGeneric("genericExpDependencies"))
31 })
32
33 setGeneric("genericExpFunNamespace", 
34         function(.Object, modelname, namespace) {
35         return(standardGeneric("genericExpFunNamespace"))
36 })
37
38 setGeneric("genericExpRename",
39         function(.Object, oldname, newname) {
40         return(standardGeneric("genericExpRename"))
41 })
42
43 setGeneric("genericExpFunConvert", 
44         function(.Object, flatModel, model, labelsData, defVars, dependencies) {
45         return(standardGeneric("genericExpFunConvert")) 
46 })
47
48 setGeneric("genericExpAddEntities",
49         function(.Object, job, flatJob, labelsData) {
50         return(standardGeneric("genericExpAddEntities"))
51 })
52
53 setGeneric("genericExpConvertEntities",
54         function(.Object, flatModel, namespace, labelsData) {
55         return(standardGeneric("genericExpConvertEntities"))
56 })
57
58
59 setMethod("genericExpAddEntities", "MxBaseExpectation",
60         function(.Object, job, flatJob, labelsData) {
61                 return(job)
62 })
63
64 setMethod("genericExpAddEntities", "NULL",
65         function(.Object, job, flatJob, labelsData) {
66                 return(job)
67 })
68
69 setMethod("genericExpConvertEntities", "MxBaseExpectation",
70         function(.Object, flatModel, namespace, labelsData) {
71                 return(flatModel)
72 })
73
74 setMethod("genericExpConvertEntities", "NULL",
75         function(.Object, flatModel, namespace, labelsData) {
76                 return(flatModel)
77 })
78
79 setMethod("genericExpDependencies", "MxBaseExpectation",
80         function(.Object, dependencies) {
81                 return(dependencies)
82 })
83
84 setMethod("genericExpDependencies", "NULL",
85         function(.Object, dependencies) {
86                 return(dependencies)
87 })
88
89 setMethod("genericExpRename", "MxBaseExpectation",
90         function(.Object, oldname, newname) {
91                 return(.Object)
92 })
93
94 setMethod("genericExpRename", "NULL",
95         function(.Object, oldname, newname) {
96                 return(NULL)
97 })
98
99
100 convertExpectationFunctions <- function(flatModel, model, labelsData, defVars, dependencies) {
101         retval <- lapply(flatModel@expectations, genericExpFunConvert, 
102                 flatModel, model, labelsData, defVars, dependencies)
103         return(retval)
104 }
105
106 expectationFunctionAddEntities <- function(model, flatModel, labelsData) {
107
108         model@.forcesequential <- FALSE
109         model@.newobjects <- FALSE
110
111         expectations <- flatModel@expectations
112
113         if (length(expectations) == 0) {
114                 return(model)
115         }
116
117         for(i in 1:length(expectations)) {
118                 model <- genericExpAddEntities(expectations[[i]], model, flatModel, labelsData)
119         }
120
121         return(model)
122 }
123
124 expectationFunctionModifyEntities <- function(flatModel, namespace, labelsData) {
125
126         expectations <- flatModel@expectations
127
128         if (length(expectations) == 0) {
129                 return(flatModel)
130         }
131
132         for(i in 1:length(expectations)) {
133                 flatModel <- genericExpConvertEntities(expectations[[i]], flatModel, namespace, labelsData)
134         }
135
136         return(flatModel)
137 }