Execution Time0.09s

Test: tendlist (Passed)
Build: teem-Slicer-Windows-AMD64 (EC2AMAZ-IA2B3CP) on 2022-12-09 00:05:18
Repository revision: e4746083c0e1dc0c137124c41eca5d23adf73bfa

Processors1

Show Command Line
Display graphs:

Test output
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend
            --- tend: Diffusion Image Processing and Analysis ---
    tend about ... Information about this program and its use
    tend grads ... Calculate balanced gradient directions for DWI acquisition
   tend epireg ... Register diffusion-weighted echo-planar images
     tend bmat ... Calculate B-matrix given gradient directions
    tend estim ... Estimate tensors from a set of DW images
      tend sim ... Simulate DW images from a tensor field
     tend mfit ... Estimate models from a set of DW images
    tend mconv ... convert from one model to another
     tend msim ... Simulate DW images from an image of models
     tend make ... Create DT volume from confidence and eigensystem
      tend avg ... Average across tensor volumes
    tend helix ... Generate twisting helical tensor field
     tend sten ... Calculate structure tensors from a scalar field
    tend glyph ... Generate postscript or ray-traced renderings of 3D glyphs
  tend ellipse ... Generate postscript renderings of 2D glyphs
   tend anplot ... Graph anisotropy metric in barycentric coords
    tend anvol ... Apply an anisotropy metric to a DT volume
  tend anscale ... Scale the anisotropic component of the tensors
   tend anhist ... Generate barycentric histograms of anisotropy
   tend triple ... Compute volume of shape triples
    tend tconv ... Convert between different shape triples
    tend point ... Describe everything about one sample in a DT volume
    tend slice ... Slice 3D tensors to get slab/image of 3D/2D tensors
     tend norm ... Normalize tensor size
    tend fiber ... Fiber tractography, from one or more seeds
     tend eval ... Calculate one or more eigenvalues in a DT volume
  tend evalpow ... Modify shape by raising eigenvalues to some power
