Functional consequences of cortical circuit abnormalities on gamma in schizophrenia (Spencer 2009)

 Download zip file 
Help downloading and running models
"Schizophrenia is characterized by cortical circuit abnormalities, which might be reflected in gamma-frequency (30–100 Hz) oscillations in the electroencephalogram. Here we used a computational model of cortical circuitry to examine the effects that neural circuit abnormalities might have on gamma generation and network excitability. The model network consisted of 1000 leaky integrateand- fi re neurons with realistic connectivity patterns and proportions of neuron types [pyramidal cells (PCs), regular-spiking inhibitory interneurons, and fast-spiking interneurons (FSIs)]. ... The results of this study suggest that a multimodal approach, combining non-invasive neurophysiological and structural measures, might be able to distinguish between different neural circuit abnormalities in schizophrenia patients. ..."
1 . Spencer KM (2009) The functional consequences of cortical circuit abnormalities on gamma oscillations in schizophrenia: insights from computational modeling. Front Hum Neurosci 3:33 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Neocortex;
Cell Type(s):
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Simulation Environment: IDL;
Model Concept(s): Oscillations; Simplified Models; Schizophrenia; Brain Rhythms;
Implementer(s): Spencer, Kevin M. [kevin_spencer at];
Search NeuronDB for information about:  GabaA; AMPA; NMDA;
pro results_new, run, str1, str2=str2, nophc=nophc

common path, home_path, single_path, avg_path, ps_path, latadj_path, dv_path, pca_path, bhv_path, $
             img_path, ers_path, ica_path
common params, n_ids
common net_params, N_all, N_e, N_ir, N_if, dt, inv_dt, update, t_init, t_pre, t_stim, t_post, t_all
common vars, W, W_noise

if not(keyword_set(str2)) then  str2=''

conds = run + str1 + ['010','020','030','040','050','060','070','080','090','100'] + str2
conds = [run,conds]
n_conds = n_elements(conds)

Vm = dblarr(N_all,t_all/inv_dt)
fft_Vm = complexarr(N_all,t_stim/inv_dt)
pow_Vm = fltarr(N_all,t_stim/inv_dt)
spk = intarr(N_all,t_all/inv_dt)  ; spike data
fft_spk = complexarr(N_all,t_stim/inv_dt)
pow_spk = fltarr(N_all,t_stim/inv_dt)

pwt_e = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwt_e[2,*]=0.
pwt_i = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwt_i[2,*]=1.
pwt_a = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwt_a[2,*]=2.
spk_e = fltarr(n_ids+n_conds, t_stim/inv_dt)
spk_i = fltarr(n_ids+n_conds, t_stim/inv_dt)
spk_a = fltarr(n_ids+n_conds, t_stim/inv_dt)
pwe_e = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwe_e[2,*]=3.
pwe_i = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwe_i[2,*]=4.
pwe_a = fltarr(n_ids+n_conds, t_stim/inv_dt) & pwe_a[2,*]=5.
phl_e = fltarr(n_ids+n_conds, t_stim/inv_dt) & phl_e[2,*]=6.
phl_i = fltarr(n_ids+n_conds, t_stim/inv_dt) & phl_i[2,*]=7.
phl_a = fltarr(n_ids+n_conds, t_stim/inv_dt) & phl_a[2,*]=8.
phc_e_ir = fltarr(n_ids+n_conds, t_stim/inv_dt) & phc_e_ir[2,*]=9.
phc_e_if = fltarr(n_ids+n_conds, t_stim/inv_dt) & phc_e_if[2,*]=10.
phc_ir_if = fltarr(n_ids+n_conds, t_stim/inv_dt) & phc_ir_if[2,*]=11.

stim_ix = lindgen(t_stim/inv_dt) + (t_init + t_pre)/inv_dt
;hwin = hanning(t_stim/inv_dt)
freq_axis = (1000./dt)*findgen(t_stim)/(t_stim)

