Skip to content
Snippets Groups Projects
Commit c57f05a5 authored by Gerardo Tauriello's avatar Gerardo Tauriello
Browse files

SCHWED-2440: better error handling when aligning non-peptide chains.

parent 011f7a63
No related branches found
No related tags found
No related merge requests found
...@@ -190,19 +190,26 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod): ...@@ -190,19 +190,26 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod):
atmset = ParseAtomNames(atoms) atmset = ParseAtomNames(atoms)
## iterate chains ## iterate chains
for i in range(0, n_chains): for i in range(0, n_chains):
## fetch chains (peptide-linking residues only)
chain_a = ent_a.chains[i] chain_a = ent_a.chains[i]
chain_b = ent_b.chains[i] chain_b = ent_b.chains[i]
chain_view_a = chain_a.Select('protein=true')
chain_view_b = chain_b.Select('protein=true')
if chain_view_a.chain_count == 0 or chain_view_b.chain_count == 0:
# skip empty chains
continue
## fetch residues ## fetch residues
s_a = ''.join([r.one_letter_code s_a = ''.join([r.one_letter_code for r in chain_view_a.residues])
for r in chain_a.Select('protein=True').residues]) s_b = ''.join([r.one_letter_code for r in chain_view_b.residues])
s_b = ''.join([r.one_letter_code
for r in chain_b.Select('protein=True').residues])
## create sequence from residue lists & alignment ## create sequence from residue lists & alignment
seq_a = ost.seq.CreateSequence(chain_a.name, s_a) seq_a = ost.seq.CreateSequence(chain_a.name, s_a)
seq_b = ost.seq.CreateSequence(chain_b.name, s_b) seq_b = ost.seq.CreateSequence(chain_b.name, s_b)
aln_a_b = alnmethod(seq_a, seq_b, ost.seq.alg.BLOSUM62) aln_a_b = alnmethod(seq_a, seq_b, ost.seq.alg.BLOSUM62)
if not aln_a_b:
# skip failed alignments
continue
## evaluate alignment ## evaluate alignment
max_aln_res = 0 max_aln_res = -1
for a in range(0, len(aln_a_b)): for a in range(0, len(aln_a_b)):
aln = aln_a_b[a] aln = aln_a_b[a]
aln_res_len = 0 aln_res_len = 0
...@@ -218,13 +225,13 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod): ...@@ -218,13 +225,13 @@ def _MatchResidueByAln(ent_a, ent_b, atoms, alnmethod):
aln = aln_a_b[max_aln_idx] aln = aln_a_b[max_aln_idx]
## bind chain to alignment ## bind chain to alignment
aln.AttachView(0, chain_a.Select('protein=True')) aln.AttachView(0, chain_view_a)
aln.AttachView(1, chain_b.Select('protein=True')) aln.AttachView(1, chain_view_b)
## select residues (only replacement edges) ## select residues (only replacement edges)
for i in max_matches: for i in max_matches:
r_a = aln.GetResidue(0,i) r_a = aln.GetResidue(0,i)
r_b = aln.GetResidue(1,i) r_b = aln.GetResidue(1,i)
result_a,result_b=_fetch_atoms(r_a, r_b, result_a, result_b, atmset) result_a, result_b = _fetch_atoms(r_a, r_b, result_a, result_b, atmset)
result_a.AddAllInclusiveBonds() result_a.AddAllInclusiveBonds()
result_b.AddAllInclusiveBonds() result_b.AddAllInclusiveBonds()
return result_a, result_b return result_a, result_b
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment