Prime prove di lavoro col formato compresso HDF5¶

Documentazione
Riferimento su appending
Un'altra pagina

Installare con conda install h5py

In [1]:
import numpy as np
import h5py

Creo un file h5¶

In [2]:
hf = h5py.File('data.h5', 'w')

Leggo i dati della prima spill

In [3]:
data = np.loadtxt("./run501230_000001.dat")
data.shape
Out[3]:
(244, 72)

Li salvo

In [4]:
hf.create_dataset("sili", data =  data[:,0:4],  compression="gzip", chunks=True, maxshape=(None,4))
hf.create_dataset("nStrip", data =  data[:,4:8],  compression="gzip", chunks=True, maxshape=(None,4))
hf.create_dataset("nClu", data =  data[:,8:12],  compression="gzip", chunks=True, maxshape=(None,4))
hf.create_dataset("digiBase", data =  data[:,12:28],  compression="gzip", chunks=True, maxshape=(None,16))
hf.create_dataset("digiPH", data =  data[:,28:44],  compression="gzip", chunks=True, maxshape=(None,16))
hf.create_dataset("digiTime", data =  data[:,44:60],  compression="gzip", chunks=True, maxshape=(None,16))
hf.create_dataset("gonio", data =  data[:,60:67],  compression="gzip", chunks=True, maxshape=(None,7))
hf.create_dataset("nev", data =  data[:,67],  compression="gzip", chunks=True, maxshape=(None,))
hf.create_dataset("qtot", data =  data[:,68:72],  compression="gzip", chunks=True, maxshape=(None,4))
Out[4]:
<HDF5 dataset "qtot": shape (244, 4), type "<f8">
f["t"] = {
    "sili": data[:,0:4],
    "nStrip": data[:,4:8],
    "nClu": data[:,8:12],
    "digiBase": data[:,12:28],
    "digiPH": data[:,28:44],
    "digiTime": data[:,44:60],
    "gonio": data[:,60:67],
    "nev": data[:,67],
    "qtot": data[:,68:72],
}
In [5]:
hf.close()

Guardo cosa c'è dentro¶

Noto che anche in append vedo cosa c'è dentro

Attenzione (anche se è ovvio): se apri in w, cancelli quello che c'era dentro

In [6]:
hf = h5py.File('data.h5', 'a')
In [7]:
hf.keys()
Out[7]:
<KeysViewHDF5 ['digiBase', 'digiPH', 'digiTime', 'gonio', 'nClu', 'nStrip', 'nev', 'qtot', 'sili']>
In [8]:
hf.close()

Carico i dati di un'altra spill

In [9]:
data = np.loadtxt("./run501230_000002.dat")
data.shape
Out[9]:
(262, 72)

Provo ad appenderci roba¶

In [10]:
hf = h5py.File('data.h5', 'a')
In [11]:
print(hf["sili"].shape[0], data.shape[0])
244 262
In [12]:
type(hf.keys())
Out[12]:
h5py._hl.base.KeysViewHDF5
In [13]:
hf.keys()
Out[13]:
<KeysViewHDF5 ['digiBase', 'digiPH', 'digiTime', 'gonio', 'nClu', 'nStrip', 'nev', 'qtot', 'sili']>
In [14]:
righeLastFile = data.shape[0]
for k in hf.keys():
    hf[k].resize((hf[k].shape[0] + righeLastFile), axis = 0)
    
    
hf["sili"][-righeLastFile:] = data[:,0:4]
hf["nStrip"][-righeLastFile:] = data[:,4:8]
hf["nClu"][-righeLastFile:] = data[:,8:12]
hf["digiBase"][-righeLastFile:] = data[:,12:28]
hf["digiPH"][-righeLastFile:] = data[:,28:44]
hf["digiTime"][-righeLastFile:] = data[:,44:60]
hf["gonio"][-righeLastFile:] = data[:,60:67]
hf["nev"][-righeLastFile:] = data[:,67]
hf["qtot"][-righeLastFile:] = data[:,68:72]

                           
In [15]:
hf.close()

Vediamo cosa c'è dentro¶

In [16]:
hf = h5py.File('data.h5', 'r')
In [17]:
hf["sili"].shape
Out[17]:
(506, 4)
In [18]:
244+262
Out[18]:
506

Che coincidenza... coincide con le dipensioni delle prime due spill

Versione smart¶

In [19]:
# // TODO...
In [ ]: