diff --git a/measureSCase.m b/measureSCase.m index f99263d..d171a22 100755 --- a/measureSCase.m +++ b/measureSCase.m @@ -1,109 +1,135 @@ function output = measureScase(varargin) scriptTimer = 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) SCaseTimer = 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(SCaseTimer))); Logger.closeBlock(); end % Save results if config.saveMeasurements - arrayfun(@(SCase) SCase.saveMatlab, SCases); + saveMeasurements(SCases, casesToMeasure); end Logger.newDelimitedSection(... sprintf("Whole measureSCase() ran in %s", Timer.stop(scriptTimer))); Logger.stop(); output = SCases; end function runShoulderMeasurements(shoulder) shoulderTimer = 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(shoulderTimer))); 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 + Logger.logn(ME.message); + end end \ No newline at end of file