def remove_noncoord_oxygens( atoms=None, ): """ """ #| - remove_noncoord_oxygens df_coord_slab_i = get_structure_coord_df(atoms) # ######################################################### df_i = df_coord_slab_i[df_coord_slab_i.element == "O"] df_i = df_i[df_i.num_neighbors == 0] o_atoms_to_remove = df_i.structure_index.tolist() # ######################################################### o_atoms_to_remove_1 = [] df_j = df_coord_slab_i[df_coord_slab_i.element == "O"] for j_cnt, row_j in df_j.iterrows(): neighbor_count = row_j.neighbor_count if neighbor_count.get("Ir", 0) == 0: if neighbor_count.get("O", 0) == 1: o_atoms_to_remove_1.append(row_j.structure_index) o_atoms_to_remove = list(set(o_atoms_to_remove + o_atoms_to_remove_1)) slab_new = remove_atoms(atoms, atoms_to_remove=o_atoms_to_remove) return(slab_new)
def remove_highest_metal_atoms( atoms=None, num_atoms_to_remove=None, metal_atomic_number=77, ): """ """ #| - remove_highest_metal_atom slab_m = atoms[atoms.numbers == metal_atomic_number] positions_cpy = copy.deepcopy(slab_m.positions) positions_cpy_sorted = positions_cpy[positions_cpy[:,2].argsort()] indices_to_remove = [] for coord_i in positions_cpy_sorted[-2:]: for i_cnt, atom in enumerate(atoms): if all(atom.position == coord_i): indices_to_remove.append(i_cnt) slab_new = remove_atoms( atoms=atoms, atoms_to_remove=indices_to_remove, ) return(slab_new)
def remove_nonsaturated_surface_metal_atoms( atoms=None, dz=None, ): """ """ #| - remove_nonsaturated_surface_metal_atoms # ################################################# # ################################################# z_positions = atoms.positions[:,2] z_max = np.max(z_positions) z_min = np.min(z_positions) # ################################################# # ################################################# df_coord_slab_i = get_structure_coord_df(atoms) # ################################################# metal_atoms_to_remove = [] for atom in atoms: if atom.symbol == metal_atom_symbol: z_pos_i = atom.position[2] if z_pos_i >= z_max - dz or z_pos_i <= z_min + dz: row_coord = df_coord_slab_i[ df_coord_slab_i.structure_index == atom.index].iloc[0] num_o_neighbors = row_coord.neighbor_count.get("O", 0) if num_o_neighbors < 6: metal_atoms_to_remove.append(atom.index) slab_new = remove_atoms(atoms=atoms, atoms_to_remove=metal_atoms_to_remove) return(slab_new)
o_atoms_to_remove = df_i.structure_index.tolist() # ######################################################### o_atoms_to_remove_1 = [] df_j = df_coord_slab_i[df_coord_slab_i.element == "O"] for j_cnt, row_j in df_j.iterrows(): neighbor_count = row_j.neighbor_count if neighbor_count.get("Ir", 0) == 0: if neighbor_count.get("O", 0) == 1: o_atoms_to_remove_1.append(row_j.structure_index) o_atoms_to_remove = list(set(o_atoms_to_remove + o_atoms_to_remove_1)) slab_new = remove_atoms(atoms, atoms_to_remove=o_atoms_to_remove) # + # slab_new.write() slab_new.write("out_data/temp_out/slab_1.cif") # + active="" # # # # # # # #