AlexanderMattheis / rna-playground

A bioinformatics project to visualize the inner workings of RNA
1 stars 0 forks source link

Feng-Doolittle #4

Closed martin-raden closed 6 years ago

martin-raden commented 7 years ago
AlexanderMattheis commented 7 years ago

Idee statt TextArea: Sequenz-Inputs mit einem kleinen (+)-Button einfügen: https://jsfiddle.net/x5wu7gsy/

Wäre das auch was? Finde das intuitiver und komfortabler als eine TextArea. Hat noch Zeit.. Algorithmus noch nicht angefangen, schreibe noch an den Div-Inputs...

martin-raden commented 7 years ago

mhh... hast recht, dass das dann ein bissl konformer zu den anderen seiten wäre.

da wir eh kein FASTA format geplant hatten, kannst du's so machen, wenn du willst.

AlexanderMattheis commented 7 years ago

Danke! :)

AlexanderMattheis commented 6 years ago

Bin noch am Bug-Fixen des Interfaces, außerdem muss ich noch ein Repräsentativeres Beispiel für Feng-Doolittle schreiben (man sieht schon ordentlich was, aber das Interface bugt noch rum und die Formel zum Umwandeln in Distanzen ist auch noch nicht optimal eingestellt von den Parametern). Heute habe ich auch eine Library für den Baum eingebunden, furchtbar... keine Redraw-Funktion bzw. funktionierende Clear-Funktion, also Doktor Google anschmeißen etc ...)

"upgma rechnen und resultierenden baum visualisieren (knoten labeln) (und im NEWICK format angeben); rechenschritte am ende der seite einblenden mit entsprechender überschrift" Der Baum wird bereits gezeichnet und die Start-Distanz-Tabelle (bevor UPGMA angewandt wird) angegeben. Was meintest du mit "rechenschritte am ende...". Soll ich alle Zwischen-Distanz-Tabellen speichern und angeben?

Beim Baum weiß ich nur nicht, wie das mit den Lizenzen ist http://www.jsphylosvg.com/ habe einfach mal die Lizenz:

"This software is distributed under the GPL License.

Copyright (c) Samuel Smits, samsmits@gmail.com All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the Samuel Smits nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE ....E."

in das zugehörige js-File kopiert. Damit ist: "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer." glaube ich genug getan... :)

Insgesamt hat das Schreiben des Algorithmus, doch noch etwas länger gedauert, als zuvor gedacht. Hatte das anders in Errinnerung (vom letzten Mal schreiben)... Der Code ist aber auch diesmal deutlich kürzer ausgefallen, da ich paar Sachen besser gelöst habe. Außerdem habe ich heute noch einen Fehler in der Implemntierung der Distanz-Formel gefunden. :(

AlexanderMattheis commented 6 years ago

<<bevor UPGMA angewandt wird) angegeben. Was meintest du mit "rechenschritte am ende...". Soll ich alle Zwischen-Distanz-Tabellen speichern und angeben?>> Also, Problem ist die Rendering Time, vielleicht kriege ich das aber hin, indem ich die Sachen erstmal auf non-Visible setzt oder so... Glaube, aber immer noch nicht, dass ich die Zwischentabellen angeben soll, daher warte ich erstmal auf deine Antwort... (wäre nämlich nicht ohne das Ganze (möglicherweise)) Vielleicht meintest auch, dass ich die Formeln Live generieren sollte, aber das wird auch ordentlich Performance kosten...

martin-raden commented 6 years ago

na da ist ja einiges passiert. :)

bzgl. lizenz: passt soweit

bzgl. rechenschritte, jup wär gut die einzelnen tables anzuzeigen, damit man das auch nachrechnen kann. die "wachsenden" bäume braucht man nicht.

bzgl. rechenzeit: die table generierst du ja eh irgendwie oder? du könntest sie also dann direkt in html-code konvertieren und in einer string variable (appending) speichern. diese variable pushst du dann mit knockout in die seite. geht das? :) nur ne idee...

AlexanderMattheis commented 6 years ago

Danke für die Antwort. Jo, ich schaue mal mit den Tabellen... Weiß, aber nicht ob des so klappt... Wie sieht eigentlich mit Sum-Of-Pairs-Scoring fürs MSA aus. Das fehlt irgendwie auf der Seite oder nicht?

AlexanderMattheis commented 6 years ago

