def track(self, beam): """The formula that describes the transverse kick experienced by an ultra-relativistic particle traversing the RFQ longitudinally is based on the thin-lens approximation \Delta p_x = -x*(2 e v_2 / omega) * cos(omega z / (beta c) + phi_0), \Delta p_y = y*(2 e v_2 / omega) * cos(omega z / (beta c) + phi_0). """ cos_term = (2. * e * self.v_2 / self.omega * pm.cos(self.omega / (beam.beta * c) * beam.z + self.phi_0)) beam.xp += -beam.x * cos_term / beam.p0 beam.yp += beam.y * cos_term / beam.p0
def detune(self, beam): """ Calculates for each particle its betatron detuning dQ_x, dQ_y according to formulae taken from [1] (see above). dQ_x = dapp_xz / p * \cos(omega / (beta c) z + phi_0) dQ_y = dapp_yz / p * \cos(omega / (beta c) z + phi_0) with dapp_xz = beta_x_RFQ * v_2 * e / (2 Pi * omega) dapp_yz = -beta_y_RFQ * v_2 * e / (2 Pi * omega) and p the particle momentum p = (1 + dp) p0. (Probably, it would make sense to approximate p by p0 for better performance). """ p = (1. + beam.dp) * beam.p0 cos_term = pm.cos(self.omega / (beam.beta * c) * beam.z + self.phi_0) / p dQ_x = self.dapp_xz * cos_term dQ_y = self.dapp_yz * cos_term return dQ_x, dQ_y