%rename folder name with patient info
maindir = 'Z:\Culprit Plaque\USA'; % contains folders of each patient, MR folder in each folder, and in each MR folder is .dcm
Destdir='E:\C-Tsinghua\Culprit'; % patient name as folder name, in each starting from 1.dcm
serial='3DI_MC';
minslicenum=70;
continuenotfoundthenskip=2; %search extra number of serial, if not found times exceed this number, then skip
sourcedat={};
subdir = dir( maindir );
display(['Total: ',mat2str(numel(subdir([subdir(:).isdir]))-2),' cases with serial ',serial,' to download']);
for i = 16 : length( subdir )
sourcedat={};
if( isequal( subdir(i).name, '.' )||...
isequal( subdir(i).name, '..')||...
~subdir(i).isdir)
continue;
end
%%% IF SUBSUB dir exist
subdirpath= fullfile(maindir, subdir(i).name);
pardir=dir(subdirpath);
for par=1:length(pardir)
if( isequal( pardir(par).name, '.' )||...
isequal( pardir(par).name, '..')||...
~pardir(par).isdir)
continue;
end
display(['Sub dir: ',mat2str(par-2)]);
subdirpath=fullfile(maindir, subdir(i).name, pardir(par).name);
%%% IF SUBSUB dir exist
notfoundlastseh=0;
for seh=1:20
notfoundlastseo=0;
for seo=1:10
searchformat=['\**\MR\*S',mat2str(seh),'0',mat2str(seo),'I*.dcm'];
dat=rdir([subdirpath,searchformat]);
if ~isempty(dat)
notfoundlastseo=0;
notfoundlastseh=0;
firstdcm=fullfile(dat(1).name);
metadata=dicominfo(firstdcm);
if strcmp(metadata.SeriesDescription,serial)&& length(dat)>=minslicenum
warning(['HIT: ','Serial ',mat2str(seh),'0',mat2str(seo),': ',metadata.SeriesDescription,' *',mat2str(length(dat))]);
sourcedat=dat;
break;
else
display(['Ingore: ','Serial ',mat2str(seh),'0',mat2str(seo),': ',metadata.SeriesDescription,' *',mat2str(length(dat))]);
end
else
%display(['Not found: ','Serial ',mat2str(seh),'0',mat2str(seo)]);
notfoundlastseo=notfoundlastseo+1;
end
if notfoundlastseo==continuenotfoundthenskip
if seo==continuenotfoundthenskip
notfoundlastseh=notfoundlastseh+1;
end
break;
end
end
if ~isempty(sourcedat) || notfoundlastseh==continuenotfoundthenskip
break;
end
end
if isempty(sourcedat)
display(['No such serial in case #',mat2str(i-2)]);
continue;
end
filename = fullfile(sourcedat(1).name); % select first dcm to get metadata
metadata=dicominfo(filename);
patientname=metadata.PatientName.FamilyName;
patientsex=metadata.PatientSex;
if isfield(metadata, 'PatientAge')
patientage=str2num(metadata.PatientAge(1:end-1));
else
patientage=str2num(metadata.ContentDate(1:4))-str2num(metadata.PatientBirthDate(1:4));
end
newfoldername=[mat2str(patientage), '_', patientname, '_' , patientsex];
display(['Processing and downloading case #',mat2str(i-2),': ',newfoldername]);
n=length(sourcedat);
loc=zeros(n,2);
for j=1:n
Fullfilename=fullfile(sourcedat(j).name);
metadata=dicominfo(Fullfilename);
loc(j,:)=[j metadata.SliceLocation];
end
locasc=sortrows(loc,2);
if exist(fullfile(Destdir,newfoldername),'dir')~=7
mkdir(fullfile(Destdir,newfoldername));
end
for j=1:n
movfrom=fullfile(sourcedat(locasc(j,1)).name);
movto=fullfile(Destdir,newfoldername,[mat2str(j),'.dcm']);
%movefile(movfrom,movto);
copyfile(movfrom,movto);
end
if length(dir(subdirpath))==2
% rmdir(subdirpath);
end
%%% IF SUBSUB dir exist
if ~isempty(sourcedat)
break;
end
end
%%% IF SUBSUB dir exist
display(['----------',mat2str(i-2),'-END----------']);
end
display(['----------FINISHED----------']);