Source code for neuron_morphology.marker
import csv
import neuron_morphology.constants as constants
from neuron_morphology.validation.result import InvalidMarkerFile
from neuron_morphology.validation.result import MarkerValidationError
[docs]class Marker(dict):
""" Simple dictionary class for handling reconstruction marker objects. """
def __init__(self, *args, **kwargs):
super(Marker, self).__init__(*args, **kwargs)
self['original_x'] = self['x']
self['original_y'] = self['y']
self['original_z'] = self['z']
# marker file x,y,z coordinates are offset by a single image-space pixel
self['x'] -= constants.SPACING[0]
self['y'] -= constants.SPACING[1]
self['z'] -= constants.SPACING[2]
[docs]def read_marker_file(file_name):
""" read in a marker file and return a list of dictionaries """
with open(file_name, 'r') as f:
rows = csv.DictReader((r for r in f if not r.startswith('#')), fieldnames=['x', 'y', 'z', 'radius', 'shape',
'name', 'comment', 'color_r',
'color_g', 'color_b'])
markers = []
for r in rows:
try:
markers.append(Marker({'x': float(r['x']),
'y': float(r['y']),
'z': float(r['z']),
'name': int(r['name'])}))
except ValueError:
message = "Failed to parse row. One of (x, y, z, name) is missing or invalid"
raise InvalidMarkerFile([MarkerValidationError(message, r, "Error")])
return markers