Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt

Einführung

IGV ist eine Software namens Genome Browser. Sie können verschiedene Dateien durchsuchen, z. B. die BAM-Datei des ausgerichteten Lesevorgangs, die Bettdatei, in der die Positionsinformationen zum Genom kommentiert sind, und die GFF3-Datei, in der die genetischen Informationen geschrieben sind. Wenn Sie sich mit Bioinformatik befasst haben, kennen Sie diese Software wahrscheinlich.

Github IGV Repository IGV.png

Obwohl es sich um ein solches IGV handelt, kann es einige Zeit dauern, es zu bedienen, während Sie mit der Maus klicken.

Es macht Spaß, die Ergebnisse visuell zu überprüfen, und ich denke, es ist eine sehr wichtige Aufgabe, aber andererseits möchte ich auch Routineaufgaben so weit wie möglich automatisieren. Erwägen Sie daher, das IGV über eine Programmiersprache zu betreiben.

Betreiben Sie IGV über Socket-Kommunikation

Tatsächlich kann IGV über die Socket-Kommunikation von Port 60151 aus betrieben werden.

In der Menüleiste befindet sich unter Ansicht> Einstellungen eine Registerkarte mit dem Namen Erweitert. Wenn Port aktivieren nicht aktiviert ist, überprüfen Sie hier.

image.png

Sie können dann Port 60151 verwenden, um das IGV mithilfe der Socket-Kommunikation zu steuern.

Liste der Befehle, mit denen IGV betrieben werden kann

Ich habe die offizielle Referenz mit DeepL-Übersetzung ins Japanische übersetzt.

Command Description
new Erstellen Sie eine neue Sitzung. Entfernen Sie alle Spuren mit Ausnahme der Standard-Genom-Annotation.
load file Lesen Sie Daten oder Sitzungsdateien. Geben Sie den vollständigen Pfad oder die URL an, die durch Kommas getrennt sind.
collapse trackName Reduziert den angegebenen Tracknamen. Wenn Sie trackName nicht angeben, werden alle Tracks reduziert.
echo In Beantwortung"echo "Kehrt zurück.(zum Test)
exit Beenden Sie die IGV-Anwendung.
expand trackName Erweitert den angegebenen Tracknamen. Wenn trackName nicht angegeben ist, werden alle Tracks erweitert.
genome genomeIdOrPath Wählen Sie ein Genom anhand der ID aus oder laden Sie das Genom (indiziertes Fasta) aus dem angegebenen Pfad.
goto locus or listOfLoci Scrollen Sie zu einem einzelnen Ort oder einer durch Leerzeichen getrennten Liste von Orten. Wenn eine Liste bereitgestellt wird, werden diese Sitzpositionen in einer geteilten Bildschirmansicht angezeigt. Jede im IGV-Suchfeld gültige Syntax ist in Ordnung.
goto all Scrollen Sie zur Ansicht des gesamten Genoms.
group option Nur Ausrichtungsspur. Gruppenausrichtungen mit einer der folgenden Optionen: STRAND, SAMPLE, READ_GROUP, LIBRARY, FIRST_OF_PAIR_STRAND, TAG, PAIR_ORIENTATION, MATE_CHROMOSOME, SUPPLEMENTARY, MOVIE, ZMW, HAPLOTYPE, READ_ORDER, NONE, BASE_AT_POS
region chr start end Definieren Sie eine Region von Interesse, die von zwei Loci umgeben ist (z. B. Region chr1 100 200).
maxPanelHeight height Legt die Anzahl der vertikalen Pixel (Höhe) für jedes im Bild enthaltene Bedienfeld fest. Bilder, die mit Portbefehlen oder Batch-Skripten erstellt wurden, sind nicht auf die auf dem Bildschirm angezeigten Daten beschränkt. Mit anderen Worten, Sie können das gesamte Bedienfeld in Ihr Bild aufnehmen, nicht nur das, was im scrollbaren Bildschirmbereich angezeigt wird. Der Standardwert für diese Einstellung ist 1000. Erhöhen Sie diesen Wert, um mehr Daten anzuzeigen, oder verringern Sie diesen Wert, um kleinere Bilder zu erstellen.
setLogScale(true or false)
setSleepInterval ms Legt die Verzögerungszeit (Ruhezeit) in Millisekunden fest. Das Schlafintervall wird zwischen aufeinanderfolgenden Befehlen aufgerufen.
snapshotDirectory path Legen Sie das Verzeichnis fest, in das das Bild geschrieben werden soll.
snapshot filename Speichern Sie einen Schnappschuss des IGV-Fensters in einer Bilddatei. Wenn der Dateiname weggelassen wird, wird eine PNG-Datei mit dem Dateinamen geschrieben, der basierend auf der Flugbahn generiert wurde. Wenn Dateiname angegeben wird, bestimmt die Dateinamenerweiterung das Format der Bilddatei..png、.jpg oder.Muss svg sein.
sort option locus Sortieren Sie Titel mit ausgerichteten oder segmentierten Kopienummern. Der Wert, der auf die Option für die segmentierte Kopiennummer angewendet wird, lautet(1)VERSTÄRKUNG UND LÖSCHUNG segmentierter Kopienummern,(2)Die Ausrichtungsspuren POSITION, STRAND, BASE, QUALITY, SAMPLE, READGROUP, INSERSTSIZE, FIRSTOFPAIRSTRAND, MATECHR, READORDER und READNAME. Bei dieser Option wird die Groß- und Kleinschreibung nicht berücksichtigt. Sie können den Ort angeben, um eine einzelne Position oder einen einzelnen Bereich zu definieren. Wenn Sie keine Option angeben, wird die Sortierung basierend auf dem angezeigten Bereich oder der Mittelposition des angezeigten Bereichs durchgeführt.
squish trackName Squish den angegebenen trackName. trackName ist optional, andernfalls werden alle Anmerkungsspuren gequetscht.
viewaspairs trackName Ausrichtungsspur-Anzeigemodus"View as pairs "Einstellen.
preference key value Setzt die Einstellung mit dem Namen key vorübergehend auf den angegebenen Wert. Diese Einstellung ist nur gültig, bis das IGV heruntergefahren wird.

