Newer
Older
%% https://gitlab.rc.uab.edu/cbsmith2/transcription-save-script
Christophe Bradley Smith
committed
%% Main code
% Prepare work space
clc
Christophe Bradley Smith
committed
% Check for miscelaneous transcriptions in the work space
miscLS = who('-regexp', '^ls(([0-9]*$)|($))');
Christophe Bradley Smith
committed
newLS = CheckmiscLS(miscLS);
if ~isempty(newLS); ls = eval(newLS); end
% Search the workspace for ls and lss and check for the tracker
if ~ValidateWorkspace(ls, lss); return; end
if ~exist('remainingFiles', 'var'); remainingFiles = []; end
remainingFiles = FindRemainingFiles(ls, lss, remainingFiles);
% Transfer labels
lss = TransferLabels(ls, lss);
% Prompt user for Inits
reviewerInit = input('Please enter your initials: ', 's');
% Save latest transcription and progress
Christophe Bradley Smith
committed
uisave({'lss', 'remainingFiles', 'reviewerInit'}, '*.mat')
Christophe Bradley Smith
committed
function ls = CheckmiscLS(miscLS)
Christophe Bradley Smith
committed
if isempty(miscLS); error('No valid ls transcription file was found in the workspace. Please check that the file has been exported from the application.'); end
if length(miscLS) == 1
ls = string(miscLS);
fprintf('Variable %s will be used as the user transcription variable.\n', ls)
return
end
Christophe Bradley Smith
committed
fprintf(2, 'Warning: multiple potential ''ls'' files were found in the work space. \n\n')
nLS = length(miscLS);
Christophe Bradley Smith
committed
lsNames = string(miscLS);
Christophe Bradley Smith
committed
formatPat = '\t%i. %s\n';
Christophe Bradley Smith
committed
formattedstring = compose(formatPat, (1:nLS)', lsNames);
Christophe Bradley Smith
committed
listSet = join(formattedstring' , '');
validResp = 0:nLS;
while true
fprintf('Select the most up to date ls file by inputing a number from 0 to %i\n', nLS)
fprintf(listSet{1});
userResp = input('Resp:');
if any(ismember(validResp, userResp))
Christophe Bradley Smith
committed
fprintf('%s has been selected.\n', lsNames(userResp))
Christophe Bradley Smith
committed
break
else
Christophe Bradley Smith
committed
fprintf('%i is an invalid response.\n', userResp)
Christophe Bradley Smith
committed
end
end
Christophe Bradley Smith
committed
ls = lsNames(userResp);
Christophe Bradley Smith
committed
end
function extStatus = ValidateWorkspace(ls, lss)
if ~exist("ls", "var")
fprintf(2, 'No exported transcript found. Please export your transciription to the work space as ''ls''\n')
extStatus = false;
return
if ~exist("lss", 'var')
fprintf(2, 'The original transcription file is missing, please ensure the work you have done is saved to ''ls'' and load in the original transcription\n');
extStatus = false;
return
end
extStatus = true;
end
function remainingFiles = FindRemainingFiles(ls, lss, remainingFiles)
% Find identical labels
nFiles = lss.NumMembers;
isUntouched = false(nFiles, 1);
for i = 1:nFiles
Christophe Bradley Smith
committed
isUntouched(i) = isequal(ls.Labels.Words{i}.ROILimits, lss.Labels.Words{i}.ROILimits);
end
% Account for previosuly edited files
if ~isempty(remainingFiles)
wasPreviouslyUntouched = ~ismember(1:nFiles, remainingFiles.File_Pos);
isUntouched(wasPreviouslyUntouched) = false;
end
% Prepare output
File_Pos = find(isUntouched);
memberNames = ls.getMemberNames;
File_Name = memberNames(isUntouched);
remainingFiles = table(File_Pos, File_Name);
end
function lss = TransferLabels(ls, lss)
% Clear lss labels
resetLabelValues(lss)
% Move ls labels to lss
nTrials = height(ls.Labels);
for iTrial = 1:nTrials
Christophe Bradley Smith
committed
curROI = ls.Labels.Words{iTrial}.ROILimits;
curVal = ls.Labels.Words{iTrial}.Value;
if isempty(curROI)
continue
end
Christophe Bradley Smith
committed
setLabelValue(lss, iTrial, 'Words', curROI, curVal)
% Set sublabel Values
subLabelList = split(strtrim(extract(labelDefinitionsHierarchy(lss), regexpPattern('(?<=Sublabels:).*'))));
for curLabel = subLabelList'
setLabelValue(lss, iTrial, ["Words", string(curLabel)], ls.Labels.Words{1}.Sublabels.(curLabel{1}), 'LabelRowIndex', 1)
Christophe Bradley Smith
committed
end
%% For testing
% load('C:\Users\chris\Box\Nelson Lab Data\Other Data\NTAud Transcription\Transcript_OrigAudio_AudSentStim.mat', 'lss');
% test = load('C:\Users\chris\Box\Nelson Lab Data\Other Data\NTAud Transcription\Transcript_Version2_AudSent.mat');
% ls = test.lss;
% testpos = 6;
% resetLabelValues(lss, testpos)
% setLabelValue(lss, testpos, 'Words', ls.Labels.Words{testpos}.ROILimits, ls.Labels.Words{testpos}.Value)