diff --git a/ShoulderCase/@ShoulderCaseAnonymiser/ShoulderCaseAnonymiser.m b/ShoulderCase/@ShoulderCaseAnonymiser/ShoulderCaseAnonymiser.m deleted file mode 100644 index dc5a793..0000000 --- a/ShoulderCase/@ShoulderCaseAnonymiser/ShoulderCaseAnonymiser.m +++ /dev/null @@ -1,163 +0,0 @@ -classdef ShoulderCaseAnonymiser < handle - - - properties (Access = private) - SCasePath - failedRenaming = {}; - - amiraFiles - failedAmiraAnonymisation = {} - - dicomFiles - failedDicomAnonymisation = {} - - IPPFiles - - fullAnonymisationRunned = false - end - - - methods - function obj = ShoulderCaseAnonymiser(SCasePath) - obj.setCase(string(SCasePath)); - end - - function output = getProperties(obj) - output.SCasePath = obj.SCasePath; - output.fullAnonymisationRunned = obj.fullAnonymisationRunned; - output.failedAmiraAnonymisation = obj.failedAmiraAnonymisation; - output.failedDicomAnonymisation = obj.failedDicomAnonymisation; - output.failedRenaming = obj.failedRenaming; - output.amiraFiles = obj.amiraFiles; - output.dicomFiles = obj.dicomFiles; - output.IPPFiles = obj.IPPFiles; - end - - function setCase(obj,SCasePath) - obj.SCasePath = SCasePath; - - obj.amiraFiles = obj.getFilesInSubfolders("*.hx"); - obj.dicomFiles = obj.getFilesInSubfolders("*.dcm"); - end - - function output = getFilesInSubfolders(obj,filePattern) - filesPath = dir(fullfile(obj.SCasePath,"**",filePattern)); - filesPath = fullfile(string({filesPath.folder}),string({filesPath.name})); - output = filesPath; - end - - function fullAnonymisation(obj) - obj.anonymiseDicomFiles(); - obj.anonymiseAmiraFiles(); - obj.anonymiseCTFolders(); - obj.anonymiseIPPFiles(); - if isempty(obj.failedAmiraAnonymisation) & isempty(obj.failedDicomAnonymisation) & isempty(obj.failedRenaming) - obj.renameFileOrFolder(obj.SCasePath,obj.anonymiseFilename(obj.SCasePath)); - end - obj.fullAnonymisationRunned = true; - end - - function anonymiseDicomFiles(obj) - % arrayfun(@(filename)obj.anonymiseDicomFile(filename),obj.dicomFiles); - arrayfun(@(filename)obj.renameFileOrFolder(filename,obj.anonymiseFilename(filename)),obj.dicomFiles); - end - end - - - methods (Access = private) - function anonymiseDicomFile(obj,filename) - fieldToKeep = ["PatientAge","PatientSex","PatientSize","PatientWeight"]; - try - dicomanon(filename,filename,"keep",fieldToKeep); - catch ME - obj.failedDicomAnonymisation{end+1,1} = ME; - obj.failedDicomAnonymisation{end,2} = filename; - end - end - - function output = anonymiseFilename(obj,filename) - [folder,name,extension] = fileparts(filename); - output = fullfile(folder,obj.anonymiseString(name) + extension); - end - - function output = anonymiseString(obj,inputString) - inputString = regexprep(inputString,"[-_]" + obj.getIPP + "[-_][A-Z]{2}",''); % remove IPP with initials - inputString = regexprep(inputString,"[-_]" + obj.getIPP,''); % remove IPP - output = inputString; - end - end - - - methods - function output = getIPP(obj) - [~,SCaseFolder,~] = fileparts(obj.SCasePath); - IPP = extractAfter(SCaseFolder,"-"); - output = IPP; - end - - function anonymiseAmiraFiles(obj) - arrayfun(@(filename)obj.anonymiseAmiraFile(filename),obj.amiraFiles); - end - end - - - methods (Access = private) - function anonymiseAmiraFile(obj,filename) - try - lines = obj.readlines(filename); - anonymisedLines = obj.anonymiseString(lines); - obj.writelines(filename,anonymisedLines); - catch ME - obj.failedAmiraAnonymisation{end+1,1} = ME; - obj.failedAmiraAnonymisation{end,2} = filename; - end - end - - function output = readlines(obj,filename) - lines = []; - fid = fopen(filename,"r"); - while(not(feof(fid))) - lines = [lines ; string(fgetl(fid))]; - end - fclose(fid); - output = lines; - end - - function writelines(obj,filename,lines) - fid = fopen(filename,"w"); - arrayfun(@(line)fprintf(fid,line + "\n"),lines); - fclose(fid); - end - end - - - methods - function anonymiseCTFolders(obj) - CTFolders = obj.getFilesInSubfolders("CT*"); - arrayfun(@(foldername)obj.renameFileOrFolder(foldername,obj.anonymiseFilename(foldername)),CTFolders); - end - - function anonymiseIPPFiles(obj) - obj.IPPFiles = obj.getFilesInSubfolders("*" + obj.getIPP() + "*"); - arrayfun(@(filename)obj.renameFileOrFolder(filename,obj.anonymiseFilename(filename)),obj.IPPFiles); - end - end - - - methods (Access = private) - function renameFileOrFolder(obj,currentPath,newPath) - if currentPath == newPath - return - end - try - movefile(currentPath,newPath); - catch ME - obj.failedRenaming{end+1,1} = ME; - obj.failedRenaming{end,2} = currentPath; - obj.failedRenaming{end,3} = newPath; - end - end - end - - -end \ No newline at end of file diff --git a/anonymiseDatabase.m b/anonymiseDatabase.m deleted file mode 100644 index 0091b21..0000000 --- a/anonymiseDatabase.m +++ /dev/null @@ -1,27 +0,0 @@ -function anonymiseDatabase() - logger = Logger('anonymiseDatabase_dataDev'); - Timer.start(); - database = ShoulderCaseLoader(); - database.setDataRootPath(fullfile(filesep,'shoulder','dataDev')); - - AllSCaseID = string(database.getAllCasesID); - anonymisers = []; - for SCaseID = AllSCaseID - Timer.start(); - logger.newDelimitedSection(sprintf('Anonymisation of %s: ',SCaseID)); - try - currentAnonymiser = ShoulderCaseAnonymiser(database.getCasePath(SCaseID)); - currentAnonymiser.fullAnonymisation(); - logger.logn('Done in %s',Timer.stop()); - catch ME - logger.logn('Failed after %s',Timer.stop()); - logger.logn('ERROR: %s',ME.message); - end - logger.closeBlock(); - anonymisers = [anonymisers ; currentAnonymiser.getProperties()]; - save('anonymisers.mat','anonymisers'); - end - - logger.logn('The whole anonymisation ran in: %s',Timer.stop()); - logger.closeLog(); -end