1function [simElem, simDoc] = saveFCRMetrics(self, simElem, simDoc)
2% [SIMELEM, SIMDOC] = SAVEFCRMETRICS(SIMELEM, SIMDOC)
4% Saves performance metrics
for Finite Capacity Regions (blocking regions).
5% Requests QLen, RespT, ResidT, and Tput metrics
for each FCR.
7% Copyright (c) 2012-2026, Imperial College London
10if isempty(self.model.regions) || length(self.model.regions) == 0
11 return; % simElem, simDoc already assigned from inputs
14% Metric types to request
for FCRs
15% JMT uses these names
for blocking region metrics
16metricTypes = {
'Number of Customers',
'Response Time',
'Residence Time',
'Throughput'};
19for r = 1:length(self.model.regions)
20 fcrName = ['FCRegion', num2str(r)];
22 for m = 1:length(metricTypes)
23 metricType = metricTypes{m};
24 performanceNode = simDoc.createElement(
'measure');
25 performanceNode.setAttribute(
'alpha', num2str(1 - self.simConfInt, 2));
26 performanceNode.setAttribute(
'name', [
'FCR_', fcrName,
'_', strrep(metricType,
' ',
''),
'_', num2str(metricCounter)]);
27 performanceNode.setAttribute(
'nodeType',
'region');
28 performanceNode.setAttribute(
'precision', num2str(self.simMaxRelErr, 2));
29 performanceNode.setAttribute(
'referenceNode', fcrName);
30 performanceNode.setAttribute(
'referenceUserClass',
''); % FCR metrics are not
class-specific
31 performanceNode.setAttribute(
'type', metricType);
32 performanceNode.setAttribute(
'verbose',
'false');
33 simElem.appendChild(performanceNode);
34 metricCounter = metricCounter + 1;