-
Notifications
You must be signed in to change notification settings - Fork 0
004B Application Notes
The section contains use typical applications.
Say, your client brought you a PDB with poor protein health e.g. with some dubious cis-peptide bonds and 2 angstrom C-C bonds. How to fix it? Further, the protein was shown elsewhere to adopt multiple conformation in some loops. How to sample them? Four suggestions
- Send an email to your client
They should have extensive protocol like PHENIX to regularisetheir structure according to the density.
- Sample Loop Conformation with Monte Carlo
loopmodelBG a_PTH1R/531:541 1.043 no no no ? "orig" : ""
- This can also be used to minimize and sample loop conformations; results are stored as stack. Refer to tutorial here for mouse click (keyword: cis/trans).
- Trivia
- Depending on the length of loop (llength), the process can take hours to complete. e.g. 10 residues 7 hours. It follows the equation
mncallsMC = 50000+2000*Integer(1.043*Power(2,llength)+1)
- This particular script does not seem to work when unnatural amino acids are present. Look at the macro. How to make it work?
- Enumerate Conformation Letters
- You may also want to produce rough models simply based on conformation letters.
s_out = ""
s_out+=" db "
s_out+=" embed "
shakeLoop as_graph s_out no
- Regularise into standard
- Commands
- Well, if you are sure that the 2 angstrom C-C bonds are incorrect, simply regularise the bonds to standard distances. Because, ICM works on internal coordinates, the minimization with regular standards will work out beautifully (up to PDB standard).
We want to set up custom restraints that guide the Monte Carlo sampling of some protein conformations. For example, C-term of a protein e.g. PTH1R is known to be flexible preventing structural elucidation, but we somehow obtained a distance matrix concerning pairwise distance of each of its C-alpha. How to set up restraints to guide Monte Carlo?
Similar to the problem set-up in Restrained Flexible Sampling. Say, now, we have a two-chain protein. In addition to the distance matrix (N*M) between each residue of two chains, we also have accurate conformations of individual chains. How to perform rigid protein-protein docking with restraint from distance matrix? This is an interesting topic well investigated by Alexander Bonvin in his HADDOCK program. Two variations
- Known Restraints
- Unknown Restraints
Given a chemical crosslink adduct e.g. BrEtY-Cys, we may wonder how close the two chemical moiety should come together in order to admit the crosslink. In other words, we want to estimate the diameter of the reaction sphere. To do so, run a monte carlo with high temperature. In this application, we should not restrict ourselves to torsion scanning, we should also allow sampling of bond lengths. This can be done by modifying a macro.
temperature = 10000.0
ffMethod = 2
mcShake = 10.0
montecarlo bfactor 100.0 store
confGenBG BretyEstimate Index( BretyEstimate selection all ) 100 50.00 1. yes no no yes no yes no "diel=" + 78.5 + " maxener=" + 1000.00
Notice what is changed from default are diel = 1.0
(default: 78.5), maxener = 1000.0
(default: 10.0) and vicinity = 50.0
(default: 15.0) and mcShake = 5.0
(default: 2.0). Short comments:
After optimisation under artificial constraints, regularisation is recommended to assure correct ramachandrans (and obviously omega angle). Note that even though the monte carlo of ICM carries regularisation procedure, if no conformation was accepted, then correction would not be saved in the resultant structure.
if no then
s_out = "l_info=no\nregul " + String( Mol(as_graph) ) + " '" + "nter" + "' '" + "cooh" + "' " + String( yes ) + " yes\n"
fixQuotes( s_out )
run_bg s_strRes String( Obj( Mol(as_graph) )[1] ) "a_"
else
regul Mol(as_graph) "nter" "cooh" yes yes
A modified macro
## Modified macro to accomodate 7.22 angstrom CA distance
macro scanCysBridgesMOD auto rs_1 rs_2 ( a_NULL./ )
HELP=" Scan pairs of residues in two input residue selections that can be replaced by Cysteines forming\n a disulfide bridge. If the second argument is empty it is assumed equal to the first selection. The procedure returns a table called CysBridges with possible pairs sorted by the strain associated with the bridge.\n"
l_commands = no
rs_1 = Res(rs_1)
if(Nof(rs_2)==0) rs_2 = rs_1
rs_2 = Res(rs_2)
rs_ = rs_1 | rs_2
rena1 = Name(rs_1 full)
rena2 = Name(rs_2 full)
rena12 = Name( rs_ full )
nob = Nof(Obj(rs_))
if(nob >1) return error " Error_scanCysBridges> Selections in two different objects. Define two selections in the same object"
if(nob==0) return error " Error_scanCysBridges> empty selection"
if( Nof(rs_ & a_tmpss,tmpsss. )> 0 ) return error " Error_scanCysBridges> can not use selection in temporary objects (a_tmpss*.) "
delete a_tmpss,tmpsss.
delete CysBridges l_warn = no
os = Obj(rs_ )[1]
rs_ = rs_ & os & a_*.A
copy os "tmpss" delete strip
delete a_tmpss. & !Sphere( rs_ a_tmpss. 0.001 )
convert a_tmpss. name="tmpss"
make distance rs_1 & a_*.//ca rs_2 & a_*.//ca 7.5 name="tmdist"
CysBridges = Table( tmdist distance )
add column CysBridges Replace(CysBridges.atom1,"/ca","") name={"A"} index=1
add column CysBridges Replace(CysBridges.atom2,"/ca","") name={"B"} index=2
delete CysBridges.atom1 CysBridges.atom2 CysBridges.color CysBridges.label
for ipa = 1,Nof(CysBridges)
if( Nof( Select( $CysBridges.A[ipa] margin 1 ) & Select ( $CysBridges.B[ipa] margin 1)) > 0 ) then
CysBridges.dist[ipa] = 999.
endif
endfor
delete CysBridges.dist > 7.5
npa = Nof(CysBridges)
add column CysBridges Rarray(npa) Rarray(npa) Rarray(npa) Rarray(npa) Rarray(npa) name={"Energy","SStorsion","SSbondlen","CSCangle1","CSCangle2"}
delete disulfide bond a_tmpss.
for ipa = 1,Nof(CysBridges)
copy a_tmpss. "tmpsss" delete l_info=no
set object a_tmpsss. l_info=no
res1 = "a_tmpsss."+Field(CysBridges.A[ipa],2,".")
res2 = "a_tmpsss."+Field(CysBridges.B[ipa],2,".")
modify $res1 | $res2 "cys" l_warn = no l_info=no
make ssbond $res1 & a_tmpsss.//sg $res2 & a_tmpsss.//sg
minimize v_/cys*/x* & ( $res1 | $res2 ) "ss,to,vw,14" l_showMinSteps = no l_info=no
CysBridges.Energy[ipa] = Energy("ss,to")
CysBridges.SStorsion[ipa] = Torsion( ( $res1 & a_tmpsss.//cb,sg ) | ( $res2 & a_tmpsss.//cb,sg ) )
CysBridges.SSbondlen[ipa] = Distance( ( $res1 & a_tmpsss.//sg ) ( $res2 & a_tmpsss.//sg ) )
CysBridges.CSCangle1[ipa] = Angle( $res1 & a_tmpsss.//cb $res1 & a_tmpsss.//sg $res2 & a_tmpsss.//sg )
CysBridges.CSCangle2[ipa] = Angle( $res1 & a_tmpsss.//sg $res2 & a_tmpsss.//sg $res2 & a_tmpsss.//cb )
delete a_tmpsss. l_info=no
endfor
l_info=no
sort CysBridges.Energy
delete CysBridges.Energy > 0.
rename CysBridges.dist "Ca_dist"
set format CysBridges.Energy "%.1f" color="rainbow='#AAAAFF/#AAFFAA/#FF8888,0.:-10.,pinwheel'"
set format CysBridges.CSCangle1 "%.0f" color="rainbow='#FF8888/#AAFFAA/#AAAAFF/#AAFFAA/#FF8888,83.:123.,pinwheel'"
set format CysBridges.CSCangle2 "%.0f" color="rainbow='#FF8888/#AAFFAA/#AAAAFF/#AAFFAA/#FF8888,83.:123.,pinwheel'"
set format CysBridges.SStorsion "%.0f" color="rainbow='#FF8888/#FFFFFF/#AAAAFF/#FFFFFF/#FF8888/#FFFFFF/#AAAAFF/#FFFFFF/#FF8888,-180.:180.,pinwheel'"
add header CysBridges name="doubleClick" "as_out= $%@.A[%#] | $%@.B[%#] ; display ribbon Mol(as_out); display xstick residue label as_out; center as_out margin = 5."
delete a_tmpss.
keep CysBridges
endmacro
## Open File
openFile "3UZA_Grafted_Pymol.pdb"
convertObject a_3UZA_Grafted_Pymol. 1==1 yes yes yes yes yes no ""+( 1==2 ? "water=tight ":"" )+( no ? "tautomer ":"" )
## Get all possible cysteines
as_graph = a_/cys
scanCysBridgesMOD Res( as_graph ) as2_graph
## Make disulphide if any missing
numrow = Nof(CysBridges)
i = 0
if (numrow > 0) then
for i = 1 , numrow
make ssbond $CysBridges.A[i] $CysBridges.B[i]
endfor
endif
## Regularize
if no then
s_out = "l_info=no\nregul " + String( Mol(a_*.//DD) ) + " '" + "" + "' '" + "" + "' " + String( yes ) + " yes\n"
fixQuotes( s_out )
run_bg s_strRes String( Obj( Mol(a_*.//DD) )[1] ) "a_"
else
regul Mol(a_*.//DD) "" "" yes yes
endif
## Save the structure
write pdb a_3UZA_Grafted_Pymol_reg. "/home/homingla/MessLab/Project-InchingMD/Wiki-CaseStudyIcmRefinement/AA2AR/3UZA_Grafted_Pymol_reg.pdb"
s_out = "/home/homingla/MessLab/Project-InchingMD/Wiki-CaseStudyIcmRefinement/AA2AR/3UZA_Grafted_Pymol"
writeProject s_out s_currentProject!=""
## Quit
quit