subroutine create_and_propagate_electron(lat,nbranch, co_muon_end, co_electron, n, turn, nmuons, make_movie) use bmad use muon_interface, dummy => create_and_propagate_electron implicit none type (lat_struct),target :: lat type (coord_struct) co_muon_end, co_electron, co_elec_end type(coord_struct), allocatable :: co_elec(:) type (branch_struct), pointer :: branch ! ring integer n, turn, nmuons integer ix_end, ix_ele integer nbranch, track_state integer ix,k,j1 real(rp) distance real(rp) s_start logical make_movie, err_flag, no_electron_tracking/.true./ branch => lat%branch(nbranch) ! this is the ring branch call reallocate_coord (co_elec, branch%n_ele_max) call decayElectron(co_muon_end,co_electron,n) distance = float(turn-1) + co_muon_end%s/ branch%ele(branch%n_ele_track)%s if(turn==1 .and. co_muon_end%s == 0.00001) distance = 0. call decay_info(distance,n,co_electron,co_muon_end) !record decay information bmad_com%aperture_limit_on = .false. bmad_com%spin_tracking_on = .false. if(no_electron_tracking)return ix_end = lat%branch(nbranch)%n_ele_track call track_from_s_to_s(lat, co_muon_end%s,branch%ele(ix_end)%s,co_electron,co_elec_end,all_orb=co_elec,ix_branch=nbranch, track_state = track_state) !track electron to end of lattice co_elec(0) = co_electron if(make_movie .and. nmuons == 1)then ix_ele = element_at_s(lat,co_muon_end%s,.true.,nbranch) call step_floor_around_ring(lat,ix_ele,nbranch, co_electron, branch%ele(ix_ele-1)%floor%r, co_muon_end%s) endif do k=1,ix_end print '(a10,1x,i10,1x,a16,1x,11es12.4)',' electron ',k,branch%ele(k)%name,& co_elec_end%s,branch%ele(ix_end)%s,co_elec_end%vec,co_elec(k)%s,co_elec(k)%vec(1), co_elec(k)%p0c end do co_elec(ix_end) = co_elec_end do while(track_state == moving_forward$) !keep going around until the positron is lost co_elec(0)=co_elec(ix_end) call track_all(lat,co_elec, ix_branch=nbranch,track_state=track_state, err_flag = err_flag) !track electron around ring until it is lost if(make_movie .and. nmuons == 1)then do j1=1,branch%n_ele_track s_start=-99. call step_floor_around_ring(lat,j1,nbranch,co_elec(j1-1), branch%ele(j1-1)%floor%r, s_start) end do endif end do !track electrons until not moving_forward$ bmad_com%aperture_limit_on = .true. bmad_com%spin_tracking_on = .true. return end