code: def get_bitseq_from_selection(self, selection_start: int, selection_width: int):
          
          start_message, start_index, end_message, end_index = -1, -1, -1, -1
          if not self.messages or not self.messages[0].bit_sample_pos:
              return start_message, start_index, end_message, end_index
  
          if selection_start + selection_width < self.messages[0].bit_sample_pos[0]:
              return start_message, start_index, end_message, end_index
  
          for i, msg in enumerate(self.messages):
              msg_sample_pos = msg.bit_sample_pos
              if msg_sample_pos[-2] < selection_start:
                  continue
              elif start_message == -1:
                  start_message = i
                  for j, sample_pos in enumerate(msg_sample_pos):
                      if sample_pos < selection_start:
                          continue
                      elif start_index == -1:
                          start_index = j
                          if msg_sample_pos[-1] - selection_start < selection_width:
                              break
                      elif sample_pos - selection_start > selection_width:
                          return start_message, start_index, i, j
              elif msg_sample_pos[-1] - selection_start < selection_width:
                  continue
              else:
                  for j, sample_pos in enumerate(msg_sample_pos):
                      if sample_pos - selection_start > selection_width:
                          return start_message, start_index, i, j
  
          last_message = len(self.messages) - 1
          last_index = len(self.messages[-1].plain_bits) + 1
          return start_message, start_index, last_message, last_index
docs: get start and end index of bit sequence from selected samples
  
          :rtype: tuple[int,int,int,int]
          :return: start_message index, start index, end message index, end index