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