Source code for pyrosetta_help.chain_ops.chain_ops

import json
from typing import (List)


[docs]class ChainOps: """ Works on the list of dict (metadata.json) with among others keys * number (pose number) * chain (chain letter) * gene_name (gene name) """
[docs] def __init__(self, chains: List[dict]): self.chains = chains
[docs] def load(self, json_filename: str = 'metadata.json'): with open(json_filename, 'r') as fh: self.chains = json.load(fh)
[docs] def dump(self, json_filename: str = 'metadata.json'): with open(json_filename, 'w') as fh: json.dump(self.chains, fh)
[docs] def get_entry_of_key(self, value, key): return [chain for chain in self.chains if chain[key] == value][0]
[docs] def get_entry(self, value): """ guess key... :param value: :return: """ if isinstance(value, int): return self.get_entry_of_key(value, 'number') elif isinstance(value, str) and len(value) == 1: return self.get_entry_of_key(value, 'chain') elif isinstance(value, str): return self.get_entry_of_key(value, 'gene_name') elif isinstance(value, dict) and 'gene_name' in value: # an entry was passed return value
[docs] def get_pose_of_chain(self, pose, value): # pose is a pyrosetta.Pose return pose.split_by_chain()[self.get_entry(value)['number']]
def __getitem__(self, value): return self.get_entry(value) def __iter__(self): return self.chains