Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo.
The 2 matches
- [1] § MATERIALS AND METHODS › Simulation of the biophysically detailed neural network model › Basic setting of the simulation ↔ orig/netParams.py, lines 872–937 · score 0.57 · NetPyNE, cell models, Python, cortical, PV, spike
- [2] § MATERIALS AND METHODS › Simulation of the biophysically detailed neural network model › Basic setting of the simulation ↔ seed_search/netParams.py, lines 868–933 · score 0.57 · NetPyNE, cell models, Python, cortical, PV, spike
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 937 lines · 50 KB · no license · 1 match
- """
- netParams.py
- High-level specifications for M1 network model using NetPyNE
- Contributors: [email hidden]
- """
- from netpyne import specs, sim
- from neuron import h
- import pickle, json
- import random
- import numpy as np
- import math
- import os
- netParams = specs.NetParams() # object of class NetParams to store the network parameters
- netParams.version = 56
- try:
- from __main__ import cfg # import SimConfig object with params from parent module
- except:
- from cfg import cfg
- num_PT = 20
- num_PV = 10
- num_SOM = 10
- num_dict = {'PT': num_PT, 'PV': num_PV, 'SOM': num_SOM}
- seclist = {'PT': {'dend':[], 'all':[]}, 'PV': [], 'SOM': []} #'all' except axon
- #------------------------------------------------------------------------------
- #
- # Random sequence generation
- #
- #------------------------------------------------------------------------------
- class RandomSequenceNetParams:
- def __init__(self):
- self.randomlist = None
- def initializeRandomSequence(self, simConfig):
- from mpi4py import MPI
- comm = MPI.COMM_WORLD
- rank = comm.Get_rank()
- # Set random seeds consistently across nodes
- sd = 255
- random.seed(sd)
- if rank == 0:
- print(f'Using {sd} -- random seed for connection generation')
- # Initialize the randomlist structure based on population parameters
- self.randomlist = {
- 'EI': {k: [[[] for _ in range(num_PT)]
- for _ in range(num_dict[k])]
- for k in ['PV', 'SOM']},
- 'PVE': [[{'soma': []} for _ in range(num_dict['PV'])]
- for _ in range(num_PT)],
- 'SOME': [[{s: [] for s in ['Adend1', 'Adend2', 'Adend3', 'Bdend']}
- for _ in range(num_dict['SOM'])]
- for _ in range(num_PT)],
- 'II': {posttype: { pretype: [[[] for _ in range(num_dict[pretype] - 1 if pretype == posttype
- else num_dict[pretype])]
- for _ in range(num_dict[posttype])]
- for pretype in ['PV', 'SOM']}
- for posttype in ['PV', 'SOM']},
- 'LongE': {k: {sec: [[[] for _ in range(numCells_long)]
- for _ in range(num_PT)]
- for sec in ['Adend1', 'Adend2', 'Adend3', 'Bdend']}
- for k in ['S1_4K', 'S1_12K', 'OC']}
- }
- if rank == 0: # Only generate on master node
- # Generate weights and locations
- weights, seglocs = self._generate_random_values()
- # Process connections
- self._process_all_connections(weights, seglocs)
- # Broadcast fram rank 0 to all other ranks
- self.randomlist = comm.bcast(self.randomlist, root=0)
- def _generate_random_values(self):
- weights = {}
- seglocs = {}
- # Generate weights for each postsynaptic neuron (ipost)
- for celltype in ['PT', 'PV', 'SOM']:
- weights[celltype] = {}
- seglocs[celltype] = self._create_segment_locations(celltype)
- if celltype == 'PT':
- # For PT cells, generate weights for each compartment
- weights[celltype]['soma'] = []
- for ipost in range(num_PT):
- # Sample weights for this ipost
- weights[celltype]['soma'].append(
- self.sample_custom_distribution(
- self._calculate_total_synapses(celltype)['axosomatic'] // num_PT,
- 0.4, 3, 15
- )
- )
- for sec in seclist['PT']['dend']:
- weights[celltype][sec] = []
- for ipost in range(num_PT):
- weights[celltype][sec].append(
- self.sample_custom_distribution(
- self._calculate_total_synapses(celltype)['axodendritic'][sec] // num_PT,
- 0.4, 3, 15
- )
- )
- else:
- weights[celltype] = []
- for ipost in range(num_dict[celltype]):
- weights[celltype].append(
- self.sample_custom_distribution(
- self._calculate_total_synapses(celltype)['axosomatic'] // num_dict[celltype],
- 0.4, 3, 15
- )
- )
- return weights, seglocs
- def sample_custom_distribution(self, n_samples, prob, weight_threshold, maxweight=1.0):
- # Generate random numbers from a uniform distribution
- u = [random.uniform(0, 1) for _ in range(n_samples)]
- # Allocate samples as a list of zeros
- samples = [0.0] * n_samples
- for i, ui in enumerate(u):
- if ui <= prob: # prob in [0, weight]
- samples[i] = weight_threshold * (ui / prob) # Scale uniformly in [0, weight]
- else: # 1-prob in (weight, 1]
- samples[i] = weight_threshold + (ui - prob) * (maxweight-weight_threshold) / (1-prob) # Scale uniformly in (weight, 1]
- return samples
- def _calculate_total_synapses(self, celltype):
- # Calculate based on connection rules and population sizes
- total = {'axosomatic':0, 'axodendritic':{k: 0 for k in seclist['PT']['dend']}}
- if celltype == 'PT':
- total['axosomatic'] = (num_PT *
- num_PV) # PVE connections
- for sec in seclist['PT']['dend']:
- total['axodendritic'][sec] += math.ceil(nseg['PT'][sec]/numCells_long) * numCells_long * num_PT * 3 # LongE connections (3 types)
- total['axodendritic'][sec] += (num_PT *
- num_SOM) # SOME connections
- else: # PV or SOM
- total['axosomatic'] += (num_dict[celltype] *
- num_PT) # EI connections
- total['axosomatic'] += (num_dict[celltype] *
- (num_PV +
- num_SOM - 1)) # II connections
- return total
- def _create_segment_locations(self, celltype):
- seglocs = {}
- if celltype == 'PT':
- # For PT cells, generate segment locations for each compartment
- for sec in seclist['PT']['all']:
- seglocs[sec] = []
- for ipost in range(num_PT):
- # Generate segment locations for this ipost
- seglocs[sec].append(
- [1 / (2 * nseg[celltype][sec]) + i * 1 / nseg[celltype][sec]
- for i in range(math.ceil(nseg[celltype][sec]))]
- )
- if sec == 'soma':
- k = self._calculate_total_synapses(celltype)['axosomatic'] // num_PT - math.ceil(nseg[celltype][sec])
- else:
- k = self._calculate_total_synapses(celltype)['axodendritic'][sec] // num_PT - math.ceil(nseg[celltype][sec])
- seglocs[sec][ipost].extend(random.choices(seglocs[sec][ipost], k = k))
- random.shuffle(seglocs[sec][ipost])
- else:
- # For PV and SOM cells, generate segment locations for each ipost
- seglocs = []
- for ipost in range(num_dict[celltype]):
- seglocs.append(
- [1 / (2 * nseg[celltype]['soma']) + i * 1 / nseg[celltype]['soma']
- for i in range(math.ceil(nseg[celltype]['soma']))]
- )
- seglocs[ipost].extend(
- random.choices(seglocs[ipost],
- k=self._calculate_total_synapses(celltype)['axosomatic'] // num_dict[celltype] - math.ceil(nseg[celltype]['soma']))
- )
- random.shuffle(seglocs[ipost])
- return seglocs
- def _process_all_connections(self, weights, seglocs):
- for conntype in self.randomlist.keys():
- self._process_connections(conntype, weights, seglocs)
- def _process_connections(self, conntype, weights, seglocs):
- if conntype == 'LongE':
- synsperconn = {}
- for sec in seclist['PT']['all']:
- synsperconn[sec] = math.ceil(nseg['PT'][sec]/numCells_long)
- for ipost in range(num_PT):
- for pretype in ['S1_4K', 'S1_12K', 'OC']:
- for ipre in range(numCells_long):
- self._process_single_connection(conntype, 'PT', pretype,
- ipost, ipre, weights, seglocs, synsperconn)
- elif conntype in ['PVE', 'SOME']:
- if conntype == 'PVE':
- pretype = 'PV'
- else:
- pretype = 'SOM'
- for ipost in range(num_PT):
- for ipre in range(num_dict[pretype]):
- self._process_single_connection(conntype, 'PT', pretype,
- ipost, ipre, weights, seglocs, 1)
- elif conntype == 'EI':
- for posttype in ['PV', 'SOM']:
- for ipost in range(num_dict[posttype]):
- for ipre in range(num_PT):
- self._process_single_connection(conntype, posttype, None,
- ipost, ipre, weights, seglocs, 1)
- elif conntype == 'II':
- for posttype in ['PV', 'SOM']:
- for pretype in ['PV', 'SOM']:
- num_cells = num_dict[pretype]
- for ipost in range(num_dict[posttype]):
- for ipre in range(num_cells - (1 if posttype == pretype else 0)):
- self._process_single_connection(conntype, posttype, pretype,
- ipost, ipre, weights, seglocs, 1)
- def _process_single_connection(self, conntype, posttype, pretype, ipost, ipre, weights, seglocs, synsperconn):
- if posttype == 'PT':
- selected_weights = {}
- selected_locs = {}
- if conntype == 'LongE':
- for sec in seclist['PT']['dend']:
- selected_weights[sec] = [weights[posttype][sec][ipost].pop() for _ in range(synsperconn[sec])]
- selected_locs[sec] = [seglocs[posttype][sec][ipost].pop() for _ in range(synsperconn[sec])]
- else:
- if pretype == 'PV':
- selected_weights['soma'] = [weights[posttype]['soma'][ipost].pop() for _ in range(synsperconn)]
- selected_locs['soma'] = [seglocs[posttype]['soma'][ipost].pop() for _ in range(synsperconn)]
- else:
- for sec in seclist['PT']['dend']:
- selected_weights[sec] = [weights[posttype][sec][ipost].pop() for _ in range(synsperconn)]
- selected_locs[sec] = [seglocs[posttype][sec][ipost].pop() for _ in range(synsperconn)]
- else:
- selected_weights = [weights[posttype][ipost].pop() for _ in range(synsperconn)]
- selected_locs = [seglocs[posttype][ipost].pop() for _ in range(synsperconn)]
- # Store the weights and locations in randomlist
- if conntype == 'II':
- self.randomlist[conntype][posttype][pretype][ipost][ipre] = list(zip(selected_locs, selected_weights))
- elif conntype == 'EI':
- self.randomlist[conntype][posttype][ipost][ipre] = list(zip(selected_locs, selected_weights))
- elif conntype == 'LongE':
- for sec in seclist['PT']['dend']:
- self.randomlist[conntype][pretype][sec][ipost][ipre] = list(zip(selected_locs[sec], selected_weights[sec]))
- else:
- if pretype == 'SOM':
- for sec in seclist['PT']['dend']:
- self.randomlist[conntype][ipost][ipre][sec] = list(zip(selected_locs[sec], selected_weights[sec]))
- else:
- self.randomlist[conntype][ipost][ipre]['soma'] = list(zip(selected_locs['soma'], selected_weights['soma']))
- #------------------------------------------------------------------------------
- #
- # NETWORK PARAMETERS
- #
- #------------------------------------------------------------------------------
- #------------------------------------------------------------------------------
- # General network parameters
- #------------------------------------------------------------------------------
- netParams.scale = cfg.scale # Scale factor for number of cells
- netParams.sizeX = cfg.sizeX # x-dimension (horizontal length) size in um
- netParams.sizeY = cfg.sizeY # y-dimension (vertical height or cortical depth) size in um
- netParams.sizeZ = cfg.sizeZ # z-dimension (horizontal depth) size in um
- netParams.shape = 'cylinder' # cylindrical (column-like) volume
- #------------------------------------------------------------------------------
- # General connectivity parameters
- #------------------------------------------------------------------------------
- netParams.scaleConnWeight = 1.0 # Connection weight scale factor (default if no model specified)
- #netParams.scaleConnWeightModels = {'HH_full': 1.0} #scale conn weight factor for each cell model
- #netParams.scaleConnWeightNetStims = 1.0 #0.5 # scale conn weight factor for NetStims
- netParams.defaultThreshold = -5.0 # spike threshold, 10 mV is NetCon default, lower it for all cells
- netParams.defaultDelay = 2.0 # default conn delay (ms)
- netParams.propVelocity = 500.0 # propagation velocity (um/ms)
- netParams.probLambda = 100.0 # length constant (lambda) for connection probability decay (um)
- netParams.defineCellShapes = True # convert stylized geoms to 3d points
- # special condition to change Kgbar together with ih when running batch
- # note min Kgbar is assumed to be 0.5, so this is set here as an offset
- #if cfg.makeKgbarFactorEqualToNewFactor:
- # cfg.KgbarFactor = 0.5 + cfg.modifyMechs['newFactor']
- #------------------------------------------------------------------------------
- # Cell parameters
- #------------------------------------------------------------------------------
- #cellModels = ['HH_full']
- cellModels = ['HH_reduced']
- layer = {'1':[0.0, 0.1],'5B': [0.47,0.8],'longS1_4K': [2.2,2.3],'longS1_12K': [2.2,2.3], 'longOC': [2.2,2.3]} # normalized layer boundaries
- netParams.correctBorder = {'threshold': [cfg.correctBorderThreshold, cfg.correctBorderThreshold, cfg.correctBorderThreshold],
- 'yborders': [layer['1'][0], layer['5B'][0], layer['5B'][1]]} # correct conn border effect
- #------------------------------------------------------------------------------
- ## Load cell rules previously saved using netpyne format
- cellParamLabels = ['PV_simple', 'SOM_simple', 'PT5B_reduced']# ['VIP_reduced', 'NGF_simple','PT5B_full'] # # list of cell rules to load from file
- loadCellParams = cellParamLabels
- saveCellParams = False #True
- for ruleLabel in loadCellParams:
- netParams.loadCellParamsRule(label=ruleLabel, fileName='cells/'+ruleLabel+'_cellParams.pkl')
- # Adapt K gbar
- if ruleLabel in ['IT2_reduced', 'IT4_reduced', 'IT5A_reduced', 'IT5B_reduced', 'IT6_reduced', 'CT6_reduced', 'IT5A_full']:
- cellRule = netParams.cellParams[ruleLabel]
- for secName in cellRule['secs']:
- for kmech in [k for k in cellRule['secs'][secName]['mechs'].keys() if k.startswith('k') and k!='kBK']:
- cellRule['secs'][secName]['mechs'][kmech]['gbar'] *= cfg.KgbarFactor
- if ruleLabel in ['PT5B_reduced']:
- cellRule = netParams.cellParams[ruleLabel]
- seclist['PT']['dend'] = cellRule['secLists']['alldend']
- seclist['PT']['all'] = [sec for sec in cellRule['secs'] if sec not in ['axon']]
- secL_PT = {k: 0.0 for k in cellRule['secs']}
- for secName in cellRule['secs']:
- #cellRule['secs'][secName]['geom']['L'] = 5
- secL_PT[secName] = cellRule['secs'][secName]['geom']['L']
- cellRule['secs'][secName]['geom']['nseg'] = math.floor(cellRule['secs'][secName]['geom']['L'])
- cellRule['secs'][secName]['weightNorm'] = None
- elif ruleLabel in ['PV_simple']:
- cellRule = netParams.cellParams[ruleLabel]
- secL_PV = {'soma': 0.0, 'dend': 0.0, 'axon': 0.0}
- for secName in cellRule['secs']:
- #cellRule['secs'][secName]['geom']['L'] = 5
- secL_PV[secName] = cellRule['secs'][secName]['geom']['L']
- cellRule['secs'][secName]['geom']['nseg'] = math.floor(cellRule['secs'][secName]['geom']['L'])
- cellRule['secs'][secName]['weightNorm'] = None
- elif ruleLabel in ['SOM_simple']:
- cellRule = netParams.cellParams[ruleLabel]
- secL_SOM = {'soma': 0.0, 'dend': 0.0, 'axon': 0.0}
- for secName in cellRule['secs']:
- #cellRule['secs'][secName]['geom']['L'] = 5
- secL_SOM[secName] = cellRule['secs'][secName]['geom']['L']
- cellRule['secs'][secName]['geom']['nseg'] = math.floor(cellRule['secs'][secName]['geom']['L'])
- cellRule['secs'][secName]['weightNorm'] = None
- #print('sec length:', secL_PT, secL_PV, secL_SOM)
- #------------------------------------------------------------------------------
- ## PT5B full cell model params (700+ comps)
- if 'PT5B_full' not in loadCellParams:
- ihMod2str = {'harnett': 1, 'kole': 2, 'migliore': 3}
- cellRule = netParams.importCellParams(label='PT5B_full', conds={'cellType': 'PT', 'cellModel': 'HH_full'},
- fileName='cells/PTcell.hoc', cellName='PTcell', cellArgs=[ihMod2str[cfg.ihModel], cfg.ihSlope], somaAtOrigin=True)
- nonSpiny = ['apic_0', 'apic_1']
- netParams.addCellParamsSecList(label='PT5B_full', secListName='perisom', somaDist=[0, 50]) # sections within 50 um of soma
- netParams.addCellParamsSecList(label='PT5B_full', secListName='below_soma', somaDistY=[-600, 0]) # sections within 0-300 um of soma
- for sec in nonSpiny: cellRule['secLists']['perisom'].remove(sec)
- cellRule['secLists']['alldend'] = [sec for sec in cellRule.secs if ('dend' in sec or 'apic' in sec)] # basal+apical
- cellRule['secLists']['apicdend'] = [sec for sec in cellRule.secs if ('apic' in sec)] # apical
- cellRule['secLists']['spiny'] = [sec for sec in cellRule['secLists']['alldend'] if sec not in nonSpiny]
- # Adapt ih params based on cfg param
- for secName in cellRule['secs']:
- for mechName,mech in cellRule['secs'][secName]['mechs'].items():
- if mechName in ['ih','h','h15', 'hd']:
- mech['gbar'] = [g*cfg.ihGbar for g in mech['gbar']] if isinstance(mech['gbar'],list) else mech['gbar']*cfg.ihGbar
- if cfg.ihModel == 'migliore':
- mech['clk'] = cfg.ihlkc # migliore's shunt current factor
- mech['elk'] = cfg.ihlke # migliore's shunt current reversal potential
- if secName.startswith('dend'):
- mech['gbar'] *= cfg.ihGbarBasal # modify ih conductance in soma+basal dendrites
- mech['clk'] *= cfg.ihlkcBasal # modify ih conductance in soma+basal dendrites
- if secName in cellRule['secLists']['below_soma']: #secName.startswith('dend'):
- mech['clk'] *= cfg.ihlkcBelowSoma # modify ih conductance in soma+basal dendrites
- # Adapt K gbar
- for kmech in [k for k in cellRule['secs'][secName]['mechs'].keys() if k.startswith('k') and k!='kBK']:
- cellRule['secs'][secName]['mechs'][kmech]['gbar'] *= cfg.KgbarFactor
- # NOT Reduce dend Na to HAVE dend spikes
- for secName in cellRule['secLists']['alldend']:
- cellRule['secs'][secName]['mechs']['nax']['gbar'] = 0.0153130368342 * cfg.dendNa # 1
- cellRule['secs']['soma']['mechs']['nax']['gbar'] = 0.0153130368342 * cfg.somaNa # 5
- cellRule['secs']['axon']['mechs']['nax']['gbar'] = 0.0153130368342 * cfg.axonNa # 5
- cellRule['secs']['axon']['geom']['Ra'] = 137.494564931 * cfg.axonRa # 0.005
- # Remove Na (TTX)
- if cfg.removeNa:
- for secName in cellRule['secs']: cellRule['secs'][secName]['mechs']['nax']['gbar'] = 0.0
- #netParams.addCellParamsWeightNorm('PT5B_full', 'conn/PT5B_full_weightNorm.pkl', threshold=cfg.weightNormThreshold) # load weight norm
- if saveCellParams: netParams.saveCellParamsRule(label='PT5B_full', fileName='cells/PT5B_full_cellParams.pkl')
- #------------------------------------------------------------------------------
- # Reduced cell model params (6-comp)
- reducedCells = { # layer and cell type for reduced cell models
- #'PT5B_reduced': {'layer': '5B', 'cname': 'SPI6', 'carg': None}
- }
- reducedSecList = { # section Lists for reduced cell model
- 'alldend': ['Adend1', 'Adend2', 'Adend3', 'Bdend'],
- 'spiny': ['Adend1', 'Adend2', 'Adend3', 'Bdend'],
- 'apicdend': ['Adend1', 'Adend2', 'Adend3'],
- 'perisom': ['soma']}
- for label, p in reducedCells.items(): # create cell rules that were not loaded
- if label not in loadCellParams:
- cellRule = netParams.importCellParams(label=label, conds={'cellType': label[0], 'cellModel': 'HH_reduced', 'ynorm': layer[p['layer']]},
- fileName='cells/'+p['cname']+'.py', cellName=p['cname'], cellArgs={'params': p['carg']} if p['carg'] else None)
- dendL = (layer[p['layer']][0]+(layer[p['layer']][1]-layer[p['layer']][0])/2.0) * cfg.sizeY # adapt dend L based on layer
- for secName in ['Adend1', 'Adend2', 'Adend3', 'Bdend']:
- cellRule['secs'][secName]['geom']['L'] = dendL / 3.0
- for k,v in reducedSecList.items(): cellRule['secLists'][k] = v # add secLists
- netParams.addCellParamsWeightNorm('PT5B_reduced', 'conn/'+'PT5B_reduced'+'_weightNorm.pkl', threshold=cfg.weightNormThreshold) # add weightNorm
- if saveCellParams: netParams.saveCellParamsRule(label='PT5B_reduced', fileName='cells/'+'PT5B_reduced'+'_cellParams.pkl')
- # set 3d points
- offset, prevL = 0, 0
- somaL = netParams.cellParams[label]['secs']['soma']['geom']['L']
- for secName, sec in netParams.cellParams[label]['secs'].items():
- sec['geom']['pt3d'] = []
- if secName in ['soma', 'Adend1', 'Adend2', 'Adend3']: # set 3d geom of soma and Adends
- sec['geom']['pt3d'].append([offset+0, prevL, 0, sec['geom']['diam']])
- prevL = float(prevL + sec['geom']['L'])
- sec['geom']['pt3d'].append([offset+0, prevL, 0, sec['geom']['diam']])
- if secName in ['Bdend']: # set 3d geom of Bdend
- sec['geom']['pt3d'].append([offset+0, somaL, 0, sec['geom']['diam']])
- sec['geom']['pt3d'].append([offset+sec['geom']['L'], somaL, 0, sec['geom']['diam']])
- if secName in ['axon']: # set 3d geom of axon
- sec['geom']['pt3d'].append([offset+0, 0, 0, sec['geom']['diam']])
- sec['geom']['pt3d'].append([offset+0, -sec['geom']['L'], 0, sec['geom']['diam']])
- #------------------------------------------------------------------------------
- ## PV cell params (3-comp)
- if 'PV_simple' not in loadCellParams:
- cellRule = netParams.importCellParams(label='PV_simple', conds={'cellType':'PV', 'cellModel':'HH_simple'},
- fileName='cells/FS3.hoc', cellName='FScell1', cellInstance = True)
- cellRule['secLists']['spiny'] = ['soma', 'dend']
- #netParams.addCellParamsWeightNorm('PV_simple', 'conn/PV_simple_weightNorm.pkl', threshold=cfg.weightNormThreshold)
- if saveCellParams: netParams.saveCellParamsRule(label='PV_simple', fileName='cells/PV_simple_cellParams.pkl')
- #------------------------------------------------------------------------------
- ## SOM cell params (3-comp)
- if 'SOM_simple' not in loadCellParams:
- cellRule = netParams.importCellParams(label='SOM_simple', conds={'cellType':'SOM', 'cellModel':'HH_simple'},
- fileName='cells/LTS3.hoc', cellName='LTScell1', cellInstance = True)
- cellRule['secLists']['spiny'] = ['soma', 'dend']
- #netParams.addCellParamsWeightNorm('SOM_simple', 'conn/SOM_simple_weightNorm.pkl', threshold=cfg.weightNormThreshold)
- if saveCellParams: netParams.saveCellParamsRule(label='SOM_simple', fileName='cells/SOM_simple_cellParams.pkl')
- #------------------------------------------------------------------------------
- # Population parameters
- #------------------------------------------------------------------------------
- #------------------------------------------------------------------------------
- ## load densities
- with open('cells/cellDensity.pkl', 'rb') as fileObj: density = pickle.load(fileObj)['density']
- ## Local populations
- #netParams.popParams['PT5B'] = {'cellModel': cfg.cellmod['PT5B'], 'cellType': 'PT', 'ynormRange': layer['5B'], 'numCells': num_PT}
- netParams.popParams['PT5B_reduced'] = {'cellModel': 'HH_reduced', 'cellType': 'PT', 'ynormRange': layer['5B'], 'numCells': num_PT}
- netParams.popParams['SOM5B'] = {'cellModel': 'HH_simple', 'cellType': 'SOM','ynormRange': layer['5B'], 'numCells': num_SOM}
- netParams.popParams['PV5B'] = {'cellModel': 'HH_simple', 'cellType': 'PV', 'ynormRange': layer['5B'], 'numCells': num_PV}
- #netParams.popParams['rnd'] = {'cellModel': 'Randomizer', 'numCells': 1}
- if cfg.singleCellPops:
- for pop in netParams.popParams.values(): pop['numCells'] = 1
- #------------------------------------------------------------------------------
- ## Long-range input populations (VecStims)
- numCells_long = 20
- ''' spkTimes_4K = np.concatenate((np.arange(0, 20, 1), np.arange(cfg.t_HSP + 5*1000, cfg.t_HSP + 15*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D1train'], ts['D1train'] + 10*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D1train'] + 11*1000, ts['D1train'] + 21*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D1train'] + 22*1000, ts['D1train'] + 32*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D1test'] + 5*1000, ts['D1test'] + 15*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D3test'] + 5*1000, ts['D3test'] + 15*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4extinct'], ts['D4extinct'] + 40*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4extinct'] + 41*1000, ts['D4extinct'] + 81*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4extinct'] + 82*1000, ts['D4extinct'] + 122*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4extinct'] + 123*1000, ts['D4extinct'] + 163*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4extinct'] + 164*1000, ts['D4extinct'] + 204*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D4test'] + 5*1000, ts['D4test'] + 15*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D5extinct'], ts['D5extinct'] + 40*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D5extinct'] + 41*1000, ts['D5extinct'] + 81*1000, 1/rate['4K']*1000),
- np.arange(ts['D5extinct'] + 123*1000, ts['D5extinct'] + 163*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D5extinct'] + 164*1000, ts['D5extinct'] + 204*1000, 1/rate['4K']*1000) ,
- np.arange(ts['D5test'] + 5*1000, ts['D5test'] + 15*1000, 1/rate['4K']*1000)))
- spkTimes_12K = np.concatenate((np.arange(cfg.t_HSP + 35*1000, cfg.t_HSP + 45*1000, 1/rate['12K']*1000),
- np.arange(ts['D1test'] + 35*1000, ts['D1test'] + 45*1000, 1/rate['12K']*1000) ,
- np.arange(ts['D3test'] + 35*1000, ts['D3test'] + 45*1000, 1/rate['12K']*1000),
- np.arange(ts['D4test'] + 35*1000, ts['D4test'] + 45*1000, 1/rate['12K']*1000),
- np.arange(ts['D5test'] + 35*1000, ts['D5test'] + 45*1000, 1/rate['12K']*1000)))
- spkTimes_shock = np.concatenate((np.arange(ts['D1train'] + 8*1000, ts['D1train'] + 10*1000, 1/rate['shock']*1000),
- np.arange(ts['D1train'] + 19*1000, ts['D1train'] + 21*1000, 1/rate['shock']*1000),
- np.arange(ts['D1train'] + 30*1000, ts['D1train'] + 32*1000, 1/rate['shock']*1000)))
- '''
- ts = cfg.tstart
- if cfg.addLongConn:
- # VecStims
- longPops = ['S1_4K','S1_12K', 'OC']
- # create list of pulses (each item is a dict with pulse params) #noise(0 = deterministic; 1 = completely random)
- rate = {'4K': 50, '12K': 50, 'shock': 100} #Hz
- hspRate = 5
- pulses_4K = [{'start': ts['HSPset0'], 'end': ts['HSPset0']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset1'], 'end': ts['HSPset1']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP0'], 'end': ts['HSP0']+cfg.t_HSP, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset2'], 'end': ts['HSPset2']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP1'], 'end': ts['HSP1']+cfg.t_HSP , 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['Baseline'] + 5*1000, 'end': ts['Baseline'] + 15*1000, 'rate': rate['4K'], 'noise': 0}, #Baseline
- {'start': ts['D1train'], 'end': ts['D1train'] + 10*1000, 'rate': rate['4K'], 'noise': 0}, #D1 FC
- {'start': ts['D1train'] + 11*1000, 'end': ts['D1train'] + 21*1000, 'rate': rate['4K'], 'noise': 0}, #D1 FC
- {'start': ts['D1train'] + 22*1000, 'end': ts['D1train'] + 32*1000, 'rate': rate['4K'], 'noise': 0}, #D1 FC
- {'start': ts['D1test'] + 5*1000, 'end': ts['D1test'] + 15*1000, 'rate': rate['4K'], 'noise': 0}, #D1 test
- {'start': ts['D3test'] + 5*1000, 'end': ts['D3test'] + 15*1000, 'rate': rate['4K'], 'noise': 0}, #D3 test
- {'start': ts['D4extinct'], 'end': ts['D4extinct'] + 40*1000, 'rate': rate['4K'], 'noise': 0}, #D4 FC
- {'start': ts['D4extinct'] + 41*1000, 'end': ts['D4extinct'] + 81*1000, 'rate': rate['4K'], 'noise': 0}, #D4 FC
- {'start': ts['D4extinct'] + 82*1000, 'end': ts['D4extinct'] + 122*1000, 'rate': rate['4K'], 'noise': 0}, #D4 FC
- {'start': ts['D4extinct'] + 123*1000, 'end': ts['D4extinct'] + 163*1000, 'rate': rate['4K'], 'noise': 0}, #D4 FC
- {'start': ts['D4extinct'] + 164*1000, 'end': ts['D4extinct'] + 204*1000, 'rate': rate['4K'], 'noise': 0}, #D4 FC
- {'start': ts['D4test'] + 5*1000, 'end': ts['D4test'] + 15*1000, 'rate': rate['4K'], 'noise': 0}, #D4 test
- {'start': ts['D5extinct'], 'end': ts['D5extinct'] + 40*1000, 'rate': rate['4K'], 'noise': 0}, #D5 FC
- {'start': ts['D5extinct'] + 41*1000, 'end': ts['D5extinct'] + 81*1000, 'rate': rate['4K'], 'noise': 0}, #D5 FC
- {'start': ts['D5extinct'] + 82*1000, 'end': ts['D5extinct'] + 122*1000, 'rate': rate['4K'], 'noise': 0}, #D5 FC
- {'start': ts['D5extinct'] + 123*1000, 'end': ts['D5extinct'] + 163*1000, 'rate': rate['4K'], 'noise': 0}, #D5 FC
- {'start': ts['D5extinct'] + 164*1000, 'end': ts['D5extinct'] + 204*1000, 'rate': rate['4K'], 'noise': 0}, #D5 FC
- {'start': ts['D5test'] + 5*1000, 'end': ts['D5test'] + 15*1000, 'rate': rate['4K'], 'noise': 0} #D5 test
- ]
- pulses_12K = [
- {'start': ts['HSPset0'], 'end': ts['HSPset0']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset1'], 'end': ts['HSPset1']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP0'], 'end': ts['HSP0']+cfg.t_HSP, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset2'], 'end': ts['HSPset2']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP1'], 'end': ts['HSP1']+cfg.t_HSP , 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['Baseline'] + 35*1000, 'end': ts['Baseline'] + 45*1000, 'rate': rate['12K'], 'noise': 0}, #Baseline
- {'start': ts['D1test'] + 35*1000, 'end': ts['D1test'] + 45*1000, 'rate': rate['12K'], 'noise': 0}, #D1 test
- {'start': ts['D3test'] + 35*1000, 'end': ts['D3test'] + 45*1000, 'rate': rate['12K'], 'noise': 0}, #D3 test
- {'start': ts['D4test'] + 35*1000, 'end': ts['D4test'] + 45*1000, 'rate': rate['12K'], 'noise': 0}, #D4 test
- {'start': ts['D5test'] + 35*1000, 'end': ts['D5test'] + 45*1000, 'rate': rate['12K'], 'noise': 0} #D5 test
- ]
- pulses_shock = [
- {'start': ts['HSPset0'], 'end': ts['HSPset0']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset1'], 'end': ts['HSPset1']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP0'], 'end': ts['HSP0']+cfg.t_HSP, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSPset2'], 'end': ts['HSPset2']+cfg.t_hspvtrg, 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['HSP1'], 'end': ts['HSP1']+cfg.t_HSP , 'rate': hspRate, 'noise': 0.25}, #HSP
- {'start': ts['D1train'] + 8*1000, 'end': ts['D1train'] + 10*1000, 'rate': rate['shock'], 'noise': 0}, #D1 FC
- {'start': ts['D1train'] + 19*1000, 'end': ts['D1train'] + 21*1000, 'rate': rate['shock'], 'noise': 0}, #D1 FC
- {'start': ts['D1train'] + 30*1000, 'end': ts['D1train'] + 32*1000, 'rate': rate['shock'], 'noise': 0} #D1 FC
- ]
- netParams.popParams['S1_4K'] = {'cellModel': 'VecStim', 'numCells': numCells_long,
- 'ynormRange': layer['longS1_4K'], 'spkTimes': [cfg.duration], 'pulses': pulses_4K}
- netParams.popParams['S1_12K'] = {'cellModel': 'VecStim', 'numCells': numCells_long,
- 'ynormRange': layer['longS1_12K'], 'spkTimes': [cfg.duration], 'pulses': pulses_12K}
- netParams.popParams['OC'] = {'cellModel': 'VecStim', 'numCells': numCells_long,
- 'ynormRange': layer['longOC'], 'spkTimes': [cfg.duration], 'pulses': pulses_shock}
- '''netParams.popParams['HSP1'] = {'cellModel': 'VecStim', 'numCells': 1,
- 'spikePattern': {'type': 'poisson', 'start': 0, 'stop': cfg.t_hspvtrg, 'frequency': 10}}
- netParams.popParams['HSP2'] = {'cellModel': 'VecStim', 'numCells': 1,
- 'spikePattern': {'type': 'poisson', 'start': ts['D1test'] + cfg.t_test +cfg.t_cool-20, 'stop': ts['D3test'], 'frequency': 10}}
- netParams.popParams['HSP3'] = {'cellModel': 'VecStim', 'numCells': 1,
- 'spikePattern': {'type': 'poisson', 'start': ts['D4test'] + cfg.t_test +cfg.t_cool-20, 'stop': ts['D5extinct'], 'frequency': 10}}
- '''
- #netParams.popParams['HSP'] = {'cellModel': 'VecStim', 'numCells': 1,
- # 'spkTimes': [ts['D1test'] + cfg.t_test +cfg.t_cool], 'pulses': pulses_HSP}
- #------------------------------------------------------------------------------
- # Synaptic mechanism parameters
- #------------------------------------------------------------------------------
- netParams.synMechParams['NMDA'] = {'mod': 'MyExp2SynNMDABB', 'tau1NMDA': 15, 'tau2NMDA': 150, 'e': 0}
- netParams.synMechParams['AMPA'] = {'mod':'MyExp2SynBB', 'tau1': 0.05, 'tau2': 5.3*cfg.AMPATau2Factor, 'e': 0}
- netParams.synMechParams['GABAB'] = {'mod':'MyExp2SynBB', 'tau1': 3.5, 'tau2': 260.9, 'e': -93}
- netParams.synMechParams['GABAA'] = {'mod':'MyExp2SynBB', 'tau1': 0.07, 'tau2': 18.2, 'e': -80}
- netParams.synMechParams['GABAASlow'] = {'mod': 'MyExp2SynBB','tau1': 2, 'tau2': 100, 'e': -80}
- netParams.synMechParams['GABAASlowSlow'] = {'mod': 'MyExp2SynBB', 'tau1': 200, 'tau2': 400, 'e': -80}
- ESynMech = ['AMPA', 'NMDA']
- SOMESynMech = ['GABAASlow','GABAB']
- SOMISynMech = ['GABAASlow']
- PVSynMech = ['GABAA']
- #------------------------------------------------------------------------------
- # Local connectivity parameters
- #------------------------------------------------------------------------------
- # Store the number of segments in a dictionary
- nseg = {'PV': {key: math.floor(value) for key, value in secL_PV.items()},
- 'SOM': {key: math.floor(value) for key, value in secL_SOM.items()},
- 'PT': {key: math.floor(value) for key, value in secL_PT.items()}} #highest possible spine density = 1/um
- # plasticity parameters
- STDPparams = {'hebbwt': .5, 'antiwt':-.5, 'wmax': 15, 'RLon': 0 , 'RLhebbwt': 0.1, 'RLantiwt': -0.100, \
- 'tauhebb': 10, 'RLwindhebb': 50, 'useRLexp': 0, 'softthresh': 1, 'verbose':0}
- randomlistgen = RandomSequenceNetParams()
- randomlistgen.initializeRandomSequence(cfg)
- # Use configurable data directory
- data_dir = os.environ.get('SIM_DATA_DIR', './data')
- randomlist_path = os.path.join(data_dir, f'seed{cfg.rdseed}', f'randomlistgen{cfg.rdseed}.txt')
- os.makedirs(os.path.dirname(randomlist_path), exist_ok=True)
- with open(randomlist_path, 'w') as f:
- f.write(json.dumps(randomlistgen.randomlist, indent=4))
- '''cell_types = ['PT', 'PV', 'SOM']
- total_synapses_all_cells = 0
- for celltype in cell_types:
- synapse_counts = randomlistgen._calculate_total_synapses(celltype)
- axosomatic_synapses = synapse_counts['axosomatic']
- axodendritic_synapses = sum(synapse_counts['axodendritic'].values())
- total_synapses = axosomatic_synapses + axodendritic_synapses
- total_synapses_all_cells += total_synapses
- print(total_synapses_all_cells)'''
- #------------------------------------------------------------------------------
- ## E -> I
- if cfg.EIGain: # Use IEGain if value set
- cfg.EPVGain = cfg.EIGain
- cfg.ESOMGain = cfg.EIGain
- else:
- cfg.EIGain = (cfg.EPVGain+cfg.ESOMGain)/2.0
- if cfg.addConn and (cfg.EPVGain > 0.0 or cfg.ESOMGain > 0.0):
- preTypes = ['PT']
- postTypes = ['PV', 'SOM']
- ESynMech = ['AMPA','NMDA']
- lGain = [cfg.EPVGain, cfg.ESOMGain] # E -> PV or E -> SOM
- for ipost, postType in enumerate(postTypes):
- weights = [
- randomlistgen.randomlist['EI'][postType][j][i][0][1]
- for i in range(num_PT)
- for j in range(num_dict[postType])
- ]
- weights_syns = [[x, x] for x in weights]
- locs = [
- randomlistgen.randomlist['EI'][postType][j][i][0][0]
- for i in range(num_PT)
- for j in range(num_dict[postType])
- ]
- locs_syns = [[x, x] for x in locs]
- ruleLabel = 'EI'+'_'+ postType
- netParams.connParams[ruleLabel] = {
- 'preConds': {'cellType': preTypes},#, 'ynorm': list(preBin)},
- 'postConds': {'cellType': postType},#, 'ynorm': list(postBin)},
- 'synMech': ESynMech,
- 'connList': [(i, j) for i in range(num_PT) for j in range(num_dict[postType])],
- 'weight': weights_syns,#lambda pre, post: randomlistgen.randomlist['EI'][postType][post.index][pre.index][0][1],
- 'loc': locs_syns, #lambda pre, post: randomlistgen.randomlist['EI'][postType][post.index][pre.index][0][0],
- #'delay': 'defaultDelay+dist_3D/propVelocity',
- 'sec': 'soma',
- 'synsPerConn': 1,
- 'plast': {'mech': 'STDP', 'params': STDPparams}} # simple I cells used right now only have soma
- #debug: line 695 in compartCell.py, conn['plast'] -> conn
- #------------------------------------------------------------------------------
- ## I -> all
- if cfg.addConn:
- preCellTypes = ['SOM', 'PV']
- ynorms = [[0,1]]*2 # <----not local, interneuron can connect to all layers
- postCellTypes = ['PT', 'PV', 'SOM']
- disynapticBias = None # default, used for I->I
- for i,(preCellType, ynorm) in enumerate(zip(preCellTypes, ynorms)):
- for ipost, postCellType in enumerate(postCellTypes):
- if postCellType == 'PV': # postsynaptic I cell
- sec = 'soma'
- synWeightFraction = [1]
- if preCellType == 'PV': # PV->PV
- # weight = IIweight * cfg.PVPVGain
- synMech = PVSynMech
- else: # SOM->PV
- # weight = IIweight * cfg.SOMPVGain
- synMech = SOMISynMech
- elif postCellType == 'SOM': # postsynaptic I cell
- sec = 'soma'
- synWeightFraction = [1]
- if preCellType == 'PV': # PV->SOM
- # weight = IIweight * cfg.PVSOMGain
- synMech = PVSynMech
- else: # SOM->SOM
- # weight = IIweight * cfg.SOMSOMGain
- synMech = SOMISynMech
- elif postCellType == 'PT': # postsynaptic PT cell
- #disynapticBias = IEdisynBias
- if preCellType == 'PV': # PV->E
- #weight = IEweight * cfg.IPTGain * cfg.PVEGain
- synMech = PVSynMech
- sec = 'perisom'
- else: # SOM->E
- #weight = IEweight * cfg.IPTGain * cfg.SOMEGain
- synMech = SOMESynMech
- sec = 'spiny'
- synWeightFraction = cfg.synWeightFractionSOME
- if postCellType == 'PT':
- numCell = num_PT
- else:
- numCell = num_dict[postCellType]
- if postCellType == 'PT':
- if sec in ['soma', 'perisom']:
- sec = 'soma'
- weights = [
- randomlistgen.randomlist[preCellType+'E'][j][i][sec][0][1]
- for i in range(num_dict[preCellType])
- for j in range(num_PT)
- ]
- locs = [
- randomlistgen.randomlist[preCellType+'E'][j][i][sec][0][0]
- for i in range(num_dict[preCellType])
- for j in range(num_PT)
- ]
- ruleLabel = preCellType +'_'+ postCellType
- netParams.connParams[ruleLabel] = {
- 'preConds': {'cellType': preCellType, 'ynorm': ynorm},
- 'postConds': {'cellType': postCellType, 'ynorm': ynorm},
- 'synMech': synMech,
- 'connList': [(i, j) for i in range(num_dict[preCellType]) for j in range(numCell)],
- 'weight': weights, #lambda pre, post: randomlistgen.randomlist[preCellType + 'E'][postCellType][post.index][pre.index][sec][0][1],
- 'loc': locs, #lambda pre, post: randomlistgen.randomlist[preCellType+'E'][postCellType][post.index][pre.index][sec][0][0],
- #'delay': 'defaultDelay+dist_3D/propVelocity',
- 'synsPerConn': 1,
- 'sec': sec,
- #'disynapticBias': disynapticBias,
- 'plast': {'mech': 'STDP', 'params': STDPparams}}
- else:
- for s in seclist['PT']['dend']:
- weights = [
- randomlistgen.randomlist[preCellType+'E'][j][i][s][0][1]
- for i in range(num_dict[preCellType])
- for j in range(num_PT)
- ]
- locs = [
- randomlistgen.randomlist[preCellType+'E'][j][i][s][0][0]
- for i in range(num_dict[preCellType])
- for j in range(num_PT)
- ]
- ruleLabel = preCellType +'_'+ postCellType + '_' + s
- netParams.connParams[ruleLabel] = {
- 'preConds': {'cellType': preCellType, 'ynorm': ynorm},
- 'postConds': {'cellType': postCellType, 'ynorm': ynorm},
- 'synMech': synMech,
- 'connList': [(i, j) for i in range(num_dict[preCellType]) for j in range(numCell)],
- 'weight': weights, #lambda pre, post: randomlistgen.randomlist[preCellType + 'E'][postCellType][post.index][pre.index][s][0][1],
- 'loc': locs, #lambda pre, post: randomlistgen.randomlist[preCellType + 'E'][postCellType][post.index][pre.index][s][0][0],
- #'delay': 'defaultDelay+dist_3D/propVelocity',
- 'synsPerConn': 1,
- 'sec': s,
- #'disynapticBias': disynapticBias,
- 'plast': {'mech': 'STDP', 'params': STDPparams}}
- else:
- if preCellType == postCellType:
- weights = [
- randomlistgen.randomlist['II'][postCellType][preCellType][j][i][0][1]
- for i in range(num_dict[preCellType]-1)
- for j in range(num_dict[postCellType])
- ]
- locs = [
- randomlistgen.randomlist['II'][postCellType][preCellType][j][i][0][0]
- for i in range(num_dict[preCellType]-1)
- for j in range(num_dict[postCellType])
- ]
- else:
- weights = [
- randomlistgen.randomlist['II'][postCellType][preCellType][j][i][0][1]
- for i in range(num_dict[preCellType])
- for j in range(num_dict[postCellType])
- ]
- locs = [
- randomlistgen.randomlist['II'][postCellType][preCellType][j][i][0][0]
- for i in range(num_dict[preCellType])
- for j in range(num_dict[postCellType])
- ]
- ruleLabel = preCellType + '_' + postCellType
- netParams.connParams[ruleLabel] = {
- 'preConds': {'cellType': preCellType, 'ynorm': ynorm},
- 'postConds': {'cellType': postCellType, 'ynorm': ynorm},
- 'synMech': synMech,
- 'connList': [(i, j) for i in range(num_dict[preCellType]-1) for j in range(numCell)],
- 'weight': weights, #lambda pre, post: randomlistgen.randomlist[preCellType + 'E'][postCellType][post.index][pre.index][sec][0][1],
- 'loc': locs, #lambda pre, post: randomlistgen.randomlist[preCellType+'E'][postCellType][post.index][pre.index][sec][0][0],
- #'delay': 'defaultDelay+dist_3D/propVelocity',
- 'synsPerConn': 1,
- 'sec': sec,
- #'disynapticBias': disynapticBias,
- 'plast': {'mech': 'STDP', 'params': STDPparams}}
- #------------------------------------------------------------------------------
- # Long-range connectivity parameters
- #------------------------------------------------------------------------------
- if cfg.addLongConn:
- longPops = ['S1_4K','S1_12K', 'OC']
- cellTypes = ['PT']
- for longPop in longPops:
- for secName in seclist['PT']['dend']:
- weights = [
- [syn[1] for syn in randomlistgen.randomlist['LongE'][longPop][secName][j][i]]
- for i in range(numCells_long)
- for j in range(num_PT)
- ]
- weights_syns = [[x, x] for x in weights]
- locs = [
- [syn[0] for syn in randomlistgen.randomlist['LongE'][longPop][secName][j][i]]
- for i in range(numCells_long)
- for j in range(num_PT)
- ]
- locs_syns = [[x, x] for x in locs]
- ruleLabel = longPop+'_'+secName
- netParams.connParams[ruleLabel] = {
- 'preConds': {'pop': longPop},
- 'postConds': {'cellType': 'PT'},
- 'synMech': ESynMech,
- 'connList': [(i, j) for i in range(numCells_long) for j in range(num_PT)],
- 'weight': weights_syns,
- 'loc': locs_syns,
- 'synsPerConn': math.ceil(nseg['PT'][secName]/numCells_long),
- 'delay': 'defaultDelay+dist_3D/propVelocity',
- 'sec': secName,
- 'plast': {'mech': 'STDP', 'params': STDPparams}}
- #------------------------------------------------------------------------------
- # Description
- #------------------------------------------------------------------------------
- netParams.description = """
- - M1 net, 6 layers, 7 cell types
- - NCD-based connectivity from Weiler et al. 2008; Anderson et al. 2010; Kiritani et al. 2012;
- Yamawaki & Shepherd 2015; Apicella et al. 2012
- - Parametrized version based on Sam's code
- - Updated cell models and mod files
- - Added parametrized current inputs
- - Fixed bug: prev was using cell models in /usr/site/nrniv/local/python/ instead of cells
- - Use 5 synsperconn for 5-comp cells (HH_reduced); and 1 for 1-comp cells (HH_simple)
- - Fixed bug: made global h params separate for each cell model
- - Fixed v_init for different cell models
- - New IT cell with same geom as PT
- - Cleaned cfg and moved background inputs here
- - Set EIGain and IEGain for each inh cell type
- - Added secLists for PT full
- - Fixed reduced CT (wrong vinit and file)
- - Added subcellular conn rules to distribute synapses
- - PT full model soma centered at 0,0,0
- - Set cfg seeds here to ensure they get updated
- - Added PVSOMGain and SOMPVGain
- - PT subcellular distribution as a cfg param
- - Cylindrical volume
- - DefaultDelay (for local conns) = 2ms
- - Added long range connections based on Yamawaki 2015a,b; Suter 2015; Hooks 2013; Meyer 2011
- - Updated cell densities based on Tsai 2009; Lefort 2009; Katz 2011; Wall 2016;
- - Separated PV and SOM of L5A vs L5B
- - Fixed bugs in local conn (PT, PV5, SOM5, L6)
- - Added perisom secList including all sections 50um from soma
- - Added subcellular conn rules (for both full and reduced models)
- - Improved cell models, including PV and SOM fI curves
- - Improved subcell conn rules based on data from Suter15, Hooks13 and others
- - Adapted Bdend L of reduced cell models
- - Made long pop rates a cfg param
- - Set threshold to 0.0 mV
- - Parametrized I->E/I layer weights
- - Added missing subconn rules (IT6->PT; S1,S2,cM1->IT/CT; long->SOM/PV)
- - Added threshold to weightNorm (PT threshold=10x)
- - weightNorm threshold as a cfg parameter
- - Separate PV->SOM, SOM->PV, SOM->SOM, PV->PV gains
- - Conn changes: reduced IT2->IT4, IT5B->CT6, IT5B,6->IT2,4,5A, IT2,4,5A,6->IT5B; increased CT->PV6+SOM6
- - Parametrized PT ih gbar
- - Added IFullGain parameter: I->E gain for full detailed cell models
- - Replace PT ih with Migliore 2012
- - Parametrized ihGbar, ihGbarBasal, dendNa, axonNa, axonRa, removeNa
- - Replaced cfg list params with dicts
- - Parametrized ihLkcBasal and AMPATau2Factor
- - Fixed synMechWeightFactor
- - Parametrized PT ih slope
- - Added disynapticBias to I->E (Yamawaki&Shepherd,2015)
- - Fixed E->CT bin 0.9-1.0
- - Replaced GABAB with exp2syn and adapted synMech ratios
- - Parametrized somaNa
- - Added ynorm condition to NetStims
- - Added option to play back recorded spikes into long-range inputs
- - Fixed Bdend pt3d y location
- - Added netParams.convertCellShapes = True to convert stylized geoms to 3d points
- - New layer boundaries, cell densities, conn, FS+SOM L4 grouped with L2/3, low cortical input to L4
- - Increased exc->L4 based on Yamawaki 2015 fig 5
- - v54: Moved from NetPyNE v0.7.9 to v0.9.1 (v54_batch1-6)
- - v54: Moved to NetPyNE v0.9.1 and py3 (v54_batch7 onwards)
- - v56: Reduced dt from 0.05 to 0.025 (note this version follows from v54, i.e. without new cell types; branch 'paper2019_py3')
- - v56: (included in prev version): Added cfg.KgbarFactor
- """
netParams.py at commit 8edb39e, no license · at the source
Overview
- School of Biomedical Sciences, LKS Faculty of Medicine, The University of Hong Kong, Hong Kong, China
- Advanced Biomedical Instrumentation Centre, Hong Kong Science Park, Shatin, New Territories, Hong Kong, China
- Department of Electrical and Electronic Engineering, The University of Hong Kong, Hong Kong, China
Abstract
Structural plasticity of dendritic spines has been observed during different learning paradigms, but how the functional dynamics of dendritic spines changes with memory processing and how these patterns relate to structural plasticity and dendritic integration remain unclear. Here, we perform longitudinal functional and structural in vivo imaging of the frontal association cortex in mice subject to fear conditioning and extinction over several days. We show that fear learning induced responsive spines that are more likely to be synchronous and clustered, which are consolidated over the following days but attenuated by extinction. We develop a causal inference model demonstrating that the active spine calcium signals during fear learning prevent the spines from being eliminated while promoting the elimination of neighboring spines after memory consolidation. Furthermore, the dendritic responsive signal reveals a learning-dependent tone discrimination pattern that is correlated to spines’ structural remodeling. Our findings provide in vivo evidence consistent with functional-structural link of dendritic spines in a bidirectional learning paradigm.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 2 matches between paragraphs and lines of code.
Zenodo 20301802
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
4768/reversible_spine_model
8edb39e800efb9af9fc2a80421d0de4267bdbab8, 2 September 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
543 files
- exp1_d1/
cells/ , Python, 342 linesCSTR6.py - exp1_d1/
cells/ , NEURON, 165 linesFS3.hoc - exp1_d1/
cells/ , Python, 382 linesITcell.py - exp1_d1/
cells/ , NEURON, 158 linesLTS3.hoc - exp1_d1/
cells/ , NEURON, 3,897 linesPTcell.hoc - exp1_d1/
cells/ , Python, 387 linesPTcell.py - exp1_d1/
cells/ , Python, 207 linesSPI6.py - exp1_d1/
cells/ , Python, 164 linescellDensity.py - exp1_d1/
cells/ , NEURON, 53 linesngf_cell.hoc - exp1_d1/
cells/ , NEURON, 328 linesvipcr_cell.hoc - exp1_d1/
conn/ , Python, 689 linesconn.py - exp1_d1/
conn/ , Python, 406 linesconn_dend.py - exp1_d1/
conn/ , Python, 747 linesconn_long.py - exp1_d1/
exp1_cfg_D1.py , Python, 271 lines - exp1_d1/
exp1_init_D1.py , Python, 1,568 lines - exp1_d1/
exp1_netParams.py , Python, 301 lines - exp1_d1/
mod/ , NEURON, 67 linesHCN1.mod - exp1_d1/
mod/ , NEURON, 88 linesIC.mod - exp1_d1/
mod/ , NEURON, 97 linesIKsin.mod - exp1_d1/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - exp1_d1/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - exp1_d1/
mod/ , NEURON, 124 linesNca.mod - exp1_d1/
mod/ , NEURON, 47 linesar_traub.mod - exp1_d1/
mod/ , NEURON, 74 linescadad.mod - exp1_d1/
mod/ , NEURON, 52 linescadyn.mod - exp1_d1/
mod/ , NEURON, 87 linescagk.mod - exp1_d1/
mod/ , NEURON, 139 linescal_mh.mod - exp1_d1/
mod/ , NEURON, 131 linescal_mig.mod - exp1_d1/
mod/ , NEURON, 144 linescan_mig.mod - exp1_d1/
mod/ , NEURON, 137 linescancr.mod - exp1_d1/
mod/ , NEURON, 127 linescanin.mod - exp1_d1/
mod/ , NEURON, 136 linescat_mig.mod - exp1_d1/
mod/ , NEURON, 67 linescat_traub.mod - exp1_d1/
mod/ , NEURON, 109 linescatcb.mod - exp1_d1/
mod/ , NEURON, 136 linesch_CavL.mod - exp1_d1/
mod/ , NEURON, 145 linesch_CavN.mod - exp1_d1/
mod/ , NEURON, 100 linesch_KCaS.mod - exp1_d1/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - exp1_d1/
mod/ , NEURON, 124 linesch_KvAngf.mod - exp1_d1/
mod/ , NEURON, 130 linesch_KvCaB.mod - exp1_d1/
mod/ , NEURON, 156 linesch_Navngf.mod - exp1_d1/
mod/ , NEURON, 62 linesch_leak.mod - exp1_d1/
mod/ , NEURON, 52 linesdipole.mod - exp1_d1/
mod/ , NEURON, 61 linesdipole_pp.mod - exp1_d1/
mod/ , NEURON, 210 linesgabab.mod - exp1_d1/
mod/ , NEURON, 88 linesh_BS.mod - exp1_d1/
mod/ , NEURON, 69 linesh_harnett.mod - exp1_d1/
mod/ , NEURON, 76 linesh_kole.mod - exp1_d1/
mod/ , NEURON, 102 linesh_migliore.mod - exp1_d1/
mod/ , NEURON, 76 lineshin.mod - exp1_d1/
mod/ , NEURON, 110 linesican_sidi.mod - exp1_d1/
mod/ , NEURON, 110 linesiccr.mod - exp1_d1/
mod/ , NEURON, 93 linesiconc_Ca.mod - exp1_d1/
mod/ , NEURON, 103 linesikscr.mod - exp1_d1/
mod/ , NEURON, 108 lineskBK.mod - exp1_d1/
mod/ , NEURON, 124 lineskap_BS.mod - exp1_d1/
mod/ , NEURON, 120 lineskapcb.mod - exp1_d1/
mod/ , NEURON, 124 lineskapin.mod - exp1_d1/
mod/ , NEURON, 145 lineskca.mod - exp1_d1/
mod/ , NEURON, 97 lineskctin.mod - exp1_d1/
mod/ , NEURON, 93 lineskdmc_BS.mod - exp1_d1/
mod/ , NEURON, 89 lineskdr_BS.mod - exp1_d1/
mod/ , NEURON, 109 lineskdrcr.mod - exp1_d1/
mod/ , NEURON, 103 lineskdrin.mod - exp1_d1/
mod/ , NEURON, 168 lineskm.mod - exp1_d1/
mod/ , NEURON, 164 lineskv.mod - exp1_d1/
mod/ , C/C++, 134 linesmisc.h - exp1_d1/
mod/ , NEURON, 92 linesmy_exp2syn.mod - exp1_d1/
mod/ , NEURON, 126 linesnafcr.mod - exp1_d1/
mod/ , NEURON, 170 linesnafx.mod - exp1_d1/
mod/ , NEURON, 109 linesnap_sidi.mod - exp1_d1/
mod/ , NEURON, 115 linesnax_BS.mod - exp1_d1/
mod/ , NEURON, 134 linesnaz.mod - exp1_d1/
mod/ , NEURON, 108 linesrandomizer.mod - exp1_d1/
mod/ , NEURON, 14 linessavedist.mod - exp1_d1/
mod/ , NEURON, 257 linesstdp.mod - exp1_d1/
mod/ , NEURON, 83 linesvecstim.mod - exp1_d1/
run_experiment_D1.py , Python, 182 lines - exp1_d3/
cells/ , Python, 342 linesCSTR6.py - exp1_d3/
cells/ , NEURON, 165 linesFS3.hoc - exp1_d3/
cells/ , Python, 382 linesITcell.py - exp1_d3/
cells/ , NEURON, 158 linesLTS3.hoc - exp1_d3/
cells/ , NEURON, 3,897 linesPTcell.hoc - exp1_d3/
cells/ , Python, 387 linesPTcell.py - exp1_d3/
cells/ , Python, 207 linesSPI6.py - exp1_d3/
cells/ , Python, 164 linescellDensity.py - exp1_d3/
cells/ , NEURON, 53 linesngf_cell.hoc - exp1_d3/
cells/ , NEURON, 328 linesvipcr_cell.hoc - exp1_d3/
conn/ , Python, 689 linesconn.py - exp1_d3/
conn/ , Python, 406 linesconn_dend.py - exp1_d3/
conn/ , Python, 747 linesconn_long.py - exp1_d3/
exp1_cfg_D3.py , Python, 275 lines - exp1_d3/
exp1_init_D3.py , Python, 1,570 lines - exp1_d3/
exp1_netParams.py , Python, 301 lines - exp1_d3/
mod/ , NEURON, 67 linesHCN1.mod - exp1_d3/
mod/ , NEURON, 88 linesIC.mod - exp1_d3/
mod/ , NEURON, 97 linesIKsin.mod - exp1_d3/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - exp1_d3/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - exp1_d3/
mod/ , NEURON, 124 linesNca.mod - exp1_d3/
mod/ , NEURON, 47 linesar_traub.mod - exp1_d3/
mod/ , NEURON, 74 linescadad.mod - exp1_d3/
mod/ , NEURON, 52 linescadyn.mod - exp1_d3/
mod/ , NEURON, 87 linescagk.mod - exp1_d3/
mod/ , NEURON, 139 linescal_mh.mod - exp1_d3/
mod/ , NEURON, 131 linescal_mig.mod - exp1_d3/
mod/ , NEURON, 144 linescan_mig.mod - exp1_d3/
mod/ , NEURON, 137 linescancr.mod - exp1_d3/
mod/ , NEURON, 127 linescanin.mod - exp1_d3/
mod/ , NEURON, 136 linescat_mig.mod - exp1_d3/
mod/ , NEURON, 67 linescat_traub.mod - exp1_d3/
mod/ , NEURON, 109 linescatcb.mod - exp1_d3/
mod/ , NEURON, 136 linesch_CavL.mod - exp1_d3/
mod/ , NEURON, 145 linesch_CavN.mod - exp1_d3/
mod/ , NEURON, 100 linesch_KCaS.mod - exp1_d3/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - exp1_d3/
mod/ , NEURON, 124 linesch_KvAngf.mod - exp1_d3/
mod/ , NEURON, 130 linesch_KvCaB.mod - exp1_d3/
mod/ , NEURON, 156 linesch_Navngf.mod - exp1_d3/
mod/ , NEURON, 62 linesch_leak.mod - exp1_d3/
mod/ , NEURON, 52 linesdipole.mod - exp1_d3/
mod/ , NEURON, 61 linesdipole_pp.mod - exp1_d3/
mod/ , NEURON, 210 linesgabab.mod - exp1_d3/
mod/ , NEURON, 88 linesh_BS.mod - exp1_d3/
mod/ , NEURON, 69 linesh_harnett.mod - exp1_d3/
mod/ , NEURON, 76 linesh_kole.mod - exp1_d3/
mod/ , NEURON, 102 linesh_migliore.mod - exp1_d3/
mod/ , NEURON, 76 lineshin.mod - exp1_d3/
mod/ , NEURON, 110 linesican_sidi.mod - exp1_d3/
mod/ , NEURON, 110 linesiccr.mod - exp1_d3/
mod/ , NEURON, 93 linesiconc_Ca.mod - exp1_d3/
mod/ , NEURON, 103 linesikscr.mod - exp1_d3/
mod/ , NEURON, 108 lineskBK.mod - exp1_d3/
mod/ , NEURON, 124 lineskap_BS.mod - exp1_d3/
mod/ , NEURON, 120 lineskapcb.mod - exp1_d3/
mod/ , NEURON, 124 lineskapin.mod - exp1_d3/
mod/ , NEURON, 145 lineskca.mod - exp1_d3/
mod/ , NEURON, 97 lineskctin.mod - exp1_d3/
mod/ , NEURON, 93 lineskdmc_BS.mod - exp1_d3/
mod/ , NEURON, 89 lineskdr_BS.mod - exp1_d3/
mod/ , NEURON, 109 lineskdrcr.mod - exp1_d3/
mod/ , NEURON, 103 lineskdrin.mod - exp1_d3/
mod/ , NEURON, 168 lineskm.mod - exp1_d3/
mod/ , NEURON, 164 lineskv.mod - exp1_d3/
mod/ , C/C++, 134 linesmisc.h - exp1_d3/
mod/ , NEURON, 92 linesmy_exp2syn.mod - exp1_d3/
mod/ , NEURON, 126 linesnafcr.mod - exp1_d3/
mod/ , NEURON, 170 linesnafx.mod - exp1_d3/
mod/ , NEURON, 109 linesnap_sidi.mod - exp1_d3/
mod/ , NEURON, 115 linesnax_BS.mod - exp1_d3/
mod/ , NEURON, 134 linesnaz.mod - exp1_d3/
mod/ , NEURON, 108 linesrandomizer.mod - exp1_d3/
mod/ , NEURON, 14 linessavedist.mod - exp1_d3/
mod/ , NEURON, 257 linesstdp.mod - exp1_d3/
mod/ , NEURON, 83 linesvecstim.mod - exp1_d3/
run_experiment_D3.py , Python, 182 lines - exp2/
cells/ , Python, 342 linesCSTR6.py - exp2/
cells/ , NEURON, 165 linesFS3.hoc - exp2/
cells/ , Python, 382 linesITcell.py - exp2/
cells/ , NEURON, 158 linesLTS3.hoc - exp2/
cells/ , NEURON, 3,897 linesPTcell.hoc - exp2/
cells/ , Python, 387 linesPTcell.py - exp2/
cells/ , Python, 207 linesSPI6.py - exp2/
cells/ , Python, 164 linescellDensity.py - exp2/
cells/ , NEURON, 53 linesngf_cell.hoc - exp2/
cells/ , NEURON, 328 linesvipcr_cell.hoc - exp2/
conn/ , Python, 689 linesconn.py - exp2/
conn/ , Python, 406 linesconn_dend.py - exp2/
conn/ , Python, 747 linesconn_long.py - exp2/
exp2_cfg.py , Python, 217 lines - exp2/
exp2_init.py , Python, 462 lines - exp2/
exp2_netParams.py , Python, 359 lines - exp2/
mod/ , NEURON, 67 linesHCN1.mod - exp2/
mod/ , NEURON, 88 linesIC.mod - exp2/
mod/ , NEURON, 97 linesIKsin.mod - exp2/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - exp2/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - exp2/
mod/ , NEURON, 124 linesNca.mod - exp2/
mod/ , NEURON, 47 linesar_traub.mod - exp2/
mod/ , NEURON, 74 linescadad.mod - exp2/
mod/ , NEURON, 52 linescadyn.mod - exp2/
mod/ , NEURON, 87 linescagk.mod - exp2/
mod/ , NEURON, 139 linescal_mh.mod - exp2/
mod/ , NEURON, 131 linescal_mig.mod - exp2/
mod/ , NEURON, 144 linescan_mig.mod - exp2/
mod/ , NEURON, 137 linescancr.mod - exp2/
mod/ , NEURON, 127 linescanin.mod - exp2/
mod/ , NEURON, 136 linescat_mig.mod - exp2/
mod/ , NEURON, 67 linescat_traub.mod - exp2/
mod/ , NEURON, 109 linescatcb.mod - exp2/
mod/ , NEURON, 136 linesch_CavL.mod - exp2/
mod/ , NEURON, 145 linesch_CavN.mod - exp2/
mod/ , NEURON, 100 linesch_KCaS.mod - exp2/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - exp2/
mod/ , NEURON, 124 linesch_KvAngf.mod - exp2/
mod/ , NEURON, 130 linesch_KvCaB.mod - exp2/
mod/ , NEURON, 156 linesch_Navngf.mod - exp2/
mod/ , NEURON, 62 linesch_leak.mod - exp2/
mod/ , NEURON, 52 linesdipole.mod - exp2/
mod/ , NEURON, 61 linesdipole_pp.mod - exp2/
mod/ , NEURON, 210 linesgabab.mod - exp2/
mod/ , NEURON, 88 linesh_BS.mod - exp2/
mod/ , NEURON, 69 linesh_harnett.mod - exp2/
mod/ , NEURON, 76 linesh_kole.mod - exp2/
mod/ , NEURON, 102 linesh_migliore.mod - exp2/
mod/ , NEURON, 76 lineshin.mod - exp2/
mod/ , NEURON, 110 linesican_sidi.mod - exp2/
mod/ , NEURON, 110 linesiccr.mod - exp2/
mod/ , NEURON, 93 linesiconc_Ca.mod - exp2/
mod/ , NEURON, 103 linesikscr.mod - exp2/
mod/ , NEURON, 108 lineskBK.mod - exp2/
mod/ , NEURON, 124 lineskap_BS.mod - exp2/
mod/ , NEURON, 120 lineskapcb.mod - exp2/
mod/ , NEURON, 124 lineskapin.mod - exp2/
mod/ , NEURON, 145 lineskca.mod - exp2/
mod/ , NEURON, 97 lineskctin.mod - exp2/
mod/ , NEURON, 93 lineskdmc_BS.mod - exp2/
mod/ , NEURON, 89 lineskdr_BS.mod - exp2/
mod/ , NEURON, 109 lineskdrcr.mod - exp2/
mod/ , NEURON, 103 lineskdrin.mod - exp2/
mod/ , NEURON, 168 lineskm.mod - exp2/
mod/ , NEURON, 164 lineskv.mod - exp2/
mod/ , C/C++, 134 linesmisc.h - exp2/
mod/ , NEURON, 92 linesmy_exp2syn.mod - exp2/
mod/ , NEURON, 126 linesnafcr.mod - exp2/
mod/ , NEURON, 170 linesnafx.mod - exp2/
mod/ , NEURON, 109 linesnap_sidi.mod - exp2/
mod/ , NEURON, 115 linesnax_BS.mod - exp2/
mod/ , NEURON, 134 linesnaz.mod - exp2/
mod/ , NEURON, 108 linesrandomizer.mod - exp2/
mod/ , NEURON, 14 linessavedist.mod - exp2/
mod/ , NEURON, 257 linesstdp.mod - exp2/
mod/ , NEURON, 83 linesvecstim.mod - exp2_norm/
cells/ , Python, 342 linesCSTR6.py - exp2_norm/
cells/ , NEURON, 165 linesFS3.hoc - exp2_norm/
cells/ , Python, 382 linesITcell.py - exp2_norm/
cells/ , NEURON, 158 linesLTS3.hoc - exp2_norm/
cells/ , NEURON, 3,897 linesPTcell.hoc - exp2_norm/
cells/ , Python, 387 linesPTcell.py - exp2_norm/
cells/ , Python, 207 linesSPI6.py - exp2_norm/
cells/ , Python, 164 linescellDensity.py - exp2_norm/
cells/ , NEURON, 53 linesngf_cell.hoc - exp2_norm/
cells/ , NEURON, 328 linesvipcr_cell.hoc - exp2_norm/
conn/ , Python, 689 linesconn.py - exp2_norm/
conn/ , Python, 406 linesconn_dend.py - exp2_norm/
conn/ , Python, 747 linesconn_long.py - exp2_norm/
exp2_cfg.py , Python, 217 lines - exp2_norm/
exp2_init.py , Python, 469 lines - exp2_norm/
exp2_netParams.py , Python, 353 lines - exp2_norm/
mod/ , NEURON, 67 linesHCN1.mod - exp2_norm/
mod/ , NEURON, 88 linesIC.mod - exp2_norm/
mod/ , NEURON, 97 linesIKsin.mod - exp2_norm/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - exp2_norm/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - exp2_norm/
mod/ , NEURON, 124 linesNca.mod - exp2_norm/
mod/ , NEURON, 47 linesar_traub.mod - exp2_norm/
mod/ , NEURON, 74 linescadad.mod - exp2_norm/
mod/ , NEURON, 52 linescadyn.mod - exp2_norm/
mod/ , NEURON, 87 linescagk.mod - exp2_norm/
mod/ , NEURON, 139 linescal_mh.mod - exp2_norm/
mod/ , NEURON, 131 linescal_mig.mod - exp2_norm/
mod/ , NEURON, 144 linescan_mig.mod - exp2_norm/
mod/ , NEURON, 137 linescancr.mod - exp2_norm/
mod/ , NEURON, 127 linescanin.mod - exp2_norm/
mod/ , NEURON, 136 linescat_mig.mod - exp2_norm/
mod/ , NEURON, 67 linescat_traub.mod - exp2_norm/
mod/ , NEURON, 109 linescatcb.mod - exp2_norm/
mod/ , NEURON, 136 linesch_CavL.mod - exp2_norm/
mod/ , NEURON, 145 linesch_CavN.mod - exp2_norm/
mod/ , NEURON, 100 linesch_KCaS.mod - exp2_norm/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - exp2_norm/
mod/ , NEURON, 124 linesch_KvAngf.mod - exp2_norm/
mod/ , NEURON, 130 linesch_KvCaB.mod - exp2_norm/
mod/ , NEURON, 156 linesch_Navngf.mod - exp2_norm/
mod/ , NEURON, 62 linesch_leak.mod - exp2_norm/
mod/ , NEURON, 52 linesdipole.mod - exp2_norm/
mod/ , NEURON, 61 linesdipole_pp.mod - exp2_norm/
mod/ , NEURON, 210 linesgabab.mod - exp2_norm/
mod/ , NEURON, 88 linesh_BS.mod - exp2_norm/
mod/ , NEURON, 69 linesh_harnett.mod - exp2_norm/
mod/ , NEURON, 76 linesh_kole.mod - exp2_norm/
mod/ , NEURON, 102 linesh_migliore.mod - exp2_norm/
mod/ , NEURON, 76 lineshin.mod - exp2_norm/
mod/ , NEURON, 110 linesican_sidi.mod - exp2_norm/
mod/ , NEURON, 110 linesiccr.mod - exp2_norm/
mod/ , NEURON, 93 linesiconc_Ca.mod - exp2_norm/
mod/ , NEURON, 103 linesikscr.mod - exp2_norm/
mod/ , NEURON, 108 lineskBK.mod - exp2_norm/
mod/ , NEURON, 124 lineskap_BS.mod - exp2_norm/
mod/ , NEURON, 120 lineskapcb.mod - exp2_norm/
mod/ , NEURON, 124 lineskapin.mod - exp2_norm/
mod/ , NEURON, 145 lineskca.mod - exp2_norm/
mod/ , NEURON, 97 lineskctin.mod - exp2_norm/
mod/ , NEURON, 93 lineskdmc_BS.mod - exp2_norm/
mod/ , NEURON, 89 lineskdr_BS.mod - exp2_norm/
mod/ , NEURON, 109 lineskdrcr.mod - exp2_norm/
mod/ , NEURON, 103 lineskdrin.mod - exp2_norm/
mod/ , NEURON, 168 lineskm.mod - exp2_norm/
mod/ , NEURON, 164 lineskv.mod - exp2_norm/
mod/ , C/C++, 134 linesmisc.h - exp2_norm/
mod/ , NEURON, 92 linesmy_exp2syn.mod - exp2_norm/
mod/ , NEURON, 126 linesnafcr.mod - exp2_norm/
mod/ , NEURON, 170 linesnafx.mod - exp2_norm/
mod/ , NEURON, 109 linesnap_sidi.mod - exp2_norm/
mod/ , NEURON, 115 linesnax_BS.mod - exp2_norm/
mod/ , NEURON, 134 linesnaz.mod - exp2_norm/
mod/ , NEURON, 108 linesrandomizer.mod - exp2_norm/
mod/ , NEURON, 14 linessavedist.mod - exp2_norm/
mod/ , NEURON, 257 linesstdp.mod - exp2_norm/
mod/ , NEURON, 83 linesvecstim.mod - exp2_rand/
cells/ , Python, 342 linesCSTR6.py - exp2_rand/
cells/ , NEURON, 165 linesFS3.hoc - exp2_rand/
cells/ , Python, 382 linesITcell.py - exp2_rand/
cells/ , NEURON, 158 linesLTS3.hoc - exp2_rand/
cells/ , NEURON, 3,897 linesPTcell.hoc - exp2_rand/
cells/ , Python, 387 linesPTcell.py - exp2_rand/
cells/ , Python, 207 linesSPI6.py - exp2_rand/
cells/ , Python, 164 linescellDensity.py - exp2_rand/
cells/ , NEURON, 53 linesngf_cell.hoc - exp2_rand/
cells/ , NEURON, 328 linesvipcr_cell.hoc - exp2_rand/
conn/ , Python, 689 linesconn.py - exp2_rand/
conn/ , Python, 406 linesconn_dend.py - exp2_rand/
conn/ , Python, 747 linesconn_long.py - exp2_rand/
exp2_cfg.py , Python, 217 lines - exp2_rand/
exp2_init.py , Python, 651 lines - exp2_rand/
exp2_netParams.py , Python, 353 lines - exp2_rand/
mod/ , NEURON, 67 linesHCN1.mod - exp2_rand/
mod/ , NEURON, 88 linesIC.mod - exp2_rand/
mod/ , NEURON, 97 linesIKsin.mod - exp2_rand/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - exp2_rand/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - exp2_rand/
mod/ , NEURON, 124 linesNca.mod - exp2_rand/
mod/ , NEURON, 47 linesar_traub.mod - exp2_rand/
mod/ , NEURON, 74 linescadad.mod - exp2_rand/
mod/ , NEURON, 52 linescadyn.mod - exp2_rand/
mod/ , NEURON, 87 linescagk.mod - exp2_rand/
mod/ , NEURON, 139 linescal_mh.mod - exp2_rand/
mod/ , NEURON, 131 linescal_mig.mod - exp2_rand/
mod/ , NEURON, 144 linescan_mig.mod - exp2_rand/
mod/ , NEURON, 137 linescancr.mod - exp2_rand/
mod/ , NEURON, 127 linescanin.mod - exp2_rand/
mod/ , NEURON, 136 linescat_mig.mod - exp2_rand/
mod/ , NEURON, 67 linescat_traub.mod - exp2_rand/
mod/ , NEURON, 109 linescatcb.mod - exp2_rand/
mod/ , NEURON, 136 linesch_CavL.mod - exp2_rand/
mod/ , NEURON, 145 linesch_CavN.mod - exp2_rand/
mod/ , NEURON, 100 linesch_KCaS.mod - exp2_rand/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - exp2_rand/
mod/ , NEURON, 124 linesch_KvAngf.mod - exp2_rand/
mod/ , NEURON, 130 linesch_KvCaB.mod - exp2_rand/
mod/ , NEURON, 156 linesch_Navngf.mod - exp2_rand/
mod/ , NEURON, 62 linesch_leak.mod - exp2_rand/
mod/ , NEURON, 52 linesdipole.mod - exp2_rand/
mod/ , NEURON, 61 linesdipole_pp.mod - exp2_rand/
mod/ , NEURON, 210 linesgabab.mod - exp2_rand/
mod/ , NEURON, 88 linesh_BS.mod - exp2_rand/
mod/ , NEURON, 69 linesh_harnett.mod - exp2_rand/
mod/ , NEURON, 76 linesh_kole.mod - exp2_rand/
mod/ , NEURON, 102 linesh_migliore.mod - exp2_rand/
mod/ , NEURON, 76 lineshin.mod - exp2_rand/
mod/ , NEURON, 110 linesican_sidi.mod - exp2_rand/
mod/ , NEURON, 110 linesiccr.mod - exp2_rand/
mod/ , NEURON, 93 linesiconc_Ca.mod - exp2_rand/
mod/ , NEURON, 103 linesikscr.mod - exp2_rand/
mod/ , NEURON, 108 lineskBK.mod - exp2_rand/
mod/ , NEURON, 124 lineskap_BS.mod - exp2_rand/
mod/ , NEURON, 120 lineskapcb.mod - exp2_rand/
mod/ , NEURON, 124 lineskapin.mod - exp2_rand/
mod/ , NEURON, 145 lineskca.mod - exp2_rand/
mod/ , NEURON, 97 lineskctin.mod - exp2_rand/
mod/ , NEURON, 93 lineskdmc_BS.mod - exp2_rand/
mod/ , NEURON, 89 lineskdr_BS.mod - exp2_rand/
mod/ , NEURON, 109 lineskdrcr.mod - exp2_rand/
mod/ , NEURON, 103 lineskdrin.mod - exp2_rand/
mod/ , NEURON, 168 lineskm.mod - exp2_rand/
mod/ , NEURON, 164 lineskv.mod - exp2_rand/
mod/ , C/C++, 134 linesmisc.h - exp2_rand/
mod/ , NEURON, 92 linesmy_exp2syn.mod - exp2_rand/
mod/ , NEURON, 126 linesnafcr.mod - exp2_rand/
mod/ , NEURON, 170 linesnafx.mod - exp2_rand/
mod/ , NEURON, 109 linesnap_sidi.mod - exp2_rand/
mod/ , NEURON, 115 linesnax_BS.mod - exp2_rand/
mod/ , NEURON, 134 linesnaz.mod - exp2_rand/
mod/ , NEURON, 108 linesrandomizer.mod - exp2_rand/
mod/ , NEURON, 14 linessavedist.mod - exp2_rand/
mod/ , NEURON, 257 linesstdp.mod - exp2_rand/
mod/ , NEURON, 83 linesvecstim.mod - orig/
cells/ , Python, 342 linesCSTR6.py - orig/
cells/ , NEURON, 165 linesFS3.hoc - orig/
cells/ , Python, 382 linesITcell.py - orig/
cells/ , NEURON, 158 linesLTS3.hoc - orig/
cells/ , NEURON, 3,897 linesPTcell.hoc - orig/
cells/ , Python, 387 linesPTcell.py - orig/
cells/ , Python, 207 linesSPI6.py - orig/
cells/ , Python, 164 linescellDensity.py - orig/
cells/ , NEURON, 53 linesngf_cell.hoc - orig/
cells/ , NEURON, 328 linesvipcr_cell.hoc - orig/
cfg.py , Python, 251 lines - orig/
conn/ , Python, 689 linesconn.py - orig/
conn/ , Python, 406 linesconn_dend.py - orig/
conn/ , Python, 747 linesconn_long.py - orig/
init_270225.py , Python, 549 lines - orig/
mod/ , NEURON, 67 linesHCN1.mod - orig/
mod/ , NEURON, 88 linesIC.mod - orig/
mod/ , NEURON, 97 linesIKsin.mod - orig/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - orig/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - orig/
mod/ , NEURON, 124 linesNca.mod - orig/
mod/ , NEURON, 47 linesar_traub.mod - orig/
mod/ , NEURON, 74 linescadad.mod - orig/
mod/ , NEURON, 52 linescadyn.mod - orig/
mod/ , NEURON, 87 linescagk.mod - orig/
mod/ , NEURON, 139 linescal_mh.mod - orig/
mod/ , NEURON, 131 linescal_mig.mod - orig/
mod/ , NEURON, 144 linescan_mig.mod - orig/
mod/ , NEURON, 137 linescancr.mod - orig/
mod/ , NEURON, 127 linescanin.mod - orig/
mod/ , NEURON, 136 linescat_mig.mod - orig/
mod/ , NEURON, 67 linescat_traub.mod - orig/
mod/ , NEURON, 109 linescatcb.mod - orig/
mod/ , NEURON, 136 linesch_CavL.mod - orig/
mod/ , NEURON, 145 linesch_CavN.mod - orig/
mod/ , NEURON, 100 linesch_KCaS.mod - orig/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - orig/
mod/ , NEURON, 124 linesch_KvAngf.mod - orig/
mod/ , NEURON, 130 linesch_KvCaB.mod - orig/
mod/ , NEURON, 156 linesch_Navngf.mod - orig/
mod/ , NEURON, 62 linesch_leak.mod - orig/
mod/ , NEURON, 52 linesdipole.mod - orig/
mod/ , NEURON, 61 linesdipole_pp.mod - orig/
mod/ , NEURON, 210 linesgabab.mod - orig/
mod/ , NEURON, 88 linesh_BS.mod - orig/
mod/ , NEURON, 69 linesh_harnett.mod - orig/
mod/ , NEURON, 76 linesh_kole.mod - orig/
mod/ , NEURON, 102 linesh_migliore.mod - orig/
mod/ , NEURON, 76 lineshin.mod - orig/
mod/ , NEURON, 110 linesican_sidi.mod - orig/
mod/ , NEURON, 110 linesiccr.mod - orig/
mod/ , NEURON, 93 linesiconc_Ca.mod - orig/
mod/ , NEURON, 103 linesikscr.mod - orig/
mod/ , NEURON, 108 lineskBK.mod - orig/
mod/ , NEURON, 124 lineskap_BS.mod - orig/
mod/ , NEURON, 120 lineskapcb.mod - orig/
mod/ , NEURON, 124 lineskapin.mod - orig/
mod/ , NEURON, 145 lineskca.mod - orig/
mod/ , NEURON, 97 lineskctin.mod - orig/
mod/ , NEURON, 93 lineskdmc_BS.mod - orig/
mod/ , NEURON, 89 lineskdr_BS.mod - orig/
mod/ , NEURON, 109 lineskdrcr.mod - orig/
mod/ , NEURON, 103 lineskdrin.mod - orig/
mod/ , NEURON, 168 lineskm.mod - orig/
mod/ , NEURON, 164 lineskv.mod - orig/
mod/ , C/C++, 134 linesmisc.h - orig/
mod/ , NEURON, 92 linesmy_exp2syn.mod - orig/
mod/ , NEURON, 126 linesnafcr.mod - orig/
mod/ , NEURON, 170 linesnafx.mod - orig/
mod/ , NEURON, 109 linesnap_sidi.mod - orig/
mod/ , NEURON, 115 linesnax_BS.mod - orig/
mod/ , NEURON, 134 linesnaz.mod - orig/
mod/ , NEURON, 108 linesrandomizer.mod - orig/
mod/ , NEURON, 14 linessavedist.mod - orig/
mod/ , NEURON, 257 linesstdp.mod - orig/
mod/ , NEURON, 83 linesvecstim.mod - orig/
netParams.py , Python, 937 lines, 1 match - seed_search/
cells/ , Python, 342 linesCSTR6.py - seed_search/
cells/ , NEURON, 165 linesFS3.hoc - seed_search/
cells/ , Python, 382 linesITcell.py - seed_search/
cells/ , NEURON, 158 linesLTS3.hoc - seed_search/
cells/ , NEURON, 3,897 linesPTcell.hoc - seed_search/
cells/ , Python, 387 linesPTcell.py - seed_search/
cells/ , Python, 207 linesSPI6.py - seed_search/
cells/ , Python, 164 linescellDensity.py - seed_search/
cells/ , NEURON, 53 linesngf_cell.hoc - seed_search/
cells/ , NEURON, 328 linesvipcr_cell.hoc - seed_search/
cfg.py , Python, 251 lines - seed_search/
conn/ , Python, 689 linesconn.py - seed_search/
conn/ , Python, 406 linesconn_dend.py - seed_search/
conn/ , Python, 747 linesconn_long.py - seed_search/
init.py , Python, 592 lines - seed_search/
mod/ , NEURON, 67 linesHCN1.mod - seed_search/
mod/ , NEURON, 88 linesIC.mod - seed_search/
mod/ , NEURON, 97 linesIKsin.mod - seed_search/
mod/ , NEURON, 85 linesMyExp2SynBB.mod - seed_search/
mod/ , NEURON, 110 linesMyExp2SynNMDABB.mod - seed_search/
mod/ , NEURON, 124 linesNca.mod - seed_search/
mod/ , NEURON, 47 linesar_traub.mod - seed_search/
mod/ , NEURON, 74 linescadad.mod - seed_search/
mod/ , NEURON, 52 linescadyn.mod - seed_search/
mod/ , NEURON, 87 linescagk.mod - seed_search/
mod/ , NEURON, 139 linescal_mh.mod - seed_search/
mod/ , NEURON, 131 linescal_mig.mod - seed_search/
mod/ , NEURON, 144 linescan_mig.mod - seed_search/
mod/ , NEURON, 137 linescancr.mod - seed_search/
mod/ , NEURON, 127 linescanin.mod - seed_search/
mod/ , NEURON, 136 linescat_mig.mod - seed_search/
mod/ , NEURON, 67 linescat_traub.mod - seed_search/
mod/ , NEURON, 109 linescatcb.mod - seed_search/
mod/ , NEURON, 136 linesch_CavL.mod - seed_search/
mod/ , NEURON, 145 linesch_CavN.mod - seed_search/
mod/ , NEURON, 100 linesch_KCaS.mod - seed_search/
mod/ , NEURON, 141 linesch_Kdrfastngf.mod - seed_search/
mod/ , NEURON, 124 linesch_KvAngf.mod - seed_search/
mod/ , NEURON, 130 linesch_KvCaB.mod - seed_search/
mod/ , NEURON, 156 linesch_Navngf.mod - seed_search/
mod/ , NEURON, 62 linesch_leak.mod - seed_search/
mod/ , NEURON, 52 linesdipole.mod - seed_search/
mod/ , NEURON, 61 linesdipole_pp.mod - seed_search/
mod/ , NEURON, 210 linesgabab.mod - seed_search/
mod/ , NEURON, 88 linesh_BS.mod - seed_search/
mod/ , NEURON, 69 linesh_harnett.mod - seed_search/
mod/ , NEURON, 76 linesh_kole.mod - seed_search/
mod/ , NEURON, 102 linesh_migliore.mod - seed_search/
mod/ , NEURON, 76 lineshin.mod - seed_search/
mod/ , NEURON, 110 linesican_sidi.mod - seed_search/
mod/ , NEURON, 110 linesiccr.mod - seed_search/
mod/ , NEURON, 93 linesiconc_Ca.mod - seed_search/
mod/ , NEURON, 103 linesikscr.mod - seed_search/
mod/ , NEURON, 108 lineskBK.mod - seed_search/
mod/ , NEURON, 124 lineskap_BS.mod - seed_search/
mod/ , NEURON, 120 lineskapcb.mod - seed_search/
mod/ , NEURON, 124 lineskapin.mod - seed_search/
mod/ , NEURON, 145 lineskca.mod - seed_search/
mod/ , NEURON, 97 lineskctin.mod - seed_search/
mod/ , NEURON, 93 lineskdmc_BS.mod - seed_search/
mod/ , NEURON, 89 lineskdr_BS.mod - seed_search/
mod/ , NEURON, 109 lineskdrcr.mod - seed_search/
mod/ , NEURON, 103 lineskdrin.mod - seed_search/
mod/ , NEURON, 168 lineskm.mod - seed_search/
mod/ , NEURON, 164 lineskv.mod - seed_search/
mod/ , C/C++, 134 linesmisc.h - seed_search/
mod/ , NEURON, 92 linesmy_exp2syn.mod - seed_search/
mod/ , NEURON, 126 linesnafcr.mod - seed_search/
mod/ , NEURON, 170 linesnafx.mod - seed_search/
mod/ , NEURON, 109 linesnap_sidi.mod - seed_search/
mod/ , NEURON, 115 linesnax_BS.mod - seed_search/
mod/ , NEURON, 134 linesnaz.mod - seed_search/
mod/ , NEURON, 108 linesrandomizer.mod - seed_search/
mod/ , NEURON, 14 linessavedist.mod - seed_search/
mod/ , NEURON, 257 linesstdp.mod - seed_search/
mod/ , NEURON, 83 linesvecstim.mod - seed_search/
netParams.py , Python, 933 lines, 1 match - seed_search/
search.py , Python, 380 lines - README.md, Text, 132 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 542 scripts, each with its path and the digest of its content;
- 2 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data, code, and materials availability
This study did not generate new materials. All data and code needed to evaluate and reproduce the results in the paper are present in the paper and/
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Funding: added National Natural Science Foundation of China: N_HKU735/21; Research Grants Council, University Grants Committee: C1024-22GF, C7074-21G, 17103922, C7011-24GF, 17108821, C7026-25G, 17102525; Innovation and Technology Commission; Health and Medical Research Fund: 09200966; Li Ka Shing Faculty of Medicine, University of Hong Kong
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 8 MeSH terms, 84 references.
Cite
This paper
Li, X., Zheng, Q., Wong, K. H. K., Wong, K. K. Y., & Lai, C. S. W. (2026). Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo. Science advances, 12(29), eaec3961. https://
BibTeX
@article{li2026linking,
author = {Li, Xiaoyang and Zheng, Qiyu and Wong, Kim Hoi Kin and Wong, Kenneth Kin Yip and Lai, Cora Sau Wan},
title = {{Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo}},
journal = {Science advances},
year = {2026},
month = jul,
volume = {12},
number = {29},
pages = {eaec3961},
publisher = {American Association for the Advancement of Science},
issn = {2375-2548},
doi = {10.1126/
url = {https://
pmid = {42467781},
pmcid = {PMC13378561}
}
RIS
TY - JOUR
AU - Li, Xiaoyang
AU - Zheng, Qiyu
AU - Wong, Kim Hoi Kin
AU - Wong, Kenneth Kin Yip
AU - Lai, Cora Sau Wan
TI - Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo
T2 - Science advances
J2 - Sci Adv
PY - 2026
DA - 2026/
VL - 12
IS - 29
SP - eaec3961
SN - 2375-2548
PB - American Association for the Advancement of Science
DO - 10.1126/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1126/
"type": "article-journal",
"title": "Linking functional and structural dendritic spine remodeling during fear learning and extinction in vivo",
"container-title": "Science advances",
"author": [
{
"family": "Li",
"given": "Xiaoyang"
},
{
"family": "Zheng",
"given": "Qiyu"
},
{
"family": "Wong",
"given": "Kim Hoi Kin"
},
{
"family": "Wong",
"given": "Kenneth Kin Yip"
},
{
"family": "Lai",
"given": "Cora Sau Wan"
}
],
"container-title-short":
"volume": "12",
"issue": "29",
"page": "eaec3961",
"DOI": "10.1126/
"PMID": "42467781",
"PMCID": "PMC13378561",
"ISSN": "2375-2548",
"publisher": "American Association for the Advancement of Science",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
17
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1016/j.celrep.2026.117793 [code]
- Clustered inputs engage dendritic nonlinearities and calcium signaling to support efficient place-field formation in CA1 pyramidal neurons.Journal: Cell reportsIn common: NEURON, pandas, SciPy, 2 other tools, 14 references
- [2] doi:10.1016/j.isci.2026.117010 [code]
- Deep learning-assisted mapping of dendritic spines using sequential 2D two-photon calcium imaging.Journal: iScienceIn common: pandas, SciPy, Matplotlib, 1 other tool, histology / microscopy, 9 references
- [3] doi:10.1038/s41467-026-77800-w [code]
- Learning reorganizes dendritic and stabilizes axon initial segment inhibitory synapses in CA1 pyramidal neurons.Journal: Nature communicationsIn common: mouse, 8 references
- [4] doi:10.1126/sciadv.adz4123 [code]
- Highly attenuated dendritic propagation of isolated synaptic potentials in vivo.Journal: Science advancesIn common: mouse, 8 references
- [5] doi:10.7554/elife.108352 [code]
- Analysis of dendritic input currents during place field dynamics.Journal: eLifeIn common: NEURON, pandas, Matplotlib, 1 other tool, 5 references
- [6] doi:10.7554/elife.89629 [code]
- Active dendrites enable robust spiking computations despite timing jitter.Journal: eLifeIn common: NEURON, pandas, Matplotlib, 1 other tool, 5 references
- [7] doi:10.1073/pnas.2533168123 [code]
- Dendritic morphology and synaptic nonlinearities enhance functional complexity in human cortical neurons.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: NEURON, pandas, SciPy, 2 other tools, 4 references
- [8] doi:10.7554/elife.111876 [code]
- Distinct sensorimotor encoding in tuft dendrites and somata associated with action, correction, and learning.Journal: eLifeIn common: Pillow, pandas, SciPy, 2 other tools, mouse, 3 references
- [9] doi:10.7554/elife.95562 [code]
- Spatially targeted inhibitory rhythms differentially affect neuronal integration.Journal: eLifeIn common: pandas, SciPy, Matplotlib, 1 other tool, 4 references
- [10] doi: [code]
- Going deeper with morphologically detailed neural networks by simulation-based gradient propagationJournal: Frontiers in computational neuroscienceIn common: NEURON, SciPy, Matplotlib, 1 other tool, 3 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 2 repositories of the authors' code, each at its verified commit and with its license, 542 scripts, and 2 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:b63a2c975d504174…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
