classdef config_mwm < base_config
% config_mwm Global constants
properties(Constant)
RESULTS_DIR = 'results/mwm';
TRIAL_TYPES_DESCRIPTION = { ...
'Training' ...
};
TRIALS_PER_SESSION = [4 4 4];
SESSIONS = length(config_mwm.TRIALS_PER_SESSION);
TRIALS = sum(config_mwm.TRIALS_PER_SESSION);
TRIAL_TYPE = ones(1, config_mwm.TRIALS);
TRIAL_TIMEOUT = 90; % seconds
GROUPS = 2;
GROUPS_DESCRIPTION = {'Control', 'Stress', 'Control/Food', 'Stress/Food'};
% centre point of arena in cm
CENTRE_X = 0;
CENTRE_Y = 0;
% radius of the arena
ARENA_R = 100;
% platform position and radius
PLATFORM_X = -50;
PLATFORM_Y = 10;
PLATFORM_R = 6;
% other parameters
PLATFORM_PROXIMITY_RADIUS = 5; % in platform radii
LONGEST_LOOP_EXTENSION = 40; % in cm
% number of animals to discard from each group
REGULARIZE_GROUPS = 1;
NDISCARD = 0;
DISCARD_FEATURE = base_config.FEATURE_AVERAGE_SPEED;
% relation between animal ids and groups
% (1 = control, 2 = stress, 3 = control + modified diet, 4 = stress
% + modified diet)
TRAJECTORY_GROUPS = {...
%1st set
[87, 1; 91, 1; 93, 1; 95, 1; 99, 1; 101, 1; 103, 1; ...
114, 1; 115, 1; 121, 1; 88, 2; 90, 2; 98, 2; 100, 2; ...
104, 2; 106, 2; 108, 2; 113, 2; 118, 2; 122, 2], ...
% 2nd set
[43, 1; 49, 1; 52, 1; 57, 1; 59, 1; 65, 1; 75, 1; ...
82, 1; 44, 2; 50, 2; 53, 2; 58, 2; 60, 2; 67, 2; ...
71, 2; 76, 2; 78, 2; 83, 2], ...
% 3rd set
[50, 1; 61, 1; 67, 1; 71, 1; 75, 1; 83, 1; 90, 1; ...
94, 1; 100, 1; 111, 1; 52, 2; 57, 2; 63, 2; 69, 2; ...
73, 2; 81, 2; 92, 2; 96, 2; 102, 2; 107, 2; 51, 3; ...
55, 3; 56, 3; 62, 3; 68, 3; 74, 3; 82, 3; 91, 3; 95, 3; ...
106, 3; 53, 4; 58, 4; 64, 4; 72, 4; 76, 4; 84, 4; 97, 4; ...
103, 4; 108, 4; 113, 4] ...
};
CLUSTER_CLASS_MINIMUM_SAMPLES_P = 0.01; % 2% o
CLUSTER_CLASS_MINIMUM_SAMPLES_EXP = 0.75;
FEATURE_LONGEST_LOOP = base_config.FEATURE_LAST + 1;
FEATURE_CENTRE_DISPLACEMENT = base_config. FEATURE_LAST + 2;
FEATURE_PLATFORM_PROXIMITY = base_config.FEATURE_LAST + 3;
FEATURE_CV_INNER_RADIUS = base_config.FEATURE_LAST + 4;
DEFAULT_FEATURE_SET = [config_mwm.FEATURE_MEDIAN_RADIUS, ...
config_mwm.FEATURE_IQR_RADIUS, ...
config_mwm.FEATURE_FOCUS, ...
config_mwm.FEATURE_CENTRE_DISPLACEMENT, ...
config_mwm.FEATURE_CV_INNER_RADIUS, ...
config_mwm.FEATURE_PLATFORM_PROXIMITY, ...
config_mwm.FEATURE_BOUNDARY_ECCENTRICITY, ...
config_mwm.FEATURE_LONGEST_LOOP];
CLUSTERING_FEATURE_SET = config_mwm.DEFAULT_FEATURE_SET;
%%
%% Tags sets - number/indices have to match the list below
%%
TAGS_FULL = 1;
TAGS250_90 = 2; % Important: go from "more detailed" to less detailed
TAGS250_70 = 3;
TAGS300_70 = 4;
OUTPUT_DIR = '/home/tiago/results/'; % where to put all the graphics and other generated output
CLASSES_COLORMAP = @jet;
end
properties(GetAccess = 'public', SetAccess = 'protected')
TRAJECTORY_DATA_DIRS = {};
TRAJECTORY_SNAPSHOTS_DIRS = {};
TAGS_CONFIG = {};
end
methods
function inst = config_mwm()
inst@base_config('Morris water maze', ...
[ tag('TT', 'thigmotaxis', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 1), ... % default tags
tag('IC', 'incursion', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 2), ...
tag('SS', 'scanning-surroundings', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 7), ...
tag('SC', 'scanning', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 3), ...
tag('FS', 'focused search', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 4), ...
tag('SO', 'self orienting', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 6), ...
tag('CR', 'chaining response', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 5), ...
tag('ST', 'target scanning', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 8), ...
tag('TS', 'target sweep', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 3), ...
tag('DF', 'direct finding', base_config.TAG_TYPE_BEHAVIOUR_CLASS), ...
tag('AT', 'approaching_target', base_config.TAG_TYPE_BEHAVIOUR_CLASS), ...
tag('CI', 'circling', base_config.TAG_TYPE_BEHAVIOUR_CLASS, 8), ...
tag('CP', 'close pass', base_config.TAG_TYPE_TRAJECTORY_ATTRIBUTE), ...
tag('S1', 'selected 1', base_config.TAG_TYPE_TRAJECTORY_ATTRIBUTE) ], ...
[], ...% no additional data representation
{ {'L_max', 'Longest loop', 'trajectory_longest_loop', 1, 40}, ...
{'D_ctr', 'Centre displacement', 'trajectory_centre_displacement'}, ...
{'P_plat', 'Platform proximity', 'trajectory_time_within_radius', 1, 3*config_mwm.PLATFORM_R, 'X0', config_mwm.PLATFORM_X, 'Y0', config_mwm.PLATFORM_Y}, ...
{'Ri_CV', 'Inner radius variation', 'trajectory_cv_inner_radius'} }, ...
{} ...
);
cur_dir = fileparts(mfilename('fullpath'));
inst.TRAJECTORY_DATA_DIRS = {... % 1st set
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/set1/'), ...
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/set2/'), ...
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/set3/'), ...
};
% used to calibrate the trajectories
inst.TRAJECTORY_SNAPSHOTS_DIRS = {...
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/screenshots/set1/'), ...
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/screenshots/set2/'), ...
fullfile(cur_dir, '../../data/mwm_peripubertal_stress/screenshots/set3/') ...
};
inst.TAGS_CONFIG = { ... % values are: file that stores the tags, segment length, overlap, default number of clusters
{ fullfile(cur_dir, '../../data/mwm_peripubertal_stress/labels_full.csv'), 0, 0}, ...
{ fullfile(cur_dir, '../../data/mwm_peripubertal_stress/segment_labels_250c.csv'), 75, base_config.SEGMENTATION_CONSTANT_LENGTH, 2, 250, 0.90}, ...
{ fullfile(cur_dir, '../../data/mwm_peripubertal_stress/segment_labels_250_70.csv'), 35, base_config.SEGMENTATION_CONSTANT_LENGTH, 2, 250, 0.70}, ...
{ fullfile(cur_dir, '../../data/mwm_peripubertal_stress/segment_labels_300_70.csv'), 37, base_config.SEGMENTATION_CONSTANT_LENGTH, 2, 300, 0.70}, ...
};
end
% Imports trajectories from Noldus data file's
function traj = load_data(inst)
addpath(fullfile(fileparts(mfilename('fullpath')),'../../import/noldus'));
traj = load_trajectories(1:3, 1, 'DeltaX', -100, 'DeltaY', -100);
end
end
end