Code covered by the BSD License  

Highlights from
Siemens DICOM sort and convert to NIfTI

image thumbnail
from Siemens DICOM sort and convert to NIfTI by Simon Robinson
Converts Siemens MRI DICOM data into NIfTI format, and/or anonymises and sorts into scan directories

write_introductory_comments(data)
function write_introductory_comments(data)

warning off MATLAB:nonIntegerTruncatedInConversionToChar;

fsublist = data.fsublist;
nfiles = length(fsublist);
data.current_nfiles = nfiles;

readfile_dir = data.readfile_dir;
writefile_dir = data.current_dir;

% get info out of the first DICOM header
data.current_readfile_example=fullfile(readfile_dir,fsublist(1).name);
[res, dcminfo] = isdicomfile(data.current_readfile_example);
data.current_dcminfo = dcminfo;

%check that it is possible to write the logfile
fprintf(data.fp_scanlog, '\n');
if isvar('dcminfo.DerivationDescription')
    fprintf(data.fp_scanlog, 'This Study was Anonimised on Export \n');
    fprintf(data.fp_scanlog, 'Study name:  \n');
    fprintf(data.fp_scanlog, 'Subject ID: \n');
    fprintf(data.fp_scanlog, 'AccessionNumber: \n');
else
    fprintf(data.fp_scanlog, 'Subject Project ID: \n');
    subject_namestring = '';
    subject_initials_code = 'XXXX';
    if isvar('dcminfo.PatientName.GivenName')
        subject_name = dcminfo.PatientName.GivenName;
    else
        subject_name = '';
    end
    if isvar('dcminfo.PatientName.FamilyName')
        subject_name = [subject_name ' ' dcminfo.PatientName.FamilyName];
    end
    if isvar('dcminfo.PatientName.GivenName')
        subject_initials_code = upper(dcminfo.PatientName.GivenName(1:2:3));
    end
    if isvar('dcminfo.PatientName.FamilyName')
        subject_initials_code = [subject_initials_code upper(dcminfo.PatientName.FamilyName(1:2:3))];
    end
    %         fprintf(data.fp_scanlog, 'Subject Name: %s \n', subject_namestring);  % Not ANON!
    %        fprintf(data.fp_scanlog, 'Subject Name: %s\n', subject_initials);   % Just initials
    fprintf(data.fp_scanlog, 'Subject Name: %s\n', subject_name);   % Anon
    fprintf(data.fp_scanlog, 'Subject ID: %s \n', dcminfo.PatientID);
    fprintf(data.fp_scanlog, 'AccessionNumber: %s \n', dcminfo.AccessionNumber);
    dob_string = [dcminfo.PatientBirthDate(7:8) '/' dcminfo.PatientBirthDate(5:6) '/' dcminfo.PatientBirthDate(1:4) ];
    rough_minutes = num2str(sprintf('%02.0f', (15*floor(str2num(dcminfo.AcquisitionTime(3:4))/15))));
    time_string = [dcminfo.AcquisitionTime(1:2) rough_minutes];
    patient_code = [dcminfo.PatientBirthDate subject_initials_code '_'  dcminfo.AcquisitionDate time_string];
    fprintf(data.fp_scanlog, 'D.O.B: %s \n', dob_string);
    fprintf(data.fp_scanlog, 'Age: %s years\n', dcminfo.PatientAge(2:3));
end
date_string = [dcminfo.AcquisitionDate(7:8) '/' dcminfo.AcquisitionDate(5:6) '/' dcminfo.AcquisitionDate(1:4) ];
fprintf(data.fp_scanlog, 'Acquired on: %s\n', date_string);
fprintf(data.fp_scanlog, 'Patient code: %s\n', patient_code);
if isvar('dcminfo.DerivationDescription') == 1
    fprintf(data.fp_scanlog, 'By: (anon) : \n');
else
    if isvar('dcminfo.OperatorName.FamilyName') == 1
        fprintf(data.fp_scanlog, 'By: %s\n', dcminfo.OperatorName.FamilyName);
    else
        fprintf(data.fp_scanlog, 'By unnamed operator\n');
    end
end
if isvar('dcminfo.PatientComments') == 1
    fprintf(data.fp_scanlog, 'Comments (additional info): %s \n', dcminfo.PatientComments);
end
fprintf(data.fp_scanlog, 'Purpose of Study\n');
fprintf(data.fp_scanlog, '1:\n\n');
fprintf(data.fp_scanlog, '2:\n\n');
fprintf(data.fp_scanlog, '3:\n\n');
fprintf(data.fp_scanlog, 'Data location: %s\n', writefile_dir);
fprintf(data.fp_scanlog, '..................................................\n');

Contact us at files@mathworks.com