def at_np_solvent(cg_residue_type,cg_residues): atomistic_fragments={} #### residue dictionary #### run through every residue in a particular residue type residue_type={} residue_type_mass={} atomistic_fragments_list = [] for cg_resid, cg_residue in enumerate(cg_residues): atomistic_fragments[cg_resid]={} frag_location=gen.fragment_location(cg_residue_type) ### get fragment location from database residue_type[cg_residue_type], residue_type_mass[cg_residue_type] = at_mod.get_atomistic(frag_location, cg_residue_type) for group in residue_type[cg_residue_type]: center, at_frag_centers, cg_frag_centers, group_fit = at_mod.rigid_fit(residue_type[cg_residue_type][group], residue_type_mass[cg_residue_type], cg_residue, cg_residues[cg_residue]) at_connect, cg_connect = at_mod.connectivity(cg_residues[cg_residue], at_frag_centers, cg_frag_centers, group_fit, group) xyz_rot_apply=at_mod.get_rotation(cg_connect, at_connect, center, cg_residue_type, group, cg_resid) atomistic_fragments = at_mod.apply_rotations(atomistic_fragments,cg_resid, group_fit, center, xyz_rot_apply) if cg_residue_type in g_var.np_residues: atomistic_fragments[cg_resid] = at_mod.check_hydrogens(atomistic_fragments[cg_resid]) atomistic_fragments_list, sol_p_bead = sort_np_dictionary(atomistic_fragments[cg_resid], atomistic_fragments_list) if cg_residue_type in g_var.sol_residues: return atomistic_fragments_list, sol_p_bead*len(cg_residues) else: return atomistic_fragments_list, len(atomistic_fragments)
def build_multi_residue_atomistic_system(cg_residues, sys_type): #### initisation of counters chain_count=0 coord_atomistic={} g_var.seq_cg={sys_type:{}} g_var.ter_res={sys_type:{}} gen.mkdir_directory(g_var.working_dir+sys_type) ### make and change to protein directory #### for each residue in protein residue_type={} residue_type_mass={} new_chain = True for cg_residue_id, residue_number in enumerate(cg_residues[sys_type]): if np.round((cg_residue_id/len(cg_residues[sys_type]))*100,2).is_integer(): print('Converting de_novo '+sys_type+': ',np.round((cg_residue_id/len(cg_residues[sys_type]))*100,2),'%', end='\r') resname = cg_residues[sys_type][residue_number][next(iter(cg_residues[sys_type][residue_number]))]['residue_name'] if new_chain: if chain_count not in coord_atomistic: if sys_type == 'PROTEIN': g_var.backbone_coords[chain_count]=[] coord_atomistic[chain_count]={} g_var.seq_cg[sys_type][chain_count]=[] g_var.ter_res[sys_type][chain_count]=[resname, False] new_chain = False coord_atomistic[chain_count][residue_number]={} frag_location=gen.fragment_location(resname) ### get fragment location from database residue_type[resname], residue_type_mass[resname] = at_mod.get_atomistic(frag_location) g_var.seq_cg[sys_type] = add_to_sequence(g_var.seq_cg[sys_type], resname, chain_count) new_chain = False for group in residue_type[resname]: for key in list(residue_type[resname][group].keys()): if key not in cg_residues[sys_type][residue_number]: del residue_type[resname][group][key] if len(residue_type[resname][group]) > 0: center, at_frag_centers, cg_frag_centers, group_fit = at_mod.rigid_fit(residue_type[resname][group], residue_type_mass[resname], residue_number, cg_residues[sys_type][residue_number]) at_connect, cg_connect = at_mod.connectivity(cg_residues[sys_type][residue_number], at_frag_centers, cg_frag_centers, group_fit, group) for group_bead in group_fit: if group_bead in g_var.res_top[resname]['CONNECT']: at_connect, cg_connect, new_chain = at_mod.BB_connectivity(at_connect,cg_connect, cg_residues[sys_type], group_fit[group_bead], residue_number, group_bead) if sys_type == 'PROTEIN': g_var.backbone_coords[chain_count].append(np.append(cg_residues[sys_type][residue_number][group_bead]['coord'], 1)) xyz_rot_apply = at_mod.get_rotation(cg_connect, at_connect, center, resname, group, residue_number) coord_atomistic[chain_count] = at_mod.apply_rotations(coord_atomistic[chain_count],residue_number, group_fit, center, xyz_rot_apply) if new_chain: g_var.ter_res[sys_type][chain_count][1] = resname chain_count+=1 print('Completed initial conversion of '+sys_type+'\n') g_var.system[sys_type]=chain_count if sys_type == 'PROTEIN': for chain in range(chain_count): g_var.skip_disul[chain]=False return coord_atomistic