Mir ist aufgefallen, dass du die Formel geändert hast. Im Original ist aber wirklich s(x,x) und nicht s(x,y)... Das war schon richtig, Mismatches betrachtet man nicht. "Ähnliche Formeln" habe ich auch im Netz gefunden gehabt und Mismatches werden wirklich bewusst nicht betrachtet. Soll ich die Implementierung ändern? Dann müsste ich den Unit-Test neuschreiben und ausrechnen... (siehe hochgeladene PDF unter Docs) und ich weiß gar nicht, ob dann die Formel noch so gut klappt. Im PDF von 1996 (welches du mir gegeben hast) ist des auch so...

Deswegen hatte ich es auch zuerst falsch implementiert... Die Formel wirkt scheinbar unsymmetrisch mit s(x,x). Ist aber immer noch symmetrisch, wenn man es nachrechnet (falls ich mich nicht verechnet habe^^). Das hatte mich zuerst irretiert.

martin-raden commented 6 years ago

also im FD-1996 steht in formel 3 eindeutig 'M(ai,bj)Na(i)Nb(j)' was in unserem fall 's(x,y)Na(x)Nb(y)' entspricht.. denn die 'M' matrix ist die subsitutionsmatrix die matches und mismatches abdeckt..

daher plädiere ich für eine überarbeitung der implementierung! ;)

woher genau hast du die "match-only" variante?

martin-raden commented 6 years ago

bzgl: SOP: mhh... grundlegend optimieren wir den ja nicht. könnten aber natürlich den SOP des finalen FD-alignments mit angeben, falls wir noch andere MSA ansätze implementieren.

würd ich erstmal aufsparen, bis der rest vom FD steht. aber gut es im auge zu haben!

AlexanderMattheis commented 6 years ago

Also, bei mir in der Formel 3 steht wirklich M(ai,aj)Na(i)Nb(j) im FD-1996. Ich habe dir mal einen Screenshot geschickt.^^ Kann es natürlich ändern, kein großes Ding... Aber welche Formel ist nun korrekt?^^

martin-raden commented 6 years ago

wie gesagt: 'M' handled sowohl match als auch mismatch, denn es ist die amino acid substitution matrix...

(substitution==ersetzung) != match-only

(siehe comment oben)

😄 ergo: ERSETZEN! 😄

AlexanderMattheis commented 6 years ago

Jo, ok danke für die schnelle Antwort. Ich weiß, schon was eine Sub-Matrix macht. Es ist aber etwas seltsam, wenn da (ai, aj) im Argument steht, statt (ai, bj)... naja :)

martin-raden commented 6 years ago

uaks.. finally I got it.. sorry.. das aj hab ich bisher immer komplett überlesen!!! bin mir aber sicher, dass das ein schreibfehler im manuscript ist!

sorry ob meiner blindheit! ;)

AlexanderMattheis commented 6 years ago

Ich habe schon gedacht, ich verstehe die Notation falsch oder so ... :)

AlexanderMattheis commented 6 years ago

Jetzt muss ich noch die Formel korrigieren und Unit-Test neurechnen. Die Tabellen können eingeblendet werden, ich mache das aber nicht am Ende der Seite, sondern durch den Knopf. Der Knopf verhindert auch ewige Renderzeiten (hoffe das passt so^^). Warum hat das solange gedauert? Ich hatte wieder dasselbe Problem wie bei AEP (Fehler beim aktualisieren der Tabellen). Darum habe ich ja auch kein Observable Array verwendet bei AEP für die einzelne Iterationsdaten.

Ich habe aber diesmal rausbekommen, "woran" es lag. Das Logische mit den Tabellen ging schnell, aber den "Knockout-Tabellen-Aktualisierung-Bug?" fixen hat den halben Tag heute in Anspruch genommen, naja besser als bei AEP mit 3 Tagen oder so... Die haben anscheinend ein Problem mit xD-Observable-Arrays für x > 2 (also z.B. für Arrays von Matrizen). Ich kann den Fehler jetzt reproduzieren, weiß aber nicht 100% wieso der auftritt. Der Fehler macht nämlich keinen Sinn. Und ich habe die ganze Zeit an der falschen Stelle gesucht und alles inzwischen ausprobiert.

Aber herje, jetzt klappt es.

Hier die Screenshots für alle bei denen der Bug oder das Problem in Zukunft auftritt: (Minimal-Beispiel) Mit Problem custom_bindings_bug

