docs: def make_grid(self, incl_pmag=True):
          """
          return grid
          """
          if incl_pmag and self.grid_type in self.er_magic.incl_pmag_data:
              incl_pmag = True
          else:
              incl_pmag = False
          er_header = self.grid_headers[self.grid_type]['er'][0]
          if incl_pmag:
              pmag_header = self.grid_headers[self.grid_type]['pmag'][0]
          else:
              pmag_header = []
          # if we need to use '++' to distinguish pmag magic_method_codes from er
          if incl_pmag and self.grid_type in ('specimen', 'sample', 'site'):
              for double_header in self.er_magic.double:
                  try:
                      pmag_header.remove(double_header)
                      pmag_header.append(double_header + '++')
                  except ValueError:
                      pass
          header = sorted(list(set(er_header).union(pmag_header)))
  
          first_headers = []
          for string in ['citation', '{}_class'.format(self.grid_type),
                         '{}_lithology'.format(self.grid_type), '{}_type'.format(self.grid_type),
                        'site_definition']:
              for head in header[:]:
                  if string in head:
                      header.remove(head)
                      first_headers.append(head)
  
          # the way we work it, each specimen is assigned to a sample
          # each sample is assigned to a site
          # specimens can not be added en masse to a site object, for example
          # this data will be written in
          for string in ['er_specimen_names', 'er_sample_names', 'er_site_names']:
              for head in header[:]:
                  if string in head:
                      header.remove(head)
  
          # do headers for results type grid
          if self.grid_type == 'result':
              #header.remove('pmag_result_name')
              header[:0] = ['pmag_result_name', 'er_citation_names', 'er_specimen_names',
                            'er_sample_names', 'er_site_names', 'er_location_names']
  
          elif self.grid_type == 'age':
              for header_type in self.er_magic.first_age_headers:
                  if header_type in header:
                      header.remove(header_type)
              lst = ['er_' + self.grid_type + '_name']
              lst.extend(self.er_magic.first_age_headers)
              header[:0] = lst
  
          # do headers for all other data types without parents
          elif not self.parent_type:
              lst = ['er_' + self.grid_type + '_name']
              lst.extend(first_headers)
              header[:0] = lst
          # do headers for all data types with parents
          else:
              lst = ['er_' + self.grid_type + '_name', 'er_' + self.parent_type + '_name']
              lst.extend(first_headers)
              header[:0] = lst
  
          grid = magic_grid.MagicGrid(parent=self.panel, name=self.grid_type,
                                      row_labels=[], col_labels=header,
                                      double=self.er_magic.double)
          grid.do_event_bindings()
  
          self.grid = grid
          return grid