Reads an isochrone in the old Padova format (Girardi 2002,
        Marigo 2008) and determines the age (log10 yrs and Gyr),
        metallicity (Z and [Fe/H]), and creates arrays with the
        initial stellar mass and corresponding magnitudes for each
        step along the isochrone.
        http://stev.oapd.inaf.it/cgi-bin/cmd

def _parse(self,filename):
        """
        Reads an isochrone in the old Padova format (Girardi 2002,
        Marigo 2008) and determines the age (log10 yrs and Gyr),
        metallicity (Z and [Fe/H]), and creates arrays with the
        initial stellar mass and corresponding magnitudes for each
        step along the isochrone.
        http://stev.oapd.inaf.it/cgi-bin/cmd
        """
        try:
            columns = self.columns[self.survey.lower()]
        except KeyError as e:
            logger.warning('did not recognize survey %s'%(survey))
            raise(e)

        kwargs = dict(delimiter='\t',usecols=list(columns.keys()),dtype=list(columns.values()))
        self.data = np.genfromtxt(filename,**kwargs)
        
        self.mass_init = self.data['mass_init']
        self.mass_act  = self.data['mass_act']
        self.luminosity = 10**self.data['log_lum']
        self.mag_1 = self.data[self.band_1]
        self.mag_2 = self.data[self.band_2]
        self.stage = np.char.array(self.data['stage']).strip()
        for i,s in enumerate(self.stage):
            if i>0 and s=='' and self.stage[i-1]!='':
                self.stage[i] = self.stage[i-1]

        # Check where post-AGB isochrone data points begin
        self.mass_init_upper_bound = np.max(self.mass_init)
        if np.any(self.stage == 'LTP'):
            self.index = np.nonzero(self.stage == 'LTP')[0][0]
        else:
            self.index = len(self.mass_init)

        self.mag = self.mag_1 if self.band_1_detection else self.mag_2
        self.color = self.mag_1 - self.mag_2