Skip to content

Commit

Permalink
Issue 750: add limaccdvds component template (#751)
Browse files Browse the repository at this point in the history
* add limavds component

* update manpags

* add tests for limaccdvds and fixes

* skip vds tests for deb10
  • Loading branch information
jkotan authored Feb 6, 2025
1 parent 83e2fcb commit c2658c3
Show file tree
Hide file tree
Showing 20 changed files with 739 additions and 42 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2025-02-07 Jan Kotanski <jankotan@gmail.com>
* add limaccdvds component template (#751)
* tagged as v4.20.0

2025-02-04 Jan Kotanski <jankotan@gmail.com>
* add missing acq_expo_time to limaccd template (#745)
* tagged as v4.19.2
Expand Down
2 changes: 1 addition & 1 deletion man/nxscollect.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSCOLLECT" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSCOLLECT" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxscollect \- upload external images into NeXus/HDF5 file
.SH DESCRIPTION
Expand Down
2 changes: 1 addition & 1 deletion man/nxsconfig.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSCONFIG" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSCONFIG" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxsconfig \- read NeXus Configuration Server settings
.SH DESCRIPTION
Expand Down
2 changes: 1 addition & 1 deletion man/nxscreate.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSCREATE" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSCREATE" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxscreate \- create NeXus Configuration component
.SH DESCRIPTION
Expand Down
2 changes: 1 addition & 1 deletion man/nxsdata.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSDATA" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSDATA" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxsdata \- run NeXus Data Writer
.SH DESCRIPTION
Expand Down
2 changes: 1 addition & 1 deletion man/nxsetup.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSETUP" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSETUP" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxsetup \- set NeXDaTaS Tango Server environment up
.SH DESCRIPTION
Expand Down
2 changes: 1 addition & 1 deletion man/nxsfileinfo.1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "NXSFILEINFO" "1" "Jan 30, 2025" "4.19" "NXSTools"
.TH "NXSFILEINFO" "1" "Feb 06, 2025" "4.20" "NXSTools"
.SH NAME
nxsfileinfo \- show metadata of the NeXus file
.SH DESCRIPTION
Expand Down
10 changes: 5 additions & 5 deletions man/nxstools.1

Large diffs are not rendered by default.

196 changes: 171 additions & 25 deletions nxstools/pyeval/limaccd.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,31 @@

""" pyeval helper functions for limaccd """

import os


def postrun(commonblock,
saving_next_number,
saving_directory,
saving_suffix,
acq_nb_frames,
saving_format,
saving_index_format,
saving_prefix,
saving_next_number_str):
saving_next_number_str,
name=None,
saving_format=None,
saving_frame_per_file=None,
image_height=None,
image_width=None,
image_type=None,
acq_trigger_mode=None,
acq_mode='SINGLE',
filename=None,
entryname=None,
insname=None,
acq_modes="",
field_path="/entry_0000/measurement/data"
):
""" code for postrun datasource
:param commonblock: commonblock of nxswriter
Expand All @@ -39,34 +55,164 @@ def postrun(commonblock,
:param saving_suffix: saving suffix
:type saving_suffix: :obj:`str`
:param acq_nb_frames: number of frames acquired
:type acq_mb_frames: :obj:`str`
:param saving_format: saving format
:type saving_format: :obj:`str`
:type acq_nb_frames: :obj:`str`
:param saving_index_format: saving index format
:type saving_index_format: :obj:`str`
:param saving_prefix: saving prefix
:type saving_prefix: :obj:`str`
:param saving_next_number_str: datasource string name
:type saving_next_number_str: :obj:`str`
:param name: component name
:type name: :obj:`str`
:param saving_format: saving format
:type saving_format: :obj:`str`
:param saving_frame_per_file: saving frame per file
:type saving_frame_per_file: :obj:`str`
:param image_height: image height
:type image_height: :obj:`int`
:param image_width: image width
:type image_width: :obj:`int`
:param image_type: image type
:type image_type: :obj:`int`
:param acq_mode: acquisition mode
:type acq_mode: :obj:`str`
:param acq_trigger_mode: acquisition trigger mode
:type acq_trigger_mode: :obj:`str`
:param filename: file name
:type filename: :obj:`str`
:param entryname: entry name
:type entryname: :obj:`str`
:param insname: instrument name
:type insname: :obj:`str`
:param acq_modes: acquisition modes
:type acq_modes: :obj:`str`
:param field_path: nexus field path
:type field_path: :obj:`str`
:returns: name of saved file
:rtype: :obj:`str`
"""
unixdir = (saving_directory).replace("\\", "/")
if len(unixdir) > 1 and unixdir[1] == ":":
unixdir = "/data" + unixdir[2:]
if unixdir and unixdir[-1] == "/":
unixdir = unixdir[:-1]
filestartnum = commonblock[saving_next_number_str] - 1
result = "" + unixdir + "/" + saving_prefix + saving_format
result += saving_suffix + ":"
filelastnumber = saving_next_number - 1
if "__root__" in commonblock.keys():
root = commonblock["__root__"]
if hasattr(root, "currentfileid") and hasattr(root, "stepsperfile"):
spf = root.stepsperfile
cfid = root.currentfileid
if spf > 0 and cfid > 0:
filelastnumber = min(
filestartnum + cfid * acq_nb_frames * spf - 1,
filelastnumber)
filestartnum = filestartnum + (cfid - 1) * acq_nb_frames * spf
result += str(filestartnum) + ":" + str(filelastnumber)
filedir = (saving_directory).replace("\\", "/")
amodes = acq_modes.split(",")
if len(filedir) > 1 and filedir[1] == ":":
filedir = "/data" + filedir[2:]
if filedir and filedir[-1] == "/":
filedir = filedir[:-1]
if acq_mode == "SINGLE" and \
acq_trigger_mode in ["INTERNAL_TRIGGER_MULTI",
"EXTERNAL_TRIGGER_MULTI"] and \
saving_format == "HDF5":
filelastnumber = saving_next_number - 1
nbfiles = (acq_nb_frames + saving_frame_per_file - 1) \
// saving_frame_per_file
filestartnum = filelastnumber - nbfiles + 1

if "__root__" in commonblock.keys():
root = commonblock["__root__"]
if root.h5object.__class__.__name__ == "File":
import nxstools.h5pywriter as nxw
else:
import nxstools.h5cppwriter as nxw
else:
raise Exception("Writer cannot be found")

path = ""
sfname = []
if not filename:
if root._tparent is not None:
filename = root._tparent.filename
basepath = ""
if filename:
sfname = (filename).split("/")
path = sfname[-1].split(".")[0] + "/"
basepath = "/".join(os.path.abspath(filename).split("/")[:-1])
if filedir and filedir.startswith(basepath):
path = filedir[len(basepath) + 1:]
else:
path += '%s' % (name)
path += '/%s' % (saving_prefix)

en = root.open(entryname)
dt = en.open("data")
ins = en.open(insname)
det = ins.open(name)
try:
col = det.open("collection")
except Exception:
col = det.create_group("collection", "NXcollection")

shape = [image_height, image_width]
if "VDS" in amodes and "data" not in det.names():
l2nt = {
"bpp8": "uint8", "bpp8s": "int8",
"bpp16": "uint16", "bpp16s": "int16",
"bpp32": "uint32", "bpp32s": "int32",
"bpp32f": "float",
}
dtype = l2nt.get(image_type.lower(), "int32")
vfl = nxw.virtual_field_layout(
[acq_nb_frames, shape[0], shape[1]], dtype)

fnamepattern = "%s%s%s" % (path, saving_index_format, saving_suffix)

for nbf in range(filestartnum, filelastnumber + 1):
rnbf = nbf - filestartnum
try:
detfn = fnamepattern % nbf
except Exception:
detfn = fnamepattern

nxw.link("%s:/%s" % (detfn, field_path),
col, "data_%05i" % (nbf))
nxw.link("/%s/%s/%s/collection/%s" %
(entryname, insname, name, "data_%05i" % (nbf)), dt,
"%s_%05i" % (name, nbf))

if "VDS" in amodes and "data" not in det.names():
off = saving_frame_per_file * rnbf
if rnbf + 1 == nbfiles:
nb = acq_nb_frames - off
else:
nb = saving_frame_per_file
ef = nxw.target_field_view(
detfn, field_path,
[nb, shape[0], shape[1]], dtype)
vfl.add(
(slice(off, off + nb),
slice(0, shape[0]),
slice(0, shape[1])),
ef, (slice(None), slice(None), slice(None)))
if "VDS" in amodes and "data" not in det.names():
det.create_virtual_field("data", vfl)
elif nbfiles == 1:
nxw.link("/%s/%s/%s/collection/%s" %
(entryname, insname, name, "data_%05i"
% (filestartnum)), det, "data")
if name not in dt.names() and "data" in det.names():
nxw.link("/%s/%s/%s/data" % (entryname, insname, name),
dt, name)
result = ""
else:
filestartnum = commonblock[saving_next_number_str] - 1
result = "" + filedir + "/" + saving_prefix + saving_index_format
result += saving_suffix + ":"
filelastnumber = saving_next_number - 1
if acq_mode == "SINGLE" and \
acq_trigger_mode in ["INTERNAL_TRIGGER_MULTI",
"EXTERNAL_TRIGGER_MULTI"]:
nbfiles = (acq_nb_frames + saving_frame_per_file - 1) \
// saving_frame_per_file
filestartnum = filelastnumber - nbfiles + 1
if "__root__" in commonblock.keys():
root = commonblock["__root__"]
if hasattr(root, "currentfileid") and \
hasattr(root, "stepsperfile"):
spf = root.stepsperfile
cfid = root.currentfileid
if spf > 0 and cfid > 0:
filelastnumber = min(
filestartnum + cfid * acq_nb_frames * spf - 1,
filelastnumber)
filestartnum = filestartnum + (cfid - 1) \
* acq_nb_frames * spf
result += str(filestartnum) + ":" + str(filelastnumber)
return result
2 changes: 1 addition & 1 deletion nxstools/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
""" NXS tools release version"""

#: (:obj:`str`) package version
__version__ = "4.19.2"
__version__ = "4.20.0"
35 changes: 35 additions & 0 deletions nxstools/xmltemplates/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1781,6 +1781,12 @@
'limaccd_ypixelsize.ds.xml',
'limaccd_description.ds.xml',
'limaccd_filestartnum_cb.ds.xml'],
'limaccdvds': ['limaccdvds.xml',
'limaccdvds_postrun.ds.xml',
'limaccdvds_xpixelsize.ds.xml',
'limaccdvds_ypixelsize.ds.xml',
'limaccdvds_description.ds.xml',
'limaccdvds_filestartnum_cb.ds.xml'],
'limaccds': ['limaccd.xml',
'limaccd_postrun.ds.xml',
'limaccd_xpixelsize.ds.xml',
Expand Down Expand Up @@ -1937,6 +1943,34 @@
'saving_suffix',
'saving_next_number',
'saving_format',
'saving_index_format',
'saving_frame_per_file',
'image_type',
'image_width',
'image_height',
'image_sizes',
'image_roi',
'image_bin',
'image_flip',
'image_rotation',
'shutter_mode',
'shutter_open_time',
],
'limaccdvds': [
'camera_type', 'camera_pixelsize', 'camera_model',
'acq_mode', 'acq_nb_frames', 'acq_trigger_mode',
'acq_expo_time',
'last_image_saved',
'latency_time', 'acc_max_expo_time',
'acc_expo_time', 'acc_time_mode',
'acc_dead_time', 'acc_live_time',
'saving_mode',
'saving_directory',
'saving_prefix',
'saving_suffix',
'saving_next_number',
'saving_format',
'saving_index_format',
'saving_frame_per_file',
'image_type',
'image_width',
Expand All @@ -1962,6 +1996,7 @@
'saving_suffix',
'saving_next_number',
'saving_format',
'saving_index_format',
'saving_frame_per_file',
'image_type',
'image_width',
Expand Down
4 changes: 2 additions & 2 deletions nxstools/xmltemplates/limaccd_postrun.ds.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
<datasource type="PYEVAL" name="$(name)_postrun">
<result name="result">
from nxstools.pyeval import limaccd
ds.result = limaccd.postrun(commonblock, ds.$(name)_saving_next_number, ds.$(name)_saving_directory, ds.$(name)_saving_suffix, ds.$(name)_acq_nb_frames, ds.$(name)_saving_format, ds.$(name)_saving_prefix, "$(name)_saving_next_number")
ds.result = limaccd.postrun(commonblock, ds.$(name)_saving_next_number, ds.$(name)_saving_directory, ds.$(name)_saving_suffix, ds.$(name)_acq_nb_frames, ds.$(name)_saving_index_format, ds.$(name)_saving_prefix, "$(name)_saving_next_number")
</result>
$datasources.$(name)_saving_next_number
$datasources.$(name)_saving_directory
$datasources.$(name)_saving_suffix
$datasources.$(name)_acq_nb_frames
$datasources.$(name)_saving_format
$datasources.$(name)_saving_index_format
$datasources.$(name)_saving_prefix</datasource>
</definition>
Loading

0 comments on commit c2658c3

Please sign in to comment.