0001 function [DIM,VOX,SCALE,TYPE,OFFSET,ORIGIN,DESCRIP] = nic_spm_hread(P)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 P = deblank(P);
0029 q = length(P);
0030 if q>=4 & P(q - 3) == '.'; P = P(1:(q - 4)); end
0031 P = [P '.hdr'];
0032
0033
0034
0035 fid = fopen(P,'r','native');
0036
0037 if (fid > 0)
0038
0039
0040
0041 fseek(fid,0,'bof');
0042
0043 otherendian = 0;
0044 sizeof_hdr = fread(fid,1,'int32');
0045 if sizeof_hdr==1543569408,
0046
0047 fclose(fid);
0048 if nic_spm_platform('bigend'),
0049 fid = fopen(P,'r','ieee-le');
0050 else,
0051 fid = fopen(P,'r','ieee-be');
0052 end;
0053 fseek(fid,0,'bof');
0054 sizeof_hdr = fread(fid,1,'int32');
0055 otherendian = 1;
0056 end;
0057
0058 data_type = mysetstr(fread(fid,10,'uchar'))';
0059 db_name = mysetstr(fread(fid,18,'uchar'))';
0060 extents = fread(fid,1,'int32');
0061 session_error = fread(fid,1,'int16');
0062 regular = mysetstr(fread(fid,1,'uchar'))';
0063 hkey_un0 = mysetstr(fread(fid,1,'uchar'))';
0064
0065
0066
0067
0068
0069 fseek(fid,40,'bof');
0070
0071 dim = fread(fid,8,'int16');
0072 vox_units = mysetstr(fread(fid,4,'uchar'))';
0073 cal_units = mysetstr(fread(fid,8,'uchar'))';
0074 unused1 = fread(fid,1,'int16');
0075 datatype = fread(fid,1,'int16');
0076 bitpix = fread(fid,1,'int16');
0077 dim_un0 = fread(fid,1,'int16');
0078 pixdim = fread(fid,8,'float');
0079 vox_offset = fread(fid,1,'float');
0080 funused1 = fread(fid,1,'float');
0081 funused2 = fread(fid,1,'float');
0082 funused3 = fread(fid,1,'float');
0083 cal_max = fread(fid,1,'float');
0084 cal_min = fread(fid,1,'float');
0085 compressed = fread(fid,1,'int32');
0086 verified = fread(fid,1,'int32');
0087 glmax = fread(fid,1,'int32');
0088 glmin = fread(fid,1,'int32');
0089
0090
0091
0092 fseek(fid,148,'bof');
0093
0094 descrip = mysetstr(fread(fid,80,'uchar'))';
0095 aux_file = mysetstr(fread(fid,24,'uchar'))';
0096 orient = fread(fid,1,'uchar');
0097 origin = fread(fid,5,'int16');
0098 generated = mysetstr(fread(fid,10,'uchar'))';
0099 scannum = mysetstr(fread(fid,10,'uchar'))';
0100 patient_id = mysetstr(fread(fid,10,'uchar'))';
0101 exp_date = mysetstr(fread(fid,10,'uchar'))';
0102 exp_time = mysetstr(fread(fid,10,'uchar'))';
0103 hist_un0 = mysetstr(fread(fid,3,'uchar'))';
0104 views = fread(fid,1,'int32');
0105 vols_added = fread(fid,1,'int32');
0106 start_field = fread(fid,1,'int32');
0107 field_skip = fread(fid,1,'int32');
0108 omax = fread(fid,1,'int32');
0109 omin = fread(fid,1,'int32');
0110 smax = fread(fid,1,'int32');
0111 smin = fread(fid,1,'int32');
0112
0113 fclose(fid);
0114
0115 if isempty(smin)
0116 error(['There is a problem with the header file ' P '.']);
0117 end
0118
0119
0120
0121 DIM = dim(2:4)';
0122 VOX = pixdim(2:4)';
0123 SCALE = funused1;
0124 SCALE = ~SCALE + SCALE;
0125 TYPE = datatype;
0126 if otherendian == 1 & datatype ~= 2,
0127 TYPE = TYPE*256;
0128 end;
0129 OFFSET = vox_offset;
0130 ORIGIN = origin(1:3)';
0131 DESCRIP = descrip(1:max(find(descrip)));
0132
0133 else
0134 global DIM VOX SCALE TYPE OFFSET ORIGIN
0135 DESCRIP = ['defaults'];
0136 end
0137 return;
0138
0139
0140 function out = mysetstr(in)
0141 tmp = find(in == 0);
0142 tmp = min([min(tmp) length(in)]);
0143 out = setstr(in(1:tmp));
0144 return;