def generate_word_d3(): """ Returns JSON with a word as the root node.""" # TO DO Adding word validation and then extra tests to tests.py word = request.args.get("word") clusters = TermCluster.get_top_clusters(word, n=25) root_dict = {"name": "", "children": []} for cluster in clusters: root_dict["children"].append({"name": cluster, "children": [{"name": word, "size": 40000}]}) return jsonify(root_dict)
def generate_d3(radius=3): """ Returns JSON with xyz at the root node. Test with parameters: 40, -45, -25 (Fusiform face area) """ clicked_on = request.args.get("options") if clicked_on == "location": x_coord = float(request.args.get("xcoord")) y_coord = float(request.args.get("ycoord")) z_coord = float(request.args.get("zcoord")) pmids = Activation.get_pmids_from_xyz(x_coord, y_coord, z_coord, radius) scale = 70000 # Get [(wd, freq), ...] and [wd1, wd2] for most frequent words elif clicked_on == "study": pmid = request.args.get("pmid") study = Study.get_study_by_pmid(pmid) pmids = study.get_cluster_mates() scale = 30000 terms_for_dict, words = StudyTerm.get_terms_by_pmid(pmids) # Optional: transform the terms # Get the top clusters top_clusters = TermCluster.get_top_clusters(words) # Get the cluster-word associations associations = TermCluster.get_word_cluster_pairs(top_clusters, words) # Make the root node: root_dict = {"name": "", "children": []} # Build the terminal nodes (leaves) first using (wd, freq) tuples # Output: {word: {'name': word, 'size': freq}, word2: ... } leaves = {} for (word, freq) in terms_for_dict: if word not in leaves: leaves[word] = {"name": word, "size": freq * scale} else: leaves[word]["size"] += freq * scale # Embed the leaves in the clusters: # Output: {cluster_id: {'name': ID, 'children': [...]}, ... } clusters = {} for (cluster_id, word) in associations: if cluster_id not in clusters: clusters[cluster_id] = {"name": cluster_id, "children": [leaves[word]]} else: clusters[cluster_id]["children"].append(leaves[word]) # Put the clusters in the root dictionary # Output: {'name': root, children: [{'name': id, 'children': []}, ...] for cluster in top_clusters: root_dict["children"].append(clusters[cluster]) return jsonify(root_dict)