docs: def from_class_line(cls, classLine, version=4, existing_object=None):
          '''
          Class format:
          class wrt n m security object  mag  stdev F H_sur  dist     ..E    nobs   time  av_xres av_yres max_x  max_y
          a ..E        e  ..E      i      ..E      node     ..E   argperi      ..E   time_peri      ..E    rate
          '''
          if not classLine:
              raise ValueError('No class file line given.')
          if version == 4:
              params = classLine.split()
              if len(params) != 31:
                  print params
                  raise TypeError('Expected 31 columns, {0} given'.format(len(params)))
              input_params = [params[5]] + params[10:30]  # the elements that are in common
              if not existing_object:
                  # can later add more tests that the values match those in the existing object
                  retval = cls(*input_params)
              else:
                  assert isinstance(existing_object, tno)
                  assert existing_object.name == params[5]
                  retval = existing_object
              retval.classification = params[0]
              retval.wrt = params[1]
              retval.n = int(params[2])
              retval.m = int(params[3])
              retval.security = params[4]
              retval.mag_discov = float(params[6])
              retval.mag_discov_e = float(params[7])
              retval.filter = params[8]
              retval.H = float(
                  params[9])  # H_r magnitude, using the average m_r and the discovery geometry (same error as m_r)
              retval.rate = float(params[30])
          elif version == 5:
              # Upgrade?
              # input_params =
              retval = cls(*input_params)
          else:
              raise VersionError('Unknown version "{0}"'.format(version))
          assert retval
          return retval