Example #1
0
    def handle_data(self, data):
        events = build_events_from_raw_data(data[0])
        for item in events:
            if item.shape[0] == 0:
                continue
            if is_trigger_word(item[0]):
                if self.remaining_data.shape[0] > 0:
                    # check trigger number
                    if is_trigger_word(self.remaining_data[0]):
                        trigger_number = self.remaining_data[0] & (self.max_trigger_counter - 1)
                        if self.last_trigger_number is not None and ((self.last_trigger_number + 1 != trigger_number and self.last_trigger_number + 1 != self.max_trigger_counter) or (self.last_trigger_number + 1 == self.max_trigger_counter and trigger_number != 0)):
                            if self.data_error_occurred:
                                if trigger_number > self.last_trigger_number:
                                    missing_trigger_numbers = trigger_number - self.last_trigger_number - 1
                                else:
                                    missing_trigger_numbers = self.max_trigger_counter - (self.last_trigger_number - trigger_number) - 1
                                logging.warning('Data errors detected: trigger number read: %d, expected: %d, sending %d empty events', trigger_number, 0 if (self.last_trigger_number + 1 == self.max_trigger_counter) else (self.last_trigger_number + 1), missing_trigger_numbers)
                                for missing_trigger_number in range(self.last_trigger_number + 1, self.last_trigger_number + missing_trigger_numbers + 1):
                                    pp.SendEvent(np.asarray([missing_trigger_number & (self.max_trigger_counter - 1)], np.uint32))
                                self.data_error_occurred = False
                                self.last_trigger_number = trigger_number
                            else:
                                logging.warning('Trigger number not increasing: read: %d, expected: %d', trigger_number, 0 if (self.last_trigger_number + 1 == self.max_trigger_counter) else (self.last_trigger_number + 1))
                                self.last_trigger_number = (self.last_trigger_number + 1) & (self.max_trigger_counter - 1)
                        else:
                            self.last_trigger_number = trigger_number
                    pp.SendEvent(self.remaining_data)
                self.remaining_data = item
            else:
                self.remaining_data = np.concatenate([self.remaining_data, item])

        self.raw_data_file.append_item(data, scan_parameters=self.scan_parameters._asdict(), flush=True)
Example #2
0
    def handle_data(self, data):
        events = build_events_from_raw_data(data[0])
        for item in events:
            if item.shape[0] == 0:
                continue
            if is_trigger_word(item[0]):
                if self.remaining_data.shape[0] > 0:
                    # check trigger number
                    if is_trigger_word(self.remaining_data[0]):
                        trigger_number = self.remaining_data[0] & (self.max_trigger_counter - 1)
                        if self.last_trigger_number is not None and ((self.last_trigger_number + 1 != trigger_number and self.last_trigger_number + 1 != self.max_trigger_counter) or (self.last_trigger_number + 1 == self.max_trigger_counter and trigger_number != 0)):
                            if self.data_error_occurred:
                                if trigger_number > self.last_trigger_number:
                                    missing_trigger_numbers = trigger_number - self.last_trigger_number - 1
                                else:
                                    missing_trigger_numbers = self.max_trigger_counter - (self.last_trigger_number - trigger_number) - 1
                                logging.warning('Data errors detected: trigger number read: %d, expected: %d, sending %d empty events', trigger_number, 0 if (self.last_trigger_number + 1 == self.max_trigger_counter) else (self.last_trigger_number + 1), missing_trigger_numbers)
                                for missing_trigger_number in range(self.last_trigger_number + 1, self.last_trigger_number + missing_trigger_numbers + 1):
                                    pp.SendEvent(np.asarray([missing_trigger_number & (self.max_trigger_counter - 1)], np.uint32))
                                self.data_error_occurred = False
                                self.last_trigger_number = trigger_number
                            else:
                                logging.warning('Trigger number not increasing: read: %d, expected: %d', trigger_number, 0 if (self.last_trigger_number + 1 == self.max_trigger_counter) else (self.last_trigger_number + 1))
                                self.last_trigger_number = (self.last_trigger_number + 1) & (self.max_trigger_counter - 1)
                        else:
                            self.last_trigger_number = trigger_number
                    pp.SendEvent(self.remaining_data)
                self.remaining_data = item
            else:
                self.remaining_data = np.concatenate([self.remaining_data, item])

        self.raw_data_file.append_item(data, scan_parameters=self.scan_parameters._asdict(), flush=True)
Example #3
0
 def handle_data(self, data, new_file=False, flush=True):
     bad_event = False
     for data_tuple in data[0]:  # only use data from first module
         events = build_events_from_raw_data(
             data_tuple[0])  # build events from raw data array
         for event in events:
             if event.shape[0] == 0:
                 continue
             if is_trigger_word(event[0]):
                 if self.remaining_data.shape[0] > 0:
                     # check trigger number
                     if is_trigger_word(self.remaining_data[0]):
                         trigger_number = get_trigger_data(
                             self.remaining_data[0], mode=self.trigger_mode)
                         if trigger_number >= self.max_trigger_counter:
                             logging.warning(
                                 'Trigger number larger than expected - read %d, maximum: %d'
                                 % (trigger_number,
                                    self.max_trigger_counter - 1))
                         if self.last_trigger_number is not None and (
                             (self.last_trigger_number + 1 != trigger_number
                              and self.last_trigger_number + 1 !=
                              self.max_trigger_counter) or
                             (self.last_trigger_number + 1
                              == self.max_trigger_counter
                              and trigger_number != 0)):
                             if self.data_error_occurred:
                                 missing_trigger_numbers = []
                                 curr_missing_trigger_number = self.last_trigger_number + 1
                                 while True:
                                     if curr_missing_trigger_number == self.max_trigger_counter:
                                         curr_missing_trigger_number = 0
                                     if trigger_number == curr_missing_trigger_number:
                                         break
                                     missing_trigger_numbers.append(
                                         curr_missing_trigger_number)
                                     curr_missing_trigger_number += 1
                                 logging.warning(
                                     'Data errors detected - trigger number read: %d, expected: %d, sending %d empty events',
                                     trigger_number,
                                     self.last_trigger_number + 1,
                                     len(missing_trigger_numbers))
                                 for missing_trigger_number in missing_trigger_numbers:
                                     pp.SendEvent(
                                         np.asarray(
                                             [missing_trigger_number],
                                             dtype=np.uint32))
                                 self.data_error_occurred = False
                                 self.last_trigger_number = trigger_number
                             else:
                                 logging.warning(
                                     'Trigger number not increasing - read: %d, expected: %d',
                                     trigger_number,
                                     self.last_trigger_number)
                                 if self.send_bad_events:
                                     self.last_trigger_number += 1
                                     if self.last_trigger_number == self.max_trigger_counter:
                                         self.last_trigger_number = 0
                                 else:
                                     bad_event = True
                         else:
                             self.last_trigger_number = trigger_number
                         # inside if statement to ignore any data before first trigger
                         if bad_event:
                             logging.warning(
                                 'Skipping event with trigger number %d',
                                 trigger_number)
                             bad_event = False
                         else:
                             pp.SendEvent(self.remaining_data)
                     # outside if statement so that any data before first trigger becomes an event
                     # pp.SendEvent(self.remaining_data)
                 self.remaining_data = event
             else:
                 self.remaining_data = np.concatenate(
                     [self.remaining_data, event])
     super(EudaqExtTriggerScan, self).handle_data(data=data,
                                                  new_file=new_file,
                                                  flush=flush)