Ejemplo n.º 1
0
def get_model_refiner_one_sublattice_12_vacancies(
        image_noise=True, test_element='Ti_2'):

    # make one with more vacancies maybe
    sublattice = get_simple_cubic_sublattice(
        image_noise=image_noise,
        with_vacancies=False)
    sub1_atom_positions = np.array(sublattice.atom_positions).T
    sub1_image = get_simple_cubic_signal(
        image_noise=image_noise,
        with_vacancies=True)
    sub1 = am.Sublattice(sub1_atom_positions, sub1_image)
    for i in range(0, len(sub1.atom_list)):
        sub1.atom_list[i].elements = test_element

    test_element_info = split_and_sort_element(test_element)
    sub1_element_list = auto_generate_sublattice_element_list(
        material_type='single_element_column',
        elements=test_element_info[0][1],
        max_number_atoms_z=test_element_info[0][2] + 3)

    refiner_dict = {sub1: sub1_element_list}
    comparison_image = sublattice.signal
    refiner = Model_Refiner(refiner_dict, comparison_image)
    return refiner
Ejemplo n.º 2
0
    def _auto_mask_radii_init(self):
        '''
        Automatically set the mask_radius for each sublattice.
        Use mask_radius='auto' when calling a Model Refiner method.
        Ideally you could have the mask_radius/percent_to_nn change depending
        on the atom, but for now depending on the sublattice is okay.
        '''

        mask_radii = []
        for sublattice in self.sublattice_list:
            element_config = get_most_common_sublattice_element(
                sublattice, info='element')
            chemical = split_and_sort_element(element_config)[0][1]
            radius = atomic_radii_in_pixels(self.sampling, chemical)
            mask_radii.append(radius)

        self.auto_mask_radius = mask_radii
Ejemplo n.º 3
0
def get_model_refiner_one_sublattice_varying_amp(
        image_noise=False, amplitude=[0, 5],
        test_element='Ti_2'):

    sub1 = get_simple_cubic_sublattice(image_noise=image_noise,
                                       amplitude=amplitude)
    for i in range(0, len(sub1.atom_list)):
        sub1.atom_list[i].elements = test_element

    test_element_info = split_and_sort_element(test_element)
    sub1_element_list = auto_generate_sublattice_element_list(
        material_type='single_element_column',
        elements=test_element_info[0][1],
        max_number_atoms_z=np.max(amplitude))

    refiner_dict = {sub1: sub1_element_list}
    comparison_image = get_simple_cubic_signal(
        image_noise=image_noise,
        amplitude=test_element_info[0][2])
    refiner = Model_Refiner(refiner_dict, comparison_image)
    return refiner
Ejemplo n.º 4
0
def get_model_refiner_one_sublattice_3_vacancies(
        image_noise=True, test_element='Ti_2'):

    # make one with more vacancies maybe
    sub1 = am_dev.dummy_data.get_simple_cubic_with_vacancies_sublattice(
        image_noise=image_noise)
    for i in range(0, len(sub1.atom_list)):
        sub1.atom_list[i].elements = test_element

    test_element_info = split_and_sort_element(test_element)
    sub1_element_list = auto_generate_sublattice_element_list(
        material_type='single_element_column',
        elements=test_element_info[0][1],
        max_number_atoms_z=test_element_info[0][2] + 3)

    refiner_dict = {sub1: sub1_element_list}
    comparison_image = am_dev.dummy_data.get_simple_cubic_signal(
        image_noise=image_noise)
    refiner = Model_Refiner(refiner_dict, comparison_image)
    refiner.auto_mask_radius = [4]

    return refiner
