nda(1)                                                                  nda(1)



NAME
       nda - to do neighbor density analysis of point positions in plane

SYNOPSIS
       nda

DESCRIPTION
            NDA is a program that performs "neighbor density analysis" of a
       pattern of points in a planar region.  The key word in this name is
       "density".  In one of its modes of operation, the program computes the
       average density of neighboring points as a function of radial distance
       from a point.  This has several advantages.  First, unlike a nearest
       neighbor analysis, NDA uses all of the information available about
       neighboring points, rather than just the distance to the nearest point.
       Second, the density values (in units of points per square micron or per
       square pixel) are intuitively meaningful.  Third, a completely random
       distribution would give a flat curve of density versus distance, while
       the curve for a real distribution of points contains its own control or
       baseline region because it flattens out to the average density at large
       distances.  Deviations from a flat density curve can be quantified by
       integrating the deviation from the baseline level.  The program inte-
       grates in a special way to obtain the actual number of points that are
       extra or deficient, relative to the number expected with a random dis-
       tribution.  Again, this kind of integral is an intuitively meaningful
       quantity.
            There are two ways to evaluate the significance of an apparent
       deviation from randomness.  If the set of points is classified into two
       or more types, one way is simply to assign the points randomly to the
       various types.  The second way is to generate a sample of randomly dis-
       tributed points within the region being analyzed, with the same number
       of points of each type as in the original data.  One can require these
       points to be separated by a minimum distance.  More realistically, one
       can specify a series of probabilities for various separations, so that
       the neighbor density can rise gradually rather than abruptly from zero
       back to the mean level.  With either of these two forms of randomized
       data, the program can measure the statistical significance of devia-
       tions in the actual data.  To do so, it draws many samples of random
       data, computes integrals for each sample, and thus determines how often
       randomly sampled data would give an integral as large as one obtained
       from the real data.
            Before using NDA, one must prepare an IMOD model file in which
       different types of points are each in a different object.  For the most
       accurate density graphs, a single model contour should be drawn to
       enclose each area in which points are to be analyzed.  The placement of
       the boundary contour is important because NDA uses a sophisticated edge
       correction method in order to compute densities only from the relevant
       areas inside the boundary.  An arbitrarily shaped contour is allowed
       and, indeed, preferred.  Draw the contour close to the outermost points
       in the region to be analyzed ("close" here means roughly at the pre-
       ferred spacing between points, if one is evident by inspection).  NDA
       will automatically connect the first and last points of the boundary
       object to make a closed contour, so you do not need to make the last
       point superimpose the first one.  If there are obvious regions lacking
       points inside the data area, try to draw a contour that excludes such
       regions.  You can do this by tracing a path from the outer boundary of
       points to the hole inside, then drawing around the hole, then following
       nearly the same path back to the outside.  Be careful that this tracing
       does not cross itself anywhere!  If you make the boundary contour too
       big (leaving excessive space between it and the data points), or if you
       fail to eliminate significant interior holes, then you will get graphs
       of density that decline artifactually at larger distances.
            It is also possibly to analyze all points on a single section
       without drawing a boundary contour.  You might want to do this for
       quick exploratory analysis, or if you need to average over so many sec-
       tions that it would be unduly burdensome to draw that many model con-
       tours.  In the simplest form, you can make the boundary be the smallest
       square that encloses all of the points on the desired section.  Or
       instead, you can have the program find the smallest convex polygon that
       encloses all of the points.  A convex polygon is one with no indenta-
       tions, so that a straight line between any two points inside the poly-
       gon stays inside the polygon.  This option is described more fully
       below at the point where the appropriate entries are described.
            NDA can make two kinds of density graphs.  The first, referred to
       as a "radial" graph, shows the density of neighboring points as a func-
       tion of radial distance from a central point.  The central point is
       referred to as a reference point.  You can choose independently which
       types of points will be considered as reference points, and which types
       will be considered as neighbors to those reference points.  The second
       kind of graph, the "angular" graph, shows density versus the angular
       separation between neighbors in an annulus around a reference point.
       This graph is more complicated in its complete generality, since it
       involves a distinction between two types of neighbors to a reference
       point: neighbors that are themselves considered reference points for
       the density graph, and "angular" neighbors whose density is measured as
       a function of angular separation from the "reference" neighbors.  To
       make such a graph, you must choose the inner and outer radii of the
       annulus, the types of points to be considered reference points, the
       types to be considered as "reference" neighbors, and the types to be
       considered as "angular" neighbors.

            When you start NDA, you will make a standard series of entries
       until you get your first set of density graphs.  Then you will have
       many options to choose from.  The initial standard entries are now
       described in order.

       Name of a file to take entries from, or Return to take entries from the
       keyboard.  You can place a laborious series of initial entries into
       such a command file, with one line for each line that you would other-
       wise type in to the program.  However, you would need to have, at
       least, all of the standard entries that are required to get to the
       point in the program where options may be selected.  Finish the command
       file with a 24 to return to input from the keyboard, or with a 25 to
       exit the program.

       Name of a file to store density values in, or Return for none.  You can
       later use option 12 to store density values for selected graphs in this
       file.

       0 to get graphs displayed in a graphics window, or 1 to suppress
       graphs.

       Name of model file with points to be analyzed.

       If this model file does not have a pixel size defined, then enter 0 to
       not scale the data (distances will be in pixels and densities in points
       per square pixel), 1 to scale the data to microns (densities will be
       points per square micron), or -1 to specify some other scaling.

         IF you entered 1, next make two entries.  For data digitized from
       film, enter:
             Magnification of the negatives, e.g. 15500
             Scale during digitization, in microns per pixel
           For data acquired from CCD, enter:
             1000 for the magnification
             the pixel size on the specimen in nanometers

         IF you entered -1, instead enter the desired multiplicative scaling
       factor.

       0 for graphs of density versus radial distance from the average refer-
       ence point, or 1 for graphs of density versus the angular separation
       between neighbors in an annulus around a reference point.

       IMOD object number and contour number of the model contour that
       describes the boundary of the region to be analyzed, or for data read
       directly from a WIMP model file, the object number and 0.  Enter 0,0 to
       analyze all points on a section, without using a model contour to spec-
       ify the boundary.  (Enter -1,0 at this point to loop back and read a
       different model file.)

         IF you entered 0,0, the next line asks for two entries: the Z value
         of the section, numbered from 0; and either 0 to use the smallest
         rectangle that encloses all of the points on the section, or 1 to
         select some special options that would provide a fancier boundary
         than this, or -1 to use special options selected previously.  The
         default for the Z value is one more than the Z value of the last area
         analyzed, so it is possible to analyze a series of sequential
         sections quickly by using , or / to take this default value.

            IF you enter 1 to select some special options, next make the
            following entries:

            A list of types of points to consider in selecting the boundary,
              or just Return to include all types of points.

            A distance to "pad" the boundary, so that it will always be at
              least this distance from any of the points to be included.
              Enter the distance in microns, or the negative of the number of
              pixels if you want that number to be scaled into microns.  (If
              there is no scaling, just enter the number of pixels).

            0 for a square boundary, or 1 for the smallest convex polygon (see
              above).

              IF you enter 1, next enter the fraction of points farthest from
                the rest to omit in finding the boundary, or just enter 0 to
                have a boundary that includes all of the points.

       At this point the program determines what points are within the bound-
       ary and types out the number and density of each type of point.  The
       types are the object numbers from an IMOD file, or 256 minus the object
       color for a WIMP file.  However, if a point comes from a WIMP object
       whose display is turned OFF, its type is the NEGATIVE of the object's
       color.

       Next you must specify the bin width and extent of the density graphs.

          For radial graphs, enter the bin width (the increment of radial
          distance over which a single value of density is computed) and the
          number of bins. The total radial extent of the graph is the product
          of the bin width and number of bins.  The bin width should be in
          microns if the model file had a pixel size defined, or if you
          entered a pixel size as described above.

          For angular graphs, the extent of the graph is always 180 degrees.
          Enter the number of bins to divide this range into, and the inner
          and outer radii of the annulus within which to look for neighbors to
          a reference point.

       Next you must specify the graphs that you want to compute.  First enter
       the number of graphs that you want.  Then enter the following specifi-
       cations for each graph in turn:

       For radial graphs, which show the density of neighboring points around
       the average reference point, enter:
          A list of types of points to consider as reference points, or Return
             to include all types.  Ranges may be entered, e.g., 250-252,255
          A list of types of points to consider as neighboring points, or
             Return to include all types.

       For angular graphs, which show the density of "angular neighbor" points
       as a function of angular separation from a "reference neighbor" point,
       where both neighbors are within the specified annulus around a central
       reference point, enter:
          A list of types of points to consider as central reference points,
             or Return to include all types.
          A list of types of points to consider as reference neighboring
             points, or Return to include all types.
          A list of types of points to consider as angular neighbors to those
             neighboring points, or Return to include all types.

       Finally, your graphs are displayed and you are presented with the fol-
       lowing options:

       1/2: Type/Average selected bins of the graph in a specified window
       3: Compute integrated number of (excess/missing) items in selected bins
       4/5: Display one graph in a window/Enter list of graphs to display
       6/7: Rescale X or Y axis of one window/Y axis of all windows
       8/9: Plot one window/all windows to PostScript graphics file
       10/11: Output PostScript graphics file to screen window/printer
       12: Output single or average graph to file
       13: Loop back to specify model contour defining new area to analyze
       14: Loop back to specify radial or angular graph and new boundary contour
       15: Analyze new region and average with previous region(s)
       16: Redo current region(s) with new bin size, # of bins, or types for
           graphs
       17: Redo current region(s) with angular instead of radial graph or vice
           versa
       18: Save bins of a graph to specify rejection probabilities for random
           points
       19/26/20: Do current region(s) with shuffled/converted types or random
                 points
       21: Save current set of points and their types as an IMOD model
       22/27/23: Do many sets with shuffled/converted types/random pnts for
                 integrals
       24: Take command input from file        25: Exit
       28/29/30: Save a graph/Average/Combine 2 graphs into an extra graph
                 location
       31/32: Save graph in file/Read from file into an extra graph location
       33: Replace some sets of bins by their averages
       34/35: Set up special big array for plots/Plot all windows in array
       37/38/39: Add list of graphs/Read list of graphs from file/Read&Add from
                 file
       42: Export graph values or points for drawing to file

            First note that the graphs are referred to by number, from 1 up to
       the total number that you computed.  The first few graphs (up to 4
       graphs) are displayed in the graphics window.  There are 4 areas in
       this graphics window which are referred to as "windows"; each window
       shows both the window number and the number of the graph displayed
       there, with the format WINDOW # : GRAPH #.  In some options, you refer
       to graphs by the graph number, while in other options, you refer to
       them by their window number.

       Here is a specific description of each option:

       1/2: To type or average some of the bins of a graph that is currently
       displayed in a window; enter the window number (1 to 4) and the start-
       ing and ending bin numbers to type or average, or / for all bins.  If
       you enter the negative of the graph number for option 1, you will get
       the raw values of the number of points counted in each bin, rather than
       the density averaged over the reference points.

       3: Use this option to integrate the number of neighboring points that
       are represented by a particular set of bins in a density graph dis-
       played in a window.  Enter the window number, the starting and ending
       bins to integrate, and the baseline or control level.  If you enter a
       control level of 0, you will get the total number of points in that
       range of radial or angular distances.  Otherwise, you will get the num-
       ber of points that are excess or deficient relative to the control
       level.  The default value for the control level (selected by terminat-
       ing the entry with ",," or "/" instead of a value) is the last average
       obtained with option 2.

       4: To display one graph in a window; enter the graph number and the
       window number.

       5: To display a set of graphs in up to 4 windows; enter a list (ranges
       allowed, e.g. 5-8) of up to 4 graph numbers, which will then be dis-
       played in windows 1 to 4.

       6: Rescale X or Y axis of one window; enter the window number and 0 to
       rescale X or 1 to rescale Y.  The program tells you the maximum value
       of the data in that dimension and the current full-scale value on that
       axis.  Then enter the desired full scale X or Y value.

       7: Use this option to rescale the Y axis of all windows to the same
       value, the largest full-scale value needed by any one window.  Note
       that you need to set up the scaling of the graphs to your liking with
       options 6 and 7 before using a plot command.

       8: Plot one window to a PostScript graphics file; enter the window num-
       ber and either 1, 2, 3, or 4 to put the graph in one of the 4 standard
       positions on a page, or 0 to specify the graph location and dimensions.
       Next, enter 1 to start the graph on a new page from a previous graph
       (if there was any previous graph).  IF you elected to specify the graph
       location and position, you now have many entries to make; see the sec-
       tion at the end of this document for details.

       9: Plot all windows (up to 4) to a PostScript graphics file.  The
       graphs will go in the four standard positions.  Enter 1 to start the
       graph on a new page from a previous graph.  Note that you need to set
       up the scaling of the graphs to your liking with options 6 and 7 before
       using a plot command.

       10: Graph the PostScript file on the screen.  When you return from this
       option, the program will start a new graphics file if you make any more
       graphs with options 8 or 9, and you will lose the file for the graphs
       that you have just seen.  So, if you want those graphs, you need to
       print them immediately with option 11, or rename the file from
       gmeta.ps.

       11: Print the graphs in the Postscript graphics file.

       12: Print the density values and other pertinent information about a
       graph in the output file defined when you started the program; enter
       the graph number.

       13: Loop back to specify a new region to analyze; enter the object and
       contour numbers of the boundary contour, 0,0 for a whole section, or
       -1,0 to read in a different model file.  If you have analyzed and aver-
       aged results from a series of regions, you will be warned that this
       option will destroy that list of regions, and you will have to confirm
       your desire to proceed.

       14: Loop back to specify both whether you want radial or angular graphs
       and a new region to analyze.  If you have analyzed and averaged results
       from a series of regions, you will be warned that this option will
       destroy that list of regions, and you will have to confirm your desire
       to proceed.

       15: Analyze a new region and average its density graphs with those from
       previous analyzed region(s); enter the object and contour numbers of
       the new boundary contour, 0,0 for a whole section, or -1,0 to read in a
       different model file.  The first time that you select this option after
       analyzing a single region, you will be told the graph numbers of the
       average graphs.  If there are N kinds of graphs being built, then
       graphs for the newly analyzed region alone are referred to as 1 to N,
       and average graphs are referred to as N+1 to 2N.

       16: Re-analyze the currently defined region(s) with different bin
       sizes, number of bins, or different specifications of the types to be
       used to build graphs from.  After entering a new bin size or number of
       bins, enter 1 if you want to specify new types of graphs, or 0 to use
       the existing specifications.  If several regions have been averaged
       together, then the program will automatically analyze and average all
       of those regions.

       17: Re-analyze the currently defined region(s) with angular instead or
       radial graphs, or radial instead of angular graphs.  You will have to
       enter new bin sizes, etc, as well as a complete new list of types for
       the various kinds of graphs that you want.  If several regions have
       been averaged together, then the program will automatically analyze and
       average all of those regions.

       18: Save the initial bins of a graph to use later as a list of proba-
       bilities for rejecting a randomly sampled point that is too close to
       another point.  Enter the graph number and a baseline density level
       that corresponds to a probability of 1.0.  The densities in the bins
       that are less than this baseline level will be converted to probabili-
       ties between 0 and 1 and stored for later use with options 20 and 23.
       This option is convenient but does not produce a very good match to the
       rising phase of a density graph; to do that, you have to adjust proba-
       bilities by hand.

       19: Do the currently defined analysis on the currently defined
       region(s), but with point types randomly shuffled.

       26: Do the currently defined analysis on the currently defined
       region(s), but with some of the point randomly converted to other
       types.  This option requires the following entries:

          Number of types to convert into other types

          For each of the types to be converted, then enter:
             The type to convert, the type to change it into, and the fraction
                of points of that type to convert

       20: Do the currently defined analysis on the currently defined
       region(s), but select random points for each region.  This option
       requires the following entries:

          Minimum allowed distance of the points from the boundary contour; to
             enter this distance in pixels, enter the negative of the desired
             distance (e.g., -10 for 10 pixels)

          IF you have previously saved probability values with option 18,
             enter 1 to use these values, or 0 not to.

          IF you are not using stored probability values, make the following
               entries:
             The number of bins of probability values to use for rejecting
                sampled points as being too close to other points, and the bin
                size  (a radial distance).  Enter 0,0 for no rejection of
                close points.
             The probability values (between 0 and 1)

       21: Save the current set of points and their types as an IMOD model.
       Enter the model file name.  Use this option to examine shuffled types
       or randomly sampled points.

       22/27/23: Do a series of sets of randomly shuffled or converted types
       or randomly sampled points in order to obtain statistics on the signif-
       icance of integrated deficiencies or excesses in the real density
       graphs.  If you select option 27, first enter 0 to use previously spec-
       ified conversions of types, or 1 to specify new conversions, in which
       case you would then make the entries listed under option 26 above.  If
       you select option 23, first make the entries described above under
       option 20 to control the sampling of points.  For all of the options,
       then make the following entries to control the computation of inte-
       grals:

          0 to make a separate specification for each graph of the bins to use
             in computing the integral, or 1 to use the same specification for
             all graphs

          IF you entered 0, make the following entries for each graph;
             otherwise just make these entries once:

             Starting and ending bins of the peak or deficiency to integrate

             Starting and ending bins to compute a baseline density from, or
                0,0 to use a fixed value for the baseline instead of computing
                it from each graph

             IF you entered 0,0, then enter the fixed baseline density value.

       The program will next compute and type out the integral for each graph.
       It will then ask you for the number of control sets to run.  It will do
       these control sets, and type out the mean and standard deviation of the
       integral for each graph, and the number of sets whose integrals exceed
       the integral of the real data.  You can specify a new number of sets to
       run, whose results will be accumulated with existing results, or you
       can enter 0 to return to selecting options.

       24: Take input from a command file; enter the file name or Return to
       continue or resume input from the keyboard.  The file should end with a
       24 and a blank line to resume input from the keyboard, or a 25 to exit
       the program.

       28:  Save a graph in an "extra" graph location.  An extra location is
       any graph location up to 50; it may already contain a graph.  Enter the
       graph number, and the number of the graph location to save it into.

       29:  Average two graphs into an extra graph location.  The program will
       average the two graphs by computing the total point count and the total
       area occupied by each bin and deriving the density from these values.
       Enter the numbers of the two graphs to average and the number of the
       graph location (any number of 50) in which to place the result.

       30:  Linearly combine two graphs into an extra graph location.  This
       will form a weighed sum of two graphs.  Enter the numbers of the two
       graphs, the coefficients to apply to each, and the number of the loca-
       tion to place the result in.

       31:  Save a graph in a file, in a form that can be easily retrieved and
       redisplayed.  First enter the number of the graph to save.  Then enter
       the name of the file to save it in, or Return to add it to the
       currently open file if graphs have already been saved into that file.

       32:  Read a graph from a file that was saved with option 31.  First
       enter the number of the graph location to read the graph into (any
       value up to 50).  Then enter the name of the file to read from, or
       return to read from a file that has been read from before.  Then enter
       the number of the graph in the file to read.

       33:  Replace some sets of bins by their averages.  In its simplest
       form, this option allows you to combine bins into larger bins and get
       the same graph you would have gotten if you had run the analysis with
       the larger bin size.  However, you can choose to combine only selected
       sets of bins, thus allowing you to have a single graph with narrow bins
       in some places and apparently broader bins elsewhere.  Also, you can
       have the program automatically figure out which bins to combine where,
       so that the densities in all of the new apparent bins are based on
       roughly the same amount of area.  This will give you a graph with a
       noise level that is nearly constant across the graph, and may help you
       distinguish signal from noise.  For simple combination of bins, enter
       the number of bins to be averaged together in each replacement, and the
       starting and ending bin numbers to replace (e.g., 3,1,12 will replace
       bins 1, 2, and 3 by their average, 4, 5, and 6 by their average, and
       7-9 and 10-12 by their averages).  For automatic optimal combination of
       bins, enter the NEGATIVE of the desired number of apparent bins to end
       up with over the range of bins being replaced, and the starting and
       ending bin numbers to replace.  For example, -5,1,20 will divide the 20
       bins from 1 to 20 into 5 sets that have, as nearly as possibly, the
       same amount of area for the density calculation.  The program will then
       replace the bins in each set by that set's average.
            After this first entry, next enter a list of graphs to apply the
       replacement to, or Return to apply it to all graphs.  Although you can
       validly run the option first on one set of bins and then again on a
       non-overlapping set of bins, do not run the option more than once on
       the same set of bins.  To experiment with combining bins in different
       ways, copy the desired graph into an extra graph location and combine
       the bins of that copy.  To get the best results from the automatic com-
       bination of bins, start with bins that are much smaller than the final
       desired bin size.

       34:  To set up a big array of graphs on a page for printing.  This
       requires the following entries:

          Number of columns and rows in the array

          0 to fill one row after another, or 1 to fill one column after
            another

          Number of ticks along the X axis, number along the Y axis

          Size of gutter between graphs in X and in Y (/ for 0.20 0.20)

          A value to scale all graphs to on the Y axis, or 0 for no rescaling

       35:  To plot all of the currently displayed windows into the next free
       positions in the big array set up by 34.  The program will tell you
       where each graph has been placed.

       37: Add a list of graphs into an extra graph loaction.  First enter the
       list of graphs to add together, then enter the location in which to
       place the sum.

       38: Read a list of graphs from a file and place each in a separate
       extra graph location.  First enter the list of graph numbers in the
       file, then enter the list of graph locations in which to place them,
       then enter the name of the graph file from which to read the graphs.

       39: Add together a list of graphs from a file.  First enter an extra
       location in which to place the final sum, and an extra location to be
       used for temporary storage.  Then enter the list of graph numbers in
       the file.  Finally enter the name of the graph file.

       42: Export a graph to a file; i.e., output the graph information in a
       format suitable for importing into a spreadsheet or graphing program.
       First enter the number of the graph to save.  Then enter the name of
       the file to save it in (only one graph can be saved per file).  Then
       enter 0 to output the density values or 1 to output raw counts in each
       bin.  Finally, enter 1 to output points that could be connected to draw
       a histogram, or 2 to output the starting distance and bin value for
       each bin, 3 for the midpoint distance and bin value of each bin, or 4
       for the starting and ending distance and bin value for each bin.

            If you have generated a random data set by randomizing types or by
       sampling random points, and there is only one region being analyzed,
       then when you invoke options 16 or 17, you have the option of analyzing
       either the random data or the original, real data.  This allows you to
       examine a single random set in some detail.  Also, if you have sampled
       random points with option 20 and you select option 19 to shuffle point
       types, you will have the option of shuffling the types of those random
       points or of the original, real data.


   Making Special Graphs with Good Labels
            If you used option 8 and entered a 0 to indicate that you wanted
       to specify all the characteristics of the graph, then you have many
       entries to make.  If you are trying to make graphs for publication, it
       is much easier to set up a command file to do this.  The file ndapltex-
       amp.dat (in the directory $IMOD_DIR/com) can be copied and modified for
       this use. Some guidance to the use of this file is given below, but
       first, here is a blow-by-blow description of the entries required after
       electing to specify the graph characteristics:

          The graph size in X and Y and coordinates of the lower-left corner
          in inches; there are 7.5 inches on the page and the lower-left
          corner of the page is at coordinates of (0,0).

          The number of divisions (ticks) along the X and Y axes, the tick
          size in inches, the line thickness (a small integer, 1 for ordinary
          lines), and 1 to enclose the graph in a box or 0 to omit the top and
          right axes.  Use negative numbers of ticks and a negative tick size
          to get ticks that go outward from the graph only.

          Next, for the X axis, enter:

            # of ticks to label with numeric labels, and number of lines of
                text labels.

            IF you specified a nonzero number of ticks to label, next enter:

              If the ticks are to be labeled at regular intervals, enter the
                  number of the first tick to label (first tick is #1) and
                  the interval between labeled ticks (e.g. 2 for every other
                  tick or enter 0,0 to specify a list of ticks to label.

                  IF you entered 0,0, next enter the #'s of the ticks to label

              Labels for the ticks, in one line, separated by commas or spaces

              Numeric label size and separation from axis, in inches

            IF you specified a nonzero number of text labels, next enter for
                each label in turn:

               Text label size, separation from axis, and offset along axis
                    between center of axis and center of text.

               Text label

          Next enter these parameters in the same order for the Y axis

          Finally, the program calls the IMMISC subroutine.  Here, coordinates
          may be specified in one of three ways independently for each of
          the entries to the program.  The coordinates may be in "user"
          units (the units of the numbers being graphed), in absolute units
          of inches on the plotter page, or in units relative to the frame
          of the graph (e.g. 0.1,0.9 for a position in the upper left
          corner, or 0.5,1.1 for a position centered above the graph frame).

           Enter the number of text labels, # of letters in circles,
               # of symbols in boxes, and # of dashed or solid lines to draw

           IF you entered a non-zero # of text labels, then for each, enter:

               X and Y position, and 0 for user or 1 for absolute or -1 for
                   relative units

               0 to center, -1 to left justify, or 1 to right justify the
                   character string on this position

               Size of characters in inches, and orientation angle in
                   degrees (usually 0 or 90)

               Text, on one line

           IF you entered a non-zero # of circled letters, then for each:

               X and Y position, and 0 for user or 1 for absolute or -1 for
                   relative units

               Diameter of circle in inches, line thickness

               Size of character in inches

               Letter (upper case)

           IF you entered a non-zero # of boxed symbols, then for each:

               X and Y position, and 0 for user or 1 for absolute or -1 for
                   relative units

               Symbol type (or 0 for no symbol), symbol size in inches,
                   symbol thickness (a small integer), box size in inches
                   (or 0 for no box), box line thickness

           IF you entered a non-zero # of lines, then for each, enter:

               0 for user, 1 for absolute, or -1 for relative units

               A line specification as described above, in the units just
                   indicated


            Here are some hints about using the ndapltexamp.dat file.
            1) If you want to make several graphs on a page, you have two
       options: either make a command file for each graph, or combine all of
       the needed commands into a single file.
            2) For the first graph placed into a new PostScript file, the pro-
       gram does not ask whether you want a new page; so for the first graph,
       you need to omit the line specifying whether to start a new page or
       not.
            3) You need to decide how many divisions to divide the X and Y
       axes into, based upon the number of units displayed along the axes.
            4) Negative numbers of ticks, and a negative tick size, as in the
       example, will produce tick marks that go only toward the outsides of
       the graph, which is preferable.
            5) If you want neither numeric nor text labels for an axis, set
       the number of these labels to 0 and 0 and eliminate the following 5
       lines.  If you want only numeric labels, eliminate the two lines
       related to text labels; if you want only a text label, eliminate the
       three lines related to numeric labels.
            6) You must list the desired numeric labels on a line, separated
       by commas.
            7) Special characters can be placed into text labels.  The example
       shows how to get a Greek micron and a superscript.  There are three
       special codes: ^P to make the next character a superscript, ^B to make
       the next character a subscript, and ^S to make the next character be
       printed from the symbol font.  (If you want more than one special char-
       acter in a row, each must be preceded by the nexessary code.)  In the
       symbol font, letters map to Greek characters; some other useful entries
       are 260 for a degree symbol, 261 for +/-, and 264 for a times symbol
       (x).
            8) If you want a single X text label to span two graphs that are
       side by side, label the X axis for the graph on the left and shift it
       to the right by the appropriate amount by putting in a positive "offset
       right from center".  Similarly, to have one Y label for two graphs on
       top of each other, specify the label for the lower graph and shift it
       up with a positive "offset up from center".
            9) The example provides for one line of text and one letter in a
       circle; you can easily add more lines of text.  These items need not be
       placed inside the frame of the graph: the relative X and Y coordinates
       can be less than 0 or greater than 1 to place items outside the frame.
            10) If you want no text labels, set the "# of lines of text" to 0
       and eliminate the 4 lines related to the text line.  If you want no
       letter in a circle, set the "# of letters in circles" to 0 and elimi-
       nate the 4 lines related to the letter in the circle.
            11) If you want to plot more than one graph with a command file,
       put the appropriate NDA commands in place, then a new set of plotting
       commands, before returning to keyboard input with a 24.

HISTORY
          Written by David Mastronarde  7/31/90

BUGS
       Email bug reports to mast at colorado dot edu.



BL3DEMC                              4.7.3                              nda(1)