def _map_topology(self): """ Create CG topology from given topology and mapping """ # Ensure that a trajectory has been loaded if self._aa_traj is None: raise OutOfOrderError("An atomistic trajectory has not " "been loaded into this Mapper yet.") self._atom_bead_mapping = dict() self._cg_top = Topology() self._solvent_counter = 0 # Loop over all residues for residue in self._aa_top.residues: if residue.name == self._solvent_name: self._map_solvent_top(residue) else: self._map_nonsolvent_top(residue)
def _topology_from_arrays(AtomID, AtomNames, ChainID, ResidueID, ResidueNames): """Build topology object from the arrays stored in the lh5 file""" # Delayed import due to wacky recursive imports in compatibilty from mdtraj import Topology topology = Topology() # assert that the ChainID is just an array of empty strings, which appears # to be the case in our test systems for this legacy format if not np.all(chainid == '' for chainid in ChainID): raise NotImplementedError('Im not prepared to parse multiple chains') chain0 = topology.add_chain() # register the residues registered_residues = {} for i in np.argsort(ResidueID): residue_name = ResidueNames[i] if not isinstance(residue_name, basestring): residue_name = residue_name.decode() if ResidueID[i] not in registered_residues: res = topology.add_residue(residue_name, chain0) registered_residues[ResidueID[i]] = res # register the atoms for i in np.argsort(AtomID): atom_name = AtomNames[i] if not isinstance(atom_name, basestring): atom_name = atom_name.decode() element_symbol = atom_name.lstrip('0123456789')[0] try: element = elem.get_by_symbol(element_symbol) except KeyError: element = None topology.add_atom(atom_name, element, registered_residues[ResidueID[i]]) topology.create_standard_bonds() return topology
def to_mdtraj_Topology(item, atom_indices='all', check=True): if check: digest_item(item, 'molsysmt.Topology') atom_indices = digest_atom_indices(atom_indices) try: from mdtraj import Topology from mdtraj.core import element except: raise LibraryNotFound('mdtraj') n_atoms = item.atoms_dataframe.shape[0] atom_index_array = item.atoms_dataframe["atom_index"].to_numpy() atom_name_array = item.atoms_dataframe["atom_name"].to_numpy() atom_id_array = item.atoms_dataframe["atom_id"].to_numpy() atom_type_array = item.atoms_dataframe["atom_type"].to_numpy() group_index_array = item.atoms_dataframe["group_index"].to_numpy() group_name_array = item.atoms_dataframe["group_name"].to_numpy() group_id_array = item.atoms_dataframe["group_id"].to_numpy() group_type_array = item.atoms_dataframe["group_type"].to_numpy() chain_index_array = item.atoms_dataframe["chain_index"].to_numpy() chain_name_array = item.atoms_dataframe["chain_name"].to_numpy() chain_id_array = item.atoms_dataframe["chain_id"].to_numpy() chain_type_array = item.atoms_dataframe["chain_type"].to_numpy() bonds_atom1 = item.bonds_dataframe["atom1_index"].to_numpy() bonds_atom2 = item.bonds_dataframe["atom2_index"].to_numpy() tmp_item = Topology() former_group_index = -1 former_chain_index = -1 list_new_atoms = [] for ii in range(n_atoms): atom_index = atom_index_array[ii] atom_name = atom_name_array[ii] atom_id = atom_id_array[ii] atom_type = atom_type_array[ii] group_index = group_index_array[ii] chain_index = chain_index_array[ii] new_group = (former_group_index != group_index) new_chain = (former_chain_index != chain_index) if new_chain: chain = tmp_item.add_chain() former_chain_index = chain_index if new_group: residue_name = group_name_array[ii] residue_id = group_id_array[ii] residue = tmp_item.add_residue(residue_name, chain, resSeq=str(residue_id)) former_group_index = group_index elem = element.get_by_symbol(atom_type) atom = tmp_item.add_atom(atom_name, elem, residue) list_new_atoms.append(atom) for atom_1, atom_2 in zip(bonds_atom1, bonds_atom2): tmp_item.add_bond( list_new_atoms[atom_1], list_new_atoms[atom_2]) # falta bond type and bond order return tmp_item