def generateRandomMorphology(): morphology = Morphology() p = Point3DWithDiam(x=0, y=0, z=0, diameter=soma_diam) d = Point3DWithDiam(x=soma_len, y=0, z=0, diameter=soma_diam) soma = Segment(proximal=p, distal=d, name='Soma', id=0) morphology.segments.append(soma) parent_seg = soma for dend_id in range(0, dend_num): p = Point3DWithDiam(x=d.x, y=d.y, z=d.z, diameter=dend_diam) d = Point3DWithDiam(x=p.x, y=p.y + dend_len, z=p.z, diameter=dend_diam) dend = Segment(proximal=p, distal=d, name='Dend_%i' % dend_id, id=1 + dend_id) dend.parent = SegmentParent(segments=parent_seg.id) parent_seg = dend morphology.segments.append(dend) morphology.id = "TestMorphology" return morphology
def generateRandomMorphology(): morphology = Morphology() p = Point3DWithDiam(x=0,y=0,z=0,diameter=soma_diam) d = Point3DWithDiam(x=soma_len,y=0,z=0,diameter=soma_diam) soma = Segment(proximal=p, distal=d, name = 'Soma', id = 0) morphology.segments.append(soma) parent_seg = soma for dend_id in range(0,dend_num): p = Point3DWithDiam(x=d.x,y=d.y,z=d.z,diameter=dend_diam) d = Point3DWithDiam(x=p.x,y=p.y+dend_len,z=p.z,diameter=dend_diam) dend = Segment(proximal=p, distal=d, name = 'Dend_%i'%dend_id, id = 1+dend_id) dend.parent = SegmentParent(segments=parent_seg.id) parent_seg = dend morphology.segments.append(dend) morphology.id = "TestMorphology" return morphology
def createMorphoMlFile(fileName, cell): ''' Convert to new neuroml structures and write ''' if not muscle_dict.has_key(cell.name): neuroMlwriter = NeuroMlWriter(fileName, cell.name) neuroMlwriter.addCell(cell) neuroMlwriter.writeDocumentToFile() return # # Incomplete code to use the neuroml interface to write the file, # used for muscles, doesn't produce good enough result on neurons yet. # seg0 = cell.segments[0].position soma = Segment(proximal=cvt_pt(seg0.proximal_point), distal=cvt_pt(seg0.distal_point)) soma.name = 'Soma' soma.id = 0 axon_segments = [] for seg1 in cell.segments[1:]: parent = SegmentParent(segments=seg1.parent) if seg1.position.proximal_point is None: p = None else: p = cvt_pt(seg1.position.proximal_point) axon_segment = Segment(proximal = p, distal = cvt_pt(seg1.position.distal_point), parent = parent) axon_segment.id = seg1.id axon_segment.name = seg1.name axon_segments.append(axon_segment) morphology = Morphology() morphology.segments.append(soma) morphology.segments += axon_segments morphology.id = 'morphology_' + cell.name nml_cell = neuroml_Cell() nml_cell.id = cell.name nml_cell.morphology = morphology doc = NeuroMLDocument() doc.cells.append(nml_cell) #addCell(doc, cell) doc.id = "TestNeuroMLDocument" writers.NeuroMLWriter.write(doc, "Output/%s.nml" % fileName)
def createMorphoMlFile(fileName, cell): ''' Convert to new neuroml structures and write ''' if not muscle_dict.has_key(cell.name): neuroMlwriter = NeuroMlWriter(fileName, cell.name) neuroMlwriter.addCell(cell) neuroMlwriter.writeDocumentToFile() return # # Incomplete code to use the neuroml interface to write the file, # used for muscles, doesn't produce good enough result on neurons yet. # seg0 = cell.segments[0].position soma = Segment(proximal=cvt_pt(seg0.proximal_point), distal=cvt_pt(seg0.distal_point)) soma.name = 'Soma' soma.id = 0 axon_segments = [] for seg1 in cell.segments[1:]: parent = SegmentParent(segments=seg1.parent) if seg1.position.proximal_point is None: p = None else: p = cvt_pt(seg1.position.proximal_point) axon_segment = Segment(proximal=p, distal=cvt_pt(seg1.position.distal_point), parent=parent) axon_segment.id = seg1.id axon_segment.name = seg1.name axon_segments.append(axon_segment) morphology = Morphology() morphology.segments.append(soma) morphology.segments += axon_segments morphology.id = 'morphology_' + cell.name nml_cell = neuroml_Cell() nml_cell.id = cell.name nml_cell.morphology = morphology doc = NeuroMLDocument() doc.cells.append(nml_cell) #addCell(doc, cell) doc.id = "TestNeuroMLDocument" writers.NeuroMLWriter.write(doc, "Output/%s.nml" % fileName)
def createMorphoMlFile(fileName, cell): ''' Convert to new neuroml structures and write ''' seg0 = cell.segments[0].position soma = Segment(proximal=cvt_pt(seg0.proximal_point), distal=cvt_pt(seg0.distal_point)) soma.name = 'Soma' soma.id = 0 axon_segments = [] for seg1 in cell.segments[1:]: parent = SegmentParent(segments=seg1.parent) if seg1.position.distal_point is None: p = None else: p = cvt_pt(seg1.position.distal_point) axon_segment = Segment(proximal = p, distal = cvt_pt(seg1.position.distal_point), parent = parent) axon_segment.id = seg1.id axon_segment.name = seg1.name axon_segments.append(axon_segment) morphology = Morphology() morphology.segments.append(soma) morphology.segments += axon_segments morphology.id = 'morphology_' + cell.name nml_cell = neuroml_Cell() nml_cell.id = cell.name nml_cell.morphology = morphology doc = NeuroMLDocument() #doc.name = "Test neuroML document" doc.cells.append(nml_cell) doc.id = fileName writers.NeuroMLWriter.write(doc, "Output/%s.nml" % fileName)
def createMorphoMlFile(fileName, cell): ''' Convert to new neuroml structures and write ''' seg0 = cell.segments[0].position soma = Segment(proximal=cvt_pt(seg0.proximal_point), distal=cvt_pt(seg0.distal_point)) soma.name = 'Soma' soma.id = 0 axon_segments = [] for seg1 in cell.segments[1:]: parent = SegmentParent(segments=seg1.parent) if seg1.position.distal_point is None: p = None else: p = cvt_pt(seg1.position.distal_point) axon_segment = Segment(proximal=p, distal=cvt_pt(seg1.position.distal_point), parent=parent) axon_segment.id = seg1.id axon_segment.name = seg1.name axon_segments.append(axon_segment) morphology = Morphology() morphology.segments.append(soma) morphology.segments += axon_segments morphology.id = 'morphology_' + cell.name nml_cell = neuroml_Cell() nml_cell.id = cell.name nml_cell.morphology = morphology doc = NeuroMLDocument() #doc.name = "Test neuroML document" doc.cells.append(nml_cell) doc.id = fileName writers.NeuroMLWriter.write(doc, "Output/%s.nml" % fileName)
def create_cell(cell_id): # type: (str) -> Cell """Create a NeuroML Cell. Initialises the cell with these properties assigning IDs where applicable: - Morphology: "morphology" - BiophysicalProperties: "biophys" - MembraneProperties - IntracellularProperties - SegmentGroups: "all", "soma_group", "dendrite_group", "axon_group" which can be used to include all, soma, dendrite, and axon segments respectively. Note that since this cell does not currently include a segment in its morphology, it is *not* a valid NeuroML construct. Use the `add_segment` function to add segments. `add_segment` will also populate the default segment groups this creates. :param cell_id: id of the cell :type cell_id: str :returns: created cell object of type neuroml.Cell """ cell = Cell(id=cell_id) cell.morphology = Morphology(id='morphology') membrane_properties = MembraneProperties() intracellular_properties = IntracellularProperties() cell.biophysical_properties = BiophysicalProperties( id="biophys", intracellular_properties=intracellular_properties, membrane_properties=membrane_properties) seg_group_all = SegmentGroup(id='all') seg_group_soma = SegmentGroup( id='soma_group', neuro_lex_id=neuro_lex_ids["soma"], notes="Default soma segment group for the cell") seg_group_axon = SegmentGroup( id='axon_group', neuro_lex_id=neuro_lex_ids["axon"], notes="Default axon segment group for the cell") seg_group_dend = SegmentGroup( id='dendrite_group', neuro_lex_id=neuro_lex_ids["dend"], notes="Default dendrite segment group for the cell") cell.morphology.segment_groups.append(seg_group_all) cell.morphology.segment_groups.append(seg_group_soma) cell.morphology.segment_groups.append(seg_group_axon) cell.morphology.segment_groups.append(seg_group_dend) return cell
def create_object(name, color, x=0, y=0, z=0): obj = Cell() obj.name = name obj.id = name nml_doc.cells.append(obj) morphology = Morphology(id='mm') obj.morphology = morphology pop = Population(id="Pop_%s" % name, component=obj.id, type="populationList", size=0) net.populations.append(pop) populations[name] = pop pop.properties.append(Property(tag="color", value=color)) add_instance(name, x, y, z) sg = SegmentGroup(id='all') obj.morphology.segment_groups.append(sg) return obj
def create_generic_neuron_cell(self): self.generic_neuron_cell = Cell(id="GenericNeuronCell") morphology = Morphology() morphology.id = "morphology_" + self.generic_neuron_cell.id self.generic_neuron_cell.morphology = morphology prox_point = Point3DWithDiam( x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) dist_point = Point3DWithDiam( x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) segment = Segment(id="0", name="soma", proximal=prox_point, distal=dist_point) morphology.segments.append(segment) self.generic_neuron_cell.biophysical_properties = BiophysicalProperties( id="biophys_" + self.generic_neuron_cell.id) mp = MembraneProperties() self.generic_neuron_cell.biophysical_properties.membrane_properties = mp mp.init_memb_potentials.append( InitMembPotential( value=self.get_bioparameter("initial_memb_pot").value)) mp.specific_capacitances.append( SpecificCapacitance(value=self.get_bioparameter( "neuron_specific_capacitance").value)) mp.spike_threshes.append( SpikeThresh( value=self.get_bioparameter("neuron_spike_thresh").value)) mp.channel_densities.append( ChannelDensity(cond_density=self.get_bioparameter( "neuron_leak_cond_density").value, id="Leak_all", ion_channel="Leak", erev=self.get_bioparameter("leak_erev").value, ion="non_specific")) mp.channel_densities.append( ChannelDensity(cond_density=self.get_bioparameter( "neuron_k_slow_cond_density").value, id="k_slow_all", ion_channel="k_slow", erev=self.get_bioparameter("k_slow_erev").value, ion="k")) ''' mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("neuron_k_fast_cond_density").value, id="k_fast_all", ion_channel="k_fast", erev=self.get_bioparameter("k_fast_erev").value, ion="k"))''' mp.channel_densities.append( ChannelDensity(cond_density=self.get_bioparameter( "neuron_ca_simple_cond_density").value, id="ca_simple_all", ion_channel="ca_simple", erev=self.get_bioparameter("ca_simple_erev").value, ion="ca")) ip = IntracellularProperties() self.generic_neuron_cell.biophysical_properties.intracellular_properties = ip # NOTE: resistivity/axial resistance not used for single compartment cell models, so value irrelevant! ip.resistivities.append(Resistivity(value="0.1 kohm_cm")) # NOTE: Ca reversal potential not calculated by Nernst, so initial_ext_concentration value irrelevant! species = Species(id="ca", ion="ca", concentration_model="CaPool", initial_concentration="0 mM", initial_ext_concentration="2E-6 mol_per_cm3") ip.species.append(species)
def create_models(self): self.generic_cell = Cell(id = "GenericCell") morphology = Morphology() morphology.id = "morphology_"+self.generic_cell.id self.generic_cell.morphology = morphology prox_point = Point3DWithDiam(x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) dist_point = Point3DWithDiam(x="0", y="0", z=self.get_bioparameter("cell_length").value, diameter=self.get_bioparameter("cell_diameter").value) segment = Segment(id="0", name="soma", proximal = prox_point, distal = dist_point) morphology.segments.append(segment) self.generic_cell.biophysical_properties = BiophysicalProperties(id="biophys_"+self.generic_cell.id) mp = MembraneProperties() self.generic_cell.biophysical_properties.membrane_properties = mp mp.init_memb_potentials.append(InitMembPotential(value=self.get_bioparameter("initial_memb_pot").value)) mp.specific_capacitances.append(SpecificCapacitance(value=self.get_bioparameter("specific_capacitance").value)) mp.spike_threshes.append(SpikeThresh(value=self.get_bioparameter("spike_thresh").value)) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("leak_cond_density").value, id="Leak_all", ion_channel="Leak", erev=self.get_bioparameter("leak_erev").value, ion="non_specific")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("k_slow_cond_density").value, id="k_slow_all", ion_channel="k_slow", erev=self.get_bioparameter("k_slow_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("k_fast_cond_density").value, id="k_fast_all", ion_channel="k_fast", erev=self.get_bioparameter("k_fast_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("ca_boyle_cond_density").value, id="ca_boyle_all", ion_channel="ca_boyle", erev=self.get_bioparameter("ca_boyle_erev").value, ion="ca")) ip = IntracellularProperties() self.generic_cell.biophysical_properties.intracellular_properties = ip # NOTE: resistivity/axial resistance not used for single compartment cell models, so value irrelevant! ip.resistivities.append(Resistivity(value="0.1 kohm_cm")) # NOTE: Ca reversal potential not calculated by Nernst, so initial_ext_concentration value irrelevant! species = Species(id="ca", ion="ca", concentration_model="CaPool", initial_concentration="0 mM", initial_ext_concentration="2E-6 mol_per_cm3") ip.species.append(species) self.exc_syn = GradedSynapse(id="exc_syn", conductance = self.get_bioparameter("exc_syn_conductance").value, delta = self.get_bioparameter("exc_syn_delta").value, Vth = self.get_bioparameter("exc_syn_vth").value, erev = self.get_bioparameter("exc_syn_erev").value, k = self.get_bioparameter("exc_syn_k").value) self.inh_syn = GradedSynapse(id="inh_syn", conductance = self.get_bioparameter("inh_syn_conductance").value, delta = self.get_bioparameter("inh_syn_delta").value, Vth = self.get_bioparameter("inh_syn_vth").value, erev = self.get_bioparameter("inh_syn_erev").value, k = self.get_bioparameter("inh_syn_k").value) self.elec_syn = GapJunction(id="elec_syn", conductance = self.get_bioparameter("elec_syn_gbase").value) self.offset_current = PulseGenerator(id="offset_current", delay=self.get_bioparameter("unphysiological_offset_current_del").value, duration=self.get_bioparameter("unphysiological_offset_current_dur").value, amplitude=self.get_bioparameter("unphysiological_offset_current").value)
def neuroml_single_cell(skeleton_id, nodes, pre, post): """ Encapsulate a single skeleton into a NeuroML Cell instance. skeleton_id: the ID of the skeleton to which all nodes belong. nodes: a dictionary of node ID vs tuple of node parent ID, location as a tuple of 3 floats, and radius. In nanometers. pre: a dictionary of node ID vs list of connector ID post: a dictionary of node ID vs list of connector ID Returns a Cell with id=skeleton_id. """ # Collect the children of every node successors = defaultdict(list) # parent node ID vs list of children node IDs rootID = None for nodeID, props in nodes.iteritems(): parentID = props[0] if not parentID: rootID = nodeID continue successors[parentID].append(nodeID) # Cache of Point3DWithDiam points = {} def asPoint(nodeID): """ Return the node as a Point3DWithDiam, in micrometers. """ p = points.get(nodeID) if not p: props = nodes[nodeID] radius = props[2] if radius < 0: radius = 0.1 # FUTURE Will have to change loc = props[1] # Point in micrometers p = Point3DWithDiam(loc[0] / 1000.0, loc[1] / 1000.0, loc[2] / 1000.0, radius) points[nodeID] = p return p # Starting from the root node, iterate towards the end nodes, adding a segment # for each parent-child pair. segments = [] segment_id = 1 todo = [rootID] # VERY CONFUSINGLY, the Segment.parent is a SegmentParent with the same id as the parent Segment. An unseemly overheady way to reference the parent Segment. while todo: nodeID = todo.pop() children = successors[nodeID] if not children: continue p1 = asPoint(nodeID) parent = segments[-1] if segments else None segment_parent = SegmentParent(segments=parent.id) if parent else None for childID in children: p2 = asPoint(childID) segment_id += 1 segment = Segment(proximal=p1, distal=p2, parent=segment_parent) segment.id = segment_id segment.name = "%s-%s" % (nodeID, childID) segments.append(segment) todo.append(childID) # Pack the segments into a Cell morphology = Morphology() morphology.segments.extend(segments) morphology.id = "Skeleton #%s" % skeleton_id # Synapses: TODO requires input from Padraig Gleeson cell = Cell() cell.name = 'Cell' cell.id = skeleton_id cell.morphology = morphology return cell
def create_generic_muscle_cell(self): self.generic_muscle_cell = Cell(id = "GenericMuscleCell") morphology = Morphology() morphology.id = "morphology_"+self.generic_muscle_cell.id self.generic_muscle_cell.morphology = morphology prox_point = Point3DWithDiam(x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) dist_point = Point3DWithDiam(x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) segment = Segment(id="0", name="soma", proximal = prox_point, distal = dist_point) morphology.segments.append(segment) self.generic_muscle_cell.biophysical_properties = BiophysicalProperties(id="biophys_"+self.generic_muscle_cell.id) mp = MembraneProperties() self.generic_muscle_cell.biophysical_properties.membrane_properties = mp mp.init_memb_potentials.append(InitMembPotential(value=self.get_bioparameter("initial_memb_pot").value)) mp.specific_capacitances.append(SpecificCapacitance(value=self.get_bioparameter("specific_capacitance").value)) mp.spike_threshes.append(SpikeThresh(value=self.get_bioparameter("muscle_spike_thresh").value)) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("muscle_leak_cond_density").value, id="Leak_all", ion_channel="Leak", erev=self.get_bioparameter("leak_erev").value, ion="non_specific")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("muscle_k_slow_cond_density").value, id="k_slow_all", ion_channel="k_slow", erev=self.get_bioparameter("k_slow_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("muscle_k_fast_cond_density").value, id="k_fast_all", ion_channel="k_fast", erev=self.get_bioparameter("k_fast_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("muscle_ca_boyle_cond_density").value, id="ca_boyle_all", ion_channel="ca_boyle", erev=self.get_bioparameter("ca_boyle_erev").value, ion="ca")) ip = IntracellularProperties() self.generic_muscle_cell.biophysical_properties.intracellular_properties = ip # NOTE: resistivity/axial resistance not used for single compartment cell models, so value irrelevant! ip.resistivities.append(Resistivity(value=self.get_bioparameter("resistivity").value)) # NOTE: Ca reversal potential not calculated by Nernst, so initial_ext_concentration value irrelevant! species = Species(id="ca", ion="ca", concentration_model="CaPool", initial_concentration="0 mM", initial_ext_concentration="2E-6 mol_per_cm3") ip.species.append(species)
def neuroml_single_cell(skeleton_id, nodes, pre, post): """ Encapsulate a single skeleton into a NeuroML Cell instance. skeleton_id: the ID of the skeleton to which all nodes belong. nodes: a dictionary of node ID vs tuple of node parent ID, location as a tuple of 3 floats, and radius. In nanometers. pre: a dictionary of node ID vs list of connector ID post: a dictionary of node ID vs list of connector ID Returns a Cell with id=skeleton_id. """ # Collect the children of every node successors = defaultdict( list) # parent node ID vs list of children node IDs rootID = None for nodeID, props in nodes.iteritems(): parentID = props[0] if not parentID: rootID = nodeID continue successors[parentID].append(nodeID) # Cache of Point3DWithDiam points = {} def asPoint(nodeID): """ Return the node as a Point3DWithDiam, in micrometers. """ p = points.get(nodeID) if not p: props = nodes[nodeID] radius = props[2] if radius < 0: radius = 0.1 # FUTURE Will have to change loc = props[1] # Point in micrometers p = Point3DWithDiam(loc[0] / 1000.0, loc[1] / 1000.0, loc[2] / 1000.0, radius) points[nodeID] = p return p # Starting from the root node, iterate towards the end nodes, adding a segment # for each parent-child pair. segments = [] segment_id = 1 todo = [rootID] # VERY CONFUSINGLY, the Segment.parent is a SegmentParent with the same id as the parent Segment. An unseemly overheady way to reference the parent Segment. while todo: nodeID = todo.pop() children = successors[nodeID] if not children: continue p1 = asPoint(nodeID) parent = segments[-1] if segments else None segment_parent = SegmentParent(segments=parent.id) if parent else None for childID in children: p2 = asPoint(childID) segment_id += 1 segment = Segment(proximal=p1, distal=p2, parent=segment_parent) segment.id = segment_id segment.name = "%s-%s" % (nodeID, childID) segments.append(segment) todo.append(childID) # Pack the segments into a Cell morphology = Morphology() morphology.segments.extend(segments) morphology.id = "Skeleton #%s" % skeleton_id # Synapses: TODO requires input from Padraig Gleeson cell = Cell() cell.name = 'Cell' cell.id = skeleton_id cell.morphology = morphology return cell
distal=P(x=229, y=0, z=100, diameter=0.60), name='axoncoll', parent=axonNOR2) axoncoll2 = Segment(proximal=P(x=229, y=0, z=100, diameter=0.60), distal=P(x=229, y=0, z=200, diameter=0.60), name='axoncoll2', parent=axoncoll1) axon = [ axonAIS, axonAISK, axonmyelin1, axonNOR1, axonmyelin2, axonNOR2, axonmyelin3, axonNOR3, axonmyelin4, axoncoll1, axoncoll2 ] segments = [soma] + dendrites + axon for i, seg in enumerate(segments): seg.id = i morph = NeuroMLMorphology(Morphology(segments=segments)) morph.section_groups["dend"] = np.arange(1, 1 + len(dendrites)) # dendrites subsets = np.genfromtxt("ModelViewParmSubset.txt", dtype=int) for subset_id in range(88): morph.section_groups["dend_subset{}".format(subset_id)] = \ 1 + subsets[:, 0][subsets[:, 1] == subset_id] # offset is because dend indices start at 1 Purkinje = sim.MultiCompartmentNeuron # standard base class for multi-compartment neurons Purkinje.label = "PurkinjeNeuron" Purkinje.ion_channels = { name: NMODLChannel(name) for name in ('Leak', 'HCN1', 'Nav1_6', 'Kv3_4', 'Kv1_1', 'Cav3_2', 'Kca3_1', 'Kir2_3', 'Kca1_1', 'Kca2_2', 'Kv4_3', 'Kv3_3', 'Cav3_1', 'pas') }
def generate_with_morphology(db_name,cfg_file) : parser = SafeConfigParser() parser.read(cfg_file) conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute("select distinct name from swc_data order by name") rets = cursor.fetchall() names =[] c=0 for entity in rets : names.append(entity[0]) prefix="" if db_name.startswith(".."): prefix = db_name.split("/") print ".. prefix: ", prefix,"\nNot sure this works correctly..." else: prefix = "/".join(db_name.split(".")[0].split("/")[:-1]) print "prefix: ", prefix morphology = Morphology() p = Point3DWithDiam(x=0,y=0,z=0,diameter=soma_diam) d = Point3DWithDiam(x=soma_len,y=0,z=0,diameter=soma_diam) soma = Segment(proximal=p, distal=d, name = 'Soma', id = 0) morphology.segments.append(soma) parent_seg = soma morphology.id = "NeuroMLMorphology" return morphology all_points = {} soma_radius = None for name in names : all_points[name] = {} cursor.execute("select * from swc_data where name=? order by id",(str(name),) ) rets = cursor.fetchall() points = {} is_soma = True print 'processing: ', name for entity in rets : contents = {} index = entity[0] if is_soma: points['soma'] = (entity[3],entity[4],entity[5]) soma_radius = parser.getint(entity[1].split("__")[0],"soma_radius") print "found soma_radius: ", soma_radius is_soma = False contents['name'] = entity[1] contents['swc_type'] = entity[2] contents['f'] = (entity[3],entity[4],entity[5]) contents['t'] = (entity[6],entity[7],entity[8]) contents['r'] = entity[9] points[entity[0]] =contents all_points[name] = points
def create_models(self): self.generic_cell = Cell(id = "GenericCell") morphology = Morphology() morphology.id = "morphology_"+self.generic_cell.id self.generic_cell.morphology = morphology prox_point = Point3DWithDiam(x="0", y="0", z="0", diameter=self.get_bioparameter("cell_diameter").value) dist_point = Point3DWithDiam(x="0", y="0", z=self.get_bioparameter("cell_length").value, diameter=self.get_bioparameter("cell_diameter").value) segment = Segment(id="0", name="soma", proximal = prox_point, distal = dist_point) morphology.segments.append(segment) self.generic_cell.biophysical_properties = BiophysicalProperties(id="biophys_"+self.generic_cell.id) mp = MembraneProperties() self.generic_cell.biophysical_properties.membrane_properties = mp mp.init_memb_potentials.append(InitMembPotential(value=self.get_bioparameter("initial_memb_pot").value)) mp.specific_capacitances.append(SpecificCapacitance(value=self.get_bioparameter("specific_capacitance").value)) mp.spike_threshes.append(SpikeThresh(value=self.get_bioparameter("spike_thresh").value)) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("leak_cond_density").value, id="Leak_all", ion_channel="Leak", erev=self.get_bioparameter("leak_erev").value, ion="non_specific")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("k_slow_cond_density").value, id="k_slow_all", ion_channel="k_slow", erev=self.get_bioparameter("k_slow_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("k_fast_cond_density").value, id="k_fast_all", ion_channel="k_fast", erev=self.get_bioparameter("k_fast_erev").value, ion="k")) mp.channel_densities.append(ChannelDensity(cond_density=self.get_bioparameter("ca_boyle_cond_density").value, id="ca_boyle_all", ion_channel="ca_boyle", erev=self.get_bioparameter("ca_boyle_erev").value, ion="ca")) ip = IntracellularProperties() self.generic_cell.biophysical_properties.intracellular_properties = ip # NOTE: resistivity/axial resistance not used for single compartment cell models, so value irrelevant! ip.resistivities.append(Resistivity(value="0.1 kohm_cm")) # NOTE: Ca reversal potential not calculated by Nernst, so initial_ext_concentration value irrelevant! species = Species(id="ca", ion="ca", concentration_model="CaPool", initial_concentration="0 mM", initial_ext_concentration="2E-6 mol_per_cm3") ip.species.append(species) self.exc_syn = ExpTwoSynapse(id="exc_syn", gbase = self.get_bioparameter("chem_exc_syn_gbase").value, erev = self.get_bioparameter("chem_exc_syn_erev").value, tau_decay = self.get_bioparameter("chem_exc_syn_decay").value, tau_rise = self.get_bioparameter("chem_exc_syn_rise").value) self.inh_syn = ExpTwoSynapse(id="inh_syn", gbase = self.get_bioparameter("chem_inh_syn_gbase").value, erev = self.get_bioparameter("chem_inh_syn_erev").value, tau_decay = self.get_bioparameter("chem_inh_syn_decay").value, tau_rise = self.get_bioparameter("chem_inh_syn_rise").value) self.elec_syn = GapJunction(id="elec_syn", conductance = self.get_bioparameter("elec_syn_gbase").value) self.offset_current = PulseGenerator(id="offset_current", delay=self.get_bioparameter("unphysiological_offset_current_del").value, duration=self.get_bioparameter("unphysiological_offset_current_dur").value, amplitude=self.get_bioparameter("unphysiological_offset_current").value)
def create_cell(): """Create the cell. :returns: name of the cell nml file """ # Create the nml file and add the ion channels hh_cell_doc = NeuroMLDocument(id="cell", notes="HH cell") hh_cell_fn = "HH_example_cell.nml" hh_cell_doc.includes.append(IncludeType(href=create_na_channel())) hh_cell_doc.includes.append(IncludeType(href=create_k_channel())) hh_cell_doc.includes.append(IncludeType(href=create_leak_channel())) # Define a cell hh_cell = Cell(id="hh_cell", notes="A single compartment HH cell") # Define its biophysical properties bio_prop = BiophysicalProperties(id="hh_b_prop") # notes="Biophysical properties for HH cell") # Membrane properties are a type of biophysical properties mem_prop = MembraneProperties() # Add membrane properties to the biophysical properties bio_prop.membrane_properties = mem_prop # Append to cell hh_cell.biophysical_properties = bio_prop # Channel density for Na channel na_channel_density = ChannelDensity(id="na_channels", cond_density="120.0 mS_per_cm2", erev="50.0 mV", ion="na", ion_channel="na_channel") mem_prop.channel_densities.append(na_channel_density) # Channel density for k channel k_channel_density = ChannelDensity(id="k_channels", cond_density="360 S_per_m2", erev="-77mV", ion="k", ion_channel="k_channel") mem_prop.channel_densities.append(k_channel_density) # Leak channel leak_channel_density = ChannelDensity(id="leak_channels", cond_density="3.0 S_per_m2", erev="-54.3mV", ion="non_specific", ion_channel="leak_channel") mem_prop.channel_densities.append(leak_channel_density) # Other membrane properties mem_prop.spike_threshes.append(SpikeThresh(value="-20mV")) mem_prop.specific_capacitances.append(SpecificCapacitance(value="1.0 uF_per_cm2")) mem_prop.init_memb_potentials.append(InitMembPotential(value="-65mV")) intra_prop = IntracellularProperties() intra_prop.resistivities.append(Resistivity(value="0.03 kohm_cm")) # Add to biological properties bio_prop.intracellular_properties = intra_prop # Morphology morph = Morphology(id="hh_cell_morph") # notes="Simple morphology for the HH cell") seg = Segment(id="0", name="soma", notes="Soma segment") # We want a diameter such that area is 1000 micro meter^2 # surface area of a sphere is 4pi r^2 = 4pi diam^2 diam = math.sqrt(1000 / math.pi) proximal = distal = Point3DWithDiam(x="0", y="0", z="0", diameter=str(diam)) seg.proximal = proximal seg.distal = distal morph.segments.append(seg) hh_cell.morphology = morph hh_cell_doc.cells.append(hh_cell) pynml.write_neuroml2_file(nml2_doc=hh_cell_doc, nml2_file_name=hh_cell_fn, validate=True) return hh_cell_fn