LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
JMTIO.m
1classdef JMTIO < handle
2 % JMTIO Unified I/O handler for JMT model files
3 %
4 % Provides both read and write functionality for JMT XML format files
5 % (JSIM and JMVA). Combines functionality previously split between
6 % JMTXMLParser (write) and JMTResultParser (read).
7 %
8 % @brief Unified I/O for JMT simulation and analysis models
9 %
10 % Example:
11 % @code
12 % jmtio = JMTIO(model, options);
13 % % Write
14 % jmtio.writeJSIM(sn, outputFileName);
15 % % Read
16 % logData = JMTIO.parseLogs(model, isNodeLogged, metric);
17 % @endcode
18 %
19 % Copyright (c) 2012-2026, Imperial College London
20 % All rights reserved.
21
22 properties
23 model % Network model reference
24 simConfInt % Confidence interval for simulation
25 simMaxRelErr % Maximum relative error
26 maxSamples % Maximum samples
27 maxEvents % Maximum events
28 maxSimulatedTime % Maximum simulated time
29 seed % Random seed
30 fileName % Output file name (without extension)
31 options % Solver options
32 handles % Metric handles from solver
33 end
34
35 properties (Constant)
36 xsiNoNamespaceSchemaLocation = 'Archive.xsd';
37 fileFormat = 'jsimg';
38 end
39
40 methods
41 function self = JMTIO(model, options)
42 % JMTIO Create a JMT I/O handler instance
43 %
44 % @brief Creates a unified I/O handler for JMT model files
45 % @param model Network model to be converted to JMT format
46 % @param options SolverOptions with simulation parameters
47 % @return self JMTIO instance
48
49 self.model = model;
50 self.fileName = 'model';
51
52 % Set defaults
53 self.simConfInt = 0.99;
54 self.simMaxRelErr = 0.03;
55 self.maxEvents = -1;
56 self.maxSamples = 10000;
57 self.maxSimulatedTime = Inf;
58 self.seed = 23000;
59
60 % Override with options if provided
61 if nargin >= 2 && ~isempty(options)
62 self.options = options;
63 if isfield(options, 'samples') || isprop(options, 'samples')
64 self.maxSamples = options.samples;
65 end
66 if isfield(options, 'seed') || isprop(options, 'seed')
67 self.seed = options.seed;
68 end
69 % Parse confidence interval from options
70 [confintEnabled, confintLevel] = Solver.parseConfInt(options.confint);
71 if confintEnabled
72 self.simConfInt = confintLevel;
73 end
74 else
75 self.options = struct('seed', self.seed);
76 end
77 end
78
79 function sn = getStruct(self)
80 % GETSTRUCT Get the network structure
81 %
82 % @return sn Network structure from model
83 sn = self.model.getStruct(true);
84 end
85
86 % External method declarations (in separate files)
87 fileName = getFileName(self)
88 [exportClasses, cacheClasses] = getExportableClasses(self)
89 [simElem, simDoc] = saveXMLHeader(self, logPath)
90 [simElem, simDoc] = saveClasses(self, simElem, simDoc)
91 [simDoc, section] = saveArrivalStrategy(self, simDoc, section, ind)
92 [simDoc, section] = saveBufferCapacity(self, simDoc, section, ind)
93 [simDoc, section] = saveCacheStrategy(self, simDoc, section, ind)
94 [simDoc, section] = saveClassSwitchStrategy(self, simDoc, section, ind)
95 [simDoc, section] = saveDelayOffStrategy(self, simDoc, section, ind)
96 [simDoc, section] = saveDropRule(self, simDoc, section, ind)
97 [simDoc, section] = saveDropStrategy(self, simDoc, section, ind)
98 [simDoc, section] = saveEnablingConditions(self, simDoc, section, ind)
99 [simDoc, section] = saveFCRMetrics(self, simElem, simDoc)
100 [simDoc, section] = saveFiringOutcomes(self, simDoc, section, ind)
101 [simDoc, section] = saveFiringPriorities(self, simDoc, section, ind)
102 [simDoc, section] = saveFiringWeights(self, simDoc, section, ind)
103 [simDoc, section] = saveForkStrategy(self, simDoc, section, ind)
104 [simDoc, section] = saveGetStrategy(self, simDoc, section, ind)
105 [simDoc, section] = saveImpatience(self, simDoc, section, ind)
106 [simDoc, section] = saveInhibitingConditions(self, simDoc, section, ind)
107 [simDoc, section] = saveJoinStrategy(self, simDoc, section, ind)
108 [simElem, simDoc] = saveLinks(self, simElem, simDoc)
109 [simDoc, section] = saveLogTunnel(self, simDoc, section, ind)
110 [simElem, simDoc] = saveMetric(self, simElem, simDoc, handles)
111 [simElem, simDoc] = saveMetrics(self, simElem, simDoc)
112 [simDoc, section] = saveModeNames(self, simDoc, section, ind)
113 [simDoc, section] = saveNumberOfServers(self, simDoc, section, ind)
114 [simDoc, section] = saveNumbersOfServers(self, simDoc, section, ind)
115 [simDoc, section] = savePlaceCapacities(self, simDoc, section, ind)
116 [simDoc, section] = savePreemptiveStrategy(self, simDoc, section, ind)
117 [simDoc, section] = savePreemptiveWeights(self, simDoc, section, ind)
118 [simDoc, section] = savePutStrategies(self, simDoc, section, ind)
119 [simDoc, section] = savePutStrategy(self, simDoc, section, ind)
120 [simElem, simDoc] = saveRegions(self, simElem, simDoc)
121 [simDoc, section] = saveRoutingStrategy(self, simDoc, section, ind)
122 [simDoc, section] = saveServerVisits(self, simDoc, section)
123 [simDoc, section] = saveServiceStrategy(self, simDoc, section, ind)
124 [simDoc, section] = saveSwitchoverStrategy(self, simDoc, section, ind)
125 [simDoc, section] = saveTimingStrategies(self, simDoc, section, ind)
126 [simDoc, section] = saveTotalCapacity(self, simDoc, section, ind)
127
128 outputFileName = writeJSIM(self, sn, outputFileName)
129 end
130
131 methods (Static)
132 outputFileName = writeJMVA(sn, outputFileName, options)
133
134 % Parse JMT log files for transient metrics
135 logData = parseLogs(model, isNodeLogged, metric)
136
137 % Parse transient state data from arrival/departure logs
138 [state, evtype, evclass, evjob] = parseTranState(fileArv, fileDep, nodePreload)
139
140 % Parse transient response time data from arrival/departure logs
141 [classResT, jobResT, jobResTArvTS, classResTJobID] = parseTranRespT(fileArv, fileDep)
142 end
143end