Ejemplo n.º 5
0
def create_dataframe_for_xyz(sublattice_list,
                             element_list,
                             x_size,
                             y_size,
                             z_size,
                             filename,
                             header_comment='top_level_comment'):
    """
    Creates a Pandas Dataframe and a .xyz file (usable with Prismatic) from the
    inputted sublattice(s).

    Parameters
    ----------
    sublattice_list : list of Atomap Sublattice objects
    element_list : list of strings
        Each string must be an element symbol from the periodic table.
    x_size, y_size, z_size : floats
        Dimensions of the x,y,z axes in Angstrom.
    filename : string
        Name with which the .xyz file will be saved.
    header_comment : string, default 'top_level_comment'

    Example
    -------
    >>> import temul.external.atomap_devel_012.dummy_data as dummy_data
    >>> sublattice = dummy_data.get_simple_cubic_sublattice()
    >>> for i in range(0, len(sublattice.atom_list)):
    ...     sublattice.atom_list[i].elements = 'Mo_1'
    ...     sublattice.atom_list[i].z_height = '0.5'
    >>> element_list = ['Mo_0', 'Mo_1', 'Mo_2']
    >>> x_size, y_size = 50, 50
    >>> z_size = 5
    >>> dataframe = create_dataframe_for_xyz([sublattice], element_list,
    ...                          x_size, y_size, z_size,
    ...                          filename='dataframe',
    ...                          header_comment='Here is an Example')

    """
    df_xyz = pd.DataFrame(columns=[
        '_atom_site_Z_number', '_atom_site_fract_x', '_atom_site_fract_y',
        '_atom_site_fract_z', '_atom_site_occupancy',
        '_atom_site_RMS_thermal_vib'
    ])

    # add header sentence
    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': header_comment,
            '_atom_site_fract_x': '',
            '_atom_site_fract_y': '',
            '_atom_site_fract_z': '',
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    # add unit cell dimensions
    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': '',
            '_atom_site_fract_x': format(x_size, '.6f'),
            '_atom_site_fract_y': format(y_size, '.6f'),
            '_atom_site_fract_z': format(z_size, '.6f'),
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    for sublattice in sublattice_list:
        # denomiator could also be: sublattice.signal.axes_manager[0].size

        for i in range(0, len(sublattice.atom_list)):
            if sublattice.atom_list[i].elements in element_list:
                # value = 0
                # this loop cycles through the length of the split element eg,
                # 2 for 'Se_1.S_1' and
                #   outputs an atom label for each
                for k in range(
                        0,
                        len(
                            split_and_sort_element(
                                sublattice.atom_list[i].elements))):
                    if split_and_sort_element(
                            sublattice.atom_list[i].elements)[k][2] >= 1:
                        atomic_number = split_and_sort_element(
                            sublattice.atom_list[i].elements)[k][3]

                        if "," in sublattice.atom_list[i].z_height:
                            atom_z_height = float(
                                sublattice.atom_list[i].z_height.split(",")[k])
                        else:
                            atom_z_height = float(
                                sublattice.atom_list[i].z_height)

                        # this loop controls the  z_height
                        # len(sublattice.atom_list[i].z_height)):
                        for p in range(
                                0,
                                split_and_sort_element(
                                    sublattice.atom_list[i].elements)[k][2]):
                            # could use ' ' + value to get an extra space
                            # between columns!
                            # nans could be better than ''
                            # (len(sublattice.image)-

                            if "," in sublattice.atom_list[
                                    i].z_height and split_and_sort_element(
                                        sublattice.atom_list[i].elements
                                    )[k][2] > 1:
                                atom_z_height = float(
                                    sublattice.atom_list[i].z_height.split(
                                        ",")[p])
                            else:
                                pass

                            df_xyz = df_xyz.append(
                                {
                                    '_atom_site_Z_number':
                                    atomic_number,
                                    '_atom_site_fract_x':
                                    format(
                                        sublattice.atom_list[i].pixel_x *
                                        (x_size / len(sublattice.image[0, :])),
                                        '.6f'),
                                    '_atom_site_fract_y':
                                    format(
                                        sublattice.atom_list[i].pixel_y *
                                        (y_size / len(sublattice.image[:, 0])),
                                        '.6f'),
                                    # this is a fraction already, which is why we
                                    # don't divide as in x and y
                                    '_atom_site_fract_z':
                                    format(atom_z_height * z_size, '.6f'),
                                    '_atom_site_occupancy':
                                    1.0,
                                    '_atom_site_RMS_thermal_vib':
                                    0.1
                                },
                                ignore_index=True)  # insert row

    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': int(-1),
            '_atom_site_fract_x': '',
            '_atom_site_fract_y': '',
            '_atom_site_fract_z': '',
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    if filename is not None:
        df_xyz.to_csv(filename + '.xyz', sep=' ', header=False, index=False)

    return (df_xyz)
