module lace {                                     # find PEF and rescale it
  use createhelixmod 
  use bound
  use pef
  use cartesian
contains
  function lace_pef( dd, jump, n, center, gap, a) result (aa) {
    type( filter)                       :: aa
    integer,                intent( in) :: jump
    integer, dimension( :), intent( in) :: n, center, gap, a
    real,    dimension( :), pointer     :: dd                 # input
    integer, dimension( :), pointer     :: shortlag           # helix lag
    integer, dimension( size (n))       :: c
    integer                             :: ia, na, lag0, lag
    aa = createhelix( n, center, gap, a);  na = size( aa%lag)
    shortlag => aa%lag;  allocate( aa%lag( na))
    call cart2line(  a, center, lag0)
    do ia = 1, na {
       call line2cart( a, ia+lag0, c)
       c = c - center;              c(1) = c(1)*jump 
       call cart2line( n,  c+1, lag)
       aa%lag (ia) = lag-1
    }
    call boundn( n, n, (/ a(1)*jump, a(2:) /), aa) 
    call find_pef( dd, aa, na*2)                              # estimate aa
    deallocate( aa%lag);   aa%lag => shortlag
  }
}
