def METHOD_NAME(self, chain: Mapping) -> None:
    """Add a chain to the cell.
    A chain is a dictionary following
    the `AIRR Rearrangement Schema <https://docs.airr-community.org/en/latest/datarep/rearrangements.html#productive>`__.
    """
    # ensure consistent ordering
    chain = dict(sorted(chain.items()))
    # sanitize NA values
    chain = {k: None if _is_na2(v) else v for k, v in chain.items()}
    RearrangementSchema.validate_header(chain.keys())
    RearrangementSchema.validate_row(chain)
    for tmp_field in self._cell_attribute_fields:
        # It is ok if a field specified as cell attribute is not present in the chain
        try:
            self[tmp_field] = chain.pop(tmp_field)
        except KeyError:
            pass
    if self._chain_fields is None:
        self._chain_fields = list(chain.keys())
    if "locus" not in chain:
        self._logger.warning(
            "`locus` field not specified, but required for most scirpy functionality. "
        )  # type: ignore
    elif chain["locus"] not in self.VALID_LOCI:
        self._logger.warning(f"Non-standard locus name: {chain['locus']} ")  # type: ignore
    self.chains.append(chain)