Ohne Problem custom_bindings_no_bug Eine Reihe einer Matrix und remainingClusters haben selbe Länge, trotzdem wird beim Aktuallisieren Message: Cannot read property 'length' of undefined at if (e... auftauchen. Das heißt $root.output.distanceMatrices()[$parentContext$index()][$index()] ist nicht definiert... was aber falsch ist. Hatte mal auch ein Vergleichbares Problem bei jemand anderen im Netz gesehen, finde aber den Link nicht mehr... (als ich wegen AEP gesucht hatte)

AlexanderMattheis commented 6 years ago

Ich habe es geblickt. Juhu!!! Es war meine Unwissenheit darüber, wie Knockout "under the hood" genau funktioniert (bzw. was es alles kann): http://knockoutjs.com/documentation/deferred-updates.html Problem war, dass sobald die Matrix nur einen einzigen neuen Wert bekommt, sofort der Code in der KO-Schleife neuausgeführt wird. Das ist aber ineffizient und führt zu Fehlern. Man muss also Verzögerungen einbauen: konkret die Matrix und remainingClusters auf Deferred setzen.^^ Dann gibt es keine Probleme mehr, weil dann erst wenn beide (Matrix und remainingClusters) neue Werte erhalten haben, neu gezeichnet wird. Das erklärt aber nicht wieso es mir AEP damals nicht geklappt hat... :( Hoffe es hilft jemand, was ich hier hinterlassen habe...

AlexanderMattheis commented 6 years ago

Mit Feng-Doolittle fertig, würde ich sagen + Paar Extra-Features und jeder Menge Unit-Tests. 😄

martin-raden commented 6 years ago

wunderbar! bin gerade am rumspielen. hier noch ein paar finale fragen:

AlexanderMattheis commented 6 years ago

Danke für den Comment. 🥇

"warum hat dein beispiel "mismatch -1" scores? das machts von den scores her eher hässlich. mit "+1" kommt ähnliches raus."

Achso, ich habe bloß irgendeines genommen, welches schön lang ist und an dem man gut sieht, dass es funktioniert. Die Zahlen und Werte kann man anpassen...

"pack mal bitte "Hint 2" mit in den ersten hint, um da platz zu sparen." jup, kann ich machen.

"wärs möglich das final alignment (oder alle) jeweils in der inputreihenfolge anzugeben? dazu müsstest du ja "nur" den clustername parsen und mit "-a" umwandeln, um aus dacb ein (3,0,2,1) zu erhalten, mit dem du dann die zeilen durchtauschst. glaub das würde die lesbarkeit erhöhen (clusternamen danach entsprechend wieder anpassen)." Etwas Ähnliches hatte ich für das finale Alignment drin gehabt, habe es aber wieder rausgemacht aus irgendeinem Grund, der mir gerade nicht einfällt. Ich mache es dann wieder rein...

Jetzt gehe ich Essen...

martin-raden commented 6 years ago

Guten Appetit! 😄

bzgl. clusternamen/-reihenfolge: bau das bitte gleich zentral für alle zwischenalignments ein, dann spart man sich das postprocessing und hat auch in den zwischenlösungen klar verständliche alignments.

Danke!

AlexanderMattheis commented 6 years ago

"Guten Appetit! 😄" Danke :)

"bzgl. clusternamen/-reihenfolge: bau das bitte gleich zentral für alle zwischenalignments ein, dann spart man sich das postprocessing und hat auch in den zwischenlösungen klar verständliche alignments." Jo, ich schau mal. Ich arbeite grade noch T-Coffee weiter, damit falls Fragen (z.B. Paper-Anfragen) auftauchen, ich noch während dieser Woche nachfragen kann (um z.B. nach dem Wochenende fertig zu sein).

martin-raden commented 6 years ago

final issues:

AlexanderMattheis commented 6 years ago

Fertig. War noch unterwegs und jetzt gehe ich noch essen (wieder). Alle Punkte abgearbeitet. :) Mit h1 war das nicht so toll^^ - meine Hauptüberschrift war leider h1, also Hauptüberschrift in h5 umgewandelt und CSS angepasst an RNA-Playground... Ihr habt überall h2 verwendet für die Unterüberschriften in den einzelnen Algorithmen... Das habe ich übenommen, hatte nämlich h4 drin...

martin-raden commented 6 years ago

supernice! danke!