Skip to content

Instantly share code, notes, and snippets.

@sjdv1982
Created March 13, 2026 10:28
Show Gist options
  • Select an option

  • Save sjdv1982/881767e4ce9615886f5b33f373e9d417 to your computer and use it in GitHub Desktop.

Select an option

Save sjdv1982/881767e4ce9615886f5b33f373e9d417 to your computer and use it in GitHub Desktop.

(continuing the same chat, ChatGPT 5.4 Thinking)

Prompt

(your question verbatim)

Tu peux me confirmer ou non que l'ordre des atomes dans les npy est toujours le meme?

Response

Oui, je peux te le confirmer avec une nuance importante :

  • à motif et bibliothèque donnés, l’ordre des atomes dans les .npy est 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ù X est 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)

Ce que je peux affirmer précisément

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)

La nuance

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)

En pratique

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.

Prompt

(my bad French)

Tu peux regarder dans le lien vers l'autre repo mentionné dans le README?

Response

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 .npy a 42 atomes, dans l’ordre montré par AC.pdb ; (GitHub)
  • pour AA, ce sera l’ordre de AA.pdb ;
  • pour AAC, ce sera l’ordre de AAC.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 de P du premier nucléotide,
  • coords[i, 1] = O1P,
  • coords[i, 21] = O3' du premier nucléotide,
  • coords[i, 22] = P du 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment