📄 avw_hdr_write.m
字号:
fwrite(fid, dime.cal_units(1:8),'uchar');
fwrite(fid, dime.unused1(1), 'int16');
fwrite(fid, dime.datatype(1), 'int16');
fwrite(fid, dime.bitpix(1), 'int16');
fwrite(fid, dime.dim_un0(1), 'int16');
fwrite(fid, dime.pixdim(1:8), 'float32');
fwrite(fid, dime.vox_offset(1), 'float32');
% Ensure compatibility with SPM (according to MRIcro)
if dime.roi_scale == 0, dime.roi_scale = 0.00392157; end
fwrite(fid, dime.roi_scale(1), 'float32');
fwrite(fid, dime.funused1(1), 'float32');
fwrite(fid, dime.funused2(1), 'float32');
fwrite(fid, dime.cal_max(1), 'float32');
fwrite(fid, dime.cal_min(1), 'float32');
fwrite(fid, dime.compressed(1), 'int32');
fwrite(fid, dime.verified(1), 'int32');
fwrite(fid, dime.glmax(1), 'int32');
fwrite(fid, dime.glmin(1), 'int32');
return
%----------------------------------------------------------------------------
function data_history(fid,hist)
% Original header structures - ANALYZE 7.5
%struct data_history
% { /* off + size */
% char descrip[80]; /* 0 + 80 */
% char aux_file[24]; /* 80 + 24 */
% char orient; /* 104 + 1 */
% char originator[10]; /* 105 + 10 */
% char generated[10]; /* 115 + 10 */
% char scannum[10]; /* 125 + 10 */
% char patient_id[10]; /* 135 + 10 */
% char exp_date[10]; /* 145 + 10 */
% char exp_time[10]; /* 155 + 10 */
% char hist_un0[3]; /* 165 + 3 */
% int views /* 168 + 4 */
% int vols_added; /* 172 + 4 */
% int start_field; /* 176 + 4 */
% int field_skip; /* 180 + 4 */
% int omax; /* 184 + 4 */
% int omin; /* 188 + 4 */
% int smax; /* 192 + 4 */
% int smin; /* 196 + 4 */
% }; /* total=200 bytes */
descrip = sprintf('%-80s', hist.descrip); % 80 chars
aux_file = sprintf('%-24s', hist.aux_file); % 24 chars
originator = sprintf('%-10s', hist.originator); % 10 chars
generated = sprintf('%-10s', hist.generated); % 10 chars
scannum = sprintf('%-10s', hist.scannum); % 10 chars
patient_id = sprintf('%-10s', hist.patient_id); % 10 chars
exp_date = sprintf('%-10s', hist.exp_date); % 10 chars
exp_time = sprintf('%-10s', hist.exp_time); % 10 chars
hist_un0 = sprintf( '%-3s', hist.hist_un0); % 3 chars
% ---
% The following should not be necessary, but I actually
% found one instance where it was, so this totally anal
% retentive approach became necessary, despite the
% apparently elegant solution above to ensuring that variables
% are the right length.
if length(descrip) < 80,
paddingN = 80-length(descrip);
padding = char(repmat(double(' '),1,paddingN));
descrip = [descrip,padding];
end
if length(aux_file) < 24,
paddingN = 24-length(aux_file);
padding = char(repmat(double(' '),1,paddingN));
aux_file = [aux_file,padding];
end
if length(originator) < 10,
paddingN = 10-length(originator);
padding = char(repmat(double(' '),1,paddingN));
originator = [originator, padding];
end
if length(generated) < 10,
paddingN = 10-length(generated);
padding = char(repmat(double(' '),1,paddingN));
generated = [generated, padding];
end
if length(scannum) < 10,
paddingN = 10-length(scannum);
padding = char(repmat(double(' '),1,paddingN));
scannum = [scannum, padding];
end
if length(patient_id) < 10,
paddingN = 10-length(patient_id);
padding = char(repmat(double(' '),1,paddingN));
patient_id = [patient_id, padding];
end
if length(exp_date) < 10,
paddingN = 10-length(exp_date);
padding = char(repmat(double(' '),1,paddingN));
exp_date = [exp_date, padding];
end
if length(exp_time) < 10,
paddingN = 10-length(exp_time);
padding = char(repmat(double(' '),1,paddingN));
exp_time = [exp_time, padding];
end
if length(hist_un0) < 10,
paddingN = 10-length(hist_un0);
padding = char(repmat(double(' '),1,paddingN));
hist_un0 = [hist_un0, padding];
end
% -- if you thought that was anal, try this;
% -- lets check for unusual ASCII char values!
if find(double(descrip)>128),
indexStrangeChar = find(double(descrip)>128);
descrip(indexStrangeChar) = ' ';
end
if find(double(aux_file)>128),
indexStrangeChar = find(double(aux_file)>128);
aux_file(indexStrangeChar) = ' ';
end
if find(double(originator)>128),
indexStrangeChar = find(double(originator)>128);
originator(indexStrangeChar) = ' ';
end
if find(double(generated)>128),
indexStrangeChar = find(double(generated)>128);
generated(indexStrangeChar) = ' ';
end
if find(double(scannum)>128),
indexStrangeChar = find(double(scannum)>128);
scannum(indexStrangeChar) = ' ';
end
if find(double(patient_id)>128),
indexStrangeChar = find(double(patient_id)>128);
patient_id(indexStrangeChar) = ' ';
end
if find(double(exp_date)>128),
indexStrangeChar = find(double(exp_date)>128);
exp_date(indexStrangeChar) = ' ';
end
if find(double(exp_time)>128),
indexStrangeChar = find(double(exp_time)>128);
exp_time(indexStrangeChar) = ' ';
end
if find(double(hist_un0)>128),
indexStrangeChar = find(double(hist_un0)>128);
hist_un0(indexStrangeChar) = ' ';
end
% --- finally, we write the fields
fwrite(fid, descrip(1:80), 'uchar');
fwrite(fid, aux_file(1:24), 'uchar');
%orient = sprintf( '%1s', hist.orient); % 1 char
%fwrite(fid, orient(1), 'uchar');
fwrite(fid, hist.orient(1), 'uint8'); % see note below on char
fwrite(fid, originator(1:10), 'uchar');
fwrite(fid, generated(1:10), 'uchar');
fwrite(fid, scannum(1:10), 'uchar');
fwrite(fid, patient_id(1:10), 'uchar');
fwrite(fid, exp_date(1:10), 'uchar');
fwrite(fid, exp_time(1:10), 'uchar');
fwrite(fid, hist_un0(1:3), 'uchar');
fwrite(fid, hist.views(1), 'int32');
fwrite(fid, hist.vols_added(1), 'int32');
fwrite(fid, hist.start_field(1),'int32');
fwrite(fid, hist.field_skip(1), 'int32');
fwrite(fid, hist.omax(1), 'int32');
fwrite(fid, hist.omin(1), 'int32');
fwrite(fid, hist.smax(1), 'int32');
fwrite(fid, hist.smin(1), 'int32');
return
% Note on using char:
% The 'char orient' field in the header is intended to
% hold simply an 8-bit unsigned integer value, not the ASCII representation
% of the character for that value. A single 'char' byte is often used to
% represent an integer value in Analyze if the known value range doesn't
% go beyond 0-255 - saves a byte over a short int, which may not mean
% much in today's computing environments, but given that this format
% has been around since the early 1980's, saving bytes here and there on
% older systems was important! In this case, 'char' simply provides the
% byte of storage - not an indicator of the format for what is stored in
% this byte. Generally speaking, anytime a single 'char' is used, it is
% probably meant to hold an 8-bit integer value, whereas if this has
% been dimensioned as an array, then it is intended to hold an ASCII
% character string, even if that was only a single character.
% Denny <hanson.dennis2@mayo.edu>
% See other notes in avw_hdr_read
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -