Write and read large data structures to/from ntuples using EFile
Code: "io_efile_write_read.py". Programming language: Python DMelt Version 1. Last modified: 12/11/2015. License: Pro
https://datamelt.org/code/cache/io_efile_write_read_7918.py
To run this script using the DMelt IDE, copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.


# Use CBook C++ package to generate files in this format
# which can be understood by EFile Java class using the Googe's protocol
# buffer format.
# (C) S.Chekanov
 
from jhplot.io import *
from jhplot.io.PEventFile import *
import time

# Write data into an ntuple
f=EFile('tmp.nbu','w')
start = time.clock()
for i in range(10000):
    ev = HEvent.newBuilder()
    ev.setName('collision')
    ev.setId(i); ev.addDa(1)

    # add collection of tracks
    tracks = HEvent.Group.newBuilder()
    tracks.setName("tracks")
    for j in range(20):
       track=HEvent.Entry.newBuilder()
       track.setName('pion'+str(i))
       track.addDa(1); track.addDa(2)
       track.addIda(1); track.addIda(2)
       tracks.addEntry(track)
    ev.addGroup(tracks)

    # add collection of cells
    cells = HEvent.Group.newBuilder()
    cells.setName("cells")
    for j in range(20):
       cell=HEvent.Entry.newBuilder()
       cell.setName('cell'+str(i))
       cell.addDa(1);cell.addIda(1)
       cells.addEntry(cell)
    ev.addGroup(cells);

    if (i%100==0):
              print "Write event",i
    f.write(ev) # write event

f.close()
print ' time (s)=',time.clock()-start

############ reading file ################
f=EFile('tmp.nbu')
start = time.clock()
print f.getVersion()

for i in range(1,f.size()):
    ev = f.read()
    if (ev.getId()%100==0): 
       print "Read event", ev.getId(), ev.getName()
     # get groups    
    for j in range(ev.getGroupCount()):
       g=ev.getGroup(j)
       # print g.getName()
       for k in range(g.getEntryCount()):
           e=g.getEntry(k)
           # print e.getDa(0)
f.close()
print ' time (s)=',time.clock()-start

Ads help maintain this website.