Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
added an alignment script, added a load function in main for alignmen…
Browse files Browse the repository at this point in the history
…t script data
MPIBR-vollrathf committed Apr 4, 2017
1 parent 92b16af commit f16fcdd
Showing 6 changed files with 600 additions and 1 deletion.
137 changes: 137 additions & 0 deletions alignmentScript.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
clear all
close all
clc
%% Set Paramters
inFolder = 'D:\data\Leona';
outFolder = 'D:\data\out';
binningFactor = [1, 1, 2];
nSubIm = 1000;%number of subImages for med align
referenceChannel = 0; %0: green, 1: red; reference channel for shift corrections
numShiftCorrections = 1; %number of shift corrections
%% Load Files
currentFolder = pwd;
cd(inFolder);
folders = dir;

for k = length(folders):-1:1
% remove non-folders
if ~folders(k).isdir
folders(k) = [ ];
continue
end
% remove folders starting with .
fname = folders(k).name;
if fname(1) == '.'
folders(k) = [ ];
end
end

numFolders = length(folders);

%iterate through all folders
for f = 1:numFolders
%go into folder
cd(inFolder);
cd(folders(f).name);
greenFiles = dir('ChanA_*_*.tif');
redFiles = dir('ChanB_*_*.tif');
%check if fileNumber is the same
if size(greenFiles, 1) ~= size(redFiles, 1)
error(['Unequal number of files in trial folder "', folders(f).name, '"!!']);
end
numFiles = size(greenFiles, 1);

%load first red frame to get resolution and being able to preallocate
temp = readTiffNoStack(redFiles(1).name);
res = size(temp);

%preallocate data_r
data_r = zeros(res(1), res(2), numFiles);
data_g = zeros(res(1), res(2), numFiles);
%load data
disp(['Loading Files In Folder ', folders(f).name]);
parfor i=1:numFiles
data_r(:,:,i) = readTiffNoStack(redFiles(i).name);
data_g(:,:,i) = readTiffNoStack(greenFiles(i).name);
end
disp(['Shift Correction Of Files In Folder ', folders(f).name]);

%save stacks in memory
cd(outFolder);
disp(['Write Files Of Folder ', folders(f).name ' in ' outFolder ' to RAM']);
data_r_complete{f} = data_r;
data_g_complete{f} = data_g;
end

%go back to old current folder
cd(currentFolder);
clear data_r data_g
data_r = data_r_complete;
data_g = data_g_complete;
%create big array
numFrames = 0;
numFrameList = zeros(1,numFolders);
for i = 1:numFolders
numFrames = numFrames + size(data_g{i},3);
numFrameList(i+1) = numFrames;
end

%preallocate data
data_r_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_r{1}));
data_g_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_g{1}));
for i = 1:numFolders
data_r_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_r{i};
data_r{i} = [];
data_g_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_g{i};
data_g{i} = [];
end
clear data_r_complete data_g_complete data_r data_g
data_r = data_r_array;
data_g = data_g_array;
clear data_g_array data_r_array
%% Do Shift Correction
wb = waitbar(0, 'Performing Shift Correction');

for j = 1:numShiftCorrections
if referenceChannel
referenceChannelData = data_r;
else
referenceChannelData = data_g;
end
%Med Align
parfor f=1:size(referenceChannelData,3)
referenceChannelData(:,:,f) = imgaussfilt(referenceChannelData(:,:,f),2);
end
[rs, cs] = medAlign(referenceChannelData, nSubIm, 50, -inf);
%shift red and green channel
waitbar(j/numShiftCorrections, wb, 'Performing Med Align..');
parfor i = 1:size(data_g,3)
data_r(:,:,i) = circshift(data_r(:,:,i),[rs(i),cs(i)]);
data_g(:,:,i) = circshift(data_g(:,:,i),[rs(i),cs(i)]);
end
end
%matVis(data_r,data_g);
%% Export Files
%save trial files
for i=1:numFolders
waitbar(i/numFolders, wb, 'Saving Trial Tiff Files..');
%binning
data_r_save = uint16(binning(data_r(:,:,numFrameList(i)+1:numFrameList(i+1)), binningFactor, 'mean'));
data_g_save = uint16(binning(data_g(:,:,numFrameList(i)+1:numFrameList(i+1)), binningFactor, 'mean'));

