Source code for hippounit.capabilities.cap_ProvidesRecordingLocationsOnTrunk


import sciunit
from sciunit import Capability
import multiprocessing


[docs]class ProvidesRecordingLocationsOnTrunk(sciunit.Capability): """ Indicates that the model provides a list of locations on the trunk (primary apical dendrite) to be tested"""
[docs] def find_trunk_locations(self,distances, tolerance, trunk_origin): """ This function must be implemented by the model. Must return two dictionaries (1) keys: distances, values: corresponding locations on the trunk (primary apical dendrite) in list at 50, 105, 250, 350 um distances from the soma The form must be: dend_locations = (dist1, ['trunk_segment1_1',location],['trunk_segment1_2',location]), (dist2, ['trunk_segment2',location]), (dist3, ['trunk_segment3',location]), (dist4, ['trunk_segment4',location]) E.g. : OrderedDict([(50, ['dendrite[0]', 0.6956994222486329]), (150, ['dendrite[81]', 0.5557523508251703]), (250, ['dendrite[109]', 0.33250043844278565])]) (2) keys: locations on the trunk, values: its actual distance from the soma. The form must be: actial distances = (('trunk_segment1_1',location), distance), (('trunk_segment2',location), distance), (['trunk_segment3',location], distance) E.g. : {('dendrite[95]', 0.5): 191.4537639215934, ('dendrite[91]', 0.5): 186.10161451767556} Parameters ---------- distances : list list of dinstances from the soma to be considered. Eg.: [50,150,250,350] tolerance : int number indicating the range around the distance values in the distances list to be considered. If tolerance = 20, first distance range will be 50+-20 um. trunk_origin : list first element : name of the section from which the trunk originates, second element : position on section (E.g. ['soma[5]', 1]). If not set by the user, the end of the default soma section is used. """ raise NotImplementedError()
[docs] def find_trunk_locations_multiproc(self, distances, tolerance, trunk_origin): """ This function is called by the test and calls the find_trunk_locations() function. Used to keep all NEURON related tasks in independent processes, to avoid errors like 'template can not be redefined' """ pool_trunk = multiprocessing.Pool(1, maxtasksperchild = 1) self.dend_locations, actual_distances = pool_trunk.apply(self.find_trunk_locations, (distances, tolerance, trunk_origin,)) # this way model.dend_loc gets the values pool_trunk.terminate() pool_trunk.join() del pool_trunk return self.dend_locations, actual_distances