LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
saveEnablingConditions.m
1function [simDoc, section] = saveEnablingConditions(self, simDoc, section, ind)
2% SAVEENABLINGCONDITIONS Writes only relevant enabling vectors to XML.
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7enablingNode = simDoc.createElement('parameter');
8enablingNode.setAttribute('array', 'true');
9enablingNode.setAttribute('classPath', 'jmt.engine.NetStrategies.TransitionUtilities.TransitionMatrix');
10enablingNode.setAttribute('name', 'enablingConditions');
11
12sn = self.getStruct;
13numOfNodes = sn.nnodes;
14numOfClasses = sn.nclasses;
15numOfModes = sn.nodeparam{ind}.nmodes;
16
17for m = 1:numOfModes
18 subEnablingConditionNode = simDoc.createElement('subParameter');
19 subEnablingConditionNode.setAttribute('classPath', 'jmt.engine.NetStrategies.TransitionUtilities.TransitionMatrix');
20 subEnablingConditionNode.setAttribute('name', 'enablingCondition');
21
22 subEnablingVectorsNode = simDoc.createElement('subParameter');
23 subEnablingVectorsNode.setAttribute('array', 'true');
24 subEnablingVectorsNode.setAttribute('classPath', 'jmt.engine.NetStrategies.TransitionUtilities.TransitionVector');
25 subEnablingVectorsNode.setAttribute('name', 'enablingVectors');
26
27 for k = 1:numOfNodes
28 hasRelevantEntry = false;
29
30 % Check if there is any relevant enabling entry for this node
31 for r = 1:numOfClasses
32 en_val = sn.nodeparam{ind}.enabling{m}(k, r);
33 in_val = sn.nodeparam{ind}.inhibiting{m}(k, r);
34 if (isfinite(en_val) && en_val > 0) || (isfinite(in_val) && in_val > 0)
35 hasRelevantEntry = true;
36 break;
37 end
38 end
39
40 if hasRelevantEntry
41 subEnablingVectorNode = simDoc.createElement('subParameter');
42 subEnablingVectorNode.setAttribute('classPath', 'jmt.engine.NetStrategies.TransitionUtilities.TransitionVector');
43 subEnablingVectorNode.setAttribute('name', 'enablingVector');
44
45 subStationNameNode = simDoc.createElement('subParameter');
46 subStationNameNode.setAttribute('classPath', 'java.lang.String');
47 subStationNameNode.setAttribute('name', 'stationName');
48
49 placeNameValueNode = simDoc.createElement('value');
50 placeNameValueNode.appendChild(simDoc.createTextNode(sn.nodenames{k}));
51 subStationNameNode.appendChild(placeNameValueNode);
52 subEnablingVectorNode.appendChild(subStationNameNode);
53
54 subEnablingEntriesNode = simDoc.createElement('subParameter');
55 subEnablingEntriesNode.setAttribute('array', 'true');
56 subEnablingEntriesNode.setAttribute('classPath', 'java.lang.Integer');
57 subEnablingEntriesNode.setAttribute('name', 'enablingEntries');
58
59 for r = 1:numOfClasses
60 refClassNode = simDoc.createElement('refClass');
61 refClassNode.appendChild(simDoc.createTextNode(sn.classnames{r}));
62 subEnablingEntriesNode.appendChild(refClassNode);
63
64 subParameterNode = simDoc.createElement('subParameter');
65 subParameterNode.setAttribute('classPath', 'java.lang.Integer');
66 subParameterNode.setAttribute('name', 'enablingEntry');
67
68 valueNode = simDoc.createElement('value');
69 en_val = sn.nodeparam{ind}.enabling{m}(k, r);
70 if isinf(en_val)
71 valueNode.appendChild(simDoc.createTextNode('-1'));
72 else
73 valueNode.appendChild(simDoc.createTextNode(int2str(en_val)));
74 end
75
76 subParameterNode.appendChild(valueNode);
77 subEnablingEntriesNode.appendChild(subParameterNode);
78 end
79
80 subEnablingVectorNode.appendChild(subEnablingEntriesNode);
81 subEnablingVectorsNode.appendChild(subEnablingVectorNode);
82 end
83 end
84
85 subEnablingConditionNode.appendChild(subEnablingVectorsNode);
86 enablingNode.appendChild(subEnablingConditionNode);
87end
88
89section.appendChild(enablingNode);
90end