RosettaCommons / RFdiffusion

Code for running RFdiffusion
Other
1.75k stars 338 forks source link

Partial diffusion errors #214

Open ibalafkir opened 7 months ago

ibalafkir commented 7 months ago

Hello, I've bumped into a contig error when doing partial diffusion of a PDB composed of chains 'A' and 'B'

When I want to keep fixed chain A but diffuse some residues in chain B by using this contigs code [A1-124/0 B1-2/3-3/B6-121], I get this error: AssertionError: for partial diffusion there can be no offset between the index of a residue in the input and the index of the residue in the output However, I can run the partial diffusion without any problem if I diffuse a random residue in chain A: [A1-123/1-1/0 B1-2/3-3/B6-121] I can also run this: [A1-124/0 B1-121]

Zasder3 commented 2 months ago

We ran into this issue as well when trying to do a similar diffusion process! There's a quirk in the PDB numbering scheme where RFDiffusion outputs get renumbered from the binder going 1-N and the underlying target going N+1-L. This means to get most pdb structures properly formatted you're going to want to attempt to renumber the outputs and potentially rename the chains (RFD names the binder A and B).

roccomoretti commented 3 weeks ago

To further clarify, RFdiffusion will reorder the chains. Chains with diffusable residue will be placed before chains without any diffusable residues. So when you provide the contigmap [A1-124/0 B1-2/3-3/B6-121], RFdiffusion will move chain B (which has a diffusable region) before chain A (which lacks it). For [A1-123/1-1/0 B1-2/3-3/B6-121] both have diffusable regions, so they're not reordered.

Normally this doesn't matter (except for the order in the output PDB), but for partial diffusion it needs to match up the residues in the contigmap (including the diffused residues) with the residues in the input PDB, and the reordering confuses it.

ibalafkir commented 2 weeks ago

Thanks to both of you for your help! :)