-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTrackAnalyzer.m
73 lines (60 loc) · 3.17 KB
/
TrackAnalyzer.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function TrackAnalyzer(in_folder, movie_features_file, out_folder)
min_median_displacement = 10;
min_track_duration = 60;
mat_files = GetTrackingInfoFiles(in_folder);
load(movie_features_file);
all_features = features; % For parfor
header = {'Filename', 'Strain', 'Odorant concentration', 'Filtered tracks',...
'Mean length', 'Median length',...
'Mean steps', 'Median steps', ...
'Plate radius', 'Tracks >= 2/3 R', 'Tracks >= R'};
output = cell(length(mat_files) + 1, length(header));
output(1,:) = header;
for ix = 1:length(mat_files)
tracking_info_file = mat_files{ix};
if ~(contains(tracking_info_file, 'Feb'))
continue
end
movie_features = all_features(cellfun(@(name) contains(tracking_info_file, name(1:end-5)), {all_features.name}));
tracking_info = AnalyzeTrackingInfo(tracking_info_file, movie_features);
% plate_center = movie_features.plate{1};
plate_radius = movie_features.plate{2};
tracks = tracking_info.tracks;
% path_centroids = cellfun(@(p) mean([[0 0]; p(:,2:3)], 1), {tracks.filteredPath}, 'UniformOutput', false);
%
% filtered_tracks = tracks([tracks.medianDisplacement] >= min_median_displacement & ...
% cellfun(@length, {tracks.filteredStepSizes}) >= min_track_duration & ...
% cellfun(@(c) sqrt((c(1)-plate_center(1))^2 + (c(2)-plate_center(2))^2) <= plate_radius, path_centroids));
track_lengths = cellfun(@sum, {tracks.filteredStepSizes});
track_durations = cellfun(@length, {tracks.filteredStepSizes});
%
% drop_center = movie_features.drop{1};
% for track_ix = 1:length(filtered_tracks)
% track = filtered_tracks(track_ix);
% velocity_vectors = GetVelocityVectors(track.filteredPath);
% filtered_tracks(track_ix).velocityVecotrs = velocity_vectors;
% filtered_tracks(track_ix).bearings = GetBearings(track.filteredPath, drop_center);
% % filtered_tracks(track_ix).anglesFromDrop = ...
% % GetAngles(track.filteredPath, drop_center);
% filtered_tracks(track_ix).anglesBetweenSteps = ...
% GetAnglesBetweenSteps(velocity_vectors);
% end
% [sorted_track_lengths, sorted_length_ixes] = sort(track_lengths);
% sorted_tracks = filtered_tracks(sorted_length_ixes);
% analyzed_data(ix).name = tracking_info.tracker.name;
% analyzed_data(ix).tracks = filtered_tracks;
% analyzed_data(ix).movieFeautres = movie_features
name = tracking_info.tracker.name;
comments = tracking_info.comments;
tracker = tracking_info.tracker;
save(fullfile(out_folder, [name '.preprocessed_tracks.mat']), 'name', 'tracks', 'movie_features', 'comments', 'tracker');
output(ix+1,:) = {tracking_info.tracker.name, tracking_info.comments.Strain, ...
tracking_info.comments.OdorantConcentration, length(tracks),...
mean(track_lengths), median(track_lengths),...
mean(track_durations), median(track_durations), ...
plate_radius, sum(track_lengths >= (plate_radius * 2 / 3)), ...
sum(track_lengths >= plate_radius)};
fprintf('Finished %d / %d\n', ix, length(mat_files));
end
xlswrite(fullfile(out_folder, 'track_analyzer_output.xlsx'), output);
end