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)
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}}