# -----------------------------------------------------------------------

 This program is for bringing data sets into DWI space, with the
 particular thought that bringing anatomically-defined ROI maps or EPI
 data that are aligned to a subject's anatomical might be useful.
 This might be useful after having run FreeSurfer, for example.

 An affine transformation matrix between, say, a subject's T1w volume
 and a DWI reference volume is calculated, and then applied to
 follower data sets.  The transformation can be applied either as 'NN'
 (-> for preserving integer values in sets) or as 'wsinc5' (-> if one
 has floating point values).  The final dsets will reside in the DWI
 space. Yay.

 At the moment this program *assumes* that the input source ('-source
 SSS') and reference base ('-base BBB') are from the same subject,
 because only 12 DOF affine alignment is calculated (using
 3dAllineate).  Maybe something could be done with 3dQwarp in the
 future.  Maybe.

 This program mainly assumes that the T1w and DWI reference volume
 have similar contrasts expected for standard sequences and healthy
 adult brains.  This might still work for other applications, but
 caveat emptor (even more than usual!).  This would *not* be
 recommended for aligning brains that aren't from the same subject.

  Ver. 2.32 (PA Taylor, Sep 27, 2021)

# ----------------------------------------------------------------------


     + NIFTI file: aligned T1w volume.

     + NIFTI files: each follower DSET* ends up in the DWI/DTI space
       and has a respective name PREFIX_DSET*.nii.gz.

     + QC snapshots of the T1w volume overlaying the DWI reference
       volume, and also the T1w edges overlaying the ref vol.

     + QC snapshots of each of the follower dsets overlaying the DWI ref

# ----------------------------------------------------------------------


    fat_proc_map_to_dti \
      -source   SSS                                  \
      -base     DDD                                  \
      -prefix  PPP                                   \
      {-followers_NN      DSET01 DSET02 DSET03 ...}  \
      {-followers_wsinc5  DSET1 DSET2 DSET3 ...}     \
      {-followers_surf    SURF1 SURF2 SURF3 ...}     \
      {-followers_ndset   NDSET1 NDSET2 NDSET3 ...}  \
      {-followers_spec    SPEC1 SPEC2 SPEC3 ...}     \
      {-matrix MMM}                                  \
      {-workdir WWW}                                 \
      {-no_cmd_out}                                  \


   -source SSS    :T1w volume (required); 'source' volume from which we
                   are mapping, such as an anatomical volume in whose
                   space ROIs might have been defined.  SSS gets
                   mapped into the '-base BBB' volume's space.
   -base BBB      :DWI reference volume (required; should be from same
                   subject as SSS), such as the b=0 (or minimally DWed
                   volume), for aligning to; subbrick selections are
                   allowed, so that dwi_dwi.nii'[0]', for example,
                   would be allowed.  This is the base dset for the
                   alignment, with the purpose to bring other volumes
                   into the DWI/DTI space (see the '-followers* ...'
                   options, below).  **NOTE**: BBB and SSS should be
                   from the same subject by this function, because
                   only affine alignment with 3dAllineate is

   -prefix  PPP   :output prefix for files and snapshots.  Required.

   -followers_NN  DSET01 DSET02 DSET03 ...
                  :apply the same transformation to 'follower' data
                   sets; one or more dsets can be listed, with each
                   assumed to overlay on the T1W source set. The 'NN'
                   interpolation of 3dAllineate is applied to these
                   dsets, so that integer values remain integer
                   valued; thus, these might be dsets with ROI maps
                   already created.  NB: subbrick selectors are not
                   allowed on the DSETs here at present.  Labeltables
                   attached to these dsets do get propagated, as well.
   -followers_wsinc5  DSET1 DSET2 DSET3 ...
                   similar to the above '-followers_NN ...', except in
                   this case the final applied mapping is 'wsinc5', which
                   is appropriate, for example, for floating point values.
                   Again, a list of one or more volumes (sans subbrick
                   selectors) can be provided here.  No labeltable is
                   propagated for these sets (I doubt they would have one,
   -followers_surf    SURF1 SURF2 SURF3 ...
                  :similar to the above '-followers_* ...', except in
                   this case the mapping is applied to surface dsets, such
                   as '*.gii'.  Per usual, a list of one or more surfaces
                   can be provided here.
   -followers_ndset   NDSET1 NDSET2 NDSET3 ...
                  :similar to the above '-followers_* ...', except in
                   this case the mapping is applied to '*.niml.dset' files,
                   such as '*.annot.niml.dset'.  Per usual, a list of one or
                   more surfaces can be provided here. Prob wouldn't make
                   sense to use this without using '-followers_surf ...'.
   -followers_spec    SPEC1 SPEC2 SPEC3 ...
                  :similar to the above '-followers_* ...', except in
                   this case the mapping is applied to '*.spec' files.
                   Per usual, a list of one or more surfaces can be
                   provided here.  Wouldn't make sense to use this without
                   using both '-followers_surf ...' and '-followers_ndset ...'
                   to map the dsets referred to in the file!

   -matrix MMM    :one can apply a pre-made matrix that has been made by
                   3dAllineate previously.  With this option.  If you want.

   -cost CCC      :one can apply any cost function CCC that is
                   accepted by 3dAllineate.  The default is for
                   matching dsets of opposite contrast, such as a T1w
                   to a b=0 DWI, which is like a T2w contrast (def:

   -warp xxx      :one can set the linear affine warp type through the
                   same warp arguments accepted by 3dAllineate: shift_only,
                   shift_rotate, shift_rotate_scale, affine_general, etc.
                   (def: affine_general).

   -workdir WWW   :specify a working directory, which can be removed;
                   (default name = '__WORKING_map_to_dti')

   -no_cmd_out    :don't save the command line call of this program
                   and the location where it was run (otherwise, it is
                   saved by default in the ODIR/).
   -no_clean      :do not delete temporary working directory (default is
                   to remove it to save disk space).

# ----------------------------------------------------------------------


    fat_proc_map_to_dti  \
        -source          brain.nii            \
        -base            dwi_dwi.nii.gz'[0]'  \
        -prefix          indt                 \
        -followers_NN    aparc*_REN_*.nii.gz  \
        -followers_surf  std.141.*gii         \
        -followers_ndset std.141.*niml.dset   \
        -followers_spec  std.141.*.spec

# -----------------------------------------------------------------------