antibody_utils.numbering.positions

Numbered positions in antibody variable domains.

Functions

parse_chain_position(text)

Parse a chain-qualified position such as "H100A".

Classes

Chain(*values)

An antibody variable-domain chain type.

Position(number[, insertion])

A numbered position: a residue number and an optional insertion code.

Scheme(*values)

An antibody numbering scheme.

class antibody_utils.numbering.positions.Chain(*values)[source]

Bases: _CaseInsensitiveStrEnum

An antibody variable-domain chain type.

Members compare equal to their one-letter codes, and lookup is case-insensitive.

>>> Chain("h")
<Chain.HEAVY: 'H'>
>>> Chain.LIGHT == "L"
True
class antibody_utils.numbering.positions.Position(number, insertion='')[source]

Bases: object

A numbered position: a residue number and an optional insertion code.

Positions order by number, then by insertion code, which is the order of residues in the Kabat, Chothia and Martin schemes. (IMGT orders the insertions at position 112 in reverse, so sort IMGT positions by sequence order rather than by Position.)

The insertion attribute is “” when there is no insertion code. Gemmi, Biopython, ANARCI and ANARCII write that as a single space instead, which Position accepts on input; use to_tuple to convert back.

Parameters:
  • number (int) – The residue number.

  • insertion (str) – The insertion code: an upper-case letter, or “” for none. Whitespace, such as the single space used by other tools, also means none.

Raises:

ValueError – If the insertion code is not a single letter.

>>> Position(100, "A")
Position(number=100, insertion='A')
>>> Position(35) < Position(35, "A") < Position(36)
True
classmethod from_tuple(position)[source]

Convert a (number, insertion) tuple, as used by ANARCI and Biopython.

Parameters:

position (tuple[int | str, str]) – The residue number (an integer, or a string of digits as ANARCII sometimes gives) and the insertion code, where “ “ means no insertion.

Return type:

Self

Returns:

The position.

>>> Position.from_tuple((52, " "))
Position(number=52, insertion='')
>>> Position.from_tuple(("111", "A"))
Position(number=111, insertion='A')
classmethod parse(text)[source]

Parse a position such as “100A”.

Parameters:

text (str) – The residue number, optionally followed by an insertion code.

Return type:

Self

Returns:

The position.

Raises:

ValueError – If the text is not a valid position.

>>> Position.parse("100a")
Position(number=100, insertion='A')
>>> Position.parse("35")
Position(number=35, insertion='')
to_tuple()[source]

Convert to a (number, insertion) tuple, with “ “ for no insertion.

This is the convention of Gemmi, Biopython, ANARCI and ANARCII.

Return type:

tuple[int, str]

Returns:

The residue number and insertion code.

>>> Position(52).to_tuple()
(52, ' ')
>>> Position(52, "A").to_tuple()
(52, 'A')
class antibody_utils.numbering.positions.Scheme(*values)[source]

Bases: _CaseInsensitiveStrEnum

An antibody numbering scheme.

>>> Scheme("Chothia")
<Scheme.CHOTHIA: 'chothia'>
antibody_utils.numbering.positions.parse_chain_position(text)[source]

Parse a chain-qualified position such as “H100A”.

Parameters:

text (str) – A chain letter (H or L) followed by a position.

Return type:

tuple[Chain, Position]

Returns:

The chain and the position.

Raises:

ValueError – If the text is not a valid chain-qualified position.

>>> parse_chain_position("H100A")
(<Chain.HEAVY: 'H'>, Position(number=100, insertion='A'))