classdef tag
%TAG Groups together some commmon attributes of trajectories
properties(GetAccess = 'public', SetAccess = 'protected')
abbreviation = '';
description = '';
type = '';
parent = '';
score = 0; % used to sort tags according to "goodness" of the strategy
weight = 1; % used to give priority to some classes when mapping strategies to trajectories
sub_tags = {};
end
methods
%% constructor
function obj = tag(a, d, t, sc, st, w)
obj.abbreviation = a;
obj.description = d;
obj.type = t;
if nargin < 4
obj.score = 0;
else
obj.score = sc;
end
if nargin < 5 || isempty(st)
% assume that classs tag == abbreviation
obj.sub_tags = {a};
else
obj.sub_tags = st;
end
if nargin < 6
obj.weight = 1;
else
obj.weight = w;
end
end
function res = matches(obj, abbrev)
res = ~isempty(find(arrayfun( @(t) strcmp(abbrev, t), obj.sub_tags), 1));
end
end
methods(Static)
function combined = combine_tags(tags)
abbrev = {tags(1).abbreviation};
full_abbrev = tags(1).abbreviation;
desc = tags(1).description;
tot_sc = tags(1).score;
w = tags(1).weight;
for i = 2:length(tags)
abbrev = [abbrev, tags(i).abbreviation];
full_abbrev = sprintf('%s/%s', full_abbrev, tags(i).abbreviation);
desc = sprintf('%s / %s', desc, tags(i).description);
tot_sc = tot_sc + tags(i).score;
w = w + tags(i).weight;
end
combined = tag(full_abbrev, desc, tags(1).type, tot_sc, abbrev, w/length(tags));
end
function res = tag_position(tags, abbrev)
pos = find(arrayfun( @(t) t.matches(abbrev), tags));
if ~isempty(pos)
res = pos(1);
else
res = 0;
end
end
% constructs a mapping of an array of tags (source) to another
% array of tags (target)
function res = mapping(target, source)
res = zeros(1, length(source));
for i = 1:length(source)
for j = 1:length(target)
if target(j).matches(source(i).abbreviation)
res(i) = j;
break;
end
end
end
end
end
end