//parameters /*****************************************************************************/ probrel=0.15 //set 0.15 to simulate ctrl condition, 0.36 Abeta condition nSyn = 10 //number of synapses. Each 'synapse' represents a population of synapses nStim=5 //number of stimuli t0=500 //(ms) stimulation start ISI=10 // (ms) initialize inter-stimulus interval VCLAMP = 1 //set 1 to simulate voltage clamp, 0 otherwise PRINTRATIO = 1 //set 1 to calculate and print relative peaks, //0 absolute peaks //random number to make the simulation asynchronous objref randelay randelay = new Random() maxDelay = 0 //(ms) set maximum delay randelay.uniform(0,maxDelay) /*****************************************************************************/ //load basic model xopen("./loadBasicModel.hoc") //place synapses /*****************************************************************************/ objref dend[200], nstim[nSyn], syn[nSyn], netcon[nSyn] index = 0 //forsec apical_non_trunk_list { forsec apical_trunk_list { dend[index] = new SectionRef() index += 1 } nSec = index //number of objects in the list min_distance = 100 //um max_distance = 400 //um //random number used for locating synapses objref ransec, ranseg ransec = new Random() ransec.uniform(0,nSec-1) //generate distribution for selecting sections ranseg = new Random() //random number used for synaptic weights objref ranwei ranwei = new Random() ranwei.lognormal(1.6,1) //x0=5, mu=1.6, sigma=1 -> fitting data by Ito & Schuman //allocate synapses randomly on different apical dendrites (no repetitions) and connect them with presynaptic mechanism for i = 0, nSyn-1 { nstim[i] = new NetStim(0.5) } /*****************************************************************************/ //set experimental condition dt=0.1 steps_per_ms=10 setdt() //procedures for stimulation /*****************************************************************************/ //Insert a voltage clamp electrode objref vclamp soma vclamp = new VClamp(0.5) vclamp.dur[0] = 0 vclamp.amp[0] = -70 proc setVClamp() { VCLAMP = 1 vclamp.dur[0] = $1 } //check peaks /*****************************************************************************/ //create vector and file objref vec vec = new Vector() double start[nStim], end[nStim], baseline[nStim], maxvalue[nStim], peak[nStim], ratio[nStim] //procedure to measure peaks proc calculateRatios() { //calculate the first start and end start[0] = t0/0.1 //index = time(ms)/dt end[0] = start[0] + ISI/0.1 //calculate the ratios for (j = 0; j <= nStim-1; j += 1) { //calculate the n-th peak (where n = j+1 = nStim) start[j] = start[0] + j*ISI/0.1 //(startpoint + stimulusNumber*ISI)/0.1 if (j == nStim-1) { end[j] = tstop/0.1 } else { end[j] = start[j] + ISI/0.1 } if (VCLAMP == 1) { //for vclamp.i use vec.max; for soma.v use vec.min baseline[j] = vec.max(int(start[j]-ISI/0.2),int(start[j]+ISI/0.2)) } else { baseline[j] = vec.min(int(start[j]-ISI/0.2),int(start[j]+ISI/0.2)) } if (VCLAMP == 1) { //for vclamp.i use vec.min; for soma.v use vec.max maxvalue[j] = vec.min(int(start[j]),int(end[j])) } else { maxvalue[j] = vec.max(int(start[j]),int(end[j])) } peak[j] = maxvalue[j] - baseline[j] //calculate the n-th ratio ratio[j] = peak[j]/peak[0] } } //Stimulate with n stimuli, having a certain inter-stimulus interval (ISI) proc stimulation() { //ISI, nStim for i=0, nSyn-1 { nstim[i].number = nStim nstim[i].interval = ISI nstim[i].start = t0 + randelay.repick() nstim[i].noise = 0 } } /****************************************************************************************/ //stimulation frequency between 5 to 200 Hz objref nfreq nfreq = new Vector(7) nfreq.x[0] = 5 nfreq.x[1] = 10 nfreq.x[2] = 40 nfreq.x[3] = 80 nfreq.x[4] = 100 nfreq.x[5] = 150 nfreq.x[6] = 200 //main procedure load_file("session.ses") proc synup(){ for i = 0, nSyn-1 { syn[i].U=$1 } } xpanel(" ") xvalue("U","probrel") xvalue("t","t", 2 ) xbutton("Stop","stoprun=1") xbutton("Run","plasticity()") xpanel() proc plasticity(){ m=4 ISI=1000/nfreq.x[m] tstop = t0 + (nStim-1)*ISI + 150 setVClamp(tstop) xopen("./createNewSyn4.hoc") synup(probrel) stimulation() vec.record(&vclamp.i) run() calculateRatios() }