code: def _get_data_dtype(self):
          
  
          pkhrec = [
              ('GP_PK_HEADER', GSDTRecords.gp_pk_header),
              ('GP_PK_SH1', GSDTRecords.gp_pk_sh1)
          ]
          pk_head_dtype = np.dtype(pkhrec)
  
          def get_lrec(cols):
              lrec = [
                  ("gp_pk", pk_head_dtype),
                  ("version", np.uint8),
                  ("satid", np.uint16),
                  ("time", (np.uint16, 5)),
                  ("lineno", np.uint32),
                  ("chan_id", np.uint8),
                  ("acq_time", (np.uint16, 3)),
                  ("line_validity", np.uint8),
                  ("line_rquality", np.uint8),
                  ("line_gquality", np.uint8),
                  ("line_data", (np.uint8, cols))
              ]
  
              return lrec
  
          # each pixel is 10-bits -> one line of data has 25% more bytes
          # than the number of columns suggest (10/8 = 1.25)
          visir_rec = get_lrec(int(self.mda['number_of_columns'] * 1.25))
          number_of_visir_channels = len(
              [s for s in self.mda['channel_list'] if not s == 'HRV'])
          drec = [('visir', (visir_rec, number_of_visir_channels))]
  
          if self.mda['available_channels']['HRV']:
              hrv_rec = get_lrec(int(self.mda['hrv_number_of_columns'] * 1.25))
              drec.append(('hrv', (hrv_rec, 3)))
  
          return np.dtype(drec)
docs: Get the dtype of the file based on the actual available channels