Here is a modified script (incorporating suggestions from Paul) for first
rigid-body fitting each chain to a map, then optionally morphing each chain to
fit the map. The map can be blurred during fitting by altering the
sharpening_factor to a positive value (the map always reverts to it’s original
state after fitting).
Script:
def is_polymer(mol_id,ch_id):
a=is_protein_chain_p(mol_id,"%s"%(ch_id))
b=is_nucleotide_chain_p(mol_id,"%s"%(ch_id))
if (a==1) or (b==1):
result=1
else:
result=0
return result
set_refinement_immediate_replacement(1) #Accept rigid body without prompting.
mol_id=0 #Which molecule should we modify?
map_id=imol_refinement_map()
r1=20
r2=10
r3=5
r1_cycles=10
r2_cycles=5
r3_cycles=5
morph=“N" #Do extensive morph?
do_rigid=“Y"
sharpening_factor=100 #Set to 0 for unaltered map; -ve to sharpen, +ve to blur
if do_rigid=="Y":
turn_off_backup(mol_id)
sharpen(map_id,sharpening_factor) #Sharpen (or blur) map before fitting
for ch_id in chain_ids(mol_id): #Rigid body refine each chain first.
if is_polymer(mol_id,ch_id)==1:
rigid_body_refine_by_atom_selection(mol_id,
"//%s//"%(ch_id))
accept_regularizement()
sharpen(map_id,0) #Return map to normal
if morph=="Y": #Sequential morph_chain at three radii.
turn_off_backup(mol_id)
sharpen(map_id,sharpening_factor)
for ch_id in chain_ids(mol_id):
if is_polymer(mol_id,ch_id)==1:
for n1 in range(1,r1_cycles):
morph_fit_chain(mol_id, "%s"%(ch_id), r1)
for n2 in range(1,r2_cycles):
morph_fit_chain(mol_id, "%s"%(ch_id), r2)
for n3 in range(1,r3_cycles):
morph_fit_chain(mol_id, "%s"%(ch_id), r3)
sharpen(map_id,0)
set_refinement_immediate_replacement(0) #Return to default behavior.
On Dec 29, 2013, at 4:19 PM, Paul Emsley <[email protected]> wrote:
> On 29/12/13 14:51, Oliver Clarke wrote:
>> Thanks Paul - Initially I tried rigid body + 10 cycles of morph_fit_chain at
>> a radius of 11 Å - that seemed to work better than rigid body alone,
>> although some of the larger domain shifts are still not corrected.
>>
>> Perhaps I need a larger radius for that - I’ll try doing 10 cycles at a
>> radius of 20 Å, followed by 5 each at 10 Å and 5 Å.
>
> Yes... that will help somewhat, I imagine. But I suspect an unsharpened map
> is what you (also) want.
>
>>
>> Regarding blurred maps, is there any way to adjust the sharpening factor on
>> the fly in a script, in such a manner that it can be returned to normal
>> afterwards?
>
> Yes.
>
> sharpen(imol, 200) # blurs
>
> and
>
> sharpen(imol, 0) # restores
>
> You can see from that, that the argument is by how much the original data
> should be sharpened.
>
>>
>> Also, Coot seems to write out a copy of the pdb to the coot-backup directory
>> after every cycle of morph_chain - is there any way to turn off this
>> behavior?
>
> Yes.
>
> turn_off_backups(imol)
>
> I routinely do this for looped functions. You might like to try the
> with_no_backups() macro/function.
>
>> Normally it would be fine, but with a few hundred operations that adds up to
>> several GB of backup files, which probably slows down the whole process
>> somewhat.
>
> Probably.
>
> As an aside, you might want to adjust these settings in your ~/.coot.py file:
>
> clear_out_backup_run_n_days = 7 # run every 7 days
> clear_out_backup_old_days = 7 # Files older than 7 days are considered
> for deletion
>
>
> Paul.
>
>