When my molecule includes a metal atom (FE1) with 2-letter atomtype, Rosetta produces the following error:
core.scoring.sc.MolecularSurfaceCalculator: [ ERROR ] Failed to add residue HME at position 209 to surface - cannot find radius for FE1
I tried resolving this by adding a line like * FE* 1.41 to the sc_radii.lib file, but the error persists.
Root Cause Analysis
After investigating the relevant code:
|
strncpy(scatom.atom, residue.atom_name(i).c_str()+1, sizeof(scatom.atom)-1); |
|
|
|
if ( !AssignAtomRadius(scatom) ) { |
|
TR.Error << "Failed to add residue " << residue.name3() << " at position " << residue.seqpos() << " to surface - cannot find radius for " << residue.atom_name(i) << std::endl; |
|
return 0; |
|
} |
I believe the issue occurs when copying residue.atom_name(i) to scatom.atom, as the code skips the first character. However, when generating the error message, it prints the full residue.atom_name(i), which is misleading.
Workaround
Instead of adding * FE* 1.41 to sc_radii.lib, adding * E* 1.41 works correctly. This confirms that the code is looking for the atom name without the first character.
When my molecule includes a metal atom (FE1) with 2-letter atomtype, Rosetta produces the following error:
I tried resolving this by adding a line like
* FE* 1.41to the sc_radii.lib file, but the error persists.Root Cause Analysis
After investigating the relevant code:
rosetta/source/src/core/scoring/sc/MolecularSurfaceCalculator.cc
Lines 325 to 330 in 695b0f2
I believe the issue occurs when copying
residue.atom_name(i)toscatom.atom, as the code skips the first character. However, when generating the error message, it prints the fullresidue.atom_name(i), which is misleading.Workaround
Instead of adding
* FE* 1.41to sc_radii.lib, adding* E* 1.41works correctly. This confirms that the code is looking for the atom name without the first character.