openw, dat_fu, ers_path + run + str1 + str2 + '_Vm.wdat', /get_lun
openw, pwt_fu, dv_path + run + str1 + str2 + '_pwt.txt', /get_lun
printf, pwt_fu, conds[0], '...', conds[n_conds-1]
openw, pwt2_fu, dv_path + run + str1 + str2 + '_pwt2.txt', /get_lun
printf, pwt2_fu, conds[0], '...', conds[n_conds-1]
openw, pwe_fu, dv_path + run + str1 + str2 + '_pwe.txt', /get_lun
printf, pwe_fu, conds[0], '...', conds[n_conds-1]
openw, phl_fu, dv_path + run + str1 + str2 + '_phl.txt', /get_lun
printf, phl_fu, conds[0], '...', conds[n_conds-1]
openw, phc_fu, dv_path + run + str1 + str2 + '_phc.txt', /get_lun
printf, phc_fu, conds[0], '...', conds[n_conds-1]

for i=0,n_conds-1 do begin
  openr, fu, single_path + conds[i] + '_Vm.dat', /get_lun
  readu, fu, Vm  &  free_lun, fu
  openr, fu, single_path + conds[i] + '_spk.dat', /get_lun
  readu, fu, spk  &  free_lun, fu

  ; Power Spectra
  for n=0,N_all-1 do begin
    fft_Vm[n,*] = fft(Vm[n,stim_ix], -1)
    pow_Vm[n,*] = abs(fft_Vm[n,*])^2
    ;fft_spk[n,*] = fft(spk[n,stim_ix], -1)
    ;pow_spk[n,*] = abs(fft_spk[n,*])^2

  pwt_e[n_ids+i,*] = total(pow_Vm[0:N_e-1,*],1)/N_e
  pwt_i[n_ids+i,*] = total(pow_Vm[N_e:N_e+N_ir-1,*],1)/N_ir
  pwt_a[n_ids+i,*] = total(pow_Vm[N_e+N_ir:*,*],1)/N_if

  spk_e[n_ids+i,*] = total(spk[0:N_e-1,stim_ix],1)/N_e
  spk_i[n_ids+i,*] = total(spk[N_e:N_e+N_ir-1,stim_ix],1)/N_ir
  spk_a[n_ids+i,*] = total(spk[N_e+N_ir:*,stim_ix],1)/N_if

  avg_Vm_e = total(Vm[0:N_e-1,stim_ix],1)/N_e
  avg_Vm_i = total(Vm[N_e:N_e+N_ir-1,stim_ix],1)/N_ir
  avg_Vm_a = total(Vm[N_e+N_ir:*,stim_ix],1)/N_if

  pwe_e[n_ids+i,*] = abs(fft(avg_Vm_e, -1))^2
  pwe_i[n_ids+i,*] = abs(fft(avg_Vm_i, -1))^2
  pwe_a[n_ids+i,*] = abs(fft(avg_Vm_a, -1))^2

  phl_e[n_ids+i,*] = abs(total((fft_Vm[0:N_e-1,*]/abs(fft_Vm[0:N_e-1,*])),1)/N_e)
  phl_i[n_ids+i,*] = abs(total((fft_Vm[N_e:N_e+N_ir-1,*]/abs(fft_Vm[N_e:N_e+N_ir-1,*])),1)/N_ir)
  phl_a[n_ids+i,*] = abs(total((fft_Vm[N_e+N_ir:*,*]/abs(fft_Vm[N_e+N_ir:*,*])),1)/N_if)

  if not keyword_set(nophc) then begin
    diff=fltarr(t_stim/inv_dt,N_e*N_ir)  &  count=long(0)
    for n=0,N_e-1 do $
      for m=N_e,N_e+N_ir-1 do begin
        diff[*,count] = atan(fft_Vm[n,*],/phase) - atan(fft_Vm[m,*],/phase)
    phc_e_ir[n_ids+i,*] = abs(total(exp(complex(0,1)*diff[*,*]),2))/(N_e*N_ir)

    diff=fltarr(t_stim/inv_dt,N_e*N_if)  &  count=long(0)
    for n=0,N_e-1 do $
      for m=N_e+N_ir,N_all-1 do begin
        diff[*,count] = atan(fft_Vm[n,*],/phase) - atan(fft_Vm[m,*],/phase)
    phc_e_if[n_ids+i,*] = abs(total(exp(complex(0,1)*diff[*,*]),2))/(N_e*N_if)

    diff=fltarr(t_stim/inv_dt,N_ir*N_if)  &  count=long(0)
    for n=N_e,N_e+N_ir-1 do $
      for m=N_e+N_ir,N_all-1 do begin
        diff[*,count] = atan(fft_Vm[n,*],/phase) - atan(fft_Vm[m,*],/phase)
    phc_ir_if[n_ids+i,*] = abs(total(exp(complex(0,1)*diff[*,*]),2))/(N_ir*N_if)

    phc_e_ir_max = max(phc_e_ir[n_ids+i,1:49], phc_e_ir_max_i)
    phc_e_if_max = max(phc_e_if[n_ids+i,1:49], phc_e_if_max_i)
    phc_ir_if_max = max(phc_ir_if[n_ids+i,1:49], phc_ir_if_max_i)

    printf, phc_fu, phc_e_ir_max, phc_e_if_max, phc_ir_if_max, $
            round(freq_axis[phc_e_ir_max_i+1]), round(freq_axis[phc_e_if_max_i+1]), round(freq_axis[phc_ir_if_max_i+1])
  endif  ; no_phc

  pwt_e_max = max(pwt_e[n_ids+i,1:99], pwt_e_max_i)
  pwt_i_max = max(pwt_i[n_ids+i,1:99], pwt_i_max_i)
  pwt_a_max = max(pwt_a[n_ids+i,1:99], pwt_a_max_i)

  pwt_e_mean = mean(pwt_e[n_ids+i,1:99])
  pwt_i_mean = mean(pwt_i[n_ids+i,1:99])
  pwt_a_mean = mean(pwt_a[n_ids+i,1:99])

  spk_e_mean = mean(spk_e[n_ids+i,*])*1000.  ; converting to spikes/s
  spk_i_mean = mean(spk_i[n_ids+i,*])*1000.
  spk_a_mean = mean(spk_a[n_ids+i,*])*1000.

  pwe_e_max = max(pwe_e[n_ids+i,1:99], pwe_e_max_i)
  pwe_i_max = max(pwe_i[n_ids+i,1:99], pwe_i_max_i)
  pwe_a_max = max(pwe_a[n_ids+i,1:99], pwe_a_max_i)

  phl_e_max = max(phl_e[n_ids+i,1:99], phl_e_max_i)
  phl_i_max = max(phl_i[n_ids+i,1:99], phl_i_max_i)
  phl_a_max = max(phl_a[n_ids+i,1:99], phl_a_max_i)

  printf, pwt_fu, pwt_e_max, pwt_i_max, pwt_a_max, $
          round(freq_axis[pwt_e_max_i+1]), round(freq_axis[pwt_i_max_i+1]), round(freq_axis[pwt_a_max_i+1])
  printf, pwt2_fu, pwt_e_mean, pwt_i_mean, pwt_a_mean, spk_e_mean, spk_i_mean, spk_a_mean
  printf, pwe_fu, pwe_e_max, pwe_i_max, pwe_a_max, $
          round(freq_axis[pwe_e_max_i+1]), round(freq_axis[pwe_i_max_i+1]), round(freq_axis[pwe_a_max_i+1])
  printf, phl_fu, phl_e_max, phl_i_max, phl_a_max, $
          round(freq_axis[phl_e_max_i+1]), round(freq_axis[phl_i_max_i+1]), round(freq_axis[phl_a_max_i+1])

writeu, dat_fu, [[[pwt_e]], [[pwt_i]], [[pwt_a]], [[pwe_e]], [[pwe_i]], [[pwe_a]], $
                 [[phl_e]], [[phl_i]], [[phl_a]], [[phc_e_ir]], [[phc_e_if]], [[phc_ir_if]]]
free_lun, dat_fu
free_lun, pwt_fu, pwt2_fu, pwe_fu, phl_fu, phc_fu

print, 'results_new: done'

Loading data, please wait...