function [img, header, errmsg] = nano3read(filename) %NANO3READ Read the header and the image from a nanoscope file. % % [I, H, ERRMSG] = NANO3READ(FILENAME) % % Return: 1) The header of the file, empty on error. % 2) The image matrix, empty on error. % 3) An error message if occours. % % On error, an error message is returned % After read the file the image is 90 degree rotated % to be reproducible with the nanoscope. % % Claudio 6 May, 1994. % % % Copyright (c) 1995 by Claudio Rivetti and Mark Young % claudio@alice.uoregon.edu, mark@alice.uoregon.edu % HEADER_SIZE_NS2 = 2048; HEADER_SIZE_NS3 = 8192; fp = fopen(filename, 'r'); if fp == -1 errmsg='File not found'; return; end h = fread(fp, HEADER_SIZE_NS2, 'char'); h=setstr(h)'; header_size=getparameter(h, 'Data length',1); if header_size==inf fclose(fp); errmsg='Wrong file format'; return end frewind(fp); header = fread(fp, header_size, 'char'); header = setstr(header)'; il=findstr(header, 'image list'); bs=findstr(header, '\*'); p=[]; for i=1:length(il) p=[p bs(max(find(bs ' type1 '|',... ' Image 2 -> ' type2 '|',... '| Which one do you want to load? |']; r=alexdlg(msg, 'First', 'Second', 'Cancel'); elseif nimages>2 type1=getparameter(header, 'Image data',1); type2=getparameter(header, 'Image data',2); type3=getparameter(header, 'Image data',3) msg=['In ' filename '||',... ' Image 1 -> ' type1 '|',... ' Image 2 -> ' type2 '|',... ' Image 3 -> ' type3 '|',... '| Which one do you want to load? |']; r=alexdlg(msg, 'First', 'Second', 'Third'); end if strcmp(r, 'Cancel') fclose(fp); return; end if strcmp(r, 'First'), ni=1;end if strcmp(r, 'Second'), ni=2;end if strcmp(r, 'Third'), ni=3;end if nimages>1 nh=[header(1:p(1)-1) header(p(ni):p(ni+1)-1)]; header=[nh zeros(1,length(header)-length(nh))]; end offset=getparameter(header, 'Data offset',inf); if getparameter(header, 'Version',1) ~= inf s1=getparameter(header, 'Samps/line',inf); s2=getparameter(header, 'Number of lines',inf); msize=[s1 s2]; else msize=getparameter(header, 'Samps/line',inf); end fseek(fp, offset, -1); img = fread(fp, msize, 'short', 'vaxd'); img = rot90(img); fclose(fp); return