changeset 11516:d28928a7e6f5 octave-forge

analyze75write: Write CalibrationUnits to header if that information is provided in the input. Also, ensure all char entries in the header are left justified.
author adam78a
date Wed, 06 Mar 2013 10:10:37 +0000
parents abfbfa8d7786
children 28799a7c144b
files main/image/inst/analyze75write.m
diffstat 1 files changed, 17 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/main/image/inst/analyze75write.m	Tue Mar 05 21:24:09 2013 +0000
+++ b/main/image/inst/analyze75write.m	Wed Mar 06 10:10:37 2013 +0000
@@ -101,10 +101,9 @@
   header.GlobalMax       = int32(max(data(:)));
   header.FileName        = [fileprefix,'.hdr'];
 
-  % Generate a string containing the coordinates of the first voxel (stored in the header for information only)
-  header.Descriptor = repmat(' ',1,80);
-  origintext = ['Coordinates of first voxel (mm):  ',num2str( 10* [x(1),y(1),z(1)] ,' %07.2f' )];
-  header.Descriptor(1:numel(origintext)) = origintext;
+  % Descriptor: Generate a string containing the coordinates of the first voxel (stored in the header for information only)
+  origintext = ['Coordinates of first voxel:  ',num2str( 10* [x(1),y(1),z(1)] ,' %07.2f' )];
+  header.Descriptor = sprintf('%-80s',origintext);
 
   % Determine the type of data
   if (isa(data,'int16'))
@@ -146,7 +145,13 @@
   fwrite(fidH,header.Dimensions(4),'int16',header.ByteOrder);       % Dimensions(4)
   fwrite(fidH,zeros(1,3,'int16'),'int16',header.ByteOrder);         % unused
   fwrite(fidH,header.VoxelUnits,'char',header.ByteOrder);           % VoxelUnits
-  fwrite(fidH,repmat(' ',1,8),'char',header.ByteOrder);             % CalibrationUnits
+  
+  if (isfield(header,'CalibrationUnits'))                           % CalibrationUnits
+    fwrite(fidH,sprintf('%-8s',header.CalibrationUnits(1:min([8,numel(header.CalibrationUnits)]))),'char',header.ByteOrder);
+  else
+    fwrite(fidH,repmat(' ',1,8),'char',header.ByteOrder);
+  end
+  
   fwrite(fidH,zeros(1,1,'int16'),'int16',header.ByteOrder);         % unused
   fwrite(fidH,DataTypeLabel,'int16',header.ByteOrder);              % ImgDataType
   fwrite(fidH,header.BitDepth,'int16',header.ByteOrder);            % BitDepth
@@ -172,23 +177,23 @@
   fwrite(fidH,repmat(' ',1,10),'char',header.ByteOrder);            % Scannumber
 
   if (isfield(header,'PatientID'))                                  % PatientID
-    fwrite(fidH,sprintf('%10s',header.PatientID(1:min([10,numel(header.PatientID)]))),'char',header.ByteOrder);
+    fwrite(fidH,sprintf('%-10s',header.PatientID(1:min([10,numel(header.PatientID)]))),'char',header.ByteOrder);
   else
     fwrite(fidH,repmat(' ',1,10),'char',header.ByteOrder);
   end
 
   if (isfield(header,'ExposureDate'))                               % ExposureDate
-    fwrite(fidH,sprintf('%10s',header.ExposureDate(1:min([10,numel(header.ExposureDate)]))),'char',header.ByteOrder);
-  elseif isfield(header,'StudyDate')
-    fwrite(fidH,sprintf('%10s',header.StudyDate(1:min([10,numel(header.StudyDate)]))),'char',header.ByteOrder);
+    fwrite(fidH,sprintf('%-10s',header.ExposureDate(1:min([10,numel(header.ExposureDate)]))),'char',header.ByteOrder);
+  elseif (isfield(header,'StudyDate'))
+    fwrite(fidH,sprintf('%-10s',header.StudyDate(1:min([10,numel(header.StudyDate)]))),'char',header.ByteOrder);
   else
     fwrite(fidH,repmat(' ',1,10),'char',header.ByteOrder);
   end
 
   if (isfield(header,'ExposureTime'))                               % ExposureTime
-    fwrite(fidH,sprintf('%10s',header.ExposureTime(1:min([10,numel(header.ExposureTime)]))),'char',header.ByteOrder);
-  elseif isfield(header,'StudyTime')
-    fwrite(fidH,sprintf('%10s',header.StudyTime(1:min([10,numel(header.StudyTime)]))),'char',header.ByteOrder);
+    fwrite(fidH,sprintf('%-10s',header.ExposureTime(1:min([10,numel(header.ExposureTime)]))),'char',header.ByteOrder);
+  elseif (isfield(header,'StudyTime'))
+    fwrite(fidH,sprintf('%-10s',header.StudyTime(1:min([10,numel(header.StudyTime)]))),'char',header.ByteOrder);
   else
     fwrite(fidH,repmat(' ',1,10),'char',header.ByteOrder);
   end