00001
00002
00003
00004
00005
00006
00007
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
00032
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
00053
00054
00055
00056
00057
00058
00059 AnzahlTherapeut=0; AnzahlKlient=0;
00060 DauerTherapeut=0; DauerKlient=0;
00061 for (i=1; i<=3; i++){
00062 AnzahlTherapeut += SummenTabelle[i].Anzahl;
00063 DauerTherapeut += SummenTabelle[i].Dauer;
00064
00065 AnzahlKlient += SummenTabelle[i+3].Anzahl;
00066 DauerKlient += SummenTabelle[i+3].Dauer;
00067 }
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 AnteilTherapeutAnzahl = AnzahlTherapeut / (double)GesamtAnzahl();
00079 AnteilTherapeutDauer = DauerTherapeut / GesamtDauer();
00080 AnteilKlientAnzahl = AnzahlKlient / (double)GesamtAnzahl();
00081 AnteilKlientDauer = DauerKlient / GesamtDauer();
00082
00083 LoesfokUnteranzahlTherapeut = SummenTabelle[1].Anzahl / (double) AnzahlTherapeut;
00084 LoesfokUnterdauerTherapeut = SummenTabelle[1].Dauer / DauerTherapeut;
00085 LoesfokUnteranzahlKlient = SummenTabelle[4].Anzahl / (double) AnzahlKlient;
00086 LoesfokUnterdauerKlient = SummenTabelle[4].Dauer / DauerKlient;
00087
00088
00089
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
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
00110 double nenner;
00111
00112
00113 nenner=uew[1][4] + uew[1][5] + uew[1][6];
00114 AufnahmeLoesFok=(nenner!=0)?(uew[1][4] / nenner):(0);
00115
00116
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
00121 nenner=uew[5][1] + uew[5][2] + uew[5][3];
00122 TherapNLAnpassung=(nenner!=0)?(uew[5][2] / nenner):(0);
00123
00124
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
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
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
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
00156
00157 temp="%1%"; temp=temp.arg(runden( 1000*(double)AnzahlTherapeut/GesamtAnzahl() )/10);
00158 diag->TabSum->setText(0,2,temp);
00159
00160 temp="%1%"; temp=temp.arg(runden( 1000*(double)DauerTherapeut/GesamtDauer() )/10);
00161 diag->TabSum->setText(0,6,temp);
00162
00163
00164 temp="%1%"; temp=temp.arg(runden(1000*(double)AnzahlKlient/GesamtAnzahl() )/10);
00165 diag->TabSum->setText(3,2,temp);
00166
00167 temp="%1%"; temp=temp.arg(runden(1000*(double)DauerKlient/GesamtDauer() )/10);
00168 diag->TabSum->setText(3,6,temp);
00169
00170
00171 for (int i=1; i<=7; i++) {
00172
00173 temp="%1"; temp=temp.arg(SummenTabelle[i].Anzahl);
00174 diag->TabSum->setText(i-1,0,temp);
00175
00176
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
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
00190 temp="%1"; temp=temp.arg(SummenTabelle[i].Dauer);
00191 diag->TabSum->setText(i-1,4,temp);
00192
00193
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
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
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
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
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);
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
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 }