LFTVideo v1.76 / LFTVideoAnalyse v0.96 -------------------------------------- Ein spezialisiertes Tool zum kleinschrittigen Einschätzen eines Videos einer lösungsfokussierten Therapie, sowie ein spezialisiertes Tool zur Auswertung der entstehenden Verlaufs-Daten. (c) 2003 Andreas Krüger Pläne/Ideen/TODOs ----------------- Wenn Zeit dafür da wäre, könnte man noch viel machen... * Verfeinerungen nach erster Testphase ** Was könnte noch besser sein? ** Ergonomie-Verbesserungen... ** Was fehlt? * Auswertungen: ** 6x6 Übergangsmatrix ** 6x5 Übergangsmatrix - für um aufeinanderfolgend identische verkürzten Datensatz ** 6x6x6 Übergangsmatrix (zB "KNL TL KL" oder "TL KNL TNL") für Prozessforschung der Dreier-Zusammenhänge * Auswertungsprogramm zum Vergleich der Inter-Rater-Reliabilität Tabelle1, Tabelle2 sollen miteinander verglichen werden, ausgegeben werden sollen die nicht übereinstimmenden Einschätzungen ** step 0: Klient, Rater1, Rater2 Dateien existieren? Einlesen. ** step 1: Zeitabstand bestimmen (N.B.: NUR, wenn niemals PAUSE gedrückt wurde!) *** 1) bis ~1.2 Sekunden (oder Slider?) Abstand Nachbarn finden *** 2) wenn gleiche Einschätzung, dann Zeitabstand merken *** 3) Mittelwert +- Varianz/N --> systematische zeitliche Differenz SZD dafür Statistics-Package aus Diplomarbeit! ** step2 : Paare finden *** 1) nächste Nachbarn aus tab2 nach tab1 sortieren *** 2) Intervall langsam grösser werden lassen, bis alle aus Tab2 weg *** 3) Ausgabe der NICHT übereinstimmenden Momente * Funktionalitäten: ** Speichern...unter - falls mal zB versehentlich von CD gestartet ** Bei überlappenen Zeitbereichen durch Verstellen der zaehlwerk-Slider (in schon geratete "rote" Abschnitte) wäre die sicherste Variante ein LÖSCHEN der Restdaten! Wenn run-restart, dann checken, ob schon gerateter Bereich betroffen, (dann evtl. Abfrage und bei OK:) den ganzen Rest löschen; die Folge wäre Neu-Rating ab dort! (oder bei Cancel einfach wieder: RatingBeginnOderPause(false)) !!! --> Das wäre auch gut, um zB eine zweite Hälfte ganz NEU zu raten, ohne die erste Hälfte zu verlieren ** im KonfigDialog Wiederherstellen der alten Eingaben bei Cancel - oder etwa Cancel ganz elimieren ? ... oder egal? ** alle 5 Minuten automatisch speichern? ** direkter SQL Export ** Text-Parsing, so dass sich zB keine Umlaute, Sonderzeichen einschleichen (im Moment würde das richtig viel Probleme in den Dateinamen produzieren!) ** Datenbrowser, um nicht nur immer die allerletzte Einschätzung ändern zu können ** alle qDebug's entfernen ** unter Linux zum Laufen kriegen * Weitere Ideen: ** Mhhhm, Ahaa - Tasten, die abgespeichert werden und danach automatisch die vorherige Auswahl weitergehen lassen - eigentlich nun gelöst durch die ganz feine Zeitauflösung... ** völlig freie Konfiguration der Tasten durch .ini/.cfg Datei (nur falls mal eine Anfrage eines anderen Rating-Projektes käme) *** Button-Beschriftungen *** Button-Acceleratoren (Tastatur-Schema) *** RatingSkala *** maxtime->MinutenSlider (im Moment 70 Minuten) Ideen / PROBLEM für Auswerter: * Irgendeine Heap-Nichtfreigabe am Ende des Programmes * in Verlaufstabelle nicht nur 1234567 anzeigen, sondern auch Spalte mit TL, TNL, TU, KL, KNL, ... * evtl. diese History auf Infoseite anzeigen * Programm, um mehrere ÜbgWahrsch-Matrizen zu addieren ** Absolut- oder Relativwerte addieren? ** ganzen Ordner einlesen? History ------- Analysator v0.96 und v1.76 (16.6.2003) -------------------------------------- ca. 1 Stunde * Dokumentation (s.u.) Analysator v0.95 und v1.75 (16.6.2003) -------------------------------------- ca. 3 Stunden Speicherroutinen für die Auswertungen * class AuswertungSpeichern : public DatenSpeichern ** Speichert einige (14) selektierte Werte zur Weiterverarbeitung * void LFTVideoAnalyseDialog::SpeichereAuswertung(QString dieEndung) ** AuswertungSpeichern->speichereDaten(...) die 14 Werte ** mittels class QStringSpeichern : public DatenSpeichern werden die UeW-Matrizen (in erst in einen String transferiert und dann) gespeichert: *** Speichere uew Übergangswahrscheinlichkeiten *** Speichere uew2 Dreier-Übergangswahrscheinlichkeiten Analysator v0.93 und v1.74 (15.6.2003) -------------------------------------- ca. 6.5 Stunden --> ganz viele Auswertungen * Grossteil der Auswertungen in void VerlaufsAuswertung::DatenAnalysieren(RatingVerlauf* derVerlauf) ein kleinerer Teil wird aber direkt für die Darstellung erst errechnet: void VerlaufsAuswertung::DatenAnzeigen(LFTVideoAnalyseDialog* diag) * DatenAnalysieren(RatingVerlauf* derVerlauf) ** SummenTabelle: Wie oft kommt jede der 7 Einschätzungen? (Absolutwerte) ** uew: Übergangsmatrix 7x7 (Absolutwerte) ** uew2: Übergangsmatrix 7x7x7 (Absolutwerte) ** einzelne bedingte Wahrscheinlichkeiten: TL->KL / TL->Kxx TL->KNL->KL / TL->KNL->Kxx KNL->TNL / KNL->Txx TL->KNL->TNL / TL->KNL->Txx evtl. sind die Gesamtheiten (Nenner) für die Dreier so NICHT sinnvoll (= zu klein)? * 1.Ordnung (einzelne Sinneinheiten) zusätzlich nun: ** Passungswerte KlientUnterXXX/TherapeutUnterXXX * 2.Ordnung (Übergänge) ** Übergangsmatrix Absolutwerte ** Übergangsmatrix Relativwerte ** Anzahl Übergänge & Prozentsumme nur als Kontrollwerte * 3. Ordnung "Dreier"übergänge, zB TL -> KL -> TNL (kodiert: [1][4][5] ) ** Absolut- und Relativwerte (normiert mit Gesamtanzahl aller Dreier) ** Anzahl- und Prozentsumme als Checksummen ** rechter Scrollbalken ist an linken gekoppelt * selektierte Übergangswahrscheinlichkeiten mit Unter-Gesamtheiten ** s.o. * Verlaufsdaten ** Die Rohdaten des gesamten Verlaufes sind nun scrollbar anzuschauen ** bevor "Verkürze Datensatz um aufeinanderfolgend gleiche...", wird die ganze Tabelle obendrein nach unten kopiert, damit man vergleichen kann wie der Datensatz vor und nach der Verkürzung aussieht * Infoseite: Zeigt die Kodierung an. Analysator v0.91 und v1.73 (8.-9.6.2003) ---------------------------------------- ca. 15 Minuten * schon den ersten Copy-Paste Fehler gefunden und behoben: TeilAnzahl(%) * WICHTIG wäre auch: Bessere Benennungen finden für die relevanten Aggregatwerte!!! Analysator v0.9 und v1.72 (8.-9.6.2003) --------------------------------------- ca 8.5 Stunden * Hauptidee: ** Summe über alle 6(7) Kategorien (TL, TNL, TU, KL, KNL, KU, NIX): Wer/Wie, Anzahl, Gesamtdauer ** jeweils identische aufeinanderfolgende Sinneinheiten zusammenclustern *** und dann nochmal Summe über alle 6 Kategorien * Liest Verlaufs-Datei ein und wertet sie aus, indem aggregierte Werte kreiert werden ** und schreibt auf Tastendruck die Ergebnisse (vorläufig) in Datei (primitiv-Format) * Zweitens ist ein Verkürzer implementiert, der Folgen von gleichen Einschätzungen kürzt: ** aus 1 1 2 3 4 4 2 7 7 ** wird 1 2 3 4 2 7 ** Sinneinheit endet dann natürlich mit dem letzten/spätesten Zeitpunkt derselben Einschätzung * Genauere Doku folgt noch (müde um 6:37 morgens!) * WARNUNG: ** Keinem der Ergebnisse ist zu trauen !!! ** Schnell runtergeschrieben, unübersichtlich, unge-check-t ** muss unbedingt mit manuellen Rechnungen verglichen werden!!! ** Keinerlei Schutz gegen Fehlbedienung ** HOFFENTLICH hatten die Veränderungen keinen Einfluss auf LFTVideo.exe! * Nun muss ausserdem genaue Auswahl her, welche Werte überhaupt relevant sind v1.71 (14.5.2003) ----------------- ca. 5 Minuten * auch der Minutencounter wird nun sekündlich aktualisiert, denn manchmal - bei hoher Rechnerbelastung (Video!) - bleiben die Display-Updates mal eine Sekunde aus. v1.7 (12.5.2003) ---------------- ca. 7 Stunden * Zeitkonzept komplett und überall durch Millisekunden ergänzt, damit schnelle Tastendrücke keinen Klick-Datenverlust erzeugen ** MinSec existiert weiter, nur ist "Sec" nicht mehr nicht INTEGER sondern double ** default Konstructor erwartet *** entweder MinSec(mm, ss.xxxxx) mit xxxxx Nachkomma-Sekunden *** oder MinSec(mm, ss, ttt) mit ttt Tausendstel Sekunden ** milliseconds() liefert gerundete Tausendstel Sekunden zurück ** in Klasse LFTVideoDialog werden Tausendstel nur aus dem laufendem Counter geholt, gespeichert werden im Ruhezustand nur die ganzen Sekunden. ** ausführlich getestet. Hoffentlich läuft's in der Praxis auch! ** alte Daten (mm:ss kodiert) können problemlos eingelesen werden. Toll... * Sonstiges (viele TODOs erstellt und abgearbeitet) ** etliche TODOs hinterlassen, die beim Lesen des Sourcecodes auffielen ** einige qDebugs auskommentiert ** Konsequentere Realisierung von MinSec::operator- liefert nun auch MinSec zurück, was zur Folge hat, dass Differenzen nun so ausgedrückt werden: Dauer=(Zeitpunkt - ZeitpunktDavor).toSecs(); ** auch .cpp Dateien haben nun Kommentar-Header ** speichereGesamtenRatingVerlauf (stream) ist nun migriert aus der class VerlaufSpeichern nach class RatingVerlauf ** In KonfigDialog nun auch Uhrzeit-Anzeige ** In _Info.dat wird nun wesentlich mehr über die Session gespeichert: Zusätzlich nun *** (Ende-)Uhrzeit *** letzte Sinneinheit endet bei ... *** die Anzahl Tasten *** Mittlere Dauer einer Sinneinheit *** ob es eine weitergeführte Session war *** ob zwischendurch PAUSE gedrückt wurde oder nicht. ** Beim Weitermachen mit alten Daten werden nun die Anzeigen "Anzahl" und "MittlDauer" auch auf die alten Werte gesetzt ** Keine zu langen Quellcode-Zeilen mehr ** void initNullSetzungen() erzeugt Neubeginn von Verlauf und GUI bei a) Anfang oder b) nach Speichern ** Algorithmus-Idee für Inter-Rater-Vergleich formuliert (s.o.) ** _Verlauf.dat: Am Ende jeder Zeile wird nun nochmal ausgegeben: TAB Minuten TAB Sekunden TAB Millisekunden (leichter in Excel etc. zu verarbeiten als "00:00.000") ** Nun gibt es eine Idiotenbox für diejenigen, die vergessen am Ende zu speichern. Lebt im Haupt-Destruktor und ist scheinbar recht sicher - es speichert einfach ungefragt alles ab unter siko_date_time_info.dat und siko_date_time_verlauf.dat und beendet dann das Programm v1.63 (12.5.2003) ----------------- 3 Stunden * (im Kopf) Auswertungsplanung für Rater-Übereinstimmungs-Vergleich * 2 Ideen wie MinSec auf Millisekunden erweitert werden könnte ** int millisecs -> Idee verworfen ** Idee Sekunden als "float" und Überarbeitung des ausgedruckten Quelltextes v1.63 (11.5.2003) ----------------- ca. 1 Stunde * Excel Vergleich zweier Ratings (durch 2 Rater) auf summarische Übereinstimmung v1.63 (9.5.2003) ---------------- ca. 1 Stunde * erste summarische Excel Auswertung v1.63 (6.5.2003) ---------------- ca. 1 Stunde * verschiedene Tastaturschemata probiert, nun 546 213 7 0 * Layout Verbesserungen wg. anderer Windows-Farb- und Grössen Schemata v1.62 (2.5.2003) ---------------- 1 Stunde * Hauptbuttons näher zusammen * neuer Button 7: nix (wenn gar nichts passiert) * Accelerators müssen manuell gesetzt werden, wenn Buttonbeschriftung geändert wird (Buttons TNL, KNL) v1.6 (30.4.2003 Walpurgistag) ----------------------------- ca. 7 Stunden * Kleinigkeiten optimiert (Layout, Grösse, etc.) * Anzahl-Anzeige und durchschnittl. Dauer-Anzeige * zählwerk-Problem nun wirklich (!) gelöst, hatte geschlampt mit "int vergangeneSekunden()", nun gibt es auch "int vergangeneZeitInSekunden()" * Accelerators 123,5,789, Alt-R * gute TAB-Reihenfolgen * LCD leuchtet Rot, wenn Slider in "verbotenen" Bereich bewegt werden, sonst passiert aber nix (keine Löschung der späteren Einschätzungen, etc.) * countdown-Schalter * Mein Name und eine Nachricht im Konfigurationsdialog * Neue Speichern/Lesen Routine, in der nun auch in JEDER Zeile Klient und Rater erwähnt sind, damit alle Verlaufsdateien später einfach konkateniert werden können: per copy *_verlauf.dat ..\alleVerlaeufe.dat oder type *_verlauf.dat > ..\alleVerlaeufe.dat * Quelltextheader * Dokumentation v1.5 (29.4.2003) ---------------- ca. 6.5 Stunden * Layout ist nun hochkant * Datenspeichern elegant gelöst: ** class DatenSpeichern als Generalisierung *** class VerlaufSpeichern abgeleitet davon *** class InfoSpeichern abgeleitet davon ** vererbt werden FileÖffnen, Fehlerabfragen, Meckerboxen, etc. ** Verfeinerung durch virtuals DatenSpeicherStream, DatenLeseStream * Einlesen des Verlaufes nun möglich: * Passiert auf Wunsch nach Schliessen des Konfig-Dialogs mithilfe ** bool MinSec::liesVonTextStream(QTextStream &s) ** bool RatingVerlauf::liesGesamtenRatingVerlauf (QTextStream &s); ** bool DatenSpeichern::leseDaten(QString filename, QString was) * Korrigieren Schalter ** Implementation der Funktionalität * Zaehlwerk ** (Hoffentlich) Problem repariert v1.4 (29.4.2003) ---------------- ca. 5 Stunden * Erste Variante von zeitverlauf.h/cpp verworfen * zeitverlauf.h/cpp komplett neu erstellt ** enum RatingSkala ** class MinSec enthält Zeiten (incl. rechnen, vergleichen, string, ...) ** struct IntervallErgebnis transportiert Ergebnisse ** map MinSec2Rating als Container für die 2Tupel ** class RatingVerlauf enthält Container und Memberfunktionen darauf * getestet, ins restliche Programm implementiert * Redesign der Haupt-GUI: RatingButtonGroup ** enthält nun alle RatingKnöpfe ** in der selben Reihenfolge wie enum RatingSkala * KorrekturButton ** wird umgefärbt, etc. ** wenn Korrektur, dann kein Einfügen, aber Korrektur noch nicht gebaut * RatingEnde: ** Speichern des Verlaufes (Grobversion fertig!) *** Im Moment als Unicode ... wahrscheinlich nicht schlau... ** disablen einiger Knöpfe ** reset des Zählwerks ** Löschung des Klientencodes, etc. ** Löschung des gesamten Verlaufes * eine Menge TODOs identifiziert v1.3 (28.4.2003) ---------------- ca. 4 Stunden * Experimente mit QList und QDict * Experimente mit STL map <- dafür entschieden * Experimente mit QTime * erste Variante von zeitverlauf.h/cpp erstellt und ausführlich getestet v1.2 (25.4.2003) ---------------- ca. 3 Stunden * SitzungsKonfigurationDialog GUI: ** Implementation diverser Verbote und Hinweise zur Benutzersteuerung ** HoverOver Hilfetexte für alle Elemente * LFTVideoDialog GUI: ** HoverOver Hilfetexte für alle Elemente ** Ab-/Anschaltung diverser Buttons etc. je nach Ablaufphase ** die Zeitanzeige: *** über Slider die Startzeit einstellbar *** nach Run sekündliche Aktualisierung * Dokumentation v1.1 (25.4.2003) ---------------- ca. 6 Stunden * "Anforderungsanalyse.xls" nach Buch Lang/Lockemann "Datenbanken" Welche Daten, welche Operationen sind vonnöten? * Verbesserung der GUI LFTVideoDialog * Erstellung der GUI SitzungsKonfigurationDialog Am Anfang der Session muss ein eindeutiger Dateiname erfragt werden, dafür ein kompletter abgesicherter Dialog * Verbindung der zweiten mit der ersten GUI v1.0 (16.4.2003) ---------------- ca. 5 Stunden * Vorgespräch, Bedarfsanalyse * Grobentwurf der GUI für die Einschätzung LFTVideoDialogBase Prototyp der GUI übergeben * Datenstruktur-Vorentwurf "datenstruktur.txt"