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

 Download zip file 
Help downloading and running models
Accession:144477
"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. ..."
Reference:
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):
Channel(s):
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: IDL;
Model Concept(s): Oscillations; Simplified Models; Schizophrenia; Brain Rhythms;
Implementer(s): Spencer, Kevin M. [kevin_spencer at hms.harvard.edu];
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
  endfor

  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)
        count++
      endfor
    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)
        count++
      endfor
    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)
        count++
      endfor
    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])
endfor

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'
return
end

Loading data, please wait...