function [change,error_handle]=dicomrt_sortct(filelist,xlocation,ylocation,zlocation,filename) % dicomrt_sortct(filelist,xlocation,ylocation,zlocation,filename) % % Sort CT data set specified in filename. % % See also dicomrt_loaddose, dicomrt_loadct, dicomrt_loadctlist % % Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org) % Set parameters counter=0; error_handle=0; match=0; % sort ct slices with respect to their z location [zlocation_sorted,sorted_index]=sort(zlocation); % Progress bar h = waitbar(0,['Sorting progress:']); set(h,'Name','dicomrt_sortct: sorting CT images'); diff_location=dicomrt_mmdigit(zlocation_sorted-zlocation,6); if find(diff_location) % ct slices are not sorted disp('Message: slices are not sorted!'); change=1; % sort filelist accordingly filelist_sorted=' '; for i=1:length(sorted_index) counter=counter+1; filelist_sorted=char(filelist_sorted,filelist(sorted_index(i),:)); xlocation_sorted(i)=xlocation(sorted_index(i)); ylocation_sorted(i)=ylocation(sorted_index(i)); waitbar(i/length(sorted_index),h); end xlocation_sorted=xlocation_sorted'; ylocation_sorted=ylocation_sorted'; filelist_sorted(1,:)=[]; disp('Message: ct slices are now sorted!'); % finds duplicates duplicate_index=0; [duplicate]=diff(zlocation_sorted); [duplicate_index]=find(duplicate==0); if length(duplicate_index)~=0 warning('dicomrt_sortct: Images with the same zlocation were found. You can exit now or proceed to delete duplicates.'); leaveoption=input('Exit now ? (Y/N) [N]','s'); if leaveoption == 'Y' | leaveoption == 'y'; disp('OK. Check your file list and try again. '); error_handle=1;return; else duplicates_name=' '; filelist_sorted_scrub=' '; for i=1:length(duplicate_index) duplicates_name=char(duplicates_name,filelist_sorted(duplicate_index(i),:)); filelist_sorted(duplicate_index(i),1:10)='duplicate-'; % mark duplicates xlocation_sorted(duplicate_index(i))=pi; ylocation_sorted(duplicate_index(i))=pi; end for i=1:length(filelist_sorted) if isequal(filelist_sorted(i,1:10),'duplicate-')~=1 filelist_sorted_scrub=char(filelist_sorted_scrub,filelist_sorted(i,:)); else end end % at this point duplicates are deleted in new filelist filelist_sorted_scrub(1,:)=[]; disp('The following duplicates has been deleted from file list:'); duplicates_name(1,:)=[]; duplicates_name % % now sorting xlocation and ylocation accordingly to what done before % (prepare for scout images identification) % for i=1:length(xlocation_sorted) if xlocation_sorted(i)~=pi xlocation_sorted_scrub=xlocation_sorted(i); end end for i=1:length(ylocation_sorted) if ylocation_sorted(i)~=pi ylocation_sorted_scrub=ylocation_sorted(i); end end end else filelist_sorted_scrub=filelist_sorted; end % Export sorted/scrubed filelist newfilename=[filename,'.sort.txt']; newfile=fopen(newfilename,'w'); for i=1:size(filelist_sorted_scrub,1) fprintf(newfile,'%s',filelist_sorted_scrub(i,:)); fprintf(newfile,'\n'); end fclose(newfile); disp(['A new file list has been written by dicomrt_sortct with name: ',newfilename]); disp('This file will be used to import ct data instead'); else % ct slices are already sorted change=0; end % Close progress bar close(h);