From 29a122209ae471596fca73884dc4be3aa1604a0f Mon Sep 17 00:00:00 2001 From: Alexander Steppke Date: Mon, 24 Jun 2024 17:29:31 +0200 Subject: [PATCH] added Unfinished Scan --- src/cristallina/__init__.py | 1 + src/cristallina/uscan.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/cristallina/uscan.py diff --git a/src/cristallina/__init__.py b/src/cristallina/__init__.py index a4143ed..adbaad2 100644 --- a/src/cristallina/__init__.py +++ b/src/cristallina/__init__.py @@ -21,3 +21,4 @@ from . import plot from . import analysis from . import image from . import channels +from . import uscan diff --git a/src/cristallina/uscan.py b/src/cristallina/uscan.py new file mode 100644 index 0000000..f76c3bc --- /dev/null +++ b/src/cristallina/uscan.py @@ -0,0 +1,34 @@ +from sfdata import SFScanInfo +import sfdata.utils + +from partialjson.json_parser import JSONParser +class UnfinishedScan(SFScanInfo): + """ + Represents an unfinished scan from SwissFEL data, mimicking a finished SFScanInfo. It tries + to parse a partial JSON file and extract the scan information. + + Args: + fname (str): The filename of the JSON file to be processed for scan information. + """ + + def __init__(self, fname): + self.fname = fname + self.fs = sfdata.utils.FileStatus(fname) + + with open(fname) as f: + content = f.read() + parser = JSONParser() + + self.info = info = parser.parse(content) + + self.files = info["scan_files"] + self.parameters = info["scan_parameters"] + + values = info["scan_values"] + values = [v for v in values if v] + + readbacks = info["scan_readbacks"] + readbacks = [r for r in readbacks if r] + + self.values = sfdata.utils.adjust_shape(values) + self.readbacks = sfdata.utils.adjust_shape(readbacks) \ No newline at end of file