Mercurial > repos > iuc > imagej2_analyze_skeleton
changeset 2:9631aab7da53 draft
planemo upload commit 18df9e67efd4adafcde4eb9b62cd815e4afe9733-dirty
| author | iuc |
|---|---|
| date | Wed, 26 Aug 2015 14:36:10 -0400 |
| parents | dd8e4e000d2f |
| children | 20555566d6ad |
| files | imagej2_analyze_skeleton.py imagej2_analyze_skeleton.xml imagej2_base_utils.py imagej2_macros.xml jython_script.py jython_utils.py test-data/detailed.tabular test-data/shortest_branch_all_yes.tabular test-data/shortest_branch_basic.tabular |
| diffstat | 9 files changed, 471 insertions(+), 176 deletions(-) [+] |
line wrap: on
line diff
--- a/imagej2_analyze_skeleton.py Tue Aug 04 13:19:34 2015 -0400 +++ b/imagej2_analyze_skeleton.py Wed Aug 26 14:36:10 2015 -0400 @@ -9,13 +9,12 @@ parser = argparse.ArgumentParser() parser.add_argument( '--input', dest='input', help='Path to the input file' ) parser.add_argument( '--input_datatype', dest='input_datatype', help='Datatype of the input image' ) +parser.add_argument( '--black_background', dest='black_background', help='Black background' ) parser.add_argument( '--prune_cycle_method', dest='prune_cycle_method', default='none', help='Prune cycle method' ) parser.add_argument( '--prune_ends', dest='prune_ends', default='no', help='Prune ends' ) parser.add_argument( '--calculate_largest_shortest_path', dest='calculate_largest_shortest_path', default='no', help='Calculate largest shortest path' ) parser.add_argument( '--show_detailed_info', dest='show_detailed_info', default='no', help='Show detailed info' ) parser.add_argument( '--jython_script', dest='jython_script', help='Path to the Jython script' ) -parser.add_argument( '--max_heap_size_type', dest='max_heap_size_type', help='Type (default or megabytes) of max_heap_size value' ) -parser.add_argument( '--max_heap_size', dest='max_heap_size', help='Maximum size of the memory allocation pool used by the JVM.' ) parser.add_argument( '--output', dest='output', help='Path to the output file' ) args = parser.parse_args() @@ -24,8 +23,6 @@ # work for some features. The following creates a symlink with an appropriate file # extension that points to the Galaxy dataset. This symlink is used by ImageJ. tmp_input_path = imagej2_base_utils.get_input_image_path( tmp_dir, args.input, args.input_datatype ) -# Set the size of the memory allocation pool used by the JVM. -memory_size = imagej2_base_utils.get_max_heap_size_value( args.max_heap_size_type, args.max_heap_size ) # Define command response buffers. tmp_out = tempfile.NamedTemporaryFile().name @@ -36,11 +33,12 @@ error_log = tempfile.NamedTemporaryFile( delete=False ).name # Build the command line. -cmd = imagej2_base_utils.get_base_command_imagej2( memory_size, jython_script=args.jython_script ) +cmd = imagej2_base_utils.get_base_command_imagej2( None, jython_script=args.jython_script ) if cmd is None: imagej2_base_utils.stop_err( "ImageJ not found!" ) cmd += ' %s' % error_log cmd += ' %s' % tmp_input_path +cmd += ' %s' % args.black_background cmd += ' %s' % args.prune_cycle_method cmd += ' %s' % args.prune_ends cmd += ' %s' % args.calculate_largest_shortest_path
--- a/imagej2_analyze_skeleton.xml Tue Aug 04 13:19:34 2015 -0400 +++ b/imagej2_analyze_skeleton.xml Wed Aug 26 14:36:10 2015 -0400 @@ -1,26 +1,27 @@ <?xml version='1.0' encoding='UTF-8'?> -<tool id="imagej2_analyze_skeleton" name="Analyze skeleton" version="1.0.0"> +<tool id="imagej2_analyze_skeleton" name="Analyze skeleton" version="@WRAPPER_VERSION@.0"> <description>with ImageJ2</description> <macros> <import>imagej2_macros.xml</import> </macros> - <expand macro="fiji_20141125_requirements" /> + <expand macro="fiji_requirements" /> <command> <![CDATA[ python $__tool_directory__/imagej2_analyze_skeleton.py --input "$input" --input_datatype $input.ext + --black_background $black_background --prune_cycle_method $prune_cycle_method --prune_ends $prune_ends --calculate_largest_shortest_path $calculate_largest_shortest_path - --show_detailed_info $show_detailed_info - @max_heap_size_args@ + ##TODO: seel below--show_detailed_info $show_detailed_info --jython_script $__tool_directory__/jython_script.py --output "$output" ]]> </command> <inputs> <param format="bmp,eps,gif,jpg,pcx,pgm,png,psd,tiff" name="input" type="data" label="Select grayscale image"/> + <expand macro="black_background_param" /> <param name="prune_cycle_method" type="select" label="Prune cycle method"> <option value="none" selected="True">None</option> <option value="shortest_branch">Shortest branch</option> @@ -35,11 +36,13 @@ <option value="no" selected="True">No</option> <option value="yes">Yes</option> </param> + <!-- TODO: Uncomment this option when the tool has been enhanced to use the + future "Display labeled skeletons" option. See http://fiji.sc/AnalyzeSkeleton. <param name="show_detailed_info" type="select" label="Show detailed info"> <option value="no" selected="True">No</option> <option value="yes">Yes</option> </param> - <expand macro="max_heap_size_type_conditional" /> + --> </inputs> <outputs> <data name="output" format="tabular" label="${tool.name} on ${on_string}" /> @@ -63,9 +66,12 @@ <output name="output" file="largest_shortest_path_basic.tabular" ftype="tabular" /> </test> <test> + <!-- TODO: Change this test and the following test to set "show_detailed_info" + to "yes" when the tool has been enhanced to use the future "Display labeled skeletons" + option. See http://fiji.sc/AnalyzeSkeleton. --> <param name="input" value="skeletonized_blobs.gif" /> <param name="input_datatype" value="gif" /> - <param name="show_detailed_info" value="yes" /> + <!-- <param name="show_detailed_info" value="yes" /> --> <output name="output" file="detailed.tabular" ftype="tabular" /> </test> <test> @@ -73,7 +79,7 @@ <param name="input_datatype" value="jpg" /> <param name="prune_cycle_method" value="shortest_branch" /> <param name="calculate_largest_shortest_path" value="yes" /> - <param name="show_detailed_info" value="yes" /> + <!-- <param name="show_detailed_info" value="yes" /> --> <output name="output" file="shortest_branch_all_yes.tabular" ftype="tabular" /> </test> </tests> @@ -112,7 +118,6 @@ - **Prune cycle method**: prune the possible loops in the skeleton. - **Prune ends**: prunes any branch that ends in an end-point. - **Calculate largest shortest path**: calculate the largest shortest path of each skeleton using the APSP (all pairs shortest path). -- **Show detailed info**: produces information about the branches of each skeleton in the image. ]]> </help> <citations>
--- a/imagej2_base_utils.py Tue Aug 04 13:19:34 2015 -0400 +++ b/imagej2_base_utils.py Wed Aug 26 14:36:10 2015 -0400 @@ -86,21 +86,6 @@ os.symlink( input_file, image_path ) return image_path -def get_max_heap_size_value( max_heap_size_type, max_heap_size ): - """ - Return a string that can be used by the javabridge to set the size - of the memory allocation pool used by the JVM. The value must be - determined to be a multiple of 1024 or it will be ignored. - """ - if max_heap_size_type == 'default': - return None - if max_heap_size_type == 'megabytes': - if int( max_heap_size ) % 1024 not in [ 0, 256, 512 ]: - return None - return '%sm' % str( max_heap_size ) - if max_heap_size_type == 'gigabytes': - return '%sg' % str( max_heap_size ) - def get_platform_info_dict(): '''Return a dict with information about the current platform.''' platform_dict = {} @@ -172,6 +157,7 @@ return ' %.1f' % val elif val_type == 'int': return ' %d' % val + return ' %s' % val def stop_err( msg ): sys.stderr.write( msg )
--- a/imagej2_macros.xml Tue Aug 04 13:19:34 2015 -0400 +++ b/imagej2_macros.xml Wed Aug 26 14:36:10 2015 -0400 @@ -1,11 +1,12 @@ <?xml version='1.0' encoding='UTF-8'?> <macros> - <xml name="fiji_20141125_requirements"> + <token name="@WRAPPER_VERSION@">1.0</token> + <xml name="fiji_requirements"> <requirements> <requirement type="package" version="20141125">fiji</requirement> </requirements> </xml> - <xml name="python_bioformats_104_requirements"> + <xml name="python_bioformats_requirements"> <requirements> <requirement type="package" version="20141125">fiji</requirement> <requirement type="package" version="1.0.11">javabridge</requirement> @@ -53,33 +54,27 @@ <option value="yes">Yes</option> </param> </xml> + <xml name="black_background_param"> + <param name="black_background" type="select" label="Black background" help="If Yes, the background is black and the foreground is white (no implies the opposite)."> + <option value="no" selected="True">No</option> + <option value="yes">Yes</option> + </param> + </xml> <token name="@make_binary_args@"> --iterations $iterations --count $count --black_background $black_background --pad_edges_when_eroding $pad_edges_when_eroding </token> - <xml name="max_heap_size_type_conditional"> - <conditional name="set_max_heap_size"> - <param name="max_heap_size_type" type="select" label="Maximum size of the memory allocation pool used by the JVM" help="This value must be a multiple of 1024 or it will be ignored and the system default will be used."> - <option value="default" selected="True">Do not set</option> - <option value="megabytes">Set in megabytes</option> - <option value="gigabytes">Set in gigabytes</option> - </param> - <when value="default" > - <param name="max_heap_size" type="integer" value="0" hidden="true" label="Do not set" help="Use system default"/> - </when> - <when value="megabytes"> - <param name="max_heap_size" type="integer" value="512" min="256" label="Maximum size, in megabytes, of the memory allocation pool" help="Examples: 256, 512, etc."/> - </when> - <when value="gigabytes"> - <param name="max_heap_size" type="integer" value="1" min="1" label="Maximum size, in gigabytes, of the memory allocation pool" help="Examples: 1, 2, etc."/> - </when> - </conditional> - </xml> - <token name="@max_heap_size_args@"> - --max_heap_size_type $set_max_heap_size.max_heap_size_type - --max_heap_size $set_max_heap_size.max_heap_size + <token name="@requires_binary_input@"> +.. class:: warningmark + +This tool works on binary images, so other image types will automatically be converted to binary +before they are analyzed. This step is performed using the ImageJ2 **Make Binary** command with +the following settings: **Iterations:** 1, **Count:** 1, **Pad edges when eroding:** No. The tool +allows you to choose the **Black background** setting. If these settings are not appropriate, +first manually convert the image to binary using the **Convert to binary (black and white) with ImageJ2** +tool, which allows you to change them. </token> <xml name="image_datatypes"> <option value="bmp">bmp</option>
--- a/jython_script.py Tue Aug 04 13:19:34 2015 -0400 +++ b/jython_script.py Wed Aug 26 14:36:10 2015 -0400 @@ -2,7 +2,6 @@ import math import sys from ij import IJ -from ij import ImagePlus from skeleton_analysis import AnalyzeSkeleton_ BASIC_NAMES = [ 'Branches', 'Junctions', 'End-point Voxels', @@ -10,10 +9,6 @@ 'Triple Points', 'Quadruple Points', 'Maximum Branch Length' ] DETAIL_NAMES = [ 'Skeleton ID', 'Branch length', 'V1 x', 'V1 y', 'V1 z', 'V2 x', 'V2 y', 'V2 z', 'Euclidean distance' ] -VALID_IMAGE_TYPES = [ ImagePlus.GRAY8 ] - -def asbool( val ): - return val == 'yes' def get_euclidean_distance( vertex1, vertex2 ): x1, y1, z1 = get_points( vertex1 ) @@ -55,7 +50,7 @@ outf.write( '%d%s' % ( result.getJunctions()[ index ], sep ) ) outf.write( '%d%s' % ( result.getEndPoints()[ index ], sep ) ) outf.write( '%d%s' % ( result.getJunctionVoxels()[ index ], sep ) ) - outf.write( '%d%s' % ( len( result.getListOfSlabVoxels() ), sep ) ) + outf.write( '%d%s' % ( result.getSlabs()[ index ], sep ) ) outf.write( '%.3f%s' % ( result.getAverageBranchLength()[ index ], sep ) ) outf.write( '%d%s' % ( result.getTriples()[ index ], sep ) ) outf.write( '%d%s' % ( result.getQuadruples()[ index ], sep ) ) @@ -101,31 +96,34 @@ # Fiji Jython interpreter implements Python 2.5 which does not # provide support for argparse. -error_log = sys.argv[ -7 ] -input = sys.argv[ -6 ] +error_log = sys.argv[ -8 ] +input = sys.argv[ -7 ] +black_background = jython_utils.asbool( sys.argv[ -6 ] ) prune_cycle_method = sys.argv[ -5 ] -prune_ends = asbool( sys.argv[ -4 ] ) -calculate_largest_shortest_path = asbool( sys.argv[ -3 ] ) +prune_ends = jython_utils.asbool( sys.argv[ -4 ] ) +calculate_largest_shortest_path = jython_utils.asbool( sys.argv[ -3 ] ) if calculate_largest_shortest_path: BASIC_NAMES.extend( [ 'Longest Shortest Path', 'spx', 'spy', 'spz' ] ) DETAIL_NAMES.extend( [ ' ', ' ', ' ', ' ' ] ) -show_detailed_info = asbool( sys.argv[ -2 ] ) +show_detailed_info = jython_utils.asbool( sys.argv[ -2 ] ) output = sys.argv[ -1 ] # Open the input image file. input_image_plus = IJ.openImage( input ) -bit_depth = input_image_plus.getBitDepth() -image_type = input_image_plus.getType() # Create a copy of the image. -input_image_plus_copy = input_image_plus.createImagePlus() -image_processor_copy = input_image_plus.getProcessor().duplicate() -input_image_plus_copy.setProcessor( "iCopy", image_processor_copy ) +input_image_plus_copy = input_image_plus.duplicate() +image_processor_copy = input_image_plus_copy.getProcessor() try: - if image_type not in VALID_IMAGE_TYPES: - # Convert the image to binary grayscale. - IJ.run( input_image_plus_copy, "Make Binary","iterations=1 count=1 edm=Overwrite do=Nothing" ) + # Set binary options. + options = jython_utils.get_binary_options( black_background=black_background ) + IJ.run( input_image_plus_copy, "Options...", options ) + + # Convert image to binary if necessary. + if not image_processor_copy.isBinary(): + IJ.run( input_image_plus_copy, "Make Binary", "" ) + # Run AnalyzeSkeleton analyze_skeleton = AnalyzeSkeleton_() analyze_skeleton.setup( "", input_image_plus_copy )
--- a/jython_utils.py Tue Aug 04 13:19:34 2015 -0400 +++ b/jython_utils.py Wed Aug 26 14:36:10 2015 -0400 @@ -4,6 +4,9 @@ IMAGE_PLUS_IMAGE_TYPE_FIELD_VALUES = { '0':'GRAY8', '1':'GRAY16', '2':'GRAY32', '3':'COLOR_256', '4':'COLOR_RGB' } +def asbool( val ): + return str( val ).lower() in [ 'yes', 'true' ] + def convert_before_saving_as_tiff( image_plus ): # The bUnwarpJ plug-in produces TIFF image stacks consisting of 3 # slices which can be viewed in ImageJ. The 3 slices are: 1) the @@ -26,6 +29,14 @@ IJ.saveAs( image_plus, 'png', tmp_out_png_path ) return IJ.openImage( tmp_out_png_path ) +def get_binary_options( black_background, iterations=1, count=1, pad_edges_when_eroding='no' ): + options = [ 'edm=Overwrite', 'iterations=%d' % iterations, 'count=%d' % count ] + if asbool( pad_edges_when_eroding ): + options.append( 'pad' ) + if asbool( black_background ): + options.append( "black" ) + return " ".join( options ) + def get_display_image_type( image_type ): return IMAGE_PLUS_IMAGE_TYPE_FIELD_VALUES.get( str( image_type ), None )
--- a/test-data/detailed.tabular Tue Aug 04 13:19:34 2015 -0400 +++ b/test-data/detailed.tabular Wed Aug 26 14:36:10 2015 -0400 @@ -1,99 +1,2 @@ # Branches Junctions End-point Voxels Junction Voxels Slab Voxels Average branch length Triple Points Quadruple Points Maximum Branch Length 96 60 7 120 1246 17.344 56 3 70.882 -# Skeleton ID Branch length V1 x V1 y V1 z V2 x V2 y V2 z Euclidean distance -1 70.882 23 76 0 26 26 0 50.090 -1 68.054 23 76 0 70 74 0 47.043 -1 62.225 27 122 0 71 78 0 62.225 -1 49.657 23 76 0 27 122 0 46.174 -1 44.243 26 26 0 29 69 0 43.105 -1 43.941 41 69 0 65 35 0 41.617 -1 41.113 42 20 0 74 10 0 33.526 -1 38.284 65 35 0 95 55 0 36.056 -1 36.385 126 88 0 134 116 0 29.120 -1 34.385 124 46 0 133 75 0 30.364 -1 33.456 45 111 0 71 93 0 31.623 -1 33.304 102 47 0 121 71 0 30.610 -1 33.213 124 46 0 137 19 0 29.967 -1 33.042 61 134 0 78 108 0 31.064 -1 32.870 70 74 0 95 55 0 31.401 -1 32.527 79 110 0 102 133 0 32.527 -1 31.071 41 69 0 70 74 0 29.428 -1 30.698 92 136 0 113 128 0 22.472 -1 29.698 79 30 0 100 51 0 29.698 -1 29.284 43 132 0 45 111 0 21.095 -1 28.799 99 11 0 122 11 0 23.000 -1 27.870 112 45 0 131 25 0 27.586 -1 25.000 82 102 0 107 102 0 25.000 -1 22.485 42 20 0 62 26 0 20.881 -1 22.071 109 71 0 112 91 0 20.224 -1 21.314 61 134 0 78 127 0 18.385 -1 20.556 98 55 0 109 71 0 19.416 -1 19.657 135 137 0 138 122 0 15.297 -1 19.657 43 132 0 61 134 0 18.111 -1 18.485 26 26 0 42 20 0 17.088 -1 17.971 32 123 0 45 111 0 17.692 -1 17.971 128 11 0 141 1 0 16.401 -1 17.728 78 127 0 92 136 0 16.643 -1 17.414 78 127 0 79 110 0 17.029 -1 16.971 121 71 0 133 75 0 12.649 -1 16.142 105 34 0 116 23 0 15.556 -1 16.142 123 137 0 135 137 0 12.000 -1 16.142 133 13 0 141 1 0 14.422 -1 15.828 71 78 0 71 93 0 15.000 -1 15.828 74 17 0 89 19 0 15.133 -1 15.828 116 23 0 131 25 0 15.133 -1 15.728 62 26 0 74 17 0 15.000 -1 15.556 85 6 0 74 17 0 15.556 -1 15.556 94 23 0 105 34 0 15.556 -1 15.556 130 12 0 141 1 0 15.556 -1 15.414 111 125 0 112 110 0 15.033 -1 15.314 71 93 0 82 102 0 14.213 -1 15.243 112 91 0 126 88 0 14.318 -1 15.142 74 10 0 85 2 0 13.601 -1 15.142 79 30 0 89 19 0 14.866 -1 14.728 32 123 0 43 132 0 14.213 -1 14.728 88 2 0 99 11 0 14.213 -1 14.657 94 23 0 99 11 0 13.000 -1 14.485 116 23 0 122 11 0 13.416 -1 14.243 123 137 0 135 137 0 12.000 -1 14.142 131 127 0 121 117 0 14.142 -1 13.728 113 128 0 123 137 0 13.454 -1 13.728 121 71 0 131 80 0 13.454 -1 13.414 121 117 0 134 116 0 13.038 -1 13.071 107 102 0 112 91 0 12.083 -1 12.828 29 69 0 41 69 0 12.000 -1 12.414 112 45 0 124 46 0 12.042 -1 12.314 102 133 0 111 125 0 12.042 -1 12.000 109 71 0 121 71 0 12.000 -1 11.899 112 110 0 121 117 0 11.402 -1 11.243 92 136 0 102 133 0 10.440 -1 10.243 62 26 0 65 35 0 9.487 -1 10.071 107 102 0 112 110 0 9.434 -1 10.071 126 88 0 131 80 0 9.434 -1 9.899 105 40 0 112 45 0 8.602 -1 9.485 23 76 0 29 69 0 9.220 -1 9.071 102 47 0 105 40 0 7.616 -1 8.485 131 25 0 137 19 0 8.485 -1 8.243 133 13 0 137 19 0 7.211 -1 7.657 78 108 0 82 102 0 7.211 -1 7.657 134 116 0 138 122 0 7.211 -1 7.071 133 127 0 138 122 0 7.071 -1 6.657 89 19 0 94 23 0 6.403 -1 6.414 74 10 0 74 17 0 7.000 -1 6.000 105 34 0 105 40 0 6.000 -1 6.000 122 11 0 128 11 0 6.000 -1 5.828 131 80 0 133 75 0 5.385 -1 5.414 27 122 0 32 123 0 5.099 -1 4.828 98 55 0 100 51 0 4.472 -1 4.828 100 51 0 102 47 0 4.472 -1 4.414 70 74 0 71 78 0 4.123 -1 4.243 124 70 0 121 71 0 3.162 -1 3.828 85 2 0 88 2 0 3.000 -1 3.828 111 125 0 113 128 0 3.606 -1 3.414 130 12 0 133 13 0 3.162 -1 3.000 95 55 0 98 55 0 3.000 -1 2.414 78 108 0 79 110 0 2.236 -1 2.414 128 11 0 130 12 0 2.236 -1 1.414 87 3 0 88 2 0 1.414 -1 1.000 78 30 0 79 30 0 1.000 -1 1.000 85 3 0 85 2 0 1.000
--- a/test-data/shortest_branch_all_yes.tabular Tue Aug 04 13:19:34 2015 -0400 +++ b/test-data/shortest_branch_all_yes.tabular Wed Aug 26 14:36:10 2015 -0400 @@ -1,9 +1,205 @@ # Branches Junctions End-point Voxels Junction Voxels Slab Voxels Average branch length Triple Points Quadruple Points Maximum Branch Length Longest Shortest Path spx spy spz -6 1 1 61790 5 96.506 0 0 214.378 296.418 0 0 0 -# Skeleton ID Branch length V1 x V1 y V1 z V2 x V2 y V2 z Euclidean distance -1 420.417 0 0 0 0 0 0 0.000 -1 296.418 0 0 0 0 0 0 0.000 -1 215.853 0 0 0 0 0 0 0.000 -1 214.417 0 0 0 0 0 0 0.000 -1 214.378 78 199 0 0 0 0 213.740 -1 152.418 0 0 0 0 0 0 0.000 +1 0 2 0 1 2.414 0 0 2.414 2.414 0 60 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 3 91 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 3 91 0 +143 75 40 144 918 9.176 61 9 96.113 277.930 160 0 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 160 0 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 160 0 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 160 0 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 7 64 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 7 64 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 7 64 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 7 64 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 11 80 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 14 66 0 +1 0 2 0 3 4.000 0 0 4.000 4.000 24 84 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 26 93 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 26 93 0 +1 0 2 0 3 4.414 0 0 4.414 4.414 35 92 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 35 92 0 +1 0 2 0 3 5.657 0 0 5.657 5.657 46 114 0 +5 2 4 2 97 23.182 2 0 58.385 100.770 91 174 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 91 174 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 91 174 0 +1 0 2 0 4 5.828 0 0 5.828 5.828 84 44 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 84 44 0 +1 0 2 0 4 5.828 0 0 5.828 5.828 93 52 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 93 52 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 104 14 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 104 14 0 +262 117 105 266 957 5.803 65 37 34.142 352.779 280 50 0 +96 43 31 104 373 6.437 25 11 34.142 212.675 191 111 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 191 111 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 191 111 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 134 53 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 134 53 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 134 53 0 +22 11 10 24 151 9.834 10 1 20.728 116.633 206 124 0 +5 2 4 2 44 12.285 2 0 26.799 52.184 175 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 175 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 175 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 175 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 175 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 175 175 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 168 58 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 168 58 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 172 182 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 174 0 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 175 169 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 176 181 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 176 181 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 178 0 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 178 175 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 178 175 0 +4 1 4 4 6 4.282 0 1 5.650 10.479 182 194 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 182 194 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 182 194 0 +1 0 2 0 2 3.000 0 0 3.000 3.000 182 0 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 182 0 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 189 53 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 189 53 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 191 3 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 190 49 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 192 64 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 192 64 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 194 102 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 195 68 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 195 68 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 195 68 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 204 70 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 204 70 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 204 70 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 204 70 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 204 70 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 210 83 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 210 83 0 +1 0 2 0 6 8.657 0 0 8.657 8.657 211 69 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 211 69 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 211 69 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 214 65 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 214 65 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 214 65 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 214 65 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 214 65 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 214 65 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 217 91 0 +1 0 2 0 2 3.414 0 0 3.414 3.414 220 7 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 223 94 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 224 55 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 224 55 0 +3 1 3 1 8 4.219 1 0 6.414 9.828 233 11 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 233 11 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 233 11 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 233 11 0 +3 1 3 1 3 3.162 1 0 4.243 7.071 233 57 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 233 57 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 234 5 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 234 5 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 234 5 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 236 111 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 239 55 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 239 111 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 239 111 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 239 111 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 239 111 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 244 8 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 245 108 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 246 27 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 248 107 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 250 110 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 250 110 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 252 31 0 +1 0 2 0 2 3.000 0 0 3.000 3.000 253 34 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 253 34 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 253 68 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 253 71 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 253 71 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 253 71 0 +1 0 2 0 6 7.414 0 0 7.414 7.414 259 71 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 260 60 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 261 67 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 261 67 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 261 67 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 261 67 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 261 67 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 272 64 0 +1 0 2 0 11 13.243 0 0 13.243 13.243 274 18 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 276 47 0 +1 0 2 0 3 4.828 0 0 4.828 4.828 276 61 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 278 52 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 279 14 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 280 63 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 280 63 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 280 63 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 280 63 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 281 52 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 281 52 0 +1 0 2 0 2 3.000 0 0 3.000 3.000 283 47 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 282 54 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 282 77 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 283 10 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 284 66 0 +3 1 3 3 12 6.495 1 0 7.828 14.657 296 56 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 296 56 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 285 17 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 286 29 0 +1 0 2 0 2 3.414 0 0 3.414 3.414 285 112 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 285 112 0 +1 0 2 0 3 4.414 0 0 4.414 4.414 287 84 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 288 37 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 288 37 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 288 122 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 288 122 0 +13 6 8 10 55 5.956 6 0 20.899 68.184 310 78 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 310 78 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 310 78 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 288 91 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 292 46 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 292 46 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 292 70 0 +1 0 2 0 7 8.828 0 0 8.828 8.828 293 121 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 293 121 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 293 121 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 293 121 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 296 144 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 297 27 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 297 27 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 297 157 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 297 157 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 300 88 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 300 98 0 +5 1 5 3 15 5.994 0 0 12.243 18.899 312 82 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 303 36 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 302 104 0 +1 0 2 0 2 3.000 0 0 3.000 3.000 304 75 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 75 0 +1 0 2 0 1 2.414 0 0 2.414 2.414 304 124 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 124 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 304 73 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 73 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 73 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 73 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 73 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 304 73 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 307 89 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 307 89 0 +1 0 2 0 5 6.000 0 0 6.000 6.000 310 94 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 310 94 0 +1 0 2 0 4 6.243 0 0 6.243 6.243 311 47 0 +1 0 2 0 8 10.657 0 0 10.657 10.657 309 55 0 +1 0 2 0 4 5.000 0 0 5.000 5.000 311 57 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 311 57 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 311 57 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 312 27 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 312 55 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 312 84 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 312 84 0 +1 0 2 0 0 1.414 0 0 1.414 1.414 315 10 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 315 30 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 315 79 0 +1 0 2 0 2 3.000 0 0 3.000 3.000 317 27 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 316 55 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 317 63 0 +0 0 1 0 0 0.000 0 0 0.000 0.000 317 63 0 +1 0 2 0 1 2.000 0 0 2.000 2.000 318 83 0 +1 0 2 0 0 1.000 0 0 1.000 1.000 318 58 0
--- a/test-data/shortest_branch_basic.tabular Tue Aug 04 13:19:34 2015 -0400 +++ b/test-data/shortest_branch_basic.tabular Wed Aug 26 14:36:10 2015 -0400 @@ -1,2 +1,205 @@ # Branches Junctions End-point Voxels Junction Voxels Slab Voxels Average branch length Triple Points Quadruple Points Maximum Branch Length -6 1 1 61790 5 96.506 0 0 214.378 +1 0 2 0 1 2.414 0 0 2.414 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +143 75 40 144 918 9.176 61 9 96.113 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.414 0 0 1.414 +1 0 2 0 3 4.000 0 0 4.000 +1 0 2 0 1 2.000 0 0 2.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 3 4.414 0 0 4.414 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 3 5.657 0 0 5.657 +5 2 4 2 97 23.182 2 0 58.385 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 4 5.828 0 0 5.828 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 4 5.828 0 0 5.828 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +262 117 105 266 957 5.803 65 37 34.142 +96 43 31 104 373 6.437 25 11 34.142 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +22 11 10 24 151 9.834 10 1 20.728 +5 2 4 2 44 12.285 2 0 26.799 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.414 0 0 1.414 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 0 1.414 0 0 1.414 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +4 1 4 4 6 4.282 0 1 5.650 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 2 3.000 0 0 3.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.414 0 0 2.414 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 1 2.414 0 0 2.414 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.414 0 0 1.414 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 6 8.657 0 0 8.657 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 2 3.414 0 0 3.414 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +3 1 3 1 8 4.219 1 0 6.414 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +3 1 3 1 3 3.162 1 0 4.243 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.000 0 0 2.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.414 0 0 2.414 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 2 3.000 0 0 3.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.414 0 0 1.414 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 6 7.414 0 0 7.414 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 11 13.243 0 0 13.243 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 3 4.828 0 0 4.828 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.000 0 0 2.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 2 3.000 0 0 3.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.000 0 0 2.000 +3 1 3 3 12 6.495 1 0 7.828 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.414 0 0 2.414 +1 0 2 0 2 3.414 0 0 3.414 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 3 4.414 0 0 4.414 +1 0 2 0 1 2.414 0 0 2.414 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.414 0 0 2.414 +0 0 1 0 0 0.000 0 0 0.000 +13 6 8 10 55 5.956 6 0 20.899 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.000 0 0 2.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 7 8.828 0 0 8.828 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 1 2.000 0 0 2.000 +5 1 5 3 15 5.994 0 0 12.243 +1 0 2 0 1 2.414 0 0 2.414 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 2 3.000 0 0 3.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.414 0 0 2.414 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 5 6.000 0 0 6.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 4 6.243 0 0 6.243 +1 0 2 0 8 10.657 0 0 10.657 +1 0 2 0 4 5.000 0 0 5.000 +0 0 1 0 0 0.000 0 0 0.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 0 1.414 0 0 1.414 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 2 3.000 0 0 3.000 +1 0 2 0 0 1.000 0 0 1.000 +1 0 2 0 1 2.000 0 0 2.000 +0 0 1 0 0 0.000 0 0 0.000 +1 0 2 0 1 2.000 0 0 2.000 +1 0 2 0 0 1.000 0 0 1.000