saveastiff(data_r_save, [outFolder filesep folders(i).name '_r.tif']);
saveastiff(data_g_save, [outFolder filesep folders(i).name '_g.tif']);
end

%save big tiff file
data_r = uint16(binning(data_r, binningFactor, 'mean'));
data_g = uint16(binning(data_g, binningFactor, 'mean'));
disp('Saving Big Data Set..');
waitbar(0, wb, 'Saving Big Tiff Files..');
options.big = true;
saveastiff(data_r, [outFolder filesep 'complete_r.tif'], options);
waitbar(0.5, wb, 'Saving Big Tiff Files..');
saveastiff(data_g, [outFolder filesep 'complete_g.tif'], options);
%%
close(wb);
disp('Finished Script!');
59 changes: 59 additions & 0 deletions functions/CellSortLoadFilesFromAlignmentScript.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
function [data_g_array, data_r_array, numFrameList, fn_green, fn_red, greenFiles, redFiles] = CellSortLoadFilesFromAlignmentScript(outFolder)
greenFiles = dir('*_g*.tif*');
redFiles = dir('*_r*.tif*');
%delete complete file from file list
greenFiles(end)=[];
redFiles(end)=[];

fn_green = greenFiles(1).name;
fn_red = redFiles(1).name;
%load files
numberGreen = size(greenFiles,1);
numberRed = size(redFiles,1);
if numberGreen ~= numberRed
error('Unequal number of red and green channel files!!!');
end

%load trials
disp('Loading Trial Files..');
parfor i = 1:numberGreen
data_r{i} = readTiff(redFiles(i).name);
data_g{i} = readTiff(greenFiles(i).name);
end

%put them in single arrays
numFrames = 0;
numFrameList = zeros(1,numberGreen);
for i = 1:numberGreen
numFrames = numFrames + size(data_g{i},3);
numFrameList(i+1) = numFrames;
end

%preallocate data
data_r_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_r{1}));
data_g_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_g{1}));
disp('Creating Big Data Set..');
for i = 1:numberGreen
data_r_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_r{i};
data_r{i} = [];
data_g_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_g{i};
data_g{i} = [];
end

%calculate quality plot
reference = mean(data_r_array, 3);
qualityPlot = zeros(1,size(data_r_array, 3));
parfor i = 1:size(data_r_array,3)
qualityPlot(i) = sqrt(squeeze(mean(mean((cast(data_r_array(:,:,i),'like', reference) - reference).^2,1),2)));
end
figure('Name','Quality Plot');
plot(qualityPlot);
for i=1:numberGreen
vline(numFrameList(i), 'black', greenFiles(i).name);
end
title('Quality Of Shift Correction');
xlabel('frame');
ylabel('std of frame');

disp('Finished Loading Trial Files!');
end
210 changes: 210 additions & 0 deletions functions/trialAlignmentScript_Belen.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
clear all
close all
clc
%% Load Trial Files
numberShiftCorrections = 4;
inFolder = 'D:\data\Leona';
outFolder = 'D:\data\out';
binningFactor = [1, 1, 2];
nSubIm = 10;



%% load single tif files of trials to ram
%operations
currentFolder = pwd;
cd(inFolder);
folders = dir;

for k = length(folders):-1:1
% remove non-folders
if ~folders(k).isdir
folders(k) = [ ];
continue
end
% remove folders starting with .
fname = folders(k).name;
if fname(1) == '.'
folders(k) = [ ];
end
end

numFolders = length(folders);

%iterate through all folders
for f = 1:numFolders
%go into folder
cd(inFolder);
cd(folders(f).name);
greenFiles = dir('ChanA_*_*.tif');
redFiles = dir('ChanB_*_*.tif');
%check if fileNumber is the same
if size(greenFiles, 1) ~= size(redFiles, 1)
error(['Unequal number of files in trial folder "', folders(f).name, '"!!']);
end
numFiles = size(greenFiles, 1);

%load first red frame to get resolution and being able to preallocate
temp = readTiffNoStack(redFiles(1).name);
res = size(temp);

