def set_param_file_or_parameters(mcs, attr):
        """
        Set parameters from class attributes that are instances of
        :class:`~simkit.core.Parameter` or from a parameter file.

        Any class attributes that are instances of
        :class:`~simkit.core.Parameter` are popped from the class and added to
        a the ``parameters`` attribute, which is a dictionary of the parameters.

        :param attr: class attributes
        :return: new list of class attributes with parameters
        """
        meta = attr[mcs._meta_attr]  # look for parameter file path in meta
        cls_path = getattr(meta, mcs._path_attr, None)
        cls_file = getattr(meta, mcs._file_attr, None)
        # read parameters
        attr[mcs._param_attr] = {}
        attr[mcs._param_file] = None
        # read parameters from file
        if None not in [cls_path, cls_file]:
            param_file = os.path.join(cls_path, cls_file)
            attr[mcs._param_file] = param_file
            # read and load JSON parameter map file as "parameters"
            with open(param_file, 'r') as param_file:
                file_params = json.load(param_file)
            # update meta from file
            for k, v in file_params.pop(mcs._meta_cls, {}).iteritems():
                setattr(meta, k, v)
            # dictionary of parameters for reading source file
            attr[mcs._param_attr] = {
                k: mcs._param_cls(**v) for k, v in file_params.iteritems()
            }
        # get parameters from class
        parameters = dict.fromkeys(
            k for k, v in attr.iteritems() if isinstance(v, Parameter)
        )
        # update parameters
        for k in parameters:
            attr[mcs._param_attr][k] = attr.pop(k)
        return attr
Set parameters from class attributes that are instances of
        :class:`~simkit.core.Parameter` or from a parameter file.

        Any class attributes that are instances of
        :class:`~simkit.core.Parameter` are popped from the class and added to
        a the ``parameters`` attribute, which is a dictionary of the parameters.

        :param attr: class attributes
        :return: new list of class attributes with parameters