code: def _parse(self,filename):
          
          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
docs: 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