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.
J'ai exécuté un script qui affiche un fichier xyz qui décrit la structure tridimensionnelle de l'ADN dans GR.rb.
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
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.
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
Si vous voyez un écran comme celui-ci, vous avez réussi!
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.
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.
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 ...
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