subroutine focus(this, spectrum, dict, seqs)
use random, only : ranu, seq
use sim_state_mod, only : state
use utils, only : deg2rad
use vector_class, only : length
use tomlf, only : toml_table, get_value
use piecewiseMod
class(photon) :: this
type(spectrum_t), intent(in) :: spectrum
type(toml_table), optional, intent(inout) :: dict
type(seq), optional, intent(inout) :: seqs(2)
type(vector) :: targ, dir
real(kind=wp) :: dist, tmp
integer :: cell(3)
targ = vector(0._wp,0._wp,0._wp)
this%pos%x = ranu(-state%grid%xmax, state%grid%xmax)
this%pos%y = ranu(-state%grid%ymax, state%grid%ymax)
this%pos%z = state%grid%zmax - 1e-8_wp
dist = length(this%pos)
dir = (-1._wp)*this%pos / dist
dir = dir%magnitude()
this%nxp = dir%x
this%nyp = dir%y
this%nzp = dir%z
this%phi = atan2(this%nyp, this%nxp)
this%cosp = cos(this%phi)
this%sinp = sin(this%phi)
this%cost = this%nzp
this%sint = sqrt(1._wp - this%cost**2)
this%nxp = this%sint * this%cosp
this%nyp = this%sint * this%sinp
this%nzp = this%cost
this%tflag = .false.
this%bounces = 0
this%cnts = 0
this%weight = 1.0_wp
call spectrum%p%sample(this%wavelength, tmp)
! Linear Grid
cell = state%grid%get_voxel(this%pos)
this%xcell = cell(1)
this%ycell = cell(2)
this%zcell = cell(3)
end subroutine focus