Exemplo n.º 1
0
    def __init__(self, filename, mode="w", title='', register=None, conf=None, run_conf=None, scan_parameters=None, context=None, socket_address=None):  # mode="r+" to append data, raw_data_file_h5 must exist, "w" to overwrite raw_data_file_h5, "a" to append data, if raw_data_file_h5 does not exist it is created):
        self.lock = RLock()
        if os.path.splitext(filename)[1].strip().lower() != '.h5':
            self.base_filename = filename
        else:
            self.base_filename = os.path.splitext(filename)[0]
        if isinstance(scan_parameters, dict):
            self.scan_parameters = scan_parameters
        elif isinstance(scan_parameters, (list, tuple)):
            self.scan_parameters = dict.fromkeys(scan_parameters)
        else:
            self.scan_parameters = {}
        self.raw_data_earray = None
        self.meta_data_table = None
        self.scan_param_table = None
        self.h5_file = None

        if socket_address and not context:
            logging.info('Creating ZMQ context')
            context = zmq.Context()

        if socket_address and context:
            logging.info('Creating socket connection to server %s', socket_address)
            self.socket = context.socket(zmq.PUB)  # publisher socket
            self.socket.bind(socket_address)
            send_meta_data(self.socket, None, name='Reset')  # send reset to indicate a new scan
        else:
            self.socket = None

        if mode and mode[0] == 'w':
            h5_files = glob.glob(os.path.splitext(filename)[0] + '*.h5')
            if h5_files:
                logging.info('Removing following file(s): %s', ', '.join(h5_files))
            for h5_file in h5_files:
                remove(h5_file)
        # list of filenames and index
        self.curr_filename = self.base_filename
        self.filenames = {self.curr_filename: 0}
        self.open(self.curr_filename, mode, title)

        if register is not None:
            register.save_configuration(self.h5_file)
            if self.socket:
                global_register_config = {}
                for global_reg in sorted(register.get_global_register_objects(readonly=False), key=itemgetter('name')):
                    global_register_config[global_reg['name']] = global_reg['value']
                send_meta_data(self.socket, global_register_config, name='GlobalRegisterConf')  # send run info
        if conf is not None:
            save_configuration_dict(self.h5_file, 'conf', conf)
        if run_conf is not None:
            save_configuration_dict(self.h5_file, 'run_conf', run_conf)
            if self.socket:
                send_meta_data(self.socket, run_conf, name='RunConf')
Exemplo n.º 2
0
 def __init__(
     self,
     filename,
     mode="w",
     title='',
     register=None,
     conf=None,
     run_conf=None,
     scan_parameters=None,
     socket_addr=None
 ):  # mode="r+" to append data, raw_data_file_h5 must exist, "w" to overwrite raw_data_file_h5, "a" to append data, if raw_data_file_h5 does not exist it is created):
     self.lock = RLock()
     if os.path.splitext(filename)[1].strip().lower() != '.h5':
         self.base_filename = filename
     else:
         self.base_filename = os.path.splitext(filename)[0]
     if isinstance(scan_parameters, dict):
         self.scan_parameters = scan_parameters
     elif isinstance(scan_parameters, (list, tuple)):
         self.scan_parameters = dict.fromkeys(scan_parameters)
     else:
         self.scan_parameters = {}
     self.register = register  # reference to register object needed to store to fei4 raw data file
     self.raw_data_earray = None
     self.meta_data_table = None
     self.scan_param_table = None
     self.h5_file = None
     if mode and mode[0] == 'w':
         h5_files = glob.glob(os.path.splitext(filename)[0] + '*.h5')
         if h5_files:
             logging.info('Removing following file(s): %s',
                          ', '.join(h5_files))
         for h5_file in h5_files:
             remove(h5_file)
     # list of filenames and index
     self.curr_filename = self.base_filename
     self.filenames = {self.curr_filename: 0}
     self.open(self.curr_filename, mode, title)
     if conf:
         save_configuration_dict(self.h5_file, 'conf', conf)
     if run_conf:
         save_configuration_dict(self.h5_file, 'run_conf', run_conf)
     if socket_addr:
         self.socket = zmq.Context().socket(
             zmq.PUSH)  # push data non blocking
         self.socket.bind(socket_addr)
         send_meta_data(self.socket, run_conf,
                        name='RunConf')  # send run info
     else:
         self.socket = None
