program test
  use bmad
  use runge_kutta_mod
  use muon_mod
  use parameters_bmad

  implicit none
  type (lat_struct), target::lat
  type (branch_struct), pointer:: branch ! ring
  type (ele_struct), pointer :: slave_ele
  type(coord_struct), allocatable:: co(:)

  integer i
  integer j
  integer nbranch

  real(rp) inflector_angle

  logical err_flag

  integer lun
  integer nargs, iargc, ios
  integer ix
  integer track_state
  integer k
 
  character*120 line, lat_file, lat_file_name
  character*120 string

  real(rp) y
  real(rp) angle,offset, angle_us, offset_us


nargs = cesr_iargc()
  if (nargs == 1) then
    call cesr_getarg(1, lat_file)
  else if(lat_file_name /= '')then
     lat_file = lat_file_name
  else
    lat_file = 'bmad.'
    print '(a,$)','  Lattice file name?  (Default = bmad.)  '
    read(5,'(a)') line
    call string_trim(line, line, ix)
    lat_file = line
    if (ix==0) lat_file = 'bmad.'
  endif
    print *, ' lat_file = ', lat_file
   call bmad_parser(lat_file, lat)


  do i=1,lat%n_ele_max
   if(lat%ele(i)%name == 'G2')then
         print '(a,a,es12.4,a,es12.4)', lat%ele(i)%name,' lat%ele(i)%value(x_pitch$) = ', &
                lat%ele(i)%value(x_pitch$),' lat%ele(i)%value(x_offset$) = ', lat%ele(i)%value(x_offset$)
         if(lat%ele(i)%lord_status == girder_lord$)then
            do ix = 1,lat%ele(i)%n_slave
              slave_ele => pointer_to_slave(lat%ele(i),ix)
             print '(a,a,es12.4,a,es12.4)',slave_ele%name, ' slave_ele%value(x_pitch_tot$) = ', &
              slave_ele%value(x_pitch_tot$), ' slave_ele%value(x_offset_tot$) = ', slave_ele%value(x_offset_tot$)
           end do
         endif
    endif
  end do



do k=-20,10
  inflector_angle = 0.002 * k


  do i=1,lat%n_ele_max
   if(lat%ele(i)%name == 'G2')then
!         print '(a,a,es12.4,a,es12.4)', lat%ele(i)%name,' lat%ele(i)%value(x_pitch$) = ', &
!                lat%ele(i)%value(x_pitch$),' lat%ele(i)%value(x_offset$) = ', lat%ele(i)%value(x_offset$)
print '(/,a,es12.4,a,es12.4)',' set inflector angle = ', inflector_angle,' offset = ', -1*inflector_angle * lat%ele(i)%value(l$)/2.
         lat%ele(i)%value(x_pitch$) = inflector_angle
         lat%ele(i)%value(x_offset$) = -1*inflector_angle * lat%ele(i)%value(l$)/2.
         print '(a,a,es12.4,a,es12.4)', lat%ele(i)%name,' lat%ele(i)%value(x_pitch$) = ', &
                lat%ele(i)%value(x_pitch$),' lat%ele(i)%value(x_offset$) = ', lat%ele(i)%value(x_offset$)
 !        if(lat%ele(i)%lord_status == girder_lord$)then
 !           do ix = 1,lat%ele(i)%n_slave
!              slave_ele => pointer_to_slave(lat%ele(i),ix)
!             print '(a,a,es12.4,a,es12.4)',slave_ele%name, ' slave_ele%value(x_pitch_tot$) = ', &
!              slave_ele%value(x_pitch_tot$), ' slave_ele%value(x_offset_tot$) = ', slave_ele%value(x_offset_tot$)
!           end do
!         endif
    endif
  end do

print *
print *, 'call lattice_bookkeeper'
print *
call lattice_bookkeeper(lat, err_flag)

  do i=1,lat%n_ele_max
   if(lat%ele(i)%name == 'G2')then
         print '(a,a,es12.4,a,es12.4)', lat%ele(i)%name,' lat%ele(i)%value(x_pitch$) = ', &
                lat%ele(i)%value(x_pitch$),' lat%ele(i)%value(x_pitch$) = ', lat%ele(i)%value(x_offset$)
         if(lat%ele(i)%lord_status == girder_lord$)then
            do ix = 1,lat%ele(i)%n_slave
              slave_ele => pointer_to_slave(lat%ele(i),ix)
             print '(a,a,es12.4,a,es12.4)',slave_ele%name, ' slave_ele%value(x_pitch_tot$) = ', &
              slave_ele%value(x_pitch_tot$), ' slave_ele%value(x_offset_tot$) = ', slave_ele%value(x_offset_tot$)
              if(trim(slave_ele%name)=='INFLECTOR')then
               angle = slave_ele%value(x_pitch_tot$)
               offset = slave_ele%value(x_offset_tot$)
              endif
              if(trim(slave_ele%name)=='MARK_INFLECTOR_US')then
               angle_us = slave_ele%value(x_pitch_tot$)
               offset_us = slave_ele%value(x_offset_tot$)
              endif
           end do
         endif
    endif
  end do

       call reallocate_coord(co,lat%n_ele_track)
       co(0)%vec=0
      co(0)%vec(1) =   -4.3477E-02
      co(0)%vec(2) = 0.020681
       co(0)%t=0       
        write(16,'(/,a,1x,a,1x,es12.4,a,es12.4,3es12.4/)')'#', 'angle = ', inflector_angle ,  ' at upstream end inflector ', angle, offset, angle_us, offset_us
         do j=1,lat%n_ele_track
           call track1(co(j-1),lat%ele(j), lat%param, co(j))
           write(16, '(i10,1x,6es12.4)') j,co(j)%vec
        end do

end do

end


