Mercurial > hg > aimmat
view aim-mat/tools/@frame/plottemporalprofile.m @ 4:537f939baef0 tip
various bug fixes and changed copyright message
author | Stefan Bleeck <bleeck@gmail.com> |
---|---|
date | Tue, 16 Aug 2011 14:37:17 +0100 |
parents | 20ada0af3d7d |
children |
line wrap: on
line source
% method of class @frame % % INPUT VALUES: % % RETURN VALUE: % % % (c) 2003, University of Cambridge, Medical Research Council % Stefan Bleeck (stefan@bleeck.de) % http://www.mrc-cbu.cam.ac.uk/cnbh/aimmanual % $Date: 2003/07/27 15:29:59 $ % $Revision: 1.12 $ function hand=plottemporalprofile(current_frame,options,ax) if nargin <3 ax=gca; end if nargin <2 options=[]; end start_time=getminimumtime(current_frame); if start_time < 0 % these are frames read in from ams % max_time=getmaximumtime(current_frame); fr=getpart(current_frame,start_time,0); current_frame=reverse(current_frame); start_time=0; current_frame=setstarttime(current_frame,0); end if ~isfield(options,'has_x_axis'); has_x_axis=1; else has_x_axis=options.has_x_axis; end if ~isfield(options,'is_log'); is_log=1; else is_log=options.is_log; end % for compatibility. if isfield(options,'minimum_time'); options.minimum_time_interval=options.minimum_time; end if isfield(options,'maximum_time'); options.maximum_time_interval=options.maximum_time; end if ~isfield(options,'minimum_time_interval'); if is_log minimum_time_interval=0.001; else minimum_time_interval=0; end else minimum_time_interval=options.minimum_time_interval; end if isfield(options,'time_profile_scale'); time_profile_scale=options.time_profile_scale; else time_profile_scale=1; end % if the time scale is reversed (time from left to right) if isfield(options,'time_reversed'); time_reversed=options.time_reversed; else time_reversed=0; end if ~isfield(options,'maximum_time_interval'); maximum_time_interval=0.035; else maximum_time_interval=options.maximum_time_interval; end % if maximum_time_interval>getmaximumtime(current_frame) % maximum_time_interval=getmaximumtime(current_frame); % end scale_summe=getscalesumme(current_frame); %for scaling properties % start plotting: plot_struct.t_min=minimum_time_interval; plot_struct.t_max=maximum_time_interval; plot_struct.has_axis=0; plot_struct.is_log=is_log; plot_struct.has_y_axis=0; % interval sum % partframe=getpart(current_frame,minimum_time_interval,maximum_time_interval); % summe=getsum(partframe); % here it is calculated % axis off sr=getsr(current_frame); % start_time=getminimumtime(current_frame); % sumvalues=getpart(summe,(minimum_time_interval+start_time),maximum_time_interval+start_time); % min_x_screen=round(abs((minimum_time_interval-start_time+1/sr)*sr)); % thats the first point we want to see on the screen % max_x_screen=round(abs((maximum_time_interval-start_time)*sr)); % thats the first point we want to see on the screen start_time=getminimumtime(current_frame); if is_log min_x_screen=1; max_x_screen=round(abs((maximum_time_interval-start_time)*sr)); % thats the first point we want to see on the screen else min_x_screen=round(abs((minimum_time_interval-start_time+1/sr)*sr)); % thats the first point we want to see on the screen max_x_screen=round(abs((maximum_time_interval-start_time)*sr)); % thats the first point we want to see on the screen end if max_x_screen>getnrpoints(current_frame) max_x_screen=getnrpoints(current_frame); maximum_time_interval=(max_x_screen/sr)+start_time; end current_frame_values=getvalues(current_frame); cvals=current_frame_values(:,min_x_screen:max_x_screen); if getxaxis(current_frame)=='0' cvals=cvals/1000; end; if size(cvals,1)==1 sumcvals=cvals; else sumcvals=sum(cvals)'; end % cvals=getvalues(summe); % min_x_screen=1; % max_x_screen=size(cvals,1); hand=plot(ax,sumcvals); maxshowy=1.1; if min(cvals) >= 0 minshowy=0; else minshowy=-1; end maxy=maxshowy*scale_summe/time_profile_scale; if maxy==0 maxy=1; end if time_profile_scale==-1 % decide myself maxy=1.2*max(sumcvals); end % save the two profiles to text files for further analysis % 1: freq profile x1=getcf(current_frame); y1=sum(cvals'); % x1= % A1=[x1' y1']; % save freqp.txt A1 -ascii % dlmwrite('freqprofile.txt',A1, '\t') % 2: temp profile % sr=getsr(current_frame); % x2=1000/sr:1000/sr:getlength(current_frame)*1000; % y2=sum(cvals); % A2=[x2' y2']; % save tempp.txt A1 -ascii % dlmwrite('tempprofile.txt',A2, '\t') if is_log min_x_screen=round(abs((minimum_time_interval-start_time+1/sr)*sr)); % thats the first point we want to see on the screen if max_x_screen ==min_x_screen max_x_screen =min_x_screen +1; end try set(ax,'xlim',[min_x_screen max_x_screen]); set(ax,'ylim',[minshowy maxy]); % axis([min_x_screen max_x_screen minshowy maxy]); end if time_reversed set(ax,'XDir','reverse') % turn them around, because the higher values shell end on the right end set(ax,'XScale','log') t=minimum_time_interval; ti=[t 2*t 4*t 8*t 16*t 32*t 64*t]; tix=(ti)*sr; % there shell be the tix % tix(1)=tix(1)+1; ti=(ti*1000); ti=fround(ti,2); else % its not logarithmic! if time_reversed set(ax,'XDir','reverse') % turn them around, because the higher values shell end on the right else set(ax,'XDir','normal') % normale ausrichtung end nrx=size(cvals,2); if scale_summe==0 scale_summe=1; end axis([1 length(sumcvals) minshowy maxy]); nr_labels=8; tix=1:(nrx-1)/nr_labels:nrx; xstep=(maximum_time_interval-minimum_time_interval)*1000/(nr_labels); %works from -35 to 5 ti=([minimum_time_interval*1000:xstep:maximum_time_interval*1000+1]); ti=round(ti*10)/10; set(ax,'XScale','linear') % text(min_x_screen*1.5,-scale_summe/5,'Time (ms)'); % this is at a nice position end if has_x_axis if max(tix)>1 set(ax,'XTick',tix); set(ax,'XTickLabel',ti); end else set(ax,'xtick',[]); % we dont want any z-Ticks! end % axis % if scale_summe==0 % axis([min_x_screen max_x_screen minshowy maxshowy]); % else % axis([min_x_screen max_x_screen minshowy maxshowy*scale_summe/time_profile_scale]); % end if getxaxis(current_frame)=='0' d=size(cvals); ti = [0:1:16]; step=(d(2)/16); tix = [0:step:d(2)]; end; % stefan for the scale profile if strcmp(getxaxis(current_frame),'harmonic ratio') ti=get(ax,'XTickLabel'); ti=str2num(ti)/1000; end set(ax,'XTick',tix); set(ax,'XTickLabel',ti); set(ax,'YTickLabel',[]);