# HG changeset patch # User chemteam # Date 1615552344 0 # Node ID 2b82fc7bec673b871eedc2d6108a955c1e9ca4c5 # Parent b500cc25dd1531391c66ddcbbe52d781853af287 "planemo upload for repository https://github.com/galaxycomputationalchemistry/galaxy-tools-compchem/ commit cc13bd32ef2d80b01dc197a3ca120a4ff9f0dacc" diff -r b500cc25dd15 -r 2b82fc7bec67 parmconv.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parmconv.py Fri Mar 12 12:32:24 2021 +0000 @@ -0,0 +1,82 @@ +import argparse +import io +import sys +from contextlib import redirect_stdout + +import parmed +from parmed import amber, gromacs +from parmed.tools.changeradii import ChRad + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--istr', help='input structure', required=True) + parser.add_argument('--itop', help='input topology file', required=True) + parser.add_argument('--istripmask', help='stripmask') + parser.add_argument('--iradii', required=True, help='parmed radii are \ + GB_RADII amber6,bondi, mbondi, mbondi2, mbondi3') + parser.add_argument('--removedihe', action='store_true', + default=False, help='remove dihedrals with zero \ + periodicity') + parser.add_argument('--removebox', action='store_true', + default=False, help='remove periodic box info') + parser.add_argument('--o_prmtop', help='AMBER output topology', + required=True) + return parser.parse_args() + + +def get_ids(dihedrals): + """ + goes through dihedrals and looks for any with per=0. + returns a reverse sorted list of ids to be removed. + """ + indices = [] + for k, v in enumerate(dihedrals): + f = io.StringIO() + with redirect_stdout(f): + print(v) + if f.getvalue().find("per=0") != -1: + indices.append(k) + indices.sort(reverse=True) + return indices + + +args = parse_command_line(sys.argv) + +gmx_top = gromacs.GromacsTopologyFile(args.itop) +gmx_gro = gromacs.GromacsGroFile.parse(args.istr) + +if not args.removebox: + # keep box info + gmx_top.box = gmx_gro.box + gmx_top.positions = gmx_gro.positions + + +if args.removedihe: + ids_to_remove = get_ids(gmx_top.dihedrals) + print("Original number of dihedrals %i" % len(gmx_top.dihedrals)) + for i in ids_to_remove: + gmx_top.dihedrals.pop(i) + print("Update number of dihedrals %i" % len(gmx_top.dihedrals)) + +if args.istripmask is not None: + if args.istripmask == "": + pass + else: + gmx_top.strip(args.istripmask) + +radii = str(args.iradii) +parmed.tools.changeRadii(gmx_top, radii) +amb_prm = amber.AmberParm.from_structure(gmx_top) +parmed.tools.changeRadii(amb_prm, radii) + +if args.removebox: + amb_prm.pointers['IFBOX'] = 0 + +ChRad(amb_prm, radii) +for i, atom in enumerate(amb_prm.atoms): + amb_prm.parm_data['RADII'][i] = atom.solvent_radius + amb_prm.parm_data['SCREEN'][i] = atom.screen + + +amb_prm.write_parm(args.o_prmtop) diff -r b500cc25dd15 -r 2b82fc7bec67 parmconv.xml --- a/parmconv.xml Tue Feb 16 21:55:34 2021 +0000 +++ b/parmconv.xml Fri Mar 12 12:32:24 2021 +0000 @@ -1,8 +1,8 @@ - to AMBER prmtop in preparation for MMPBSA + to AMBER prmtop in preparation for MMGBSA/MMPBSA macros.xml - 0 + 1 parmed @@ -11,15 +11,53 @@ &1 && + python '$__tool_directory__/parmconv.py' + --istr '$param_inputs.str_in' + --itop '$param_inputs.top_in' + $param_inputs.modbehaviour.removedihe + $param_inputs.modbehaviour.removebox + --iradii '$param_inputs.modbehaviour.radii' + --istripmask '$stripmask_receptor' + --o_prmtop '$prmtop_receptor' + 2>&1 && + python '$__tool_directory__/parmconv.py' + --istr '$param_inputs.str_in' + --itop '$param_inputs.top_in' + $param_inputs.modbehaviour.removedihe + $param_inputs.modbehaviour.removebox + --iradii '$param_inputs.modbehaviour.radii' + --istripmask '$stripmask_complex' + --o_prmtop '$prmtop_complex' + 2>&1 && + python '$__tool_directory__/parmconv.py' + --istr '$param_inputs.str_in' + --itop '$param_inputs.top_in' + $param_inputs.modbehaviour.removedihe + $param_inputs.modbehaviour.removebox + --iradii '$param_inputs.modbehaviour.radii' + --istripmask '$stripmask_solvatedcomplex' + --o_prmtop '$prmtop_solvatedcomplex' + 2>&1 + #else + python '$templating_script' '$inputs' && + PATH_TO_PARMED=\$(dirname `which parmed`) && + export AMBERHOME=\$(dirname \$PATH_TO_PARMED) && + export GMXDATA=\$AMBERHOME/share/gromacs/top/ && + parmed -i ligand.script -O && + parmed -i receptor.script -O && + parmed -i complex.script -O && + parmed -i solvatedcomplex.script -O + #end if ]]> @@ -93,7 +131,7 @@ - + @@ -103,46 +141,45 @@ +
+ + + + + + + + + +
- + - - - - + - - - - + - - - - + - - -
@@ -200,24 +237,68 @@ - + + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -228,13 +309,13 @@ **What it does** - This tool converts parameter and topology files that represent a solvated complex into parameter files for the ligand, receptor, complex and solvated complex in AMBER prmtop format. These files are needed for MMPBSA calculations. + This tool converts parameter and topology files that represent a solvated complex into parameter files for the ligand, receptor, complex and solvated complex in AMBER prmtop format. These files are needed for MMGBSA/MMPBSA calculations. .. class:: infomark **How it works** - AmberTools ParmEd is used to strip unneeded atoms and save out the parameter files. The stripmasks are defined by the user. + AmberTools' ParmEd is used to strip unneeded atoms and save the parameter files. The stripmasks are defined by the user. .. class:: infomark diff -r b500cc25dd15 -r 2b82fc7bec67 template_parmconv.j2 --- a/template_parmconv.j2 Tue Feb 16 21:55:34 2021 +0000 +++ b/template_parmconv.j2 Fri Mar 12 12:32:24 2021 +0000 @@ -2,9 +2,9 @@ {% if fmt == 'AMBER' %} parm {{ top_in }} {% elif fmt == 'GROMACS' %} -gromber {{ top_in }} {{gro_in}} +gromber {{ top_in }} {{str_in}} {% elif fmt == 'CHARMM' %} -chamber {{ top_in }} {{gro_in}} +chamber {{ top_in }} {{str_in}} {% else %} parm {{ top_in }} {% endif %}