Skip to content

Commit

Permalink
override raw meta data also for series hdf5 format
Browse files Browse the repository at this point in the history
  • Loading branch information
paulmueller committed Dec 20, 2017
1 parent 1618958 commit b4bc97f
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 24 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
0.1.3
- format single_hdf5: override meta data provided by user
- format series and single hdf5: override raw meta data
- include background data in determination of data set identifiers
- save memory by hard-linking background image data in QPSeries
0.1.2
Expand Down
11 changes: 9 additions & 2 deletions qpformat/file_formats/series_hdf5_qpimage.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,23 @@ def get_qpimage(self, idx):
if self._bgdata:
# The user has explicitly chosen different background data
# using `get_qpimage_raw`.
return super(SeriesHdf5Qpimage, self).get_qpimage(idx)
qpi = super(SeriesHdf5Qpimage, self).get_qpimage(idx)
else:
# We can use the background data stored in the qpimage hdf5 file
return self._qpseries.get_qpimage(index=idx).copy()
qpi = self._qpseries.get_qpimage(index=idx).copy()
# Force meta data
for key in self.meta_data:
qpi[key] = self.meta_data[key]
return qpi

def get_qpimage_raw(self, idx):
"""Return QPImage without background correction"""
qpi = self._qpseries.get_qpimage(index=idx).copy()
# Remove previously performed background correction
qpi.set_bg_data(None)
# Force meta data
for key in self.meta_data:
qpi[key] = self.meta_data[key]
return qpi

@staticmethod
Expand Down
10 changes: 7 additions & 3 deletions qpformat/file_formats/single_hdf5_qpimage.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,21 @@ def get_qpimage(self, idx=0):
if self._bgdata:
# The user has explicitly chosen different background data
# using `get_qpimage_raw`.
return super(SingleHdf5Qpimage, self).get_qpimage()
qpi = super(SingleHdf5Qpimage, self).get_qpimage()
else:
# We can use the background data stored in the qpimage hdf5 file
return qpimage.QPImage(h5file=self.path, h5mode="r").copy()
qpi = qpimage.QPImage(h5file=self.path, h5mode="r").copy()
# Force meta data
for key in self.meta_data:
qpi[key] = self.meta_data[key]
return qpi

def get_qpimage_raw(self, idx=0):
"""Return QPImage without background correction"""
qpi = qpimage.QPImage(h5file=self.path, h5mode="r").copy()
# Remove previously performed background correction
qpi.set_bg_data(None)
# Set meta data
# Force meta data
for key in self.meta_data:
qpi[key] = self.meta_data[key]
return qpi
Expand Down
55 changes: 45 additions & 10 deletions tests/test_series_hdf5_qpimage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,30 @@
import qpformat


def test_identifier():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
tf = tempfile.mktemp(suffix=".h5", prefix="qpformat_test_")
qpi1 = qpimage.QPImage(h5file=path, h5mode="r")
qpi2 = qpi1.copy()
qpi2["identifier"] = "an important string"
# generate qpseries hdf5 file
with qpimage.QPSeries(qpimage_list=[qpi1, qpi2],
h5file=tf,
h5mode="a"):
pass

ds = qpformat.load_data(tf)
assert ds.get_identifier(0) != "an important string"
assert ds.get_identifier(1) == "an important string"
assert ds.identifier in ds.get_identifier(0)

# cleanup
try:
os.remove(tf)
except OSError:
pass


def test_load_data():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
tf = tempfile.mktemp(suffix=".h5", prefix="qpformat_test_")
Expand All @@ -29,22 +53,33 @@ def test_load_data():
pass


def test_identifier():
def test_meta_override():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
tf = tempfile.mktemp(suffix=".h5", prefix="qpformat_test_")
qpi1 = qpimage.QPImage(h5file=path, h5mode="r")
qpi2 = qpi1.copy()
qpi2["identifier"] = "an important string"
qpi = qpimage.QPImage(h5file=path, h5mode="r")
# generate qpseries hdf5 file
with qpimage.QPSeries(qpimage_list=[qpi1, qpi2],
with qpimage.QPSeries(qpimage_list=[qpi, qpi],
h5file=tf,
h5mode="a"):
h5mode="a",
meta_data={"wavelength": 111e-9,
"pixel size": .12}):
pass

ds = qpformat.load_data(tf)
assert ds.get_identifier(0) != "an important string"
assert ds.get_identifier(1) == "an important string"
assert ds.identifier in ds.get_identifier(0)
wl = 333e-9
px = .111
ds = qpformat.load_data(tf, meta_data={"wavelength": wl,
"pixel size": px})

assert ds.meta_data["wavelength"] == wl
assert ds.meta_data["pixel size"] == px

qpi_ds = ds.get_qpimage(0)
assert qpi_ds["wavelength"] == wl
assert qpi_ds["pixel size"] == px

qpi_ds = ds.get_qpimage(1)
assert qpi_ds["wavelength"] == wl
assert qpi_ds["pixel size"] == px

# cleanup
try:
Expand Down
41 changes: 33 additions & 8 deletions tests/test_single_hdf5_qpimage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,28 @@
import qpformat


def test_identifier():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
tf = tempfile.mktemp(suffix=".h5", prefix="qpformat_test_")
qpi = qpimage.QPImage(h5file=path, h5mode="r").copy()
qpi["identifier"] = "an extremely important string"
qpi.copy(tf)

ds1 = qpformat.load_data(path)
ds2 = qpformat.load_data(tf)

assert ds1.identifier != ds2.identifier
assert ds2.identifier == "an extremely important string"
assert ds1.identifier == ds1.get_identifier()
assert ds2.identifier == ds2.get_identifier()

# cleanup
try:
os.remove(tf)
except OSError:
pass


def test_load_data():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
ds = qpformat.load_data(path)
Expand All @@ -15,20 +37,23 @@ def test_load_data():
assert ds.get_qpimage() == qpimage.QPImage(h5file=path, h5mode="r")


def test_identifier():
def test_meta_override():
path = join(dirname(abspath(__file__)), "data/single_qpimage.h5")
tf = tempfile.mktemp(suffix=".h5", prefix="qpformat_test_")
qpi = qpimage.QPImage(h5file=path, h5mode="r").copy()
qpi["identifier"] = "an extremely important string"
qpi.copy(tf)

ds1 = qpformat.load_data(path)
ds2 = qpformat.load_data(tf)
wl = 333e-9
px = .111
ds = qpformat.load_data(tf, meta_data={"wavelength": wl,
"pixel size": px})

assert ds1.identifier != ds2.identifier
assert ds2.identifier == "an extremely important string"
assert ds1.identifier == ds1.get_identifier()
assert ds2.identifier == ds2.get_identifier()
assert ds.meta_data["wavelength"] == wl
assert ds.meta_data["pixel size"] == px

qpi_ds = ds.get_qpimage(0)
assert qpi_ds["wavelength"] == wl
assert qpi_ds["pixel size"] == px

# cleanup
try:
Expand Down

0 comments on commit b4bc97f

Please sign in to comment.