# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"

module createmshelixmod
! Create multiscale helix filter lags and mis
  use mshelix
  use createhelixmod
  use bound
  implicit none
  contains
  function createmshelix( nd, center, gap, jump, na) result( msaa)
    type( msfilter) :: msaa
    ! needed by mshelicon.
    integer, dimension(:), intent(in) :: nd, na
    ! data and filter axes
    integer, dimension(:), intent(in) :: center
    ! normally (na1/2,na2/2,...,1)
    integer, dimension(:), intent(in) :: gap
    ! normally ( 0, 0, 0,...,0)
    integer, dimension(:), intent(in) :: jump
    ! jump(ns) stretch scales
    type( filter) :: aa
    integer :: is, ns, nh, n123
    aa = createhelix( nd, center, gap, na)
    ns = size( jump)
    nh = size( aa%lag)
    n123 = product( nd)
    call msallocate( msaa, nh, ns)
    do is = 1, ns
      msaa%lag(:,is) = aa%lag(:)*jump(is)
      ! set lags for expanded scale
    end do
    call deallocatehelix( aa)
    allocate( msaa%mis( n123, ns))
    do is = 1, ns
! for all scales
      call onescale( is, msaa, aa)
      nullify( aa%mis) ! extract a filter
      call boundn( nd, nd, na*jump(is), aa) ! set up its boundaries
      msaa%mis( :, is) = aa%mis
      deallocate( aa%mis) ! save them
    end do
  end function
end module
