source: sasview/src/sas/sascalc/file_converter/bsl_loader.py @ 535e181

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 535e181 was 535e181, checked in by lewis, 6 years ago

Begin implementing 2D BSL loader into GUI

  • Property mode set to 100644
File size: 3.1 KB
Line 
1from sas.sascalc.file_converter.core.bsl_loader import CLoader
2from copy import deepcopy
3import os
4import numpy as np
5
6class BSLLoader(CLoader):
7
8    # TODO: Change to __init__(self, filename, frame)
9    # and parse n_(pixels/rasters) from header file
10    def __init__(self, filename):
11        header_file = open(filename, 'r')
12        data_info = {}
13        is_valid = True
14        err_msg = ""
15
16        [folder, filename] = os.path.split(filename)
17
18        # First 2 lines are headers
19        header_file.readline()
20        header_file.readline()
21
22        while True:
23            metadata = header_file.readline().strip()
24            metadata = metadata.split()
25            data_filename = header_file.readline().strip()
26
27            if len(metadata) != 10:
28                is_valid = False
29                err_msg = "Invalid header file: {}".format(filename)
30                break
31            # SAS data will be in file Xnn001.mdd
32            if data_filename != filename.replace('0.', '1.'):
33                continue
34            try:
35                data_info = {
36                    'filename': os.path.join(folder, data_filename),
37                    'pixels': int(metadata[0]),
38                    'rasters': int(metadata[1]),
39                    'frames': int(metadata[2]),
40                    'swap_bytes': int(metadata[3])
41                }
42            except:
43                is_valid = False
44                err_msg = "Invalid metadata in header file for {}"
45                err_msg = err_msg.format(filename.replace('0.', '1.'))
46            break
47
48        if not is_valid:
49            raise Exception(err_msg)
50
51        if data_info['frames'] == 1:
52            # File is actually in OTOKO (1D) format
53            # Number of frames is 2nd indicator,
54            data_info['frames'] = data_info['rasters']
55            data_info['rasters'] = data_info['pixels']
56            data_info['pixels'] = 1
57
58        CLoader.__init__(self, data_info['filename'], data_info['frames'],
59            data_info['pixels'], data_info['rasters'], data_info['swap_bytes'])
60
61    def __setattr__(self, name, value):
62        if name == 'filename':
63            return self.set_filename(value)
64        elif name == 'n_frames':
65            return self.set_n_frames(value)
66        elif name == 'frame':
67            return self.set_frame(value)
68        elif name == 'n_pixels':
69            return self.set_n_pixels(value)
70        elif name == 'n_rasters':
71            return self.set_n_rasters(value)
72        elif name == 'swap_bytes':
73            return self.set_swap_bytes(value)
74        return CLoader.__setattr__(self, name, value)
75
76    def __getattr__(self, name):
77        if name == 'filename':
78            return self.get_filename()
79        elif name == 'n_frames':
80            return self.get_n_frames()
81        elif name == 'frame':
82            return self.get_frame()
83        elif name == 'n_pixels':
84            return self.get_n_pixels()
85        elif name == 'n_rasters':
86            return self.get_n_rasters()
87        elif name == 'swap_bytes':
88            return self.get_swap_bytes()
89        return CLoader.__getattr__(self, name)
Note: See TracBrowser for help on using the repository browser.