(continuing the same chat, ChatGPT 5.4 Thinking)
(your question verbatim)
Tu peux me confirmer ou non que l'ordre des atomes dans les npy est toujours le meme?
Oui, je peux te le confirmer avec une nuance importante :
- à motif et bibliothèque donnés, l’ordre des atomes dans les
.npyest bien supposé fixe et cohérent ; - en revanche, cet ordre n’est pas explicitement listé atome par atome dans le README. Ce qu’on peut confirmer vient surtout du script
mutate.py. (GitHub)
Pourquoi on peut le dire :
Le script mutate.py manipule les coordonnées par positions d’indices atomiques fixes. Par exemple, pour muter A -> G, il utilise directement des atomes aux indices 8, 11 et 13, et il recopie les blocs d’atomes avec une logique d’offset stricte. Cela n’aurait aucun sens si l’ordre des atomes changeait d’un conformère à l’autre dans un même fichier .npy. (GitHub)
Le script indique aussi que :
- un nucléotide A a 22 atomes lourds,
- C en a 20,
- G en a 23,
- U en a 20,
et que les fragments sont stockés sous forme de tableaux
(Y, X, 3)ou(X, 3), oùXest le nombre total d’atomes attendu pour la séquence. Là encore, cela implique un ordre atomique stable. (GitHub)
Il y a même une confirmation quasi explicite dans le code pour C -> U et U -> C :
curr_outp[:] = curr_inp # equivalent atoms in the same order
Donc les auteurs supposent bien que ces atomes sont rangés dans le même ordre. (GitHub)
Pour un fichier .npy donné de la librairie :
- tous les conformères ont le même nombre d’atomes ;
- les atomes sont dans le même ordre pour tous les conformères de ce fichier ;
- cet ordre est aussi cohérent avec les opérations de mutation fournies par le dépôt. (GitHub)
Je ne peux pas te garantir, à partir du seul README, la liste nominative exacte du type :
P, OP1, OP2, O5', C5', ...
car elle n’est pas écrite telle quelle dans le dépôt consulté. Le README dit seulement que les .npy contiennent les coordonnées xyz, et renvoie vers le dépôt des templates PDB correspondants pour les fichiers PDB. (GitHub)
Donc la bonne réponse est :
Oui, l’ordre des atomes dans les .npy est bien constant au sein d’une séquence donnée, sinon les scripts du dépôt ne fonctionneraient pas.
Non, je n’ai pas trouvé dans ce dépôt la table explicite “indice atomique → nom d’atome”.
Pour récupérer cette correspondance exacte, il faut regarder les templates PDB mentionnés dans le README, car ce sont eux qui portent les noms d’atomes. (GitHub)
Je peux aussi te reconstituer l’ordre atomique probable d’un dinucléotide ou trinucléotide précis (AC, AAC, etc.) à partir des tailles et de la logique du script.
(my bad French)
Tu peux regarder dans le lien vers l'autre repo mentionné dans le README?
Oui — et cette fois on peut le confirmer beaucoup plus solidement.
Le README du dépôt principal dit explicitement que les fichiers .npy ne contiennent que les coordonnées xyz et que, pour les PDB correspondants, il faut regarder l’autre dépôt nucleotide-fragment-templates. (GitHub)
Dans ce second dépôt, il y a bien un fichier template .pdb pour chaque motif, par exemple AC.pdb, AA.pdb, AAC.pdb, etc. (GitHub)
Et dans AC.pdb, on voit noir sur blanc l’ordre atomique exact. Pour le premier nucléotide A, les atomes 1 à 22 sont listés dans cet ordre :
P, O1P, O2P, O5', C5', C4', O4', C1', N9, C4, N3, C2, N1, C6, N6, C5, N7, C8, C2', O2', C3', O3'. Puis le deuxième nucléotide C commence à l’atome 23 avec P, O1P, O2P, O5', ... et continue jusqu’à l’atome 42. (GitHub)
Donc la conclusion pratique est :
oui, l’ordre des atomes dans les .npy est celui du template .pdb du motif correspondant, et il est donc fixe pour tous les conformères de ce motif. Sinon, le fichier .pdb “correspondant” n’aurait pas de sens comme gabarit atomique pour interpréter les coordonnées du .npy. Cette correspondance est précisément ce que dit le README du dépôt principal en renvoyant vers ces PDB templates. (GitHub)
Autrement dit :
- pour
AC, chaque conformère du.npya 42 atomes, dans l’ordre montré parAC.pdb; (GitHub) - pour
AA, ce sera l’ordre deAA.pdb; - pour
AAC, ce sera l’ordre deAAC.pdb, etc. (GitHub)
Le plus important : il ne faut pas supposer un ordre “universel” indépendant du motif. L’ordre est défini par le template du motif. En revanche, à motif donné, il est bien constant. (GitHub)
Pour AC, si ton array numpy a la forme (n_conf, 42, 3), alors :
coords[i, 0]= coordonnées dePdu premier nucléotide,coords[i, 1]=O1P,- …
coords[i, 21]=O3'du premier nucléotide,coords[i, 22]=Pdu second nucléotide,- …
coords[i, 41]=O3'du second nucléotide. (GitHub)
Si tu veux, je peux maintenant te donner un petit script Python qui prend un motif comme AC ou AAC, lit le template .pdb, et te construit automatiquement la table indice atomique -> nom d’atome.