Die Darstellung der dreidimensionalen Struktur eines Proteins in Ruby ist seit der Antike ein Traum der Menschheit, und seitdem wurden verschiedene Versuche unternommen.
In diesem Artikel werde ich das Grafikzeichnungswerkzeug GR.rb verwenden, das ich pflege, um dreidimensionale Strukturen wie Proteine anzuzeigen. erklären.
Ich habe ein Skript ausgeführt, das eine xyz-Datei anzeigt, die die dreidimensionale Struktur der DNA in GR.rb beschreibt.
Speichern Sie zuerst die Datei im Format "xyz". Wenn Sie von einem Browser herunterladen möchten hier
wget https://raw.githubusercontent.com/red-data-tools/GR.rb/master/examples/assets/dna.xyz
Erstellen Sie als Nächstes ein Ruby-Skript. Sagen wir hier "mol.rb".
Laden Sie die Bibliothek.
mol.rb
require 'gr'
require 'gr3'
require 'numo/narray'
require 'optparse'
Dieses Mal habe ich die Befehlszeilenoption ernsthaft hinzugefügt.
#Befehlszeilenoptionen
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
Lesen Sie die Datei. Leider konnte ich den xyz
Parser nicht finden, wie es bei Ruby oft der Fall ist. Also habe ich die Daten aus der Datei selbst gelesen. Es ist jedoch sehr einfach, da das ursprüngliche Dateiformat einfach ist.
Die Farbe und Größe für die Anzeige von Atomen speichert das GR3-Modul Standardwerte für Konstanten. Verwenden wir diese also.
#Datei lesen
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] }
Dies ist der Teil, der tatsächlich angezeigt wird. Ich habe dies unter Bezugnahme auf das Beispiel von GR.jl geschrieben.
GR.initgr
GR.setviewport(0, 1, 0, 1)
#Videodatei speichern
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
#Ende des Speicherns der Datei
GR.endprint if options[:save_path]
GR3.terminate
das ist alles. Das gesamte Skript ist hier gist.
Ich habe das Gefühl, dass der Radius ein wenig klein ist, also versuchen Sie, den Radius mit "-r 2" zu verdoppeln.
ruby mol.rb -r2 dna.xyz
Wenn Sie einen Bildschirm wie diesen sehen, sind Sie erfolgreich!
Lassen Sie uns auch andere Moleküle anzeigen. Hier werde ich die Struktur von Hämoglobin als berühmtes Protein zeigen.
Laden Sie die Datei herunter, die die Struktur von Hämoglobin beschreibt, wenn kein Sauerstoff aus der Japan Protein Data Bank Japan (PDBj) gebunden ist.
Laden Sie hier eine Datei im PDB-Dateiformat "pdb2hhb.ent" herunter. Verwenden Sie ein Tool namens Open Babel, um dies in eine Datei im Format "xyz" zu konvertieren.
#Installieren Sie Open Babel
sudo apt install openbabel
Konvertieren Sie pdb2hhb.ent in eine xyz-Datei.
obabel pdb2hhb.ent -O hb.xyz
Zeigen Sie es dann als "mol.rb" an.
ruby mol.rb hb.xyz -s 1000 -o hemoglobin.mp4 -t hemoglobin
Der Prozess der Konvertierung in GIF-Animationen war verwirrend, aber in Wirklichkeit wird ein etwas schöneres Video gespeichert. Aktivieren Sie die Option "-s", um das Video sauberer zu machen.
Wenn Sie dagegen "-s" kleiner machen, schmeckt das Video wie ein Punktbild. Am Beispiel der DNA sieht es so aus.
Es ist wie eine Szene aus einem Spiel von gestern. Es tut mir Leid. Es gibt keine besondere akademische Bedeutung ...
Nun, sogar in Ruby gibt es tatsächlich eine Möglichkeit, die Struktur des Moleküls anzuzeigen ~
Ich habe darüber gesprochen. Sie fragen sich vielleicht "Warum Ruby?", Aber lassen Sie uns nicht darüber nachdenken.
Last but not least bin ich froh, die dreidimensionalen Strukturdaten auf diese Weise anzeigen zu können, aber ich bin mit der molekularen Struktur nicht besonders vertraut und bin ein kompletter Amateur. Zum ersten Mal habe ich auch das xyz-Format und das PDF-Dateiformat kennengelernt.
Wenn Sie also etwas falsch finden, können Sie es im Kommentarbereich ** darauf hinweisen. Ich freue mich darauf, mit Dir zu arbeiten.
Dieser Artikel ist vorbei
Recommended Posts