Afficher la structure tridimensionnelle de l'ADN et des protéines dans Ruby-dans le cas de GR.rb

introduction

Afficher la structure tridimensionnelle d'une protéine dans Ruby est un rêve de l'humanité depuis l'Antiquité, et diverses tentatives ont été faites depuis.

Dans cet article, j'utiliserai l'outil de dessin graphique GR.rb que je maintiens pour afficher des structures tridimensionnelles telles que des protéines. Explique.

Afficher les fichiers xyz dans GR.rb

video.gif

J'ai exécuté un script qui affiche un fichier xyz qui décrit la structure tridimensionnelle de l'ADN dans GR.rb.

Obtenez le fichier xyz

Enregistrez d'abord le fichier au format xyz. Si vous souhaitez télécharger à partir d'un navigateur ici

wget https://raw.githubusercontent.com/red-data-tools/GR.rb/master/examples/assets/dna.xyz

Créer un script Ruby

Ensuite, créez un script Ruby. Disons «mol.rb» ici.

Chargez la bibliothèque.

mol.rb


require 'gr'
require 'gr3'
require 'numo/narray'
require 'optparse'

Cette fois, j'ai sérieusement ajouté l'option de ligne de commande.

#Options de ligne de commande
options = { radius: 1.0, size: 500 }
OptionParser.new do |opt|
  opt.on('-o', '--output PATH', String) { |v| options[:save_path] = v }
  opt.on('-r', '--radius VALUE', Float) { |v| options[:radius] = v }
  opt.on('-s', '--size VALUE', Integer) { |v| options[:size] = v }
  opt.on('-t', '--title TITLE', String) { |v| options[:title] = v }
  opt.parse!(ARGV)
  options[:title] ||= ARGV[0]
end

Lisez le fichier. Malheureusement, je n'ai pas pu trouver l'analyseur xyz, comme c'est souvent le cas avec Ruby. J'ai donc lu moi-même les données du fichier. Cependant, c'est super facile car le format de fichier d'origine est simple. Le module GR3 stocke les valeurs par défaut pour la couleur d'affichage et la taille des atomes, alors utilisons cela.

#Lire le fichier
data = readlines
nrows = data.shift.to_i
puts data.shift
data = data.take(nrows)
data.map! { |row| row.split(/\s+/) }

positions = data.map { |row| row[1..3].map(&:to_f) }
atoms     = data.map { |row| row[0] }.map { |a| GR3::ATOM_NUMBERS[a.upcase] }
colors    = atoms.map { |a| GR3::ATOM_COLORS[a] }
radii     = atoms.map { |a| GR3::ATOM_RADII[a] * options[:radius] }

C'est la partie qui est réellement affichée. J'ai écrit ceci en référence à l'exemple de GR.jl.

GR.initgr
GR.setviewport(0, 1, 0, 1)

#Enregistrer le fichier vidéo
GR.beginprint(options[:save_path]) if options[:save_path]

360.times do |i|
  GR.clearws
  GR3.clear
  GR3.drawmolecule(positions, colors, radii, nil, nil, nil, 2, true, i, 45)
  GR3.drawimage(0, 1, 0, 1, options[:size], options[:size], GR3::DRAWABLE_GKS)
  GR.settextcolorind(0)
  GR.settextalign(GR::TEXT_HALIGN_CENTER, GR::TEXT_VALIGN_TOP)
  GR.text(0.5, 1, options[:title])
  GR.updatews
end

#Fin de l'enregistrement du fichier
GR.endprint if options[:save_path]

GR3.terminate

c'est tout. Le script entier est ici gist.

Exécuter

J'ai l'impression que le rayon est un peu petit, alors essayez de doubler le rayon avec -r 2.

ruby mol.rb -r2 dna.xyz

output.gif

Si vous voyez un écran comme celui-ci, vous avez réussi!

Montrons la structure tridimensionnelle de l'hémoglobine

Montrons également d'autres molécules. Ici, je vais montrer la structure de l'hémoglobine en tant que protéine célèbre.

Téléchargez le fichier qui décrit la structure de l'hémoglobine lorsque l'oxygène n'est pas lié à partir de la Japan Protein Data Bank Japan (PDBj).

Ici, téléchargez un fichier au format PDB appelé pdb2hhb.ent. Utilisez un outil appelé Open Babel pour le convertir en un fichier au format xyz.

#Installez Open Babel
sudo apt install openbabel

Convertissez pdb2hhb.ent en fichier xyz.

obabel pdb2hhb.ent -O hb.xyz

Puis affichez-le sous la forme «mol.rb».

ruby mol.rb hb.xyz -s 1000 -o hemoglobin.mp4 -t hemoglobin

Lors du processus de conversion en animation GIF, je suis devenu confus, mais en réalité, une vidéo légèrement plus belle est enregistrée. Augmentez l'option -s pour rendre la vidéo plus propre.

output.gif

D'un autre côté, si vous réduisez -s, la vidéo aura le goût d'une image à points. Dans le cas de l'ADN, cela ressemble à ceci.

output.gif

C'est comme une scène d'un jeu d'antan. Je suis désolé. Il n'y a pas de signification académique particulière ...

finalement

Eh bien, même en Ruby, il existe en fait un moyen d'afficher la structure de la molécule ~

J'en ai parlé. Vous vous demandez peut-être "Pourquoi Ruby?", Mais ne réfléchissons pas.

Enfin, je suis heureux d'afficher les données de structure tridimensionnelle de cette manière, mais je ne suis pas particulièrement familier avec la structure moléculaire et je suis un amateur complet. J'ai également appris le format xyz et le format de fichier PDF pour la première fois.

Donc, si vous trouvez quelque chose qui ne va pas, n'hésitez pas à le signaler dans la section commentaires **. J'ai hâte de travailler avec vous.

Cet article est terminé

Recommended Posts

Afficher la structure tridimensionnelle de l'ADN et des protéines dans Ruby-dans le cas de GR.rb
[Rails] Différence de comportement entre delegate et has_many-through dans le cas de one-to-one-to-many
[Swift] Le processus d'enregistrement de l'élément sélectionné dans "UI Segmented Control" dans Realm et d'affichage des données d'enregistrement.
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Obtenez le nom du scénario de test dans la classe de test JUnit
Créer plus d'onglets et de fragments dans le fragment de BottomNavigationView
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Examinons la signification de "stream" et "collect" dans l'API Stream de Java.
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
La validation de printemps était importante dans l'ordre de Form et BindingResult