[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Swarm-Support] Basic Swarm to HDF5 question
From: |
Marcus G. Daniels |
Subject: |
Re: [Swarm-Support] Basic Swarm to HDF5 question |
Date: |
Sat, 08 Sep 2007 12:16:12 -0600 |
User-agent: |
Thunderbird 1.5.0.12 (X11/20070719) |
Hi Kerimcan,
I want to create my experimental
parameters and variable values (some agent variable
values) in R. These parameters and variable values
will be in the form of several vectors (e.g. a vector
for the age of each agent) and matrices (e.g. a social
network matrix) of possibly different types (integer,
double, character etc.). Then I will save them as one
HDF5 file (so that one file contains all
parameters/variable values for one experimental
configuration). Then I will read that file from within
SWARM.
Ok, here's how I'd do it. First thing to note is that the Swarm
reader/writer wants to work in objects.
To make an object in R is just making a named list referencing your
vectors:
expData <- list(pars=pars,net=net)
.. and then attaching a `type' attribute to that object. The Swarm
reader will use that type name to be the object name to instantiate.
attr(expData,"type") <- "ExpData"
Then it's just a matter of having `ExpData' ready on the Swarm end with
the methods you want. Actually you don't need to make this class at
all, if you are willing to use probes to read and write its values.
[fyi, HDF5, the `objects' are stored as HDF5 groups and the fields
(either scalars, vectors, or matrices) are stored as HDF5 datasets.
The R attributes, e.g. `type' are stored as HDF5 attributes on the group.]
Marcus
library(hdf5)
pars <- rnorm(10)
net <- rnorm(100)
dim(net) <- c(10,10)
expData <- list(pars=pars,net=net)
attr(expData,"type") <- "ExpData"
print(pars)
print(net)
hdf5save("sup-ex.hdf","expData")
#import <simtools.h> // initSwarm
#import <objectbase.h> // VarProbe
#import <defobj.h> // Archiver
#import <objectbase/SwarmObject.h>
@interface ExpData: SwarmObject
{
double pars[10];
double net[10][10];
}
- print;
@end
@implementation ExpData
- print
{
unsigned i, j;
printf ("pars:");
for (i = 0; i < 10; i++)
printf (" %.3f", pars[i]);
printf ("\n\nnet:\n");
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++)
printf (" %.3f", net[i][j]);
printf ("\n");
}
}
@end
int
main (int argc, const char **argv)
{
id <Archiver> archiver;
id item;
initSwarmBatch (argc, argv);
archiver = [[[HDF5Archiver createBegin: globalZone]
setPath: "sup-ex.hdf"]
createEnd];
printf ("Getting object\n");
item = [archiver getObject: "expData"];
printf ("`%s'\n", [item getName]);
[item print];
}
/*
Local Variables:
compile-command: "$HOME/packages/bin/libtool-swarm --mode=link gcc
-I$HOME/packages/include -o test -g -Wno-import test.m -L$HOME/packages/lib
-lswarm"
End:
*/