diff --git a/degenerationAll.m b/degenerationAll.m index 0aa43e1..f29e5f5 100644 --- a/degenerationAll.m +++ b/degenerationAll.m @@ -1,99 +1,99 @@ function degenerationAll(caseID, musclesList) %#ok %%DEGENERATIONALL fills the Shoulder database with muscle degeneration measurements % % This function fills the Shoulder database with the muscle degeneration % values of the case given as input. The measurements are stored in a XLS % file. % % USE: degenerationAll(caseID, musclesList) % % INPUT caseID: Case IDs for which you want to compute muscle degeneration. % Cell array that stores the case IDs as a char in the form 'P###' or % 'N###' (starts with "P" or "N" followed by 1 to 3 digits). % % musclesList: List of muscles which you want to compute muscle % degeneration. Cell array that stores each msucle name as a char. % % REMARKS The muscle values are saved in the muscles.xls file. % % created with MATLAB ver.: 9.2.0.556344 (R2017a) on Windows 7 % Author: EPFL-LBO-VMC % Date: 12-Jun-2017 % CTDatabaseLocation = 'Z://data'; % Location of the CT database HUThresholdMuscle = 0; %#ok HUThresholdFat = 30; %#ok - HUThresholdOsteochondroma = 166.25; %#ok + HUThresholdOsteochondroma = 166; %#ok % Check validity of input argument (cell array) validateattributes(caseID,{'cell'},{'nonempty'}); % Check that imput case IDs are unique [caseIDNames,~,uniqueCaseID] = unique(caseID); countOfCaseID = hist(uniqueCaseID,unique(uniqueCaseID))'; freqCaseIDs = struct('name',caseIDNames,'freq',num2cell(countOfCaseID)); repeatedValues = find([freqCaseIDs.freq] > 1); if(~isempty(repeatedValues)) warning('Input contains repeated Case ID: %s. Repeated occurences of that Case ID will be omitted. \n', freqCaseIDs(repeatedValues).name) caseID = caseIDNames'; end % Compute muscle degeneration values and fill database for i = 1:length(caseID) % Check validity of input arguments (char and format 'P###' or 'N###') validateattributes(caseID{i},{'char'},{'nonempty'}); if (numel(regexp(caseID{i},'^[PN]\d{1,3}$')) == 0) error(['Invalid format of CaseID: ' caseID{i} '. CaseID must start with "P" or "N" and be followed by 1 to 3 digits.']); end % Find CT folder for the given Case ID levelDir1 = caseID{i}(1); if (length(caseID{i}(2:end)) < 2) levelDir2 = '0'; levelDir3 = '0'; elseif (length(caseID{i}(2:end)) < 3) levelDir2 = '0'; levelDir3 = caseID{i}(2); else levelDir2 = caseID{i}(2); levelDir3 = caseID{i}(3); end FindCaseCTFolder = dir([CTDatabaseLocation '/' levelDir1 '/' levelDir2 '/' levelDir3 '/' caseID{i} '*']); if (isempty(FindCaseCTFolder)) error(['Missing CT directory for CaseID: ' caseID{i}]); end CaseID_IPP = FindCaseCTFolder.name; CaseCTFolder = [CTDatabaseLocation '/' levelDir1 '/' levelDir2 '/' levelDir3 '/' CaseID_IPP]; % Compute musle degeneration values and store in the XLS database if exist([CaseCTFolder '/CT-' CaseID_IPP '-1/muscles'],'dir') == 7 %if a folder "muscles" exist, the patient name is added to the "measured" column muscleDirectory = [CaseCTFolder '/CT-' CaseID_IPP '-1/muscles']; %#ok muscles_results = struct('CT_id', caseID{i}); %#ok for j=1:length(musclesList) disp(caseID{i}); % Compute muscle degeneration values eval([musclesList{j} '= muscleDegeneration(caseID{i}, musclesList{j},HUThresholdMuscle,HUThresholdFat,HUThresholdOsteochondroma,muscleDirectory);']); eval(['muscles_results = setfield(muscles_results, musclesList{j}, ' musclesList{j} ');']); end else error(['"muscles" folder missing for CaseID: ' caseID{i}]); end end end