def __call__(self, mass, age, feh,<EOL>distance=None, AV=<NUM_LIT:0.0>,<EOL>return_df=True, bands=None):
<EOL>mass, age, feh = [np.array(a) for a in np.broadcast_arrays(mass, age, feh)]<EOL>args = (mass, age, feh)<EOL>Ms = self.mass(*args)*<NUM_LIT:1><EOL>Rs = self.radius(*args)*<NUM_LIT:1><EOL>logLs = self.logL(*args)*<NUM_LIT:1><EOL>loggs = self.logg(*args)*<NUM_LIT:1><EOL>Teffs = self.Teff(*args)*<NUM_LIT:1><EOL>if bands is None:<EOL><INDENT>bands = self.bands<EOL><DEDENT>if distance is not None:<EOL><INDENT>args += (distance, AV)<EOL><DEDENT>mags = {band:<NUM_LIT:1>*self.mag[band](*args) for band in bands}<EOL>props = {'<STR_LIT>':age,'<STR_LIT>':Ms,'<STR_LIT>':Rs,'<STR_LIT>':logLs,<EOL>'<STR_LIT>':loggs,'<STR_LIT>':Teffs,'<STR_LIT>':mags}<EOL>if not return_df:<EOL><INDENT>return props<EOL><DEDENT>else:<EOL><INDENT>d = {}<EOL>for key in props.keys():<EOL><INDENT>if key=='<STR_LIT>':<EOL><INDENT>for m in props['<STR_LIT>'].keys():<EOL><INDENT>d['<STR_LIT>'.format(m)] = props['<STR_LIT>'][m]<EOL><DEDENT><DEDENT>else:<EOL><INDENT>d[key] = props[key]<EOL><DEDENT><DEDENT>df = pd.DataFrame(d)<EOL>return df<EOL><DEDENT>
Returns all properties (or arrays of properties) at given mass, age, feh

:param mass, age, feh:
    Mass, log(age), metallicity.  Can be float or array_like.

:param distance:
    Distance in pc.  If passed, then mags will be converted to
    apparent mags based on distance (and ``AV``).

:param AV:
    V-band extinction (magnitudes).

:param return_df: (optional)
    If ``True``, return :class:``pandas.DataFrame`` containing all model
    parameters at each input value; if ``False``, return dictionary
    of the same.

:param bands: (optional)
    List of photometric bands in which to return magnitudes.
    Must be subset of ``self.bands``.  If not set, then will
    default to returning all available bands.

:return:
    Either a :class:`pandas.DataFrame` or a dictionary containing
    model values evaluated at input points.