Exemplo n.º 3
0
 def __init__(
     self,
     filename,
     mode="w",
     title="",
     register=None,
     conf=None,
     run_conf=None,
     scan_parameters=None,
     socket_addr=None,
 ):  # mode="r+" to append data, raw_data_file_h5 must exist, "w" to overwrite raw_data_file_h5, "a" to append data, if raw_data_file_h5 does not exist it is created):
     self.lock = RLock()
     if os.path.splitext(filename)[1].strip().lower() != ".h5":
         self.base_filename = filename
     else:
         self.base_filename = os.path.splitext(filename)[0]
     if isinstance(scan_parameters, dict):
         self.scan_parameters = scan_parameters
     elif isinstance(scan_parameters, (list, tuple)):
         self.scan_parameters = dict.fromkeys(scan_parameters)
     else:
         self.scan_parameters = {}
     self.register = register  # reference to register object needed to store to fei4 raw data file
     self.raw_data_earray = None
     self.meta_data_table = None
     self.scan_param_table = None
     self.h5_file = None
     if mode and mode[0] == "w":
         h5_files = glob.glob(os.path.splitext(filename)[0] + "*.h5")
         if h5_files:
             logging.info("Removing following file(s): %s", ", ".join(h5_files))
         for h5_file in h5_files:
             remove(h5_file)
     # list of filenames and index
     self.curr_filename = self.base_filename
     self.filenames = {self.curr_filename: 0}
     self.open(self.curr_filename, mode, title)
     if conf:
         save_configuration_dict(self.h5_file, "conf", conf)
     if run_conf:
         save_configuration_dict(self.h5_file, "run_conf", run_conf)
     if socket_addr:
         self.socket = zmq.Context().socket(zmq.PUSH)  # push data non blocking
         self.socket.bind(socket_addr)
         send_meta_data(self.socket, run_conf, name="RunConf")  # send run info
     else:
         self.socket = None
Exemplo n.º 4
0
    def __init__(
        self,
        filename,
        mode="w",
        title='',
        register=None,
        conf=None,
        run_conf=None,
        scan_parameters=None,
        context=None,
        socket_address=None
    ):  # mode="r+" to append data, raw_data_file_h5 must exist, "w" to overwrite raw_data_file_h5, "a" to append data, if raw_data_file_h5 does not exist it is created):
        self.lock = RLock()
        if os.path.splitext(filename)[1].strip().lower() != '.h5':
            self.base_filename = filename
        else:
            self.base_filename = os.path.splitext(filename)[0]
        if isinstance(scan_parameters, dict):
            self.scan_parameters = scan_parameters
        elif isinstance(scan_parameters, (list, tuple)):
            self.scan_parameters = dict.fromkeys(scan_parameters)
        else:
            self.scan_parameters = {}
        self.raw_data_earray = None
        self.meta_data_table = None
        self.scan_param_table = None
        self.h5_file = None

        if socket_address and not context:
            logging.info('Creating ZMQ context')
            context = zmq.Context()

        if socket_address and context:
            logging.info('Creating socket connection to server %s',
                         socket_address)
            self.socket = context.socket(zmq.PUB)  # publisher socket
            self.socket.bind(socket_address)
            send_meta_data(self.socket, None,
                           name='Reset')  # send reset to indicate a new scan
        else:
            self.socket = None

        if mode and mode[0] == 'w':
            h5_files = glob.glob(os.path.splitext(filename)[0] + '*.h5')
            if h5_files:
                logging.info('Removing following file(s): %s',
                             ', '.join(h5_files))
            for h5_file in h5_files:
                remove(h5_file)
        # list of filenames and index
        self.curr_filename = self.base_filename
        self.filenames = {self.curr_filename: 0}
        self.open(self.curr_filename, mode, title)

        if register is not None:
            register.save_configuration(self.h5_file)
            if self.socket:
                global_register_config = {}
                for global_reg in sorted(
                        register.get_global_register_objects(readonly=False),
                        key=itemgetter('name')):
                    global_register_config[
                        global_reg['name']] = global_reg['value']
                send_meta_data(self.socket,
                               global_register_config,
                               name='GlobalRegisterConf')  # send run info
        if conf is not None:
            save_configuration_dict(self.h5_file, 'conf', conf)
        if run_conf is not None:
            save_configuration_dict(self.h5_file, 'run_conf', run_conf)
            if self.socket:
                send_meta_data(self.socket, run_conf, name='RunConf')