Manipulieren Sie IGV über die Programmiersprache

Java

Da IGV eine in Java entwickelte Software ist, werden offizielle Beispiele auch in Java geschrieben.

  Socket socket = new Socket("127.0.0.1", 60151);
  PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
  BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  out.println("load na12788.bam,n12788.tdf");
  String response = in.readLine();
  System.out.println(response);

  out.println("genome hg18");
  response = in.readLine();
  System.out.println(response);

  out.println("goto chr1:65,827,301");
  //out.println("goto chr1:65,839,697");
  response = in.readLine();
  System.out.println(response);

  out.println("snapshotDirectory /screenshots");
  response = in.readLine();
  System.out.println(response);

  out.println("snapshot");
  response = in.readLine();
  System.out.println(response);

R

Was ist nun mit anderen Programmiersprachen als Java? Wenn Sie R verwenden, bin ich nicht sehr vertraut damit, aber Sie sollten es verwenden, da eine Bibliothek für den Betrieb von IGV aus der Umgebung von Bioconductor bereitgestellt wird. Eine kleine Suche trifft die Software igvR. Dies scheint igv.js zu verwenden, sodass das IGV möglicherweise nicht automatisch auf dem Desktop betrieben wird ...

Python

Es ist ein etwas altes Skript, aber igv.py wurde von Brent Pedersen erstellt, der kürzlich energisch Bioinformatik-Tools mit der Nim-Sprache entwickelt hat. -Es gibt ein Tool namens playground / blob / master / igv / igv.py). Dies ist eine kleine Bibliothek, die die Socket-Kommunikation oben umschließt.

Ruby

