<jupyter_start><jupyter_text>Listas de vecinos En esta sección veremos cómo usar el método `molsysmt.neighbors_lists` para calcular listas de vecinos. Estas listas de vecinos pueden ser definidas de dos maneras según tomen valor uno de los dos argumentos de entrada `num_neighbors` o `threshold`. Veamos en primer lugar el uso de `num_neighbors`, calculemos los dos primeros vecinos de cada uno de los elementos de `set_A`.<jupyter_code>neighbors, distances = m3t.neighbors_lists(item_1=set_A, num_neighbors=2)
distances
neighbors, distances = m3t.neighbors_lists(item_1=set_A, threshold=2.0*unit.nanometers)
distances<jupyter_output><empty_output><jupyter_text>Jugar con las selecciones, etc... el caso  es que tengo que quitar el mismo elemento, por eso sale 0. Y eso sólo cuando es el mismo item, con la misma selección y los mismos frames.  Mapas de contactosMolSysMT cuenta con un método para especificamente calcular mapas de contactos. Los argumentos de entrada y la manera de uso de este método es muy similar a las funciones descritas anteriormente. Veamos por ejemplo en primer lugar cómo calcular el mapa de contactos entre los elementos de un modelo molecular dada una distancia umbral. Tomaremos como ejemplo el modelo `set_A` definido desde el comienzo de este notebook y la distancia umbral 2.0 nm.<jupyter_code>contactos = m3t.contact_map(item_1=set_A, threshold=2.0*unit.nanometers)<jupyter_output><empty_output><jupyter_text>El resultado es un tensor lógico, o booleano, que codifica el mapa de contactos observado para cada uno de los frames. Es decir, el tensor tiene rango 3 donde el primer rango hace referencia al índice de frame y el segundo y tercer rango a los indices de elementos de `set_A` frente a los mismo indices.<jupyter_code>contactos.shape<jupyter_output><empty_output><jupyter_text>De esta manera por ejemplo podemos ver si el elemento 0-ésimo de `set_A` está en contacto con el elemento 2-esimo de `set_A` en el frame 1-ésimo según:<jupyter_code>contactos[1][0][2]<jupyter_output><empty_output><jupyter_text>O podemos ver el mapa de contactos del frame 2-ésimo simplemente con:<jupyter_code>contactos[1]
import networkx as nx
G = nx.from_numpy_matrix(contactos[1])
list(nx.connected_components(G))<jupyter_output><empty_output><jupyter_text>Distancias entre grupos   Distancias mínimas o máximas entre grupos  Listas de vecinos entre grupos  Mapas de contactos entre grupos<jupyter_code>molsys = m3t.load('/home/diego/1brs.pdb', selection='chainid 0 or chainid 3')
m3t.view(molsys)
dists_CAs = m3t.distance(molsys, selection_1="chainid 0 and name CA", selection_2="chainid 3 and name CA")
chain0_CAs = m3t.select(molsys, "chainid 0 and name CA")
chain3_CAs = m3t.select(molsys, "chainid 3 and name CA")

ii=10
jj=20
frame_index=0

print('La distancia entre el átomo {} y el átomo {} es {}'.format(chain0_CAs[ii], chain3_CAs[jj], dists_CAs[frame_index,ii,jj]))
dists_CAs = m3t.distance(molsys, selection_1="chainid 0 and name CA", selection_2="chainid 3 and name CA", output_form='dict')
ii=74
jj=1022
frame_index=0

print('La distancia entre el átomo {} y el átomo {} es {}'.format(ii, jj, dists_CAs[ii][jj][frame_index]))
m3t.get(molsys, target='atom', indices=[74,1022], index=True, id=True, name=True, element=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08368837492391966, 'fraction_numerical': 0.02008520998174072, 'mean_word_length': 6.369955156950673, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '136200', 'license': 'MIT', 'n_tokens_mistral': 1192, 'n_tokens_neox': 1164, 'n_words': 381, 'path': 'examples/es/Distances_es.ipynb', 'repo_name': 'dprada/molsysmt', 'size': '3286'}