Skip to content

Commit

Permalink
Issue 123: set NeXusMeshScanID variable (#123)
Browse files Browse the repository at this point in the history
* set NeXusMeshScanID variable

* update manpages

* fix a typo
  • Loading branch information
jkotan authored Jun 7, 2024
1 parent bee1e62 commit d216647
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 20 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2024-06-07 Jan Kotanski <[email protected]>
* set NeXusMeshScanID variable (#124)
* tagged as 3.25.0

2024-06-06 Jan Kotanski <[email protected]>
* set TangoDataWriter properties from NeXusWriterProperties variable (#121)
* tagged as 3.24.0
Expand Down
1 change: 1 addition & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -226,4 +226,5 @@ The NeXus file recorder uses the following sardana environment variables
* **CreateMeasurementFile** *(bool)* - create a measurement file with its filename releated to ``ScicatMeasurements`` or ``ScanFile``, default: ``False``
* **NeXusSkipAcquisitionModes** *(list)* - a list of strategy modes for which acquisition is skip
* **NeXusWriterProperties** *(dict)* - a dictionary of TangoDataWriter (NXSDataWriter) properties (starting with a small letter)
* **NeXusMeshScanID** *(int)* - ScanID used for composed scans e.g. mesh scan combined from many linear scans

6 changes: 5 additions & 1 deletion man/sardananxsrecorder.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 "SARDANANXSRECORDER" "1" "Jun 04, 2024" "3.23" "Sardana NeXus Recorder"
.TH "SARDANANXSRECORDER" "1" "Jun 06, 2024" "3.25" "Sardana NeXus Recorder"
.SH NAME
sardananxsrecorder \- sardananxsrecorder Documentation
.sp
Expand Down Expand Up @@ -355,6 +355,10 @@ The NeXus file recorder uses the following sardana environment variables
\fBCreateMeasurementFile\fP \fI(bool)\fP \- create a measurement file with its filename releated to \fBScicatMeasurements\fP or \fBScanFile\fP, default: \fBFalse\fP
.IP \(bu 2
\fBNeXusSkipAcquisitionModes\fP \fI(list)\fP \- a list of strategy modes for which acquisition is skip
.IP \(bu 2
\fBNeXusWriterProperties\fP \fI(dict)\fP \- a dictionary of TangoDataWriter (NXSDataWriter) properties (starting with a small letter)
.IP \(bu 2
\fBNeXusMeshScanID\fP \fI(int)\fP \- ScanID used for composed scans e.g. mesh scan combined from many linear scans
.UNINDENT
.sp
Contents:
Expand Down
2 changes: 1 addition & 1 deletion sardananxsrecorder/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@
""" Sardana Scan Recorders """

#: package version
__version__ = "3.24.0"
__version__ = "3.25.0"
55 changes: 37 additions & 18 deletions sardananxsrecorder/nxsrecorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,14 @@ def __init__(self, filename=None, macro=None, **pars):
#: (:obj:`str`) module lable
self.__moduleLabel = 'module'

#: (:obj:`int`) serialno
self.__serial = 0

#: (:obj:`dict` <:obj:`str` , :obj:`str`>) NeXus configuration
self.__conf = {}

#: (:obj:`list` <:obj:`str`>) skip Acquisition Modes
self.skipAcquisitionModes = []
self.skipAcquisitionModes = self.__skipAcquisitionModes()

#: (:obj:`dict` <:obj:`str` , `any`>) User data
self.__udata = None
Expand All @@ -172,6 +175,25 @@ def __init__(self, filename=None, macro=None, **pars):
self.__setFileName(
self.__base_filename, not appendentry, scanID)

def _serial(self, scanID):
serial = None
if "INIT" in self.skipAcquisitionModes:
if self.__macro:
serial = self.__macro().getEnv('NeXusMeshScanID', None)
if serial is None:
if scanID is None:
serial = self.recordlist.getEnvironValue('serialno')
elif scanID >= 0:
if isarver >= 304 or isarver == 0:
serial = scanID
else:
serial = scanID + 1
if self.skipAcquisitionModes and \
"INIT" not in self.skipAcquisitionModes:
if self.__macro:
self.__macro().setEnv('NeXusMeshScanID', serial)
return serial

def __command(self, server, command, *args):
""" execute tango server (or python object) command
Expand Down Expand Up @@ -378,27 +400,22 @@ def __setFileName(self, filename, number=True, scanID=None):

subs = (len([None for _ in list(re.finditer('%', filename))]) == 1)
# construct the filename, e.g. : /dir/subdir/etcdir/prefix_00123.nxs
if scanID is None:
serial = self.recordlist.getEnvironValue('serialno')
elif scanID >= 0:
if isarver >= 304 or isarver == 0:
serial = scanID
else:
serial = scanID + 1
self.__serial = self._serial(scanID)

if subs:
try:
#: output file name
self.filename = filename % serial
self.filename = filename % self.__serial
except Exception:
subs = False
if not self.__raw_filename:
self.__raw_filename = self.__rawfilename(serial)
self.__raw_filename = self.__rawfilename(self.__serial)
self.debug('Raw Filename: %s' % str(self.__raw_filename))
if not subs and self.__raw_filename and \
"{ScanID" in self.__raw_filename:
try:
self.filename = self.__raw_filename.format(ScanID=serial)
self.filename = self.__raw_filename.format(
ScanID=self.__serial)
subs = True
except Exception:
pass
Expand All @@ -409,10 +426,12 @@ def __setFileName(self, filename, number=True, scanID=None):
filename[-4].rpartition(".")[0] and \
filename[-4].rpartition(".")[2] in self.formats.keys():
tpl = filename[-4].rpartition(".")
self.filename = "%s_%05d.%s.tmp" % (tpl[0], serial, tpl[2])
self.filename = "%s_%05d.%s.tmp" % (
tpl[0], self.__serial, tpl[2])
else:
tpl = filename.rpartition('.')
self.filename = "%s_%05d.%s" % (tpl[0], serial, tpl[2])
self.filename = "%s_%05d.%s" % (
tpl[0], self.__serial, tpl[2])
else:
self.filename = filename

Expand Down Expand Up @@ -990,7 +1009,7 @@ def _startRecordList(self, recordlist):
appendscanid = not self.__setFileName(
self.__base_filename, not appendentry)
envRec = self.recordlist.getEnviron()
self.__vars["vars"]["serialno"] = ("_%05i" % envRec["serialno"]) \
self.__vars["vars"]["serialno"] = ("_%05i" % self.__serial) \
if appendscanid else ""
self.__vars["vars"]["scan_id"] = envRec["serialno"]
self.__vars["vars"]["scan_title"] = envRec["title"]
Expand All @@ -1014,7 +1033,7 @@ def _startRecordList(self, recordlist):
# self.debug('XML: %s' % str(cnfxml))
self.__removeDynamicComponent()

self.__vars["data"]["serialno"] = envRec["serialno"]
self.__vars["data"]["serialno"] = self.__serial
self.__vars["data"]["scan_title"] = envRec["title"]
if self.__macro:
if hasattr(self.__macro(), "integ_time"):
Expand Down Expand Up @@ -1310,7 +1329,7 @@ def __scanname(self, serial):
def __appendSciCatDataset(self, hostname=None):
""" append dataset to SciCat ingestion list """

sid = self.__vars["vars"]["scan_id"]
sid = self.__serial
fdir, fname = os.path.split(self.filename)
sname, fext = os.path.splitext(fname)
beamtimeid = self.beamtimeid()
Expand Down Expand Up @@ -1342,7 +1361,7 @@ def __appendSciCatDataset(self, hostname=None):
if appendentry is True and \
'%' not in self.__raw_filename and \
"{ScanID" not in self.__raw_filename:
sid = self.__vars["vars"]["scan_id"]
sid = self.__serial
sname = "%s::/%s_%05i;%s_%05i" % (
scanname, entryname, sid, scanname, sid)
if "INIT" in self.skipAcquisitionModes:
Expand Down Expand Up @@ -1381,7 +1400,7 @@ def __appendSciCatDataset(self, hostname=None):
def __createMeasurementFile(self):
""" create measurement file """

sid = self.__vars["vars"]["scan_id"]
sid = self.__serial
fdir, fname = os.path.split(self.filename)
sname, fext = os.path.splitext(fname)
# beamtimeid = self.beamtimeid()
Expand Down

0 comments on commit d216647

Please sign in to comment.