Ich mag Ruby. ** Nani Nani? Gibt es nur wenige Werkzeuge? Dann kannst du es selbst machen! ** Unter Bezugnahme auf das obige Skript von Brent Pedersen habe ich ein Tool namens ruby-igv erstellt, mit dem IGV in der Ruby-Sprache ausgeführt werden kann. Jetzt können Sie IGV problemlos über die Ruby-Sprache bedienen.

https://github.com/kojix2/ruby-igv

Die Verwendung ist wie folgt.

igv = IGV.new

igv.load 'na12788.bam'
igv.genome 'hg18'
igv.go 'goto chr1:65,827,301'
igv.save 'image.png'

Es ist immer noch ein frisch gemachtes Werkzeug. Wenn Sie auf Ecken und Kanten stoßen, Fehler finden oder Anfragen finden, melden Sie diese bitte an issue auf Github. Pull-Anfragen sind natürlich auch willkommen.

abschließend

Die Aufmerksamkeit beschränkt sich nicht nur auf die Bioinformatik, sondern auch darauf, wie vorhandene Tools kombiniert werden können, um den Zweck zu erreichen, und wie die Tools beherrscht werden. Und wenn Sie ein Werkzeug herstellen, denken Sie möglicherweise, dass Zweck und Mittel umgekehrt sind. Aber in gewissem Sinne denke ich, dass es eine sehr egoistische und engstirnige Denkweise ist. Je mehr Menschen mehr Tools erstellen und veröffentlichen, desto bequemer, expandierender und erfolgreicher wird die Welt. Lassen Sie uns Tools freier erstellen und veröffentlichen. (Weil es nicht Ruby sein muss)

Recommended Posts

Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt
Die Geschichte eines Othello-Spiels vom Kommunikationstyp mit Scala.
Die Geschichte der Einführung der Ajax-Kommunikation in Ruby
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
So testen Sie eine private Methode und verspotten sie teilweise in Java
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
Iterative Verarbeitung von Ruby mit jeder Methode (finde die Summe von 1 bis 10)
So erstellen Sie eine bequeme Methode, die Generika und eine funktionale Schnittstelle verwendet
[Ruby on Rails] So melden Sie sich nur mit Ihrem Namen und Passwort mit dem Gem-Gerät an
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
[Ruby] Verwendung der gsub-Methode und der sub-Methode
Ausgabe der Verwendung der Slice-Methode
Eine Geschichte über das Erstellen eines Builders, der den Builder erbt
[Ruby-Grundlagen] Verwendung der Slice-Methode
Übergeben Sie ein Argument an die Methode und erhalten Sie das Ergebnis der Operation als Rückgabewert
[Ruby] Schneiden Sie eine Zeichenfolge mit der Slice-Methode aus
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Die Geschichte, Dr. Orchid mit LINE BOT zu machen
[Swift5] Wie man komplexes JSON analysiert und den Index des Elements erhält, das die Bedingung erfüllt
Die Geschichte, wie ein Docker-Container mit GitHub-Aktionen in die GitHub-Paketregistrierung und den Docker-Hub verschoben wird
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Ich möchte eine Methode aufrufen und die Nummer zählen
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
So verbinden Sie eine Tabelle ohne DBFlute und SQL
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
So überprüfen Sie die Erweiterung und Größe der hochgeladenen Dateien
[jsoup] So erhalten Sie die gesamte Dokumentation
Umgang mit verschiedenen Versionen von rbenv und Ruby
[Apache Tomcat] Die Geschichte der Verwendung von Apache OpenWebBeans zum Aktivieren von CDI
[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
Eine Geschichte, die ein Ruby-Anfänger gemacht und einen LINE BOT veröffentlicht hat, der die Zugzeit in 2 Monaten erzählt
So erstellen Sie eine Methode
So erstellen Sie eine JAR-Datei und eine War-Datei mit dem Befehl jar
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
So legen Sie die IP-Adresse und den Hostnamen von CentOS8 fest
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten