-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathkitNormalizeJobs.m
90 lines (82 loc) · 3.24 KB
/
kitNormalizeJobs.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
function allJobs=kitNormalizeJobs(jobs,normalize)
%KITCOLLATEJOBS Combines multiple jobs into one and normalizes intensities.
%
% SYNOPSIS: allJobs=kitNormalizeJobs(jobs)
%
% INPUT jobs: Cell array of jobs.
%
% normalize: 1 do background subtraction and scale, 2 just background subtraction
%
% OUTPUT allJobs: Struct similar to job structs but containing combined data for
% for the following fields:
% .sisterList
% .trackList
% .trackInt
%
% Copyright (c) 2014 Jonathan W. Armond
if nargin<2
normalize=1;
end
n = length(jobs);
cellCtr = 1;
trackCtr = ones(3,1); % assume max 3 channels
sisterCtr = trackCtr;
fields = {'intensity','intensity_median','intensity_min','intensity_max','intensity_ratio'};
for i=1:n
job = jobs{i};
numCh = length(job.dataStruct);
for c = 1:numCh
if ~isempty(job.dataStruct{c}) && ...
isfield(job.dataStruct{c},'cellInt') && ~isempty(job.dataStruct{c}.cellInt.back)
% Background intensity is stored in cellInt.
%back = mean(job.dataStruct{c}.cellInt.backMode,1);
%backDiff = mean(job.dataStruct{c}.cellInt.backDiff,1);
back = job.dataStruct{c}.cellInt.backMode(1,:);
backDiff = job.dataStruct{c}.cellInt.backDiff(1,:);
allJobs.dataStruct{c}.background(cellCtr,:) = back;
allJobs.dataStruct{c}.backgroundDiff(cellCtr,:) = backDiff;
% Per cell data
allJobs.dataStruct{c}.cellInt(cellCtr) = job.dataStruct{c}.cellInt;
allJobs.dataStruct{c}.movie{cellCtr} = job.ROI.movie;
% Augment track pair indices.
if ~isempty(job.dataStruct{c}.sisterList(1).trackPairs)
job.dataStruct{c}.sisterList(1).trackPairs(:,1:2) = ...
job.dataStruct{c}.sisterList(1).trackPairs(:,1:2) + ...
(trackCtr(c)-1);
end
for j = 1:length(job.dataStruct{c}.trackList)
k = trackCtr(c);
% Augment track sister index.
%job.dataStruct{c}.trackList(j).sister = ...
% job.dataStruct{c}.trackList(j).sister + (trackCtr(c)-1);
% Normalize intensity.
trackInt = job.dataStruct{c}.trackInt(j);
if normalize
for f = 1:length(fields)
for ii = 1:size(trackInt.intensity,2)
if normalize == 2
trackInt.(fields{f})(:,ii) = (trackInt.(fields{f})(:,ii) - ...
back(ii));
else
trackInt.(fields{f})(:,ii) = (trackInt.(fields{f})(:,ii) - ...
back(ii)) / backDiff(ii);
end
end
end
end
allJobs.dataStruct{c}.trackInt(k) = trackInt;
allJobs.dataStruct{c}.trackList(k) = job.dataStruct{c}.trackList(j);
allJobs.dataStruct{c}.jobIdx(k) = i;
allJobs.dataStruct{c}.trackIdx(k) = j;
trackCtr(c) = trackCtr(c)+1;
end
for j = 1:length(job.dataStruct{c}.sisterList)
k = sisterCtr(c);
allJobs.dataStruct{c}.sisterList(k) = job.dataStruct{c}.sisterList(j);
allJobs.dataStruct{c}.sisterIdx(k) = j;
sisterCtr(c) = sisterCtr(c)+1;
end
cellCtr = cellCtr+1;
end
end
end