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')
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
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
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')