def read_redo_file(self, redo_file):
        """
        Read previous interpretation from a redo file
        and update gui with the new interpretation
        """
        self.GUI_log.write(
            "-I- reading redo file and processing new temperature bounds")
        self.redo_specimens = {}
        # first delete all previous interpretation
        for sp in list(self.Data.keys()):
            del self.Data[sp]['pars']
            self.Data[sp]['pars'] = {}
            self.Data[sp]['pars']['lab_dc_field'] = self.Data[sp]['lab_dc_field']
            self.Data[sp]['pars']['er_specimen_name'] = self.Data[sp]['er_specimen_name']
            self.Data[sp]['pars']['er_sample_name'] = self.Data[sp]['er_sample_name']
            # print sp
            # print self.Data[sp]['pars']
        self.Data_samples = {}
        self.Data_sites = {}

        fin = open(redo_file, 'r')
        lines = fin.readlines()
        fin.close()
        for Line in lines:
            line = Line.strip('\n').split()
            specimen = line[0]
            tmin_kelvin = float(line[1])
            tmax_kelvin = float(line[2])
            if specimen not in list(self.redo_specimens.keys()):
                self.redo_specimens[specimen] = {}
            self.redo_specimens[specimen]['t_min'] = float(tmin_kelvin)
            self.redo_specimens[specimen]['t_max'] = float(tmax_kelvin)
            if specimen in list(self.Data.keys()):
                if tmin_kelvin not in self.Data[specimen]['t_Arai'] or tmax_kelvin not in self.Data[specimen]['t_Arai']:
                    self.GUI_log.write(
                        "-W- WARNING: can't fit temperature bounds in the redo file to the actual measurement. specimen %s\n" % specimen)
                else:
                    self.Data[specimen]['pars'] = thellier_gui_lib.get_PI_parameters(
                        self.Data, self.acceptance_criteria, self.preferences, specimen, float(tmin_kelvin), float(tmax_kelvin), self.GUI_log, THERMAL, MICROWAVE)
                    try:
                        self.Data[specimen]['pars'] = thellier_gui_lib.get_PI_parameters(
                            self.Data, self.acceptance_criteria, self.preferences, specimen, float(tmin_kelvin), float(tmax_kelvin), self.GUI_log, THERMAL, MICROWAVE)
                        self.Data[specimen]['pars']['saved'] = True
                        # write intrepretation into sample data
                        sample = self.Data_hierarchy['specimens'][specimen]
                        if sample not in list(self.Data_samples.keys()):
                            self.Data_samples[sample] = {}
                        if specimen not in list(self.Data_samples[sample].keys()):
                            self.Data_samples[sample][specimen] = {}
                        self.Data_samples[sample][specimen]['B'] = self.Data[specimen]['pars']['specimen_int_uT']
                        site = thellier_gui_lib.get_site_from_hierarchy(
                            sample, self.Data_hierarchy)
                        if site not in list(self.Data_sites.keys()):
                            self.Data_sites[site] = {}
                        if specimen not in list(self.Data_sites[site].keys()):
                            self.Data_sites[site][specimen] = {}
                        self.Data_sites[site][specimen]['B'] = self.Data[specimen]['pars']['specimen_int_uT']

                    except:
                        print("-E- ERROR 1")
                        self.GUI_log.write(
                            "-E- ERROR. Can't calculate PI paremeters for specimen %s using redo file. Check!\n" % (specimen))
            else:
                self.GUI_log.write(
                    "-W- WARNING: Can't find specimen %s from redo file in measurement file!\n" % specimen)
                print(
                    "-W- WARNING: Can't find specimen %s from redo file in measurement file!\n" % specimen)
        if not fin.closed:
            fin.close()
        self.pars = self.Data[self.s]['pars']
        self.clear_boxes()
        self.draw_figure(self.s)
        self.update_GUI_with_new_interpretation()