function [orf, orq] = adjust_or_data(demands, orflows, orqueues, ts)
% ADJUST_OR_DATA - adjust on-ramp flow and queue values according to
% according to on-ramp flow limits.
%
% Call: [orf, orq] = adjust_or_data(demands, orflows, orqueues, ts)
%
% Parameters:
% demands - vector of on-ramp demands;
% orflows - vector of on-ramp flows, same size as 'densities';
% orqueues - vector of on-ramp queues, same size as 'densities';
% ts - sampling period.
%
% Returns:
% orf - vector of adjusted on-ramp flows;
% orq - vector of adjusted on-ramp queues.
%
% Last modified: 09/17/2006.
%
% Alex Kurzhanskiy <akurzhan@eecs.berkeley.edu>
%
K = size(demands, 1);
L = size(orflows, 1);
M = size(orqueues, 1);
if K ~= L
error('ADJUST_OR_DATA: number of demand values does not match number of flows.');
end
if L ~= M
error('ADJUST_OR_DATA: number of flows does not match number of queue sizes.');
end
orf = [];
orq = [];
for i = 1:K
d = demands(i, 1); % demand (vph)
f = orflows(i, 1); % flow (vph)
q = orqueues(i, 1); % queue size (number of vehicles)
f = min([f (d + (q/ts))]);
q = max([0 (q + ((d - f)*ts))]);
orf = [orf; f];
orq = [orq; q];
end
return;