Statistics
| Branch: | Revision:

testing-framework / R / benchmark.r @ 8526ae8c

History | View | Annotate | Download (10.6 KB)

1
#Hilfsfunktionen
2

    
3
filter <- function(selektor,wert){
4
    if(selektor){
5
        return(wert)
6
    }else{
7
        return(0)
8
    }
9
}
10

    
11
zusammenfassen <- function(selektoren,werte){
12
    #Punkte der Bibliothek für diese Phase nach Testen
13
    phase <- mapply(filter,selektoren,werte)
14
    #Summe zurückgeben
15
    return(sum(phase))
16
}
17

    
18
zusammenfassenFuerAllePhasen <- function(werte,selektoren){
19
    ret <- lapply(selektoren,zusammenfassen,werte)
20
    return(t(ret))
21
}
22

    
23

    
24

    
25
#Liest die Logdatei zu dem übergebenen Basisnamen ein
26
leseBart <- function(basisname){
27
    bart <- read.csv(file=paste("/home/jonas/Bachelorarbeit/bart2/stat/",basisname,"_log.txt",sep=""),header=F)
28
    return(bart)
29
}
30
leseAlvar <- function(basisname){
31
    alvar <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/alvar/2.0.0/alvar-2.0.0-sdk-linux64-gcc44/build/build_gcc44_release/sample/stat/",basisname,"_log.txt",sep=""),header=F)
32
    return(alvar)
33
}
34
leseAruco <- function(basisname){
35
    aruco <- read.csv(file=paste("/home/jonas/Dokumente/Studium/Bachelorarbeit/aruco/aruco-1.2.5/stat/",basisname,"_log.txt",sep=""),header=F)
36
    return(aruco)
37
}
38

    
39
#Funktionen für das Parsen
40

    
41
parse <- function(text){    
42

    
43
    # Extrahiere Zahl (mit Prozentzeichen um die Markerzahlen auszuschließen
44
    position <- regexpr("[[:digit:]|[:punct:]]{1,}[[:blank:]]%",text,perl=TRUE)
45
    zahl <- regmatches(text,position)
46
    # Entferne Prozentzeichen
47
    position <- regexpr("[[:digit:]|[:punct:]]{1,}",zahl,perl=TRUE)
48
    zahl <- regmatches(zahl,position)
49

    
50
    if(length(zahl) == 0){
51
        return("-")
52
    }
53
    
54
    #Ausgabeformat (in das Latex-Dokument): Zahl mit genau einer Nachkommastelle
55
    zahl <- as.numeric(zahl)
56

    
57
    return(zahl)
58
}
59

    
60
# gewichtungsZeile: Eine Liste, die an den Positionen 1 bis 8 den Wahrheitswert enthält, ob die Prozentzahl berücksichtigt wird und an der Position 9 die Gruppengröße angibt.
61
# benchmarkErgebnisse: Eine Liste, die für alle Auflösungen eine Liste mit den aktuellen Punkten für alle Phasen enthält.
62
parseZeile <- function(stringTabelle,basisname,bezeichnung,gewichtungsZeile){
63

    
64
   #print("Parse Zeile:")
65
   #print(stringTabelle)
66
   #print(basisname)
67
   #print(bezeichnung)
68
   #print(gewichtungsZeile)
69

    
70
    # Parsen
71
    stringTabelle <- within(stringTabelle,zahlen <- parse(V1))
72
    
73
    # Berechne Gewichtungsfaktor (aus den Normierungen)
74
    gewichtungsZeile[1:8] <- unlist(as.logical(gewichtungsZeile[1:8]))
75
    divisor <- length(Filter(function(x) x,gewichtungsZeile[1:8])) # Anzahl der TRUE
76
    divisor <- divisor*as.numeric(gewichtungsZeile[9])
77

    
78
    # Teile Werte durch Divisor um die Punkte zu erhalten, die in die Kategorien eingehen
79
    if(divisor > 0){
80
        punkte <- sapply(stringTabelle$zahlen,function(x){x/divisor})
81
    }else{
82
        # divisor = 0 bedeutet, dass die Punkte in keine Phase eingehen
83
        punkte <- c(0,0,0,0,0,0,0,0,0)
84
    }
85
    return(punkte[1:9])
86
}
87

    
88
leseUndParseBa <- function(zeile){
89
    # Eingaben umwandeln
90
    basisname <- as.character(unlist(zeile[1]))
91
    bezeichnung <- as.character(unlist(zeile[2]))
92
    gewichtungsZeile <- zeile[3:11]  
93

    
94
    cat("### BART:  Lese und verarbeite",bezeichnung,"###\n")
95
    # Einlesen
96
    stringTabelle <- leseBart(basisname)
97
    # Parsen
98
    ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile)
