Mercurial > repos > chemteam > gromacs_extract_topology
comparison gmxtras_add_restraints.py @ 0:9faa4f4b8b76 draft default tip
"planemo upload for repository https://github.com/galaxycomputationalchemistry/galaxy-tools-compchem/tree/master/tools/buildtools/topologyeditors commit ae026d4ea6fe2ebaa53611b86f9047941c7b899b"
| author | chemteam |
|---|---|
| date | Thu, 27 Jan 2022 18:17:05 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:9faa4f4b8b76 |
|---|---|
| 1 #!/usr/bin/env python3 | |
| 2 import argparse | |
| 3 END_OF_MOL = ('[ moleculetype ]', '[ system ]') | |
| 4 | |
| 5 | |
| 6 def __main__(): | |
| 7 parser = argparse.ArgumentParser( | |
| 8 description='Add restriction to gromacs topology file') | |
| 9 parser.add_argument( | |
| 10 '--top_file', default=None, | |
| 11 help="Topology file input") | |
| 12 parser.add_argument( | |
| 13 '--res_file', default=None, | |
| 14 help='Restraint input') | |
| 15 parser.add_argument( | |
| 16 '--molecule', default=None, | |
| 17 help='Target Molecule Name you restrained') | |
| 18 parser.add_argument( | |
| 19 '--out', default=None, | |
| 20 help='Path to output') | |
| 21 args = parser.parse_args() | |
| 22 with open(args.out, 'w') as fh_out: | |
| 23 with open(args.top_file, 'r') as fh: | |
| 24 # for now, we will avoid using 'for line in fh:', | |
| 25 # since we have multiple places where we might want | |
| 26 # to read the next line | |
| 27 while True: | |
| 28 line = fh.readline() | |
| 29 if not line: | |
| 30 # eof | |
| 31 break | |
| 32 # always write out the line | |
| 33 fh_out.write(line) | |
| 34 # check if line matches molecule, then check if | |
| 35 # molecule name matches args.molecule | |
| 36 if line.strip().startswith('[ moleculetype ]'): | |
| 37 not_found_molecule = True | |
| 38 while not_found_molecule: | |
| 39 line = fh.readline() | |
| 40 if not line: | |
| 41 # eof | |
| 42 break | |
| 43 # always write this line | |
| 44 fh_out.write(line) | |
| 45 if not line.strip().startswith(';') or (line.strip() | |
| 46 and not line.strip().startswith(';')): | |
| 47 # this line should be the name line, | |
| 48 fields = line.strip().split() | |
| 49 if fields[0] == args.molecule: | |
| 50 # found our molecule! | |
| 51 while True: | |
| 52 line = fh.readline() | |
| 53 if not line: | |
| 54 # eof | |
| 55 break | |
| 56 if line.strip().startswith(END_OF_MOL): | |
| 57 fh_out.write("\n#ifdef POSRES\n") | |
| 58 with open(args.res_file, 'r') as fh_re: | |
| 59 for line2 in fh_re: | |
| 60 fh_out.write(line2) | |
| 61 fh_out.write("#endif\n\n") | |
| 62 fh_out.write(line) | |
| 63 not_found_molecule = False | |
| 64 break | |
| 65 fh_out.write(line) | |
| 66 else: | |
| 67 break | |
| 68 | |
| 69 | |
| 70 if __name__ == "__main__": | |
| 71 __main__() |