%preallocate data_r
data_r = zeros(res(1), res(2), numFiles);
data_g = zeros(res(1), res(2), numFiles);
%load data
disp(['Loading Files In Folder ', folders(f).name]);
parfor i=1:numFiles
data_r(:,:,i) = readTiffNoStack(redFiles(i).name);
data_g(:,:,i) = readTiffNoStack(greenFiles(i).name);
end

disp(['Shift Correction Of Files In Folder ', folders(f).name]);
%do the shift correction
[rs, cs] = medAlign(data_r, nSubIm, 50, -inf);

%shift red and green channel
disp(['Shift Data Arrays Of Files In Folder ', folders(f).name]);
parfor i = 1:numFiles
data_r(:,:,i) = circshift(data_r(:,:,i),[rs(i),cs(i)]);
data_g(:,:,i) = circshift(data_g(:,:,i),[rs(i),cs(i)]);
end

%save stacks in memory
cd(outFolder);
disp(['Write Files Of Folder ', folders(f).name ' in ' outFolder ' to RAM']);
data_r_complete{f} = data_r;
data_g_complete{f} = data_g;
end

disp('Finished Shift Correction And Fusing Of Data!');
%go back to old current folder
cd(currentFolder);
clear data_r data_g
data_r = data_r_complete;
data_g = data_g_complete;
clear data_r_complete data_g_complete
numberGreen = size(data_g,2);
%% do shift correction
%%shift correct trials to each other
%do shift correction
for shiftCorrectionCounter = 1:numberShiftCorrections
disp('Performing Shift Correction On All Trials..');
reference = median(data_r{1},3);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
medianProj = median(data_r{i},3);
shiftVector = findshift(reference, medianProj, 'iter', 0, 0.25*size(reference,1));
%shift frames
for f = 1:size(data_r{i},3)
data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
%%do another med align
for j =1:numberGreen
disp(['Working on Trial ' num2str(j)]);
[rs, cs] = medAlign(data_r{j}, nSubIm, 50, -inf);
temp_r = data_r{j};
temp_g = data_g{j};
%shift red and green channel
parfor f = 1:size(data_r{j},3)
temp_r(:,:,f) = circshift(temp_r(:,:,f),[rs(f),cs(f)]);
temp_g(:,:,f) = circshift(temp_g(:,:,f),[rs(f),cs(f)]);
end
data_r{j} = temp_r;
data_g{j} = temp_g;
end
%%do another shift correction for every frame, takes some time
reference = median(data_r{1},3);
numberGreen = size(data_g,2);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
for f = 1:size(data_r{i},3)
shiftVector = findshift(reference, data_r{j}(:,:,f), 'iter',0, 0.25*size(reference,1));
%shift frames

data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
%%do another shift correctionto align trials to each other
reference = median(data_r{1},3);
numberGreen = size(data_g,2);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
medianProj = median(data_r{i},3);
shiftVector = findshift(reference, medianProj, 'iter',0, 0.25*size(reference,1));
%shift frames
for f = 1:size(data_r{i},3)
data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
end
%%visualize data
numFrames = 0;
numFrameList = zeros(1,numberGreen);
for i = 1:numberGreen
numFrames = numFrames + size(data_g{i},3);
numFrameList(i+1) = numFrames;
end

%preallocate data
data_r_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_r{1}));
data_g_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_g{1}));
disp('Creating Big Data Set..');
for i = 1:numberGreen
data_r_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_r{i};
data_g_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_g{i};
end
%% save tiff files
parfor i=1:numberGreen
%binning
data_r{i} = uint16(binning(data_r{i}, binningFactor, 'mean'));
data_g{i} = uint16(binning(data_g{i}, binningFactor, 'mean'));

saveastiff(data_r{i}, [outFolder filesep folders(i).name '_r.tif']);
saveastiff(data_g{i}, [outFolder filesep folders(i).name '_g.tif']);
end
%% generate quality plot
%put them in single arrays
numFrames = 0;
numFrameList = zeros(1,numberGreen);
for i = 1:numberGreen
numFrames = numFrames + size(data_g{i},3);
numFrameList(i+1) = numFrames;
end

%preallocate data
data_r_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_r{1}));
data_g_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_g{1}));
disp('Creating Big Data Set..');
for i = 1:numberGreen
data_r_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_r{i};
data_r{i} = [];
data_g_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_g{i};
data_g{i} = [];
end

