hosted by CEDAR HepForge

DataHarvester - simple examples

Commandline interface

  dataharvester-converter in.root out.hdf

Guaranteed to work only if in.root is itself produced with a dataharvester.

Python - Writer:

import dataharvester
r=dataharvester.Writer_file ( "bla.sqlite" )
t=dataharvester.Tuple("event")
t["id"]=1
t["track:id"]=1
t.fill("track")
t["track:id"]=2
t.fill("track")
t.fill()
r.save(t)
dataharvester.Writer_close()

Python - Reader:

import dataharvester
r=dataharvester.Reader_file ( "bla.xml" )
for tuple in r:
for row in tuple:
for data in row:
print data,"=",row[data]

C++-Writer:

 #include <dataharvester/Writer.h>

int main()
{
using namespace dataharvester;
Tuple t("event");
t["id"]=1; // event id=1

t["track:name"]="track"; // add first track
 t["track:E"]=3.14;
t.fill("track");
t["track:name"]="track"; // add second track
 t["track:E"]=1.41;
t.fill("track");
t.fill(); // fill event

// stream into my.txt, as well as my.hdf
 Writer::file ( "my.txt;my.hdf" ) << t;
Writer::close(); // close all open handles
 }

Can be compiled with e.g.: g++ `pkg-config dataharvester --libs --cflags` main.cc

C++ - Reader

 #include <dataharvester/Reader.h>
 #include <dataharvester/Tuple.h>
 #include <dataharvester/TerminateException.h>
 #include <iostream>

int main()
{
using namespace dataharvester;
try {
while ( true )
{
Tuple tuple = Reader::file ( "m.root" ).nextTuple();
// retrieve first (and, often, only) occurence of the variable "age",
 // knowing that it's a float (implicitly casting from a MultiType)
 float age = tuple.getFirst ( "age" );
// same thing, returning it as a string
 // (also an implicit cast)
 string s_age = tuple.getFirst ( "age" );
// get all tuple rows
 vector < TupleRow > rows = tuple.getTupleRows();
for ( vector< TupleRow >::const_iterator row=rows.begin(); row!=rows.end() ; ++row )
{
// the "flat data" in every tuple row
 map < string, MultiType > data = row->getSimpleData();
for ( map < string, MultiType >::const_iterator d=data.begin(); d!=data.end(); ++d )
{
std::cout << d->first << "=" << d->second.asString() << std::endl;
}
// the "nested data" in every tuple row
 map < string, Tuple * > nested = row->getNestedData();
}
}
} catch ( TerminateException & ) {};
}

Can be compiled with e.g.: g++ `pkg-config dataharvester --libs --cflags` main.cc