-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathomnet_helpers.R
103 lines (88 loc) · 3.47 KB
/
omnet_helpers.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#
# Copyright (C) 2016-2022 Stefan Joerer <[email protected]>
# Copyright (C) 2016-2022 Bastian Bloessl <[email protected]>
# Copyright (C) 2016-2022 Michele Segata <[email protected]>
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
library(omnetpp)
if (!suppressWarnings(require(reshape, warn.conflicts = F, quietly=T))) {
library(reshape2, warn.conflicts = F)
}
rVersion4OrGreater <- function() {
return(as.numeric(version$major) >= 4)
}
getVectorNames <- function(dataset) {
if (rVersion4OrGreater()) {
return(unique(dataset$vectors$name))
} else {
return(levels(dataset$vectors$name))
}
}
getScalars <- function(scaFiles, module, scalarName, attributeName) {
selectString <- paste('module(', module, ') AND name("', scalarName,'")', sep='')
dataset <- loadDataset(scaFiles, add('scalar', select=selectString))
# attrvalues is a factor with levels
attrvalues <- unique(subset(dataset$runattrs$attrvalue, dataset$runattrs$attrname == attributeName))
if (rVersion4OrGreater()) {
attrvalues <- sort(as.integer(attrvalues[as.integer(attrvalues)]))
} else {
attrvalues <- sort(as.integer(levels(attrvalues)[as.integer(attrvalues)]))
}
res <- matrix(0, nrow=0, ncol=2)
# iterate through distances
for (i in 1:length(attrvalues)) {
a <- attrvalues[i]
runids <- subset(dataset$runattrs$runid, dataset$runattrs$attrname == attributeName & dataset$runattrs$attrvalue == a)
p <- subset(dataset$scalars$value, is.element(dataset$scalars$runid, runids))
res <- rbind(res, cbind(a, p))
}
return(res)
}
loadVectorsShaped <- function(vecFiles, ...){
d <- loadDataset(vecFiles, ...)
vectornames <- getVectorNames(d)
if(length(vectornames) == 0) {
warning("no vectors loaded!")
return
}
if(length(d$scalars$name)){
warning("scalars loaded, but will not be considered in this function")
}
#preprocess first vector
reskeys <- subset(d$vectors$resultkey, d$vectors$name == vectornames[1])
v <- loadVectors(d,reskeys)
result <- v$vectordata
#process remaining vectors
if(length(vectornames) > 1) {
for(name in vectornames[2:length(vectornames)]) {
reskeys <- subset(d$vectors$resultkey, d$vectors$name == name)
v <- loadVectors(d,reskeys)
result <- merge(result, v$vectordata, by=c("eventno", "resultkey", "x"), all.x = TRUE, all.y = TRUE, suffixes = c("",name))
}
}
names(result) <- c(names(result)[1:2], "time", vectornames)
return (result)
}
listVectors <- function(vecFiles, ...){
d <- loadDataset(vecFiles, ...)
return (getVectorNames(d))
}
print.runs <- function(vecFiles) {
d <- loadDataset(vecFiles)
print(cast(d$runattrs, runid~attrname, value='attrvalue'))
}