[docs]classRepresentationMethod():""" This interface defines a generation strategy and can be extended to implement new strategies for transforming a collection of atoms into a graph representation. """defres_map(self,ag,chain=None):passdefgenerate(self,ag,name:str):pass
[docs]classContactMap(RepresentationMethod):""" Illustrates the spatial proximity between amino acids in a protein structure. """def__init__(self,cutoff,chain=None):self.cutoff=cutoffself.chain=chaindefgenerate(self,ag,name:str):fromscipy.spatialimportdistanceca_position=ag.c_alphas_positions(self.chain)dist=distance.squareform(distance.pdist(ca_position))dist[dist>self.cutoff]=0metadata=ProteinMetadata(uniprot_id=None,chain=self.chain)returnGraph(name,dist,ca_position,ag.c_alphas_residues(self.chain),metadata)
[docs]classKNN(RepresentationMethod):""" Generate the structure form a defined number of neighbours """def__init__(self,k,chain=None):self.k=kself.chain=chaindefgenerate(self,ag,name:str):fromscipy.spatialimportKDTreeca_position=ag.c_alphas_positions(self.chain)kdtree=KDTree(ca_position)residue_num=len(ca_position)adjacency=np.zeros((residue_num,residue_num))fori,posinenumerate(ca_position):_,neig=kdtree.query(pos,k=self.k+1)forjinneig:adjacency[i,j]=1metadata=ProteinMetadata(uniprot_id=None,chain=self.chain)returnGraph(name,adjacency,ca_position,ag.c_alphas_residues(self.chain),metadata)
[docs]classGraphProGenerator:""" Graph Pro Generator Generate both a graph or a graph colection from a structure of a trajectory. """def__init__(self,ag,trajectory=None,name=''):self.ag=agself.trajectory=trajectoryself.name=namedef_generate(self,ag,rep,node_annotations=[]):G=rep.generate(self.ag,self.name)iflen(G.nodes())>0:fornode_annotationinnode_annotations:node_annotation.generate(G,self.ag)returnGdefgenerate(self,rep,node_annotations=[])->Graph:returnself._generate(self.ag,rep,node_annotations)defgenerate_trajectory(self,rep,node_annotations=[]):returnGraphCollection([self._generate(ag,rep,node_annotations)foraginself.trajectory])