Zeigen Sie die dreidimensionale Struktur von DNA und Protein in Ruby-im Fall von GR.rb an

Einführung

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.

Xyz-Dateien in GR.rb anzeigen

video.gif

Ich habe ein Skript ausgeführt, das eine xyz-Datei anzeigt, die die dreidimensionale Struktur der DNA in GR.rb beschreibt.

Holen Sie sich die xyz-Datei

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 ein Ruby-Skript

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.

Lauf

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

output.gif

Wenn Sie einen Bildschirm wie diesen sehen, sind Sie erfolgreich!

Lassen Sie uns die dreidimensionale Struktur von Hämoglobin zeigen

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.

output.gif

Wenn Sie dagegen "-s" kleiner machen, schmeckt das Video wie ein Punktbild. Am Beispiel der DNA sieht es so aus.

output.gif

Es ist wie eine Szene aus einem Spiel von gestern. Es tut mir Leid. Es gibt keine besondere akademische Bedeutung ...

Schließlich

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

Zeigen Sie die dreidimensionale Struktur von DNA und Protein in Ruby-im Fall von GR.rb an
[Rails] Unterschied im Verhalten zwischen Delegat und has_many-through bei Eins-zu-Eins-zu-Viele
[Swift] Der Vorgang des Registrierens des in "UI Segmented Control" in Realm ausgewählten Elements und Anzeigen der Registrierungsdaten.
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Erstellen Sie weitere Registerkarten und Fragmente im Fragment von BottomNavigationView
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Betrachten wir die Bedeutung von "Stream" und "Collect" in der Stream-API von Java.
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
Die Frühjahrsvalidierung war in der Reihenfolge von Form und BindingResult wichtig