model_name, model_name, iter_) net_param = caffe_util.NetParameter.from_prototxt(model_file) net_param.set_molgrid_data_source(data_file, '') data_param = net_param.get_molgrid_data_param(caffe.TEST) data_param.random_rotation = True net = caffe_util.Net.from_param(net_param, weights_file, phase=caffe.TEST) latent_name = '{}_latent_fc'.format(dict(r='rec', l='lig')[encode]) after_latent_name = 'lig_latent_defc' net.forward(end=latent_name) n_samples = n = net.blobs[latent_name].shape[0] v0 = np.array(net.blobs[latent_name].data[0]) v1 = np.array(net.blobs[latent_name].data[1]) net.blobs[latent_name].data[0:n // 2] = lerp(v0, v1, np.linspace(0, 1, n // 2)) net.blobs[latent_name].data[n // 2:n] = lerp(v1, v0, np.linspace(0, 1, n // 2)) net.forward(start=after_latent_name) dx_groups = {} blob_names = ['lig_gen'] for j in range(n_samples): for blob_name in blob_names: grid_name = '{}_{}k_{}_{}'.format(name, iter_, blob_name, j) grid = np.array(net.blobs[blob_name].data[j]) dx_groups[grid_name] = g.write_grids_to_dx_files( grid_name, grid, channels, center, 0.5) pymol_file = '{}.pymol'.format(name) other_files = [rec_file, lig_file] g.write_pymol_script(pymol_file, dx_groups, other_files, [center, center])
for name, blob in latent_blobs.items(): latent_vecs['zero'][name] = np.zeros(blob.shape[1:]) blob.data[...] = 0.0 for target in latent_vecs: for name in latent_vecs[target]: latent_vec = latent_vecs[target][name] print name, target, latent_vec.shape, np.linalg.norm(latent_vec) grid_names = [] for rec_target in latent_vecs: for lig_target in latent_vecs: idx = len(grid_names) latent_blobs['rec'].data[idx, ...] = latent_vecs[rec_target]['rec'] latent_blobs['lig'].data[idx, ...] = latent_vecs[lig_target]['lig'] grid_names.append('REC_{}_LIG_{}'.format(rec_target, lig_target)) print grid_names[-1] net.forward(start='latent_concat') dx_groups = {} for i, grid_name in enumerate(grid_names): grid = net.blobs['lig_gen'].data[i] dx_groups[grid_name] = generate.write_grids_to_dx_files( grid_name, grid, channels, np.zeros(3), 0.5) generate.write_pymol_script('REC_COND.pymol', dx_groups, rec_files + lig_files, 2 * centers) print 'done'
net.forward(end='latent_concat') net.blobs['lig_latent_mean'] = 0.0 net.blobs['lig_latent_std'] = 1.0 net.forward(start='lig_latent_noise') for other_file in rec_files + lig_files: shutil.copyfile(other_file, os.path.basename(other_file)) rec_files = [os.path.basename(f) for f in rec_files] lig_files = [os.path.basename(f) for f in lig_files] dx_groups = [] target_grids = dict() for i, (rec_file, lig_file) in enumerate(zip(rec_files, lig_files)): target = os.path.splitext(os.path.basename(lig_file))[0] grid = 8.0 * np.array(net.blobs['lig_gen'].data[i]) generate.write_grids_to_dx_files(target, grid, channels, centers[i], 0.5) dx_groups.append(target) target_grids[target] = grid fit_algo = dict(greedy=True, bonded=True, max_init_bond_E=0.2, lambda_E=0.2, radius_factor=1.33) def do_fit(args): lig_file, center = args target = os.path.splitext(os.path.basename(lig_file))[0] grid = target_grids[target] xyz, c, bonds, loss = generate.fit_atoms_to_grids(grid,