Esempio n. 1
0
    def add_alias_field(self, alias, field, units=None,
                        force_add=True):
        r"""
        Add a field as an alias to another field.

        Parameters
        ----------
        alias : string
            Alias name.
        field : string
            The field to be aliased.
        units : optional, string
            Units in which the field will be returned.
        force_add : optional, bool
            If True, add field even if it already exists and warn the
            user and raise an exception if dependencies do not exist.
            If False, silently do nothing in both instances.
            Default: True.

        Examples
        --------

        >>> import ytree
        >>> a = ytree.load("tree_0_0_0.dat")
        >>> # "Mvir" exists on disk
        >>> a.add_alias_field("mass", "Mvir", units="Msun")
        >>> print (a["mass"])

        """

        if alias in self.field_info:
            if force_add:
                ftype = self.field_info[alias].get("type", "on-disk")
                if ftype in ["alias", "derived"]:
                    fl = self.derived_field_list
                else:
                    fl = self.field_list
                mylog.warn(
                    ("Overriding field \"%s\" that already " +
                     "exists as %s field.") % (alias, ftype))
                fl.pop(fl.index(alias))
            else:
                return

        if field not in self.field_info:
            if force_add:
                raise ArborFieldDependencyNotFound(
                    field, alias, arbor=self)
            else:
                return

        if units is None:
            units = self.field_info[field].get("units")
        self.derived_field_list.append(alias)
        self.field_info[alias] = \
          {"type": "alias", "units": units,
           "dependencies": [field]}
        if "aliases" not in self.field_info[field]:
            self.field_info[field]["aliases"] = []
            self.field_info[field]["aliases"].append(alias)
Esempio n. 2
0
    def add_alias_field(self, alias, field, units=None, force_add=True):
        """
        Add an alias field.
        """

        if alias in self:
            if force_add:
                ftype = self[alias].get("type", "on-disk")
                if ftype in ["alias", "derived"]:
                    fl = self.arbor.derived_field_list
                else:
                    fl = self.arbor.field_list
                mylog.warning(f"Overriding field \"{alias}\" that already "
                              f"exists as {ftype} field.")
                fl.pop(fl.index(alias))
            else:
                return

        if field not in self:
            if force_add:
                raise ArborFieldDependencyNotFound(field, alias, arbor=self)
            else:
                return

        if units is None:
            units = self[field].get("units")
        self.arbor.derived_field_list.append(alias)
        self[alias] = \
          {"type": "alias", "units": units,
           "dependencies": [field]}
        if "aliases" not in self[field]:
            self[field]["aliases"] = []
            self[field]["aliases"].append(alias)
Esempio n. 3
0
 def __missing__(self, key):
     if key not in self.arbor.field_info:
         raise ArborFieldDependencyNotFound(self.name, key, self.arbor)
     fi = self.arbor.field_info[key]
     units = fi.get("units", "")
     if fi.get("vector_field", False):
         data = np.ones((1, 3))
     else:
         data = np.ones(1)
     self[key] = self.arbor.arr(data, units)
     return self[key]
Esempio n. 4
0
 def __missing__(self, key):
     if key not in self.arbor.field_info:
         raise ArborFieldDependencyNotFound(self.name, key, self.arbor)
     units = self.arbor.field_info[key].get("units", "")
     self[key] = self.arbor.arr(np.ones(1), units)
     return self[key]
Esempio n. 5
0
 def _validate_key(self, key):
     if key not in self.arbor.field_info:
         raise ArborFieldDependencyNotFound(self.name, key, self.arbor)