123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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);
|