def test_POAV_angles(self): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=10, m=0, nz=2) # atoms.NNrc = 2.0 atoms.assign_unique_ids() atoms.compute_POAVs() for i, atom in enumerate(atoms): print('atom{}: {}'.format(atom.id, atom)) for POAV in ('POAV1', 'POAV2', 'POAVR'): if getattr(atom, POAV) is not None: atom_POAV = getattr(atom, POAV) sigma_pi_angles = np.degrees(atom_POAV.sigma_pi_angles) assert_false(np.all(np.isclose(sigma_pi_angles, 3 * [np.nan], equal_nan=True))) print('atom{}.{}.sigma_pi_angles:\n{}'.format( atom.id, POAV, sigma_pi_angles)) pyramidalization_angles = \ np.degrees(atom_POAV.pyramidalization_angles) print('atom{}.{}.pyramidalization_angles:\n{}'.format( atom.id, POAV, pyramidalization_angles)) assert_false(np.all(np.isclose(pyramidalization_angles, 3 * [np.nan], equal_nan=True))) misalignment_angles = \ np.degrees(atom_POAV.misalignment_angles) print('atom{}.{}.misalignment_angles:\n{}\n'.format( atom.id, POAV, misalignment_angles)) assert_false(np.all(np.isclose(misalignment_angles, 3 * [np.nan], equal_nan=True)))
def test_POAVs(self): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=5, m=0, nz=5) atoms.compute_POAVs() atoms.filter(atoms.coordination_numbers == 3) atom = atoms[10] assert_equals(atom.bonds.Nbonds, 3) for POAV in ('POAV1', 'POAV2', 'POAVR'): atom_POAV = getattr(atom, POAV) assert_is_instance(atom_POAV, getattr(sknano.core.atoms, POAV)) sigma_pi_angles = np.degrees(atom_POAV.sigma_pi_angles) assert_false(np.all(np.isclose(sigma_pi_angles, 3 * [np.nan], equal_nan=True))) pyramidalization_angles = \ np.degrees(atom_POAV.pyramidalization_angles) assert_false(np.all(np.isclose(pyramidalization_angles, 3 * [np.nan], equal_nan=True))) misalignment_angles = \ np.degrees(atom_POAV.misalignment_angles) assert_false(np.all(np.isclose(misalignment_angles, 3 * [np.nan], equal_nan=True))) print(getattr(atom, POAV))
def test7(): atoms = generate_atoms(generator_class='SWNTGenerator', n=5, m=0, nz=5) atoms.update_attrs() filtered = atoms.filtered_ids(list(range(5, 26))) atoms.filter_ids(list(range(5, 26))) assert_equal(filtered, atoms) assert_true(atoms.Natoms, 20)
def test8(): atoms = generate_atoms(generator_class='SWNTGenerator', n=5, m=0, nz=5) atoms.update_attrs() filtered1 = atoms.filtered(atoms.coordination_numbers > 1) filtered2 = atoms.filtered("coordination_numbers > 1") atoms.filter(atoms.coordination_numbers > 1) assert_equal(filtered1, atoms) assert_equal(filtered1, filtered2)
def test5(): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=5, m=5, nz=5, verbose=True) atoms.assign_unique_ids() for i, atom in enumerate(atoms): assert_true(atoms[i] is atoms.get_atom(atom.id)) assert_equal(i, atoms.index(atom))
def test6(): atoms = generate_atoms(generator_class='SWNTGenerator', n=3, m=3, nz=10) atoms.assign_unique_ids() atoms.center_centroid() atoms.kNN = 6 atoms.NNrc = 9.0 new_atoms = atoms.filtered((atoms.z >= -5) & (atoms.z <= 5)) assert_equal(atoms.kNN, 6) assert_equal(atoms.NNrc, 9.0) assert_equal(atoms.kNN, new_atoms.kNN) assert_equal(atoms.NNrc, new_atoms.NNrc)
def test_find_target_atom(): atoms = generate_atoms(generator_class='SWNTGenerator', n=10, m=10, nz=3) atoms.center_centroid() atoms.assign_unique_ids() atoms.update_attrs() target_atom = find_target_atom(atoms, target_coords=[0.0, 5.0, 0.0], search_radius=1.0, nearest_target=True) print('atoms.z.min(), atoms.z.max(): {}, {}'.format( atoms.z.min(), atoms.z.max())) print('atom_ids: {}'.format(atoms.atom_ids)) print('CNs: {}'.format(atoms.coordination_numbers)) print('target_atom: {}'.format(target_atom))
def test3(): atoms = generate_atoms(elements='periodic_table') atoms.assign_unique_ids() print(atoms[:5]) atoms_slice = atoms[5:10] atoms[:5] = atoms_slice assert_equal(atoms[:5], atoms[5:10]) print(atoms[:5]) atoms[:5] = ['C', 'H', 'N', 'Ar', 'He'] print(atoms[:8]) atoms[0] = 'Au' print(atoms[:2])
def test5(): atoms = \ BasisAtoms(atoms=generate_atoms(elements='periodic_table').symbols) print(atoms[:5]) atoms_slice = atoms[5:10] atoms[:5] = atoms_slice assert_equal(atoms[:5], atoms[5:10]) print(atoms[:5]) atoms[:5] = ['C', 'H', 'N', 'Ar', 'He'] print(atoms[:8]) atoms[0] = 'Au' print(atoms[:2])
def test_atom_bonds(self): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=10, m=5, nz=1) atoms.kNN = 3 atoms.NNrc = 2.0 atoms.compute_POAVs() bonds = atoms.bonds assert_equal(len(bonds), atoms.coordination_numbers.sum()) assert_equal(bonds.Nbonds, atoms.coordination_numbers.sum()) for i, atom in enumerate(atoms): if atom.bonds.Nbonds > 1: print('atom.bonds.angles:\n' '{}'.format(np.degrees(atom.bonds.angles))) for j, bond in enumerate(atom.bonds): assert_true(np.allclose(bond.vector, atom.bonds.vectors[j])) assert_equal(bond.length, atom.bonds.lengths[j])
def test4(): atoms = generate_atoms(elements='periodic_table') atoms.assign_unique_ids() a1 = atoms[:10] a2 = atoms[:5] assert_equal(a1 + a2, atoms[:10]) a1 = atoms[:5] a2 = atoms[:10] assert_equal(a1 + a2, atoms[:10]) assert_equal(atoms + atoms.__atom_class__('H', id=1), atoms) assert_equal(atoms.__atom_class__('H', id=1) + atoms, atoms) a1 = atoms[:25] a2 = atoms[25:] assert_equal((a1 + a2).elements.tolist(), element_symbols) assert_equal((a1 + a2), atoms)
def test3(self): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=10, m=0, nz=5) atoms.kNN = 30 atoms.NNrc = 10 atoms.update_neighbors(cutoffs=[1.5, 2.5, 2.9, 3.8, 4.3]) # print(atoms.neighbors.tolist()) print(atoms.neighbor_distances.tolist()) # print('first_neighbors:\n{}'.format(atoms.first_neighbors)) # print('second_neighbors:\n{}'.format(atoms.second_neighbors)) print('len(first_neighbors): {}'.format( [len(atom.first_neighbors) for atom in atoms])) print('len(second_neighbors): {}'.format( [len(atom.second_neighbors) for atom in atoms])) print('len(third_neighbors): {}'.format( [len(atom.third_neighbors) for atom in atoms])) print('len(4th_neighbors): {}'.format( [len(atom.get_neighbors(4)) for atom in atoms])) print('len(5th_neighbors): {}'.format( [len(atom.get_neighbors(5)) for atom in atoms]))
def test_generate_atoms(): atoms = generate_atoms(elements=element_symbols) assert_equals(atoms.Natoms, len(element_symbols)) atoms = generate_atoms(generator_class="SWNTGenerator", n=10, m=10, nz=10) assert_equals(atoms.Natoms, 400)
def test3(self): atoms = generate_atoms(elements='periodic_table') atoms.assign_unique_ids() atoms.kNN = 3 atoms_cp = atoms.copy() assert_equal(atoms.kNN, atoms_cp.kNN)
def test4(self): atoms = \ generate_atoms(generator_class='SWNTGenerator', n=3, m=0, nz=5) assert_equal(compute_Natoms((3, 0), nz=5), atoms.Natoms) assert_equal(atoms.Natoms, atoms.ids[-1])
def test2(): atoms = generate_atoms(elements='periodic_table') atoms.assign_unique_ids() atoms_slice = atoms[5:10] print(atoms_slice)