| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | function [filelistAXIAL,xlocationAXIAL,ylocationAXIAL,zlocationAXIAL,change,user_option] = dicomrt_loadctlist(filename)% dicomrt_loadctlist(filename)%% Parse CT data set specified in filename. If more than one study are found within the CT data set% the user can select a study and dicomrt_loadctlist return a filelist and x,y,z coordinates of the% selected CT subset%% filename contains a list of CT slices to import%% change is 1 if any change to the filelist have been done, 0 otherwise% user_option is 1 if the user select not to continue with the program, 0 otherwise%% Example:% [list,x,y,z,change,user_option]=dicomrt_loadctlist(filename)%% with filename containint the following:% ct1 (group1)% ct2 (group2)% ct3 (group1)% ct4 (group2)%% if the user select one of them (e.g. group1):% list= contain only ct1 and ct3,% x= xlocation of ct1 and ct3 ,% y= ylocation of ct1 and ct3 ,% z= zlocation of ct1 and ct3 ,% change= 1,% user_option= 0%% See also dicomrt_loaddose dicomrt_loadct dicomrt_sortct%% Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org)% Retrieve the number of imagesnlines=dicomrt_nASCIIlines(filename);% Get CT images and create 3D Volumefid=fopen(filename);nct=0;counter=0;% Initialize variablefilelist=' ';studyUIDlist=' ';listUID=' ';imagetype=' ';user_option=0;% Progress barh = waitbar(0,['Loading progress:']);set(h,'Name','dicomrt_loadctlist: loading CT objects tags');%loop until the end-of-file is reached and build 3D CT matrixwhile (feof(fid)~=1);    nct=nct+1; % counting    nctcheck=nct; % check for eof    ct_file_location{1,nct}=fgetl(fid);    if isnumeric(ct_file_location{1,nct}), nct=nct-1, break, end %end of line reached    dictFlg = checkDictUse;    if dictFlg        info_temp=dicominfo(ct_file_location{1,nct}, 'dictionary', 'ES - IPT4.1CompatibleDictionary.mat');    else        info_temp=dicominfo(ct_file_location{1,nct});    end    xlocation(nct)=info_temp.ImagePositionPatient(1);    ylocation(nct)=info_temp.ImagePositionPatient(2);    zlocation(nct)=info_temp.ImagePositionPatient(3);    xlocation=xlocation';    ylocation=ylocation';    zlocation=zlocation';    filelist=char(filelist,info_temp.Filename);    if isfield(info_temp,'ImageType')~=1        warning('dicomrt_loadctlist: no DICOM ImageType was found. Assuming AXIAL CT Images');        imagetype='AXIAL';    else        imagetype=char(imagetype,info_temp.ImageType);    end    listUID=char(listUID,info_temp.StudyInstanceUID);    studyUID=info_temp.StudyInstanceUID;    if isequal(studyUID, studyUIDlist(size(studyUIDlist,1),:))==0        studyUIDlist=char(studyUIDlist,studyUID);    end    waitbar(nct/nlines,h);endfilelist(1,:)=[];studyUIDlist(1,:)=[];listUID(1,:)=[];imagetype(1,:)=[];if size(studyUIDlist,1)>=2    change=1;    disp(' ');    warning([int2str(size(studyUIDlist,1)),' studies was found among the ct slices you want to import']);    disp(' ');    leave = input('Do you want to leave (Y/N) ? [N] ','s');    if leave == 'Y' | leave == 'y';        user_option=1;        return    else        disp('Available studies:');        for j=1:size(studyUIDlist,1)            disp([int2str(j), ' - ', studyUIDlist(j,:)]);        end        chooseUID = input(['Select a study to be imported from 1 to ',int2str(size(studyUIDlist,1)),': ']);        if isempty(chooseUID)==1 | isnumeric(chooseUID)~=1 | chooseUID>size(studyUIDlist,1)            error('dicomrt_loadctlist: There is no default to this answer or the number to entered is invalid. Exit now !');            user_option=1;        else            filelistUID=' ';            imagetypeUID=' ';            for k=1:size(filelist,1)                if listUID(k,:)==studyUIDlist(chooseUID,:);                    counter=counter+1;                    filelistUID=char(filelistUID,filelist(k,:));                    imagetypeUID=char(imagetypeUID,imagetype(k,:));                    xlocationUID(counter)=xlocation(k);                    ylocationUID(counter)=ylocation(k);                    zlocationUID(counter)=zlocation(k);                end            end            filelistUID(1,:)=[];            imagetypeUID(1,:)=[];            counter=0; % reset counter        end    endelse    filelistUID=filelist;    imagetypeUID=imagetype;    xlocationUID=xlocation;    ylocationUID=ylocation;    zlocationUID=zlocation;end% Check for scout images (not AXIAL)imagetypeAXIAL=' ';filelistAXIAL=' ';for i=1:size(filelistUID,1)    if isempty(findstr('AXIAL',imagetypeUID(i,:)))==1 % Scout image found        disp(['The following image :',filelistUID(i,:),' is not AXIAL. Skipped ...']);        change=1; % just make sure we return alterations to the filelist    else        counter=counter+1;        imagetypeAXIAL=char(imagetypeAXIAL,imagetypeUID(i,:));        filelistAXIAL=char(filelistAXIAL,filelistUID(i,:));        xlocationAXIAL(counter)=xlocationUID(i);        ylocationAXIAL(counter)=ylocationUID(i);        zlocationAXIAL(counter)=zlocationUID(i);    endendif exist('change')~=1    change=0;endfilelistAXIAL(1,:)=[];imagetypeAXIAL(1,:)=[];if change ==1 % export changes to file    newfilename=[filename,'.sort.txt'];    newfile=fopen(newfilename,'w');    for i=1:size(filelistAXIAL,1)        fprintf(newfile,'%c',deblank(filelistAXIAL(i,:))); fprintf(newfile,'\n');    end    disp(['A new file list has been written by dicomrt_loadctlist with name: ',newfilename]);    disp('This file will be used to import ct data instead');    fclose(newfile);end% Close progress barclose(h);clear info_temp
 |