LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
parseTranRespT.m
1function [classResT, jobRespT, jobResTArvTS] = parseTranRespT(fileArv, fileDep)
2% [CLASSREST, JOBRESPT, JOBRESTARVTS] = PARSETRANRESPT(FILEARV, FILEDEP)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6
7load(fileArv,'jobArvTS','jobArvClassID','jobArvID');
8load(fileDep,'jobDepTS','jobDepClassID','jobDepID');
9%% compute job residence times at the station
10jobIDs = unique([jobArvID;jobDepID]);
11% We count the total number of observed visits. Jobs not departed do not
12% complete the visit and are therefore not counted.
13jobRespT = cell(length(jobIDs),1);
14jobArvClass = cell(length(jobIDs),1);
15jobResTArvTS = cell(length(jobIDs),1); % arrival timestamp associated to jobResT entry
16jobLogData = [jobDepTS, jobDepID, -ones(size(jobDepTS)), jobDepClassID; jobArvTS, jobArvID, ones(size(jobArvTS)), jobArvClassID];
17jobLogData = sortrows(jobLogData,2); % sorted by job ID
18
19ptrJob=zeros(length(jobIDs),1);
20ptrJob(1) = 1;
21for j=2:size(jobLogData,1)
22 if jobLogData(j,2)>jobLogData(j-1,2) % change of job ID
23 ptrJob(1+jobLogData(j,2))=j;
24 end
25end
26ptrJob(end+1)=length(jobLogData)+1;
27
28uIDs=unique(jobIDs)';
29for id=uIDs
30 jobData = jobLogData(ptrJob(1+id):(ptrJob(1+id+1)-1),[1,3]);
31 jobClassData{1+id} = jobLogData(ptrJob(1+id):(ptrJob(1+id+1)-1),4);
32 %if ~isempty(jobClassData{1+id})
33 try
34 if length(jobData)>2
35 jobData = sortrows(jobData,1);
36 firstTS=find(jobData(:,2)>0,1,'first'); % ts of first arrival
37 lastTS=find(jobData(:,2)<0,1,'last'); % ts of last departure
38 jobData=jobData(firstTS:lastTS,1);
39 jobClassData{1+id}=jobClassData{1+id}(firstTS:lastTS,1);
40 if length(jobData(2:2:end)) == length(jobData(1:2:end))
41 jobResTArvTS{1+id}=jobData(1:2:end); % unclear what happens in case of dropping
42 jobRespT{1+id}=jobData(2:2:end)-jobData(1:2:end); % unclear what happens in case of dropping
43 jobArvClass{1+id} = jobClassData{1+id}(1:2:end);
44 else
45 jobResTArvTS{1+id}=jobData(1:2:end-1); % unclear what happens in case of dropping
46 jobRespT{1+id}=jobData(2:2:end-1)-jobData(1:2:end-1); % unclear what happens in case of dropping
47 jobArvClass{1+id} = jobClassData{1+id}(1:2:end-1);
48 end
49 else
50 jobResTArvTS{1+id}=min(jobData(:,1));
51 jobRespT{1+id}=max(jobData(:,1))-min(jobData(:,1));
52 jobArvClass{1+id} = jobClassData{1+id}(1);
53 end
54 %catch
55 % keyboard
56 end
57 %end
58end
59
60%% compute per-class residence times at the station
61ID2Class = unique([jobDepID,jobDepClassID],'rows');
62for c=unique(ID2Class(:,2))'
63 classResT{c} = [];
64 jobsInClass = ID2Class(find(ID2Class(:,2)==c),1);
65 for j = jobsInClass(:)'
66 jobsInClassArvClass = jobArvClass{1+j};
67 jobsInClassRespT = jobRespT{1+j};
68 if isempty(classResT{c})
69 classResT{c} = jobsInClassRespT(jobsInClassArvClass==c);
70 else
71 classResT{c} = [classResT{c}; jobsInClassRespT(jobsInClassArvClass==c)];
72 end
73 end
74end
75end
76