I realised the script I posted previously to delete a chain doesn't take
account of insertion codes etc.
The attached script hopefully fixes that and adds a couple of other widgets
that I find useful into a "Custom" menu (when placed in the ~/.coot-preferences
directory).
Oliver.
#Deletes active chain based on residue nearest to the pointer.
def delete_chain():
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
def first_residue(mol_id,ch_id):
result=seqnum_from_serial_number(mol_id,"%s"%(ch_id),0)
return result
def last_residue(mol_id,ch_id):
n=chain_n_residues(ch_id,mol_id)-1
result=seqnum_from_serial_number(mol_id,"%s"%(ch_id),n)
return result
active_chain_id=active_residue()[1]
active_mol_id=active_residue()[0]
while (is_polymer(active_mol_id,active_chain_id)==1) or (is_solvent_chain_p(active_mol_id,active_chain_id)!=-1):
first_res=first_residue(active_mol_id,active_chain_id)
last_res=last_residue(active_mol_id,active_chain_id)
delete_residue_range(active_mol_id,active_chain_id,first_res,last_res)
#Add menu item "Delete active chain"
menu=coot_menubar_menu("Custom")
add_simple_coot_menu_menuitem(menu,"Delete active chain", lambda func: delete_chain())
#Switches all molecules to CA symmetry
add_simple_coot_menu_menuitem(
menu, "All Molecules use \"C-alpha\" Symmetry",
lambda func: map(lambda imol: valid_model_molecule_qm(imol) and
symmetry_as_calphas(imol, 1),
molecule_number_list()))
#Toggles symmetry on/off
add_simple_coot_menu_menuitem(menu, "Toggle Symmetry", lambda func: set_show_symmetry_master(not get_show_symmetry()))
#Fits each chain to map
def rigid_fit_all_chains():
mol_id=active_residue()[0]
turn_off_backup(mol_id)
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
for ch_id in chain_ids(mol_id): #Rigid body refine each chain
if is_polymer(mol_id,ch_id)==1:
rigid_body_refine_by_atom_selection(mol_id, "//%s//"%(ch_id))
accept_regularizement()
#Add menu item to "Custom"
add_simple_coot_menu_menuitem(menu, "Fit all chains to map", lambda func: rigid_fit_all_chains())
#Fits active chain to map
def rigid_fit_active_chain():
mol_id=active_residue()[0]
ch_id=active_residue()[1]
rigid_body_refine_by_atom_selection(mol_id, "//%s//"%(ch_id))
#Add menu item to "Custom"
add_simple_coot_menu_menuitem(menu, "Fit current chain to map", lambda func: rigid_fit_active_chain())
#Sets "Backrub" rotamers as default (best at low res)
set_rotamer_search_mode("ROTAMERSEARCHLOWRES")