def _lookup_element_symbol(atom_type): """Look up an atomic_number based on atom type information, 0 if non-element type.""" try: element = element_by_atom_type(atom_type) return element.symbol except GMSOError: return "X"
def _lookup_atomic_number(atom_type): """Attempt to look up an atomic_number based on atom type information, 0 if non-element type""" try: element = element_by_atom_type(atom_type) return element.atomic_number except GMSOError: return 0
def test_element_by_atom_type(self): carbon_type = AtomType(mass=12.011, definition="C", name="C") mass_only = AtomType(mass=12.011) def_only = AtomType(definition="C") name_only = AtomType(name="C") for atom_type in [carbon_type, mass_only, def_only, name_only]: carbon = element.element_by_atom_type(atom_type) assert carbon.name == element.Carbon.name assert carbon.symbol == element.Carbon.symbol assert carbon.mass == element.Carbon.mass
def _atom_types_from_gmso(top, structure, atom_map): """Convert gmso.Topology AtomType to parmed.Structure AtomType. This function will first check the AtomType expression of Topology and make sure it match with the one default in Parmed. After that, it would start atomtyping and parametrizing this part of the structure. Parameters ---------- top : topology.Topology The topology that need to be converted structure: parmed.Structure The destination parmed Structure """ # Maps atype_map = dict() for atom_type in top.atom_types: msg = "Atom type {} expression does not match Parmed AtomType default expression".format( atom_type.name ) assert atom_type.expression == parse_expr( "4*epsilon*(-sigma**6/r**6 + sigma**12/r**12)" ), msg # Extract Topology atom type information atype_name = atom_type.name # Convert charge to elementary_charge atype_charge = float(atom_type.charge.to("Coulomb").value) / ( 1.6 * 10 ** (-19) ) atype_sigma = float(atom_type.parameters["sigma"].to("angstrom").value) atype_epsilon = float( atom_type.parameters["epsilon"].to("kcal/mol").value ) atype_element = element_by_atom_type(atom_type) atype_rmin = atype_sigma * 2 ** (1 / 6) / 2 # to rmin/2 # Create unique Parmed AtomType object atype = pmd.AtomType( atype_name, None, atype_element.mass, atype_element.atomic_number, atype_charge, ) atype.set_lj_params(atype_epsilon, atype_rmin) # Type map to match AtomType to its name atype_map[atype_name] = atype for site in top.sites: # Assign atom_type to atom pmd_atom = atom_map[site] pmd_atom.type = site.atom_type.name pmd_atom.atom_type = atype_map[site.atom_type.name]