2 % JMTIO Unified I/O handler
for JMT model files
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).
8 % @brief Unified I/O
for JMT simulation and analysis models
12 % jmtio = JMTIO(model, options);
14 % jmtio.writeJSIM(sn, outputFileName);
16 % logData = JMTIO.parseLogs(model, isNodeLogged, metric);
19 % Copyright (c) 2012-2026, Imperial College London
20 % All rights reserved.
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
30 fileName % Output file name (without extension)
31 options % Solver options
32 handles % Metric handles from solver
36 xsiNoNamespaceSchemaLocation = 'Archive.xsd';
41 function self = JMTIO(model, options)
42 % JMTIO Create a JMT I/O handler instance
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
50 self.fileName =
'model';
53 self.simConfInt = 0.99;
54 self.simMaxRelErr = 0.03;
56 self.maxSamples = 10000;
57 self.maxSimulatedTime = Inf;
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;
66 if isfield(options, 'seed') || isprop(options, 'seed')
67 self.seed = options.seed;
69 % Parse confidence interval from options
70 [confintEnabled, confintLevel] = Solver.parseConfInt(options.confint);
72 self.simConfInt = confintLevel;
75 self.options = struct('seed', self.seed);
79 function sn = getStruct(self)
80 % GETSTRUCT Get the network structure
82 % @return sn Network structure from model
83 sn = self.model.getStruct(true);
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)
128 outputFileName = writeJSIM(self, sn, outputFileName)
132 outputFileName = writeJMVA(sn, outputFileName, options)
134 % Parse JMT log files for transient metrics
135 logData = parseLogs(model, isNodeLogged, metric)
137 % Parse transient state data from arrival/departure logs
138 [state, evtype, evclass, evjob] = parseTranState(fileArv, fileDep, nodePreload)
140 % Parse transient response time data from arrival/departure logs
141 [classResT, jobResT, jobResTArvTS, classResTJobID] = parseTranRespT(fileArv, fileDep)