diff --git a/measureSCase.m b/measureSCase.m index 2eccef3..a4681a6 100755 --- a/measureSCase.m +++ b/measureSCase.m @@ -1,136 +1,133 @@ function output = measureScase(varargin) Timer.start(); Logger.start("measureSCase"); config = getConfig(); % Initialise cases if nargin > 0 casesToMeasure = [string(varargin{:})]; else casesToMeasure = config.casesToMeasure; end if config.overwriteMeasurements SCases = createEmptySCase(casesToMeasure); else SCases = loadSCase(casesToMeasure); end % Run measurements for i = 1:length(SCases) Timer.start(); Logger.newDelimitedSection(SCases(i).id); if config.standardMeasurementsToRun.loadData Logger.logn(""); SCases(i).patient.loadData(); end if config.shouldersToMeasure.rightAuto Logger.newDelimitedSection("Shoulder Right Auto"); runShoulderMeasurements(SCases(i).shoulders.right.auto); Logger.closeSection(); end if config.shouldersToMeasure.rightManual Logger.newDelimitedSection("Shoulder Right Manual"); runShoulderMeasurements(SCases(i).shoulders.right.manual); Logger.closeSection(); end if config.shouldersToMeasure.leftAuto Logger.newDelimitedSection("Shoulder Left Auto"); runShoulderMeasurements(SCases(i).shoulders.left.auto); Logger.closeSection(); end if config.shouldersToMeasure.leftManual Logger.newDelimitedSection("Shoulder Left Manual"); runShoulderMeasurements(SCases(i).shoulders.left.manual); Logger.closeSection(); end Logger.newDelimitedSection(... sprintf("SCase measured in %s", Timer.stop())); Logger.closeBlock(); end % Save results if config.saveMeasurements saveMeasurements(SCases, casesToMeasure); end Logger.newDelimitedSection(... sprintf("Whole measureSCase() ran in %s", Timer.stop())); Logger.stop(); output = SCases; end function runShoulderMeasurements(shoulder) Timer.start(); config = getConfig(); % Basic measurements if config.standardMeasurementsToRun.loadData shoulder.loadData(); end if shoulder.isempty() Logger.logn("Not enough data loaded to perform further measurements.") return end if config.standardMeasurementsToRun.morphology shoulder.morphology(); end if config.standardMeasurementsToRun.measureFirst shoulder.measureFirst(); end if config.standardMeasurementsToRun.measureSecond shoulder.measureSecond(); end - if config.standardMeasurementsToRun.measureThird - shoulder.measureThird(); - end % Special measurements specialMeasurementNames = string(fields(config.specialMeasurementsToRun))'; for specialMeasurementName = specialMeasurementNames % Arguments parsing specialMeasurementArguments =... config.specialMeasurementsArguments.(specialMeasurementName); if isempty(specialMeasurementArguments) specialMeasurementArguments = {}; end % Recursive call a special measurement if config.specialMeasurementsToRun.(specialMeasurementName) recursiveMethodCall(shoulder, specialMeasurementName, {shoulder.SCase},... specialMeasurementArguments{:}); end end Logger.newDelimitedSection(... sprintf("Shoulder measured in %s", Timer.stop())); Logger.closeSection(); end function saveMeasurements(SCases, casesToMeasure) Timer.start(); Logger.log("Saving new measurements: ") try arrayfun(@(SCase) SCase.saveMatlab, SCases); Logger.logn("OK %s", Timer.stop()); catch ME Logger.logn(ME.message); end Timer.start(); Logger.log("Saving whole database in one file: ") try if not(isequal(casesToMeasure, "*")) SCaseDB = loadSCase("*"); else SCaseDB = SCases; end save(fullfile(getConfig().dataDir, "matlab", "SCaseDB.mat"), "SCaseDB"); Logger.logn("OK %s", Timer.stop()); catch ME Timer.stop(); Logger.logn(ME.message); end end \ No newline at end of file diff --git a/setup.m b/setup.m index 99d1de4..9cd5fbe 100644 --- a/setup.m +++ b/setup.m @@ -1,39 +1,38 @@ function setup() % to execute once after cloning the repo. createDefaultConfigFile(); addpath(genpath(pwd)); end function createDefaultConfigFile() defaultConfig.maxSCaseIDDigits = 3; defaultConfig.SCaseIDValidTypes = ["N", "P"]; defaultConfig.pythonDir = "/shoulder/methods/python/rcseg"; defaultConfig.dataDir = "/shoulder/dataDev"; defaultConfig.shouldersToMeasure.rightAuto = true; defaultConfig.shouldersToMeasure.rightManual = true; defaultConfig.shouldersToMeasure.leftAuto = true; defaultConfig.shouldersToMeasure.leftManual = true; defaultConfig.standardMeasurementsToRun.loadData = true; defaultConfig.standardMeasurementsToRun.morphology = true; defaultConfig.standardMeasurementsToRun.measureFirst = true; defaultConfig.standardMeasurementsToRun.measureSecond = true; - defaultConfig.standardMeasurementsToRun.measureThird = true; defaultConfig.specialMeasurementsToRun.sliceAndSegment = false; defaultConfig.specialMeasurementsToRun.calcDensity = false; defaultConfig.specialMeasurementsArguments.sliceAndSegment = []; defaultConfig.specialMeasurementsArguments.calcDensity = []; defaultConfig.overwriteMeasurements = false; defaultConfig.saveMeasurements = false; fid = fopen('config.json','w'); fprintf(fid, replace(jsonencode(defaultConfig), ",", ",\n")); fclose(fid); end \ No newline at end of file