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

module pefest
! Estimate a PEF avoiding zeros and bursty noise on input.
  use quantile_mod
  use helicon
  use misinput
  use pef
  implicit none
  contains
  subroutine pefest1( niter, yy, aa)
    integer, intent( in) :: niter
    real, dimension( :), pointer :: yy
    type( filter) :: aa
    real, dimension(:),allocatable :: rr
    real :: rbar
    integer :: stat
    allocate(rr(size(yy)))
    call helicon_init( aa) ! starting guess
    stat = helicon_lop( .false., .false., yy, rr)
    rbar = quantile( size( yy)/3, abs( rr))
    ! rbar=(r safe below rbar)
    where( aa%mis)
      yy = 0.
end where
    call find_mask(( yy /= 0. .and. abs( rr) < 5 * rbar), aa)
    call find_pef( yy, aa, niter)
    deallocate(rr)
  end subroutine
end module
