Skip to content

Commit

Permalink
Merge pull request #59 from bahanonu/bahanonu/functionUpdates
Browse files Browse the repository at this point in the history
README update, image/signal loading streamline, etc.
  • Loading branch information
bahanonu authored Dec 18, 2020
2 parents 2633ca6 + 385b9c0 commit 5fd5898
Show file tree
Hide file tree
Showing 11 changed files with 202 additions and 135 deletions.
4 changes: 2 additions & 2 deletions +ciapkg/version.m
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
%========================

try
versionStr = 'v3.21.2';
dateTimeStr = '20201117211648';
versionStr = 'v3.21.4';
dateTimeStr = '20201218011005';
catch err
disp(repmat('@',1,7))
disp(getReport(err,'extended','hyperlinks','on'));
Expand Down
2 changes: 1 addition & 1 deletion @calciumImagingAnalysis/computeManualSortSignals.m
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@
if ~isempty(previousDecisionList)
display(['loading previous decisions: ' previousDecisionList{1}])
load(previousDecisionList{1});
valid = validCNMF;
valid = validCNMFE;
end
end
% valid = obj.validAuto{obj.fileNum};
Expand Down
194 changes: 98 additions & 96 deletions @calciumImagingAnalysis/modelGetSignalsImages.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
% 2017.01.14 [20:06:04] - support switched from [nSignals x y] to [x y nSignals]
% 2020.04.16 [19:59:43] - Small fix to NWB file checking.
% 2020.05.12 [18:02:04] - Update to make sure inputSignals2 with NWB.
% 2020.12.08 [01:14:09] - Reorganized returnType to be outside raw signals flag, so common filtering mechanism regardless of variables loaded into RAM or not. This fixes if a user loads variables into RAM then uses cross-session alignment, the viewMatchObjBtwnSessions method may not display registered images (cross-session alignment is still fine and valid).
% TODO
% Give a user a warning() output if there are no or empty cell-extraction outputs

Expand Down Expand Up @@ -558,100 +559,10 @@
obj.nFrames{thisFileNum} = size(inputSignals,2);
end
end

% if exist('inputSignals','var')
if ~isempty(inputSignals)
if isempty(obj.signalPeaksArray{thisFileNum})
signalPeaks = [];
signalPeaksArray = [];
else
signalPeaksArray = obj.signalPeaksArray{thisFileNum};
signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
display('creating signalPeaks...')
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = obj.signalPeaks{thisFileNum};
end
switch options.returnType
case 'raw'

case 'filtered'
inputSignals = inputSignals(valid,:);
if ~isempty(inputSignals2)
inputSignals2 = inputSignals2(valid,:);
end
signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{valid}};
% signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
signalPeaks = zeros([length(signalPeaksArray) obj.nFrames{thisFileNum}]);
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = signalPeaks(valid,:);
case 'filteredAndRegistered'
inputSignals = inputSignals(valid,:);
if ~isempty(inputSignals2)
inputSignals2 = inputSignals2(valid,:);
end
% inputImages = IcaFilters(valid,:,:);
signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{valid}};

% signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
signalPeaks = zeros([length(signalPeaksArray) obj.nFrames{thisFileNum}]);
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = signalPeaks(valid,:);
otherwise
% body
end
display(['signalPeaks: ' num2str(size(signalPeaks))])
% obj.nFrames{thisFileNum} = size(inputSignals,2);
% obj.nSignals{thisFileNum} = size(inputSignals,1);
end


% if exist('inputImages','var')
if ~isempty(inputImages)
switch options.returnType
case 'raw'

case 'filtered'
inputImages = inputImages(:,:,valid);
case 'filteredAndRegistered'
inputImages = inputImages(:,:,valid);
% register images based on manual registration if performed

