Model of the hippocampus over the sleep-wake cycle using Hodgkin-Huxley neurons (Aussel et al 2018)

 Download zip file 
Help downloading and running models
Accession:243350
" ...we propose a computational model of the hippocampal formation based on a realistic topology and synaptic connectivity, and we analyze the effect of different changes on the network, namely the variation of synaptic conductances, the variations of the CAN channel conductance and the variation of inputs. By using a detailed simulation of intracerebral recordings, we show that this is able to reproduce both the theta-nested gamma oscillations that are seen in awake brains and the sharp-wave ripple complexes measured during slow-wave sleep. The results of our simulations support the idea that the functional connectivity of the hippocampus, modulated by the sleep-wake variations in Acetylcholine concentration, is a key factor in controlling its rhythms."
Reference:
1 . Aussel A, Buhry L, Tyvaert L, Ranta R (2018) A detailed anatomical and mathematical model of the hippocampal formation for the generation of sharp-wave ripples and theta-nested gamma oscillations. J Comput Neurosci 45:207-221 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hodgkin-Huxley neuron;
Channel(s):
Gap Junctions:
Receptor(s): AMPA; GabaA;
Gene(s):
Transmitter(s): Acetylcholine;
Simulation Environment: Brian 2;
Model Concept(s): Sleep; Oscillations; Gamma oscillations; Theta oscillations;
Implementer(s): Aussel, Amélie [amelie.aussel at loria.fr]; Buhry, Laure ; Ranta, Radu ;
Search NeuronDB for information about:  GabaA; AMPA; Acetylcholine;
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from brian2 import * 
import scipy        
from scipy import signal
import ast

def window_rms(a, window_size):
  a2 = numpy.power(a,2)
  window = ones(window_size)/float(window_size)
  return sqrt(convolve(a2, window, 'valid'))

def event_detection_and_analysis(sig,sigstr,fs):
    record_dt=1/fs
    start_plot_time=50*msecond
    start_ind=int(start_plot_time/record_dt)
    sig_rms=window_rms(sig[start_ind:]-mean(sig[start_ind:]), int(10*ms/record_dt))
    sig_std=std(sig_rms)

    #detection des events
    all_begin=[]
    all_end=[]
    begin=0
    peak=False
    
    peak_cond=4*sig_std
    boundaries_cond=2*sig_std
    
    tmax=60*second
    
    for ind in range(len(sig_rms)):
        t=ind*record_dt
        if t>tmax:
            break
        rms=sig_rms[ind]
        if rms>boundaries_cond and begin==0:
            begin=ind
        if rms>peak_cond and peak==False:    
        #elif rms>3*sig_std and peak==False:
            peak=True
        #elif rms<0.2*sig_std and peak:    
        elif rms<boundaries_cond and peak:
            all_begin.append(begin)
            all_end.append(ind)
            begin=0
            end=0
            peak=False
        elif rms<boundaries_cond and not peak:
            begin=0
            end=0
            peak=False
            
    all_duration=[]
    all_spectrum=[]
    all_spectrum_peak=[]
    
    N=3
    nyq = 0.5 * fs
    low =30 / nyq
    high = 300 / nyq
    fs=fs/Hz
    test_ind=0

    for i in range(len(all_begin)):
        event=sig[all_begin[i]+start_ind:all_end[i]+start_ind]
        
        duration=len(event)*record_dt
        b, a = scipy.signal.butter(N, [low, high], btype='band')
        try :    
            y=scipy.signal.filtfilt(b,a,event)  
            f, Pxx_spec = signal.periodogram(y, fs,'flattop', scaling='spectrum')
            
            all_duration.append(duration)
            all_spectrum.append(Pxx_spec)
            all_spectrum_peak.append(f[argmax(Pxx_spec)])
            test_ind+=1
        except : 
            test_ind+=1
    print('Analysis of the simulation '+sigstr+' :')
    print("Number of studied events : "+str(test_ind)) 

    mean_peak=mean(all_spectrum_peak)
    print('Mean peak frequency of the events=' +str(mean_peak)+' Hz')
    std_peak=std(all_spectrum_peak)
    print('Standard deviation of the peak frequency of the events=' +str(std_peak)+' Hz')
    min_peak=min(all_spectrum_peak)
    print('Minimum peak frequency of the events=' +str(min_peak)+' Hz')
    max_peak=max(all_spectrum_peak)
    print('Maximum peak frequency of the events=' +str(max_peak)+' Hz')
    print(' ') 
    
    mean_dur=mean(all_duration)
    print('Mean duration of the events=' +str(mean_dur*1000)+' ms')
    std_dur=std(all_duration)
    print('Std of the duration  of the events=' +str(std_dur*1000)+' ms')
    min_dur=min(all_duration)
    print('Minimum duration of the events=' +str(min_dur))
    max_dur=max(all_duration)
    print('Maximum duration of the events=' +str(max_dur))
    
    return all_spectrum_peak,all_duration
    

Loading data, please wait...