Thanks, but I managed to do all the work in an external module that only needs less than 3 seconds for 1000 measures.That’s more than enough for me.
If someone in the future will have the same problem, here is the code to solve it:
[code]# -- coding: utf-8 --
import os, subprocess
import ROOT as r
def hbook(hbook_file, hist_name = ‘h1’, branch_name = ‘Ivfas_data1’):
root_file = hbook_file[:5] + 'root’
subprocess.call([‘h2root’, hbook_file, root_file]) #Conversion of hbook file via h2root
f1 = r.TFile(root_file, ‘read’)
f2 = f1.Get(hist_name).GetPlayer()
f2.SetScanRedirect(True)
f2.SetScanFileName(‘data.temp’)
f2.Scan(branch_name, ‘’, ‘’, 1000000000, 0) #Put the data in a temp file
f1.Close()
os.remove(root_file) #Useless now
f1 = open('data.temp')
result = []
for line in f1:
try:
result.append(float(line.split('*')[-2]))
except:
pass
f1.close()
os.remove('data.temp')
return result[/code]
Edit: better version:
[code]# -- coding: utf-8 --
import os, subprocess
import ROOT as r
from scipy import matrix
def hbook(hbook_file, hist_name = ‘h1’, branch_name = ‘Ivfas_data1’):
root_file = hbook_file[:5] + ‘root’
subprocess.call([‘h2root’, hbook_file, root_file]) #Conversion of hbook file via h2root
f1 = r.TFile(root_file, ‘read’)
f2 = f1.Get(hist_name).GetPlayer()
f2_len = f2.GetEntries(’’)
f2.SetScanRedirect(True)
f2.SetScanFileName(‘data.temp’)
f2.Scan(branch_name, ‘’, ‘’, 1000000000, 0) #Put the data in a temp file
f1.Close()
os.remove(root_file) #Useless now
f1 = open('data.temp')
result = []
counter = 1
result.append([])
for line in f1:
try:
result[-1].append(float(line.split('*')[-2]))
if counter < f2_len:
counter += 1
else: #in case there are more rows than entries -> every entry is a list
counter = 1
result.append([])
except:
pass
result = result[:-1]
if len(result) == 1:
result = result[0]
else:
result = matrix(result).T.tolist()
f1.close()
os.remove('data.temp')
return result[/code]