def build_hippocampus(): net = NetworkBuilder('CA3') net.add_nodes(N=1, pop_name='CA3e', model_type='biophysical', model_template='hoc:Spikingcell', morphology='blank.swc') inputnet = NetworkBuilder('input') inputnet.add_nodes(N=1, model_type='virtual', pat='pat1', pop_name='virt') conn = inputnet.add_edges( target=net.nodes(pop_name='CA3e'), source={'pat': 'pat1'}, connection_rule=1, dynamics_params='stsp.json', model_template='Exp2Syn1_STSP', delay=0, syn_weight=.5, target_sections=['soma'], # target soma distance_range=[0.0, 300]) conn.add_properties(['sec_id', 'sec_x'], rule=(0, 0.9), dtypes=[np.int32, np.float]) net.build() net.save_nodes(output_dir='network') net.save_edges(output_dir='network') inputnet.build() inputnet.save(output_dir='network')
def build_tw(): if not os.path.exists('output'): os.makedirs('output') TW = NetworkBuilder("TW") TW.add_nodes(N=3000, pop_name='TW', ei='e', location='TW', level_of_detail='filter') # Save cells.csv and cell_types.csv TW.save_nodes(nodes_file_name='output/tw_nodes.h5', node_types_file_name='output/tw_node_types.csv') VL4 = NetworkBuilder('V1/L4') VL4.import_nodes(nodes_file_name='output/v1_nodes.h5', node_types_file_name='output/v1_node_types.csv') VL4.add_edges(source=TW.nodes(), target={'pop_name': 'Rorb'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.00015, 'weight_function': 'wmax', 'distance_range': [30.0, 150.0], 'target_sections': ['basal', 'apical'], 'delay': 2.0, 'params_file': 'AMPA_ExcToExc.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'Scnn1a'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.00019, 'weight_function': 'wmax', 'distance_range': [30.0, 150.0], 'target_sections': ['basal', 'apical'], 'delay': 2.0, 'params_file': 'AMPA_ExcToExc.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'Nr5a1'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.00019, 'weight_function': 'wmax', 'distance_range': [30.0, 150.0], 'target_sections': ['basal', 'apical'], 'delay': 2.0, 'params_file': 'AMPA_ExcToExc.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'PV1'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.0022, 'weight_function': 'wmax', 'distance_range': [0.0, 1.0e+20], 'target_sections': ['somatic', 'basal'], 'delay': 2.0, 'params_file': 'AMPA_ExcToInh.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'PV2'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.0013, 'weight_function': 'wmax', 'distance_range': [0.0, 1.0e+20], 'target_sections': ['somatic', 'basal'], 'delay': 2.0, 'params_file': 'AMPA_ExcToInh.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'LIF_exc'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.015, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'instanteneousExc.json', 'set_params_function': 'exp2syn'})) VL4.add_edges(source=TW.nodes(), target={'pop_name': 'LIF_inh'}, connection_rule=lambda trg, src: 5, **({'weight_max': 0.05, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'instanteneousExc.json', 'set_params_function': 'exp2syn'})) VL4.build() VL4.save_edges(edges_file_name='output/tw_v1_edges.h5', edge_types_file_name='output/tw_v1_edge_types.csv')
syn_weight=20.0e-03, target_sections=['somatic'], delay=2.0, distance_range=[0.0, 300.0], dynamics_params='AMPA_ExcToExc.json', model_template='Exp2Syn') #################################################################################### ########################## Build and save network ################################## #################################################################################### print("\nBuilding network and saving to directory \"" + output_dir + "\"") net.build() Blad_aff_virt.build() EUS_aff_virt.build() PAG_aff_virt.build() net.save_nodes(output_dir=output_dir) net.save_edges(output_dir=output_dir) Blad_aff_virt.save_nodes(output_dir=output_dir) Blad_aff_virt.save_edges(output_dir=output_dir) EUS_aff_virt.save_nodes(output_dir=output_dir) EUS_aff_virt.save_edges(output_dir=output_dir) PAG_aff_virt.save_nodes(output_dir=output_dir) PAG_aff_virt.save_edges(output_dir=output_dir) print("Done")
net1.add_edges(source={'cell_name': 'HCOCell1'}, target={'cell_name':'HCOCell2'}, connection_rule=1, syn_weight=40.0e-02, dynamics_params='GABA_InhToInh.json', model_template='Exp2Syn', delay=0.0, target_sections=["soma"], distance_range=[0,999]) net1.add_edges(source={'cell_name': 'HCOCell2'}, target={'cell_name':'HCOCell1'}, connection_rule=1, syn_weight=40.0e-02, dynamics_params='GABA_InhToInh.json', model_template='Exp2Syn', delay=0.0, target_sections=["soma"], distance_range=[0,999]) net1.build() net1.save_nodes(output_dir='network') net1.build() net1.save_edges(output_dir='network') #from bmtk.analyzer import node_types_table #node_types_table(node_types_file='network/mcortex_node_types.csv', population='mcortex')
potental='exc', level_of_detail='biophysical', params_file='472363762_fit.json', morphology_file='Scnn1a.swc', set_params_function='Biophys1') cortex.build() cortex.save_nodes(output_dir='network') thalamus = NetworkBuilder('mthalamus') thalamus.add_nodes(N=10, pop_name='tON', potential='exc', level_of_detail='filter') thalamus.add_edges(source={'pop_name': 'tON'}, target=cortex.nodes(), connection_rule=5, weight_max=5e-05, weight_function='wmax', distance_range=[0.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') thalamus.build() thalamus.save_nodes(output_dir='network') thalamus.save_edges(output_dir='network') #thalamus.save_edges(edges_file_name='thalamus_cortex_edges.h5', edge_types_file_name='thalamus_cortex_edge_types.h5')
delay=2.0, dynamics_params='ExcToInh.json', model_template='static_synapse') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'LIF_inh'}, connection_rule=distance_connector, connection_params={'d_weight_min': 0.0, 'd_weight_max': 0.26, 'd_max': 300.0, 'nsyn_min': 3, 'nsyn_max': 7}, syn_weight=5.0, delay=2.0, dynamics_params='instanteneousExc.json', model_template='static_synapse') net.build() net.save_nodes(output_dir='network') net.save_edges(output_dir='network') lgn = NetworkBuilder('LGN') lgn.add_nodes(N=500, pop_name='tON', potential='exc', model_type='virtual') def select_source_cells(sources, target, nsources_min=10, nsources_max=30, nsyns_min=3, nsyns_max=12): total_sources = len(sources) nsources = np.random.randint(nsources_min, nsources_max) selected_sources = np.random.choice(total_sources, nsources, replace=False) syns = np.zeros(total_sources)
def build_l4(): if not os.path.exists('output/network/VisL4'): os.makedirs('output/network/VisL4') net = NetworkBuilder("V1/L4") net.add_nodes(N=2, pop_name='Scnn1a', node_type_id='395830185', position='points', position_params={ 'location': [(28.753, -364.868, -161.705), (48.753, -344.868, -141.705)] }, array_params={"tuning_angle": [0.0, 25.0]}, location='VisL4', ei='e', gaba_synapse='y', params_file='472363762_point.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='Rorb', node_type_id='314804042', position='points', position_params={ 'location': [(241.092, -349.263, 146.916), (201.092, -399.263, 126.916)] }, array_params={"tuning_angle": [50.0, 75.0]}, location='VisL4', ei='e', gaba_synapse='y', params_file='473863510_point.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='Nr5a1', node_type_id='318808427', position='points', position_params={ 'location': [(320.498, -351.259, 20.273), (310.498, -371.259, 10.273)] }, array_params={"tuning_angle": [100.0, 125.0]}, location='VisL4', ei='e', gaba_synapse='y', params_file='473863035_point.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='PV1', node_type_id='330080937', position='points', position_params={ 'location': [(122.373, -352.417, -216.748), (102.373, -342.417, -206.748)] }, array_params={'tuning_angle': ['NA', 'NA']}, location='VisL4', ei='i', gaba_synapse='y', params_file='472912177_fit.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='PV2', node_type_id='318331342', position='points', position_params={ 'location': [(350.321, -372.535, -18.282), (360.321, -371.535, -12.282)] }, array_params={'tuning_angle': ['NA', 'NA']}, location='VisL4', ei='i', gaba_synapse='y', params_file='473862421_point.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='LIF_exc', node_type_id='100000101', position='points', position_params={ 'location': [(-243.04, -342.352, -665.666), (-233.04, -332.352, -675.666)] }, array_params={'tuning_angle': ['NA', 'NA']}, location='VisL4', ei='e', gaba_synapse='n', params_file='IntFire1_exc_1.json', model_type='iaf_psc_alpha') net.add_nodes(N=2, pop_name='LIF_inh', node_type_id='100000102', position='points', position_params={ 'location': [(211.04, -321.333, -631.593), (218.04, -327.333, -635.593)] }, array_params={'tuning_angle': [150.0, 175.0]}, location='VisL4', ei='i', gaba_synapse='n', params_file='IntFire1_inh_1.json', model_type='iaf_psc_alpha') print("Setting connections...") net.connect(source={'ei': 'i'}, target={ 'ei': 'i', 'gaba_synapse': 'y' }, connector=lambda trg, src: 5, edge_params={ 'weight_max': -1.8, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'InhToInh.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'i'}, target={ 'ei': 'e', 'gaba_synapse': 'y' }, connector=lambda trg, src: 5, edge_params={ 'weight_max': -12.6, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'InhToExc.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'i'}, target={'pop_name': 'LIF_inh'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': -1.125, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'InhToInh.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'i'}, target={'pop_name': 'LIF_exc'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': -6.3, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'ExcToInh.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'PV1'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 7.7, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'ExcToInh.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'PV2'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 5.4, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'ExcToInh.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'LIF_inh'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 3.44, 'weight_function': 'wmax', 'delay': 2.0, 'params_file': 'ExcToInh.json', 'synapse_model': 'static_synapse' }) print("Generating E-to-E connections.") net.connect(source={'ei': 'e'}, target={'pop_name': 'Scnn1a'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 8.448, 'weight_function': 'gaussianLL', 'weight_sigma': 50.0, 'delay': 2.0, 'params_file': 'ExcToExc.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'Rorb'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 4.292, 'weight_function': 'gaussianLL', 'weight_sigma': 50.0, 'delay': 2.0, 'params_file': 'ExcToExc.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'Nr5a1'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 5.184, 'weight_function': 'gaussianLL', 'weight_sigma': 50.0, 'delay': 2.0, 'params_file': 'ExcToExc.json', 'synapse_model': 'static_synapse' }) net.connect(source={'ei': 'e'}, target={'pop_name': 'LIF_exc'}, connector=lambda trg, src: 5, edge_params={ 'weight_max': 1.995, 'weight_function': 'gaussianLL', 'weight_sigma': 50.0, 'delay': 2.0, 'params_file': 'ExcToExc.json', 'synapse_model': 'static_synapse' }) net.build() net.save_cells( filename='output/network/VisL4/nodes.csv', columns=['node_id', 'node_type_id', 'position', 'tuning_angle'], position_labels=['x', 'y', 'z']) net.save_types(filename='output/network/VisL4/node_types.csv', columns=[ 'node_type_id', 'pop_name', 'ei', 'gaba_synapse', 'location', 'model_type', 'params_file' ]) net.save_edge_types('output/network/VisL4/edge_types.csv', opt_columns=[ 'weight_max', 'weight_function', 'weight_sigma', 'delay', 'params_file', 'synapse_model' ]) net.save_edges(filename='output/network/VisL4/edges.h5') return net
distance_range=[0.0, 1.0e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='AMPA_ExcToInh.json', set_params_function='exp2syn') v1_net.add_edges(sources=lgn_net.nodes(), targets={'name': 'LIF_exc'}, iterator='all_to_one', func=select_source_cells, func_params=cparams, weight_max=0.0045, weight_function='wmax', delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') v1_net.add_edges(sources=lgn_net.nodes(), targets={'pop_name': 'LIF_inh'}, iterator='all_to_one', func=select_source_cells, func_params=cparams, weight_max=0.002, weight_function='wmax', delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') v1_net.build() v1_net.save_edges('lgn_v1_edges.h5', 'lgn_v1_edge_types.csv')
def build_l4(): net = NetworkBuilder("V1/L4") net.add_nodes(N=2, pop_name='Scnn1a', positions=[(28.753, -364.868, -161.705), (48.753, -344.868, -141.705)], tuning_angle=[0.0, 25.0], rotation_angle_yaxis=[3.55501, 3.55501], location='VisL4', ei='e', level_of_detail='biophysical', params_file='472363762_fit.json', morphology_file='Scnn1a-Tg3-Cre_Ai14_IVSCC_-177300.01.02.01_473845048_m.swc', rotation_angle_zaxis=-3.646878266, set_params_function='Biophys1') net.add_nodes(N=2, pop_name='Rorb', positions=[(241.092, -349.263, 146.916), (201.092, -399.263, 126.916)], tuning_angle=[50.0, 75.0], rotation_angle_yaxis=[3.50934, 3.50934], location='VisL4', ei='e', level_of_detail='biophysical', params_file='473863510_fit.json', morphology_file='Rorb-IRES2-Cre-D_Ai14_IVSCC_-168053.05.01.01_325404214_m.swc', rotation_angle_zaxis=-4.159763785, set_params_function='Biophys1') net.add_nodes(N=2, pop_name='Nr5a1', positions=[(320.498, -351.259, 20.273), (310.498, -371.259, 10.273)], tuning_angle=[100.0, 125.0], rotation_angle_yaxis=[0.72202, 0.72202], location='VisL4', ei='e', level_of_detail='biophysical', params_file='473863035_fit.json', morphology_file='Nr5a1-Cre_Ai14_IVSCC_-169250.03.02.01_471087815_m.swc', rotation_angle_zaxis=-2.639275277, set_params_function='Biophys1') net.add_nodes(N=2, pop_name='PV1', positions=[(122.373, -352.417, -216.748), (102.373, -342.417, -206.748)], tuning_angle=['NA', 'NA'], rotation_angle_yaxis=[2.92043, 2.92043], location='VisL4', ei='i', level_of_detail='biophysical', params_file='472912177_fit.json', morphology_file='Pvalb-IRES-Cre_Ai14_IVSCC_-176847.04.02.01_470522102_m.swc', rotation_angle_zaxis=-2.539551891, set_params_function='Biophys1') net.add_nodes(N=2, pop_name='PV2', positions=[(350.321, -372.535, -18.282), (360.321, -371.535, -12.282)], tuning_angle=['NA', 'NA'], rotation_angle_yaxis=[5.043336, 5.043336], location='VisL4', ei='i', level_of_detail='biophysical', params_file='473862421_fit.json', morphology_file='Pvalb-IRES-Cre_Ai14_IVSCC_-169125.03.01.01_469628681_m.swc', rotation_angle_zaxis=-3.684439949, set_params_function='Biophys1') net.add_nodes(N=2, pop_name='LIF_exc', positions=[(-243.04, -342.352, -665.666), (-233.04, -332.352, -675.666)], tuning_angle=['NA', 'NA'], #rotation_angle_yaxis=[5.11801, 5.11801], location='VisL4', ei='e', level_of_detail='intfire', params_file='IntFire1_exc_1.json', set_params_function='IntFire1') net.add_nodes(N=2, pop_name='LIF_inh', positions=[(211.04, -321.333, -631.593), (218.04, -327.333, -635.593)], tuning_angle=[150.0, 175.0], #rotation_angle_yaxis=[4.566091, 4.566091], location='VisL4', ei='i', level_of_detail='intfire', params_file='IntFire1_inh_1.json', set_params_function='IntFire1') print("Setting connections...") print("Generating I-to-I connections.") net.add_edges(source={'ei': 'i'}, target={'ei': 'i', 'level_of_detail': 'biophysical'}, connection_rule=5, weight_max=0.0002, weight_function='wmax', distance_range=[0.0, 1e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='GABA_InhToInh.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'i'}, target={'ei': 'i', 'level_of_detail': 'intfire'}, connection_rule=5, weight_max=0.00225, weight_function='wmax', delay=2.0, params_file='instanteneousInh.json', set_params_function='exp2syn') print("Generating I-to-E connections.") net.add_edges(source={'ei': 'i'}, target={'ei': 'e', 'level_of_detail': 'biophysical'}, connection_rule=lambda trg, src: 5, weight_max=0.00018, weight_function='wmax', distance_range=[0.0, 50.0], target_sections=['somatic', 'basal', 'apical'], delay=2.0, params_file='GABA_InhToExc.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'i'}, target={'ei': 'e', 'level_of_detail': 'intfire'}, connection_rule=5, weight_max=0.009, weight_function='wmax', delay=2.0, params_file='instanteneousInh.json', set_params_function='exp2syn') print("Generating E-to-I connections.") net.add_edges(source={'ei': 'e'}, target={'pop_name': 'PV1'}, connection_rule=5, weight_max=0.00035, weight_function='wmax', distance_range=[0.0, 1e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='AMPA_ExcToInh.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'PV2'}, connection_rule=5, weight_max=0.00027, weight_function='wmax', distance_range=[0.0, 1e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='AMPA_ExcToInh.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'LIF_inh'}, connection_rule=5, weight_max=0.0043, weight_function='wmax', delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') print("Generating E-to-E connections.") net.add_edges(source={'ei': 'e'}, target={'pop_name': 'Scnn1a'}, connection_rule=5, weight_max=6.4e-05, weight_function='gaussianLL', weight_sigma=50.0, distance_range=[30.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'Rorb'}, connection_rule=5, weight_max=5.5e-05, weight_function='gaussianLL', weight_sigma=50.0, distance_range=[30.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'Nr5a1'}, connection_rule=5, weight_max=7.2e-05, weight_function='gaussianLL', weight_sigma=50.0, distance_range=[30.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') net.add_edges(source={'ei': 'e'}, target={'pop_name': 'LIF_exc'}, connection_rule=5, weight_max=0.0019, weight_function='gaussianLL', weight_sigma=50.0, delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') net.build() net.save_nodes(nodes_file_name='output/v1_nodes.h5', node_types_file_name='output/v1_node_types.csv') net.save_edges(edges_file_name='output/v1_v1_edges.h5', edge_types_file_name='output/v1_v1_edge_types.csv') assert(os.path.exists('output/v1_node_types.csv')) node_types_csv = pd.read_csv('output/v1_node_types.csv', sep=' ') assert(len(node_types_csv) == 7) assert(set(node_types_csv.columns) == {'node_type_id', 'location', 'ei', 'level_of_detail', 'params_file', 'pop_name', 'set_params_function', 'rotation_angle_zaxis', 'morphology_file'}) assert(os.path.exists('output/v1_nodes.h5')) nodes_h5 = h5py.File('output/v1_nodes.h5') assert(len(nodes_h5['/nodes/node_gid']) == 14) assert(len(nodes_h5['/nodes/node_type_id']) == 14) assert(len(nodes_h5['/nodes/node_group']) == 14) assert(len(nodes_h5['/nodes/node_group_index']) == 14) assert(set(nodes_h5['/nodes/0'].keys()) == {'positions', 'rotation_angle_yaxis', 'tuning_angle'}) assert(len(nodes_h5['/nodes/0/positions']) == 10) assert(len(nodes_h5['/nodes/1/positions']) == 4) assert(os.path.exists('output/v1_v1_edge_types.csv')) edge_types_csv = pd.read_csv('output/v1_v1_edge_types.csv', sep=' ') assert(len(edge_types_csv) == 11) assert(set(edge_types_csv.columns) == {'weight_max', 'edge_type_id', 'target_query', 'params_file', 'set_params_function', 'delay', 'target_sections', 'weight_function', 'weight_sigma', 'source_query', 'distance_range'}) assert(os.path.exists('output/v1_v1_edges.h5')) edges_h5 = h5py.File('output/v1_v1_edges.h5') assert(len(edges_h5['/edges/index_pointer']) == 14+1) assert(len(edges_h5['/edges/target_gid']) == 14*14) assert(len(edges_h5['/edges/source_gid']) == 14*14) assert(len(edges_h5['/edges/0/nsyns']) == 14*14) return net
from bmtk.builder.networks import NetworkBuilder def crule(src, trg): # print src.node_id, trg.node_id return 2 net1 = NetworkBuilder('NET1') net1.add_nodes(N=100, position=[(0.0, 1.0, -1.0)] * 100, cell_type='Scnna1', ei='e') net1.add_edges(source={'ei': 'e'}, target={'ei': 'e'}, connection_rule=5) net1.build() net2 = NetworkBuilder('NET2') net2.add_nodes(N=10, position=[(0.0, 1.0, -1.0)] * 10, cell_type='PV1', ei='i') net2.add_edges(connection_rule=10) net2.add_edges(source=net1.nodes(), connection_rule=1) net2.add_edges(target=net1.nodes(), connection_rule=crule) net2.build() #net1.save_edges(output_dir='tmp_output') net2.save_edges(output_dir='tmp_output')
def build_ext5_nodes(): if not os.path.exists('network'): os.makedirs('network') EXT = NetworkBuilder("EXT") # need 5 cells to stimulate at 5 different frequencies EXT.add_nodes(N=5, pop_name='EXT', model_type='virtual', firing_rate=firing_rate) # Save cells.csv and cell_types.csv EXT.save_nodes(nodes_file_name='network/ext_nodes.h5', node_types_file_name='network/ext_node_types.csv') net = NetworkBuilder('slice') net.import_nodes(nodes_file_name='network/slice_nodes.h5', node_types_file_name='network/slice_node_types.csv') net.add_edges(source=EXT.nodes(firing_rate=10), target=net.nodes(firing_rate=10, synapse_model='a'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'AMPA_ExcToExc.json', 'model_template': 'expsyn' })) net.add_edges(source=EXT.nodes(firing_rate=20), target=net.nodes(firing_rate=20, synapse_model='a'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'AMPA_ExcToExc.json', 'model_template': 'expsyn' })) net.add_edges(source=EXT.nodes(firing_rate=50), target=net.nodes(firing_rate=50, synapse_model='a'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'AMPA_ExcToExc.json', 'model_template': 'expsyn' })) net.add_edges(source=EXT.nodes(firing_rate=100), target=net.nodes(firing_rate=100, synapse_model='a'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'AMPA_ExcToExc.json', 'model_template': 'expsyn' })) net.add_edges(source=EXT.nodes(firing_rate=200), target=net.nodes(firing_rate=200, synapse_model='a'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'AMPA_ExcToExc.json', 'model_template': 'expsyn' })) net.add_edges(source=EXT.nodes(firing_rate=10), target=net.nodes(firing_rate=10, synapse_model='b'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'pvalb_pvalb.json', 'model_template': 'stp2syn' })) net.add_edges(source=EXT.nodes(firing_rate=20), target=net.nodes(firing_rate=20, synapse_model='b'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'pvalb_pvalb.json', 'model_template': 'stp2syn' })) net.add_edges(source=EXT.nodes(firing_rate=50), target=net.nodes(firing_rate=50, synapse_model='b'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'pvalb_pvalb.json', 'model_template': 'stp2syn' })) net.add_edges(source=EXT.nodes(firing_rate=100), target=net.nodes(firing_rate=100, synapse_model='b'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'pvalb_pvalb.json', 'model_template': 'stp2syn' })) net.add_edges(source=EXT.nodes(firing_rate=200), target=net.nodes(firing_rate=200, synapse_model='b'), connection_rule=5, **({ 'syn_weight': 0.002, 'weight_function': 'wmax', 'distance_range': [0.0, 50.0], 'target_sections': ['somatic', 'basal', 'apical'], 'delay': 2.0, 'dynamics_params': 'pvalb_pvalb.json', 'model_template': 'stp2syn' })) net.build() net.save_edges(edges_file_name='network/ext_to_slice_edges.h5', edge_types_file_name='network/ext_to_slice_edge_types.csv')
def build_lgn(): def generate_positions(N, x0=0.0, x1=300.0, y0=0.0, y1=100.0): X = np.random.uniform(x0, x1, N) Y = np.random.uniform(y0, y1, N) return np.column_stack((X, Y)) def select_source_cells(src_cell, trg_cell, n_syns_exc, n_syns_inh): #if trg_cell['tuning_angle'] is not None: # synapses = [n_syns if src['pop_name'] == 'tON' or src['pop_name'] == 'tOFF' else 0 for src in src_cells] #else: # synapses = [n_syns if src['pop_name'] == 'tONOFF' else 0 for src in src_cells] # will always give synapse number depending on type if n_syns_exc > 0: n_synapses = n_syns_exc if n_syns_inh > 0: n_synapses = n_syns_inh return n_synapses # varible number of synapses #return np.random.randint(n_syns_min, n_syns_max) #return synapses if not os.path.exists('output'): os.makedirs('output') LGN = NetworkBuilder("LGN") LGN.add_nodes(N=1000, positions=generate_positions(1000), location='LGN', level_of_detail='filter', pop_name='ExcIN', ei='e') LGN.add_nodes(N=1, positions=generate_positions(1), location='LGN', level_of_detail='filter', pop_name='InhIN', ei='i') VL4 = NetworkBuilder('V1/L4') VL4.import_nodes(nodes_file_name='output/v1_nodes.h5', node_types_file_name='output/v1_node_types.csv') cm = VL4.add_edges(source=LGN.nodes(ei='e'), #target={'pop_name': 'DG_GC'}, connection_rule=select_source_cells, connection_params={'n_syns_exc': 1, 'n_syns_inh': 0}, weight_max=10e-03, weight_function='wmax', distance_range=[1, 1e+20], target_sections=['apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') VL4.build() LGN.save_nodes(nodes_file_name='output/lgn_nodes.h5', node_types_file_name='output/lgn_node_types.csv') VL4.save_edges(edges_file_name='output/lgn_v1_edges.h5', edge_types_file_name='output/lgn_v1_edge_types.csv')
def build_lgn(): def generate_positions(N, x0=0.0, x1=300.0, y0=0.0, y1=100.0): X = np.random.uniform(x0, x1, N) Y = np.random.uniform(y0, y1, N) return np.column_stack((X, Y)) def select_source_cells(src_cells, trg_cell, n_syns): if trg_cell['tuning_angle'] is not None: synapses = [n_syns if src['pop_name'] == 'tON' or src['pop_name'] == 'tOFF' else 0 for src in src_cells] else: synapses = [n_syns if src['pop_name'] == 'tONOFF' else 0 for src in src_cells] return synapses if not os.path.exists('output'): os.makedirs('output') LGN = NetworkBuilder("LGN") LGN.add_nodes(N=3000, positions=generate_positions(3000), location='LGN', level_of_detail='filter', pop_name='tON', ei='e') LGN.add_nodes(N=3000, positions=generate_positions(3000), location='LGN', level_of_detail='filter', pop_name='tOFF', ei='e') LGN.add_nodes(N=3000, positions=generate_positions(3000), location='LGN', level_of_detail='filter', pop_name='tONOFF', ei='e') VL4 = NetworkBuilder('V1/L4') VL4.import_nodes(nodes_file_name='output/v1_nodes.h5', node_types_file_name='output/v1_node_types.csv') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'Rorb'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=5e-05, weight_function='wmax', distance_range=[0.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'Nr5a1'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=5e-05, weight_function='wmax', distance_range=[0.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'Scnn1a'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=4e-05, weight_function='wmax', distance_range=[0.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'PV1'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=0.0001, weight_function='wmax', distance_range=[0.0, 1.0e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='AMPA_ExcToInh.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'PV2'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=9e-05, weight_function='wmax', distance_range=[0.0, 1.0e+20], target_sections=['somatic', 'basal'], delay=2.0, params_file='AMPA_ExcToInh.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'LIF_exc'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=0.0045, weight_function='wmax', delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') VL4.add_edges(source=LGN.nodes(), target={'pop_name': 'LIF_inh'}, iterator='all_to_one', connection_rule=select_source_cells, connection_params={'n_syns': 10}, weight_max=0.002, weight_function='wmax', delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') VL4.build() LGN.save_nodes(nodes_file_name='output/lgn_nodes.h5', node_types_file_name='output/lgn_node_types.csv') VL4.save_edges(edges_file_name='output/lgn_v1_edges.h5', edge_types_file_name='output/lgn_v1_edge_types.csv') assert(os.path.exists('output/lgn_node_types.csv')) node_types_csv = pd.read_csv('output/lgn_node_types.csv', sep=' ') assert(len(node_types_csv) == 3) assert(set(node_types_csv.columns) == {'node_type_id', 'location', 'ei', 'level_of_detail', 'pop_name'}) assert(os.path.exists('output/lgn_nodes.h5')) nodes_h5 = h5py.File('output/lgn_nodes.h5') assert(len(nodes_h5['/nodes/node_gid']) == 9000) assert(len(nodes_h5['/nodes/node_type_id']) == 9000) assert(len(nodes_h5['/nodes/node_group']) == 9000) assert(len(nodes_h5['/nodes/node_group_index']) == 9000) assert(set(nodes_h5['/nodes/0'].keys()) == {'positions'}) assert(len(nodes_h5['/nodes/0/positions']) == 9000) assert(os.path.exists('output/lgn_v1_edge_types.csv')) edge_types_csv = pd.read_csv('output/lgn_v1_edge_types.csv', sep=' ') assert(len(edge_types_csv) == 7) assert(set(edge_types_csv.columns) == {'weight_max', 'edge_type_id', 'target_query', 'params_file', 'set_params_function', 'delay', 'target_sections', 'weight_function', 'source_query', 'distance_range'}) assert(os.path.exists('output/lgn_v1_edges.h5')) edges_h5 = h5py.File('output/lgn_v1_edges.h5') assert(len(edges_h5['/edges/index_pointer']) == 14+1) assert(len(edges_h5['/edges/target_gid']) == 6000*14) assert(len(edges_h5['/edges/source_gid']) == 6000*14) assert(len(edges_h5['/edges/0/nsyns']) == 6000*14)
dynamics_params='AMPA_ExcToExc.json', model_template='Exp2Syn') conn = net.add_edges(source=net.nodes(pop_name='PMC'), target=net.nodes(pop_name='IND'), connection_rule=one_to_one, delay=0.5, syn_weight = 0.033, target_sections=['somatic'], distance_range=[0.0, 300.0], dynamics_params='AMPA_ExcToExc.json', model_template='Exp2Syn') net.build() net.save_nodes(output_dir=output_dir) net.save_edges(output_dir=output_dir) #inp = NetworkBuilder('INPUT') # Virtual cells delivering input to PUD #inp.add_nodes(N=1, pop_name = 'Pel_aff_virt', model_type='virtual', potential='exc') #inp.add_edges(source=inp.nodes(pop_name='Pel_aff_virt'), target=net.nodes(pop_name='SPN'), # connection_rule=1, # syn_weight=0.06, # target_sections=['somatic'], # delay=0.5, # distance_range=[0.0, 300.0], # dynamics_params='AMPA_ExcToExc.json', # model_template='Exp2Syn') # #inp.build() #inp.save_nodes(output_dir=output_dir) #inp.save_edges(output_dir=output_dir)
target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') net.add_edges(sources={'ei': 'e'}, targets={'name': 'Nr5a1'}, func=distance_tuning_connection_handler, func_params=cparameters, weight_max=7.2e-05, weight_function='gaussianLL', weight_sigma=50.0, distance_range=[30.0, 150.0], target_sections=['basal', 'apical'], delay=2.0, params_file='AMPA_ExcToExc.json', set_params_function='exp2syn') net.add_edges(sources={'ei': 'e'}, targets={'name': 'LIF_exc'}, func=distance_tuning_connection_handler, func_params=cparameters, weight_max=0.0019, weight_function='gaussianLL', weight_sigma=50.0, delay=2.0, params_file='instanteneousExc.json', set_params_function='exp2syn') net.build() net.save_nodes('v1_nodes.h5', 'v1_node_types.csv') net.save_edges('v1_edges.h5', 'v1_edge_types.csv')
import numpy as np import random cortex = NetworkBuilder('mcortex') cortex.add_nodes(N=100, pop_name='Scnn1a', positions=positions_columinar(N=100, center=[0, 50.0, 0], max_radius=30.0, height=100.0), rotation_angle_yaxis=xiter_random(N=100, min_x=0.0, max_x=2*np.pi), rotation_angle_zaxis=3.646878266, potental='exc', model_type='biophysical', model_template='ctdb:Biophys1.hoc', model_processing='aibs_perisomatic', dynamics_params='472363762_fit.json', morphology='Scnn1a_473845048_m.swc') cortex.add_edges(source={'pop_name': 'Scnn1a'}, target={'pop_name': 'Scnn1a'}, connection_rule=distance_connector, connection_params={'d_weight_min': 0.0, 'd_weight_max': 0.34, 'd_max': 50.0, 'nsyn_min': 0, 'nsyn_max': 10}, syn_weight=2.0e-04, distance_range=[30.0, 150.0], target_sections=['basal', 'apical', 'soma'], delay=2.0, dynamics_params='AMPA_ExcToExc.json', model_template='exp2syn') cortex.build() cortex.save_nodes(output_dir='network') cortex.save_edges(output_dir='network')
# connection_rule = 5, # how many synapses exists between every source/target pair syn_weight=0.001, delay=2.0, # ms weight_function=None, # used to adjust the weights before runtime # Determine where on the post-synaptic cell to place the synapse target_sections=['basal', 'apical'], distance_range=[0.0, 150.0], # Set the parameters of the synpases dynamics_params= 'AMPA_ExcToExc.json', # AMPA type synaptic model with an Excitatory connection model_template='exp2syn') # Build thalamus (saving nodes and edges) thalamus.build() thalamus.save_nodes(output_dir='%s/network' % (savedir)) thalamus.save_edges(output_dir='%s/network' % (savedir)) # Set spike trains from bmtk.utils.reports.spike_trains import PoissonSpikeGenerator spikesFilename = '%s/inputs/mthalamus_spikes.h5' % (savedir) psg = PoissonSpikeGenerator(population='mthalamus') psg.add( node_ids=range(10), # Have 10 nodes to match mthalamus firing_rate= 15.0, # 10 Hz, we can also pass in a nonhomoegenous function/array times=(0.0, 3.0)) # Firing starts at 0 s up to 3 s if not (os.path.isfile(spikesFilename)): psg.to_sonata(spikesFilename) # ----------------------------------------------------