示例#1
0
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
示例#2
0
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
示例#3
0
 def test_shape_function(self):
     plt.plot([shape_function(1, (i / 100) + .00001) for i in range(100)])
     plt.show()