subroutine calc_bunch_params_cutoff (bunch, bunch_params, twiss, emitx_cutoff, error) use bmad use beam_mod implicit none ! type (bunch_struct) bunch, bunch_temp type (bunch_params_struct) bunch_params type (twiss_struct) twiss real(rp) emitx_cutoff real(rp) x, xp, x_action logical error integer n_part, i bunch_temp = bunch n_part = size(bunch%particle) do i = 1, n_part if (bunch%particle(i)%state /= alive$) cycle x = bunch%particle(i)%vec(1) - twiss%eta * bunch%particle(i)%vec(6) xp = bunch%particle(i)%vec(2)- twiss%etap * bunch%particle(i)%vec(6) x_action = twiss%gamma*x**2 + 2*twiss%alpha*x*xp + twiss%beta*xp**2 if (x_action > emitx_cutoff) then bunch_temp%particle(i)%state = lost$ end if end do call calc_bunch_params(bunch_temp, bunch_params, error, .true.) end subroutine calc_bunch_params_cutoff