%calculate quality plot
reference = mean(data_r_array, 3);
qualityPlot = zeros(1,size(data_r_array, 3));
parfor i = 1:size(data_r_array,3)
qualityPlot(i) = sqrt(squeeze(mean(mean((cast(data_r_array(:,:,i),'like', reference) - reference).^2,1),2)));
end
figure('Name','Quality Plot');
plot(qualityPlot);
for i=1:numberGreen
vline(numFrameList(i), 'black', greenFiles(i).name);
end
title('Quality Of Shift Correction');
xlabel('frame');
ylabel('std of frame');
%% export complete files
disp('Saving Big Data Set..');
options.big = true;
saveastiff(data_r_array, [outFolder filesep 'complete_r.tif'], options);
saveastiff(data_g_array, [outFolder filesep 'complete_g.tif'], options);
%% Finished
clear all
disp('Finished Complete Script!!!');
2 changes: 1 addition & 1 deletion functions/trialAlignmentScript_Leona.m
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
inFolder = 'D:\data\Leona';
outFolder = 'D:\data\out';
binningFactor = [1, 1, 2];
nSubIm = 10;
nSubIm = 100;



190 changes: 190 additions & 0 deletions functions/trialAlignmentScript_alignOnGreen_Leona.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
clear all
close all
clc
%% Load Trial Files
inFolder = 'D:\data\Leona';
outFolder = 'D:\data\out';
binningFactor = [1, 1, 2];
nSubIm = 100;



%% load single tif files of trials to ram
%operations
currentFolder = pwd;
cd(inFolder);
folders = dir;

for k = length(folders):-1:1
% remove non-folders
if ~folders(k).isdir
folders(k) = [ ];
continue
end
% remove folders starting with .
fname = folders(k).name;
if fname(1) == '.'
folders(k) = [ ];
end
end

numFolders = length(folders);

%iterate through all folders
for f = 1:numFolders
%go into folder
cd(inFolder);
cd(folders(f).name);
greenFiles = dir('ChanA_*_*.tif');
redFiles = dir('ChanB_*_*.tif');
%check if fileNumber is the same
if size(greenFiles, 1) ~= size(redFiles, 1)
error(['Unequal number of files in trial folder "', folders(f).name, '"!!']);
end
numFiles = size(greenFiles, 1);

%load first red frame to get resolution and being able to preallocate
temp = readTiffNoStack(redFiles(1).name);
res = size(temp);

%preallocate data_r
data_r = zeros(res(1), res(2), numFiles);
data_g = zeros(res(1), res(2), numFiles);
%load data
disp(['Loading Files In Folder ', folders(f).name]);
parfor i=1:numFiles
data_r(:,:,i) = readTiffNoStack(redFiles(i).name);
data_g(:,:,i) = readTiffNoStack(greenFiles(i).name);
end

disp(['Shift Correction Of Files In Folder ', folders(f).name]);
%do the shift correction
[rs, cs] = medAlign(data_g, nSubIm, 50, -inf);

%shift red and green channel
disp(['Shift Data Arrays Of Files In Folder ', folders(f).name]);
parfor i = 1:numFiles
data_r(:,:,i) = circshift(data_r(:,:,i),[rs(i),cs(i)]);
data_g(:,:,i) = circshift(data_g(:,:,i),[rs(i),cs(i)]);
end

%save stacks in memory
cd(outFolder);
disp(['Write Files Of Folder ', folders(f).name ' in ' outFolder ' to RAM']);
data_r_complete{f} = data_r;
data_g_complete{f} = data_g;
end

