diff --git a/molsysmt/form/mdtraj_Topology/get_topological_attributes.py b/molsysmt/form/mdtraj_Topology/get_topological_attributes.py index 641e86a14..59745e296 100644 --- a/molsysmt/form/mdtraj_Topology/get_topological_attributes.py +++ b/molsysmt/form/mdtraj_Topology/get_topological_attributes.py @@ -2245,6 +2245,54 @@ def get_chain_type_from_molecule(item, indices='all', skip_digestion=False): return output.tolist() +@digest(form=form) +def get_bond_index_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_type_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_order_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atoms_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atom_pairs_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bond_index_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atoms_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atom_pairs_from_molecule(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + @digest(form=form) def get_n_atoms_from_molecule(item, indices='all', skip_digestion=False): @@ -2325,7 +2373,7 @@ def get_n_amino_acids_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'amino acid').sum() return output @@ -2337,7 +2385,7 @@ def get_n_nucleotides_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'nucleotide').sum() return output @@ -2349,7 +2397,7 @@ def get_n_ions_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'ion').sum() return output @@ -2361,7 +2409,7 @@ def get_n_waters_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'water').sum() return output @@ -2373,7 +2421,7 @@ def get_n_small_molecules_from_molecule(item, indices='all', skip_digestion=Fals group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'small molecule').sum() return output @@ -2385,7 +2433,7 @@ def get_n_lipids_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'lipid').sum() return output @@ -2397,7 +2445,7 @@ def get_n_oligosaccharides_from_molecule(item, indices='all', skip_digestion=Fal group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'oligosaccharide').sum() return output @@ -2409,7 +2457,7 @@ def get_n_saccharides_from_molecule(item, indices='all', skip_digestion=False): group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) group_indices=np.concatenate([np.array(ii) for ii in group_indices]) group_indices = np.unique(group_indices) - group_types = get_group_type_from_group(item, indices=group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) output = (np.array(group_types) == 'saccharide').sum() return output @@ -2418,8 +2466,8 @@ def get_n_saccharides_from_molecule(item, indices='all', skip_digestion=False): @digest(form=form) def get_n_peptides_from_molecule(item, indices='all', skip_digestion=False): - group_types = get_molecule_type_from_molecule(item, indices=indices) - output = (np.array(group_types) == 'saccharide').sum() + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'peptide').sum() return output @@ -2427,28 +2475,37 @@ def get_n_peptides_from_molecule(item, indices='all', skip_digestion=False): @digest(form=form) def get_n_proteins_from_molecule(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'protein').sum() + + return output @digest(form=form) def get_n_dnas_from_molecule(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'dna').sum() + + return output @digest(form=form) def get_n_rnas_from_molecule(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'dna').sum() + return output -## From chain + +## From entity @digest(form=form) -def get_atom_index_from_chain(item, indices='all', skip_digestion=False): +def get_atom_index_from_entity(item, indices='all', skip_digestion=False): - target_index = get_chain_index_from_atom(item) + target_index = get_entity_index_from_atom(item, skip_digestion=True) serie = pd.Series(target_index) groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) @@ -2461,436 +2518,995 @@ def get_atom_index_from_chain(item, indices='all', skip_digestion=False): @digest(form=form) -def get_atom_id_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_atom_id_from_entity(item, indices='all', skip_digestion=False): + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_id_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_atom_name_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output @digest(form=form) -def get_atom_type_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_atom_name_from_entity(item, indices='all', skip_digestion=False): + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_name_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_group_index_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output @digest(form=form) -def get_group_id_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_atom_type_from_entity(item, indices='all', skip_digestion=False): + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_type_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_group_name_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output @digest(form=form) -def get_group_type_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_group_index_from_entity(item, indices='all', skip_digestion=False): + target_index = get_entity_index_from_group(item, skip_digestion=True) -@digest(form=form) -def get_component_index_from_chain(item, indices='all', skip_digestion=False): + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] - raise NotImplementedMethodError() + return output @digest(form=form) -def get_component_id_from_chain(item, indices='all', skip_digestion=False): +def get_group_id_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_id_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_component_name_from_chain(item, indices='all', skip_digestion=False): +def get_group_name_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_name_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_component_type_from_chain(item, indices='all', skip_digestion=False): +def get_group_type_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_type_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_chain_index_from_chain(item, indices='all', skip_digestion=False): +def get_component_index_from_entity(item, indices='all', skip_digestion=False): + + target_index = get_entity_index_from_component(item, skip_digestion=True) + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) if is_all(indices): - n_aux = get_n_chains_from_system(item, skip_digestion=True) - output = list(range(n_aux)) + output = [ii for ii in groups_serie] else: - output = indices + output = [groups_serie[ii] for ii in indices] return output @digest(form=form) -def get_chain_id_from_chain(item, indices='all', skip_digestion=False): +def get_component_id_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_chain_name_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output -@digest(form=form) -def get_chain_type_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() +@digest(form=form) +def get_component_name_from_entity(item, indices='all', skip_digestion=False): + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_molecule_index_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output @digest(form=form) -def get_molecule_id_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_component_type_from_entity(item, indices='all', skip_digestion=False): + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj -@digest(form=form) -def get_molecule_name_from_chain(item, indices='all', skip_digestion=False): + del aux_unique_indices, aux_vals, aux_output, target_indices - raise NotImplementedMethodError() + return output @digest(form=form) -def get_molecule_type_from_chain(item, indices='all', skip_digestion=False): +def get_molecule_index_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_index = get_entity_index_from_molecule(item, skip_digestion=True) + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] -@digest(form=form) -def get_entity_index_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() + return output @digest(form=form) -def get_entity_id_from_chain(item, indices='all', skip_digestion=False): +def get_molecule_id_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_id_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_entity_name_from_chain(item, indices='all', skip_digestion=False): +def get_molecule_name_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_name_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_entity_type_from_chain(item, indices='all', skip_digestion=False): +def get_molecule_type_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_type_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_n_atoms_from_chain(item, indices='all', skip_digestion=False): +def get_entity_index_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + if is_all(indices): + n_aux = get_n_entities_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output @digest(form=form) -def get_n_groups_from_chain(item, indices='all', skip_digestion=False): +def get_entity_id_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + from molsysmt.element.entity import get_entity_id_from_entity + + output = get_entity_id_from_entity(item, indices=indices, skip_digestion=True) + return output @digest(form=form) -def get_n_components_from_chain(item, indices='all', skip_digestion=False): +def get_entity_name_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + from molsysmt.element.entity import get_entity_name_from_entity + + output = get_entity_name_from_entity(item, indices=indices, skip_digestion=True) + return output @digest(form=form) -def get_n_molecules_from_chain(item, indices='all', skip_digestion=False): +def get_entity_type_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + from molsysmt.element.entity import get_entity_type_from_entity + + output = get_entity_type_from_entity(item, indices=indices, skip_digestion=True) + return output @digest(form=form) -def get_n_chains_from_chain(item, indices='all', skip_digestion=False): +def get_chain_index_from_entity(item, indices='all', skip_digestion=False): - if is_all(indices): - output = get_n_chains_from_system(item) - else: - output = len(indices) + atom_index_from_target = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_chain_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target return output @digest(form=form) -def get_n_entities_from_chain(item, indices='all', skip_digestion=False): +def get_chain_id_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_id_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) -def get_n_bonds_from_chain(item, indices='all', skip_digestion=False): +def get_chain_name_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_name_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) -def get_n_inner_bonds_from_chain(item, indices='all', skip_digestion=False): +def get_chain_type_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_type_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) -def get_n_aminoacids_from_chain(item, indices='all', skip_digestion=False): +def get_bond_index_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_nucleotides_from_chain(item, indices='all', skip_digestion=False): +def get_bond_type_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_ions_from_chain(item, indices='all', skip_digestion=False): +def get_bond_order_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_waters_from_chain(item, indices='all', skip_digestion=False): +def get_bonded_atoms_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_small_molecules_from_chain(item, indices='all', skip_digestion=False): +def get_bonded_atom_pairs_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_peptides_from_chain(item, indices='all', skip_digestion=False): +def get_inner_bond_index_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_proteins_from_chain(item, indices='all', skip_digestion=False): +def get_inner_bonded_atoms_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_dnas_from_chain(item, indices='all', skip_digestion=False): +def get_inner_bonded_atom_pairs_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_rnas_from_chain(item, indices='all', skip_digestion=False): +def get_n_atoms_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + output = get_atom_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_lipids_from_chain(item, indices='all', skip_digestion=False): +def get_n_groups_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + output = get_group_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_oligosaccharides_from_chain(item, indices='all', skip_digestion=False): +def get_n_components_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + output = get_component_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_saccharides_from_chain(item, indices='all', skip_digestion=False): - - raise NotImplementedMethodError() +def get_n_molecules_from_entity(item, indices='all', skip_digestion=False): + output = get_molecule_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] -## From entity + return output @digest(form=form) -def get_atom_index_from_entity(item, indices='all', skip_digestion=False): - - target_index = get_entity_index_from_atom(item) +def get_n_entities_from_entity(item, indices='all', skip_digestion=False): - serie = pd.Series(target_index) - groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) if is_all(indices): - output = [ii for ii in groups_serie] + output = get_n_entities_from_system(item) else: - output = [groups_serie[ii] for ii in indices] + output = len(indices) return output @digest(form=form) -def get_atom_id_from_entity(item, indices='all', skip_digestion=False): +def get_n_chains_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + if is_all(indices): + output = get_n_chains_from_system(item, skip_digestion=True) + else: + output = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output @digest(form=form) -def get_atom_name_from_entity(item, indices='all', skip_digestion=False): +def get_n_bonds_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_atom_type_from_entity(item, indices='all', skip_digestion=False): +def get_n_inner_bonds_from_entity(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_group_index_from_entity(item, indices='all', skip_digestion=False): +def get_n_amino_acids_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output @digest(form=form) -def get_group_id_from_entity(item, indices='all', skip_digestion=False): +def get_n_nucleotides_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) -def get_group_name_from_entity(item, indices='all', skip_digestion=False): +def get_n_ions_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) -def get_group_type_from_entity(item, indices='all', skip_digestion=False): +def get_n_waters_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) -def get_component_index_from_entity(item, indices='all', skip_digestion=False): +def get_n_small_molecules_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_component_id_from_entity(item, indices='all', skip_digestion=False): +def get_n_lipids_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output @digest(form=form) -def get_component_name_from_entity(item, indices='all', skip_digestion=False): +def get_n_oligosaccharides_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() + + return output @digest(form=form) -def get_component_type_from_entity(item, indices='all', skip_digestion=False): +def get_n_saccharides_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output @digest(form=form) -def get_chain_index_from_entity(item, indices='all', skip_digestion=False): - - atom_index_from_target = get_atom_index_from_entity(item, indices=indices) - first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) - output = get_chain_index_from_atom(item, indices=first_atom_index_from_target) +def get_n_peptides_from_entity(item, indices='all', skip_digestion=False): - del atom_index_from_target, first_atom_index_from_target + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() return output @digest(form=form) -def get_chain_id_from_entity(item, indices='all', skip_digestion=False): +def get_n_proteins_from_entity(item, indices='all', skip_digestion=False): - aux_indices = get_chain_index_from_entity(item, indices=indices) - aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) - aux_vals = get_chain_id_from_chain(item, indices=aux_unique_indices) - output = np.array(aux_vals)[aux_new_indices] + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() - del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + return output - return output.tolist() + +@digest(form=form) +def get_n_dnas_from_entity(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() + + return output @digest(form=form) -def get_chain_name_from_entity(item, indices='all', skip_digestion=False): +def get_n_rnas_from_entity(item, indices='all', skip_digestion=False): - aux_indices = get_chain_index_from_entity(item, indices=indices) - aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) - aux_vals = get_chain_name_from_chain(item, indices=aux_unique_indices) - output = np.array(aux_vals)[aux_new_indices] + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() - del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + return output - return output.tolist() + +## From chain @digest(form=form) -def get_chain_type_from_entity(item, indices='all', skip_digestion=False): +def get_atom_index_from_chain(item, indices='all', skip_digestion=False): - aux_indices = get_chain_index_from_entity(item, indices=indices) - aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) - aux_vals = get_chain_type_from_chain(item, indices=aux_unique_indices) - output = np.array(aux_vals)[aux_new_indices] + target_index = get_chain_index_from_atom(item) - del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] - return output.tolist() + return output @digest(form=form) -def get_molecule_index_from_entity(item, indices='all', skip_digestion=False): +def get_atom_id_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_atom_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_id_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_molecule_id_from_entity(item, indices='all', skip_digestion=False): +def get_atom_name_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_atom_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_name_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_molecule_name_from_entity(item, indices='all', skip_digestion=False): +def get_atom_type_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_indices = get_atom_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_type_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) -def get_molecule_type_from_entity(item, indices='all', skip_digestion=False): +def get_group_index_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + target_index = get_chain_index_from_group(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) -def get_entity_index_from_entity(item, indices='all', skip_digestion=False): +def get_group_id_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_id_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_group_name_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_name_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_group_type_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_type_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + +@digest(form=form) +def get_component_index_from_chain(item, indices='all', skip_digestion=False): + + target_index = get_chain_index_from_component(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) if is_all(indices): - n_aux = get_n_entities_from_system(item, skip_digestion=True) + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output + + +@digest(form=form) +def get_component_id_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_component_name_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_component_type_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_molecule_index_from_chain(item, indices='all', skip_digestion=False): + + target_index = get_chain_index_from_molecule(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output + + +@digest(form=form) +def get_molecule_id_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_id_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_molecule_name_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_name_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_molecule_type_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_type_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_index_from_chain(item, indices='all', skip_digestion=False): + + target_index = get_chain_index_from_entity(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output + + +@digest(form=form) +def get_entity_id_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_id_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_name_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_name_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_type_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_type_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_chain_index_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_aux = get_n_chains_from_system(item, skip_digestion=True) output = list(range(n_aux)) else: output = indices @@ -2899,170 +3515,350 @@ def get_entity_index_from_entity(item, indices='all', skip_digestion=False): @digest(form=form) -def get_entity_id_from_entity(item, indices='all', skip_digestion=False): +def get_chain_id_from_chain(item, indices='all', skip_digestion=False): - from molsysmt.element.entity import get_entity_id_from_entity + raise NotImplementedMethodError() - output = get_entity_id_from_entity(item, indices=indices, skip_digestion=True) + +@digest(form=form) +def get_chain_name_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_chain_type_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_index_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_type_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_order_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atoms_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atom_pairs_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bond_index_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atoms_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atom_pairs_from_chain(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_n_atoms_from_chain(item, indices='all', skip_digestion=False): + + output = get_atom_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] return output + @digest(form=form) -def get_entity_name_from_entity(item, indices='all', skip_digestion=False): +def get_n_groups_from_chain(item, indices='all', skip_digestion=False): - from molsysmt.element.entity import get_entity_name_from_entity + output = get_group_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] - output = get_entity_name_from_entity(item, indices=indices, skip_digestion=True) + return output + + +@digest(form=form) +def get_n_components_from_chain(item, indices='all', skip_digestion=False): + + output = get_component_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] return output + @digest(form=form) -def get_entity_type_from_entity(item, indices='all', skip_digestion=False): +def get_n_molecules_from_chain(item, indices='all', skip_digestion=False): - from molsysmt.element.entity import get_entity_type_from_entity + output = get_molecule_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output - output = get_entity_type_from_entity(item, indices=indices, skip_digestion=True) + +@digest(form=form) +def get_n_entities_from_chain(item, indices='all', skip_digestion=False): + + output = get_entity_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] return output @digest(form=form) -def get_n_atoms_from_entity(item, indices='all', skip_digestion=False): +def get_n_chains_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + if is_all(indices): + output = get_n_chains_from_system(item) + else: + output = len(indices) + + return output @digest(form=form) -def get_n_groups_from_entity(item, indices='all', skip_digestion=False): +def get_n_bonds_from_chain(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_components_from_entity(item, indices='all', skip_digestion=False): +def get_n_inner_bonds_from_chain(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_molecules_from_entity(item, indices='all', skip_digestion=False): +def get_n_amino_acids_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output + + +@digest(form=form) +def get_n_nucleotides_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output + + +@digest(form=form) +def get_n_ions_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() - raise NotImplementedMethodError() + return output @digest(form=form) -def get_n_chains_from_entity(item, indices='all', skip_digestion=False): +def get_n_waters_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) -def get_n_entities_from_entity(item, indices='all', skip_digestion=False): +def get_n_small_molecules_from_chain(item, indices='all', skip_digestion=False): - if is_all(indices): - output = get_n_entities_from_system(item) - else: - output = len(indices) + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() return output @digest(form=form) -def get_n_bonds_from_entity(item, indices='all', skip_digestion=False): +def get_n_lipids_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output @digest(form=form) -def get_n_inner_bonds_from_entity(item, indices='all', skip_digestion=False): +def get_n_oligosaccharides_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() + + return output @digest(form=form) -def get_n_aminoacids_from_entity(item, indices='all', skip_digestion=False): +def get_n_saccharides_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output @digest(form=form) -def get_n_nucleotides_from_entity(item, indices='all', skip_digestion=False): +def get_n_peptides_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output @digest(form=form) -def get_n_ions_from_entity(item, indices='all', skip_digestion=False): +def get_n_proteins_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() + + return output @digest(form=form) -def get_n_waters_from_entity(item, indices='all', skip_digestion=False): +def get_n_dnas_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() + + return output @digest(form=form) -def get_n_small_molecules_from_entity(item, indices='all', skip_digestion=False): +def get_n_rnas_from_chain(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() + return output -@digest(form=form) -def get_n_peptides_from_entity(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() +## From bond @digest(form=form) -def get_n_proteins_from_entity(item, indices='all', skip_digestion=False): +def get_bond_index_from_bond(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + if is_all(indices): + n_aux = get_n_bonds_from_system(item) + output = np.arange(n_aux, dtype=int).tolist() + else: + output = indices.tolist() + + return output @digest(form=form) -def get_n_dnas_from_entity(item, indices='all', skip_digestion=False): +def get_bond_order_from_bond(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_rnas_from_entity(item, indices='all', skip_digestion=False): +def get_bond_type_from_bond(item, indices='all', skip_digestion=False): raise NotImplementedMethodError() @digest(form=form) -def get_n_lipids_from_entity(item, indices='all', skip_digestion=False): +def get_bonded_atoms_from_bond(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + tmp_indices = get_bond_index_from_bond(item, indices=indices) + bond = list(item.bonds) + output=[[bond[ii].atom1.index, bond[ii].atom2.index] for ii in tmp_indices] + output=np.array(output) + del(bond) + return output @digest(form=form) -def get_n_oligosaccharides_from_entity(item, indices='all', skip_digestion=False): +def get_bonded_atom_pairs_from_bond(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + return get_bonded_atoms_from_bond(item, indices=indices, skip_digestion=True) @digest(form=form) -def get_n_saccharides_from_entity(item, indices='all', skip_digestion=False): +def get_n_bonds_from_bond(item, indices='all', skip_digestion=False): - raise NotImplementedMethodError() + if is_all(indices): + n_aux = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output ## From system + @digest(form=form) def get_n_atoms_from_system(item, skip_digestion=False): return item.n_atoms + @digest(form=form) def get_n_groups_from_system(item, skip_digestion=False): return item.n_residues + @digest(form=form) def get_n_components_from_system(item, skip_digestion=False): @@ -3072,10 +3868,6 @@ def get_n_components_from_system(item, skip_digestion=False): return output -@digest(form=form) -def get_n_chains_from_system(item, skip_digestion=False): - - return item.n_chains @digest(form=form) def get_n_molecules_from_system(item, skip_digestion=False): @@ -3086,6 +3878,7 @@ def get_n_molecules_from_system(item, skip_digestion=False): return output + @digest(form=form) def get_n_entities_from_system(item, skip_digestion=False): @@ -3095,6 +3888,13 @@ def get_n_entities_from_system(item, skip_digestion=False): return output + +@digest(form=form) +def get_n_chains_from_system(item, skip_digestion=False): + + return item.n_chains + + @digest(form=form) def get_n_bonds_from_system(item, skip_digestion=False): @@ -3102,127 +3902,188 @@ def get_n_bonds_from_system(item, skip_digestion=False): @digest(form=form) -def get_n_aminoacids_from_system(item, skip_digestion=False): +def get_n_amino_acids_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output @digest(form=form) def get_n_nucleotides_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) def get_n_ions_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) def get_n_waters_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) def get_n_small_molecules_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_n_peptides_from_system(item, skip_digestion=False): +def get_n_lipids_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output @digest(form=form) -def get_n_proteins_from_system(item, skip_digestion=False): +def get_n_oligosaccharides_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() + + return output @digest(form=form) -def get_n_dnas_from_system(item, skip_digestion=False): +def get_n_saccharides_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output @digest(form=form) -def get_n_rnas_from_system(item, skip_digestion=False): +def get_n_peptides_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output @digest(form=form) -def get_n_lipids_from_system(item, skip_digestion=False): +def get_n_proteins_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() + + return output @digest(form=form) -def get_n_oligosaccharides_from_system(item, skip_digestion=False): +def get_n_dnas_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() + + return output @digest(form=form) -def get_n_saccharides_from_system(item, skip_digestion=False): +def get_n_rnas_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() + + return output @digest(form=form) -def get_bonded_atoms_from_system(item, skip_digestion=False): +def get_bond_index_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + n_bonds = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_bonds)) + + return output @digest(form=form) -def get_bond_index_from_system(item, skip_digestion=False): +def get_bonded_atoms_from_system(item, skip_digestion=False): - raise NotImplementedMethodError() + output = None + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) -## From bond + indices = get_atom_index_from_atom(item, skip_digestion=True) + output = [] -@digest(form=form) -def get_bond_index_from_bond(item, indices='all', skip_digestion=False): + for ii in indices: + if ii in G: + output.append(list(G.neighbors(ii))) + else: + output.append([]) - raise NotImplementedMethodError() + del G, edges -@digest(form=form) -def get_bond_order_from_bond(item, indices='all', skip_digestion=False): + return output - raise NotImplementedMethodError() @digest(form=form) -def get_bond_type_from_bond(item, indices='all', skip_digestion=False): +def get_bonded_atom_pairs_from_system(item, skip_digestion=False): + + output = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + return output - raise NotImplementedMethodError() @digest(form=form) -def get_bonded_atoms_from_bond(item, indices='all', skip_digestion=False): +def get_inner_bond_index_from_system(item, skip_digestion=False): + + n_bonds = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_bonds)) - tmp_indices = get_bond_index_from_bond(item, indices=indices) - bond = list(item.bonds) - output=[[bond[ii].atom1.index, bond[ii].atom2.index] for ii in tmp_indices] - output=np.array(output) - del(bond) return output @digest(form=form) -def get_n_bonds_from_bond(item, indices='all', skip_digestion=False): +def get_inner_bonded_atoms_from_system(item, skip_digestion=False): - if is_all(indices): - n_aux = get_n_bonds_from_system(item, skip_digestion=True) - output = list(range(n_aux)) - else: - output = indices + output = None + + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) + + output = [] + for nodo in G.nodes(): + output.append(list(G.neighbors(nodo))) + del G, edges + + return output + + +@digest(form=form) +def get_inner_bonded_atom_pairs_from_system(item, skip_digestion=False): + + output = get_bonded_atoms_pairs_from_bond(item) + return output diff --git a/molsysmt/form/molsysmt_Topology/get_topological_attributes.py b/molsysmt/form/molsysmt_Topology/get_topological_attributes.py index 5f66d8de7..b434e5bc9 100644 --- a/molsysmt/form/molsysmt_Topology/get_topological_attributes.py +++ b/molsysmt/form/molsysmt_Topology/get_topological_attributes.py @@ -2,7 +2,6 @@ from molsysmt._private.variables import is_all from molsysmt import pyunitwizard as puw import numpy as np -from molsysmt._private.get_topological_attributes import _auxiliary_getter from molsysmt._private.exceptions import NotImplementedMethodError, NotWithThisFormError import types @@ -2091,7 +2090,13 @@ def get_component_type_from_molecule(item, indices='all', skip_digestion=False): @digest(form=form) def get_molecule_index_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_molecule_index_from_molecule, item, indices) + if is_all(indices): + n_aux = get_n_molecules_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output @digest(form=form) @@ -2306,73 +2311,133 @@ def get_n_inner_bonds_from_molecule(item, indices='all', skip_digestion=False): @digest(form=form) def get_n_amino_acids_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_aminoacids_from_molecule, item, indices) + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output @digest(form=form) def get_n_nucleotides_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_nucleotides_from_molecule, item, indices) + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) def get_n_ions_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_ions_from_molecule, item, indices) + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) def get_n_waters_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_waters_from_molecule, item, indices) + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) def get_n_small_molecules_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_small_molecules_from_molecule, item, indices) + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_n_peptides_from_molecule(item, indices='all', skip_digestion=False): +def get_n_lipids_from_molecule(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() - return _auxiliary_getter(get_n_peptides_from_molecule, item, indices) + return output @digest(form=form) -def get_n_proteins_from_molecule(item, indices='all', skip_digestion=False): +def get_n_oligosaccharides_from_molecule(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() - return _auxiliary_getter(get_n_proteins_from_molecule, item, indices) + return output @digest(form=form) -def get_n_dnas_from_molecule(item, indices='all', skip_digestion=False): +def get_n_saccharides_from_molecule(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_molecule(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() - return _auxiliary_getter(get_n_dnas_from_molecule, item, indices) + return output @digest(form=form) -def get_n_rnas_from_molecule(item, indices='all', skip_digestion=False): +def get_n_peptides_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_rnas_from_molecule, item, indices) + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'peptide').sum() + + return output @digest(form=form) -def get_n_lipids_from_molecule(item, indices='all', skip_digestion=False): +def get_n_proteins_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_lipids_from_molecule, item, indices) + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'protein').sum() + + return output @digest(form=form) -def get_n_oligosaccharides_from_molecule(item, indices='all', skip_digestion=False): +def get_n_dnas_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_oligosaccharides_from_molecule, item, indices) + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'dna').sum() + + return output @digest(form=form) -def get_n_saccharides_from_molecule(item, indices='all', skip_digestion=False): +def get_n_rnas_from_molecule(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_saccharides_from_molecule, item, indices) + group_types = get_molecule_type_from_molecule(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'rna').sum() + + return output # From entity @@ -2381,73 +2446,217 @@ def get_n_saccharides_from_molecule(item, indices='all', skip_digestion=False): @digest(form=form) def get_atom_index_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_atom_index_from_entity, item, indices) + target_index = get_entity_index_from_atom(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_atom_id_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_atom_id_from_entity, item, indices) + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_id_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_atom_name_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_atom_name_from_entity, item, indices) + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_name_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_atom_type_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_atom_type_from_entity, item, indices) + target_indices = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_type_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_group_index_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_index_from_entity, item, indices) + target_index = get_entity_index_from_group(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_group_id_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_id_from_entity, item, indices) + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_id_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_group_name_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_name_from_entity, item, indices) + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_name_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_group_type_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_type_from_entity, item, indices) + target_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_type_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_index_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_index_from_entity, item, indices) + target_index = get_entity_index_from_component(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_component_id_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_id_from_entity, item, indices) + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_name_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_name_from_entity, item, indices) + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_type_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_type_from_entity, item, indices) + target_indices = get_component_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) @@ -2513,7 +2722,13 @@ def get_molecule_type_from_entity(item, indices='all', skip_digestion=False): @digest(form=form) def get_entity_index_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_entity_index_from_entity, item, indices) + if is_all(indices): + n_aux = get_n_entities_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output @digest(form=form) @@ -2552,145 +2767,263 @@ def get_entity_type_from_entity(item, indices='all', skip_digestion=False): @digest(form=form) def get_chain_index_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_chain_index_from_entity, item, indices) + atom_index_from_target = get_atom_index_from_entity(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_chain_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target + + return output @digest(form=form) def get_chain_id_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_chain_id_from_entity, item, indices) + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_id_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) def get_chain_name_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_chain_name_from_entity, item, indices) + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_name_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) def get_chain_type_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_chain_type_from_entity, item, indices) + aux_indices = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_type_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) def get_n_atoms_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_atoms_from_entity, item, indices) + output = get_atom_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_groups_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_groups_from_entity, item, indices) + output = get_group_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_components_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_components_from_entity, item, indices) + output = get_component_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_molecules_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_molecules_from_entity, item, indices) + output = get_molecule_index_from_entity(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_chains_from_entity(item, indices='all', skip_digestion=False): +def get_n_entities_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_chains_from_entity, item, indices) + if is_all(indices): + output = get_n_entities_from_system(item) + else: + output = len(indices) + + return output @digest(form=form) -def get_n_entities_from_entity(item, indices='all', skip_digestion=False): +def get_n_chains_from_entity(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_chains_from_system(item, skip_digestion=True) + else: + output = get_chain_index_from_entity(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] - return _auxiliary_getter(get_n_entities_from_entity, item, indices) + return output @digest(form=form) def get_n_bonds_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_bonds_from_entity, item, indices) + raise NotImplementedMethodError() @digest(form=form) def get_n_inner_bonds_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_inner_bonds_from_entity, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_n_aminoacids_from_entity(item, indices='all', skip_digestion=False): +def get_n_amino_acids_from_entity(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() - return _auxiliary_getter(get_n_aminoacids_from_entity, item, indices) + return output @digest(form=form) def get_n_nucleotides_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_nucleotides_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) def get_n_ions_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_ions_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) def get_n_waters_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_waters_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) def get_n_small_molecules_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_small_molecules_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_n_peptides_from_entity(item, indices='all', skip_digestion=False): +def get_n_lipids_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_peptides_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output @digest(form=form) -def get_n_proteins_from_entity(item, indices='all', skip_digestion=False): +def get_n_oligosaccharides_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_proteins_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() + + return output @digest(form=form) -def get_n_dnas_from_entity(item, indices='all', skip_digestion=False): +def get_n_saccharides_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_dnas_from_entity, item, indices) + group_indices = get_group_index_from_entity(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output @digest(form=form) -def get_n_rnas_from_entity(item, indices='all', skip_digestion=False): +def get_n_peptides_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_rnas_from_entity, item, indices) + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output @digest(form=form) -def get_n_lipids_from_entity(item, indices='all', skip_digestion=False): +def get_n_proteins_from_entity(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() - return _auxiliary_getter(get_n_lipids_from_entity, item, indices) + return output @digest(form=form) -def get_n_oligosaccharides_from_entity(item, indices='all', skip_digestion=False): +def get_n_dnas_from_entity(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() - return _auxiliary_getter(get_n_oligosaccharides_from_entity, item, indices) + return output @digest(form=form) -def get_n_saccharides_from_entity(item, indices='all', skip_digestion=False): +def get_n_rnas_from_entity(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_saccharides_from_entity, item, indices) + molecule_indices = get_molecule_index_from_entity(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() + + return output # From chain @@ -2759,256 +3092,590 @@ def get_atom_type_from_chain(item, indices='all', skip_digestion=False): @digest(form=form) def get_group_index_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_index_from_chain, item, indices) + target_index = get_chain_index_from_group(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_group_id_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_id_from_chain, item, indices) + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_id_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_group_name_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_name_from_chain, item, indices) + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_name_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_group_type_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_group_type_from_chain, item, indices) + target_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_group_type_from_group(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_index_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_index_from_chain, item, indices) + target_index = get_chain_index_from_component(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_component_id_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_id_from_chain, item, indices) + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_name_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_name_from_chain, item, indices) + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_component_type_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_component_type_from_chain, item, indices) + target_indices = get_component_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_molecule_index_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_molecule_index_from_chain, item, indices) + target_index = get_chain_index_from_molecule(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output @digest(form=form) def get_molecule_id_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_molecule_id_from_chain, item, indices) + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_id_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_molecule_name_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_molecule_name_from_chain, item, indices) + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_name_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output @digest(form=form) def get_molecule_type_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_molecule_type_from_chain, item, indices) + target_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_molecule_type_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_index_from_chain(item, indices='all', skip_digestion=False): + + target_index = get_chain_index_from_entity(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output + + +@digest(form=form) +def get_entity_id_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_id_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_name_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_name_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_entity_type_from_chain(item, indices='all', skip_digestion=False): + + target_indices = get_entity_index_from_chain(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_entity_type_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_chain_index_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_aux = get_n_chains_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output + + +@digest(form=form) +def get_chain_id_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = item.chains['chain_id'].to_list() + else: + output = item.chains['chain_id'][indices].to_list() + + return output + + +@digest(form=form) +def get_chain_name_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = item.chains['chain_name'].to_list() + else: + output = item.chains['chain_name'][indices].to_list() + + return output + + +@digest(form=form) +def get_chain_type_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = item.chains['chain_type'].to_list() + else: + output = item.chains['chain_type'][indices].to_list() + + return output @digest(form=form) -def get_entity_index_from_chain(item, indices='all', skip_digestion=False): +def get_bond_index_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_entity_index_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_entity_id_from_chain(item, indices='all', skip_digestion=False): +def get_bond_type_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_entity_id_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_entity_name_from_chain(item, indices='all', skip_digestion=False): +def get_bond_order_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_entity_name_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_entity_type_from_chain(item, indices='all', skip_digestion=False): +def get_bonded_atoms_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_entity_type_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_chain_index_from_chain(item, indices='all', skip_digestion=False): +def get_bonded_atom_pairs_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_chain_index_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_chain_id_from_chain(item, indices='all', skip_digestion=False): - - if is_all(indices): - output = item.chains['chain_id'].to_list() - else: - output = item.chains['chain_id'][indices].to_list() +def get_inner_bond_index_from_chain(item, indices='all', skip_digestion=False): - return output + raise NotImplementedMethodError() @digest(form=form) -def get_chain_name_from_chain(item, indices='all', skip_digestion=False): - - if is_all(indices): - output = item.chains['chain_name'].to_list() - else: - output = item.chains['chain_name'][indices].to_list() +def get_inner_bonded_atoms_from_chain(item, indices='all', skip_digestion=False): - return output + raise NotImplementedMethodError() @digest(form=form) -def get_chain_type_from_chain(item, indices='all', skip_digestion=False): - - if is_all(indices): - output = item.chains['chain_type'].to_list() - else: - output = item.chains['chain_type'][indices].to_list() +def get_inner_bonded_atom_pairs_from_chain(item, indices='all', skip_digestion=False): - return output + raise NotImplementedMethodError() @digest(form=form) def get_n_atoms_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_atoms_from_chain, item, indices) + output = get_atom_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_groups_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_groups_from_chain, item, indices) + output = get_group_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_components_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_components_from_chain, item, indices) + output = get_component_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) def get_n_molecules_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_molecules_from_chain, item, indices) + output = get_molecule_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_chains_from_chain(item, indices='all', skip_digestion=False): +def get_n_entities_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_chains_from_chain, item, indices) + output = get_entity_index_from_chain(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output @digest(form=form) -def get_n_entities_from_chain(item, indices='all', skip_digestion=False): +def get_n_chains_from_chain(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_chains_from_system(item) + else: + output = len(indices) - return _auxiliary_getter(get_n_entities_from_chain, item, indices) + return output @digest(form=form) def get_n_bonds_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_bonds_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) def get_n_inner_bonds_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_inner_bonds_from_chain, item, indices) + raise NotImplementedMethodError() @digest(form=form) -def get_n_aminoacids_from_chain(item, indices='all', skip_digestion=False): +def get_n_amino_acids_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() - return _auxiliary_getter(get_n_aminoacids_from_chain, item, indices) + return output @digest(form=form) def get_n_nucleotides_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_nucleotides_from_chain, item, indices) + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) def get_n_ions_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_ions_from_chain, item, indices) + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) def get_n_waters_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_waters_from_chain, item, indices) + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) def get_n_small_molecules_from_chain(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_small_molecules_from_chain, item, indices) + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_n_peptides_from_chain(item, indices='all', skip_digestion=False): +def get_n_lipids_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() - return _auxiliary_getter(get_n_peptides_from_chain, item, indices) + return output @digest(form=form) -def get_n_proteins_from_chain(item, indices='all', skip_digestion=False): +def get_n_oligosaccharides_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() - return _auxiliary_getter(get_n_proteins_from_chain, item, indices) + return output @digest(form=form) -def get_n_dnas_from_chain(item, indices='all', skip_digestion=False): +def get_n_saccharides_from_chain(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_chain(item, indices=indices, skip_digestion=True) + group_indices=np.concatenate([np.array(ii) for ii in group_indices]) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() - return _auxiliary_getter(get_n_dnas_from_chain, item, indices) + return output @digest(form=form) -def get_n_rnas_from_chain(item, indices='all', skip_digestion=False): +def get_n_peptides_from_chain(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() - return _auxiliary_getter(get_n_rnas_from_chain, item, indices) + return output @digest(form=form) -def get_n_lipids_from_chain(item, indices='all', skip_digestion=False): +def get_n_proteins_from_chain(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() - return _auxiliary_getter(get_n_lipids_from_chain, item, indices) + return output @digest(form=form) -def get_n_oligosaccharides_from_chain(item, indices='all', skip_digestion=False): +def get_n_dnas_from_chain(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() - return _auxiliary_getter(get_n_oligosaccharides_from_chain, item, indices) + return output @digest(form=form) -def get_n_saccharides_from_chain(item, indices='all', skip_digestion=False): +def get_n_rnas_from_chain(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_chain(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() - return _auxiliary_getter(get_n_saccharides_from_chain, item, indices) + return output # From bond @@ -3017,7 +3684,13 @@ def get_n_saccharides_from_chain(item, indices='all', skip_digestion=False): @digest(form=form) def get_bond_index_from_bond(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_bond_index_from_bond, item, indices) + if is_all(indices): + n_aux = get_n_bonds_from_system(item) + output = np.arange(n_aux, dtype=int).tolist() + else: + output = indices.tolist() + + return output @digest(form=form) @@ -3077,7 +3750,13 @@ def get_bonded_atom_pairs_from_bond(item, indices='all', skip_digestion=False): @digest(form=form) def get_n_bonds_from_bond(item, indices='all', skip_digestion=False): - return _auxiliary_getter(get_n_bonds_from_bond, item, indices) + if is_all(indices): + n_aux = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output # From system @@ -3128,107 +3807,190 @@ def get_n_bonds_from_system(item, skip_digestion=False): @digest(form=form) def get_n_aminoacids_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_aminoacids_from_system, item) + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output @digest(form=form) def get_n_nucleotides_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_nucleotides_from_system, item) + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output @digest(form=form) def get_n_ions_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_ions_from_system, item) + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output @digest(form=form) def get_n_waters_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_waters_from_system, item) + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output @digest(form=form) def get_n_small_molecules_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_small_molecules_from_system, item) + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output @digest(form=form) -def get_n_peptides_from_system(item, skip_digestion=False): +def get_n_lipids_from_system(item, skip_digestion=False): + + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() - return _auxiliary_getter(get_n_peptides_from_system, item) + return output @digest(form=form) -def get_n_proteins_from_system(item, skip_digestion=False): +def get_n_oligosaccharides_from_system(item, skip_digestion=False): + + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() - return _auxiliary_getter(get_n_proteins_from_system, item) + return output @digest(form=form) -def get_n_dnas_from_system(item, skip_digestion=False): +def get_n_saccharides_from_system(item, skip_digestion=False): + + group_types = get_group_type_from_group(item, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() - return _auxiliary_getter(get_n_dnas_from_system, item) + return output @digest(form=form) -def get_n_rnas_from_system(item, skip_digestion=False): +def get_n_peptides_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_n_rnas_from_system, item) + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output @digest(form=form) -def get_n_lipids_from_system(item, skip_digestion=False): +def get_n_proteins_from_system(item, skip_digestion=False): + + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() - return _auxiliary_getter(get_n_lipids_from_system, item) + return output @digest(form=form) -def get_n_oligosaccharides_from_system(item, skip_digestion=False): +def get_n_dnas_from_system(item, skip_digestion=False): + + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() - return _auxiliary_getter(get_n_oligosaccharides_from_system, item) + return output @digest(form=form) -def get_n_saccharides_from_system(item, skip_digestion=False): +def get_n_rnas_from_system(item, skip_digestion=False): + + molecule_types = get_molecule_type_from_molecule(item, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() - return _auxiliary_getter(get_n_saccharides_from_system, item) + return output @digest(form=form) def get_bond_index_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_bond_index_from_system, item) + n_bonds = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_bonds)) + + return output @digest(form=form) -def get_inner_bonded_atoms_from_system(item, skip_digestion=False): +def get_bonded_atoms_from_system(item, skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) + + indices = get_atom_index_from_atom(item, skip_digestion=True) + + output = [] + + for ii in indices: + if ii in G: + output.append(list(G.neighbors(ii))) + else: + output.append([]) + + del G, edges - return _auxiliary_getter(get_inner_bonded_atoms_from_system, item) + return output @digest(form=form) -def get_inner_bonded_atom_pairs_from_system(item, skip_digestion=False): +def get_bonded_atom_pairs_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_inner_bonded_atom_pairs_from_system, item, indices) + output = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + return output @digest(form=form) -def get_bonded_atoms_from_system(item, skip_digestion=False): +def get_inner_bond_index_from_system(item, skip_digestion=False): - return _auxiliary_getter(get_bonded_atoms_from_system, item) + n_bonds = get_n_bonds_from_system(item, skip_digestion=True) + output = list(range(n_bonds)) + + return output @digest(form=form) -def get_bonded_atom_pairs_from_system(item, skip_digestion=False): +def get_inner_bonded_atoms_from_system(item, skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) + + output = [] + for nodo in G.nodes(): + output.append(list(G.neighbors(nodo))) - return _auxiliary_getter(get_bonded_atom_pairs_from_system, item) + del G, edges + return output -# List of functions to be imported +@digest(form=form) +def get_inner_bonded_atom_pairs_from_system(item, skip_digestion=False): + + output = get_bonded_atoms_pairs_from_bond(item) + + return output + +# List of functions to be imported __all__ = [name for name, obj in globals().items() if isinstance(obj, types.FunctionType) and name.startswith('get_')] + diff --git a/molsysmt/form/openmm_Topology/get_topological_attributes.py b/molsysmt/form/openmm_Topology/get_topological_attributes.py index 01b9dd8aa..16a5c6ba6 100644 --- a/molsysmt/form/openmm_Topology/get_topological_attributes.py +++ b/molsysmt/form/openmm_Topology/get_topological_attributes.py @@ -2,89 +2,256 @@ from molsysmt._private.variables import is_all from molsysmt import pyunitwizard as puw import numpy as np -from molsysmt._private.get_topological_attributes import _auxiliary_getter import types from molsysmt._private.exceptions import NotImplementedMethodError, NotWithThisFormError form='openmm.Topology' -####################################################################### -# To be customized for each form # -####################################################################### - ## From atom + +@digest(form=form) +def get_atom_index_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_aux = get_n_atoms_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output + + @digest(form=form) def get_atom_id_from_atom(item, indices='all', skip_digestion=False): - tmp_indices = get_atom_index_from_atom(item, indices=indices) + tmp_indices = get_atom_index_from_atom(item, indices=indices, skip_digestion=True) atom=list(item.atoms()) output=[int(atom[ii].id) for ii in tmp_indices] del(atom) return output + @digest(form=form) def get_atom_name_from_atom(item, indices='all', skip_digestion=False): - tmp_indices = get_atom_index_from_atom(item, indices=indices) + tmp_indices = get_atom_index_from_atom(item, indices=indices, skip_digestion=True) atom=list(item.atoms()) output=[atom[ii].name for ii in tmp_indices] del(atom) return output + @digest(form=form) def get_atom_type_from_atom(item, indices='all', skip_digestion=False): - tmp_indices = get_atom_index_from_atom(item, indices=indices) + tmp_indices = get_atom_index_from_atom(item, indices=indices, skip_digestion=True) atom=list(item.atoms()) output=[atom[ii].element.symbol for ii in tmp_indices] del(atom) return output + @digest(form=form) def get_group_index_from_atom(item, indices='all', skip_digestion=False): - tmp_indices = get_atom_index_from_atom(item, indices=indices) + tmp_indices = get_atom_index_from_atom(item, indices=indices, skip_digestion=True) atom=list(item.atoms()) output = [atom[ii].residue.index for ii in tmp_indices] del(atom) return output + +@digest(form=form) +def get_group_id_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_group_id_from_group(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_group_name_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_group_name_from_group(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_group_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_group_type_from_group(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + @digest(form=form) def get_component_index_from_atom(item, indices='all', skip_digestion=False): from molsysmt.element.component import get_component_index as _get - output = _get(item, element='atom', selection=indices, redefine_indices=True) + output = _get(item, element='atom', selection=indices, redefine_indices=True, skip_digestion=True) return output +@digest(form=form) +def get_component_id_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_component_name_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_component_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + @digest(form=form) def get_molecule_index_from_atom(item, indices='all', skip_digestion=False): - output = get_component_index_from_atom(item, indices=indices) + output = get_component_index_from_atom(item, indices=indices, skip_digestion=True) return output +@digest(form=form) +def get_molecule_id_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_id_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_molecule_name_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_name_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_molecule_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_type_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + @digest(form=form) def get_entity_index_from_atom(item, indices='all', skip_digestion=False): from molsysmt.element.entity import get_entity_index as _get return _get(item, element='atom', selection=indices, redefine_molecules=True, - redefine_indices=True) + redefine_indices=True, skip_digestion=True) + + +@digest(form=form) +def get_entity_id_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_id_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_entity_name_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_name_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_entity_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_type_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() @digest(form=form) def get_chain_index_from_atom(item, indices='all', skip_digestion=False): - tmp_indices = get_atom_index_from_atom(item, indices=indices) + tmp_indices = get_atom_index_from_atom(item, indices=indices, skip_digestion=True) atom=list(item.atoms()) output = [atom[ii].residue.chain.index for ii in tmp_indices] del(atom) @@ -92,50 +259,1037 @@ def get_chain_index_from_atom(item, indices='all', skip_digestion=False): return output -## From group +@digest(form=form) +def get_chain_id_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_id_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + @digest(form=form) -def get_group_id_from_group(item, indices='all', skip_digestion=False): +def get_chain_name_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_name_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_chain_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_type_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_bond_index_from_atom(item, indices='all', skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + n_bonds = len(edges) + edge_indices = np.array([{'index': ii} for ii in range(n_bonds)]).reshape([n_bonds, 1]) + G.add_edges_from(np.hstack([edges, edge_indices])) if is_all(indices): - n_indices = get_n_groups_from_system(item) - indices = range(n_indices) - group=list(item.residues()) - output = [int(group[ii].id) for ii in indices] - del(group) + indices = get_atom_index_from_atom(item, skip_digestion=True) + + output = [] + + for ii in indices: + if ii in G: + output.append([n['index'] for n in G[ii].values()]) + else: + output.append([]) + + del G, edges, edge_indices return output + @digest(form=form) -def get_group_name_from_group(item, indices='all', skip_digestion=False): +def get_bond_type_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_bond_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_bond_type_from_bond(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_bond_order_from_atom(item, indices='all', skip_digestion=False): + + aux_indices = get_bond_index_from_atom(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_bond_order_from_bond(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_bonded_atoms_from_atom(item, indices='all', skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atoms_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) if is_all(indices): - n_indices = get_n_groups_from_system(item) - indices = range(n_indices) - group=list(item.residues()) - output = [group[ii].name for ii in indices] - del(group) + indices = get_atom_index_from_atom(item, skip_digestion=True) + + output = [] + + for ii in indices: + if ii in G: + output.append(list(G.neighbors(ii))) + else: + output.append([]) + + del G, edges return output + @digest(form=form) -def get_group_type_from_group(item, indices='all', skip_digestion=False): +def get_bonded_atom_pairs_from_atom(item, indices='all', skip_digestion=False): - from molsysmt.element.group import get_group_type_from_group_name + output = None if is_all(indices): - n_indices = get_n_groups_from_system(item) - indices = range(n_indices) - group=list(item.residues()) - output = [get_group_type_from_group_name(group[ii].name) for ii in indices] - del(group) + output = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + + else: + + pairs = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + pairs = np.array(pairs) + mask = np.isin(pairs[:,0], indices) | np.isin(pairs[:,1], indices) + output = pairs[mask,:].tolist() + + del pairs, mask + + return output + + +@digest(form=form) +def get_inner_bond_index_from_atom(item, indices='all', skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + n_bonds = len(edges) + edge_indices = np.array([{'index': ii} for ii in range(n_bonds)]).reshape([n_bonds, 1]) + G.add_edges_from(np.hstack([edges, edge_indices])) + + if is_all(indices): + + indices = get_atom_index_from_atom(item, skip_digestion=True) + + else: + + G = G.subgraph(indices) + + output = [] + + for ii in indices: + if ii in G: + output.append([n['index'] for n in G[ii].values()]) + else: + output.append([]) + + del G, edges, edge_indices + + return output + + +@digest(form=form) +def get_inner_bonded_atoms_from_atom(item, indices='all', skip_digestion=False): + + output = None + + G = Graph() + edges = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + + G.add_edges_from(edges) + + if not is_all(indices): + + G = G.subgraph(indices) + + output = [] + for nodo in G.nodes(): + output.append(list(G.neighbors(nodo))) + + del G, edges + + return output + + +@digest(form=form) +def get_inner_bonded_atom_pairs_from_atom(item, indices='all', skip_digestion=False): + + output = None + + if is_all(indices): + + output = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + + else: + + pairs = get_bonded_atom_pairs_from_bond(item, skip_digestion=True) + pairs = np.array(pairs) + mask = np.isin(pairs[:,0], indices) * np.isin(pairs[:,1], indices) + output = pairs[mask,:].tolist() + + del pairs, mask + + return output + + +@digest(form=form) +def get_n_atoms_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_atoms_from_system(item, skip_digestion=True) + else: + output = len(indices) + + return output + + +@digest(form=form) +def get_n_groups_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_groups_from_system(item, skip_digestion=True) + else: + output = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_components_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_components_from_system(item, skip_digestion=True) + else: + output = get_component_index_from_atom(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_molecules_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_molecules_from_system(item, skip_digestion=True) + else: + output = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_entities_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_entities_from_system(item, skip_digestion=True) + else: + output = get_entity_index_from_atom(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_chains_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_chains_from_system(item, skip_digestion=True) + else: + output = get_chain_index_from_atom(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] return output +@digest(form=form) +def get_n_bonds_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + + output = get_n_bonds_from_system(item, skip_digestion=True) + + else: + + bond_indices = get_bond_index_from_atom(item, indices, skip_digestion=True) + output = np.unique(np.concatenate(bond_indices)).shape[0] + del bond_indices + + return output + + +@digest(form=form) +def get_n_inner_bonds_from_atom(item, indices='all', skip_digestion=False): + + if is_all(indices): + + output = get_n_bonds_from_system(item, skip_digestion=True) + + else: + + bond_indices = get_inner_bond_index_from_atom(item, indices, skip_digestion=True) + output = np.unique(np.concatenate(bond_indices)).shape[0] + del bond_indices + + return output + + +@digest(form=form) +def get_n_amino_acids_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output + + +@digest(form=form) +def get_n_nucleotides_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output + + +@digest(form=form) +def get_n_ions_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output + + +@digest(form=form) +def get_n_waters_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output + + +@digest(form=form) +def get_n_small_molecules_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output + + +@digest(form=form) +def get_n_lipids_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output + + +@digest(form=form) +def get_n_oligosaccharides_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'olicosaccharide').sum() + + return output + + +@digest(form=form) +def get_n_saccharides_from_atom(item, indices='all', skip_digestion=False): + + group_indices = get_group_index_from_atom(item, indices=indices, skip_digestion=True) + group_indices = np.unique(group_indices) + group_types = get_group_type_from_group(item, indices=group_indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output + + +@digest(form=form) +def get_n_peptides_from_atom(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output + + +@digest(form=form) +def get_n_proteins_from_atom(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() + + return output + + +@digest(form=form) +def get_n_dnas_from_atom(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() + + return output + + +@digest(form=form) +def get_n_rnas_from_atom(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_atom(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() + + return output + + +## From group + + +@digest(form=form) +def get_atom_index_from_group(item, indices='all', skip_digestion=False): + + target_index = get_group_index_from_atom(item, skip_digestion=True) + + serie = pd.Series(target_index) + groups_serie = serie.groupby(serie).apply(lambda x: x.index.tolist()) + if is_all(indices): + output = [ii for ii in groups_serie] + else: + output = [groups_serie[ii] for ii in indices] + + return output + + +@digest(form=form) +def get_atom_id_from_group(item, indices='all', skip_digestion=False): + + target_indices = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_id_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_atom_name_from_group(item, indices='all', skip_digestion=False): + + target_indices = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_name_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_atom_type_from_group(item, indices='all', skip_digestion=False): + + target_indices = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_indices = np.unique(np.concatenate(target_indices), return_inverse=True) + aux_vals = get_atom_type_from_atom(item, indices=aux_unique_indices, skip_digestion=True) + aux_output = np.array(aux_vals)[aux_indices] + output = [] + ii = 0 + for aux in target_indices: + jj = ii+len(aux) + output.append(aux_output[ii:jj].tolist()) + ii = jj + + del aux_unique_indices, aux_vals, aux_output, target_indices + + return output + + +@digest(form=form) +def get_group_index_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_aux = get_n_groups_from_system(item, skip_digestion=True) + output = list(range(n_aux)) + else: + output = indices + + return output + + +@digest(form=form) +def get_group_id_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_indices = get_n_groups_from_system(item, skip_digestion=True) + indices = range(n_indices) + + group=list(item.residues()) + output = [int(group[ii].id) for ii in indices] + del(group) + + return output + +@digest(form=form) +def get_group_name_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + n_indices = get_n_groups_from_system(item, skip_digestion=True) + indices = range(n_indices) + + group=list(item.residues()) + output = [group[ii].name for ii in indices] + del(group) + + return output + +@digest(form=form) +def get_group_type_from_group(item, indices='all', skip_digestion=False): + + from molsysmt.element.group import get_group_type_from_group_name + + if is_all(indices): + n_indices = get_n_groups_from_system(item, skip_digestion=True) + indices = range(n_indices) + + group=list(item.residues()) + output = [get_group_type_from_group_name(group[ii].name, skip_digestion=True) for ii in indices] + del(group) + + return output + + +@digest(form=form) +def get_component_index_from_group(item, indices='all', skip_digestion=False): + + atom_index_from_target = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_component_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target + + return output + + +@digest(form=form) +def get_component_id_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_id_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_component_name_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_name_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_component_type_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_component_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_component_type_from_component(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_molecule_index_from_group(item, indices='all', skip_digestion=False): + + atom_index_from_target = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_molecule_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target + + return output + + +@digest(form=form) +def get_molecule_id_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_id_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_molecule_name_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_name_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_molecule_type_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_molecule_type_from_molecule(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_entity_index_from_group(item, indices='all', skip_digestion=False): + + atom_index_from_target = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_entity_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target + + return output + + +@digest(form=form) +def get_entity_id_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_id_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_entity_name_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_name_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_entity_type_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_entity_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_entity_type_from_entity(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_chain_index_from_group(item, indices='all', skip_digestion=False): + + atom_index_from_target = get_atom_index_from_group(item, indices=indices, skip_digestion=True) + first_atom_index_from_target = np.array([ii[0] for ii in atom_index_from_target]) + output = get_chain_index_from_atom(item, indices=first_atom_index_from_target, skip_digestion=True) + + del atom_index_from_target, first_atom_index_from_target + + return output + + +@digest(form=form) +def get_chain_id_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_id_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_chain_name_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_name_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_chain_type_from_group(item, indices='all', skip_digestion=False): + + aux_indices = get_chain_index_from_group(item, indices=indices, skip_digestion=True) + aux_unique_indices, aux_new_indices = np.unique(aux_indices, return_inverse=True) + aux_vals = get_chain_type_from_chain(item, indices=aux_unique_indices, skip_digestion=True) + output = np.array(aux_vals)[aux_new_indices] + + del aux_indices, aux_unique_indices, aux_vals, aux_new_indices + + return output.tolist() + + +@digest(form=form) +def get_bond_index_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_type_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bond_order_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atoms_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_bonded_atom_pairs_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bond_index_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atoms_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_inner_bonded_atom_pairs_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + + +@digest(form=form) +def get_n_atoms_from_group(item, indices='all', skip_digestion=False): + + output = get_atom_index_from_group(item, indices, skip_digestion=True) + output = [len(ii) for ii in output] + + return output + + +@digest(form=form) +def get_n_groups_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_groups_from_system(item, skip_digestion=True) + else: + output = len(indices) + + return output + + +@digest(form=form) +def get_n_components_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_components_from_system(item, skip_digestion=True) + else: + output = get_component_index_from_group(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_molecules_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_molecules_from_system(item, skip_digestion=True) + else: + output = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_entities_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_entities_from_system(item, skip_digestion=True) + else: + output = get_entity_index_from_group(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_chains_from_group(item, indices='all', skip_digestion=False): + + if is_all(indices): + output = get_n_chains_from_system(item, skip_digestion=True) + else: + output = get_chain_index_from_group(item, indices=indices, skip_digestion=True) + output = np.unique(output).shape[0] + + return output + + +@digest(form=form) +def get_n_bonds_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_n_inner_bonds_from_group(item, indices='all', skip_digestion=False): + + raise NotImplementedMethodError() + + +@digest(form=form) +def get_n_amino_acids_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'amino acid').sum() + + return output + + +@digest(form=form) +def get_n_nucleotides_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'nucleotide').sum() + + return output + + +@digest(form=form) +def get_n_ions_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'ion').sum() + + return output + + +@digest(form=form) +def get_n_waters_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'water').sum() + + return output + + +@digest(form=form) +def get_n_small_molecules_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'small molecule').sum() + + return output + + +@digest(form=form) +def get_n_lipids_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'lipid').sum() + + return output + + +@digest(form=form) +def get_n_oligosaccharides_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'oligosaccharide').sum() + + return output + + +@digest(form=form) +def get_n_saccharides_from_group(item, indices='all', skip_digestion=False): + + group_types = get_group_type_from_group(item, indices=indices, skip_digestion=True) + output = (np.array(group_types) == 'saccharide').sum() + + return output + + +@digest(form=form) +def get_n_peptides_from_group(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'peptide').sum() + + return output + + +@digest(form=form) +def get_n_proteins_from_group(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'protein').sum() + + return output + + +@digest(form=form) +def get_n_dnas_from_group(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'dna').sum() + + return output + + +@digest(form=form) +def get_n_rnas_from_group(item, indices='all', skip_digestion=False): + + molecule_indices = get_molecule_index_from_group(item, indices=indices, skip_digestion=True) + molecule_indices = np.unique(molecule_indices) + molecule_types = get_molecule_type_from_molecule(item, indices=molecule_indices, skip_digestion=True) + output = (np.array(molecule_types) == 'rna').sum() + + return output + + + ## From component @digest(form=form)