def _efieldn_linearized(x, y, sig_x, sig_y): ''' Returns linearized field ''' a = pm.sqrt(2) * sig_x b = pm.sqrt(2) * sig_y amplitude = 1. / (2. * np.pi * epsilon_0 * (a + b)) return x / a * amplitude, y / b * amplitude
def _efieldn_wb(x, y, sigma_x, sigma_y): a = sigma_x * pm.sqrt(3) b = sigma_y * pm.sqrt(3) zs = x - 1j * y if x**2 / (a)**2 + y**2 / (b)**2 <= 1: chi = x / a + 1j * y / b omegs = b * x / a - 1j * a * y / b efield = 8.0*chi/(a+b) * \ (1.0-(2.0*zs+omegs)*chi/(3.0*(a+b))) else: zs = pm.abs(x) + 1j * pm.abs(y) sqrt_diff = pm.sqrt(zs**2 - a**2 + b**2) first_term = 2.0 * zs / (zs + sqrt_diff) efield = 2.0 / zs * first_term * (zs + 2.0 * sqrt_diff) / (3.0 * zs) efield = efield.real * pm.sign(x) - 1.0j * efield.imag * pm.sign(y) denom = 4. * np.pi * epsilon_0 return efield.real / denom, efield.imag / denom
def _efieldn_kv_b(x, y, sigma_x, sigma_y): ''' Field of a KV distrubition calculated as in here: https://cds.cern.ch/record/258225/files/P00020427.pdf ''' a = sigma_x * pm.sqrt(2) b = sigma_y * pm.sqrt(2) if x == 0 and y == 0: return 0, 0 elif (x / a)**2 + (y / b)**2 <= 1: efield_x = 4.0 / (a + b) * x / a efield_y = 4.0 / (a + b) * y / b else: zbar = x - 1j * y efield = 4.0 / (zbar + pm.sqrt(zbar * zbar - a * a + b * b)) efield_x = efield.real efield_y = -efield.imag denom = 4 * np.pi * epsilon_0 return efield_x / denom, efield_y / denom
def _efieldn_kv_a(x, y, sigma_x, sigma_y): ''' Field of a KV distrubition calculated as in here: https://cds.cern.ch/record/258225/files/P00020427.pdf ''' a = sigma_x * pm.sqrt(2) b = sigma_y * pm.sqrt(2) if (x / a)**2 + (y / b)**2 <= 1: efield_x = 4.0 / (a + b) * x / a efield_y = 4.0 / (a + b) * y / b else: uxy = (x)**2 - (y)**2 - (a)**2 + (b)**2 vxy = uxy**2 + (2.0 * x * y)**2 efield_x = 4.0 / (a**2 - b**2) * ( x - pm.sign(x) / pm.sqrt(2.0) * pm.sqrt(uxy + pm.sqrt(vxy))) uxy = (y)**2 - (x)**2 - (b)**2 + (a)**2 efield_y = 4.0 / (b**2 - a**2) * ( y - pm.sign(y) / pm.sqrt(2.0) * pm.sqrt(uxy + pm.sqrt(vxy))) denom = 4 * np.pi * epsilon_0 return efield_x / denom, efield_y / denom
def _sig_sqrt(sig_x, sig_y): return pm.sqrt(2 * (sig_x**2 - sig_y**2))