99
    return(ret)
100
}
101

    
102
leseUndParseAl <- function(zeile){
103
    # Eingaben umwandeln
104
    basisname <- as.character(unlist(zeile[1]))
105
    bezeichnung <- as.character(unlist(zeile[2]))
106
    gewichtungsZeile <- zeile[3:11]  
107

    
108
    cat("### ALVAR:  Lese und verarbeite",bezeichnung,"###\n")
109
    # Einlesen
110
    stringTabelle <- leseAlvar(basisname)
111
    # Parsen
112
    ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile)
113
    
114
    return(ret)
115
}
116

    
117
leseUndParseAr <- function(zeile){
118
    # Eingaben umwandeln
119
    basisname <- as.character(unlist(zeile[1]))
120
    bezeichnung <- as.character(unlist(zeile[2]))
121
    gewichtungsZeile <- zeile[3:11]  
122

    
123
    cat("### ARUCO:  Lese und verarbeite",bezeichnung,"###\n")
124
    # Einlesen
125
    stringTabelle <- leseAruco(basisname)
126
    # Parsen
127
    ret <- parseZeile(stringTabelle, basisname, bezeichnung,gewichtungsZeile)
128
    
129
    return(ret)
130
}
131

    
132
# Wrapperfunktionen um Error wegen leerer Dateien abzufangen
133
leseUndParseBaWrapper <- function(zeile){
134
    ret <- try(leseUndParseBa(zeile))
135
    #Teste ob ein Fehler auftrat (vgl. ?try)
136
    if(inherits(ret,"try-error")){
137
        cat(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n"))
138
        return(c(0,0,0,0,0,0,0,0,0))
139
    }
140
    return(ret)
141
}
142

    
143
leseUndParseAlWrapper <- function(zeile){
144
    ret <- try(leseUndParseAl(zeile))
145
    #Teste ob ein Fehler auftrat (vgl. ?try)
146
    if(inherits(ret,"try-error")){
147
        cat(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n"))
148
        return(c(0,0,0,0,0,0,0,0,0))
149
    }
150
    return(ret)
151
}
152

    
153
leseUndParseArWrapper <- function(zeile){
154
    ret <- try(leseUndParseAr(zeile))
155
    #Teste ob ein Fehler auftrat (vgl. ?try)
156
    if(inherits(ret,"try-error")){
157
        print(paste("WARNUNG: Konnte",as.character(unlist(zeile[2])),"nicht auswerten. Nehme an, dass keine Marker erkannt wurden.\n"))
158
        return(c(0,0,0,0,0,0,0,0,0))
159
    }
160
    return(ret)
161
}
162

    
163
teste <- read.csv(file="/home/jonas/Dokumente/Studium/Bachelorarbeit/evaluation/tests.csv",header=FALSE)
164
print(teste)
165

    
166
# Umwandlung in eine Liste von Listen
167
testeL <- split(teste,row(teste))
168

    
169
# ermittle gewichtete Punkte
170
bartPunkte <- data.frame(t(mapply(leseUndParseBaWrapper,testeL)))
171
alvarPunkte <- data.frame(t(mapply(leseUndParseAlWrapper,testeL)))
172
arucoPunkte <- data.frame(t(mapply(leseUndParseArWrapper,testeL)))
173

    
174
# Umrechnung in Phasen
175
bartDaten <- lapply(bartPunkte,zusammenfassenFuerAllePhasen,teste[3:10])
176
alvarDaten <- lapply(alvarPunkte,zusammenfassenFuerAllePhasen,teste[3:10])
177
arucoDaten <- lapply(arucoPunkte,zusammenfassenFuerAllePhasen,teste[3:10])
178

    
179
# In Frames umwandeln
180
bartDaten <- do.call(rbind,bartDaten)
181
bartDaten <- data.frame(t(bartDaten))
182

    
183
alvarDaten <- do.call(rbind,alvarDaten)
184
alvarDaten <- data.frame(t(alvarDaten))
185

    
186
arucoDaten <- do.call(rbind,arucoDaten)
187
arucoDaten <- data.frame(t(arucoDaten))
188

    
189
# Numerisch machen
190
bartDaten <- lapply(bartDaten,as.numeric)
191
alvarDaten <- lapply(alvarDaten,as.numeric)
192
arucoDaten <- lapply(arucoDaten,as.numeric)
193

    
194
# Normalisierung, so dass für jede Phase 0 bis 100 Punkte erreicht werden können
195
divisoren <- c(16.667,33.333,131.667,79.167,119.444,137.778,110.0,171.944)
196
divisorenFrame <- data.frame(divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren,divisoren)
197
bartDaten <- bartDaten / divisorenFrame * 100
198
alvarDaten <- alvarDaten / divisorenFrame * 100
199
arucoDaten <- arucoDaten / divisorenFrame * 100
200

    
201
# Beschriftung ergänzen
202
zeilenBeschriftungen <- c("Graubild","Entstörung","Binarisierung","Segmentierung","Kanten und Eckenerkennung","Kandidatensuche","Normalisierung","Identifikation")
203
bartDaten <- cbind(zeilenBeschriftungen,bartDaten)
204
alvarDaten <- cbind(zeilenBeschriftungen,alvarDaten)
205
arucoDaten <- cbind(zeilenBeschriftungen,arucoDaten)
206

    
207
print(bartDaten[c(1,2,3,4),])
208
print(alvarDaten[c(1,2,3,4),])
209
print(arucoDaten[c(1,2,3,4),])
210

    
211
# Zusammenführen
212
tabelle1080p <- merge(bartDaten[c(1,2,3,4)],alvarDaten[c(1,2,3,4)],by=c("zeilenBeschriftungen"))
213
tabelle1080p <- merge(tabelle1080p,arucoDaten[c(1,2,3,4)],by=c("zeilenBeschriftungen"))
214
tabelle720p  <- merge(bartDaten[c(1,5,6,7)],alvarDaten[c(1,5,6,7)],by=c("zeilenBeschriftungen"))
215
tabelle720p  <- merge(tabelle720p,arucoDaten[c(1,5,6,7)],by=c("zeilenBeschriftungen"))
216
tabelle360p  <- merge(bartDaten[c(1,8,9,10)],alvarDaten[c(1,8,9,10)],by=c("zeilenBeschriftungen"))
217
tabelle360p  <- merge(tabelle360p,arucoDaten[c(1,8,9,10)],by=c("zeilenBeschriftungen"))
218

    
219
# Zeilen wieder in die Reihenfolge bringen, in der die Phasen beschrieben wurden
220
positionen <- c(3,2,1,8,6,5,7,4)
221
tabelle1080p <- tabelle1080p[positionen,]
222
tabelle720p <- tabelle720p[positionen,]
223
tabelle360p <- tabelle360p[positionen,]
224

    
225
# Umwandlung in Latextabellenobjekte
226
zeilen = nrow(tabelle1080p)
227
#print(zeilen)
228
if(zeilen > 32){
229
    # erste Seiten
230
    latex1080p <- xtable::xtable(tabelle1080p[1:32,])
231
    latex720p  <- xtable::xtable(tabelle720p[1:32,])
232
    latex360p  <- xtable::xtable(tabelle360p[1:32,])
233
#    print(latex1080p)
234
    # Ausgabe in die Latexdateien
235
    print(latex1080p,file="../text/tabellen/benchm_tabelle1080p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
236
    print(latex720p,file="../text/tabellen/benchm_tabelle720p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
237
    print(latex360p,file="../text/tabellen/benchm_tabelle360p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
238

    
239
    # zweite Seiten
240
    latex1080p <- xtable::xtable(tabelle1080p[33:zeilen,])
241
    latex720p  <- xtable::xtable(tabelle720p[33:zeilen,])
242
    latex360p  <- xtable::xtable(tabelle360p[33:zeilen,])
243

    
244
    # Ausgabe in die Latexdateien
245
    print(latex1080p,file="../text/tabellen/benchm_tabelle1080p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ","))
246
    print(latex720p,file="../text/tabellen/benchm_tabelle720p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ","))
247
    print(latex360p,file="../text/tabellen/benchm_tabelle360p2.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(big.mark = "'", decimal.mark = ","))
248

    
249
} else {
250
    latex1080p <- xtable::xtable(tabelle1080p)
251
    latex720p  <- xtable::xtable(tabelle720p)
252
    latex360p  <- xtable::xtable(tabelle360p)
253

    
254
    # Ausgabe in die Latexdateien
255
    print(latex1080p,file="../text/tabellen/benchm_tabelle1080p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
256
    print(latex720p,file="../text/tabellen/benchm_tabelle720p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
257
    print(latex360p,file="../text/tabellen/benchm_tabelle360p.tex",tabular.environment="tabulary",only.contents=TRUE,include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,format.args=list(decimal.mark = ","))
258

    
259
}
260

    
261

    
262

    
263