def random_pattern(symmetry, k): """Creates a random pattern of some symmetry at some k Parameters --------------- symmetry: int The symmetry of the cluster k: float The inverse spacing of the cluster nm^-1 Returns ------------ k:array-like The """ angle = (2 * np.pi) / symmetry k = k # +np.random.randn()/10 # normal distribution about k k = [[np.cos(angle * i) * k, np.sin(angle * i) * k] for i in range(symmetry)] rotation_vector, theta = random_rotation() rand_angle = np.random.rand() * np.pi * 2 k = [list(rotate(x, y, rand_angle)) + [0] for x, y in k] s = [ sg(acc_voltage=200, rotation_vector=rotation_vector, theta=theta, k0=speckle) for speckle in k ] observed_intensity = [100 * shape_function(r=1, s=dev) for dev in s] return k, observed_intensity
def simulate_symmetry(symmetry=4, I=1, k=4, r=1, iterations=1000): """Simulates the intensities of some symmetry for a random rotation. Assumes a spherical cluster of randius r and spots appearing at k and an Intensity of I (if the deviation parameter "s" is zero) Parameters --------------- symmetry: int The symmetry of the clusters I: float Intensity with deviation parameter of zero k: float The inverse spacing of the clusters nm^-1 r: float The radius of the cluster. Returns ------------ observed_int:list The intensities of the speckles described. """ angle = (2 * np.pi) / symmetry k = [[np.cos(angle * i) * k, np.sin(angle * i) * k, 0] for i in range(symmetry)] observed_int = np.zeros(shape=(iterations, symmetry * 4)) for i in range(iterations): rotation_vector, theta = random_rotation() for j, speckle in enumerate(k): s = sg(acc_voltage=200, rotation_vector=rotation_vector, theta=theta, k0=speckle) observed_int[i, j * 4] = I * shape_function(r=r, s=s) observed_int[i, j * 4 + 1] = I * shape_function(r=r, s=s) return observed_int
def test_sg(self): print(sg(200, rotation_vector=(0, 1, 0), theta=0))