def init(self): # Prevent interference between the read callback and the shutdown code: self.tasklock = threading.RLock() # Assigned on a per-task basis and cleared afterward: self.read_array = None self.task = None # Assigned on a per-shot basis and cleared afterward: self.buffered_mode = False self.h5_file = None self.acquired_data = None self.buffered_rate = None self.buffered_chans = None # Hard coded for now. Perhaps we will add functionality to enable # and disable inputs in manual mode, and adjust the rate: self.manual_mode_chans = ['ai%d' % i for i in range(self.num_AI)] self.manual_mode_rate = 1000 # An event for knowing when the wait durations are known, so that we may use # them to chunk up acquisition data: self.wait_durations_analysed = Event('wait_durations_analysed') # Start task for manual mode self.start_task(self.manual_mode_chans, self.manual_mode_rate)
def init(self): self.all_waits_finished = Event('all_waits_finished', type='post') self.wait_durations_analysed = Event('wait_durations_analysed', type='post') self.wait_completed = Event('wait_completed', type='post') # Set on a per-shot basis and cleared afterward: self.h5_file = None self.CI_task = None self.DO_task = None self.wait_table = None self.semiperiods = None self.wait_monitor_thread = None # Saved error in case one occurs in the thread, we can raise it later in # transition_to_manual: self.wait_monitor_thread_exception = None # To trigger early shutdown of the wait monitor thread: self.shutting_down = False # Does this device have the "incomplete sample detection" feature? This # determines whether the first sample on our semiperiod counter input task will # be automatically discarded before we see it, or whether we will have to # discard it ourselves self.incomplete_sample_detection = incomplete_sample_detection( self.MAX_name) # Data for timeout triggers: if self.timeout_trigger_type == 'rising': trigger_value = 1 rearm_value = 0 elif self.timeout_trigger_type == 'falling': trigger_value = 0 rearm_value = 1 else: msg = 'timeout_trigger_type must be "rising" or "falling", not "{}".' raise ValueError(msg.format(self.timeout_trigger_type)) self.timeout_trigger = np.array([trigger_value], dtype=np.uint8) self.timeout_rearm = np.array([rearm_value], dtype=np.uint8)
def __init__(self, initial_settings): self.menu = None self.notifications = {} self.initial_settings = initial_settings self.BLACS = None self.command_queue = Queue() self.master_pseudoclock = None self.shot_start_time = None self.stop_time = None self.markers = None self.waits = None self.time_spent_waiting = None self.next_wait_index = None self.next_marker_index = None self.bar_text_prefix = None self.h5_filepath = None self.wait_completed_events_supported = False self.wait_completed = Event('wait_completed', type='wait') self.mainloop_thread = threading.Thread(target=self.mainloop) self.mainloop_thread.daemon = True self.mainloop_thread.start()