Hauptseite | Klassenhierarchie | Alphabetische Liste | Übersicht | Auflistung der Dateien | Datenstruktur-Elemente | Datei-Elemente

auswertung.cpp

gehe zur Dokumentation dieser Datei
00001 
00002 // auswertung.cpp
00003 // LFTVideo.cpp  v1.73
00004 //               9.6.2003
00005 // 
00006 // für weitere Informationen:
00007 // siehe header von main.cpp
00008 
00009 #include "auswertung.h"
00010 #include <qlineedit.h>
00011 #include <qtable.h>
00012 #include <qarray.h>
00013 #include <qpushbutton.h>
00014 
00015 
00016 void VerlaufsAuswertung::DatenAnalysieren(RatingVerlauf* derVerlauf) {
00017         Verlauf=derVerlauf;
00018         SummenTabelle.resize(RatingSkalaMax+1);
00019         for (int i=0; i<=RatingSkalaMax; i++) 
00020                 SummenTabelle[i]=AnzahlDauer(0,0);
00021         
00022         int j,k;
00023     for (i=0; i<8; i++){
00024                 for (j=0; j<8; j++){
00025                         uew[i][j]=0;
00026                         for (k=0; k<8;k++){
00027                                 uew2[k][i][j]=0;
00028                         }
00029                 }
00030         }
00031         // QString temp; temp="%1"; temp=temp.arg(uew[1][2]);
00032         // qDebug(temp);
00033         RatingSkala vorvorherigeEinsch=null, vorherigeEinsch, aktuelleEinsch;
00034 
00035         IntervallErgebnis interv;
00036         MinSec2Rating::iterator it=Verlauf->Sinneinheiten.begin();
00037         for ( ; it!=Verlauf->Sinneinheiten.end(); it++){
00038                 interv=Verlauf->RatingAuslesen(it);
00039                 aktuelleEinsch=interv.Einschaetzung;
00040                 if(aktuelleEinsch>0){
00041                         SummenTabelle[aktuelleEinsch].Anzahl++;
00042                         SummenTabelle[aktuelleEinsch].Dauer += interv.Dauer;
00043                 }
00044                 vorherigeEinsch=interv.EinschaetzungDavor;
00045 
00046                 uew[vorherigeEinsch][aktuelleEinsch] ++;
00047 
00048                 uew2[vorvorherigeEinsch][vorherigeEinsch][aktuelleEinsch] ++;
00049 
00050                 vorvorherigeEinsch = vorherigeEinsch;
00051         }
00052         /*QString temp;
00053         for (i=1; i<=RatingSkalaMax; i++) {
00054                 temp="%1 %2 %3"; 
00055                 temp=temp.arg(i).arg(SummenTabelle[i].Anzahl).arg(SummenTabelle[i].Dauer);
00056                 qDebug(temp);
00057         }*/
00058 
00059         AnzahlTherapeut=0; AnzahlKlient=0;
00060         DauerTherapeut=0; DauerKlient=0;
00061         for (i=1; i<=3; i++){
00062                 AnzahlTherapeut += SummenTabelle[i].Anzahl; // 1=TL, 2=TNL, 3=TU
00063                 DauerTherapeut += SummenTabelle[i].Dauer;
00064 
00065                 AnzahlKlient += SummenTabelle[i+3].Anzahl;  // 4=KL, 5=KNL, 6=KU
00066                 DauerKlient += SummenTabelle[i+3].Dauer;
00067         }
00068 
00069         /*
00070         for (i=0; i<8; i++){
00071                 for (j=0; j<8; j++){
00072                         temp="uew(%1 --> %2) = %3"; temp=temp.arg(i).arg(j).arg(uew[i][j]);
00073                         qDebug(temp);
00074                 }
00075         }
00076         */
00077 
00078         AnteilTherapeutAnzahl = AnzahlTherapeut / (double)GesamtAnzahl(); // 1
00079         AnteilTherapeutDauer = DauerTherapeut / GesamtDauer(); // 2
00080         AnteilKlientAnzahl = AnzahlKlient / (double)GesamtAnzahl(); // 3
00081         AnteilKlientDauer = DauerKlient / GesamtDauer(); // 4 
00082 
00083         LoesfokUnteranzahlTherapeut = SummenTabelle[1].Anzahl / (double) AnzahlTherapeut; // 5
00084         LoesfokUnterdauerTherapeut = SummenTabelle[1].Dauer / DauerTherapeut; // 6
00085         LoesfokUnteranzahlKlient = SummenTabelle[4].Anzahl / (double) AnzahlKlient; // 7
00086         LoesfokUnterdauerKlient = SummenTabelle[4].Dauer / DauerKlient; // 8
00087 
00088         // Passungswerte Klient/Therapeut:
00089                 // Quotient der Unteranzahlen
00090         double HundertProzentKlient, ProzentTeilAnzahlKlient;
00091         double HundertProzentTherapeut, ProzentTeilAnzahlTherapeut;
00092         HundertProzentKlient=AnzahlKlient; 
00093         ProzentTeilAnzahlKlient=
00094                 100*(double)SummenTabelle[4].Anzahl/HundertProzentKlient;
00095         HundertProzentTherapeut=AnzahlTherapeut; 
00096         ProzentTeilAnzahlTherapeut=
00097                 100*(double)SummenTabelle[1].Anzahl/HundertProzentTherapeut;
00098         PassungAnzahl = 
00099                 runden( ProzentTeilAnzahlKlient/ProzentTeilAnzahlTherapeut * 10000)/10000;
00100 
00101         // Quotient der Unterdauern %
00102         HundertProzentTherapeut=DauerTherapeut;
00103         HundertProzentKlient=DauerKlient; 
00104         double ProzentTeilDauerKlient=100 * SummenTabelle[4].Dauer / HundertProzentKlient;
00105         double ProzentTeilDauerTherapeut=100 * SummenTabelle[1].Dauer / HundertProzentTherapeut;
00106         PassungDauer = ProzentTeilDauerKlient/ProzentTeilDauerTherapeut;
00107         PassungDauer = runden(PassungDauer * 10000)/10000;
00108         
00109         // spezielle Übergangswahrscheinlichkeiten:
00110         double nenner;
00111 
00112         // TL->KL / TL->Kxx
00113         nenner=uew[1][4] + uew[1][5] + uew[1][6];
00114         AufnahmeLoesFok=(nenner!=0)?(uew[1][4] / nenner):(0);
00115 
00116         // TL->KNL->KL     /      TL->KNL->Kxx
00117         nenner=uew2[1][5][4]+uew2[1][5][5]+uew2[1][5][6];
00118         verspaetAufnahmeLoesFok=(nenner!=0)?(uew2[1][5][4] / nenner):(0);
00119 
00120         // KNL->TNL / KNL->Txx
00121         nenner=uew[5][1] + uew[5][2] + uew[5][3];
00122         TherapNLAnpassung=(nenner!=0)?(uew[5][2] / nenner):(0);
00123 
00124         // TL->KNL->TNL   /  TL->KNL->Txx
00125         nenner=uew2[1][5][1] + uew2[1][5][2] + uew2[1][5][3];
00126         TherapFrustration=(nenner!=0)?(uew2[1][5][2] / nenner):(0);
00127 };
00128 
00129 
00130 void VerlaufsAuswertung::DatenAnzeigen(LFTVideoAnalyseDialog* diag){
00131         // Gesamt Einzelanzeigen
00132         QString temp="%1";      temp=temp.arg(GesamtDauer());
00133         diag->DauerGesamt->setText(temp);
00134         temp="%1";      temp=temp.arg(GesamtAnzahl());
00135         diag->AnzahlGesamt->setText(temp);
00136         temp="%1";      temp=temp.arg(GesamtAnzahl()-1);
00137         diag->AnzahlUebergaenge->setText(temp);
00138         temp="%1";      temp=temp.arg(Durchschnittsdauer());
00139         diag->mittlereDauerGesamt->setText(temp);
00140     // Therapeut Einzelanzeigen
00141         temp="%1"; temp=temp.arg(AnzahlTherapeut);
00142         diag->AnzahlTherapeut->setText(temp);
00143         temp="%1"; temp=temp.arg(DauerTherapeut);
00144         diag->DauerTherapeut->setText(temp);
00145         temp="%1";      temp=temp.arg(DauerTherapeut/AnzahlTherapeut);
00146         diag->mittlereDauerTherapeut->setText(temp);
00147     // Klient Einzelanzeigen
00148         temp="%1"; temp=temp.arg(AnzahlKlient);
00149         diag->AnzahlKlient->setText(temp);
00150         temp="%1"; temp=temp.arg(DauerKlient);
00151         diag->DauerKlient->setText(temp);
00152         temp="%1";      temp=temp.arg(DauerKlient/AnzahlKlient);
00153         diag->mittlereDauerKlient->setText(temp);
00154     
00155     // Tabelle Teil-Anzahlen und -Dauern Therapeut
00156         //                                             AnteilTherapeutAnzahl
00157         temp="%1%"; temp=temp.arg(runden( 1000*(double)AnzahlTherapeut/GesamtAnzahl() )/10);
00158         diag->TabSum->setText(0,2,temp);
00159         //                                             AnteilTherapeutDauer
00160         temp="%1%"; temp=temp.arg(runden( 1000*(double)DauerTherapeut/GesamtDauer() )/10);
00161         diag->TabSum->setText(0,6,temp);
00162         // Tabelle Teil-Anzahlen und -Dauern Klient
00163         //                                             AnteilKlientAnzahl
00164         temp="%1%"; temp=temp.arg(runden(1000*(double)AnzahlKlient/GesamtAnzahl() )/10);
00165         diag->TabSum->setText(3,2,temp);
00166         //                                             AnteilKlientDauer
00167         temp="%1%"; temp=temp.arg(runden(1000*(double)DauerKlient/GesamtDauer() )/10);
00168         diag->TabSum->setText(3,6,temp);
00169 
00170         // Tabelle restliche Werte
00171         for (int i=1; i<=7; i++) {
00172                 // Anzahl #
00173                 temp="%1"; temp=temp.arg(SummenTabelle[i].Anzahl);
00174                 diag->TabSum->setText(i-1,0,temp);
00175 
00176                 // Anzahl %
00177                 double ProzentAnzahl=100*(double)SummenTabelle[i].Anzahl/(double)GesamtAnzahl();
00178                 ProzentAnzahl = runden(ProzentAnzahl * 10)/10;
00179                 temp="%1%"; temp=temp.arg(ProzentAnzahl);
00180                 diag->TabSum->setText(i-1,1,temp);
00181 
00182                 // UnterAnzahl %
00183                 double HundertProzent=(i<=3)?AnzahlTherapeut:AnzahlKlient; 
00184                 double ProzentTeilAnzahl=100*(double)SummenTabelle[i].Anzahl/HundertProzent;
00185                 ProzentTeilAnzahl = runden(ProzentTeilAnzahl * 10)/10;
00186                 temp="%1%"; temp=temp.arg(ProzentTeilAnzahl);
00187                 diag->TabSum->setText(i-1,3,temp);
00188 
00189                 // Dauer #
00190                 temp="%1"; temp=temp.arg(SummenTabelle[i].Dauer);
00191                 diag->TabSum->setText(i-1,4,temp);
00192 
00193                 // Dauer %
00194                 double ProzentDauer=100 * SummenTabelle[i].Dauer / GesamtDauer();
00195                 ProzentDauer = runden(ProzentDauer * 10)/10;
00196                 temp="%1%"; temp=temp.arg(ProzentDauer);
00197                 diag->TabSum->setText(i-1,5,temp);
00198 
00199                 // UnterDauer %
00200                 HundertProzent=(i<=3)?DauerTherapeut:DauerKlient; 
00201                 double ProzentTeilDauer=100 * SummenTabelle[i].Dauer / HundertProzent;
00202                 ProzentTeilDauer = runden(ProzentTeilDauer * 10)/10;
00203                 temp="%1%"; temp=temp.arg(ProzentTeilDauer);
00204                 diag->TabSum->setText(i-1,7,temp);
00205         }
00206         // "nix" UnterWerte überschreiben
00207         diag->TabSum->setText(6,3,"");
00208         diag->TabSum->setText(6,7,"");
00209 
00210         temp="%1"; temp=temp.arg(PassungAnzahl);
00211         diag->UnteranzahlenQuotient->setText(temp);
00212         temp="%1"; temp=temp.arg(PassungDauer);
00213         diag->UnterdauernQuotient->setText(temp);
00214 
00215         // Zweier- und Dreier Übergänge:
00216         int j,k, zeile; 
00217         double prozent, prozentsumme=0, prozentDreier, prozentsummeDreier=0;
00218         long anzahlDreier=0;
00219         for (i=1; i<8; i++){
00220                 for (j=1; j<8; j++){
00221                         temp="%1"; temp=temp.arg(uew[i][j]);
00222                         diag->TabUew->setText(i-1,j-1,(uew[i][j]==0?"":temp) );
00223                         prozent=runden(uew[i][j] / (double)(GesamtAnzahl() -1 ) * 1000)/10;
00224                         prozentsumme+=prozent;
00225                         temp="%1%"; temp=temp.arg(prozent);
00226                         diag->TabUewProzent->setText(i-1,j-1,(uew[i][j]==0?"":temp) );
00227 
00228                         for (k=1; k<=7; k++){
00229                                 temp="%1"; temp=temp.arg(uew2[k][i][j]);
00230                                 zeile=(i-1)*7 + k-1;
00231                                 diag->TabUew2->setText(zeile,j-1,(uew2[k][i][j]==0?"":temp) );
00232                                 anzahlDreier+=uew2[k][i][j];
00233 
00234                                 // Prozenttabelle:
00235                                 prozentDreier=runden(1000*(uew2[k][i][j]/((double)GesamtAnzahl()-2)))/10;
00236                                 temp="%1%"; temp=temp.arg(prozentDreier);
00237                                 zeile=(i-1)*7 + k-1;
00238                                 diag->TabUew2Prozent->setText(zeile,j-1,(uew2[k][i][j]==0?"":temp) );
00239                                 prozentsummeDreier+=prozentDreier;
00240                         }
00241                 }
00242         }
00243 
00244         for (i=0; i<=7; i++){
00245                 diag->TabSum->adjustColumn(i); // zufälligerweise sind das auch 8 Spalten
00246                 diag->TabUew->adjustColumn(i);
00247                 diag->TabUewProzent->adjustColumn(i);
00248                 diag->TabUew2->adjustColumn(i);
00249                 diag->TabUew2Prozent->adjustColumn(i);
00250         }
00251         temp="%1%"; temp=temp.arg(prozentsumme);
00252         diag->Prozentsumme->setText(temp );
00253 
00254         temp="%1"; temp=temp.arg(anzahlDreier);
00255         diag->AnzahlDreier->setText(temp );
00256 
00257         temp="%1%"; temp=temp.arg(prozentsummeDreier);
00258         diag->ProzentsummeDreier->setText(temp );
00259 
00260         temp="%1%"; temp=temp.arg(runden(AufnahmeLoesFok*1000)/10);
00261         diag->AufnahmeLoesFok->setText(temp);
00262         temp="%1%"; temp=temp.arg(runden(verspaetAufnahmeLoesFok*1000)/10);
00263         diag->verspaetAufnahmeLoesFok->setText(temp);
00264         temp="%1%"; temp=temp.arg(runden(TherapNLAnpassung*1000)/10);
00265         diag->TherapNLAnpassung->setText(temp);
00266         temp="%1%"; temp=temp.arg(runden(TherapFrustration*1000)/10);
00267         diag->TherapFrustration->setText(temp);
00268 
00269         // ganzen Verlauf einfach anzeigen:
00270         diag->TabVerlauf->setNumRows(GesamtAnzahl()+1);
00271         RatingSkala vorherigeEinsch=null, aktuelleEinsch=null, nachherEinsch;
00272         long zaehler=0;
00273         IntervallErgebnis interv;
00274         MinSec2Rating::iterator it=Verlauf->Sinneinheiten.begin();
00275         for ( ; it!=Verlauf->Sinneinheiten.end(); it++){
00276                 interv=Verlauf->RatingAuslesen(it);
00277                 nachherEinsch=interv.Einschaetzung;
00278                 temp="%1"; temp=temp.arg(it->first.toQString());
00279                 diag->TabVerlauf->setText(zaehler,0,temp);
00280 
00281                 temp="%1"; temp=temp.arg(vorherigeEinsch);
00282                 diag->TabVerlauf->setText(zaehler,1,vorherigeEinsch==0?"":temp);
00283                 temp="%1"; temp=temp.arg(aktuelleEinsch);
00284                 diag->TabVerlauf->setText(zaehler,2,aktuelleEinsch==0?"":temp);
00285                 temp="%1"; temp=temp.arg(nachherEinsch);
00286                 diag->TabVerlauf->setText(zaehler,3,nachherEinsch==0?"":temp);
00287                 temp="%1"; temp=temp.arg(interv.Dauer);
00288                 diag->TabVerlauf->setText(zaehler,4,interv.Dauer==0?"":temp);
00289                 vorherigeEinsch=aktuelleEinsch;
00290                 aktuelleEinsch=nachherEinsch;
00291 
00292                 zaehler++;
00293         }
00294 
00295         for (i=0; i<=4; i++){
00296                 diag->TabVerlauf->adjustColumn(i);
00297                 diag->TabVerlaufAlt->adjustColumn(i);
00298         }
00299 
00300 }

Erzeugt am Mon Jun 16 18:08:23 2003 für LFTVideo von doxygen 1.3.2