Download scripts/run_example_1.py from OneScience-Group/flex_ddG_tutorial: direct link, hf CLI and curl.
- Browser
- Download file 5.66 kB
-
https://huggingface.co/OneScience-Group/flex_ddG_tutorial/resolve/main/scripts/run_example_1.py
- Command line
-
hf download hf://OneScience-Group/flex_ddG_tutorial/scripts/run_example_1.py
-
curl -L -o run_example_1.py https://huggingface.co/OneScience-Group/flex_ddG_tutorial/resolve/main/scripts/run_example_1.py
5.66 kB
| #!/usr/bin/python | |
| from __future__ import print_function | |
| import socket | |
| import sys | |
| import os | |
| import subprocess | |
| script_dir = os.path.dirname(os.path.abspath(__file__)) | |
| project_root = os.path.dirname(script_dir) | |
| conf_dir = os.path.join(project_root, 'conf') | |
| inputs_dir = os.path.join(script_dir, 'inputs') | |
| use_multiprocessing = True | |
| if use_multiprocessing: | |
| import multiprocessing | |
| max_cpus = 2 # We might want to not run on the full number of cores, as Rosetta take about 2 Gb of memory per instance | |
| ################################################################################################################################################################### | |
| # Important: The variables below are set to values that will make the run complete faster (as a tutorial example), but will not give scientifically valid results. | |
| # Please change them to the "normal" default values before a real run. | |
| ################################################################################################################################################################### | |
| #rosetta_scripts_path = os.path.expanduser("~/rosetta/source/bin/rosetta_scripts") | |
| rosetta_scripts_path = os.path.expanduser( | |
| "/public/home/scnb9biwet/jiangqq/flex_ddG_tutorial-master/software/rosetta3.9/main/source/bin/rosetta_scripts.default.linuxgccrelease" | |
| ) | |
| nstruct = 3 # Normally 35 | |
| max_minimization_iter = 5 # Normally 5000 | |
| abs_score_convergence_thresh = 200.0 # Normally 1.0 | |
| number_backrub_trials = 10 # Normally 35000 | |
| backrub_trajectory_stride = 5 # Can be whatever you want, if you would like to see results from earlier time points in the backrub trajectory. 7000 is a reasonable number, to give you three checkpoints for a 35000 step run, but you could also set it to 35000 for quickest run time (as the final minimization and packing steps will only need to be run one time). | |
| path_to_script = os.path.join(conf_dir, 'ddG-backrub.xml') | |
| # Additionally report the intramolecular energy of each individual chain into ddG.db3. | |
| # This is reporting only: it adds no sampling, consumes no random numbers, and leaves the | |
| # binding ddG bit-identical. Read the per-chain numbers off the *unbound* states, where the | |
| # chains are 1000 A apart and the value is exactly that chain's intramolecular energy. | |
| # See per_chain_protocol.py for the full explanation and caveats. | |
| report_per_chain_energies = False | |
| if not os.path.isfile(rosetta_scripts_path): | |
| print('ERROR: "rosetta_scripts_path" variable must be set to the location of the "rosetta_scripts" binary executable') | |
| print('This file might look something like: "rosetta_scripts.linuxgccrelease"') | |
| raise Exception('Rosetta scripts missing') | |
| def protocol_for( input_pdb_path ): | |
| """Return the XML to run, generating the per-chain reporting variant if requested.""" | |
| if not report_per_chain_energies: | |
| return os.path.abspath(path_to_script) | |
| import per_chain_protocol | |
| chains = per_chain_protocol.chains_in_pdb( input_pdb_path ) | |
| derived = os.path.abspath( os.path.splitext(path_to_script)[0] + '-per_chain.xml' ) | |
| per_chain_protocol.write_per_chain_protocol( path_to_script, chains, derived ) | |
| return derived | |
| def run_flex_ddg( name, input_path, input_pdb_path, chains_to_move, nstruct_i ): | |
| output_directory = os.path.join( project_root, 'output', os.path.join( name, '%02d' % nstruct_i ) ) | |
| if not os.path.isdir(output_directory): | |
| os.makedirs(output_directory) | |
| flex_ddg_args = [ | |
| os.path.abspath(rosetta_scripts_path), | |
| "-s %s" % os.path.abspath(input_pdb_path), | |
| '-parser:protocol', protocol_for( input_pdb_path ), | |
| '-parser:script_vars', | |
| 'chainstomove=' + chains_to_move, | |
| 'mutate_resfile_relpath=' + os.path.abspath( os.path.join( input_path, 'nataa_mutations.resfile' ) ), | |
| 'number_backrub_trials=%d' % number_backrub_trials, | |
| 'max_minimization_iter=%d' % max_minimization_iter, | |
| 'abs_score_convergence_thresh=%.1f' % abs_score_convergence_thresh, | |
| 'backrub_trajectory_stride=%d' % backrub_trajectory_stride , | |
| '-restore_talaris_behavior', | |
| '-in:file:fullatom', | |
| '-ignore_unrecognized_res', | |
| '-ignore_zero_occupancy false', | |
| '-ex1', | |
| '-ex2', | |
| ] | |
| log_path = os.path.join(output_directory, 'rosetta.out') | |
| print( 'Running Rosetta with args:' ) | |
| print( ' '.join(flex_ddg_args) ) | |
| print( 'Output logged to:', os.path.abspath(log_path) ) | |
| print() | |
| outfile = open(log_path, 'w') | |
| process = subprocess.Popen(flex_ddg_args, stdout=outfile, stderr=subprocess.STDOUT, close_fds = True, cwd = output_directory) | |
| returncode = process.wait() | |
| outfile.close() | |
| if __name__ == '__main__': | |
| cases = [] | |
| for nstruct_i in range(1, nstruct + 1 ): | |
| for case_name in os.listdir(inputs_dir): | |
| case_path = os.path.join( inputs_dir, case_name ) | |
| for f in os.listdir(case_path): | |
| if f.endswith('.pdb'): | |
| input_pdb_path = os.path.join( case_path, f ) | |
| break | |
| with open( os.path.join( case_path, 'chains_to_move.txt' ), 'r' ) as f: | |
| chains_to_move = f.readlines()[0].strip() | |
| cases.append( (case_name, case_path, input_pdb_path, chains_to_move, nstruct_i) ) | |
| if use_multiprocessing: | |
| pool = multiprocessing.Pool( processes = min(max_cpus, multiprocessing.cpu_count()) ) | |
| for args in cases: | |
| if use_multiprocessing: | |
| pool.apply_async( run_flex_ddg, args = args ) | |
| else: | |
| run_flex_ddg( *args ) | |
| if use_multiprocessing: | |
| pool.close() | |
| pool.join() | |