Disulfid Bond Evaluation

When calculating the pairwise interaction energy between two rotamers building a disulfid bond, one would get an unfavourable energy due to “clashes” between the sulfur atoms. It is possible to improve performance in sidechain reconstruction regarding cysteins when finding and separately handle disulfid bonds. The scoring module implements an empirically derived disulfid score (promod3.scoring.SCWRL3DisulfidScore()) as defined in [canutescu2003b]. The paper proposes two rotamers to be in a disulfid bonded state, if the resulting disulfid score plus the self energies of the involved rotamers is below 45. If there are several cysteines close together, this problem gets another layer of complexity. One has to assure, that every cysteine only participates in one disulfid bond but the network of disulfid bonds is geometrically optimal. SCWRL4 proposes an approach, that has also been implemented here.

promod3.sidechain.DisulfidScore(rotamer_one, rotamer_two, ca_pos_one, cb_pos_one, ca_pos_two, cb_pos_two)

Directly extracts the positions of the gamma sulfurs from the rotamers by searching for particles with the name “SG”. The found positions are then passed to promod3.scoring.SCWRL3DisulfidScore(). In case of RRMRotamer it expects exactly one gamma sulfur per rotamer. In case of FRMRotamer there can be an arbitrary number of gamma sulfurs per rotamer (at least one), it then evaluates the score for all possible combinations of gamma sulfurs and takes the minimum score. To get a final DisulfidScore, it finally adds the self energies of the rotamers to the result of the geometric expression.


RuntimeError if given rotamers do not contain exactly (in case of RRMRotamer) or at least (in case of FRMRotamer) one particle representing the gamma sulfur.


The result of the raw score plus the average self energies of the input rotamers

promod3.sidechain.ResolveCysteins(rotamer_groups, ca_positions, cb_positions[, score_threshold=45.0, optimize_subrotamers=False])

Tries to optimize disulfid bond network. In a first step, all disulfid bonds get detected using DisulfidScore(). If the value between two rotamers is below score_threshold, they’re assumed to be bonded. The function then tries to detect the largest possible set of disulfide bonds, with no cysteine being part of more than one bond. If several largest sets are possible, the one with the optimal sum of scores gets estimated.

  • rotamer_groups (list of FRMRotamerGroup/RRMRotamerGroup) – Every group represents a cysteine

  • ca_positions (list of ost.geom.Vec3) – The CA positions of the according rotamers

  • cb_positions (list of ost.geom.Vec3) – The CB positions of the according rotamers

  • score_threshold (float) – The score two rotamers must have to be considered as a disulfid bond

  • optimize_subrotamers (bool) – If set to true and the input consists of flexible rotamer groups, the active subrotamers get optimized. For every pair of rotamers participating in a disulfid bond, the subrotamers with best DisulfidScore() get activated in the input rotamer_groups. This has an effect when the rotamers get applied on residues.


A tuple containing two list objects with equal length. Both lists contain tuple objects with two elements. The tuples in the first list describe the indices of cysteins participating in disulfid bonds. The tuples in the second list describe the optimal rotamers in the according rotamer groups.


Enter search terms or a module, class or function name.