Exemple #1
0
    def sequence(self, xtable=MU.xxDic):
        """
        Amino acid sequence in one letter code.

        @param xtable: dict {str:str}, additional residue:single_letter mapping
                       for non-standard residues (default molUtils.xxDic)
        @type  xtable: dict

        @return: 1-letter-code AA sequence (based on first atom of each res).
        @rtype: str
        """

        l = self.residues['name']
        return ''.join(MU.singleAA(l, xtable))
Exemple #2
0
    def createResidue( self, res, atoms ):
        """
        """
        r = AmberResidueType( **res )
        r.letter = M.singleAA( [r.code] )[0]
        r.xyz = atoms['xyz']

        n = len(r.xyz)
        for key in B.PDBModel.PDB_KEYS:
            r[key] = n * ['']
        
        r['type'] = ['ATOM'] * n
        r['residue_name'] = [r.code] * n
        r['residue_number'] = [1] * n
        r['occupancy'] = [1.0] * n
        r['after_ter'] = [0] * n
        r['temperature_factor'] = [0] * n
        
        del atoms['xyz']
        for key, profile in atoms.items():
            r.atoms[key] = profile

        return r
Exemple #3
0
    def createResidue(self, res, atoms):
        """
        """
        r = AmberResidueType(**res)
        r.letter = M.singleAA([r.code])[0]
        r.xyz = atoms['xyz']

        n = len(r.xyz)
        for key in B.PDBModel.PDB_KEYS:
            r[key] = n * ['']

        r['type'] = ['ATOM'] * n
        r['residue_name'] = [r.code] * n
        r['residue_number'] = [1] * n
        r['occupancy'] = [1.0] * n
        r['after_ter'] = [0] * n
        r['temperature_factor'] = [0] * n

        del atoms['xyz']
        for key, profile in atoms.items():
            r.atoms[key] = profile

        return r
Exemple #4
0
 def __fromPDB( self ):
     self.code = self.atoms['name'][0]        
     self.letter = M.singleAA( [ self.code ] )
Exemple #5
0
    def parse_lines(self, lines):

        ## Collect secondary structure data. Note that:
        ##
        ## 1. If Dssp detects a chain break or a residue with an
        ##    incomplete backbone it inserts a line with an
        ##    exclamation mark "!" in the residue column.
        ##
        ##    Example: 496  524 C V    <     
        ##             497  525 C P            
        ##             498        !             
        ##             499  539 C F             
        ##             500  540 C N     >  -    
        ##        
        ## 2. A termini (a switch of chain identifier) is marked
        ##    by a asterisk "*" in the column next to the "!"
        ##
        ##    Example: 721  789 C Q  T <       
        ##             722  790 C A    <       
        ##             723        !*          
        ##             724   33 Z E     >     
        ##             725   34 Z K  T  4  +    
        ##             726   35 Z L  T >> S+   
        ##
        ## 3. If DSSP detects an incomplete residue in the terminus
        ##    we only get a single line with a "!" and "*" not a
        ##    for the incomplete residue and one for the terminus
        ##    as woulld be expected!
        ##
        ##    Example: 84  101 A A           
        ##             85  102 A E         
        ##             86        !*     <-- residue 103 skipped!     
        ##             87   16 B S           
        ##             88   17 B G  E

        ## skip header (may be interesting to get total area and bonds though)
        while lines and not lines[0][:12]=='  #  RESIDUE':
            lines.pop(0)
        lines.pop(0)

        table = ParseDSSPTable()
        r = [ table.parse_line(l) for l in lines ]
        r = [ res for res in r if res ]  ## filter out TER and invalid records
        
        m = self.model
        len_res = m.lenResidues()
        
        m.residues.set('dssp', ['.']*len_res ,default='.')
        m.residues.set('dssp_acc', N.zeros(len_res), default=0.0)
        m.residues.set('dssp_phi', N.ones(len_res)*360.0, default=360.0 )
        m.residues.set('dssp_psi', N.ones(len_res)*360.0, default=360.0 )
        m.residues['residue'] = MU.singleAA( m.atom2resProfile('residue_name'),
                                             unknown='X')
        m.residues['insertion_code'] = m.atom2resProfile('insertion_code')
        m.residues['chain'] = m.atom2resProfile('chain_id')

        i = 0
        for res in r:
            while i < (len_res-1) and \
                  not ( m.residues['residue'][i] == res['residue'] and\
                        m.residues['chain'][i] == res['chain'] and\
                        m.residues['insertion_code'][i] == res['insertion_code'] ):
                i += 1
            m.residues['dssp'][i] = res['ss'] if res['ss'] else '.'
            m.residues['dssp_acc'][i] = res['acc']
            m.residues['dssp_phi'][i] = res['phi']
            m.residues['dssp_psi'][i] = res['psi']
            
            i += 1
Exemple #6
0
 def __fromPDB(self):
     self.code = self.atoms['name'][0]
     self.letter = M.singleAA([self.code])