Difference between revisions of "SNT: Scripting"

(add description for analysis script templates)
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Category:SNT]][[Category:Neuroanatomy]][[Category:Scripting]]
 
[[Category:SNT]][[Category:Neuroanatomy]][[Category:Scripting]]
 
{{SNTNavBar}}
 
{{SNTNavBar}}
 +
 +
==SNT API==
 +
The full up-to-date SNT API can be found at [http://fiji.github.io/SNT/ http://fiji.github.io/SNT/]
  
 
==Script Templates==
 
==Script Templates==
Line 23: Line 26:
  
 
'''SciView_Demo.groovy'''  Exemplifies how bridge SNT with [https://imagej.net/SciView SciView].
 
'''SciView_Demo.groovy'''  Exemplifies how bridge SNT with [https://imagej.net/SciView SciView].
 +
 +
===Sholl===
 +
 +
'''Extensive_Sholl_Stats.groovy'''  Exemplifies how to perform linear and polynomial regression on tabular Sholl data.
 +
 +
===Boilerplate===
 +
This menu hosts script templates containing extensible boilerplate code in several programming languages. The most essential imports and script parameters are included to facilitate rapid development.
 +
 +
'''BSH.bsh''' A boilerplate script template in the [https://beanshell.github.io/ BeanShell] programming language.
 +
 +
'''GVY.groovy''' A boilerplate script template in the [https://groovy-lang.org/ Apache Groovy] programming language.
 +
 +
'''PY.py''' - A boilerplate script template in the [https://www.python.org/ Python] programming language.
 +
 +
===Tracing===
 +
 +
'''Scripted_Tracing_Demo.py'''  Exemplifies how to programmatically perform A* tracing between two points without GUI interaction, which allows for automated tracing of relatively simple structures (e.g., neurospheres neurites, microtubule bundles, etc). In this demo, points are retrieved from the SWC file of SNT's "demo tree", effectively recreating the initial SWC data.
 +
 +
'''Scripted_Tracing_Demo_(Interactive).py'''  Exemplifies how to programmatically interact with a running instance of SNT to perform auto-tracing tasks.
 +
 +
===Utilities===
 +
 +
'''Convert_Traces_to_SWC.py'''  Converts all .traces files in a directory into SWC.
 +
 +
'''Filter_Multiple_Images.py'''  Bulk filtering of image files using Frangi Vesselness.
 +
 +
'''Measure_Multiple_Files.py'''  Bulk measurements of reconstruction files using SNT.
 +
 +
'''Take_Snapshot.py'''  Displays a WYSIWYG image of a tracing canvas. Exemplifies how to script SNT using SNTService.
  
 
==Python Notebooks==
 
==Python Notebooks==
Line 28: Line 60:
 
==Installing pyimagej==
 
==Installing pyimagej==
 
Follow the instructions given [https://github.com/imagej/pyimagej#installation here]
 
Follow the instructions given [https://github.com/imagej/pyimagej#installation here]
==Getting Started==
+
===Getting Started===
 
To initialize Fiji from Python with GUI capabilities:
 
To initialize Fiji from Python with GUI capabilities:
 
<source lang="python">
 
<source lang="python">
Line 60: Line 92:
 
</source>
 
</source>
  
==Advanced Examples==
+
===Advanced Examples===
 
The [https://github.com/fiji/Simple_Neurite_Tracer/tree/scijava/notebooks Notebooks] directory in the SNT [https://github.com/fiji/Simple_Neurite_Tracer GitHub repository] contains examples which are executable on [https://mybinder.readthedocs.io/en/latest/ Binder].
 
The [https://github.com/fiji/Simple_Neurite_Tracer/tree/scijava/notebooks Notebooks] directory in the SNT [https://github.com/fiji/Simple_Neurite_Tracer GitHub repository] contains examples which are executable on [https://mybinder.readthedocs.io/en/latest/ Binder].
 
For example, to run the convex_hull notebook via [https://mybinder.org/ mybinder.org], follow this link: [https://mybinder.org/v2/gh/fiji/Simple_Neurite_Tracer/scijava?filepath=%2Fnotebooks%2Fconvex_hull.ipynb convex_hull.ipynb]
 
For example, to run the convex_hull notebook via [https://mybinder.org/ mybinder.org], follow this link: [https://mybinder.org/v2/gh/fiji/Simple_Neurite_Tracer/scijava?filepath=%2Fnotebooks%2Fconvex_hull.ipynb convex_hull.ipynb]
 +
 +
==Packaging Scripts with SNT==
 +
TBD

Revision as of 21:35, 9 December 2019

Home Manual Walk-throughs Screencasts Shortcuts Analysis Rec. Viewer SciView Cx3D Scripting FAQ



SNT API

The full up-to-date SNT API can be found at http://fiji.github.io/SNT/

Script Templates

SNT comes pre-packaged with a variety of script templates demonstrating various analysis, tracing, image processing and utility routines.

Analysis

Analysis_Demo.py A Jython demo of how SNT can analyze neuronal reconstructions fetched from online databases such as MouseLight, NeuroMorpho or FlyCircuit. This demo requires internet connection and assumes you've already ran Analysis_Demo_(Interactive).py

Analysis_Demo_(Interactive).py Exemplifies how to programmatically interact with a running instance of SNT to analyze traced data. Because of all the GUI updates, this approach is _significantly slower_ than analyzing reconstructions directly (see Analysis_Demo.py for comparison)

Download_ML_Data.groovy Exemplifies how to programmatically retrieve data from MouseLight's database at ml-neuronbrowser.janelia.org: It iterates through all the neurons in the server and downloads data (both JSON and SWC formats) for cells with soma associated with the specified Allen Reference Atlas (ARA) compartment. Downloaded files will contain all metadata associated with the cell (i.e., labeling used, strain, etc.) For advanced queries, have a look at MouseLightQuerier.

Get_Branch_Points_in_Brain_Compartment.groovy Exemplifies how to extract morphometric properties of a MouseLight cell associated with a specific brain region/neuropil compartment. Requires internet connection.

Graph_Analysis.py Demonstrates how to handle neurons as graph structures (graph theory) in which nodes connected by edges define the morphology of the neuron. SNT represents neurons as directed graphs (assuming the root -typically the soma- as origin) and allows data be processed using the powerful jgrapht library. In this demo, the graph diameter (i.e., the length of the longest shortest path or the longest graph geodesic) of a cellular compartment is computed for a neuron fetched from the MouseLight database.

Reconstruction_Viewer_Demo.py Exemplifies how to render reconstructions and neuropil annotations in a stand-alone Reconstruction Viewer. Requires internet connection.

Render_Cell_Collection.groovy Exemplifies how to quickly render large collections of cells from a directory of files (900 MouseLight reconstructions rendered in ~30s on a 4 core i7 (ubuntu 18.10) without a discrete graphics card).

Render_Cell_Collection_(MultiPanel_Figure).groovy Exemplifies how to generate a publication-quality multi-panel figure in which multiple reconstructions are sorted and color-coded by a specified morphometric trait (cable length in this example). The script prompts for a directory containing the reconstruction files to be analyzed. If no directory is specified, the script will parse a collection of dendritic arbors from the MouseLight database instead.

SciView_Demo.groovy Exemplifies how bridge SNT with SciView.

Sholl

Extensive_Sholl_Stats.groovy Exemplifies how to perform linear and polynomial regression on tabular Sholl data.

Boilerplate

This menu hosts script templates containing extensible boilerplate code in several programming languages. The most essential imports and script parameters are included to facilitate rapid development.

BSH.bsh A boilerplate script template in the BeanShell programming language.

GVY.groovy A boilerplate script template in the Apache Groovy programming language.

PY.py - A boilerplate script template in the Python programming language.

Tracing

Scripted_Tracing_Demo.py Exemplifies how to programmatically perform A* tracing between two points without GUI interaction, which allows for automated tracing of relatively simple structures (e.g., neurospheres neurites, microtubule bundles, etc). In this demo, points are retrieved from the SWC file of SNT's "demo tree", effectively recreating the initial SWC data.

Scripted_Tracing_Demo_(Interactive).py Exemplifies how to programmatically interact with a running instance of SNT to perform auto-tracing tasks.

Utilities

Convert_Traces_to_SWC.py Converts all .traces files in a directory into SWC.

Filter_Multiple_Images.py Bulk filtering of image files using Frangi Vesselness.

Measure_Multiple_Files.py Bulk measurements of reconstruction files using SNT.

Take_Snapshot.py Displays a WYSIWYG image of a tracing canvas. Exemplifies how to script SNT using SNTService.

Python Notebooks

Direct access to the SNT API from the Python programming language is made possible through the pyimagej module. This enables full integration between SNT and any library in the Python ecosystem.

Installing pyimagej

Follow the instructions given here

Getting Started

To initialize Fiji from Python with GUI capabilities:

import imagej
ij = imagej.init('sc.fiji:fiji', headless=False)

Then, use pyjnius (bundled with pyimagej) to import the SNT (Java) classes you need. For example, to download a neuron reconstruction from the MouseLight database and calculate summary statistics on it, you would import the MouseLightLoader and TreeStatistics classes:

from jnius import autoclass
MouseLightLoader = autoclass('tracing.io.MouseLightLoader')
TreeStatistics   = autoclass('tracing.analysis.TreeStatistics')

Now you can access all the attributes and methods these classes offer. Let's get a summary of the inter-node distances for a specific mouse cortical motor neuron (ID = "AA0100" in the MouseLight database).

def run():
    loader = MouseLightLoader("AA0100")
    if not loader.isDatabaseAvailable():
        print("Could not connect to ML database", "Error")
        return
    if not loader.idExists():
        print("Somehow the specified id was not found", "Error")
        return

    a_tree = loader.getTree('axon', None) # compartment, color
    s_stats = TreeStatistics(a_tree)
    metric = TreeStatistics.INTER_NODE_DISTANCE
    summary_stats = s_stats.getSummaryStats(metric)
    s_stats.getHistogram(metric).show()
    print("The average inter-node distance is %d" % summary_stats.getMean())

Advanced Examples

The Notebooks directory in the SNT GitHub repository contains examples which are executable on Binder. For example, to run the convex_hull notebook via mybinder.org, follow this link: convex_hull.ipynb

Packaging Scripts with SNT

TBD