tend evalclamp ... Modify shape by clamping eigenvalues in some range
  tend evaladd ... Modify shape by adding a constant to all eigenvalues
 tend evalmult ... Modify shape by multiplying eigenvalues by a constant
      tend log ... Calculates logarithm of the tensor
      tend exp ... Calculates exp() of the tensor
     tend evec ... Calculate one or more eigenvectors in a DT volume
  tend evecrgb ... Make an RGB volume from an eigenvector and an anisotropy
      tend evq ... Quantize directions of diffusion
     tend unmf ... Applies and removes the measurement frame
   tend expand ... Converts masked non-redundant tensor images to redundant
   tend shrink ... Converts a 9-value DT volume to a 7-value DT volume
     tend bfit ... Non-linear least-squares fitting of b-value curves
    tend satin ... Generate a pretty synthetic DT volume
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend about

            --- tend: Diffusion Image Processing and Analysis ---
         Teem version 1.12.0, maybe 2014 or 2015 (not yet released)

    "tend" is a command-line interface to much of the functionality in "ten",
 a C library for diffusion image processing. Ten is one library in the "Teem"
 collection of libraries. More information about Teem is at
 <http://teem.sf.net>. A checkout of Teem source is available via:
 svn co http://svn.code.sf.net/p/teem/code/teem/trunk teem
 
    Long-term maintenance of this software depends on funding, and funding
 depends on being able to document who is using it for what. If tend or Ten
 has helped in your research, including for simple one-off experiments or
 mundane data hacking, the developers of Teem would love to know. There are
 multiple ways of communicating this. In your publications, consider adding a
 line such as this in the Acknowledgments: "Data processing performed with the
 tend tool, part of the Teem toolkit available at http://teem.sf.net".
 Alternatively, please email glk@uchicago.edu and briefly describe how Teem
 software has helped in your work. Please also consider joining the teem-users
 mailing list: <http://lists.sourceforge.net/lists/listinfo/teem-users>. This
 is the primary forum for feedback, questions, and feature requests.
 
    Like "unu", another Teem command-line binary, it is often useful to chain
 together invocations of tend with pipes, as in the following, which estimates
 tensors from DWIs, takes a slice of the tensor volume, computes the standard
 RGB colormap of the principal eigenvector, and then quantizes it to an 8-bit
 PNG:
 
 tend estim -i dwi.nhdr -B kvp -knownB0 true \
  | tend slice -a 2 -p 30 \
  | tend evecrgb -c 0 -a cl2 -gam 1.2 \
  | unu quantize -b 8 -min 0 -max 1 -o z30-rgb.png
  
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend about (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend grads

grads: Calculate balanced gradient directions for DWI acquisition, based on a
simulation of anti-podal point pairs repelling each other on the unit sphere
surface. This can either distribute more uniformly a given set of gradients, or
it can make a new distribution from scratch. A more clever implementation could
decrease drag with time, as the solution converges, to get closer to the
minimum energy configuration faster. In the mean time, you can run a second
pass on the output of the first pass, using lower drag. A second phase of the
algorithm tries sign changes in gradient directions in trying to find an
optimally balanced set of directions. This uses a randomized search, so if it
doesn't seem to be finishing in a reasonable amount of time, try restarting
with a different "-seed".

Usage: grads [-n <# dir>] [-i <grads>] [-seed <value>] [-step <step>] \
       [-single] [-snap <interval>] [-jitter <jitter>] [-miniter <# iters>] \
       [-maxiter <# iters>] [-minvelo <vel>] [-exp <exponent>] [-dp <potential \
       change>] [-minimprov <delta>] [-minmean <len>] [-izv <insert>] \
       [-o <filename>]

            -n <# dir> = desired number of diffusion gradient directions
                         (int); default: "6"
            -i <grads> = initial gradient directions to start with, instead of
                         default random initial directions (overrides "-n")
                         (nrrd); default: ""
         -seed <value> = seed value to used with airSrandMT() (unsigned int);
                         default: "42"
          -step <step> = time increment in solver (double); default: "1.0"
               -single = instead of the default behavior of tracking a pair of
                         antipodal points (appropriate for determining DWI
                         gradients), use only single points (appropriate for
                         who knows what).
      -snap <interval> = specifies an interval between which snapshots of the
                         point positions should be saved out. By default (not
                         using this option), there is no such snapshot behavior
                         (int); default: "0"
      -jitter <jitter> = amount by which to perturb points when given an input
                         nrrd (double); default: "0.1"
    -miniter <# iters> = max number of iterations for which to run the
                         simulation (int); default: "0"
    -maxiter <# iters> = max number of iterations for which to run the
                         simulation (int); default: "1000000"
        -minvelo <vel> = low threshold on mean velocity of repelling points,
                         at which point repulsion phase of algorithm
                         terminates. (double); default: "0.00001"
       -exp <exponent> = the exponent n that determines the potential energy
                         1/r^n. (double); default: "1"
-dp <potential change> = low threshold on fractional change of potential at
                         which point repulsion phase of algorithm terminates.
                         (double); default: "0.000000001"
    -minimprov <delta> = in the second phase of the algorithm, when
                         stochastically balancing the sign of the gradients,
                         the (small) improvement in length of mean gradient
                         which triggers termination (as further improvements
                         are unlikely. (double); default: "0.00005"
        -minmean <len> = if length of mean gradient falls below this, finish
                         the balancing phase (double); default: "0.0001"
         -izv <insert> = adding zero vector at beginning of grads (bool);
                         default: "false"
         -o <filename> = file to write output nrrd to (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend grads (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend epireg

epireg: Register diffusion-weighted echo-planar images. This registration
corrects the shear, scale, and translate along the phase encoding direction
(assumed to be the Y (second) axis of the image) caused by eddy currents from
the diffusion-encoding gradients with echo-planar imaging. The method is based
on calculating moments of segmented images, where the segmentation is a simple
procedure based on blurring (optional), thresholding and connected component
analysis. The registered DWIs are resampled with the chosen kernel, with the
separate DWIs stacked along axis 0.

Usage: epireg -i <dwi0 dwi1 ...> -g <grads> [-r <reference>] [-nv] [-p] \
       [-bw <x,y blur>] [-t <DWI thresh>] [-ncc] [-f <fit frac>] [-k <kernel>] \
       [-s <start #>] [-o <output/prefix>]

-i <dwi0 dwi1 ...> = all the diffusion-weighted images (DWIs), as separate 3D
                     nrrds, **OR**: one 4D nrrd of all DWIs stacked along axis
                     0 (1 or more nrrds)
        -g <grads> = array of gradient directions, in the same order as the
                     associated DWIs were given to "-i", **OR** "-g kvp"
                     signifies that gradient directions should be read from the
                     key/value pairs of the DWI (string)
    -r <reference> = which of the DW volumes (zero-based numbering) should be
                     used as the standard, to which all other images are
                     transformed. Using -1 (the default) means that 9 intrinsic
                     parameters governing the relationship between the gradient
                     direction and the resulting distortion are estimated and
                     fitted, ensuring good registration with the
                     non-diffusion-weighted T2 image (which is never explicitly
                     used in registration). Otherwise, by picking a specific
                     DWI, no distortion parameter estimation is done. (int);
                     default: "-1"
               -nv = turn OFF verbose mode, and have no idea what stage
                     processing is at.
                -p = save out intermediate steps of processing
    -bw <x,y blur> = standard devs in X and Y directions of gaussian filter
                     used to blur the DWIs prior to doing segmentation. This
                     blurring does not effect the final resampling of
                     registered DWIs. Use "0.0 0.0" to say "no blurring"
                     (2 floats); default: "1.0 2.0"
   -t <DWI thresh> = Threshold value to use on DWIs, to do initial separation
                     of brain and non-brain. By default, the threshold is
                     determined automatically by histogram analysis. (float);
                     default: "nan"
              -ncc = do *NOT* do connected component (CC) analysis, after
                     thresholding and before moment calculation. Doing CC
                     analysis usually gives better results because it converts
                     the thresholding output into something much closer to a
                     real segmentation
     -f <fit frac> = (only meaningful with "-r -1") When doing linear fitting
                     of the intrinsic distortion parameters, it is good to
                     ignore the slices for which the segmentation was poor. A
                     heuristic is used to rank the slices according to
                     segmentation quality. This option controls how many of the
                     (best) slices contribute to the fitting. Use "0" to
                     disable distortion parameter fitting. (float);
                     default: "0.70"
       -k <kernel> = kernel for resampling DWIs along the phase-encoding
                     direction during final registration stage (kernel
                     specification); default: "cubic:0,0.5"
      -s <start #> = first number to use in numbered sequence of output files.
                     (int); default: "1"
-o <output/prefix> = For separate 3D DWI volume inputs: prefix for output
                     filenames; will save out one (registered) DWI for each
                     input DWI, using the same type as the input. **OR**: For
                     single 4D DWI input: output file name. (string);
                     default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend epireg (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend bmat

bmat: Calculate B-matrix given gradient directions, assuming no diffusion
weighting from the other imaging gradients. The input is a 3-by-N array of
floats or doubles, each row being one of the gradient directions used for
diffusion-weighted imaging. A plain text file with one gradient per line, no
punctuation, is an easy way to specify this information. The gradient vector
coefficients are used as is, without normalization (since different gradient
strengths are sometimes desired). The output has one row of the B-matrix per
line, with coefficient ordering Bxx, Bxy, Bxz, Byy, Byz, Bzz, and with the
off-diagonal elements NOT pre-multiplied by 2.

Usage: bmat -i <grads> [-o <nout>]

-i <grads> = array of gradient directions (nrrd)
 -o <nout> = output B matrix (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend bmat (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend estim

estim: Estimate tensors from a set of DW images. The tensor coefficient
weightings associated with each of the DWIs, the B-matrix, is given either as a
separate array, (see "tend bmat" usage info for details), or by the key-value
pairs in the DWI nrrd header. A "confidence" value is computed with the tensor,
based on a soft thresholding of the sum of all the DWIs, according to the
threshold and softness parameters.

Usage: estim [-old] [-sigma <sigma>] [-v <verbose>] [-est <estimate method>] \
       [-wlsi <WLS iters>] [-fixneg] [-ee <filename>] [-eb <filename>] \
       [-t <thresh>] [-soft <soft>] [-scale <scale>] [-mv <min val>] \
       -B <B-list> [-b <b>] -knownB0 <bool> [-i <dwi0 dwi1 ...>] [-o <nout>]

                  -old = instead of the new tenEstimateContext code, use the
                         old tenEstimateLinear code
        -sigma <sigma> = Rician noise parameter (float); default: "nan"
          -v <verbose> = verbosity level (int); default: "0"
-est <estimate method> = estimation method to use. "lls": linear-least squares
                         (single-tensor-estimation); default: "lls"
     -wlsi <WLS iters> = when using weighted-least-squares ("-est wls"), how
                         many iterations to do after the initial weighted fit.
                         (unsigned int); default: "1"
               -fixneg = after estimating the tensor, ensure that there are no
                         negative eigenvalues by adding (to all eigenvalues)
                         the amount by which the smallest is negative
                         (corresponding to increasing the non-DWI image value).
        -ee <filename> = Giving a filename here allows you to save out the
                         tensor estimation error: a value which measures how
                         much error there is between the tensor model and the
                         given diffusion weighted measurements for each sample.
                         By default, no such error calculation is saved.
                         (string); default: ""
        -eb <filename> = In those cases where there is no B=0 reference image
                         given ("-knownB0 false"), giving a filename here
                         allows you to save out the B=0 image which is
                         estimated from the data. By default, this image value
                         is estimated but not saved. (string); default: ""
           -t <thresh> = value at which to threshold the mean DWI value per
                         pixel in order to generate the "confidence" mask. By
                         default, the threshold value is calculated
                         automatically, based on histogram analysis. (double);
                         default: "nan"
          -soft <soft> = how fuzzy the confidence boundary should be. By
                         default, confidence boundary is perfectly sharp
                         (float); default: "0"
        -scale <scale> = After estimating the tensor, scale all of its
                         elements (but not the confidence value) by this
                         amount. Can help with downstream numerical precision
                         if values are very large or small. (float);
                         default: "1"
         -mv <min val> = minimum plausible value (especially important for
                         linear least squares estimation) (double);
                         default: "1.0"
           -B <B-list> = 6-by-N list of B-matrices characterizing the
                         diffusion weighting for each image. "tend bmat" is one
                         source for such a matrix; see its usage info for
                         specifics on how the coefficients of the B-matrix are
                         ordered. An unadorned plain text file is a great way
                         to specify the B-matrix.
                         **OR**
                         Can say just "-B kvp" to try to learn B matrices from
                         key/value pair information in input images.
                         (string)
                -b <b> = "b" diffusion-weighting factor (units of sec/mm^2)
                         (double); default: "nan"
       -knownB0 <bool> = Indicates if the B=0 non-diffusion-weighted reference
                         image is known, or if it has to be estimated along
                         with the tensor elements.
                          o if "true": in the given list of diffusion
                         gradients or B-matrices, there are one or more with
                         zero norm, which are simply averaged to find the B=0
                         reference image value
                          o if "false": there may or may not be
                         diffusion-weighted images among the input; the B=0
                         image value is going to be estimated along with the
                         diffusion model
                         (bool)
    -i <dwi0 dwi1 ...> = all the diffusion-weighted images (DWIs), as separate
                         3D nrrds, **OR**: One 4D nrrd of all DWIs stacked
                         along axis 0 (1 or more nrrds); default: "-"
             -o <nout> = output tensor volume (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend estim (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend sim

sim: Simulate DW images from a tensor field. The output will be in the same
form as the input to "tend estim". The B-matrices ("-B") can be the output from
"tend bmat", or the gradients can be given directly ("-g"); one of these is
required. Note that the input tensor field ("-i") is the basis of the output
per-axis fields and image orientation. NOTE: this includes the measurement
frame used in the input tensor field, which implies that the given gradients or
B-matrices are already expressed in that measurement frame.

Usage: sim [-old] [-sigma <sigma>] [-seed <seed>] [-g <grad list>] [-B <B \
       matrix>] -r <reference field> [-i <tensor field>] [-b <b>] [-kvp] \
       [-t <type>] [-o <nout>]

                -old = don't use the new tenEstimateContext functionality
      -sigma <sigma> = Rician noise parameter (float); default: "0.0"
        -seed <seed> = seed value for RNG which creates noise (int);
                       default: "42"
      -g <grad list> = gradient list, one row per diffusion-weighted image
                       (nrrd)
       -B <B matrix> = B matrix, one row per diffusion-weighted image. Using
                       this overrides the gradient list input via "-g" (nrrd)
-r <reference field> = reference anatomical scan, with no diffusion weighting
                       (nrrd)
   -i <tensor field> = input diffusion tensor field (nrrd)
              -b <b> = b value for simulated scan (float); default: "1000"
                -kvp = generate key/value pairs in the NRRD header
                       corresponding to the input b-value and gradients or
                       B-matrices. 
           -t <type> = output type of DWIs (type); default: "float"
           -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend sim (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend mfit

mfit: Estimate models from a set of DW images. More docs here.

Usage: mfit [-v <verbose>] -m <model> [-ns <# starts>] [-ml] [-sigma <sigma>] \
       [-eps <eps>] [-mini <min iters>] [-maxi <max iters>] -knownB0 <bool> \
       [-t <type>] [-i <dwi>] [-o <nout>] [-eo <filename>] [-co <filename>] \
       [-io <filename>]

     -v <verbose> = verbosity level (int); default: "0"
       -m <model> = which model to fit. Use optional "b0+" prefix to indicate
                    that the B0 image should also be saved (independent of
                    whether it was known or had to be estimated, according to
                    "-knownB0"). (string)
   -ns <# starts> = number of random starting points at which to initialize
                    fitting (unsigned int); default: "1"
              -ml = do ML fitting, rather than least-squares, which also
                    requires setting "-sigma"
   -sigma <sigma> = Gaussian/Rician noise parameter (double); default: "nan"
       -eps <eps> = convergence epsilon (double); default: "0.01"
-mini <min iters> = minimum required # iterations for fitting. (unsigned int);
                    default: "3"
-maxi <max iters> = maximum allowable # iterations for fitting. (unsigned
                    int); default: "100"
  -knownB0 <bool> = Indicates if the B=0 non-diffusion-weighted reference
                    image is known ("true") because it appears one or more
                    times amongst the DWIs, or, if it has to be estimated along
                    with the other model parameters ("false") (bool)
        -t <type> = output type of model parameters (type); default: "float"
         -i <dwi> = all the diffusion-weighted images in one 4D nrrd (nrrd)
        -o <nout> = output parameter vector image (string); default: "-"
   -eo <filename> = Giving a filename here allows you to save out the
                    per-sample fitting error. By default, no such error is
                    saved. (string); default: ""
   -co <filename> = Giving a filename here allows you to save out the
                    per-sample convergence fraction. By default, no such error
                    is saved. (string); default: ""
   -io <filename> = Giving a filename here allows you to save out the
                    per-sample number of iterations needed for fitting. By
                    default, no such error is saved. (string); default: ""
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend mfit (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend mconv

mconv: convert from one model to another. More docs here.

Usage: mconv -mo <model> [-mi <model>] [-i <nin>] [-o <nout>]

-mo <model> = which model to convert to (string)
-mi <model> = model converting from; if not set, will try to determine from
              input nrrd (string); default: ""
   -i <nin> = input nrrd of model parms (nrrd)
  -o <nout> = output nrrd of model parms (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend mconv (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend msim

msim: Simulate DW images from an image of models. The output will be in the
same form as the input to "tend estim". The B-matrices ("-B") can be the output
from "tend bmat", or the gradients can be given directly ("-g"); one of these
is required. Note that the input tensor image ("-i") is the basis of the output
per-axis fields and image orientation. NOTE: this includes the measurement
frame used in the input tensor image, which implies that the given gradients or
B-matrices are already expressed in that measurement frame.

Usage: msim [-sigma <sigma>] [-seed <seed>] -g <grad list> [-b0 <b0 image>] \
       [-i <model image>] -m <model> [-ib0 <bool>] [-b <b>] [-kvp <bool>] \
       [-t <type>] [-o <nout>]

  -sigma <sigma> = Gaussian/Rician noise parameter (double); default: "0.0"
    -seed <seed> = seed value for RNG which creates noise (int); default: "42"
  -g <grad list> = gradient list, one row per diffusion-weighted image (nrrd)
  -b0 <b0 image> = reference non-diffusion-weighted ("B0") image, which may be
                   needed if it isn't part of give model param image (nrrd)
-i <model image> = input model image (nrrd)
      -m <model> = model with which to simulate DWIs, which must be specified
                   if it is not indicated by the first axis in input model
                   image. (string)
     -ib0 <bool> = insert a non-DW B0 image at the beginning of the experiment
                   specification (useful if the given gradient list doesn't
                   already have one) and hence also insert a B0 image at the
                   beginning of the output simulated DWIs (bool);
                   default: "false"
          -b <b> = b value for simulated scan (double); default: "1000"
     -kvp <bool> = generate key/value pairs in the NRRD header corresponding
                   to the input b-value and gradients. (bool); default: "true"
       -t <type> = output type of DWIs (type); default: "float"
       -o <nout> = output dwis (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend msim (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend make

make: Create DT volume from confidence and eigensystem. The input is in the
form of three nrrds, one for confidence values (3D), one for eigenvalues (4D,
three evals per voxel), and one for eigenvectors (4D, nine evec components per
voxel).

Usage: make -i <conf evals evecs> [-o <nout>]

-i <conf evals evecs> = input diffusion tensor volume (3 nrrds)
            -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend make (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend avg

avg: Average across tensor volumes. The output is the same size as the any one
of the inputs. The individual tensors may be averaged in various ways.

Usage: avg -i <nin1 nin2 ...> [-t <type>] [-o <nout>]

-i <nin1 nin2 ...> = list of input diffusion tensor volumes (2 or more nrrds)
         -t <type> = averaging method (interp type); default: "linear"
         -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend avg (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend helix

helix: Generate twisting helical tensor field. The main utility of such a
field is to debug handling of coordinate systems in tensor field visualization.
The "space directions" and "space origin" fields of the NRRD header determines
the mapping from coordinates in the index space of the image to coordinates in
the world space in which the image is sampled. The "measurement frame" field
determines the mapping from the coordinates of the tensor itself, to
coordinates of the world space. When these are correctly handled, the region of
high anisotropy is a right-handed helix (same as DNA). Using differing axes
sizes (via "-s") helps make sure that the raster ordering of axes is correct.
In addition, the tensors twist relative to the helix, which exposes handling of
the measurement frame. If you trace paths guided by the principal eigenvector
of the tensors, along the surface of the helical cylinder, you get another
right-handed helix, as if the the tensor field is modeling the result if
twisting a set of fibers into single-stranded helical bundle.

Usage: helix -s <size> [-ip <image orientation>] [-mp <measurement \
       orientation>] [-b <boundary>] [-r <little radius>] [-R <big radius>] \
       [-S <spacing>] [-a <angle>] [-nit] [-ev <eigenvalues>] \
       [-bg <background>] [-v <verbose>] [-o <nout>]

                    -s <size> = sizes along fast, medium, and slow axes of the
                                sampled volume, often called "X", "Y", and "Z".
                                It is best to use slightly different sizes
                                here, to expose errors in interpreting axis
                                ordering (e.g. "-s 39 40 41") (3 ints)
      -ip <image orientation> = quaternion quotient space orientation of image
                                (3 doubles); default: "0 0 0"
-mp <measurement orientation> = quaternion quotient space orientation of
                                measurement frame (3 doubles); default: "0 0 0"
                -b <boundary> = parameter governing how fuzzy the boundary
                                between high and low anisotropy is. Use "-b 0"
                                for no fuzziness (double); default: "10"
           -r <little radius> = (minor) radius of cylinder tracing helix
                                (double); default: "30"
              -R <big radius> = (major) radius of helical turns (double);
                                default: "50"
                 -S <spacing> = spacing between turns of helix (along its
                                axis) (double); default: "100"
                   -a <angle> = maximal angle of twist of tensors along path.
                                There is no twist at helical core of path, and
                                twist increases linearly with radius around
                                this path. Positive twist angle with positive
                                spacing resulting in a right-handed twist
                                around a right-handed helix. (double);
                                default: "60"
                         -nit = changes behavior of twist angle as function of
                                distance from center of helical core: instead
                                of increasing linearly as describe above, be at
                                a constant angle
            -ev <eigenvalues> = eigenvalues of tensors (in order) along
                                direction of coil, circumferential around coil,
                                and radial around coil. (3 doubles);
                                default: "0.006 0.002 0.001"
             -bg <background> = eigenvalue of isotropic background (double);
                                default: "0.5"
                 -v <verbose> = verbose output (int); default: "1"
                    -o <nout> = output file (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend helix (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend sten

sten: Calculate structure tensors from a scalar field. Not a diffusion tensor,
but it is symmetric and positive-definate.

Usage: sten [-ds <diff. scale>] [-is <int. scale>] [-df <downsample factor>] \
       [-i <nin>] [-o <nout>]

      -ds <diff. scale> = differentiation scale, in pixels: the radius of the
                          kernel used for differentation to compute gradient
                          vectors (int); default: "1"
       -is <int. scale> = integration scale, in pixels: the radius of the
                          kernel used for blurring outer products of gradients
                          in order compute structure tensors (int);
                          default: "2"
-df <downsample factor> = the factor by which to downsample when creating
                          volume of structure tensors (int); default: "1"
               -i <nin> = input scalar volume (nrrd)
              -o <nout> = output filename (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend sten (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend glyph

glyph: Generate postscript or ray-traced renderings of 3D glyphs. Whether the
output is postscript or a ray-traced image is controlled by the initial "rt"
flag (by default, the output is postscript). Because this is doing
viz/graphics, many parameters need to be set. Use a response file to simplify
giving the command-line options which aren't changing between invocations. The
postscript output is an EPS file, suitable for including as a figure in LaTeX,
or viewing with ghostview, or distilling into PDF. The ray-traced output is a 5
channel (R,G,B,A,T) float nrrd, suitable for "unu crop -min 0 0 0 -max 2 M M "
followed by "unu gamma" and/or "unu quantize -b 8".

Usage: glyph [@file ...] [-rt] [-v <level>] [-ctr <conf thresh>] [-a <aniso>] \
       [-atr <aniso thresh>] [-p <pos array>] [-m <mask vol>] [-mtr <mask \
       thresh>] [-g <glyph shape>] [-sh <sharpness>] [-gsc <scale>] \
       [-c <evector #>] [-sat <saturation>] [-ga <aniso>] [-am <aniso mod>] \
       [-gg <gray>] [-gam <gamma>] [-emap <env map>] [-adsp <phong>] \
       [-bg <background>] [-ec <edge rgb>] [-slc <axis pos>] [-si <slice \
       image>] [-off <slice offset>] [-sg <slice gamma>] [-sb <slice bias>] \
       -fr <from point> [-at <at point>] [-up <up vector>] [-rh] [-dn <near \
       clip>] [-df <far clip>] [-or] [-ur <uMin uMax>] [-vr <vMin vMax>] \
       [-fv <fov>] [-gr <glyph res>] [-wd <3 widths>] [-psc <scale>] \
       [-ca <angle>] [-nobg] [-concave] [-is <nx ny>] [-ns <# samp>] [-nt <# \
       threads>] [-al <B U V N E>] [-ao] [-shadow <s>] [-hack <hack>] \
       [-i <nin>] [-o <nout>]

          @file ... = response file(s) containing command-line arguments
                -rt = generate ray-traced output. By default (not using this
                      option), postscript output is generated.
         -v <level> = verbosity level (int); default: "0"
 -ctr <conf thresh> = Glyphs will be drawn only for tensors with confidence
                      values greater than this threshold (float);
                      default: "0.5"
         -a <aniso> = Which anisotropy metric to use for thresholding the data
                      points to be drawn (anisotropy metric); default: "fa"
-atr <aniso thresh> = Glyphs will be drawn only for tensors with anisotropy
                      greater than this threshold (float); default: "0.5"
     -p <pos array> = Instead of being on a grid, tensors are at arbitrary
                      locations, as defined by this 3-by-N array of floats.
                      Doing this makes various other options moot (nrrd)
      -m <mask vol> = Scalar volume (if any) for masking region in which
                      glyphs are drawn, in conjunction with "mtr" flag. (nrrd)
 -mtr <mask thresh> = Glyphs will be drawn only for tensors with mask value
                      greater than this threshold (float); default: "0.5"
   -g <glyph shape> = shape of glyph to use for display. Possibilities include
                      "box", "sphere", "cylinder", and "superquad"
                      (tenGlyphType); default: "box"
    -sh <sharpness> = for superquadric glyphs, how much to sharp edges form as
                      a function of differences between eigenvalues. Higher
                      values mean that edges form more easily (float);
                      default: "3.0"
       -gsc <scale> = over-all glyph size in world-space (float);
                      default: "0.01"
     -c <evector #> = which eigenvector should determine coloring. (formally
                      "v") "0", "1", "2" are principal, medium, and minor
                      (int); default: "0"
  -sat <saturation> = maximal saturation to use on glyph colors (use 0.0 to
                      create a black and white image) (float); default: "1.0"
        -ga <aniso> = Which anisotropy metric to use for modulating the
                      saturation of the glyph color (anisotropy metric);
                      default: "fa"
    -am <aniso mod> = How much to modulate glyph color saturation by
                      anisotropy (as chosen by "-ga"). If 1.0, then glyphs for
                      zero anisotropy data points will have no hue. (float);
                      default: "0.0"
         -gg <gray> = desaturating glyph color due to low anisotropy tends
                      towards this gray level (float); default: "1.0"
       -gam <gamma> = gamma to use on color components (after saturation)
                      (float); default: "0.7"
    -emap <env map> = environment map to use for shading glyphs. By default,
                      there is no shading (nrrd)
      -adsp <phong> = phong ambient, diffuse, specular components, and
                      specular power (4 floats); default: "0 1 0 30"
   -bg <background> = background RGB color; each component in range [0.0,1.0]
                      (3 floats); default: "1 1 1"
     -ec <edge rgb> = edge RGB color; each component in range [0.0,1.0]
                      (3 floats); default: "0 0 0"
    -slc <axis pos> = For showing a gray-scale slice of anisotropy: the axis
                      and position along which to slice. Use "-1 -1" to signify
                      that no slice should be shown (2 ints); default: "-1 -1"
  -si <slice image> = Instead of showing a slice of the anisotropy used to
                      cull glyphs, show something else. (nrrd)
-off <slice offset> = Offset from slice position to render slice at (so that
                      it doesn't occlude glyphs). (float); default: "0.0"
  -sg <slice gamma> = Gamma to apply to values on slice. (float);
                      default: "1.7"
   -sb <slice bias> = amount by which to bump up slice gray values prior to
                      gamma. (float); default: "0.05"
   -fr <from point> = position of camera, used to determine view vector
                      (3 doubles)
     -at <at point> = camera look-at point, used to determine view vector
                      (3 doubles); default: "0 0 0"
    -up <up vector> = camera pseudo-up vector, used to determine view
                      coordinates (3 doubles); default: "0 0 1"
                -rh = use a right-handed UVN frame (V points down)
    -dn <near clip> = position of near clipping plane, relative to look-at
                      point (double); default: "-2"
     -df <far clip> = position of far clipping plane, relative to look-at
                      point (double); default: "2"
                -or = use orthogonal projection
    -ur <uMin uMax> = range in U direction of image plane (2 doubles);
                      default: "-1 1"
    -vr <vMin vMax> = range in V direction of image plane (2 doubles);
                      default: "-1 1"
          -fv <fov> = if not NaN, vertical field-of-view, in degrees (double);
                      default: "nan"
    -gr <glyph res> = (* postscript only *) resolution of polygonalization of
                      glyphs (all glyphs other than the default box) (int);
                      default: "10"
     -wd <3 widths> = (* postscript only *) width of edges drawn for three
                      kinds of glyph edges: silohuette, crease, non-crease
                      (3 floats); default: "0.8 0.4 0.0"
       -psc <scale> = (* postscript only *) scaling from screen space units to
                      postscript units (in points) (float); default: "300"
        -ca <angle> = (* postscript only *) minimum crease angle (float);
                      default: "70"
              -nobg = (* postscript only *) don't initially fill with
                      background color
           -concave = use slightly buggy rendering method suitable for concave
                      or self-occluding objects
        -is <nx ny> = (* ray-traced only *) image size (resolution) to render
                      (2 ints); default: "256 256"
       -ns <# samp> = (* ray-traced only *) number of samples per pixel (must
                      be a square number) (int); default: "4"
    -nt <# threads> = (* ray-traced only *) number of threads to be used for
                      rendering (int); default: "1"
    -al <B U V N E> = (* ray-traced only *) brightness (B), view-space
                      location (U V N), and length of edge (E) of a square area
                      light source, for getting soft shadows. Requires lots
                      more samples "-ns" to converge. Use brightness 0 (the
                      default) to turn this off, and use environment map-based
                      shading ("-emap") instead. (5 floats);
                      default: "0 -1 -1 -4 0.7"
                -ao = set up 6 area lights in a box to approximate ambient
                      occlusion
        -shadow <s> = the extent to which shadowing occurs (float);
                      default: "1.0"
       -hack <hack> = don't mind me (string)
           -i <nin> = input diffusion tensor volume (nrrd)
          -o <nout> = output file (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend glyph (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend ellipse

ellipse: Generate postscript renderings of 2D glyphs. Not much to look at
here.

Usage: ellipse [@file ...] [-ctr <conf thresh>] [-gsc <scale>] \
       [-dot <radius>] [-wid <width>] [-inv] [-min <minX minY>] [-max <maxX \
       maxY>] [-i <nin>] [-p <pos array>] [-s <stn array>] [-o <nout>]

         @file ... = response file(s) containing command-line arguments
-ctr <conf thresh> = Glyphs will be drawn only for tensors with confidence
                     values greater than this threshold (float); default: "0.5"
      -gsc <scale> = over-all glyph size (float); default: "1"
     -dot <radius> = radius of little dot to put in middle of ellipse, or "0"
                     for no such dot (float); default: "0.0"
      -wid <width> = with of lines for tractlets (float); default: "0.0"
              -inv = use white ellipses on black background, instead of
                     reverse
  -min <minX minY> = when using "-p", minimum corner (2 floats);
                     default: "-1 -1"
  -max <maxX maxY> = when using "-p", maximum corner (2 floats);
                     default: "1 1"
          -i <nin> = image of 2D tensors (nrrd)
    -p <pos array> = Instead of being on a grid, tensors are at arbitrary
                     locations, as defined by this 2-by-N array of floats
                     (nrrd)
    -s <stn array> = Locations given by "-p" have this connectivity (nrrd)
         -o <nout> = output PostScript file (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend ellipse (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend anplot

anplot: Graph anisotropy metric in barycentric coords. The metrics all vary
from 0.0 to 1.0, and will be sampled in the lower right half of the image. The
plane on which they are sampled is a surface of constant trace. You may want to
use "unu resample -s = x0.57735 -k tent" to transform the triangle into a
30-60-90 triangle, and "ilk -t 1,-0.5,0,0,0.866,0 -k tent -0 u:0,1 -b pad -bg
0" (possibly followed by teem/src/limntest/triimg) to transform the domain into
an equilateral triangle.

Usage: anplot [@file ...] [-r <res>] [-w] [-hflip] [-nan] -a <aniso> \
       [-o <nout>]

 @file ... = response file(s) containing command-line arguments
  -r <res> = resolution of anisotropy plot (int); default: "256"
        -w = sample the whole triangle of constant trace, instead of just the
             sixth of it in which the eigenvalues have the traditional sorted
             order.
    -hflip = flip the two bottom corners (swapping the place of linear and
             planar)
      -nan = set the pixel values outside the triangle to be NaN, instead of 0
-a <aniso> = Which anisotropy metric to plot. All the Westin metrics come in
             two versions. Currently supported:
              o "cl1", "cl2": Westin's linear
              o "cp1", "cp2": Westin's planar
              o "ca1", "ca2": Westin's linear + planar
              o "cs1", "cs2": Westin's spherical (1-ca)
              o "ct1", "ct2": GK's anisotropy type (cp/ca)
              o "ra": Basser/Pierpaoli relative anisotropy/sqrt(2)
              o "fa": Basser/Pierpaoli fractional anisotropy
              o "vf": volume fraction = 1-(Basser/Pierpaoli volume ratio)
              o "tr": trace
             (anisotropy metric)
 -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend anplot (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend anvol

anvol: Apply an anisotropy metric to a DT volume. The anisotropy value will be
zero in the locations which don't meet the given confidence threshold.

Usage: anvol [@file ...] -a <aniso> [-t <thresh>] [-i <nin>] [-o <nout>]

  @file ... = response file(s) containing command-line arguments
 -a <aniso> = Which anisotropy metric to plot. All the Westin metrics come in
              two versions. Currently supported:
               o "cl1", "cl2": Westin's linear
               o "cp1", "cp2": Westin's planar
               o "ca1", "ca2": Westin's linear + planar
               o "cs1", "cs2": Westin's spherical (1-ca)
               o "ct1", "ct2": GK's anisotropy type (cp/ca)
               o "ra": Basser/Pierpaoli relative anisotropy/sqrt(2)
               o "fa": Basser/Pierpaoli fractional anisotropy
               o "vf": volume fraction = 1-(Basser/Pierpaoli volume ratio)
               o "tr": trace
              (anisotropy metric)
-t <thresh> = confidence threshold (float); default: "0.5"
   -i <nin> = input diffusion tensor volume (nrrd)
  -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend anvol (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend anscale

anscale: Scale the anisotropic component of the tensors. This maintains the
isotropic component of the tensor, and fixes either the trace or determinant,
while scaling up (or down) the "deviatoric" component of the tensor. Good for
exaggerating the shape of nearly isotropic tensors.

Usage: anscale [@file ...] -s <scale> [-fd] [-mp] [-i <nin>] [-o <nout>]

 @file ... = response file(s) containing command-line arguments
-s <scale> = Amount by which to scale deviatoric component of tensor. (float)
       -fd = instead of fixing the per-sample trace (the default), fix the
             determinant (ellipsoid volume)
       -mp = after changing the eigenvalues of the tensor, enforce their
             non-negative-ness. By default, no such constraint is imposed.
  -i <nin> = input diffusion tensor volume (nrrd)
 -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend anscale (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend anhist

anhist: Generate barycentric histograms of anisotropy. The barycentric space
used is either one of Westin's triple of spherical, linear, and planar
anisotropy. The bin counts in the histogram are weighted by the confidence
value.

Usage: anhist [@file ...] [-v <westin version>] [-w <nweight>] -r <res> \
       [-right] [-i <nin>] [-o <nout>]

          @file ... = response file(s) containing command-line arguments
-v <westin version> = Which version of Westin's anisotropy metric triple to
                      use, either "1" or "2" (int); default: "1"
       -w <nweight> = how to weigh contributions to histogram. By default (not
                      using this option), the increment is one bin count per
                      sample, but by giving a nrrd, the value in the nrrd at
                      the corresponding location will be the bin count
                      increment (nrrd)
           -r <res> = resolution of anisotropy plot (int)
             -right = sample a right-triangle-shaped region, instead of a
                      roughly equilateral triangle.
           -i <nin> = input diffusion tensor volume (nrrd)
          -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend anhist (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend triple

triple: Compute volume of shape triples. The triple can be eignvalues,
invariants (J, K, R), and lots of other things.

Usage: triple [@file ...] -t <type> [-i <nin>] [-o <nout>]

@file ... = response file(s) containing command-line arguments
-t <type> = desired output triple type (tenTripleType)
 -i <nin> = input tensor volume (nrrd)
-o <nout> = output triple volume (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend triple (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend tconv

tconv: Convert between different shape triples. The triples can be eignvalues,
invariants (J, K, R), and lots of other things.

Usage: tconv [@file ...] -t <inType outType> [-i <nin>] [-o <nout>]

          @file ... = response file(s) containing command-line arguments
-t <inType outType> = given input and desired output type of triples
                      (2 tenTripleTypes)
           -i <nin> = input array of triples (nrrd)
          -o <nout> = output array (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend tconv (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend point

point: Describe everything about one sample in a DT volume.

Usage: point [@file ...] -p <x y z> [-i <nin>]

 @file ... = response file(s) containing command-line arguments
-p <x y z> = coordinates of sample to be described (3 ints)
  -i <nin> = input diffusion tensor volume (nrrd)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend point (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend slice

slice: Slice 3D tensors to get slab/image of 3D/2D tensors.

Usage: slice [@file ...] -a <axis> -p <pos> [-d <dim>] [-i <nin>] [-o <nout>]

@file ... = response file(s) containing command-line arguments
-a <axis> = axis along which to slice (int)
 -p <pos> = position to slice at (int)
 -d <dim> = dimension of desired tensor output, can be either 2 or 3 (int);
            default: "3"
 -i <nin> = input diffusion tensor volume (nrrd)
-o <nout> = output tensor slice (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend slice (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend norm

norm: Normalize tensor size. This operates on the eigenvalues of the tensor,
and allows normalizing some user-defined weighting ("-w") of the eigenvalues by
some user-defined amount ("-a").

Usage: norm [@file ...] -w <w0 w1 w2> [-a <amount>] [-t <target>] [-i <nin>] \
       [-o <nout>]

    @file ... = response file(s) containing command-line arguments
-w <w0 w1 w2> = relative weights to put on major, medium, and minor eigenvalue
                when performing normalization (internally rescaled to have a
                1.0 L1 norm). These weightings determine the tensors's "size".
                (3 doubles)
  -a <amount> = how much of the normalization to perform (float);
                default: "1.0"
  -t <target> = target size, post normalization (float); default: "1.0"
     -i <nin> = input diffusion tensor volume (nrrd)
    -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend norm (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend fiber

fiber: Fiber tractography, from one or more seeds. A fairly complete
command-line interface to the tenFiber API.

Usage: fiber [@file ...] [-i <nin>] [-dwi] [-s <seed point>] [-ns <seed \
       nrrd>] [-wsp] [-t <type>] [-n <intg>] [-k <kernel>] [-wp <which>] [-ap] \
       [-wspo] [-step <step size>] -stop <stop1 ...> [-v <verbose>] \
       [-nmat <transform>] [-o <out>]

        @file ... = response file(s) containing command-line arguments
         -i <nin> = input volume (nrrd)
             -dwi = input volume is a DWI volume, not a single tensor volume
  -s <seed point> = seed point for fiber; it will propogate in two opposite
                    directions starting from here (3 doubles); default: "0 0 0"
  -ns <seed nrrd> = 3-by-N nrrd of seedpoints (nrrd)
             -wsp = define seedpoint and output path in worldspace. Otherwise,
                    (without using this option) everything is in index space
        -t <type> = fiber type; defaults to something (string)
        -n <intg> = integration method for fiber tracking (fiber integration
                    method); default: "rk4"
      -k <kernel> = kernel for reconstructing tensor field (kernel
                    specification)
      -wp <which> = when doing multi-tensor tracking, index of path to follow
                    (made moot by "-ap") (unsigned int); default: "0"
              -ap = follow all paths from (all) seedpoint(s), output will be
                    polydata, rather than a single 3-by-N nrrd, even if only a
                    single path is generated
            -wspo = output should be in worldspace, even if input is not (this
                    feature is unstable and/or confusing)
-step <step size> = stepsize along fiber, in world space (double);
                    default: "0.01"
-stop <stop1 ...> = the conditions that should signify the end of a fiber, or
                    when to discard a fiber that is done propagating. Multiple
                    stopping criteria are logically OR-ed and tested at every
                    point along the fiber. Possibilities include:
                     o "aniso:<type>,<thresh>": require anisotropy to be
                    above the given threshold. Which anisotropy type is given
                    as with "tend anvol" (see its usage info)
                     o "len:<length>": limits the length, in world space, of
                    each fiber half
                     o "steps:<N>": the number of steps in each fiber half is
                    capped at N
                     o "conf:<thresh>": requires the tensor confidence value
                    to be above the given thresh
                     o "radius:<thresh>": requires that the radius of
                    curvature of the fiber stay above given thr
                     o "frac:<F>": in multi-tensor tracking, the fraction of
                    the tracked component must stay above F
                     o "minlen:<len>": discard fiber if its final whole
                    length is below len (not really a termination criterion)
                     o "minsteps:<N>": discard fiber if its final number of
                    steps is below N (not really a termination criterion)
                    (1 or more fiber stops)
     -v <verbose> = verbosity level (int); default: "0"
-nmat <transform> = a 4x4 homogenous transform matrix (as a nrrd, or just a
                    text file) given with this option will be applied to the
                    output tractography vertices just prior to output (nrrd)
         -o <out> = output fiber(s) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend fiber (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend eval

eval: Calculate one or more eigenvalues in a DT volume.

Usage: eval [@file ...] -c <c0  ...> [-t <thresh>] [-i <nin>] [-o <nout>]

   @file ... = response file(s) containing command-line arguments
 -c <c0 ...> = which eigenvalues should be saved out. "0" for the largest, "1"
               for the middle, "2" for the smallest, "0 1", "1 2", "0 1 2" or
               similar for more than one (1..3 ints)
 -t <thresh> = confidence threshold (float); default: "0.5"
    -i <nin> = input diffusion tensor volume (nrrd)
   -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend eval (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evalpow

evalpow: Modify shape by raising eigenvalues to some power. The orientation of
the tensor is unchanged.

Usage: evalpow [@file ...] -p <power> [-i <nin>] [-o <nout>]

 @file ... = response file(s) containing command-line arguments
-p <power> = Power to which to raise all the eigenvalues. (float)
  -i <nin> = input diffusion tensor volume (nrrd)
 -o <nout> = output tensor volume (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evalpow (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evalclamp

evalclamp: Modify shape by clamping eigenvalues in some range. The orientation
of the tensor is unchanged. Note that unlike "tend anscale", this operation can
completely change the shape of the tensor.

Usage: evalclamp [@file ...] -min <min> [-max <max>] [-i <nin>] [-o <nout>]

 @file ... = response file(s) containing command-line arguments
-min <min> = Eigenvalues are clamped from below by this (the minimum output
             eigenvalue). Use "nan" to signify that no minimum clamping should
             be done. (float)
-max <max> = Eigenvalues are clamped from above by this (the maximum output
             eigenvalue). Use "nan" to signify that no maximum clamping should
             be done. (float); default: "nan"
  -i <nin> = input diffusion tensor volume (nrrd)
 -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evalclamp (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evaladd

evaladd: Modify shape by adding a constant to all eigenvalues. The orientation
of the tensor is unchanged. Note that unlike "tend anscale", this operation can
completely change the shape of the tensor.

Usage: evaladd [@file ...] -v <value> [-i <nin>] [-o <nout>]

 @file ... = response file(s) containing command-line arguments
-v <value> = Value to add to all eigenvalues (float)
  -i <nin> = input diffusion tensor volume (nrrd)
 -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evaladd (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evalmult

evalmult: Modify shape by multiplying eigenvalues by a constant. The
orientation of the tensor is unchanged.

Usage: evalmult [@file ...] -v <value> [-i <nin>] [-o <nout>]

 @file ... = response file(s) containing command-line arguments
-v <value> = Value to multiply eigenvalues by (float)
  -i <nin> = input diffusion tensor volume (nrrd)
 -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evalmult (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend log

log: Calculates logarithm of the tensor, which is based on finding the log of
the eigenvalues.

Usage: log [@file ...] [-i <nin>] -o <nout>

@file ... = response file(s) containing command-line arguments
 -i <nin> = input diffusion tensor volume (nrrd)
-o <nout> = output image (string)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend log (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend exp

exp: Calculates exp() of the tensor, which is based on exp() of the
eigenvalues.

Usage: exp [@file ...] [-i <nin>] -o <nout>

@file ... = response file(s) containing command-line arguments
 -i <nin> = input diffusion tensor volume (nrrd)
-o <nout> = output image (string)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend exp (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evec

evec: Calculate one or more eigenvectors in a DT volume.

Usage: evec [@file ...] -c <c0  ...> [-t <thresh>] [-i <nin>] [-o <nout>]

   @file ... = response file(s) containing command-line arguments
 -c <c0 ...> = which eigenvalues should be saved out. "0" for the largest, "1"
               for the middle, "2" for the smallest, "0 1", "1 2", "0 1 2" or
               similar for more than one (1..3 ints)
 -t <thresh> = confidence threshold (float); default: "0.5"
    -i <nin> = input diffusion tensor volume (nrrd)
   -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evec (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evecrgb

evecrgb: Make an RGB volume from an eigenvector and an anisotropy.

Usage: evecrgb [@file ...] -c <evec index> -a <aniso> [-t <thresh>] \
       [-bg <background>] [-gr <gray>] [-gam <gamma>] [-i <nin>] [-o <nout>]

       @file ... = response file(s) containing command-line arguments
 -c <evec index> = which eigenvector will be colored. "0" for the principal,
                   "1" for the middle, "2" for the minor (unsigned int)
      -a <aniso> = Which anisotropy to use for modulating the saturation of
                   the colors. All the Westin metrics come in two versions.
                   Currently supported:
                    o "cl1", "cl2": Westin's linear
                    o "cp1", "cp2": Westin's planar
                    o "ca1", "ca2": Westin's linear + planar
                    o "cs1", "cs2": Westin's spherical (1-ca)
                    o "ct1", "ct2": GK's anisotropy type (cp/ca)
                    o "ra": Basser/Pierpaoli relative anisotropy/sqrt(2)
                    o "fa": Basser/Pierpaoli fractional anisotropy
                    o "vf": volume fraction = 1-(Basser/Pierpaoli volume
                   ratio)
                    o "tr": trace
                   (anisotropy metric)
     -t <thresh> = confidence threshold (double); default: "0.5"
-bg <background> = gray level to use for voxels who's confidence is zero
                   (double); default: "0"
      -gr <gray> = the gray level to desaturate towards as anisotropy
                   decreases (while confidence remains 1.0) (double);
                   default: "0"
    -gam <gamma> = gamma to use on color components (double); default: "1"
        -i <nin> = input diffusion tensor volume (nrrd)
       -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evecrgb (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend evq

evq: Quantize directions of diffusion. Because VTK doesn't do
multi-dimensional colormaps, we have to quantize directions of diffusion
(usually just the principal eigenvector) in order to create the usual XYZ<->RGB
coloring. Because eigenvector directions are poorly defined in regions of low
anisotropy, the length of the vector (pre-quantization) is modulated by
anisotropy, requiring the selection of some anisotropy metric.

Usage: evq [@file ...] [-c <evec index>] -a <aniso> [-ns] [-i <nin>] \
       [-o <nout>]

      @file ... = response file(s) containing command-line arguments
-c <evec index> = Which eigenvector should be quantized: "0" for the direction
                  of fastest diffusion (eigenvector associated with largest
                  eigenvalue), "1" or "2" for other two eigenvectors
                  (associated with middle and smallest eigenvalue) (int);
                  default: "0"
     -a <aniso> = Which anisotropy metric to scale the eigenvector with. All
                  the Westin metrics come in two versions. Currently
                  supported:
                   o "cl1", "cl2": Westin's linear
                   o "cp1", "cp2": Westin's planar
                   o "ca1", "ca2": Westin's linear + planar
                   o "cs1", "cs2": Westin's spherical (1-ca)
                   o "ct1", "ct2": GK's anisotropy type (cp/ca)
                   o "ra": Basser/Pierpaoli relative anisotropy/sqrt(2)
                   o "fa": Basser/Pierpaoli fractional anisotropy
                   o "vf": volume fraction = 1-(Basser/Pierpaoli volume
                  ratio)
                   o "tr": trace
                  (anisotropy metric)
            -ns = Don't attenuate the color by anisotropy. By default (not
                  using this option), regions with low or no anisotropy are
                  very dark colors or black
       -i <nin> = input diffusion tensor volume (nrrd)
      -o <nout> = output image (floating point) (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend evq (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend unmf

unmf: Applies and removes the measurement frame. When the given tensor volume
has a measurement frame associated with it, this will apply the measurement
frame transform to all tensors to convert them into world space, and remove the
measurement frame from the nrrd.

Usage: unmf [@file ...] -i <nin> [-o <nout>]

@file ... = response file(s) containing command-line arguments
 -i <nin> = input diffusion tensor volume (sorry, can't use usual default of
            "-" for stdin because of hest quirk) (nrrd)
-o <nout> = output tensor volume (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend unmf (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend expand

expand: Converts masked non-redundant tensor images to redundant. For images
of 3D tensors, this converts from a 7-value tensor starting with the
confidence/mask value (conf, Dxx, Dxy, Dxz, Dyy, Dyz, Dzz) to a 9-value tensor
with the full matrix (Dxx, Dxy, Dxz, Dxy, Dyy, Dyz, Dxz, Dyz, Dzz). This is set
to all zeros when the confidence is below the given threshold. For images of 2D
tensors, the conversion is from (conf, Dxx, Dxy, Dyy) to (Dxx, Dxy, Dxy, Dyy).

Usage: expand [@file ...] [-t <thresh>] [-s <scale>] [-unmf] [-ro] [-roo] \
       [-i <nin>] -o <nout>

  @file ... = response file(s) containing command-line arguments
-t <thresh> = confidence level to threshold output tensors at. Should be
              between 0.0 and 1.0. (float); default: "0.5"
 -s <scale> = how to scale values before saving as 9-value tensor. Useful for
              visualization tools which assume certain characteristic ranges of
              eigenvalues (float); default: "1.0"
      -unmf = apply and remove the measurement frame, if it exists
        -ro = reduce general image orientation to axis-aligned spacings
       -roo = reduce general image orientation to axis-aligned spacings, while
              also making some effort to set axis mins from space origin
   -i <nin> = input diffusion tensor volume, with 7 values per sample (nrrd)
  -o <nout> = output tensor volume, with the 9 matrix components per sample
              (string)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend expand (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend shrink

shrink: Converts a 9-value DT volume to a 7-value DT volume. The confidence
value is set to 1.0 everwhere. You can "unu splice" or nrrdSplice() something
else in its place later.

Usage: shrink [@file ...] [-i <nin>] -o <nout>

@file ... = response file(s) containing command-line arguments
 -i <nin> = input diffusion tensor volume, with 9 matrix components per sample
            (nrrd)
-o <nout> = output tensor volume, with the 7 values per sample (string)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend shrink (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend bfit

bfit: Non-linear least-squares fitting of b-value curves. Axis 0 is replaced
by three values: amp, dec, err, based on a non-linear least-squares fit of
amp*exp(-b*dec) to the range of DWI values along input axis 0, as a function of
changing b values. 

Usage: bfit [@file ...] [-i <nin>] -b <b1 b2 ...> [-w <w1 w2 ...>] [-imax <# \
       iter>] [-eps <epsilon>] [-o <nout>]

     @file ... = response file(s) containing command-line arguments
      -i <nin> = Input nrrd. List of DWIs from different b-values must be
                 along axis 0 (nrrd)
-b <b1 b2 ...> = b values across axis 0 of input nrrd (2 or more doubles)
-w <w1 w2 ...> = weights for samples in non-linear fitting
                 (2 or more doubles); default: "nan nan"
-imax <# iter> = max number of iterations to use in non-linear fitting, or,
                 use 0 to do only initial linear fit (int); default: "10"
-eps <epsilon> = epsilon convergence threshold for non-linear fitting
                 (double); default: "1"
     -o <nout> = output tensor volume (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend bfit (ret=0)
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### BEGIN tend satin

satin: Generate a pretty synthetic DT volume. The surface of a sphere or torus
is covered with either linear or planar anisotropic tensors, or somewhere in
between.

Usage: satin [@file ...] [-t] -p <aniso parm> [-max <max ca1>] [-min <min \
       ca1>] [-b <boundary>] [-br <ramp>] [-th <thickness>] [-scl <scaling>] \
       [-evsc <eval scale>] [-s <size>] [-o <nout>]

         @file ... = response file(s) containing command-line arguments
                -t = generate a torus dataset, instead of the default
                     spherical
   -p <aniso parm> = anisotropy parameter. 0.0 for one direction of linear
                     (along the equator for spheres, or along the larger
                     circumference for toruses), 1.0 for planar, 2.0 for the
                     other direction of linear (from pole to pole for spheres,
                     or along the smaller circumference for toruses) (float)
    -max <max ca1> = maximum anisotropy in dataset, according to the "ca1"
                     anisotropy metric. "1.0" means completely linear or
                     completely planar anisotropy (float); default: "1.0"
    -min <min ca1> = minimum anisotropy in dataset (float); default: "0.0"
     -b <boundary> = parameter governing how fuzzy the boundary between high
                     and low anisotropy is. Use "-b 0" for no fuzziness
                     (float); default: "0.05"
        -br <ramp> = how much to ramp upeffective "b" along Y axis. Use "-b 0"
                     for no such ramping. (float); default: "0.0"
   -th <thickness> = parameter governing how thick region of high anisotropy
                     is (float); default: "0.3"
    -scl <scaling> = scaling on size of sphere or torus within volume;
                     lowering this below default 1.0 produces more background
                     margin (float); default: "1.0"
-evsc <eval scale> = scaling of eigenvalues (float); default: "1.0"
         -s <size> = dimensions of output volume. For size N, the output is
                     N x N x N for spheres, and 2N x 2N x N for toruses (int);
                     default: "32"
         -o <nout> = output filename (string); default: "-"
C:/Projects/teem-Slicer-build/bin/Release/test_tendlist.exe: ################### END tend satin (ret=0)