diff --git a/molsysmt/build/get_missing_bonds.py b/molsysmt/build/get_missing_bonds.py index 4d02fec5d..488440e3a 100644 --- a/molsysmt/build/get_missing_bonds.py +++ b/molsysmt/build/get_missing_bonds.py @@ -30,15 +30,16 @@ def get_missing_bonds(molecular_system, threshold='2 angstroms', selection='all' form = get_form(molecular_system) - if form=='molsysmt.Topology': + if form in ['molsysmt.MolSys', 'molsysmt.Topology']: - raise ValueError('The molecular system needs to have coordinates') - - if form=='molsysmt.MolSys': + if form == 'molsysmt.MolSys': + aux_item = molecular_system.topology + else: + aux_item = molecular_system - aux_output = [np.arange(molecular_system.topology.groups.shape[0]).tolist(), - molecular_system.topology.groups.group_name.tolist(), - molecular_system.topology.groups.group_type.tolist()] + aux_output = [np.arange(aux_item.groups.shape[0]).tolist(), + aux_item.groups.group_name.tolist(), + aux_item.groups.group_type.tolist()] former_group_index = -1 @@ -50,7 +51,7 @@ def get_missing_bonds(molecular_system, threshold='2 angstroms', selection='all' aux_atom_names = [] aux_atom_types = [] - for atom in molecular_system.topology.atoms.itertuples(): + for atom in aux_item.atoms.itertuples(): if former_group_index != atom.group_index: if former_group_index != -1: atom_indices.append(aux_atom_indices) @@ -94,10 +95,7 @@ def get_missing_bonds(molecular_system, threshold='2 angstroms', selection='all' aux_bonds = _bonds_in_amino_acid(group_name, atom_names, atom_indices) - if aux_bonds is None: - - print(f'Bonds by distances with {group_name}') - print('>',atom_names) + if aux_bonds is None and with_distances: aux_bonds_unk_atoms = [] diff --git a/molsysmt/form/file_gro/to_molsysmt_Topology.py b/molsysmt/form/file_gro/to_molsysmt_Topology.py index bbd0aba3a..3d0e6fb35 100644 --- a/molsysmt/form/file_gro/to_molsysmt_Topology.py +++ b/molsysmt/form/file_gro/to_molsysmt_Topology.py @@ -5,6 +5,7 @@ def to_molsysmt_Topology(item, atom_indices='all', get_missing_bonds=False, skip_digestion=False): from molsysmt.native import Topology + from molsysmt.build import get_missing_bonds as _get_missing_bonds with open(item,'r') as fff: diff --git a/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_MolSys.py b/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_MolSys.py index 267897b25..0af361be3 100644 --- a/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_MolSys.py +++ b/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_MolSys.py @@ -1,16 +1,156 @@ from molsysmt._private.digestion import digest +from molsysmt import pyunitwizard as puw +import numpy as np @digest(form='molsysmt.PDBFileHandler') -def to_molsysmt_MolSys(item, atom_indices='all', structure_indices='all', skip_digestion=False): +def to_molsysmt_MolSys(item, atom_indices='all', structure_indices='all', get_missing_bonds=False, + skip_digestion=False): - from .to_molsysmt_Topology import to_molsysmt_Topology - from .to_molsysmt_Structures import to_molsysmt_Structures from molsysmt.native import MolSys + from molsysmt.build import get_missing_bonds as _get_missing_bonds + from molsysmt.pbc import get_box_from_lengths_and_angles tmp_item = MolSys() - tmp_item.topology = to_molsysmt_Topology(item, atom_indices=atom_indices, skip_digestion=True) - tmp_item.structures = to_molsysmt_Structures(item, atom_indices=atom_indices, structure_indices=structure_indices, - skip_digestion=True) + + atom_id_array = [] + atom_name_array = [] + group_index_array = [] + group_id_array = [] + group_name_array = [] + chain_index_array = [] + chain_name_array = [] + + occupancy_array = [] + alternate_location_array = [] + coordinates_array = [] + + group_index = -1 + former_group_id = None + + chain_index = -1 + former_chain_name = None + aux_dict_chain = {} + + for atom_record in item.entry.coordinate.model[0].record: + + atom_id_array.append(atom_record.serial) + atom_name_array.append(atom_record.name) + + occupancy_array.append(atom_record.occupancy) + alternate_location_array.append(atom_record.altLoc) + + if former_group_id!=atom_record.resSeq: + group_id_array.append(int(atom_record.resSeq)) + group_name_array.append(atom_record.resName) + group_index += 1 + former_group_id = atom_record.resSeq + + group_index_array.append(group_index) + + if former_chain_name!=atom_record.chainId: + if atom_record.chainId in aux_dict_chain: + chain_index = aux_dict_chain[atom_record.chainId] + else: + chain_index += 1 + aux_dict_chain[atom_record.chainId]=chain_index + chain_name_array.append(atom_record.chainId) + + chain_index_array.append(chain_index) + + coordinates_array.append([atom_record.x, atom_record.y, atom_record.z]) + + atom_id_array = np.array(atom_id_array, dtype=int) + atom_name_array = np.array(atom_name_array, dtype=str) + group_index_array = np.array(group_index_array, dtype=int) + chain_index_array = np.array(chain_index_array, dtype=int) + group_id_array = np.array(group_id_array, dtype=int) + group_name_array = np.array(group_name_array, dtype=str) + chain_name_array = np.array(chain_name_array, dtype=str) + + occupancy_array = np.array(occupancy_array, dtype=float) + alternate_location_array = np.array(alternate_location_array, dtype=str) + + alt_atom_indices = np.where(alternate_location_array!=' ')[0] + aux_dict = {} + + if len(alt_atom_indices): + + alt_atom_names = atom_name_array[alt_atom_indices].to_numpy() + alt_group_index = tmp_item.atoms["group_index"][alt_atom_indices].to_numpy() + alt_chain_index = tmp_item.atoms["chain_index"][alt_atom_indices].to_numpy() + for aux_atom_index, aux_atom_name, aux_group_index, aux_chain_index in zip(alt_atom_indices, + alt_atom_names, alt_group_index, + alt_chain_index): + aux_key = tuple([aux_atom_name, aux_group_index, aux_chain_index]) + if aux_key in aux_dict: + aux_dict[aux_key].append(aux_atom_index) + else: + aux_dict[aux_key]=[aux_atom_index] + + atoms_to_be_removed_with_alt_loc=[] + for same_atoms in aux_dict.values(): + alt_occupancy = occupancy[same_atoms] + alt_loc = alternate_location[same_atoms] + if np.allclose(alt_occupancy, alt_occupancy[0]): + chosen = np.where(alt_loc=='A')[0][0] + else: + chosen = np.argmax(alt_occupancy) + chosen = same_atoms.pop(chosen) + atoms_to_be_removed_with_alt_loc += same_atoms + + if len(atoms_to_be_removed_with_alt_loc): + atom_id_array = np.delete(atom_id_array, atoms_to_be_removed_with_alt_loc) + atom_name_array = np.delete(atom_name_array, atoms_to_be_removed_with_alt_loc) + group_index_array = np.delete(group_index_array, atoms_to_be_removed_with_alt_loc) + chain_index_array = np.delete(chain_index_array, atoms_to_be_removed_with_alt_loc) + coordinates_array = np.delete(coordinates_array, atoms_to_be_removed_with_alt_loc) + + n_atoms = atom_id_array.shape[0] + n_groups = group_name_array.shape[0] + n_chains = chain_name_array.shape[0] + + tmp_item.topology.reset_atoms(n_atoms=n_atoms) + tmp_item.topology.reset_groups(n_groups=n_groups) + tmp_item.topology.reset_chains(n_chains=n_chains) + + tmp_item.topology.atoms.atom_id = atom_id_array + tmp_item.topology.atoms.atom_name = atom_name_array + tmp_item.topology.atoms.group_index = group_index_array + tmp_item.topology.atoms.chain_index = chain_index_array + + tmp_item.topology.rebuild_atoms(redefine_ids=False, redefine_types=True) + + tmp_item.topology.groups.group_id = group_id_array + tmp_item.topology.groups.group_name = group_name_array + + tmp_item.topology.rebuild_groups(redefine_ids=False, redefine_types=True) + + tmp_item.topology.chains.chain_name = chain_name_array + + tmp_item.topology.rebuild_chains(redefine_ids=True, redefine_types=False) + + cryst1 = item.entry.crystallographic_and_coordinate_transformation.cryst1 + box_lengths = puw.quantity([[cryst1.a, cryst1.b, cryst1.c]], 'angstroms') + box_angles = puw.quantity([[cryst1.alpha, cryst1.beta, cryst1.gamma]], 'degrees') + print(box_lengths, box_angles) + box = get_box_from_lengths_and_angles(box_lengths, box_angles) + print(box) + + if get_missing_bonds: + + bonds = _get_missing_bonds(tmp_item) + bonds = np.array(bonds) + tmp_item.topology.reset_bonds(n_bonds=bonds.shape[0]) + tmp_item.topology.bonds.drop(['order', 'type'], axis=1, inplace=True) + tmp_item.topology.bonds.atom1_index=bonds[:,0] + tmp_item.topology.bonds.atom2_index=bonds[:,1] + + tmp_item.topology.rebuild_components() + tmp_item.topology.rebuild_molecules() + tmp_item.topology.rebuild_chains(redefine_ids=False, redefine_types=True) + tmp_item.topology.rebuild_entities() + + tmp_item = tmp_item.extract(atom_indices=atom_indices, copy_if_all=False, skip_digestion=True) return tmp_item diff --git a/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_Topology.py b/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_Topology.py index 39bb5ada5..34620d4cd 100644 --- a/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_Topology.py +++ b/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_Topology.py @@ -7,6 +7,7 @@ def to_molsysmt_Topology(item, atom_indices='all', get_missing_bonds=False, skip_digestion=False): from molsysmt.native import Topology + from molsysmt.build import get_missing_bonds as _get_missing_bonds tmp_item = Topology() @@ -15,7 +16,8 @@ def to_molsysmt_Topology(item, atom_indices='all', get_missing_bonds=False, skip group_index_array = [] group_id_array = [] group_name_array = [] - chain_id_array = [] + chain_index_array = [] + chain_name_array = [] occupancy_array = [] alternate_location_array = [] @@ -51,7 +53,7 @@ def to_molsysmt_Topology(item, atom_indices='all', get_missing_bonds=False, skip else: chain_index += 1 aux_dict_chain[atom_record.chainId]=chain_index - chain_id_array.append(atom_record.chainId) + chain_name_array.append(atom_record.chainId) chain_index_array.append(chain_index) @@ -94,7 +96,50 @@ def to_molsysmt_Topology(item, atom_indices='all', get_missing_bonds=False, skip chosen = same_atoms.pop(chosen) atoms_to_be_removed_with_alt_loc += same_atoms + atom_id_array = np.delete(atom_id_array, atoms_to_be_removed_with_alt_loc) + atom_name_array = np.delete(atom_name_array, atoms_to_be_removed_with_alt_loc) + group_index_array = np.delete(group_index_array, atoms_to_be_removed_with_alt_loc) + chain_index_array = np.delete(chain_index_array, atoms_to_be_removed_with_alt_loc) + n_atoms = atom_id_array.shape[0] + n_groups = group_name_array.shape[0] + n_chains = chain_name_array.shape[0] + + tmp_item.reset_atoms(n_atoms=n_atoms) + tmp_item.reset_groups(n_groups=n_groups) + tmp_item.reset_chains(n_chains=n_chains) + + tmp_item.atoms.atom_id = atom_id_array + tmp_item.atoms.atom_name = atom_name_array + tmp_item.atoms.group_index = group_index_array + tmp_item.atoms.chain_index = chain_index_array + + tmp_item.rebuild_atoms(redefine_ids=False, redefine_types=True) + + tmp_item.groups.group_id = group_id_array + tmp_item.groups.group_name = group_name_array + + tmp_item.rebuild_groups(redefine_ids=False, redefine_types=True) + + tmp_item.chains.chain_name = chain_name_array + + tmp_item.rebuild_chains(redefine_ids=True, redefine_types=False ) + + if get_missing_bonds: + + bonds = _get_missing_bonds(tmp_item, with_distances=False) + bonds = np.array(bonds) + tmp_item.reset_bonds(n_bonds=bonds.shape[0]) + tmp_item.bonds.drop(['order', 'type'], axis=1, inplace=True) + tmp_item.bonds.atom1_index=bonds[:,0] + tmp_item.bonds.atom2_index=bonds[:,1] + + tmp_item.rebuild_components() + tmp_item.rebuild_molecules() + tmp_item.rebuild_chains(redefine_ids=False, redefine_types=True) + tmp_item.rebuild_entities() + + tmp_item = tmp_item.extract(atom_indices=atom_indices, copy_if_all=False, skip_digestion=True) return tmp_item diff --git a/molsysmt/native/pdb_file_handler.py b/molsysmt/native/pdb_file_handler.py index 53da710fb..c7129e1ac 100644 --- a/molsysmt/native/pdb_file_handler.py +++ b/molsysmt/native/pdb_file_handler.py @@ -900,7 +900,7 @@ def parse_format33(file): cryst1.alpha = float(line[33:40]) cryst1.beta = float(line[40:47]) cryst1.gamma = float(line[47:54]) - cryst1.gamma = line[55:66].strip() + cryst1.sGroup = line[55:66].strip() counter += 1 line = lines[counter] @@ -1183,6 +1183,7 @@ def __init__(self, filename, io_mode='r', closed=False, skip_digestion=False): self.file = open(filename, "r") self.format_version = guess_format_version(self.file) + self.load() else: @@ -1205,15 +1206,3 @@ def dump(self): pass - def get_atoms_with_alternate_locations(self): - - output = {} - - for model in self.entry.coordinate.model: - output[model.serial]=[] - for record in model.record: - if record.altLoc != ' ': - output[model.serial].append(deepcopy(record)) - - return output - diff --git a/sandbox/Test_2nzt.ipynb b/sandbox/Test_2nzt.ipynb index e83e5c5ef..65321ea18 100644 --- a/sandbox/Test_2nzt.ipynb +++ b/sandbox/Test_2nzt.ipynb @@ -28,7 +28,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4e5ba950c2434dd49dcb698557ea70e6", + "model_id": "e011d37639214a0f847077c42671ecdd", "version_major": 2, "version_minor": 0 }, @@ -64,53 +64,66 @@ }, { "cell_type": "code", - "execution_count": 22, - "id": "02f89e93-a772-4faf-a824-886c0359ddd0", - "metadata": {}, - "outputs": [], - "source": [ - "model = handler.entry.coordinate.model[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "cd2a6f84-2de1-4242-9d1b-8e6f7bae4061", - "metadata": {}, - "outputs": [], - "source": [ - "aa = model.record[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "c0c9ecab-8ac7-469b-8573-cfa8a4f3ae42", + "execution_count": 5, + "id": "74caa585-af95-44c6-a674-7f53d577b7e3", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "' '" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1.0 1.0 1.0]] angstrom [[90.0 90.0 90.0]] degree\n", + "[[[0.1 0.0 0.0] [0.0 0.1 0.0] [0.0 0.0 0.1]]] nanometer\n" + ] + }, + { + "ename": "NotImplementedFormError", + "evalue": "None", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/conda/miniconda3/envs/MolSysMT@uibcdf_3.10/lib/python3.10/site-packages/pyunitwizard/main.py:27\u001b[0m, in \u001b[0;36mget_form\u001b[0;34m(quantity_or_unit)\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 27\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdict_is_form\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mquantity_or_unit\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", + "\u001b[0;31mKeyError\u001b[0m: ", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/conda/miniconda3/envs/MolSysMT@uibcdf_3.10/lib/python3.10/site-packages/pyunitwizard/main.py:30\u001b[0m, in \u001b[0;36mget_form\u001b[0;34m(quantity_or_unit)\u001b[0m\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 30\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdict_is_form\u001b[49m\u001b[43m[\u001b[49m\u001b[43mquantity_or_unit\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", + "\u001b[0;31mKeyError\u001b[0m: None", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mNotImplementedFormError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m:1\u001b[0m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/basic/convert.py:530\u001b[0m, in \u001b[0;36mconvert\u001b[0;34m(molecular_system, to_form, selection, structure_indices, syntax, verbose, skip_digestion, **kwargs)\u001b[0m\n\u001b[1;32m 527\u001b[0m \u001b[38;5;66;03m# If one to one\u001b[39;00m\n\u001b[1;32m 528\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(from_form, (\u001b[38;5;28mlist\u001b[39m, \u001b[38;5;28mtuple\u001b[39m)):\n\u001b[0;32m--> 530\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43m_convert_one_to_one\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrom_form\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_form\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mto_form\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 531\u001b[0m \u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mverbose\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 533\u001b[0m \u001b[38;5;66;03m# If multiple to one\u001b[39;00m\n\u001b[1;32m 534\u001b[0m \n\u001b[1;32m 535\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 536\u001b[0m \n\u001b[1;32m 537\u001b[0m \u001b[38;5;66;03m# conversions in private shortcuts\u001b[39;00m\n\u001b[1;32m 538\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28msorted\u001b[39m(from_form)) \u001b[38;5;129;01min\u001b[39;00m _multiple_conversion_shortcuts:\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/basic/convert.py:84\u001b[0m, in \u001b[0;36m_convert_one_to_one\u001b[0;34m(molecular_system, from_form, to_form, selection, structure_indices, syntax, verbose, **kwargs)\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(missing_arguments)\u001b[38;5;241m>\u001b[39m\u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 82\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NotCompatibleConversionError(from_form, to_form, missing_arguments)\n\u001b[0;32m---> 84\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mfunction\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mconversion_arguments\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m _dict_modules[from_form]\u001b[38;5;241m.\u001b[39m_convert_to) \u001b[38;5;129;01mand\u001b[39;00m (to_form \u001b[38;5;129;01min\u001b[39;00m _dict_modules[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39m_convert_to):\n\u001b[1;32m 88\u001b[0m output \u001b[38;5;241m=\u001b[39m _convert_one_to_one(molecular_system, from_form, to_form\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmolsysmt.MolSys\u001b[39m\u001b[38;5;124m'\u001b[39m, selection\u001b[38;5;241m=\u001b[39mselection,\n\u001b[1;32m 89\u001b[0m structure_indices\u001b[38;5;241m=\u001b[39mstructure_indices, syntax\u001b[38;5;241m=\u001b[39msyntax, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:52\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mskip_digestion\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# Define caller\u001b[39;00m\n\u001b[1;32m 56\u001b[0m caller \u001b[38;5;241m=\u001b[39m func\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__module__\u001b[39m\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m+\u001b[39mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/form/molsysmt_PDBFileHandler/to_molsysmt_MolSys.py:141\u001b[0m, in \u001b[0;36mto_molsysmt_MolSys\u001b[0;34m(item, atom_indices, structure_indices, get_missing_bonds, skip_digestion)\u001b[0m\n\u001b[1;32m 137\u001b[0m \u001b[38;5;28mprint\u001b[39m(box)\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m get_missing_bonds:\n\u001b[0;32m--> 141\u001b[0m bonds \u001b[38;5;241m=\u001b[39m \u001b[43m_get_missing_bonds\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtmp_item\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 142\u001b[0m bonds \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(bonds)\n\u001b[1;32m 143\u001b[0m tmp_item\u001b[38;5;241m.\u001b[39mtopology\u001b[38;5;241m.\u001b[39mreset_bonds(n_bonds\u001b[38;5;241m=\u001b[39mbonds\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m])\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/build/get_missing_bonds.py:155\u001b[0m, in \u001b[0;36mget_missing_bonds\u001b[0;34m(molecular_system, threshold, selection, structure_indices, syntax, engine, with_templates, with_distances, skip_digestion)\u001b[0m\n\u001b[1;32m 153\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m with_distances:\n\u001b[1;32m 154\u001b[0m aux_bonds \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m--> 155\u001b[0m neighbors, _ \u001b[38;5;241m=\u001b[39m \u001b[43mget_neighbors\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maux_peptidic_bonds\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mC\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 156\u001b[0m \u001b[43m \u001b[49m\u001b[43mselection_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maux_peptidic_bonds\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mN\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 157\u001b[0m \u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 158\u001b[0m \u001b[43m \u001b[49m\u001b[43mthreshold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mthreshold\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m iii, nn \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(aux_peptidic_bonds[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m], neighbors[\u001b[38;5;241m0\u001b[39m]):\n\u001b[1;32m 160\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m jj \u001b[38;5;129;01min\u001b[39;00m nn:\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/structure/get_neighbors.py:33\u001b[0m, in \u001b[0;36mget_neighbors\u001b[0;34m(molecular_system, selection, structure_indices, center_of_atoms, weights, molecular_system_2, selection_2, structure_indices_2, center_of_atoms_2, weights_2, threshold, n_neighbors, pbc, engine, syntax, skip_digestion)\u001b[0m\n\u001b[1;32m 29\u001b[0m same_structures \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 31\u001b[0m same_set\u001b[38;5;241m=\u001b[39m same_selections \u001b[38;5;129;01mand\u001b[39;00m same_structures\n\u001b[0;32m---> 33\u001b[0m all_dists \u001b[38;5;241m=\u001b[39m \u001b[43mget_distances\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 34\u001b[0m \u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 35\u001b[0m \u001b[43m \u001b[49m\u001b[43mselection_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mselection_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstructure_indices_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 36\u001b[0m \u001b[43m \u001b[49m\u001b[43mweights_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpbc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpbc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 38\u001b[0m nstructures, nelements_1, nelements_2 \u001b[38;5;241m=\u001b[39m all_dists\u001b[38;5;241m.\u001b[39mshape\n\u001b[1;32m 39\u001b[0m length_units \u001b[38;5;241m=\u001b[39m puw\u001b[38;5;241m.\u001b[39mget_unit(all_dists)\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/_private/digestion/digest.py:122\u001b[0m, in \u001b[0;36mdigest..digestor..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(all_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mself\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfinal_args)\n\u001b[1;32m 121\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 122\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfinal_args\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/structure/get_distances.py:84\u001b[0m, in \u001b[0;36mget_distances\u001b[0;34m(molecular_system, selection, structure_indices, center_of_atoms, weights, molecular_system_2, selection_2, structure_indices_2, center_of_atoms_2, weights_2, pairs, pbc, engine, syntax)\u001b[0m\n\u001b[1;32m 80\u001b[0m in_memory \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 82\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m in_memory:\n\u001b[0;32m---> 84\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43m_get_distances_in_memory\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmolecular_system\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 85\u001b[0m \u001b[43m \u001b[49m\u001b[43mselection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matom_indices\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstructure_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweights\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 86\u001b[0m \u001b[43m \u001b[49m\u001b[43mmolecular_system_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmolecular_system_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mselection_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43matom_indices_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstructure_indices_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstructure_indices_2\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 87\u001b[0m \u001b[43m \u001b[49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcenter_of_atoms_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mweights_2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpairs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpairs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpbc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpbc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msyntax\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msyntax\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 89\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NotImplementedMethodError\n", + "File \u001b[0;32m~/repos@uibcdf/MolSysMT/molsysmt/structure/get_distances.py:171\u001b[0m, in \u001b[0;36m_get_distances_in_memory\u001b[0;34m(molecular_system, selection, structure_indices, center_of_atoms, weights, molecular_system_2, selection_2, structure_indices_2, center_of_atoms_2, weights_2, pairs, pbc, aux_dict, syntax)\u001b[0m\n\u001b[1;32m 167\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m pairs:\n\u001b[1;32m 169\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m coordinates_2 \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 171\u001b[0m coordinates, length_unit \u001b[38;5;241m=\u001b[39m \u001b[43mpuw\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_value_and_unit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcoordinates\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m pbc:\n\u001b[1;32m 174\u001b[0m box \u001b[38;5;241m=\u001b[39m get(molecular_system, element\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msystem\u001b[39m\u001b[38;5;124m'\u001b[39m, structure_indices\u001b[38;5;241m=\u001b[39mstructure_indices, box\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "File \u001b[0;32m/conda/miniconda3/envs/MolSysMT@uibcdf_3.10/lib/python3.10/site-packages/pyunitwizard/main.py:180\u001b[0m, in \u001b[0;36mget_value_and_unit\u001b[0;34m(quantity, to_unit, to_form, parser, standardized)\u001b[0m\n\u001b[1;32m 177\u001b[0m quantity \u001b[38;5;241m=\u001b[39m standardize(quantity)\n\u001b[1;32m 178\u001b[0m to_unit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 180\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mquantity\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_unit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mto_unit\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparser\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparser\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mto_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvalue\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 181\u001b[0m unit \u001b[38;5;241m=\u001b[39m convert(quantity, to_unit\u001b[38;5;241m=\u001b[39mto_unit, to_form\u001b[38;5;241m=\u001b[39mto_form, parser\u001b[38;5;241m=\u001b[39mparser, to_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124munit\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 183\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m value, unit\n", + "File \u001b[0;32m/conda/miniconda3/envs/MolSysMT@uibcdf_3.10/lib/python3.10/site-packages/pyunitwizard/main.py:547\u001b[0m, in \u001b[0;36mconvert\u001b[0;34m(quantity_or_unit, to_unit, to_form, parser, to_type)\u001b[0m\n\u001b[1;32m 522\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\" Converts a quantity or unit to a different unit and/or to a different\u001b[39;00m\n\u001b[1;32m 523\u001b[0m \u001b[38;5;124;03m form and/or type. \u001b[39;00m\n\u001b[1;32m 524\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 543\u001b[0m \u001b[38;5;124;03m be a float or a numpy array.\u001b[39;00m\n\u001b[1;32m 544\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 545\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 547\u001b[0m form_in \u001b[38;5;241m=\u001b[39m \u001b[43mget_form\u001b[49m\u001b[43m(\u001b[49m\u001b[43mquantity_or_unit\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 548\u001b[0m to_form \u001b[38;5;241m=\u001b[39m digest_to_form(to_form, form_in)\n\u001b[1;32m 549\u001b[0m parser \u001b[38;5;241m=\u001b[39m digest_parser(parser)\n", + "File \u001b[0;32m/conda/miniconda3/envs/MolSysMT@uibcdf_3.10/lib/python3.10/site-packages/pyunitwizard/main.py:32\u001b[0m, in \u001b[0;36mget_form\u001b[0;34m(quantity_or_unit)\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m dict_is_form[quantity_or_unit]\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[0;32m---> 32\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NotImplementedFormError(\u001b[38;5;28mtype\u001b[39m(quantity_or_unit))\n", + "\u001b[0;31mNotImplementedFormError\u001b[0m: None" + ] } ], "source": [ - "aa.altLoc" + "%%time\n", + "molsys = msm.convert(handler, 'molsysmt.MolSys', get_missing_bonds=True)" ] }, { "cell_type": "code", "execution_count": null, - "id": "74caa585-af95-44c6-a674-7f53d577b7e3", + "id": "ab1d9060-fd73-48e5-9417-d504f4417216", "metadata": {}, "outputs": [], "source": [ - "top = msm.convert(handler, 'molsysmt.Topology')" + "top.groups" ] }, {