code: def _required_channels(self, seg_numbers, channels, dir_name, pb_dir):
          
  
          # Fixed layout. All channels are the same.
          if self.layout == 'fixed':
              required_channels = [channels] * len(seg_numbers)
          # Variable layout: figure out channels by matching record names
          else:
              required_channels = []
              # The overall layout signal names
              l_sig_names = self.segments[0].sig_name
              # The wanted signals
              w_sig_names = [l_sig_names[c] for c in channels]
  
              # For each segment
              for i in range(len(seg_numbers)):
                  # Skip empty segments
                  if self.seg_name[seg_numbers[i]] == '~':
                      required_channels.append([])
                  else:
                      # Get the signal names of the current segment
                      s_sig_names = rdheader(
                          os.path.join(dir_name, self.seg_name[seg_numbers[i]]),
                          pb_dir=pb_dir).sig_name
                      required_channels.append(_get_wanted_channels(
                          w_sig_names, s_sig_names))
  
          return required_channels
docs: Get the channel numbers to be read from each specified segment,
          given the channel numbers specified for the entire record.
  
          Parameters
          ----------
          seg_numbers : list
              List of segment numbers to read.
          channels : list
              The channel indices to read for the whole record. Same one
              specified by user input.
  
          Returns
          -------
          required_channels : list
              List of lists, containing channel indices to read for each
              desired segment.