subroutine find_peaks(fft,tune) use bmad implicit none real(rp), dimension(:),intent(in) :: fft real(rp), dimension(:), intent(out) :: tune real(rp), allocatable::ra(:) real(rp) d,b,a,c integer n,i,j,imx(10) n=size(fft) allocate(ra(n)) ra(:) = abs(fft(:)) do i = 1,10 imx(i) = maxloc(ra(5:n-5),1) + 4 d= ra(imx(i)) b=ra(imx(i)+1) if(d /= 0. .or. b /= 0.)then c=cos(twopi/n) A= (-(d+b*c)*(d-b)+b*sqrt(c*c*(d+b)*(d+b)-2*d*b*(2*c*c-c-1)))/(d*d+b*b+2*d*b*c) endif ! int_tune(i) = imx(i)/float(n) tune(i)= imx(i)/float(n)+(1/twopi)*asin(A*sin(twopi/float(n))) do j = max(1,imx(i)-20),min(n,imx(i)+20) ra(j)=0. end do end do return end