def skeleton_graph(request, project_id=None): compute_risk = 1 == int(request.POST.get("risk", 0)) if compute_risk: # TODO port the last bit: computing the synapse risk from graph import skeleton_graph as slow_graph return slow_graph(request, project_id=project_id) project_id = int(project_id) skeleton_ids = set(int(v) for k, v in request.POST.iteritems() if k.startswith("skeleton_list[")) confidence_threshold = min(int(request.POST.get("confidence_threshold", 0)), 5) bandwidth = float(request.POST.get("bandwidth", 0)) # in nanometers cable_spread = float(request.POST.get("cable_spread", 2500)) # in nanometers path_confluence = int(request.POST.get("path_confluence", 10)) # a count expand = set(int(v) for k, v in request.POST.iteritems() if k.startswith("expand[")) return HttpResponse( json.dumps( _skeleton_graph( project_id, skeleton_ids, confidence_threshold, bandwidth, expand, compute_risk, cable_spread, path_confluence, ) ) )
def skeleton_graph(request, project_id=None): compute_risk = 1 == int(request.POST.get('risk', 0)) if compute_risk: # TODO port the last bit: computing the synapse risk from graph import skeleton_graph as slow_graph return slow_graph(request, project_id=project_id) project_id = int(project_id) skeleton_ids = set(int(v) for k,v in request.POST.iteritems() if k.startswith('skeleton_list[')) confidence_threshold = min(int(request.POST.get('confidence_threshold', 0)), 5) bandwidth = float(request.POST.get('bandwidth', 0)) # in nanometers cable_spread = float(request.POST.get('cable_spread', 2500)) # in nanometers path_confluence = int(request.POST.get('path_confluence', 10)) # a count expand = set(int(v) for k,v in request.POST.iteritems() if k.startswith('expand[')) return HttpResponse(json.dumps(_skeleton_graph(project_id, skeleton_ids, confidence_threshold, bandwidth, expand, compute_risk, cable_spread, path_confluence)))
def skeleton_graph(request, project_id=None): """Get a synaptic graph between skeletons compartmentalized by confidence. Given a set of skeletons, retrieve presynaptic-to-postsynaptic edges between them, annotated with count. If a confidence threshold is supplied, compartmentalize the skeletons at edges in the arbor below that threshold and report connectivity based on these compartments. When skeletons are split into compartments, nodes in the graph take an string ID like ``{skeleton_id}_{compartment #}``. --- parameters: - name: skeleton_ids[] description: IDs of the skeletons to graph required: true type: array items: type: integer paramType: form - name: confidence_threshold description: Confidence value below which to segregate compartments type: integer paramType: form - name: bandwidth description: Bandwidth in nanometers type: number - name: cable_spread description: Cable spread in nanometers type: number - name: expand[] description: IDs of the skeletons to expand type: array items: type: integer - name: link_types[] description: IDs of link types to respect type: array items: type: string models: skeleton_graph_edge: id: skeleton_graph_edge properties: - description: ID of the presynaptic skeleton or compartment type: integer|string required: true - description: ID of the postsynaptic skeleton or compartment type: integer|string required: true - description: number of synapses constituting this edge $ref: skeleton_graph_edge_count required: true skeleton_graph_edge_count: id: skeleton_graph_edge_count properties: - description: Number of synapses with confidence 1 type: integer required: true - description: Number of synapses with confidence 2 type: integer required: true - description: Number of synapses with confidence 3 type: integer required: true - description: Number of synapses with confidence 4 type: integer required: true - description: Number of synapses with confidence 5 type: integer required: true skeleton_graph_intraedge: id: skeleton_graph_intraedge properties: - description: ID of the presynaptic skeleton or compartment type: integer|string required: true - description: ID of the postsynaptic skeleton or compartment type: integer|string required: true type: edges: type: array items: $ref: skeleton_graph_edge required: true nodes: type: array items: type: integer|string required: false intraedges: type: array items: $ref: skeleton_graph_intraedge required: false branch_nodes: type: array items: type: integer|string required: false """ compute_risk = 1 == int(request.POST.get('risk', 0)) if compute_risk: # TODO port the last bit: computing the synapse risk from graph import skeleton_graph as slow_graph return slow_graph(request, project_id) project_id = int(project_id) skeleton_ids = set(int(v) for k,v in request.POST.items() if k.startswith('skeleton_ids[')) confidence_threshold = min(int(request.POST.get('confidence_threshold', 0)), 5) bandwidth = float(request.POST.get('bandwidth', 0)) # in nanometers cable_spread = float(request.POST.get('cable_spread', 2500)) # in nanometers path_confluence = int(request.POST.get('path_confluence', 10)) # a count expand = set(int(v) for k,v in request.POST.items() if k.startswith('expand[')) with_overall_counts = get_request_bool(request.POST, 'with_overall_counts', False) expand = set(int(v) for k,v in request.POST.items() if k.startswith('expand[')) link_types = get_request_list(request.POST, 'link_types', None) graph = _skeleton_graph(project_id, skeleton_ids, confidence_threshold, bandwidth, expand, compute_risk, cable_spread, path_confluence, with_overall_counts, link_types=link_types) if not graph: raise ValueError("Could not compute graph") return JsonResponse(graph)