def unzip_to_tempresults(self): temp_results = path.join(self.bigtraj_folder, 'temp_results') temp_host_folder = path.join(temp_results, self.host) f_zip = path.join(self.bigtraj_folder, f'{self.host}_results.zip') check_dir_exist_and_make(temp_host_folder) with zipfile.ZipFile(f_zip, 'r') as zip_ref: zip_ref.extractall(temp_host_folder) info = f'Unzip {f_zip} into {temp_host_folder}' print(info)
def initialize_folders(self): for folder in [ self.host_folder, self.na_folder, self.input_folder, self.charmminp_folder, self.charmmdat_folder, self.mode_traj_folder, self.ic_folder, self.mat_folder, self.rtficstr_folder, self.datafolder, self.backupfolder, self.scratchfolder ]: check_dir_exist_and_make(folder)
def make_qsub_file(self, path_to_pythonexec): check_dir_exist_and_make(self.qsub_folder) jobname = f'{self.host}_{self.time_label}' wtime = '48:00:00' run_n_node = 1 run_n_cpu = 16 p_agent = PBSAgent(self.qsub_file, jobname, wtime, run_n_node, run_n_cpu, path_to_pythonexec) p_agent.open_file() p_agent.pbssuffix() p_agent.set_pythonexec() p_agent.cutomize_part(self.pyfile) p_agent.close_file()
def make_folders(self): folders = [self.host_folder, self.na_folder, self.input_folder, self.aa_folder, self.heavy_folder, self.inp_folder, self.dat_folder, self.mkcrd_folder] for folder in folders: check_dir_exist_and_make(folder)
def fluct_match(host, type_na, time_label, start, end, cutoff, icfluct_0, icavg_0, scratchfolder, charmm, rootfolder): # Backup Folder backupfolder = path.join(scratchfolder, 'backup') check_dir_exist_and_make(backupfolder) # Set initial variables avg_file = path.join(scratchfolder, 'average_{0:.2f}.ic'.format(cutoff)) fluct_file = path.join(scratchfolder, 'fluct_{0:.2f}.ic'.format(cutoff)) prmfile = path.join(scratchfolder, 'na_enm_{0:.2f}.prm'.format(cutoff)) prm_backup = path.join(backupfolder, 'na_enm_{0:.2f}.backup.prm'.format(cutoff)) prm_backup_0 = path.join(backupfolder, 'na_enm_{0:.2f}.backup.0.prm'.format(cutoff)) err_file = path.join(scratchfolder, 'error_{0:.2f}.txt'.format(cutoff)) copyfile(prmfile, prm_backup_0) # Read icavg, icfluct, set k and target icavg = ic_table.ICTable(avg_file) icfluct = ic_table.ICTable(fluct_file) kbpair = ic_table.KBPair(read_from_prm=False, icavg=icavg, icfluct=icfluct, rt=RT) k = kbpair.d['k'] target = np.reciprocal(np.square(icfluct_0.values)) # Write Error f = open(err_file, 'w') f.write('Created at {0}\n'.format(datetime.datetime.now())) f.write('{0:<5} {1:8}\n'.format('n_iter', 'error')) f.close() # Iteration and Do NMA for i in range(start, end): print("IterNum: {0}".format(i)) nma_inp = path.join(scratchfolder, 'nma.inp') nma_dat = path.join(scratchfolder, 'nma.dat') if i == 0: write_nmainit_inp(nma_inp, host, type_na, time_label, cutoff, rootfolder, scratchfolder) exec_charmm(charmm, nma_inp, nma_dat) time.sleep(2) # Read icavg, icfluct new_icavg = ic_table.ICTable(avg_file) new_icfluct = ic_table.ICTable(fluct_file) optimized = np.reciprocal(np.square(new_icfluct.values)) # Be Careful, b0 is from icavg_0, which is the average structure of MD, it should be kept fix new_kbpair = ic_table.KBPair(read_from_prm=False, icavg=icavg_0, icfluct=new_icfluct, rt=RT) # Update k k -= alpha * (optimized - target) k[np.where(k < 0.)] = 0. # Make all negative values zero new_kbpair.d['k'] = k # Calculate RMSD error and Write error = icfluct_0.values - new_icfluct.values error = np.square(error).mean() error = np.sqrt(error) f = open(err_file, 'a') f.write('{0:<5} {1:8.4f}\n'.format(i + 1, error)) f.close() # Backup PRM copyfile(prmfile, prm_backup) # Update PRM prm_agent = prm.PRM(host, type_na, new_kbpair, iternum=i) prm_agent.write_prm(prmfile)
def main_split_window(rootfolder, host, type_na, time_label, cutoff, start, end, charmm): # Initialize agent = SmallTrajAgent(rootfolder, host, type_na, time_label) nadir = agent.time_folder charmminpfolder = path.join(nadir, 'charmm_inp') charmmdatfolder = path.join(nadir, 'charmm_dat') icfolder = path.join(nadir, 'ic') datafolder = path.join(nadir, 'data') agent.initialize_scratch_folders() scratchfolder = agent.scratchfolder # IC fluct icfluct_inp = path.join(charmminpfolder, 'ic_fluct_{0:.2f}.inp'.format(cutoff)) icfluct_dat = path.join(charmmdatfolder, 'ic_fluct_{0:.2f}.dat'.format(cutoff)) write_ic_fluct_inp(icfluct_inp, host, type_na, time_label, cutoff, rootfolder) exec_charmm(charmm, icfluct_inp, icfluct_dat) mode0ic = path.join(icfolder, 'mode.0.{0:.2f}.ic'.format(cutoff)) nafluctic = path.join(datafolder, 'na.fluct.{0:.2f}.ic'.format(cutoff)) with open(mode0ic, 'r') as f: context = f.read() context = re.sub(r'-99 ', ' -99 ', context) with open(nafluctic, 'w') as f: f.write(context) icfluct_0 = ic_table.ICTable(nafluctic, initial=True) # IC Avg icavg_inp = path.join(charmminpfolder, 'ic_avg_{0:.2f}.inp'.format(cutoff)) icavg_dat = path.join(charmmdatfolder, 'ic_avg_{0:.2f}.dat'.format(cutoff)) write_ic_avg_inp(icavg_inp, host, type_na, time_label, cutoff, rootfolder, distance_average=True) # Important! Check Fix b0 exec_charmm(charmm, icavg_inp, icavg_dat) mode0avgic = path.join(icfolder, 'mode.0.avg.{0:.2f}.ic'.format(cutoff)) naavgic = path.join(datafolder, 'na.avg.{0:.2f}.ic'.format(cutoff)) with open(mode0avgic, 'r') as f: context = f.read() context = re.sub(r'-99 ', ' -99 ', context) with open(naavgic, 'w') as f: f.write(context) icavg_0 = ic_table.ICTable(naavgic, initial=True) # Get the initial equilibrium distance and force constant and write PRM kbpair_0 = ic_table.KBPair(read_from_prm=False, icavg=icavg_0, icfluct=icfluct_0, rt=RT) scratch_prm = path.join( scratchfolder, 'na_enm_{0:.2f}.prm'.format(cutoff)) #!!! Important File prm_agent = prm.PRM(host, type_na, kbpair_0, iternum=0) prm_agent.write_prm(scratch_prm) # NMA Initialize nma_init_inp = path.join(scratchfolder, 'nmainit.inp') nma_init_dat = path.join(scratchfolder, 'nmainit.dat') write_nmainit_inp(nma_init_inp, host, type_na, time_label, cutoff, rootfolder, scratchfolder) exec_charmm(charmm, nma_init_inp, nma_init_dat) # Fluctuation-Matching fluct_match(host, type_na, time_label, start, end, cutoff, icfluct_0, icavg_0, scratchfolder, charmm, rootfolder) # Copy Back to the folder cutoffdatafolder = path.join(nadir, 'cutoffdata') check_dir_exist_and_make(cutoffdatafolder) lastprmfile = path.join(cutoffdatafolder, 'na_enm_{0:.2f}.prm'.format(cutoff)) copyfile(scratch_prm, lastprmfile) print('cp {0} {1}'.format(scratch_prm, lastprmfile)) err_file = path.join(scratchfolder, 'error_{0:.2f}.txt'.format(cutoff)) lasterrfile = path.join(cutoffdatafolder, 'error_{0:.2f}.txt'.format(cutoff)) copyfile(err_file, lasterrfile) print('cp {0} {1}'.format(err_file, lasterrfile)) nma_inp = path.join(scratchfolder, 'nma.inp') nma_inp_back = path.join(nadir, 'charmm_inp', f'nma_{cutoff:.2f}.inp') copyfile(nma_inp, nma_inp_back) nma_dat = path.join(scratchfolder, 'nma.dat') nma_dat_back = path.join(nadir, 'charmm_dat', f'nma_{cutoff:.2f}.dat') copyfile(nma_dat, nma_dat_back)
def check_result_zipfolder(self, ziproot): zip_host_folder = path.join(ziproot, self.host) zip_na_folder = path.join(zip_host_folder, self.type_na) zip_time_folder = path.join(zip_na_folder, self.time_label) for folder in [zip_host_folder, zip_na_folder, zip_time_folder]: check_dir_exist_and_make(folder)
def initialize_scratch_folders(self): for folder in [self.scr_host, self.scr_na, self.scratchfolder]: check_dir_exist_and_make(folder)
def unarchive_folder(self): check_dir_exist_and_make(self.host_folder) with zipfile.ZipFile(self.f_zip, 'r') as zip_ref: zip_ref.extractall(self.host_folder) info = f'Unzip {self.f_zip} into {self.host_folder}' print(info)