def apply_chemical_steps_molecule(): smiles = request.form['smiles'] smiles = rdkit_smile(smiles) if smiles is None or smiles == '': result = {'mol_dict': {}} return jsonify(result=result) network = Network(target_smiles=smiles) network.generate(smiles, 0, calculate_scores=False) new_substrate_nodes, new_reaction_nodes = network.add_chemical_step(smiles) list_processed = [] for smi in new_substrate_nodes: new_smi = re.sub(r"\[(?:[1-9]|[1-9][0-9])\*\]", '*', smi) list_processed.append(new_smi) mol_dict = {} for smi in list_processed: mol = Chem.MolFromSmiles(smi) img = get_images.moltosvg(mol, molSize=(200, 200), kekulize=True) mol_dict[smi] = img result = {'mol_dict': mol_dict} return jsonify(result=result)
def aizynth_step(): clicked_node = request.form['smiles'] x = request.form['x'] y = request.form['y'] task_id = request.form['task_id'] max_reactions = request.form['max_reactions'] aizynth_reaction_mode = request.form['aizynth_reaction_mode'] data = json.loads(current_app.redis.get(task_id)) graph_dict = json.loads(data['graph_dict']) attr_dict = json.loads(data['attr_dict']) target_smiles = data['target_smiles'] network_options = json.loads(data['network_options']) graph = nx.from_dict_of_lists(graph_dict, create_using=nx.DiGraph) network = Network(graph=graph, target_smiles=target_smiles, print_log=not current_app.config['PRODUCTION']) network.update_settings(network_options) network.add_attributes(attr_dict) network.update_settings({ 'max_reactions': int(max_reactions), 'aizynth_reaction_mode': aizynth_reaction_mode }) new_substrate_nodes, new_reaction_nodes = network.add_chemical_step( clicked_node) all_new_nodes = [clicked_node] + new_substrate_nodes + new_reaction_nodes subgraph = network.graph.subgraph(all_new_nodes) nodes, edges = network.get_visjs_nodes_and_edges(graph=subgraph) for i, node in enumerate(nodes): nodes[i].update({'x': x, 'y': y}) result = {'nodes': nodes, 'edges': edges} data['graph_dict'] = json.dumps(nx.to_dict_of_lists(network.graph)) data['attr_dict'] = json.dumps(network.attributes_dict()) nodes = add_new(data['nodes'], nodes) edges = add_new(data['edges'], edges) nodes, edges = delete_nodes_and_edges([], nodes, edges) data['nodes'] = nodes data['edges'] = edges current_app.redis.mset({task_id: json.dumps(data)}) time_to_expire = 15 * 60 #15 mins * 60 seconds current_app.redis.expire(task_id, time_to_expire) return jsonify(result=result)