def __call__(self, obj, tag='<STR_LIT>'):
from neuropythy.mri import is_subject<EOL>if is_topo(obj) or is_subject(obj):<EOL><INDENT>msh = self.extract_mesh(obj)<EOL>if msh is None: raise ValueError('<STR_LIT>' % obj)<EOL>else: obj = msh<EOL><DEDENT>if isinstance(obj, Mesh):<EOL><INDENT>proj = self if self.mesh is obj else self.copy(mesh=obj)<EOL>submesh = self.select_domain(obj)<EOL>res = self.forward(submesh)<EOL>return res if tag is None else res.with_meta({tag:proj})<EOL><DEDENT>elif pimms.is_vector(obj):<EOL><INDENT>return self.forward(obj) if self.in_domain(obj) else None<EOL><DEDENT>else:<EOL><INDENT>return self.forward(self.select_domain(obj))<EOL><DEDENT>
proj(x) performs the map projection proj on the given coordinate or coordinate matrix x and
  yields the resulting coordinate or coordinate matrix. If no coordinates in x are part of
  the domain, then an empty matrix is returned; if only one coordinate was provided, and it
  is not in the domain, then None is returned.
proj(mesh) yields a 2D mesh that is the result of the given projection; in this case, the
  meta_data of the newly created mesh includes the tag 'projection', which will contain the
  projection used to create the map; this projection will have been reified with mesh. The
  optional argument tag may be used to change the name of 'projection'; None indicates that
  no tag should be included.
proj(topo) yields a 2D mesh that is derived from one of the registrations in the given
  topology topo, determined by the proj.registration parameter.