[Dart-dev] [3225] DART/trunk/matlab: These files have been moved
from DART/ matlab to DART/diagnostics/matlab
thoar at subversion.ucar.edu
thoar at subversion.ucar.edu
Mon Feb 11 23:37:23 MST 2008
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20080211/57c0a8e6/attachment.html
-------------- next part --------------
Deleted: DART/trunk/matlab/PlotObsLocs.m
===================================================================
--- DART/trunk/matlab/PlotObsLocs.m 2008-02-12 06:35:28 UTC (rev 3224)
+++ DART/trunk/matlab/PlotObsLocs.m 2008-02-12 06:37:23 UTC (rev 3225)
@@ -1,568 +0,0 @@
-function phandle = PlotObsLocs(in_dartqc, in_box, in_typelist, in_epochlist, ...
- in_subset, in_plotd, in_world, in_invertz, in_writeplot, ...
- in_legend2dloc, in_legend3dloc, in_viewlist)
-% PLOTOBSLOCS - Plot an observation_locations.NNN.dat file as output from the latest obs_diag program in DART.
-% (You must enable an obs_diag_nml namelist entry to get the output files;
-% they are not created by default.)
-%
-% warning: this has a very long argument list, because it is intended that
-% it be called from another program or function. all the arguments can be
-% replaced by the character string 'default' to use the internal defaults.
-%
-% usage:
-% PlotObsLocs(in_dartqc, in_box, in_typelist, in_epochlist, in_subset,
-% in_plotd, in_world, in_invertz, in_writeplot,
-% in_legend2dloc, in_legend3dloc, in_viewlist)
-%
-% where:
-%
-% in_dartqc = 0 all OK (default)
-% 1 Evaluated only
-% 2 OK but posterior forward operator failed
-% 3 Evaluated only, BUT posterior forward operator failed.
-% 4 prior forward operator failed
-% 5 not used because of namelist control
-% 6 prior qc rejected
-% 7 outlier rejected
-% a negative value means everything "up to" that value, i.e.
-% -3 == 0, 1, 2, and 3
-%
-% in_box = optional bounding box [xmin xmax ymin ymax] for 2d or
-% [xmin xmax ymin ymax zmin zmax] for 3d. default is max extent of
-% the data, or 0:360/-90:90 if in_world is true
-%
-% in_typelist = list of integer observation types to plot. all types
-% are plotted by default. (hint: examine the end of
-% the ObsDiagAtts.m file which is created by the obs_diag
-% program to see what number is used for each observation type.)
-%
-% in_epochlist = list of integer time epochs to plot. output from obs_diag
-% program creates multiple files starting at 1 for each time
-% period. default is all.
-%
-% in_subset = number of points to plot for each observation type. a subset
-% of the observations is randomly selected to thin down very
-% large observation files. the default is to plot all.
-%
-% in_plotd = 2 or 3 for 2d or 3d plot, respectively. default is 2d.
-%
-% in_world = 0 for no, 1 for yes. if true, plot the outlines of the continents
-% of the world on a lon/lat grid. default is yes.
-%
-% in_invertz = 0 for no, 1 for yes. if true, invert the Z axis. pressure
-% levels, for example, are largest at the earth's surface and
-% decrease as you go up. default is no.
-%
-% in_writeplot = 0 for no, 1 for yes. if true, write out each plot in a
-% color postscript file. default is no. warning -- this can
-% be slow and the files can be large for very large numbers of
-% observations.
-%
-% in_legend2dloc = where to put the legend box which shows the plot markers
-% for each observation type. the default values are often
-% directly over a region of interest and so far it has seemed
-% impossible to find a completely satisfactory default.
-% type 'help legend' to get a list of possible strings.
-% this is used for a 2d plot.
-%
-% in_legend3dloc = where to put the legend box which shows the plot markers
-% for each observation type. the default values are often
-% directly over a region of interest and so far it has seemed
-% impossible to find a completely satisfactory default.
-% type 'help legend' to get a list of possible strings.
-% this is used for a 3d plot.
-%
-% in_viewlist = [az el; az el; az el; ...] list of viewpoints for 3d plotting.
-% the default is 2 views of each plot at [10 10; 10 80 ].
-% [0 90] [90 0] and [0 0] may be interesting options.
-% the 3d plots can be rotated interactively and the [az el] is
-% printed in the lower left corner during the rotation; these
-% views can be used to create .ps files if you are saving the
-% plots to a file or if you want the same viewpoints reused.
-
-% Data Assimilation Research Testbed -- DART
-% Copyright 2004-2007, Data Assimilation Research Section
-% University Corporation for Atmospheric Research
-% Licensed under the GPL -- www.gpl.org/licenses/gpl.html
-%
-% <next few lines under version control, do not edit>
-% $URL$
-% $Id$
-% $Revision$
-% $Date$
-
-% data subset selections:
-% used vs unused (or both) obs
-% subregions - lon, lat, height min/max
-% obs type list
-% random subset to thin data
-% epoch list
-%
-% plot type and output format:
-% 2d or 3d plot
-% not lat/lon (no world map)
-% create .ps files for output or not
-
-
-% defaults for everything that has code to handle alternatives below.
-% suggestion - leave the defaults alone and in the next section overwrite
-% the values with alternative values.
-
-% TODO:
-% box should change to box_type, and options are:
-% world
-% CONUS (continental US)
-% tight (take min/max of data)
-% user_specified (prompt user for 4 or 6 corners)
-%
-
-arg_used = 0; % dart QC values to use ... see in_dartqc table above
-arg_box = []; % [[lon_min, lon_max, lat_min, lat_max], v_min, v_max]
-arg_typelist = []; % numeric observation type list; if ~[], integer list
-arg_epochlist = []; % list of epochs to process; if ~[], integer list
-arg_subset = 0; % random subset to thin data; if > 0, how many to keep
-arg_plotd = 2; % 2 = 2d, 3 = 3d
-arg_world = 1; % worldwide (lon/lat) locations, plot over map (0=no)
-arg_invertz = 0; % for 3d plot, 1=z axis plots N to 0, 0 = 0 to N
-arg_writeplot = 0; % write out postscript plot files (1=yes)
-arg_legend2dloc = 'SouthWest'; % where on the plot to plop the 2d legend box
-arg_legend3dloc = 'NorthWest'; % where on the plot to plop the 3d legend box
- % see matlab doc for alternatives
-arg_viewlist = [10 10; 10 80; ];
- % default viewpoints for 3D plots.
- % [90 0], [0 90] and [0 0] are also good.
-
- ncfname = 'obs_diag_output.nc';
-
-% get the values from the arguments and fill them in:
-if (~isa(in_dartqc,'char'))
- arg_used = in_dartqc;
-end
-if (~isa(in_box,'char'))
- arg_box = in_box;
-end
-if (~isa(in_typelist,'char'))
- arg_typelist = in_typelist;
-end
-if (~isa(in_epochlist,'char'))
- arg_epochlist = in_epochlist;
-end
-if (~isa(in_subset,'char'))
- arg_subset = in_subset;
-end
-if (~isa(in_plotd,'char'))
- arg_plotd = in_plotd;
-end
-if (~isa(in_world,'char'))
- arg_world = in_world;
-end
-if (~isa(in_invertz,'char'))
- arg_invertz = in_invertz;
-end
-if (~isa(in_writeplot,'char'))
- arg_writeplot = in_writeplot;
-end
-if (~strcmp(in_legend2dloc,'default'))
- arg_legend2dloc = in_legend2dloc;
-end
-if (~strcmp(in_legend3dloc,'default'))
- arg_legend3dloc = in_legend3dloc;
-end
-if (~isa(in_viewlist,'char'))
- arg_viewlist = in_viewlist;
-end
-
-
-%-----------
-
-
-% if user specified an epoch list, use only those.
-% else, get the number from the netcdf file
-if (~isequal(arg_epochlist,[]))
- epochlist = arg_epochlist;
-else
- epochtime = getnc(ncfname,'time');
- epochbnds = getnc(ncfname,'time_bounds');
- epochlist = 1:length(epochtime);
-end
-
-% for each epoch file given or that we find:
-for epoch = epochlist
-
- % get data in and ignore the 1 header line. using textread brings in
- % the data as a single long 1-D array, so i use reshape and then transpose
- % to get it into the original [N 6] matrix shape.
-
- % this assumes the data is in a series of files named
- % 'observation_locations.NNN.dat', where NNN is epoch 001, 002, etc
- % the latest updates to the obs_diag program create these files
- % if the 'print_obs_locations' namelist entry is set to .true.
- %
-
- datafile = sprintf('observation_locations.%03d.dat', epoch);
-
- try
- r = textread(datafile, '%f', 'headerlines', 1);
- catch
- % last file found
- break
- end
-
- % format of the data in these files must be:
- % lon lat ivert flavor key used
- t = reshape(r, 6, []);
- s = transpose(t);
-
- % start each plot clean
- clf;
-
- % load the strings generated at the same time as the locations
- % this includes the text description of what the observation was
- % in the 'Observation_Kind()' array. (this file is produced by
- % running obs_diag -- full name is ObsDiagAtts.m)
-
- Observation_Kind = getnc(ncfname,'ObservationTypes');
-
- % Use a different marker and color for each observation type
- % (12*6) = 72 combinations at the moment. Could extend these
- % by cycling through the 'fillable' symbols and filling ...
- symbols = [double('o'),double('s'),double('d'),double('v'), ...
- double('^'),double('<'),double('>'),double('p'), ...
- double('h'),double('x'),double('+'),double('*')];
- colors = [double('b'),double('r'),double('c'), ...
- double('m'),double('g'),double('k')];
- [smat,cmat] = meshgrid(symbols,colors);
- markers = strcat([cmat(:) smat(:)]);
-
- % setup before looping over observations:
- mobs = max(s(:,4)); % max obs type number found in file
- nobstypes = 0; % running count of obs types found
- lmax = 0; % largest level found
- obs_labels = {}; % legend labels
-
- % if we are only looking at specific observation types loop over those.
- % otherwise generate a list from 1 to the largest kind number found in
- % the input file and loop over those.
- if (~isequal(arg_typelist,[]))
- obslist = arg_typelist;
- else
- obslist = 1 : mobs;
- end
-
- if (length(obslist) > length(markers))
- disp(sprintf('There are %d observation types',length(obslist)))
- disp(sprintf('There are %d marker symbols',length(markers)))
- error('Too many observation types to uniquely identify ... stopping.')
- end
-
- % loop over observation types, plotting each in 2d or 3d with
- % a different marker.
- for obs = obslist
-
- % select only this obs type, and cycle if there are none
- thisobs = s(s(:, 4) == obs, :);
- if (isequal(thisobs,[]))
- continue;
- end
-
- % select the rows we want to plot, optionally with a variety
- % of subsetting. function form is:
- % out = select_subset(rawdata_in, used/unused, boundingbox, subset_count)
- l = select_subset(thisobs, arg_used, arg_box, arg_subset);
-
- % if there are any of this obs type left, plot them
- if (size(l, 1) ~= 0)
- if (arg_plotd == 2)
- % 2d plot of (lon,lat):
- phandle = plot(l(:,1),l(:,2),markers(obs,:));
- else
- % 3D plot of (lon,lat,level):
- phandle = plot3(l(:,1),l(:,2),l(:,3),markers(obs,:));
- thismax = max(l(:,3));
- lmax = max(lmax, thismax); % save overall max height for axis
- end
-
- hold on; % accumulate on same plot
-
- % add this observation type to the legend string array
- nobstypes = nobstypes + 1;
-
- obs_labels{nobstypes} = deblank(Observation_Kind(obs,:));
-
- end % if data of this observation type exists
-
- end % for obslist
-
-
- % if this is a world map plot, add in an outline map of
- % the continents and set default size to 0/360,-90/90 (which can
- % be overridden with the box argument). if not world, default to
- % the data min/max or the box argument.
-
- % use the first 4 items for a 2d plot, all (6) for 3d;
- % arg_box is the user override; use_box is either the
- % users choice or our default.
- use_box = [];
- if (~isequal(arg_box, []))
- if (arg_plotd == 2)
- use_box = arg_box(1:4);
- else
- if (size(arg_box,2) > 4)
- use_box = arg_box;
- else
- if (lmax == 0)
- lmax = 1;
- end
- use_box = [arg_box 0 lmax];
- end
- if (arg_invertz == 1)
- set(gca,'ZDir','reverse');
- end
- end
- else
- if (arg_world)
- if (arg_plotd == 2)
- use_box = [0 360 -90 90];
- else
- if (lmax == 0)
- lmax = 1;
- end
- use_box = [0 360 -90 90 0 lmax];
- if (arg_invertz == 1)
- set(gca,'ZDir','reverse');
- %set(gca,'ZScale','log');
- end
- end
- end
- end
-
- % if we actually set something, use it to constrain the axis limits.
- if (~isequal(use_box, []))
- axis(use_box);
- end
- axis image; % set aspect ratio dx ~= dy ... cylindrical equidistant
-
- % set legend, and try to shrink the original size of the legend bounding box
- % because it is pretty large by default. a 'good' location depends on the
- % kind of plot, and even so this may be something you want to override
- % depending on where in the plot the interesting data falls.
- if (arg_plotd == 2)
- legendloc = arg_legend2dloc;
- else
- legendloc = arg_legend3dloc;
- end
-
- % If you have Matlab v6.5 or before, this must be split into 2 lines
- % Matlab v7.0+ requires it all in one go. Anyone know a way which works for both?
- myversion = ver('matlab');
- if (str2num(myversion.Version) <= 6.5)
- h = legend( obs_labels );
- legend( h, 'Location', legendloc, 'Interpreter', 'none', 'FontSize', 8);
- else
- legend( obs_labels , 'Location', legendloc, 'Interpreter', 'none', 'FontSize', 8);
- end
-
- % example of how to escape only underscores if we still want to use tex
- % in the strings. (instead of turning the interpreter off completely).
- %h=title(strrep(Observation_Kind(obs),'_','\_'));
-
- % whole world in (lon, lat) degree coords
- if (arg_world)
-
- % add a 2D plot of the world continent outlines
- worldmap(lmax);
-
- % these plots are generally longer than high, and add 3d-box.
- % orient landscape;
- set(gca, 'Box', 'on');
-
- % various attempts to make the x/y axis have the same spacing per degree
- % but shrink the vertical because it can be much larger. but all these
- % did strange things to the viewpoint so i am giving up on them for now.
- %axis equal;
-
- %vert = lmax / 100;
- %set(gca, 'DataAspectRatio', [1 1 vert], 'PlotBoxAspectRatio', [1 1 vert], 'Box', 'on');
- %set(gca, 'DataAspectRatio', [1 1 10], 'Box', 'on');
-
- xlabel('Longitude (degrees)', 'FontSize', 14);
- ylabel('Latitude (degrees)', 'FontSize', 14);
- if (arg_plotd == 3)
- zlabel('Height (units = ?)', 'FontSize', 14);
- end
- else
- xlabel('First coordinate', 'FontSize', 14);
- ylabel('Second coordinate', 'FontSize', 14);
- if (arg_plotd == 3)
- zlabel('Third coordinate', 'FontSize', 14);
- end
- end
-
- % add input filename somewhere?
- % text()
-
- % make it look roughly like it will when printed.
- wysiwyg;
-
-
- if (arg_used < 0)
- tstring = sprintf('Obs Locs for Epoch %d with DART QC values <= %d', ...
- epoch, abs(arg_used));
- elseif (arg_used >= 0)
- tstring = sprintf('Obs Locs for Epoch %d with DART QC value == %d', ...
- epoch, arg_used);
- end
-
- if (arg_subset > 0)
- nstring = sprintf(', %d random obs per type', arg_subset);
- tstring = strcat(tstring, nstring);
- end
-
- title(tstring, 'FontSize', 16);
-
-
- % if 3d plot, turn on grid and view for interactive look
- if (arg_plotd == 3)
- grid on;
- % set up viewlist as: arg_viewlist = [ az el; az el; ... ];
- for v = 1 : size(arg_viewlist, 1)
- view(arg_viewlist(v, :));
-
- disp('Pausing. Hit any key to continue');
- pause;
- end
- else
- disp(sprintf('Pausing on epoch %d of %d. Hit any key to continue ...', ...
- epoch,length(epochlist)));
- pause;
- end
-
- % save plots into files. 2d has only 1 plot; 3d has many possible
- % view angles -- you can set a list and get multiple plots out.
- if (arg_writeplot)
- if (arg_plotd == 2)
- fname = sprintf('2d_locations_epoch%.03d.ps', epoch);
- print('-dpsc', fname);
- else
-
- % set up viewlist as: arg_viewlist = [ az el; az el; ... ];
- for v = 1 : size(arg_viewlist, 1)
- view(arg_viewlist(v, :));
- fname = sprintf('3d_locations%d_epoch%.03d.ps', v, epoch);
- print('-dpsc', fname);
- end
-
- end % 2d vs 3d
- end % create .ps files?
-
-end % for epoch (main loop)
-
-disp('Plots done.');
-
-end % function PlotObsLoc3D
-
-
-%------------------------------------------------------
-% given a raw data array and possible selectors, return
-% the subset of rows which match.
-
-function out = select_subset(raw, used, box, number)
-
-% default is to assume we found no data. set it at the
-% end if we get there.
-out = [];
-
-% make sure some data is passed in before trying to subset it
-if (isequal(raw, []))
- fprintf('no observations passed into select_subset\n');
- return
-end
-
-% select based on dart QC flag
-% -99 implies everything, -3 implies 0,1,2,3
-if (used < 0)
- data = raw(raw(:,6) <= abs(used),:);
-elseif (used >= 0)
- data = raw(raw(:,6) == used ,:);
-end
-
-if (isequal(data, []))
- fprintf('all observations removed after used/unused selection\n');
- return
-end
-
-% select subset by area if one is given
-if (~isequal(box, []))
- data = data(data(:, 1) > box(1), :); % lon min/max
- data = data(data(:, 1) < box(2), :);
- data = data(data(:, 2) > box(3), :); % lat min/max
- data = data(data(:, 2) < box(4), :);
- if (size(box,2) > 4)
- data = data(data(:, 3) > box(5), :); % vertical if given
- data = data(data(:, 3) < box(6), :);
- end
-end
-
-if (isequal(data, []))
- fprintf('all observations removed after bounding box selection\n');
- return
-end
-
-
-% select a random subset of the remaining values
-numleft = size(data, 1);
-if ((number > 0) && (numleft > number))
- % but cannot have repeats in list
- sel = sort(pickme(number, numleft));
- if (~isequal(sel, []))
- data = data(sel, :);
- end
-end
-
-if (isequal(data, []))
- fprintf('all observations removed after random subset selection\n');
- return
-end
-
-out = data;
-
-end % function out = select_subset(raw, used, box, number)
-
-%------------------------------------------------------
-% generate a list of R random numbers between 1 and N
-% (inclusive) with *no* repeats. Return them in sorted order.
-function list = pickme(R, N)
-
-% assume failure until assured otherwise.
-list = [];
-
-% test for infinite loop
-if (R > N)
- fprintf('cannot select %d unique values between 1 and %d\n', R, N);
- return
-end
-
-% ok, get started.
-selections = zeros(R, 1);
-picked = zeros(N, 1);
-next = 0;
-
-while (next < R)
- % generate a random candidate, but if it has already been
- % selected, cycle.
- candidate = ceil(N .* rand);
- if (picked(candidate) == 1)
- continue;
- end
-
- % running count of how many we have
- next = next + 1;
- selections(next) = candidate;
- picked(candidate) = 1;
-
-end
-
-list = selections;
-
-end % function list = pickme(R, N)
-
Deleted: DART/trunk/matlab/plot_observation_locations.m
===================================================================
--- DART/trunk/matlab/plot_observation_locations.m 2008-02-12 06:35:28 UTC (rev 3224)
+++ DART/trunk/matlab/plot_observation_locations.m 2008-02-12 06:37:23 UTC (rev 3225)
@@ -1,157 +0,0 @@
-% PLOT_OBSERVATION_LOCATIONS : Plots the locations of the input observations
-%
-% By default this command creates 2d plots of observation locations,
-% one per time epoch, from data output from the obs_diag program if
-% the 'print_obs_locations' namelist item in the &obs_diag list is .true.
-%
-% There are lots of user settable options. This script prompts you
-% interactively for the most common ones. Then it calls PlotObsLocs()
-% with the proper argument list to pass in your selections.
-%
-% See the documentation for PlotObsLocs() -- it has a lot of arguments in the
-% calling sequence.
-
-% Data Assimilation Research Testbed -- DART
-% Copyright 2004-2007, Data Assimilation Research Section
-% University Corporation for Atmospheric Research
-% Licensed under the GPL -- www.gpl.org/licenses/gpl.html
-%
-% <next few lines under version control, do not edit>
-% $URL$
-% $Id$
-% $Revision$
-% $Date$
-
-% setup all args to be the string 'default', which will be interpreted by
-% the PlotObsLocs routine to use the default values.
-
-plotd = 'default';
-ncfname = 'default';
-used = 'default';
-typelist = 'default';
-box = 'default';
-epochs = 'default';
-subset = 'default';
-world = 'default';
-writeplot = 'default';
-loc2dstring = 'default';
-loc3dstring = 'default';
-viewlist = 'default';
-invertz = 'default';
-
-% what the arg list looks like:
-%PlotObsLocs(in_used, in_box, in_typelist, in_epochlist, in_subset, in_plotd, in_world, in_invertz, in_writeplot, in_legend2dloc, in_legend_3dloc, in_viewlist)
-
-done = 0;
-disp('Plot observations at their proper locations. Many subsetting options exist.');
-disp('Hitting <cr> to answer the questions will use the default value,');
-disp('or - once you have made a selection - reuse the previous value.');
-disp(' ');
-disp('The default plotting options are:');
-disp(' 2D plot, full world map, all obs types, all times, ');
-disp(' no file output, Z axis increases up.');
-disp(' ');
-
- % What file has the metadata
- reply = input('Enter the netCDF file name with the metadata: ');
- if (~isempty(reply))
- ncfname = reply;
- end
-
-% loop and keep the previous default until the user says to quit
-while done == 0
-
- % 2D or 3D plot?
- reply = input('Input 2 for 2D plot, 3 for 3D plot: ');
- if (~isempty(reply))
- plotd = reply;
- end
-
-
- % plot used, unused, or both
- disp('')
- disp('DART QC Values ... 0 == all OK')
- disp('DART QC Values ... 1 == Evaluated only')
- disp('DART QC Values ... 2 == OK but posterior forward operator failed')
- disp('DART QC Values ... 3 == Evaluated only, BUT posterior forward operator failed')
- disp('DART QC Values ... 4 == prior forward operator failed')
- disp('DART QC Values ... 5 == not used because of namelist control')
- disp('DART QC Values ... 6 == prior qc rejected')
- disp('DART QC Values ... 7 == outlier rejected')
- disp(' a negative value means everything ''up to'' that value, i.e.')
- disp(' -3 == 0, 1, 2, and 3 -99 == everything');
- reply = input('Input DART QC val: ');
- if (~isempty(reply))
- used = reply;
- end
-
- % restrict observations to a particular observation type?
- disp('')
- reply = input('Input [obs type list] to plot only some obs types, ''default'' to reset: ');
- if (~isempty(reply))
- typelist = reply;
- end
-
- % restrict observations to a particular subregion?
- reply = input('Input [xmin xmax ymin ymax] for bounding box, ''default'' to reset: ');
- if (~isempty(reply))
- box = reply;
- end
-
- % restrict input to particular time epochs?
- reply = input('Input [epoch list] for particular times, ''default'' to reset: ');
- if (~isempty(reply))
- epochs = reply;
- end
-
- % sample data to reduce counts?
- reply = input('Input count for random subset of each obs type, ''default'' to reset: ');
- if (~isempty(reply))
- subset = reply;
- end
-
- % plot world map beneath?
- reply = input('Input 0 to remove world map, 1 to restore it: ');
- if (~isempty(reply))
- world = reply;
- end
-
- % write out .ps files?
- reply = input('Input 1 to write .ps files for each plot, 0 to reset: ');
- if (~isempty(reply))
- writeplot = reply;
- end
-
- % legendloc
- reply = input('Input Matlab string for legend location, ''default'' to reset: ');
- if (~isempty(reply))
- if (plotd == 3)
- loc3dstring = reply;
- else
- loc2dstring = reply;
- end
- end
-
- % viewlist and invert z axis
- invertz = 1;
- if (plotd == 3)
- reply = input('Input [az el; az el] list for 3d views, ''default'' to reset: ');
- if (~isempty(reply))
- viewlist = reply;
- end
-
- reply = input('Input 1 to invert Z axis (e.g. for pressure); 0 otherwise: ');
- if (~isempty(reply))
- invertz = reply;
- end
- end
-
- PlotObsLocs(used, box, typelist, epochs, subset, plotd, world, invertz, writeplot, loc2dstring, loc3dstring, viewlist)
-
- reply = input('Quit now or plot again? 1 = quit, <cr> plots again: ');
- if (~isempty(reply))
- done = reply;
- end
-
-end
-
More information about the Dart-dev
mailing list