% register images based on cross session alignment
globalRegCoords = obj.globalRegistrationCoords.(obj.subjectStr{thisFileNum});
if ~isempty(globalRegCoords)
display('registering images')
% get the global coordinate number based
% globalRegCoords = globalRegCoords{strcmp(obj.assay{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
% globalRegCoords = globalRegCoords{strcmp(obj.date{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
% globalRegCoords = globalRegCoords{strcmp(obj.folderBaseSaveStr{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
globalRegCoords = globalRegCoords{strcmp(obj.folderBaseSaveStrUnique{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};

if ~isempty(globalRegCoords)
% inputImages = permute(inputImages,[2 3 1]);
for iterationNo = 1:length(globalRegCoords)
fn=fieldnames(globalRegCoords{iterationNo});
for i=1:length(fn)
localCoords = globalRegCoords{iterationNo}.(fn{i});
% playMovie(inputImages);
[inputImages, localCoords] = turboregMovie(inputImages,'precomputedRegistrationCooords',localCoords);
end
end
% inputImages = permute(inputImages,[3 1 2]);
end
end
otherwise
% body
end
end
else
display('Using variables in ram')
inputSignals = obj.rawSignals{thisFileNum}(:,:);
inputSignals2 = inputSignals;
inputImages = obj.rawImages{thisFileNum}(:,:,:);
signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{:}};
% signalPeaks = obj.signalPeaks{thisFileNum}(valid,:);
Expand All @@ -660,19 +571,110 @@
for signalNo = 1:obj.nSignals{thisFileNum}
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% switch options.returnType
% case 'raw'

% case 'filtered'
% inputSignals = obj.rawSignals{thisFileNum}(valid,:);
% inputImages = obj.rawImages{thisFileNum}(:,:,valid);
% signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{valid}};
% signalPeaks = signalPeaks(valid,:);
% otherwise
% % body
% end
obj.nFrames{thisFileNum} = size(inputSignals,2);
obj.nSignals{thisFileNum} = size(inputSignals,1);
end

% if exist('inputSignals','var')
if ~isempty(inputSignals)
if isempty(obj.signalPeaksArray{thisFileNum})
signalPeaks = [];
signalPeaksArray = [];
else
signalPeaksArray = obj.signalPeaksArray{thisFileNum};
signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
display('creating signalPeaks...')
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = obj.signalPeaks{thisFileNum};
end
switch options.returnType
case 'raw'

case 'filtered'
inputSignals = obj.rawSignals{thisFileNum}(valid,:);
inputImages = obj.rawImages{thisFileNum}(:,:,valid);
inputSignals = inputSignals(valid,:);
if ~isempty(inputSignals2)
inputSignals2 = inputSignals2(valid,:);
end
signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{valid}};
% signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
signalPeaks = zeros([length(signalPeaksArray) obj.nFrames{thisFileNum}]);
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = signalPeaks(valid,:);
case 'filteredAndRegistered'
inputSignals = inputSignals(valid,:);
if ~isempty(inputSignals2)
inputSignals2 = inputSignals2(valid,:);
end
% inputImages = IcaFilters(valid,:,:);
signalPeaksArray = {obj.signalPeaksArray{thisFileNum}{valid}};
signalPeaks = signalPeaks(valid,:);

% signalPeaks = zeros([obj.nSignals{thisFileNum} obj.nFrames{thisFileNum}]);
signalPeaks = zeros([length(signalPeaksArray) obj.nFrames{thisFileNum}]);
for signalNo = 1:length(signalPeaksArray)
signalPeaks(signalNo,obj.signalPeaksArray{thisFileNum}{signalNo}) = 1;
end
% signalPeaks = signalPeaks(valid,:);
otherwise
% body
end
display(['signalPeaks: ' num2str(size(signalPeaks))])
% obj.nFrames{thisFileNum} = size(inputSignals,2);
% obj.nSignals{thisFileNum} = size(inputSignals,1);
end


% if exist('inputImages','var')
if ~isempty(inputImages)
switch options.returnType
case 'raw'

case 'filtered'
inputImages = inputImages(:,:,valid);
case 'filteredAndRegistered'
inputImages = inputImages(:,:,valid);
% register images based on manual registration if performed

% register images based on cross session alignment
globalRegCoords = obj.globalRegistrationCoords.(obj.subjectStr{thisFileNum});
if ~isempty(globalRegCoords)
display('registering images')
% get the global coordinate number based
% globalRegCoords = globalRegCoords{strcmp(obj.assay{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
% globalRegCoords = globalRegCoords{strcmp(obj.date{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
% globalRegCoords = globalRegCoords{strcmp(obj.folderBaseSaveStr{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};
globalRegCoords = globalRegCoords{strcmp(obj.folderBaseSaveStrUnique{thisFileNum},obj.globalIDFolders.(obj.subjectStr{thisFileNum}))};

if ~isempty(globalRegCoords)
% inputImages = permute(inputImages,[2 3 1]);
for iterationNo = 1:length(globalRegCoords)
fn=fieldnames(globalRegCoords{iterationNo});
for i=1:length(fn)
localCoords = globalRegCoords{iterationNo}.(fn{i});
% playMovie(inputImages);
[inputImages, localCoords] = turboregMovie(inputImages,'precomputedRegistrationCooords',localCoords);
end
end
% inputImages = permute(inputImages,[3 1 2]);
end
end
otherwise
% body
end
obj.nFrames{thisFileNum} = size(inputSignals,2);
obj.nSignals{thisFileNum} = size(inputSignals,1);
end

if options.filterTraces==1
Expand Down
Loading

0 comments on commit 5fd5898

Please sign in to comment.