Source code for patato.convenience_scripts.import_ithera_recons
# Copyright (c) Thomas Else 2023-25.
# License: MIT
import argparse
import h5py
import matplotlib.pyplot as plt
import numpy as np
[docs]
def init_argparse():
parser = argparse.ArgumentParser(description="Import iThera recons.")
parser.add_argument("input", type=str, help="Data File")
parser.add_argument("binary", type=str, help="iThera Binary")
parser.add_argument("description", type=str, help="Recon Description")
parser.add_argument("fov", type=float, help="Field of View (metres) -e.g.0.025")
parser.add_argument(
"-t", "--transpose", type=bool, help="Transpose Images", default=False
)
parser.add_argument(
"-r", "--reverse", type=int, nargs="*", help="Reverse Axes", default=[]
)
return parser
[docs]
def main():
p = init_argparse()
args = p.parse_args()
file = h5py.File(args.input, "r+")
data = np.fromfile(args.binary, np.double)
shape = file["raw_data"].shape[:-2]
nx = int(np.sqrt(data.shape[0] // np.prod(shape)))
data = data.reshape(file["raw_data"].shape[:-2] + (nx, nx))
if args.transpose:
data = np.swapaxes(data, -1, -2)
for r in args.reverse:
if r == 0:
data = data[:, :, ::-1, :]
elif r == 1:
data = data[:, :, :, ::-1]
plt.imshow(data[0, 0])
plt.show()
if input("Is this the correct orientation?") == "Y":
recs = file.require_group("recons")
recs_g = recs.require_group(args.description)
if "0" in recs_g:
del recs_g["0"]
rec = recs_g.create_dataset("0", data=data)
rec.attrs["RECON_FOV"] = args.fov
file.close()