module lace {                                     # find PEF on interlaced data
  use createhelixmod 
  use bound
  use pef
  use cartesian
contains
  function lace_pef( dd, jump, nd, center, gap, na)  result( aa) {
    type( filter)                      :: aa
    integer,               intent( in) :: jump
    integer, dimension(:), intent( in) :: nd, center, gap, na
    real,    dimension(:), pointer     :: dd          # input data
    integer, dimension(:), pointer     :: savelags    # holding place
    integer, dimension( size( nd))     :: ii
    integer                            :: ih, nh, lag0, lag
    aa = createhelix( nd, center, gap, na);  nh = size( aa%lag)
    savelags => aa%lag;   allocate( aa%lag( nh))      # prepare interlaced helix
    call cart2line(  na, center, lag0)
    do ih = 1, nh {				 	# Sweep thru the filter.
       call line2cart( na, ih+lag0, ii)
       ii = ii - center;            ii(1) = ii(1)*jump  # Interlace on 1-axis.
       call cart2line( nd,  ii+1, lag)
       aa%lag( ih) = lag - 1
       }
    call boundn( nd, nd, (/ na(1)*jump, na(2:) /), aa)  # Define  aa.mis
    call find_pef( dd, aa, nh*2)                        # Estimate aa coefs
    deallocate( aa%lag);   aa%lag => savelags		# Restore filter lags
  }
}
