[Dart-dev] [4391] DART/trunk: Changed get_copy_index to issue WARNING about unknown copy types.
nancy at ucar.edu
nancy at ucar.edu
Tue Jun 22 13:00:29 MDT 2010
Revision: 4391
Author: thoar
Date: 2010-06-22 13:00:29 -0600 (Tue, 22 Jun 2010)
Log Message:
-----------
Changed get_copy_index to issue WARNING about unknown copy types.
This allows two_experiments_evolution to work on older-style
obs_diag_output.nc files - that do not have access to the individual
DART QC value information.
two_experiments_evolution.m will compare N (i.e. more than 2) experiments
on the same timeline - same graphic. This is the temporal analog to
two_experiments_profile.m.
Modified Paths:
--------------
DART/trunk/matlab/get_copy_index.m
Added Paths:
-----------
DART/trunk/diagnostics/matlab/two_experiments_evolution.m
-------------- next part --------------
Added: DART/trunk/diagnostics/matlab/two_experiments_evolution.m
===================================================================
--- DART/trunk/diagnostics/matlab/two_experiments_evolution.m (rev 0)
+++ DART/trunk/diagnostics/matlab/two_experiments_evolution.m 2010-06-22 19:00:29 UTC (rev 4391)
@@ -0,0 +1,599 @@
+function two_experiments_evolution(files, titles, varnames, qtty, prpo, levelind)
+%% two_experiments_evolution compares multiple netcdf files created by obs_diag.
+%
+% Each region/level gets its own figure.
+% The variables are 'looped' over - they reuse the same set of figures.
+%
+% The number of observations possible reflects only those observations
+% that have incoming QC values of interest. Any observation with a DART
+% QC of 6 (rejected because of namelist control) is not considered
+% 'possible' for the purpose of this graphic.
+%
+% files = {'/ptmp/nancy/CSL/Base5/032-061s0_def_reg/obs_diag_output.nc',
+% '/ptmp/thoar/GPS+AIRS/Sep_032-061/obs_diag_output.nc'};
+% titles = {'Base5', 'GPS+AIRS'};
+% varnames = {'RADIOSONDE_U_WIND_COMPONENT', 'RADIOSONDE_TEMPERATURE'};
+%
+% qtty = 'spread'; % rmse, spread, totalspread, bias, etc.
+% prpo = 'analysis'; % [analy, analysis, posterior ] == posterior
+% prpo = 'forecast'; % [guess, forecast, prior ] == prior
+% levelind = 1;
+%
+% two_experiments_evolution(files, titles, varnames, qtty, prpo, levelind)
+% print -dpdf myplot.pdf
+
+% <next few lines under version control, do not edit>
+% $URL$
+% $Id$
+% $Revision$
+% $Date$
+
+%%--------------------------------------------------------------------
+% Decode,Parse,Check the input
+%---------------------------------------------------------------------
+
+if (length(files) ~= length(titles))
+ error('each file must have a title')
+end
+
+NumExp = length(files);
+
+for i = 1:NumExp
+ if (exist(files{i},'file') ~= 2)
+ error('File %s does not exist',files{i})
+ end
+end
+
+%% set up all the stuff that is common.
+
+commondata = check_compatibility(files, varnames, qtty);
+figuredata = setfigure(commondata);
+
+%%--------------------------------------------------------------------
+% Set some static data
+%---------------------------------------------------------------------
+
+nvars = length(varnames);
+
+for ivar = 1:nvars
+ fprintf('Working on %s ...\n',varnames{ivar})
+
+ for ireg = 1:commondata.nregions
+
+ figure(ireg);
+ orient landscape;
+ clf;
+
+ %---------------------------------------------------------------------
+ % Getting the data for each experiment
+ %---------------------------------------------------------------------
+
+ Nlimits = zeros(NumExp,2); % range of observation count - min, then max
+ Dlimits = zeros(NumExp,2); % range of the data
+ Ylimits = zeros(NumExp,2); % range of the vertical coords
+ plotobj = cell(1,NumExp);
+
+ for iexp = 1:NumExp
+
+ plotobj{iexp} = getvals(files{iexp}, varnames{ivar}, qtty, prpo, ireg, levelind);
+ plotobj{iexp}.title = titles{iexp};
+ plotobj{iexp}.nregions = commondata.nregions;
+ plotobj{iexp}.region_names = commondata.region_names;
+
+ Nlimits(iexp,:) = plotobj{iexp}.Nrange;
+ Dlimits(iexp,:) = plotobj{iexp}.Drange;
+ Ylimits(iexp,:) = plotobj{iexp}.Drange;
+
+ end
+
+ %---------------------------------------------------------------------
+ % Find nice limits that encompass all experiments
+ %---------------------------------------------------------------------
+
+ Nrange = [min(Nlimits(:,1)) max(Nlimits(:,2))];
+ Drange = [min(Dlimits(:,1)) max(Dlimits(:,2))];
+ Yrange = [min(Ylimits(:,1)) max(Ylimits(:,2))];
+
+ %---------------------------------------------------------------------
+ % Plot all regions - one month to a page
+ %---------------------------------------------------------------------
+
+ myplot( plotobj, Nrange, Drange, Yrange, figuredata);
+
+ BottomAnnotation(files)
+
+ end % of loop around regions
+
+ if ( ivar ~= nvars )
+ disp('Pausing, hit any key to continue ...')
+ pause
+ end
+
+end % of loop around variable
+
+%=====================================================================
+% End of main function body. Helper functions below.
+%=====================================================================
+
+
+
+function common = check_compatibility(filenames, varnames, copystring)
+%----------------------------------------------------------------------
+% Trying to prevent the comparison of apples and oranges.
+% make sure the diagnostics were generated the same way.
+
+% need to check that the timeframe is the same for all files
+
+% need to check that the region definitions are the same for all files
+
+mystat = 0;
+nexp = length(filenames);
+commondata = cell(1,nexp);
+priornames = struct([]);
+postenames = struct([]);
+
+for i = 1:length(varnames)
+ priornames{i} = sprintf('%s_guess',varnames{i});
+ postenames{i} = sprintf('%s_analy',varnames{i});
+end
+
+for i = 1:nexp
+
+ varexist(filenames{i}, {priornames{:}, postenames{:}, 'time', 'time_bounds'})
+
+ diminfo = nc_getdiminfo(filenames{i}, 'copy'); ncopies = diminfo.Length;
+ diminfo = nc_getdiminfo(filenames{i},'obstypes'); nobstypes = diminfo.Length;
+ diminfo = nc_getdiminfo(filenames{i}, 'region'); nregions = diminfo.Length;
+
+ commondata{i}.ncopies = ncopies;
+ commondata{i}.nobstypes = nobstypes;
+ commondata{i}.nregions = nregions;
+ commondata{i}.times = nc_varget(filenames{i},'time');
+ commondata{i}.time_bnds = nc_varget(filenames{i},'time_bounds');
+ commondata{i}.copyindex = get_copy_index(filenames{i},copystring);
+ commondata{i}.lonlim1 = nc_attget(filenames{i},nc_global,'lonlim1');
+ commondata{i}.lonlim2 = nc_attget(filenames{i},nc_global,'lonlim2');
+ commondata{i}.latlim1 = nc_attget(filenames{i},nc_global,'latlim1');
+ commondata{i}.latlim2 = nc_attget(filenames{i},nc_global,'latlim2');
+
+ commondata{i}.region_names = nc_varget(filenames{i},'region_names');
+
+ if (commondata{i}.nregions == 1 && (size(commondata{i}.region_names,2) == 1) )
+ commondata{i}.region_names = deblank(commondata{i}.region_names');
+ end
+
+end
+
+% error checking - compare everything to the first experiment
+for i = 2:nexp
+
+ if (any(commondata{i}.lonlim1 ~= commondata{1}.lonlim1))
+ fprintf('The left longitudes of the regions (i.e. lonlim1) are not compatible.\n')
+ mystat = 1;
+ end
+
+ if (any(commondata{i}.lonlim2 ~= commondata{1}.lonlim2))
+ fprintf('The right longitudes of the regions (i.e. lonlim2) are not compatible.\n')
+ mystat = 1;
+ end
+
+ if (any(commondata{i}.latlim1 ~= commondata{1}.latlim1))
+ fprintf('The bottom latitudes of the regions (i.e. latlim1) are not compatible.\n')
+ mystat = 1;
+ end
+
+ if (any(commondata{i}.latlim2 ~= commondata{1}.latlim2))
+ fprintf('The top latitudes of the regions (i.e. latlim2) are not compatible.\n')
+ mystat = 1;
+ end
+
+ if (any(commondata{i}.time_bnds ~= commondata{1}.time_bnds))
+ fprintf('The time boundaries of the experiments (i.e. time_bnds) are not compatible.\n')
+ mystat = 1;
+ end
+
+end
+
+if mystat > 0
+ error('The experiments are not compatible ... stopping.')
+end
+
+common = commondata{1};
+
+
+
+function plotdat = getvals(fname, varname, copystring, prpo, regionindex, levelindex )
+%----------------------------------------------------------------------
+if (exist(fname,'file') ~= 2)
+ error('%s does not exist',fname)
+end
+
+plotdat.fname = fname;
+plotdat.varname = varname;
+plotdat.copystring = copystring;
+plotdat.region = regionindex;
+plotdat.levelindex = levelindex;
+plotdat.bincenters = nc_varget(fname,'time');
+plotdat.binedges = nc_varget(fname,'time_bounds');
+plotdat.mlevel = nc_varget(fname,'mlevel');
+plotdat.plevel = nc_varget(fname,'plevel');
+plotdat.plevel_edges = nc_varget(fname,'plevel_edges');
+plotdat.hlevel = nc_varget(fname,'hlevel');
+plotdat.hlevel_edges = nc_varget(fname,'hlevel_edges');
+plotdat.ncopies = length(nc_varget(fname,'copy'));
+
+plotdat.binseparation = nc_attget(fname, nc_global, 'bin_separation');
+plotdat.binwidth = nc_attget(fname, nc_global, 'bin_width');
+plotdat.rat_cri = nc_attget(fname, nc_global, 'rat_cri');
+plotdat.input_qc_threshold = nc_attget(fname, nc_global, 'input_qc_threshold');
+plotdat.lonlim1 = nc_attget(fname, nc_global, 'lonlim1');
+plotdat.lonlim2 = nc_attget(fname, nc_global, 'lonlim2');
+plotdat.latlim1 = nc_attget(fname, nc_global, 'latlim1');
+plotdat.latlim2 = nc_attget(fname, nc_global, 'latlim2');
+plotdat.biasconv = nc_attget(fname, nc_global, 'bias_convention');
+
+% Coordinate between time types and dates
+
+timeunits = nc_attget(fname,'time','units');
+calendar = nc_attget(fname,'time','calendar');
+timebase = sscanf(timeunits,'%*s%*s%d%*c%d%*c%d'); % YYYY MM DD
+timeorigin = datenum(timebase(1),timebase(2),timebase(3));
+
+plotdat.bincenters = plotdat.bincenters + timeorigin;
+plotdat.binedges = plotdat.binedges + timeorigin;
+plotdat.Nbins = length(plotdat.bincenters);
+
+plotdat.timespan = sprintf('%s through %s', ...
+ datestr(min(plotdat.binedges(:))), ...
+ datestr(max(plotdat.binedges(:))));
+
+% Get the right indices for the intended variable, regardless of the storage order
+% as well as some indices of other quantities of interest for future use.
+
+plotdat.copyindex = get_copy_index(fname, copystring);
+plotdat.Npossindex = get_copy_index(fname, 'Nposs');
+plotdat.Nusedindex = get_copy_index(fname, 'Nused');
+plotdat.NQC4index = get_copy_index(fname, 'N_DARTqc_4');
+plotdat.NQC5index = get_copy_index(fname, 'N_DARTqc_5');
+plotdat.NQC6index = get_copy_index(fname, 'N_DARTqc_6');
+plotdat.NQC7index = get_copy_index(fname, 'N_DARTqc_7');
+
+plotdat.priorvar = sprintf('%s_guess',plotdat.varname);
+plotdat.postevar = sprintf('%s_analy',plotdat.varname);
+
+myinfo.diagn_file = fname;
+myinfo.copyindex = plotdat.copyindex;
+myinfo.regionindex = plotdat.region;
+myinfo.levelindex = plotdat.levelindex;
+
+% get appropriate vertical coordinate variable
+
+guessdims = nc_var_dims(fname, plotdat.priorvar);
+analydims = nc_var_dims(fname, plotdat.postevar);
+
+if ( findstr('surface',guessdims{3}) > 0 )
+ plotdat.level = 1;
+ plotdat.level_units = 'surface';
+ plotdat.level_edges = [];
+elseif ( findstr('undef',guessdims{3}) > 0 )
+ plotdat.level = 1;
+ plotdat.level_units = 'undefined';
+ plotdat.level_edges = [];
+else
+ plotdat.level = nc_varget(fname, guessdims{3});
+ plotdat.level_units = nc_attget(fname, guessdims{3}, 'units');
+ plotdat.level_edges = nc_varget(fname,sprintf('%s_edges',guessdims{3}));
+end
+
+[start, count] = GetNCindices(myinfo,'diagn',plotdat.priorvar);
+plotdat.prior = nc_varget(fname, plotdat.priorvar, start, count);
+
+[start, count] = GetNCindices(myinfo,'diagn',plotdat.postevar);
+plotdat.poste = nc_varget(fname, plotdat.postevar, start, count);
+
+%% Determine data limits - Do we use prior and/or posterior
+% always make sure we have a zero bias line ...
+
+plotdat.useposterior = 0;
+plotdat.useprior = 0;
+switch lower(prpo)
+ case {'analy','analysis','posterior'}
+ plotdat.useposterior = 1;
+ bob = plotdat.poste(:);
+ case {'guess','forecast','prior'}
+ plotdat.useprior = 1;
+ bob = plotdat.prior(:);
+ otherwise
+ plotdat.useposterior = 1;
+ plotdat.useprior = 1;
+ bob = [plotdat.prior(:) ; plotdat.poste(:)]; % one long array
+end
+
+switch copystring
+case {'bias'}
+ dmin = min( [ min(bob) 0.0 ] );
+ dmax = max( [ max(bob) 0.0 ] );
+ plotdat.Drange = [ dmin dmax ];
+ plotdat.ylabel = sprintf('%s (%s)',copystring, plotdat.biasconv);
+otherwise
+ plotdat.Drange = [min(bob) max(bob)];
+ plotdat.ylabel = copystring;
+end
+
+%% Get the number of observations possible and the number used.
+% N_DARTqc_6 is the number ignored because of incoming QC values.
+% It doesn't matter which prior/poste variable you get this information
+% from - they are both the same.
+
+myinfo.diagn_file = fname;
+myinfo.copyindex = plotdat.Npossindex;
+myinfo.levelindex = plotdat.levelindex;
+
+[start, count] = GetNCindices(myinfo,'diagn',plotdat.priorvar);
+plotdat.nposs = nc_varget(fname, plotdat.priorvar, start, count);
+
+if ( plotdat.NQC6index >= 0)
+ % some older-style netCDF files do not have the separate QC values
+ myinfo.copyindex = plotdat.NQC6index;
+ [start, count] = GetNCindices(myinfo,'diagn',plotdat.priorvar);
+ plotdat.Nqc6 = nc_varget(fname, plotdat.priorvar, start, count);
+ plotdat.nposs = plotdat.nposs - plotdat.Nqc6;
+end
+
+if ( plotdat.useprior )
+ myinfo.copyindex = plotdat.Nusedindex;
+ [start, count] = GetNCindices(myinfo,'diagn',plotdat.priorvar);
+ plotdat.nused = nc_varget(fname, plotdat.priorvar, start, count);
+else
+ myinfo.copyindex = plotdat.Nusedindex;
+ [start, count] = GetNCindices(myinfo,'diagn',plotdat.postevar);
+ plotdat.nused = nc_varget(fname, plotdat.postevar, start, count);
+end
+
+%% Set the last of the ranges
+
+plotdat.Nrange = [min(plotdat.nused(:)) max(plotdat.nposs(:))];
+
+
+function myplot( plotobj, Nrange, Drange, Yrange, figdata)
+%% myplot Creates a graphic for one region
+
+Nexp = size(plotobj,2);
+iregion = plotobj{1}.region;
+
+%% Create the background
+
+ax1 = subplot('position',figdata.plotlims(iregion,:));
+set(ax1,'YAxisLocation','left','FontSize',figdata.fontsize)
+hold on
+
+%% draw the results of the experiments, priors and posteriors
+% each with their own line type.
+iexp = 0;
+hd = []; % handle to an unknown number of data lines
+legstr = {[]}; % strings for the legend
+
+for i = 1:Nexp
+
+ if ( plotobj{i}.useprior )
+ iexp = iexp + 1;
+ lty = sprintf('%s%s%s',figdata.expcolors{i},figdata.prpolines{1}, ...
+ figdata.expsymbols{i});
+ hd(iexp) = plot(plotobj{i}.bincenters, plotobj{i}.prior, lty,'LineWidth', 2.0);
+ legstr{iexp} = plotobj{i}.title;
+ end
+
+ if ( plotobj{i}.useposterior )
+ iexp = iexp + 1;
+ lty = sprintf('%s%s%s',figdata.expcolors{i},figdata.prpolines{2}, ...
+ figdata.expsymbols{i});
+ hd(iexp) = plot(plotobj{i}.bincenters, plotobj{i}.poste, lty,'LineWidth', 2.0);
+ legstr{iexp} = plotobj{i}.title;
+ end
+end
+
+%% Plot a bias line.
+switch plotobj{1}.copystring
+case {'bias'}
+ axlims = axis;
+ biasline = line(axlims(1:2),[0 0],'Color','k','Parent',ax1);
+ set(biasline,'LineWidth',1.0,'LineStyle','-')
+otherwise
+end
+
+%% hokey effort to decide to plot months/days vs. daynum vs.
+ttot = plotobj{1}.bincenters(plotobj{1}.Nbins) - plotobj{1}.bincenters(1) + 1;
+
+if ((plotobj{1}.bincenters(1) > 1000) && (ttot > 5))
+ datetick('x',6,'keeplimits','keepticks');
+ monstr = datestr(plotobj{1}.bincenters(1),21);
+ xlabelstring = sprintf('month/day - %s start',monstr);
+elseif (plotobj{1}.bincenters(1) > 1000)
+ datetick('x',15,'keeplimits','keepticks')
+ monstr = datestr(plotobj{1}.bincenters(1),21);
+ xlabelstring = sprintf('%s start',monstr);
+else
+ xlabelstring = 'days';
+end
+
+grid(ax1,'on')
+hold off;
+
+%% Create another axes to use for plotting the observation counts
+
+ax2 = axes('position',get(ax1,'Position'), ...
+ 'XAxisLocation','top', ...
+ 'YAxisLocation','right',...
+ 'Color','none',...
+ 'XColor','b','YColor','b',...
+ 'XLim',get(ax1,'XLim'), ...
+ 'YDir',get(ax1,'YDir'));
+
+% Plot the data, which sets the range of the axis
+for i = 1:Nexp
+ h2 = line(plotobj{i}.bincenters, plotobj{i}.nposs, ...
+ 'Color',figdata.expcolors{i},'Parent',ax2);
+ h3 = line(plotobj{i}.bincenters, plotobj{i}.nused, ...
+ 'Color',figdata.expcolors{i},'Parent',ax2);
+ set(h2,'LineStyle','none','Marker',figdata.expsymbols{i});
+ set(h3,'LineStyle','none','Marker','+');
+end
+
+% use same X ticks
+set(ax2,'XTick', get(ax1,'XTick'), ...
+ 'XTicklabel',get(ax1,'XTicklabel'));
+
+% use the same Y ticks, but find the right label values
+[yticks, newticklabels] = matchingYticks(ax1,ax2);
+set(ax2,'YTick', yticks, 'YTicklabel', newticklabels)
+
+% Annotate - gets pretty complicated for multiple
+% regions on one page. Trying to maximize content, minimize clutter.
+
+annotate( ax1, ax2, plotobj{i}, figdata)
+
+lh = legend(hd,legstr);
+legend(lh,'boxoff');
+
+set(lh,'FontSize',figdata.fontsize);
+kids = get(lh,'Children');
+
+
+function annotate(ax1, ax2, plotobj, figdata)
+
+%% One figure ... everything gets annotated.
+
+set(get(ax1,'Xlabel'),'String',plotobj.timespan, ...
+ 'Interpreter','none','FontSize',figdata.fontsize)
+set(get(ax2,'Ylabel'),'String','# of obs (o=poss, +=used)')
+
+if ( plotobj.useprior )
+ ylabel = sprintf('forecast %s',plotobj.ylabel);
+else
+ ylabel = sprintf('analysis %s',plotobj.ylabel);
+end
+
+set(get(ax1,'Ylabel'),'String',ylabel,'Interpreter','none','FontSize',figdata.fontsize)
+
+th = title({deblank(plotobj.region_names(plotobj.region,:)), ...
+ sprintf('%s @ %d %s', plotobj.varname, ...
+ plotobj.level(plotobj.levelindex), ...
+ plotobj.level_units)});
+set(th,'Interpreter','none','FontSize',figdata.fontsize);
+
+
+function BottomAnnotation(filenames)
+% annotates the filename containing the data being plotted
+nfiles = length(filenames);
+dy = 1.0/(nfiles+1); % vertical spacing for text
+
+subplot('position',[0.10 0.01 0.8 0.05])
+axis off
+
+for ifile = 1:nfiles
+ main = filenames{ifile};
+
+ fullname = which(main); % Could be in MatlabPath
+ if( isempty(fullname) )
+ if ( main(1) == '/' ) % must be a absolute pathname
+ string1 = sprintf('data file: %s',main);
+ else % must be a relative pathname
+ mydir = pwd;
+ string1 = sprintf('data file: %s/%s',mydir,main);
+ end
+ else
+ string1 = sprintf('data file: %s',fullname);
+ end
+
+ ty = 1.0 - (ifile-1)*dy;
+ h = text(0.5, ty, string1);
+ set(h, 'Interpreter', 'none', 'FontSize', 8);
+ set(h, 'HorizontalAlignment','center');
+end
+
+
+
+function [yticks newticklabels] = matchingYticks(ax1, ax2)
+%% This takes the existing Y ticks from ax1 (presumed nice)
+% and determines the matching labels for ax2 so we can keep
+% at least one of the axes looking nice.
+
+ylimits = get(ax2,'YLim');
+Dlimits = get(ax1,'YLim');
+DYticks = get(ax1,'YTick');
+nYticks = length(DYticks);
+
+slope = (ylimits(2) - ylimits(1))/(Dlimits(2) - Dlimits(1));
+xtrcpt = ylimits(2) - slope*Dlimits(2);
+
+yticks = slope*DYticks + xtrcpt;
+newticklabels = num2str(round(10*yticks')/10);
+
+
+
+function varexist(filename, varnames)
+%% We already know the file exists by this point.
+% Lets check to make sure that file contains all needed variables.
+
+nvars = length(varnames);
+gotone = ones(1,nvars);
+
+for i = 1:nvars
+ gotone(i) = nc_isvar(filename,varnames{i});
+ if ( ~ gotone(i) )
+ fprintf('\n%s is not a variable in %s\n',varnames{i},filename)
+ end
+end
+
+if ~ all(gotone)
+ error('missing required variable ... exiting')
+end
+
+
+function figdata = setfigure(commondata)
+%%
+% the hardest part is figuring out the gaps, etc.
+% gapwidth = (1 - (nregions*axiswidth + 0.14))/(nregions - 1)
+% 0.14 is actually left margin + right margin ... 0.07 + 0.07
+
+plotlims = zeros(commondata.nregions,4);
+
+if (commondata.nregions > 4)
+ error('Cannot handle %d regions - 4 is the max.',commondata.nregions)
+
+elseif (commondata.nregions == 999)
+ orientation = 'tall';
+ fontsize = 10;
+ plotlims(1,:) = [0.100 0.560 0.375 0.355];
+ plotlims(2,:) = [0.525 0.560 0.375 0.355];
+ plotlims(3,:) = [0.100 0.125 0.375 0.355];
+ plotlims(4,:) = [0.525 0.125 0.375 0.355];
+
+elseif (commondata.nregions == 998)
+ orientation = 'landscape';
+ fontsize = 12;
+ plotlims(1,:) = [0.0700 0.14 0.265 0.725];
+ plotlims(2,:) = [0.3675 0.14 0.265 0.725];
+ plotlims(3,:) = [0.6650 0.14 0.265 0.725];
+
+elseif (commondata.nregions == 997)
+ orientation = 'landscape';
+ fontsize = 12;
+ plotlims(1,:) = [0.10 0.62 0.725 0.375];
+ plotlims(2,:) = [0.10 0.14 0.725 0.375];
+
+else
+ orientation = 'landscape';
+ fontsize = 16;
+ plotlims(1,:) = [0.10 0.15 0.8 0.75];
+ plotlims(2,:) = [0.10 0.15 0.8 0.75];
+ plotlims(3,:) = [0.10 0.15 0.8 0.75];
+ plotlims(4,:) = [0.10 0.15 0.8 0.75];
+end
+
+figdata = struct('expcolors', {{'k','r','b','g','m','c','y'}}, ...
+ 'expsymbols', {{'o','s','d','p','h','s','*'}}, ...
+ 'prpolines', {{'-',':'}}, 'plotlims', plotlims, ...
+ 'fontsize',fontsize, 'orientation',orientation);
+
+clf; orient(gcf, orientation)
Property changes on: DART/trunk/diagnostics/matlab/two_experiments_evolution.m
___________________________________________________________________
Added: svn:mime-type
+ text/x-matlab
Added: svn:keywords
+ Date Rev Author HeadURL Id
Added: svn:eol-style
+ native
Modified: DART/trunk/matlab/get_copy_index.m
===================================================================
--- DART/trunk/matlab/get_copy_index.m 2010-06-21 22:52:58 UTC (rev 4390)
+++ DART/trunk/matlab/get_copy_index.m 2010-06-22 19:00:29 UTC (rev 4391)
@@ -47,13 +47,12 @@
% Provide modest error support
if (copy_index < 0)
- fprintf('ERROR: %s is not a valid metadata string for file %s\n', ...
+ fprintf('WARNING: %s is not a valid metadata string for file %s\n', ...
copystring, fname)
disp('valid metadata strings are: ')
for i = 1:num_copies,
fprintf('%s\n',deblank(copy_meta_data(i,:)))
end
- error('please try again')
end
function str2 = dewhite(str1)
More information about the Dart-dev
mailing list