Ejemplo n.º 6
0
def create_dataframe_for_xyz(sublattice_list,
                             element_list,
                             x_size,
                             y_size,
                             z_size,
                             filename,
                             header_comment='top_level_comment'):
    """
    Parameters
    ----------

    Example
    -------

    >>> import atomap.api as am
    >>> sublattice = am.dummy_data.get_simple_cubic_sublattice()
    >>> for i in range(0, len(sublattice.atom_list)):
    ...     sublattice.atom_list[i].elements = 'Mo_1'
    ...     sublattice.atom_list[i].z_height = '0.5'
    >>> element_list = ['Mo_0', 'Mo_1', 'Mo_2']
    >>> x_size, y_size = 50, 50
    >>> z_size = 5
    >>> dataframe = create_dataframe_for_xyz([sublattice], element_list,
    ...                          x_size, y_size, z_size,
    ...                          filename='dataframe',
    ...                          header_comment='Here is an Example')

    """
    df_xyz = pd.DataFrame(columns=[
        '_atom_site_Z_number', '_atom_site_fract_x', '_atom_site_fract_y',
        '_atom_site_fract_z', '_atom_site_occupancy',
        '_atom_site_RMS_thermal_vib'
    ])

    # add header sentence
    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': header_comment,
            '_atom_site_fract_x': '',
            '_atom_site_fract_y': '',
            '_atom_site_fract_z': '',
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    # add unit cell dimensions
    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': '',
            '_atom_site_fract_x': format(x_size, '.6f'),
            '_atom_site_fract_y': format(y_size, '.6f'),
            '_atom_site_fract_z': format(z_size, '.6f'),
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    for sublattice in sublattice_list:
        # denomiator could also be: sublattice.signal.axes_manager[0].size

        for i in range(0, len(sublattice.atom_list)):
            if sublattice.atom_list[i].elements in element_list:
                # value = 0
                # this loop cycles through the length of the split element eg,
                # 2 for 'Se_1.S_1' and
                #   outputs an atom label for each
                for k in range(
                        0,
                        len(
                            split_and_sort_element(
                                sublattice.atom_list[i].elements))):
                    if split_and_sort_element(
                            sublattice.atom_list[i].elements)[k][2] >= 1:
                        atomic_number = split_and_sort_element(
                            sublattice.atom_list[i].elements)[k][3]

                        if "," in sublattice.atom_list[i].z_height:
                            atom_z_height = float(
                                sublattice.atom_list[i].z_height.split(",")[k])
                        else:
                            atom_z_height = float(
                                sublattice.atom_list[i].z_height)

                        # this loop controls the  z_height
                        # len(sublattice.atom_list[i].z_height)):
                        for p in range(
                                0,
                                split_and_sort_element(
                                    sublattice.atom_list[i].elements)[k][2]):
                            # could use ' ' + value to get an extra space
                            # between columns!
                            # nans could be better than ''
                            # (len(sublattice.image)-

                            if "," in sublattice.atom_list[
                                    i].z_height and split_and_sort_element(
                                        sublattice.atom_list[i].elements
                                    )[k][2] > 1:
                                atom_z_height = float(
                                    sublattice.atom_list[i].z_height.split(
                                        ",")[p])
                            else:
                                pass

                            df_xyz = df_xyz.append(
                                {
                                    '_atom_site_Z_number':
                                    atomic_number,
                                    '_atom_site_fract_x':
                                    format(
                                        sublattice.atom_list[i].pixel_x *
                                        (x_size / len(sublattice.image[0, :])),
                                        '.6f'),
                                    '_atom_site_fract_y':
                                    format(
                                        sublattice.atom_list[i].pixel_y *
                                        (y_size / len(sublattice.image[:, 0])),
                                        '.6f'),
                                    # this is a fraction already, which is why we don't divide as in x and y
                                    '_atom_site_fract_z':
                                    format(atom_z_height * z_size, '.6f'),
                                    '_atom_site_occupancy':
                                    1.0,  # might need to loop through the vancancies here?
                                    '_atom_site_RMS_thermal_vib':
                                    0.1
                                },
                                ignore_index=True)  # insert row

    df_xyz = df_xyz.append(
        {
            '_atom_site_Z_number': int(-1),
            '_atom_site_fract_x': '',
            '_atom_site_fract_y': '',
            '_atom_site_fract_z': '',
            '_atom_site_occupancy': '',
            '_atom_site_RMS_thermal_vib': ''
        },
        ignore_index=True)

    if filename is not None:
        df_xyz.to_csv(filename + '.xyz', sep=' ', header=False, index=False)

    return (df_xyz)