function Lec03_01_file(fn) % LEC02_01_FILE: Either requests a file name or uses one % passed to it. % Matlab test of file operations % global Data h0 filename fid = 0; detrend = 0 ; if nargin == 0 filename = input('Open file: ','s'); elseif fn == 1 detrend = 1 else filename = fn end if ~detrend [fid, message] = fopen(filename,'r'); if fid == -1 disp(message) ok = 0; return end % Now we will try to read the file. These % files have three header lines and then data % % Read the header lines H1 = fgetl(fid); H2 = fgetl(fid); disp(H2) H3 = fgetl(fid); % The rest of the file is numeric with three values per lines and we % can read all at once [Data,tot] = fscanf(fid,' %f %f %f'); % Close the data file at this point fclose(fid); % Now reshape the Data into 3:tot/3 array num = tot/3; Data = reshape(Data,3,num); % Now use the find command to remove points with large error bars GoodSig = find(Data(3,:)<0.020); Data = [Data(1,GoodSig); Data(2,GoodSig); Data(3,GoodSig)]; Data(2,:) = Data(2,:)*1000 ; % Convert to mm Data(3,:) = Data(3,:)*1000 ; % Convert to mm h0 = 0; else p = polyfit(Data(1,:),Data(2,:),1) ; Data(2,:) = Data(2,:) - polyval(p,Data(1,:)) ; end % Now make a simple plot of the data if ~h0 h0 = figure('Color',[0.8 0.8 0.8], ... 'Position',[200 200 512 384], ... 'Tag','Fig1'); h1 = axes('Parent',h0, ... 'Position',[0.1289 0.1120 0.6152 0.8151]); else figure(h0); end % We might want to demean and change the units to mm as well MeanData = mean(Data(2,:)); fprintf(1,'Removing mean of %8.4f m from data\n',MeanData) Data(2,:) = (Data(2,:) - MeanData); Data(3,:) = Data(3,:); hold off errorbar(Data(1,:),Data(2,:),Data(3,:),'ro'); hold on hp = plot(Data(1,:),Data(2,:),'bo'); % Save the graphics handle set(hp,'MarkerFaceColor',[1 1 0]); ylabel('Position (mm)'); tlabel = ['Data file ' strrep(filename,'_','\_') ] title(strrep(strcat('Data file : ',filename),'_',' ')) figure(h0); % % Detrend button h1 = uicontrol('Parent',h0, ... 'Units','points', ... 'Callback','Lec03_01_file(1)', ... 'Position',[397 329 74 27], ... 'String','Detrend', ... 'Tag','Pushbutton1');