disp('Finished Shift Correction And Fusing Of Data!');
%go back to old current folder
cd(currentFolder);
clear data_r data_g
data_r = data_r_complete;
data_g = data_g_complete;
clear data_r_complete data_g_complete
%% shift correct trials to each other
%do shift correction
disp('Performing Shift Correction On All Trials..');
reference = median(data_g{1},3);
numberGreen = size(data_g,2);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
medianProj = median(data_g{i},3);
shiftVector = findshift(reference, medianProj, 'iter', 0, 0.25*size(reference,1));
%shift frames
for f = 1:size(data_r{i},3)
data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
%% do another med align
for j =1:numberGreen
disp(['Working on Trial ' num2str(j)]);
[rs, cs] = medAlign(data_g{j}, nSubIm, 50, -inf);
temp_r = data_r{j};
temp_g = data_g{j};
%shift red and green channel
parfor f = 1:size(data_g{j},3)
temp_r(:,:,f) = circshift(temp_r(:,:,f),[rs(f),cs(f)]);
temp_g(:,:,f) = circshift(temp_g(:,:,f),[rs(f),cs(f)]);
end
data_r{j} = temp_r;
data_g{j} = temp_g;
end
%% do another shift correction for every frame, takes some time
reference = median(data_g{1},3);
numberGreen = size(data_g,2);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
for f = 1:size(data_r{i},3)
shiftVector = findshift(reference, data_g{j}(:,:,f), 'iter',0, 0.25*size(reference,1));
%shift frames

data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
%% do another shift correctionto align trials to each other
reference = median(data_g{1},3);
numberGreen = size(data_g,2);
for i = 1:numberGreen
disp(['Working on Trial ' num2str(i)]);
medianProj = median(data_g{i},3);
shiftVector = findshift(reference, medianProj, 'iter',0, 0.25*size(reference,1));
%shift frames
for f = 1:size(data_r{i},3)
data_r{i}(:,:,f) = imtranslate(data_r{i}(:,:,f),shiftVector', 'linear');
data_g{i}(:,:,f) = imtranslate(data_g{i}(:,:,f),shiftVector', 'linear');
end
end
%% save tiff files
parfor i=1:numberGreen
%binning
data_r{i} = uint16(binning(data_r{i}, binningFactor, 'mean'));
data_g{i} = uint16(binning(data_g{i}, binningFactor, 'mean'));

saveastiff(data_r{i}, [outFolder filesep folders(i).name '_r.tif']);
saveastiff(data_g{i}, [outFolder filesep folders(i).name '_g.tif']);
end
%% generate quality plot
%put them in single arrays
numFrames = 0;
numFrameList = zeros(1,numberGreen);
for i = 1:numberGreen
numFrames = numFrames + size(data_g{i},3);
numFrameList(i+1) = numFrames;
end

%preallocate data
data_r_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_r{1}));
data_g_array = zeros(size(data_g{i},1),size(data_g{i},2),numFrames, class(data_g{1}));
disp('Creating Big Data Set..');
for i = 1:numberGreen
data_r_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_r{i};
data_r{i} = [];
data_g_array(:,:,(numFrameList(i)+1):numFrameList(i+1)) = data_g{i};
data_g{i} = [];
end

%calculate quality plot
reference = mean(data_r_array, 3);
qualityPlot = zeros(1,size(data_r_array, 3));
parfor i = 1:size(data_r_array,3)
qualityPlot(i) = sqrt(squeeze(mean(mean((cast(data_r_array(:,:,i),'like', reference) - reference).^2,1),2)));
end
figure('Name','Quality Plot');
plot(qualityPlot);
for i=1:numberGreen
vline(numFrameList(i), 'black', greenFiles(i).name);
end
title('Quality Of Shift Correction');
xlabel('frame');
ylabel('std of frame');
%% export complete files
disp('Saving Big Data Set..');
options.big = true;
saveastiff(data_r_array, [outFolder filesep folders(i).name '_complete_r.tif'], options);
saveastiff(data_g_array, [outFolder filesep folders(i).name '_complete_g.tif'], options);
%% Finished
clear all
disp('Finished Complete Script!!!');
3 changes: 3 additions & 0 deletions main.m
Original file line number Diff line number Diff line change
@@ -21,6 +21,9 @@
% fn_red = 'data_r.tif';
% data_g = readTiff(fn_green);
% data_r = readTiff(fn_red);
%% load files from alignment script
outFolder = 'D:\data\out';
[data_g, data_r, frames, fn_green, fn_red, fileNamesGreen, fileNamesRed] = CellSortLoadFilesFromAlignmentScript(outFolder);
%% Crop Data
%If you want to crop the data to get rid of the shift correction artifacts,
%type in the intervals of pixels in x and y directions you want to keep and

0 comments on commit f16fcdd

Please sign in to comment.