LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
parseLogs.m
1function logData = parseLogs(model,isNodeLogged, metric)
2% LOGDATA = PARSELOGS(MODEL,ISNODELOGGED, METRIC)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7%line_printf('\nJMT log parsing...');
8T0=tic;
9sn = model.getStruct;
10nclasses = sn.nclasses;
11logData = cell(sn.nnodes,sn.nclasses);
12nodePreload = sn_get_state_aggr(model.getStruct);
13for ind=1:sn.nnodes
14 if sn.isstateful(ind) && isNodeLogged(ind)
15 logFileArv = [model.getLogPath,sprintf('%s-Arv.csv',model.getNodeNames{ind})];
16 logFileDep = [model.getLogPath,sprintf('%s-Dep.csv',model.getNodeNames{ind})];
17 %% load arrival process
18 if exist(logFileArv,'file') && exist(logFileDep,'file')
19 % logArv=readTable(logFileArv,'Delimiter',';','HeaderLines',1); % raw data
20
21 %%
22 % unclear if this part works fine if user has another local
23 % since JMT might write with a different delimiter
24 fid=fopen(logFileArv);
25 logArv = textscan(fid, '%s%f%f%s%s%s', 'delimiter',';', 'headerlines',1);
26 fclose(fid);
27 jobArvTS = logArv{2};
28 jobArvID = logArv{3};
29 jobArvClass = logArv{4};
30 clear logArv;
31
32 %%
33 jobArvClasses = unique(jobArvClass);
34 jobArvClassID = zeros(length(jobArvClass),1);
35 for c=1:length(jobArvClasses)
36 jobArvClassID(find(strcmp(jobArvClasses{c},jobArvClass))) = findstring(model.getClassNames,jobArvClasses{c});
37 % jobArvClassID(find(strcmp(jobArvClasses{c},jobArvClass)))=c;
38 end
39 logFileArvMat = [model.getLogPath,filesep,sprintf('%s-Arv.mat',model.getNodeNames{ind})];
40 save(logFileArvMat,'jobArvTS','jobArvID','jobArvClass','jobArvClassID');
41
42 %% load departure process
43 fid=fopen(logFileDep);
44 logDep = textscan(fid, '%s%f%f%s%s%s', 'delimiter',';', 'headerlines',1);
45 fclose(fid);
46 jobDepTS = logDep{2};
47 jobDepID = logDep{3};
48 jobDepClass = logDep{4};
49 clear logDep;
50
51 % jobDepTS = table2array(logDep(:,2));
52 % jobDepID = table2array(logDep(:,3));
53 % jobDepClass = table2cell(logDep(:,4));
54 jobDepClasses = unique(jobDepClass);
55 jobDepClassID = zeros(length(jobDepClass),1);
56 for c=1:length(jobDepClasses)
57 jobDepClassID(find(strcmp(jobDepClasses{c},jobDepClass))) = findstring(model.getClassNames,jobDepClasses{c});
58 % jobDepClassID(find(strcmp(jobDepClasses{c},jobDepClass)))=c;
59 end
60 logFileDepMat = [model.getLogPath,filesep,sprintf('%s-Dep.mat',model.getNodeNames{ind})];
61 save(logFileDepMat,'jobDepTS','jobDepID','jobDepClass','jobDepClassID');
62
63 nodeState = cell(sn.nnodes,1);
64
65 switch metric
66 case MetricType.toText(MetricType.QLen)
67 % nodePreload comes from sn_get_state_aggr, which is indexed
68 % by STATEFUL index, whereas ind here is a NODE index. The
69 % two coincide only when every node is stateful; with a Sink
70 % (or any other non-stateful node) below ind, indexing by ind
71 % silently seeds the trajectory reconstruction with another
72 % station's initial state, or runs off the end of the cell.
73 [node_ind, evtype, evclass, evjob] = JMTIO.parseTranState(logFileArvMat, logFileDepMat, nodePreload{sn.nodeToStateful(ind)});
74
75 %% save in default data structure
76 for r=1:nclasses %0:numOfClasses
77 logData_indr = struct();
78 logData_indr.t = node_ind(:,1);
79 ec = cell(length(evtype),1);
80 for e=1:length(evtype)
81 if evclass(e) == r
82 ec{e,1} = Event(evtype(e), ind, r, NaN, [], node_ind(e,1), evjob(e));
83 else
84 ec{e,1} = [];
85 end
86 end
87 logData_indr.event = ec;
88 logData_indr.QLen = node_ind(:,1+r);
89 %logData_indr.arvID = jobArvID;
90 %logData_indr.depID = jobDepID;
91 logData{ind,r} = logData_indr;
92 end
93 nodeState{ind} = node_ind;
94 case MetricType.toText(MetricType.RespT)
95 [classResT, jobRespT, jobResTArvTS] = JMTIO.parseTranRespT(logFileArvMat, logFileDepMat);
96
97 for r=1:nclasses
98 logData{ind,r} = struct();
99 if r <= size(classResT,2)
100 logData{ind,r}.t = jobResTArvTS;
101 logData{ind,r}.RespT = classResT{r};
102 %logData{i,r}.PassT = jobRespT;
103 else
104 logData{ind,r}.t = [];
105 logData{ind,r}.RespT = [];
106 %logData{i,r}.PassT = [];
107 end
108 end
109 end
110 end
111 end
112end
113runtime=toc(T0);
114%line_printf(' completed. Runtime: %f seconds.\n',runtime);
115end
116
Definition Station.m:245