code: def new_app(self, App, prefix=None, callable=None, **params):
          
          params.update(self.cfg.params)
          params.pop('name', None)    # remove the name
          prefix = prefix or ''
          if not prefix and '' in self._apps:
              prefix = App.name or App.__name__.lower()
          if not prefix:
              name = self.name
              cfg = App.create_config(params, name=name)
          else:
              name = '%s_%s' % (prefix, self.name)
              cfg = App.create_config(params, prefix=prefix, name=name)
          # Add the config entry to the multi app config if not available
          for k in cfg.settings:
              if k not in self.cfg.settings:
                  self.cfg.settings[k] = cfg.settings[k]
          return new_app(prefix, (App, name, callable, cfg))
docs: Invoke this method in the :meth:`build` method as many times
          as the number of :class:`Application` required by this
          :class:`MultiApp`.
  
          :param App: an :class:`Application` class.
          :param prefix: The prefix to use for the application,
              the prefix is appended to
              the application :ref:`config parameters <settings>` and to the
              application name. Each call to this method must use a different
              value of for this parameter. It can be ``None``.
          :param callable: optional callable (function of object) used during
              initialisation of *App* (the :class:`Application.callable`).
          :param params: additional key-valued parameters used when creating
              an instance of *App*.
          :return: a tuple used by the :meth:`apps` method.