docs: def get_data_info(self):
          """
          imports er tables and places data into Data_info data structure
          outlined bellow:
          Data_info - {er_samples: {er_samples.txt info}
                       er_sites: {er_sites.txt info}
                       er_locations: {er_locations.txt info}
                       er_ages: {er_ages.txt info}}
          """
          Data_info = {}
          data_er_samples = {}
          data_er_sites = {}
          data_er_locations = {}
          data_er_ages = {}
  
          if self.data_model == 3.0:
              print(("data model: %1.1f" % (self.data_model)))
              Data_info["er_samples"] = []
              Data_info["er_sites"] = []
              Data_info["er_locations"] = []
              Data_info["er_ages"] = []
  
              # self.magic_file may have a full path, but this breaks cb.Contribution
              # determine if magic_file exists in WD, and if it doesn't, copy it in
  
              magic_file_real = os.path.realpath(self.magic_file)
              magic_file_short = os.path.split(self.magic_file)[1]
              WD_file_real = os.path.realpath(
                  os.path.join(self.WD, magic_file_short))
              if magic_file_real == WD_file_real:
                  fnames = {'measurements': magic_file_short}
              else:
                  # copy measurements file to WD, keeping original name
                  shutil.copy(magic_file_real, WD_file_real)
                  fnames = {'measurements': magic_file_short}
              self.con = cb.Contribution(self.WD, custom_filenames=fnames, read_tables=[
                                         'measurements', 'specimens', 'samples', 'sites', 'locations', 'criteria', 'ages'])
              if 'specimens' in self.con.tables:
                  spec_container = self.con.tables['specimens']
                  self.spec_data = spec_container.df
              else:
                  self.con.add_empty_magic_table('specimens')
                  self.spec_data = self.con.tables['specimens'].df
              if 'samples' in self.con.tables:
                  samp_container = self.con.tables['samples']
                  samp_container.front_and_backfill(['azimuth', 'dip'])
                  self.samp_data = samp_container.df
                  samp_data2 = self.samp_data.rename(
                      columns=map_magic.samp_magic3_2_magic2_map)
                  data_er_samples = samp_data2.T.to_dict()
              else:
                  self.con.add_empty_magic_table('samples')
                  self.samp_data = self.con.tables['samples'].df
              if 'sites' in self.con.tables:
                  site_container = self.con.tables['sites']
                  self.site_data = site_container.df
                  if 'age' in self.site_data.columns:
                      self.site_data = self.site_data[self.site_data['age'].notnull(
                      )]
                      age_ids = [col for col in self.site_data.columns if col.startswith(
                          "age") or col == "site"]
                      age_data = self.site_data[age_ids].rename(
                          columns=map_magic.site_magic3_2_magic2_map)
                      # save this in 2.5 format
                      er_ages = age_data.to_dict('records')
                      data_er_ages = {}
                      for s in er_ages:
                          s = self.convert_ages_to_calendar_year(s)
                          data_er_ages[s['er_site_name']] = s
                  sites = self.site_data.rename(
                      columns=map_magic.site_magic3_2_magic2_map)
                  # pick out what is needed by thellier_gui and put in 2.5 format
                  er_sites = sites.to_dict('records')
                  data_er_sites = {}
                  for s in er_sites:
                      data_er_sites[s['er_site_name']] = s
              else:
                  self.con.add_empty_magic_table('sites')
                  self.site_data = self.con.tables['sites'].df
              if 'locations' in self.con.tables:
                  location_container = self.con.tables["locations"]
                  self.loc_data = location_container.df  # only need this for saving tables
                  if self.loc_data['location'].isnull().any():
                      self.loc_data.replace(
                          {'location': {None: 'unknown'}}, inplace=True)
                      self.loc_data.set_index('location', inplace=True)
                      self.loc_data['location'] = self.loc_data.index
                  loc2_data = self.loc_data.rename(
                      columns=map_magic.loc_magic3_2_magic2_map)
                  data_er_locations = loc2_data.to_dict('index')
              else:
                  self.con.add_empty_magic_table('locations')
                  self.loc_data = self.con.tables['locations'].df
  
          else:  # try 2.5 data model
  
              print(("data model: %1.1f" % (self.data_model)))
              self.read_magic_file(os.path.join(
                  self.WD, "er_samples.txt"), 'er_sample_name')
  
              try:
                  data_er_samples = self.read_magic_file(
                      os.path.join(self.WD, "er_samples.txt"), 'er_sample_name')
              except:
                  print("-W- Can't find er_sample.txt in project directory")
  
              try:
                  data_er_sites = self.read_magic_file(
                      os.path.join(self.WD, "er_sites.txt"), 'er_site_name')
              except:
                  print("-W- Can't find er_sites.txt in project directory")
  
              try:
                  data_er_locations = self.read_magic_file(os.path.join(
                      self.WD, "er_locations.txt"), 'er_location_name')
              except:
                  print("-W- Can't find er_locations.txt in project directory")
  
              try:
                  data_er_ages = self.read_magic_file(
                      os.path.join(self.WD, "er_ages.txt"), 'er_sample_name')
              except:
                  try:
                      data_er_ages = self.read_magic_file(
                          os.path.join(self.WD, "er_ages.txt"), 'er_site_name')
                  except:
                      print("-W- Can't find er_ages in project directory")
  
          Data_info["er_samples"] = data_er_samples
          Data_info["er_sites"] = data_er_sites
          Data_info["er_locations"] = data_er_locations
          Data_info["er_ages"] = data_er_ages
  
          return(Data_info)