def setupimgh5(f: Union[Path, h5py.File],
               Nframetotal: int, Nrow: int, Ncol: int, dtype=np.uint16,
               writemode='r+', key='/rawimg', cmdlog: str=None):
    """
    f: HDF5 handle (or filename)

    h: HDF5 dataset handle
    """
    if isinstance(f, (str, Path)):  # assume new HDF5 file wanted
        f = Path(f).expanduser()
        if f.is_dir():
            raise IOError(
                'must provide specific HDF5 filename, not just a directory')

        print('creating', f)
        with h5py.File(f, writemode) as F:
            setupimgh5(F, Nframetotal, Nrow, Ncol, dtype, writemode, key)

    elif isinstance(f, h5py.File):
        h = f.create_dataset(key,
                             shape=(Nframetotal, Nrow, Ncol),
                             dtype=dtype,
                             chunks=(1, Nrow, Ncol),  # each image is a chunk
                             compression='gzip',
                             # no difference in filesize from 1 to 5, except much faster to use lower numbers!
                             compression_opts=1,
                             shuffle=True,
                             fletcher32=True,
                             track_times=True)
        h.attrs["CLASS"] = np.string_("IMAGE")
        h.attrs["IMAGE_VERSION"] = np.string_("1.2")
        h.attrs["IMAGE_SUBCLASS"] = np.string_("IMAGE_GRAYSCALE")
        h.attrs["DISPLAY_ORIGIN"] = np.string_("LL")
        h.attrs['IMAGE_WHITE_IS_ZERO'] = np.uint8(0)

        if cmdlog and isinstance(cmdlog, str):
            f['/cmdlog'] = cmdlog
    else:
        raise TypeError(
            f'{type(f)} is not correct, must be filename or h5py.File HDF5 file handle')
def setupimgh5 ( f : Union [ Path , h5py . File ] , Nframetotal : int , Nrow : int , Ncol : int , dtype = np . uint16 , writemode = 'r+' , key = '/rawimg' , cmdlog : str = None ) : if isinstance ( f , ( str , Path ) ) : f = Path ( f ) . expanduser ( ) if f . is_dir ( ) : raise IOError ( 'must provide specific HDF5 filename, not just a directory' ) print ( 'creating' , f ) with h5py . File ( f , writemode ) as F : setupimgh5 ( F , Nframetotal , Nrow , Ncol , dtype , writemode , key ) elif isinstance ( f , h5py . File ) : h = f . create_dataset ( key , shape = ( Nframetotal , Nrow , Ncol ) , dtype = dtype , chunks = ( 1 , Nrow , Ncol ) , compression = 'gzip' , compression_opts = 1 , shuffle = True , fletcher32 = True , track_times = True ) h . attrs [ "CLASS" ] = np . string_ ( "IMAGE" ) h . attrs [ "IMAGE_VERSION" ] = np . string_ ( "1.2" ) h . attrs [ "IMAGE_SUBCLASS" ] = np . string_ ( "IMAGE_GRAYSCALE" ) h . attrs [ "DISPLAY_ORIGIN" ] = np . string_ ( "LL" ) h . attrs [ 'IMAGE_WHITE_IS_ZERO' ] = np . uint8 ( 0 ) if cmdlog and isinstance ( cmdlog , str ) : f [ '/cmdlog' ] = cmdlog else : raise TypeError ( f'{type(f)} is not correct, must be filename or h5py.File HDF5 file handle' )
f: HDF5 handle (or filename)

    h: HDF5 dataset handle