def main(config, system=None): conf = settings.ConfReader(config, system) global_log, _ = fu.get_logs(path=conf.get_working_dir_path(), light_format=True) for mutation in conf.properties['mutations']: for ligand in conf.properties['ligands']: traj_code = "_".join([mutation, ligand]) traj_code_path = os.path.join(mutation, ligand) ensemble_prop = conf.get_prop_dic(prefix=traj_code_path) ensemble_paths = conf.get_paths_dic(prefix=traj_code_path) # Image global_log.info("Imaging " + traj_code + " trajectory to remove PBC issues") # /gpfs/projects/bsc23/bsc23513/BioExcel/BioExcel_EGFR_pmx/MDs/WT/WT_apo_md_FULL.xtc folder = conf.properties['workdir'] + "/" + mutation traj = folder + "/" + traj_code + "_md_FULL.xtc" top = folder + "/" + traj_code + "_md_1.tpr" out = folder + "/" + traj_code + "_md_FULL.imaged.xtc" global_log.info("Traj in:" + traj) global_log.info("Top in:" + top) global_log.info("Traj out:" + out) ensemble_paths['image']['input_traj_path'] = traj ensemble_paths['image']['input_top_path'] = top ensemble_paths['image']['output_traj_path'] = out gmx_image_pc(**ensemble_paths["image"], properties=ensemble_prop["image"])
def main(config, system=None): start_time = time.time() conf = settings.ConfReader(config, system) global_log, _ = fu.get_logs(path=conf.get_working_dir_path(), light_format=True) global_prop = conf.get_prop_dic() global_paths = conf.get_paths_dic() dhdl_paths_listA = [] dhdl_paths_listB = [] for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) # step0_image global_log.info( ensemble + " Step 0: gmx image: Imaging trajectories to remove PBC issues") ensemble_paths['step0_image']['input_traj_path'] = conf.properties[ 'input_trajs'][ensemble]['input_traj_path'] ensemble_paths['step0_image']['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] gmx_image_pc(**ensemble_paths["step0_image"], properties=ensemble_prop["step0_image"]) # step1_trjconv global_log.info( ensemble + " Step 1: gmx trjconv: Extract snapshots from equilibrium trajectories" ) ensemble_paths['step1_trjconv_' + ensemble]['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] gmx_trjconv_str_ens_pc(**ensemble_paths['step1_trjconv_' + ensemble], properties=ensemble_prop['step1_trjconv_' + ensemble]) for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) compss_wait_on_file(ensemble_paths['step1_trjconv_' + ensemble]["output_str_ens_path"]) with zipfile.ZipFile( ensemble_paths['step1_trjconv_' + ensemble]["output_str_ens_path"]) as zip_f: unique_dir = os.path.abspath( fu.create_unique_dir( prefix=ensemble_prop['step1_trjconv_' + ensemble]['working_dir_path'] + '/' + ensemble + '/')) zip_f.extractall(unique_dir) state_pdb_list = [ os.path.join(unique_dir, name) for name in zip_f.namelist() ] for pdb_path in state_pdb_list: pdb_name = os.path.splitext(os.path.basename(pdb_path))[0] prop = conf.get_prop_dic(prefix=os.path.join(ensemble, pdb_name)) paths = conf.get_paths_dic(prefix=os.path.join(ensemble, pdb_name)) # Fixing terminal residues newpdb = pdb_path + ".term.gro" #fix_gro("/gpfs/scratch/bsc19/bsc19611/RATG13-RBD/fixGro.sh", pdb_path, newpdb) fix_term(pdb_path, newpdb) # Fixing terminal residues #newpdb2 = pdb_path + ".term.gro" #cmd2 = "sed 's/600ASN /600NASN/g' " + pdb_path + "| sed 's/ 1SER / 1NSER /g' | sed 's/597ASP /597CASP/g' | sed 's/793PRO /793CPRO/g' > " + newpdb2 #subprocess.call(cmd2, shell=True) paths['step1_pmx_mutate']['input_structure_path'] = newpdb # step1_pmx_mutate global_log.info(ensemble + " " + pdb_name + " Step 1: pmx mutate: Generate Hybrid Structure") prop['step1_pmx_mutate']['mutation_list'] = mutation mutate_pc(**paths["step1_pmx_mutate"], properties=prop["step1_pmx_mutate"]) # step1.1_check_dummies global_log.info(ensemble + " " + pdb_name + " Step 1.1 Check for dummy atoms") extract_atoms_pc(**paths['step1.1_check_dummies'], properties=prop['step1.1_check_dummies']) #compss_wait_on_file(paths['step1.1_check_dummies']['output_structure_path']) #try: # dummy = bool(os.path.getsize(paths['step1.1_check_dummies']['output_structure_path'])) #except: # global_log.info("Error ocurred while checking the file containing dummy atoms") # global_log.info(sys.exc_info()[0]) # step1.2_remove_ligand #global_log.info(ensemble + " " + pdb_name + " Step 1.2 Remove ligand") #remove_ligand_pc(**paths['step1.2_remove_ligand'], properties=prop['step1.2_remove_ligand']) # step2_gmx_pdb2gmx global_log.info(ensemble + " " + pdb_name + " Step 2: gmx pdb2gmx: Generate Topology") pdb2gmx_pc(**paths["step2_gmx_pdb2gmx"], properties=prop["step2_gmx_pdb2gmx"]) # step2.1_sort_gro #global_log.info(ensemble + " " + pdb_name + " Step 2.1 Sort gro residues") #sort_gro_residues_pc(**paths['step2.1_sort_gro'], properties=prop['step2.1_sort_gro']) # step2.2_lig_gmx_appendLigand #global_log.info(ensemble + " " + pdb_name +" Step 2.2_lig: gmx appendLigand: Append a ligand to a GROMACS topology") #append_ligand_pc(**paths["step2.2_lig_gmx_appendLigand"], properties=prop["step2.2_lig_gmx_appendLigand"]) # step3_pmx_gentop global_log.info(ensemble + " " + pdb_name + " Step 3: pmx gentop: Generate Hybrid Topology") gentop_pc(**paths["step3_pmx_gentop"], properties=prop["step3_pmx_gentop"]) # step4_gmx_makendx, step5_gmx_grompp, step6_gmx_mdrun #global_log.info(ensemble + " " + pdb_name +" Check structure and Step 4-6 (Dummies): gmx make_ndx: Generate Gromacs Index file to select atoms to freeze, gmx grompp: Creating portable binary run file for energy minimization, gmx mdrun: Running energy minimization") #check_structure_and_run_ndx_pc(ensemble, **paths["step4_gmx_makendx"], properties_makendx=prop["step4_gmx_makendx"], **paths["step5_gmx_grompp"], properties_grompp=prop["step5_gmx_grompp"], **paths["step6_gmx_mdrun"], properties_mdrun=prop["step6_gmx_mdrun"]) # step4_gmx_makendx, step5_gmx_grompp, step6_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 4-6 (Check structure and ndx): gmx make_ndx: Generate Gromacs Index file to select atoms to freeze, gmx grompp: Creating portable binary run file for energy minimization, gmx mdrun: Running energy minimization" ) fu.create_dir(prop["step4_gmx_makendx"]['working_dir_path'] + "/" + ensemble + "/" + pdb_name + "/step4_gmx_makendx") fu.create_dir(prop["step5_gmx_grompp"]['working_dir_path'] + "/" + ensemble + "/" + pdb_name + "/step5_gmx_grompp") fu.create_dir(prop["step6_gmx_mdrun"]['working_dir_path'] + "/" + ensemble + "/" + pdb_name + "/step6_gmx_mdrun") check_structure_and_run_ndx_pc( ensemble, output_structure_path=paths['step1.1_check_dummies'] ['output_structure_path'], **paths["step4_gmx_makendx"], properties_makendx=prop["step4_gmx_makendx"], **paths["step5_gmx_grompp"], properties_grompp=prop["step5_gmx_grompp"], **paths["step6_gmx_mdrun"], properties_mdrun=prop["step6_gmx_mdrun"]) # step7_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 7: gmx grompp: Creating portable binary run file for system equilibration" ) grompp_pc(**paths["step7_gmx_grompp"], properties=prop["step7_gmx_grompp"]) # step8_gmx_mdrun global_log.info(ensemble + " " + pdb_name + " Step 8: gmx mdrun: Running system equilibration") mdrun_pc(**paths["step8_gmx_mdrun"], properties=prop["step8_gmx_mdrun"]) # step9_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 9: Creating portable binary run file for thermodynamic integration (ti)" ) grompp_pc(**paths["step9_gmx_grompp"], properties=prop["step9_gmx_grompp"]) # step10_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 10: gmx mdrun: Running thermodynamic integration") mdrun_dhdl_pc(**paths["step10_gmx_mdrun"], properties=prop["step10_gmx_mdrun"]) if ensemble == "stateA": dhdl_paths_listA.append( paths["step10_gmx_mdrun"]["output_dhdl_path"]) elif ensemble == "stateB": dhdl_paths_listB.append( paths["step10_gmx_mdrun"]["output_dhdl_path"]) # Creating zip file containing all the dhdl files dhdlA_path = os.path.join( global_prop["step11_pmx_analyse"]['working_dir_path'], 'dhdlA.zip') dhdlB_path = os.path.join( global_prop["step11_pmx_analyse"]['working_dir_path'], 'dhdlB.zip') for dhdl_file in dhdl_paths_listA: compss_wait_on_file(dhdl_file) for dhdl_file in dhdl_paths_listB: compss_wait_on_file(dhdl_file) fu.zip_list(dhdlA_path, dhdl_paths_listA) fu.zip_list(dhdlB_path, dhdl_paths_listB) # step11_pmx_analyse global_log.info( ensemble + " Step 11: pmx analyse: Calculate free energies from fast growth thermodynamic integration simulations" ) global_paths["step11_pmx_analyse"]["input_a_xvg_zip_path"] = dhdlA_path global_paths["step11_pmx_analyse"]["input_b_xvg_zip_path"] = dhdlB_path analyse_pc(**global_paths["step11_pmx_analyse"], properties=global_prop["step11_pmx_analyse"]) elapsed_time = time.time() - start_time global_log.info('') global_log.info('') global_log.info('Execution successful: ') global_log.info(' Workflow_path: %s' % conf.get_working_dir_path()) global_log.info(' Config File: %s' % config) if system: global_log.info(' System: %s' % system) global_log.info('') global_log.info('Elapsed time: %.1f minutes' % (elapsed_time / 60)) global_log.info('')
def main(config, system=None): start_time = time.time() conf = settings.ConfReader(config, system) global_log, _ = fu.get_logs(path=conf.get_working_dir_path(), light_format=True) global_prop = conf.get_prop_dic() global_paths = conf.get_paths_dic() dhdl_paths_listA = [] dhdl_paths_listB = [] for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) # step0_image global_log.info( ensemble + " Step 0: gmx image: Imaging trajectories to remove PBC issues") ensemble_paths['step0_image']['input_traj_path'] = conf.properties[ 'input_trajs'][ensemble]['input_traj_path'] ensemble_paths['step0_image']['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] gmx_image_pc(**ensemble_paths["step0_image"], properties=ensemble_prop["step0_image"]) # step0.1_trjconv global_log.info( ensemble + " Step 0: gmx trjconv: Extract snapshots from equilibrium trajectories" ) ensemble_paths['step0.1_trjconv']['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] gmx_trjconv_str_ens_pc(**ensemble_paths["step0.1_trjconv"], properties=ensemble_prop["step0.1_trjconv"]) for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) compss_wait_on_file( ensemble_paths["step0.1_trjconv"]["output_str_ens_path"]) with zipfile.ZipFile(ensemble_paths["step0.1_trjconv"] ["output_str_ens_path"]) as zip_f: unique_dir = os.path.abspath( fu.create_unique_dir(prefix=ensemble_prop["step0.1_trjconv"] ['working_dir_path'] + '/' + ensemble + '/')) zip_f.extractall(unique_dir) state_pdb_list = [ os.path.join(unique_dir, name) for name in zip_f.namelist() ] for pdb_path in state_pdb_list: pdb_name = os.path.splitext(os.path.basename(pdb_path))[0] prop = conf.get_prop_dic(prefix=os.path.join(ensemble, pdb_name)) paths = conf.get_paths_dic(prefix=os.path.join(ensemble, pdb_name)) # step1_pmx_mutate global_log.info(ensemble + " " + pdb_name + " Step 1: pmx mutate: Generate Hybrid Structure") paths['step1_pmx_mutate']['input_structure_path'] = pdb_path prop['step1_pmx_mutate']['mutation_list'] = mutation mutate_pc(**paths["step1_pmx_mutate"], properties=prop["step1_pmx_mutate"]) if ensemble == 'stateA': mut = "L2R" elif ensemble == 'stateB': mut = "R2L" # step1.1_check_dummies global_log.info(ensemble + " " + pdb_name + " Step 1.1 Check for dummy atoms") extract_atoms_pc(**paths['step1.1_check_dummies'], properties=prop['step1.1_check_dummies']) compss_wait_on_file( paths['step1.1_check_dummies']['output_structure_path']) dummy = bool( os.path.getsize( paths['step1.1_check_dummies']['output_structure_path'])) # step1.2_remove_ligand global_log.info(ensemble + " " + pdb_name + " Step 1.2 Remove ligand") remove_ligand_pc(**paths['step1.2_remove_ligand'], properties=prop['step1.2_remove_ligand']) # step2_gmx_pdb2gmx global_log.info(ensemble + " " + pdb_name + " Step 2: gmx pdb2gmx: Generate Topology") pdb2gmx_pc(**paths["step2_gmx_pdb2gmx"], properties=prop["step2_gmx_pdb2gmx"]) # step2.1_sort_gro global_log.info(ensemble + " " + pdb_name + " Step 2.1 Sort gro residues") sort_gro_residues_pc(**paths['step2.1_sort_gro'], properties=prop['step2.1_sort_gro']) # step2.2_lig_gmx_appendLigand global_log.info( ensemble + " " + pdb_name + " Step 2.2_lig: gmx appendLigand: Append a ligand to a GROMACS topology" ) append_ligand_pc(**paths["step2.2_lig_gmx_appendLigand"], properties=prop["step2.2_lig_gmx_appendLigand"]) # step3_pmx_gentop global_log.info(ensemble + " " + pdb_name + " Step 3: pmx gentop: Generate Hybrid Topology") gentop_pc(**paths["step3_pmx_gentop"], properties=prop["step3_pmx_gentop"]) if not dummy: paths['step7_gmx_grompp']['input_gro_path'] = paths[ 'step2.1_sort_gro']['output_gro_path'] else: # step4_gmx_makendx global_log.info( ensemble + " " + pdb_name + " Step 4 (Dummies): gmx make_ndx: Generate Gromacs Index file to select atoms to freeze" ) make_ndx_pc(**paths["step4_gmx_makendx"], properties=prop["step4_gmx_makendx"]) # step5_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 5 (Dummies): gmx grompp: Creating portable binary run file for energy minimization" ) grompp_ndx_pc(**paths["step5_gmx_grompp"], properties=prop["step5_gmx_grompp"]) # step6_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 6 (Dummies): gmx mdrun: Running energy minimization" ) mdrun_pc(**paths["step6_gmx_mdrun"], properties=prop["step6_gmx_mdrun"]) # step7_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 7: gmx grompp: Creating portable binary run file for system equilibration" ) grompp_pc(**paths["step7_gmx_grompp"], properties=prop["step7_gmx_grompp"]) # step8_gmx_mdrun global_log.info(ensemble + " " + pdb_name + " Step 8: gmx mdrun: Running system equilibration") mdrun_pc(**paths["step8_gmx_mdrun"], properties=prop["step8_gmx_mdrun"]) # step9_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 9: Creating portable binary run file for thermodynamic integration (ti)" ) grompp_pc(**paths["step9_gmx_grompp"], properties=prop["step9_gmx_grompp"]) # step10_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 10: gmx mdrun: Running thermodynamic integration") mdrun_dhdl_pc(**paths["step10_gmx_mdrun"], properties=prop["step10_gmx_mdrun"]) if ensemble == "stateA": dhdl_paths_listA.append( paths["step10_gmx_mdrun"]["output_dhdl_path"]) elif ensemble == "stateB": dhdl_paths_listB.append( paths["step10_gmx_mdrun"]["output_dhdl_path"]) # Creating zip file containing all the dhdl files dhdlA_path = 'dhdlA.zip' dhdlB_path = 'dhdlB.zip' # for dhdl_file in dhdl_paths_listA: # compss_wait_on_file(dhdl_file) # for dhdl_file in dhdl_paths_listB: # compss_wait_on_file(dhdl_file) # fu.zip_list(dhdlA_path, dhdl_paths_listA) # fu.zip_list(dhdlB_path, dhdl_paths_listB) zip_files_pc(dhdl_paths_listA, dhdlA_path) zip_files_pc(dhdl_paths_listB, dhdlB_path) # step11_pmx_analyse global_log.info( ensemble + " Step 11: pmx analyse: Calculate free energies from fast growth thermodynamic integration simulations" ) global_paths["step11_pmx_analyse"]["input_a_xvg_zip_path"] = dhdlA_path global_paths["step11_pmx_analyse"]["input_b_xvg_zip_path"] = dhdlB_path analyse_pc(**global_paths["step11_pmx_analyse"], properties=global_prop["step11_pmx_analyse"]) elapsed_time = time.time() - start_time global_log.info('') global_log.info('') global_log.info('Execution successful: ') global_log.info(' Workflow_path: %s' % conf.get_working_dir_path()) global_log.info(' Config File: %s' % config) if system: global_log.info(' System: %s' % system) global_log.info('') global_log.info('Elapsed time: %.1f minutes' % (elapsed_time / 60)) global_log.info('')
def main(config, imaged_traj_available): start_time = time.time() conf = settings.ConfReader(config) global_log, _ = fu.get_logs(path=conf.get_working_dir_path(), light_format=True) global_prop = conf.get_prop_dic() global_paths = conf.get_paths_dic() dhdl_paths_listA = [] dhdl_paths_listB = [] for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) if not imaged_traj_available: # step0_image There isn't an imaged trajectory global_log.info( ensemble + " Step 0: gmx image: Imaging trajectories to remove PBC issues" ) ensemble_paths['step0_image']['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] ensemble_paths['step0_image']['input_traj_path'] = conf.properties[ 'input_trajs'][ensemble]['input_traj_path'] gmx_image_pc(**ensemble_paths["step0_image"], properties=ensemble_prop["step0_image"]) else: # An imaged trajectory is available ensemble_paths['step1_trjconv_' + ensemble]['input_traj_path'] = conf.properties[ 'input_trajs'][ensemble]['input_traj_path'] # step1_trjconv global_log.info( ensemble + " Step 1: gmx trjconv: Extract snapshots from equilibrium trajectories" ) ensemble_paths['step1_trjconv_' + ensemble]['input_top_path'] = conf.properties[ 'input_trajs'][ensemble]['input_tpr_path'] gmx_trjconv_str_ens_pc(**ensemble_paths['step1_trjconv_' + ensemble], properties=ensemble_prop['step1_trjconv_' + ensemble]) for ensemble, mutation in conf.properties['mutations'].items(): ensemble_prop = conf.get_prop_dic(prefix=ensemble) ensemble_paths = conf.get_paths_dic(prefix=ensemble) compss_wait_on_file(ensemble_paths['step1_trjconv_' + ensemble]["output_str_ens_path"]) with zipfile.ZipFile( ensemble_paths['step1_trjconv_' + ensemble]["output_str_ens_path"]) as zip_f: unique_dir = os.path.abspath( fu.create_unique_dir( prefix=ensemble_prop['step1_trjconv_' + ensemble]['working_dir_path'] + '/' + ensemble + '/')) zip_f.extractall(unique_dir) state_pdb_list = [ os.path.join(unique_dir, name) for name in zip_f.namelist() ] for pdb_path in state_pdb_list: pdb_name = os.path.splitext(os.path.basename(pdb_path))[0] prop = conf.get_prop_dic(prefix=os.path.join(ensemble, pdb_name)) paths = conf.get_paths_dic(prefix=os.path.join(ensemble, pdb_name)) # step2_pmx_mutate global_log.info(ensemble + " " + pdb_name + " Step 2: pmx mutate: Generate Hybrid Structure") paths['step2_pmx_mutate']['input_structure_path'] = pdb_path prop['step2_pmx_mutate']['mutation_list'] = mutation mutate_pc(**paths["step2_pmx_mutate"], properties=prop["step2_pmx_mutate"]) # step3_check_dummies global_log.info(ensemble + " " + pdb_name + " Step 3 Check for dummy atoms") extract_atoms_pc(**paths['step3_check_dummies'], properties=prop['step3_check_dummies']) compss_wait_on_file( paths['step3_check_dummies']['output_structure_path']) try: dummy = bool( os.path.getsize( paths['step3_check_dummies']['output_structure_path'])) except: global_log.info( "Error ocurred while checking the file containing dummy atoms" ) global_log.info(sys.exc_info()[0]) # step4_gmx_pdb2gmx global_log.info(ensemble + " " + pdb_name + " Step 4: gmx pdb2gmx: Generate Topology") pdb2gmx_pc(**paths["step4_gmx_pdb2gmx"], properties=prop["step4_gmx_pdb2gmx"]) # step5_pmx_gentop global_log.info(ensemble + " " + pdb_name + " Step 5: pmx gentop: Generate Hybrid Topology") gentop_pc(**paths["step5_pmx_gentop"], properties=prop["step5_pmx_gentop"]) if not dummy: paths['step9_gmx_grompp']['input_gro_path'] = paths[ 'step4_gmx_pdb2gmx']['output_gro_path'] else: # step6_gmx_makendx global_log.info( ensemble + " " + pdb_name + " Step 6: (Dummies): gmx make_ndx: Generate Gromacs Index file to select atoms to freeze" ) make_ndx_pc(**paths["step6_gmx_makendx"], properties=prop["step6_gmx_makendx"]) # step7_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 7: (Dummies): gmx grompp: Creating portable binary run file for energy minimization" ) grompp_ndx_pc(**paths["step7_gmx_grompp"], properties=prop["step7_gmx_grompp"]) # step8_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 8: (Dummies): gmx mdrun: Running energy minimization" ) mdrun_pc(**paths["step8_gmx_mdrun"], properties=prop["step8_gmx_mdrun"]) # step9_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 9: gmx grompp: Creating portable binary run file for system equilibration" ) grompp_pc(**paths["step9_gmx_grompp"], properties=prop["step9_gmx_grompp"]) # step10_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 10: gmx mdrun: Running system equilibration") mdrun_pc(**paths["step10_gmx_mdrun"], properties=prop["step10_gmx_mdrun"]) # step11_gmx_grompp global_log.info( ensemble + " " + pdb_name + " Step 11: Creating portable binary run file for thermodynamic integration (ti)" ) grompp_pc(**paths["step11_gmx_grompp"], properties=prop["step11_gmx_grompp"]) # step12_gmx_mdrun global_log.info( ensemble + " " + pdb_name + " Step 12: gmx mdrun: Running thermodynamic integration") mdrun_dhdl_pc(**paths["step12_gmx_mdrun"], properties=prop["step12_gmx_mdrun"]) if ensemble == "stateA": dhdl_paths_listA.append( paths["step12_gmx_mdrun"]["output_dhdl_path"]) elif ensemble == "stateB": dhdl_paths_listB.append( paths["step12_gmx_mdrun"]["output_dhdl_path"]) # Creating zip file containing all the dhdl files dhdlA_path = os.path.join( global_prop["step13_pmx_analyse"]['working_dir_path'], 'dhdlA.zip') dhdlB_path = os.path.join( global_prop["step13_pmx_analyse"]['working_dir_path'], 'dhdlB.zip') for dhdl_file in dhdl_paths_listA: compss_wait_on_file(dhdl_file) for dhdl_file in dhdl_paths_listB: compss_wait_on_file(dhdl_file) fu.zip_list(dhdlA_path, dhdl_paths_listA) fu.zip_list(dhdlB_path, dhdl_paths_listB) # step13_pmx_analyse global_log.info( ensemble + " Step 13: pmx analyse: Calculate free energies from fast growth thermodynamic integration simulations" ) global_paths["step13_pmx_analyse"]["input_a_xvg_zip_path"] = dhdlA_path global_paths["step13_pmx_analyse"]["input_b_xvg_zip_path"] = dhdlB_path analyse_pc(**global_paths["step13_pmx_analyse"], properties=global_prop["step13_pmx_analyse"]) elapsed_time = time.time() - start_time global_log.info('') global_log.info('') global_log.info('Execution successful: ') global_log.info(' Workflow_path: %s' % conf.get_working_dir_path()) global_log.info(' Config File: %s' % config) global_log.info('') global_log.info('Elapsed time: %.1f minutes' % (elapsed_time / 60)) global_log.info('')