= Pathwalker = Pathwalker is a method for building models from cryo-EM density maps described in the following publication: * [[http://www.sciencedirect.com/science/article/pii/S1047847716301101 | Chen, M., Baldwin, P.R., Ludtke, S.J., Baker, M.L., 2016. De Novo Modeling in Cryo-EM Density Maps with Pathwalking. Journal of Structural Biology]] * [[http://www.ncbi.nlm.nih.gov/pubmed/22405004|Baker, M.R., Rees, I., Ludtke, S.J., Chiu, W., Baker, M.L., 2012. Constructing and validating initial cα models from subnanometer resolution density maps with pathwalking. Structure 20, 450-463.]] = Pathwalker components = The individual Pathwalker components have wiki pages with usage, help, and FAQs: * [[EMAN2/Programs/e2segment3d|e2segment3d.py]] * [[EMAN2/Programs/e2pathwalker|e2pathwalker.py]] * [[EMAN2/Programs/e2seq2pdb|e2seq2pdb.py]] These programs below are part of Pathwalker and are in the example folder in EMAN2: * e2pwhelixfit.py * e2pwsheetfit.py * e2pwstructuremodify.py = Main Protocol = Here we use rotavirus as an example (EMDB 1641).First segment out the density of one subunit and name it "rotav.mrc" Then threshold out the negative density in the map using: (This is important, or it will cause trouble in the TSP solver) ''e2proc3d.py rotav.mrc rotav.mrc --process=threshold.belowtozero'' {{attachment:density.png|density map|width=300}} Seed the pseudoatoms using the command: ''e2segment3d.py rotav.mrc --pdbout=rotav_pseudoatoms.pdb --process=segment.kmeans:ampweight=1:nseg=398:verbose=1:minsegsep=1:pseudoatom=1:thr=4'' Here ''nseg'' is required which is the number of residues in the protein. "thr" is the threshold of the isosurface. The program will choose an (hopefully) optimized value for you as default. Usually it is better to provide a threshold value that the features start to separate. Then trace the backbone using the LKH TSP solver. ''e2pathwalker.py rotav_pseudoatoms.pdb --mapfile=rotav.mrc --output=rotav_path1.pdb --solver=lkh --overwrite --dmin=2 --dmax=10 --mapthresh=6 --mapweight=100'' {{attachment:path1.png|path 1|width=300}} Here ''dmin'' and ''dmax'' are the minimum and maximum distance between C-alphas. The ''dmax'' should be set larger when the map is not well connected. ''mapthresh'' is the threshold for the density value in the map, and the bonds with a density higher then the threshold will be weighted more. ''mapweight'' is a parameter that weight between the map and protein geometry score. The program will trust the density map more when this value is higher (it then tends to connect two atoms that has strong density connection even the distance is far from the average distance between C-alphas) The helices can then be found using the command: ''e2pwhelixfit.py --mapin=rotav.mrc --pdbin=rotav_path1.pdb --output=rotav_hlx1.pdb --lenthr=12 --denthr=8 --mapwohelix=rotav_rmhlx.mrc --minlen=8'' {{attachment:hlx1.png|helix 1|width=300}} The argument ''minlen'' sets the minimum length of the helix and ''denthr'' sets the minimum mean density at the position of the atoms in the helix. ''mapwohelix'' gives you a map with the density of all the detected helices removed, which will be used for pseudoatom seeding in the next iteration. Remove the dust voxels(mostly sidechains in the helices) in the map. ''e2proc3d.py rotav_rmhlx.mrc rotav_hd.mrc --process=mask.dust3d:voxels=200:threshold=6'' Do the pseudoatom generation again, using the density map without helices and specify the pdb file that contains the helices. ''e2segment3d.py rotav_hd.mrc --pdbout=rotav_psudoatoms2.pdb --process=segment.kmeans:ampweight=1:nseg=398:verbose=1:minsegsep=2:psudoatom=1:thr=6 --helixfile=rotav_hlx1.pdb --edgefile=helix1'' Tracing the path. Note that the mapweight is set higher this time because we are focusing on the loops with lower density value and not well connected. ''e2pathwalker.py rotav_pseudoatoms2.pdb --mapfile=rotav.mrc --output=rotav_path2.pdb --solver=lkh --overwrite --dmin=2 --dmax=10 --mapthresh=6 --mapweight=500 --edgefile=helix1'' Then repeat this process: ''e2pwhelixfit.py --mapin=rotav.mrc --pdbin=rotav_path2.pdb --output=rotav_hlx2.pdb --lenthr=6 --denthr=8 --mapwohelix=rotav_rmhlx2.mrc --minlen=6'' ''e2proc3d.py rotav_rmhlx2.mrc rotav_hd2.mrc --process=mask.dust3d:voxels=200:threshold=6'' ''e2segment3d.py rotav_hd2.mrc --pdbout=rotav_pseudoatoms3.pdb --process=segment.kmeans:ampweight=1:nseg=398:verbose=1:minsegsep=2:psudoatom=1:thr=6 --helixfile=rotav_hlx2.pdb --edgefile=helix2'' ''e2pathwalker.py rotav_pseudoatoms3.pdb --mapfile=rotav.mrc --output=rotav_path3.pdb --solver=lkh --overwrite --dmin=2 --dmax=10 --mapthresh=6 --mapweight=500 --edgefile=helix2'' ''e2pwhelixfit.py --mapin=rotav.mrc --pdbin=rotav_path3.pdb --output=rotav_hlx3.pdb --lenthr=8 --denthr=8 --mapwohelix=rotav_rmhlx3.mrc --minlen=6'' {{attachment:hlx3.png|helix 3|width=300}} And now we have a better path here. Note that the termini points are now corrected. These commands will help clean up the crossed bonds, obvious sidechain atoms and some bonds that are too long. ''e2pwstructuremodify.py --mode c --mapin=rotav.mrc --pdbin=rotav_path3.pdb --output=rotav_path3_mdf.pdb --thr=1'' ''e2pwstructuremodify.py --mode d --mapin=rotav.mrc --pdbin=rotav_path3_mdf.pdb --output=rotav_path3_mdf2.pdb'' {{attachment:modify.png|modify|width=300}} To do some manual modification, like connecting a pair of atoms that's not connected in the model, simply put the the ID of the two atoms at the end of the helix file like this: ( here is the file ''helix2'') 270 288 264 138 Then run the pathwalker again: ''e2pathwalker.py rotav_psudoatoms3.pdb --mapfile=rotav.mrc --output=rotav_path4.pdb --solver=lkh --overwrite --dmin=2 --dmax=10 --average=2 --mapthresh=7.5 --mapweight=500 --edgefile=helix2'' The program will rebuild the rest part of the model for you. = Multiple subunit tracing = To trace multiple subunits, simply add ''--subunit N'' in the e2pathwalker.py command and the program will try to find the best point to break the chain. {{attachment:multisub.png|multisub|width=500}}