use of cbit.util.graph.Node in project vcell by virtualcell.
the class ModelOptimizationSpec method removeUncoupledParameters.
public void removeUncoupledParameters() {
try {
localIssueList.clear();
MathMapping mathMapping = getSimulationContext().createNewMathMapping();
MathDescription mathDesc = mathMapping.getMathDescription();
MathSystemHash mathSystemHash = fromMath(mathDesc);
Graph graph = mathSystemHash.getDependencyGraph(mathSystemHash.getSymbols());
Tree[] spanningTrees = graph.getSpanningForest();
//
for (int i = 0; i < spanningTrees.length; i++) {
Node[] treeNodes = spanningTrees[i].getNodes();
boolean bHasStateVariables = false;
for (int j = 0; j < treeNodes.length; j++) {
Node node = treeNodes[j];
Variable var = mathDesc.getVariable(node.getName());
if (var instanceof VolVariable || var instanceof MemVariable || var instanceof FilamentVariable || var instanceof VolumeRegionVariable || var instanceof MembraneRegionVariable || var instanceof FilamentRegionVariable) {
bHasStateVariables = true;
break;
}
}
if (!bHasStateVariables) {
spanningTrees = (Tree[]) BeanUtils.removeElement(spanningTrees, spanningTrees[i]);
i--;
}
}
//
// remove parameters not mapped to a surviving tree (not coupled to any state variables
//
ArrayList<ParameterMappingSpec> paramMappingSpecsList = new ArrayList<ParameterMappingSpec>();
paramMappingSpecsList.addAll(Arrays.asList(fieldParameterMappingSpecs));
for (int i = 0; i < paramMappingSpecsList.size(); i++) {
Parameter parameter = paramMappingSpecsList.get(i).getModelParameter();
String mathName = mathMapping.getMathSymbolMapping().getVariable(parameter).getName();
boolean bFoundInTree = false;
for (int j = 0; j < spanningTrees.length; j++) {
Node node = spanningTrees[j].getNode(mathName);
if (node != null) {
bFoundInTree = true;
}
}
if (!bFoundInTree) {
paramMappingSpecsList.remove(i);
i--;
}
}
ParameterMappingSpec[] parameterMappingSpecs = new ParameterMappingSpec[paramMappingSpecsList.size()];
paramMappingSpecsList.toArray(parameterMappingSpecs);
setParameterMappingSpecs(parameterMappingSpecs);
} catch (Exception e) {
e.printStackTrace(System.out);
localIssueList.add(new Issue(this, localIssueContext, IssueCategory.ParameterEstimationGeneralWarning, e.getMessage(), Issue.SEVERITY_WARNING));
// throw new RuntimeException(e.getMessage());
}
}
Aggregations