// figs.hoc // contains functions to create figures for Dendritic Hypothesis paper // on all dendrites within 240-300 um's from the soma: proc compare_bpAPs() { // first make sure in healthy state if (alzheimers_flag) { remove_aBeta() } // run model runm() // store bpAP peaks in healthy_bpAPs healthy_bpAPs = distry.c // apply aBeta apply_aBeta() // re-run the model runm() // store bpAP peaks in aBeta_bpAPs aBeta_bpAPs = distry.c // calculate percent increase as 100*(aBeta-healthy)/healthy percent_increase = aBeta_bpAPs.c.sub(healthy_bpAPs).div(healthy_bpAPs).mul(100) // percent_increase values correspond to distance from soma stored in distrx // print average and standard deviation for between 240 and 300 micrometer experiment_indicies = new Vector() experiment_indicies.indvwhere(distrx, "()", 240, 300) per_inc_between_240_300 = new Vector() x_between_240_300 = new Vector() for i=0, experiment_indicies.size()-1 { per_inc_between_240_300.append(percent_increase.x[experiment_indicies.x[i]]) x_between_240_300.append(distrx.x[experiment_indicies.x[i]]) } average=per_inc_between_240_300.mean() stdev = per_inc_between_240_300.stdev() print "Between 240 and 300 microns along apical dendrite: average bpAP percent increase=",\ average, ", SD=", stdev // graph percentage increase as a function of distance to see what is predicted for // regions whose measurements were not reported in Chen C. objref g1 g1 = new Graph() percent_increase.mark(g1,distrx,"+",3,3,2) for i=0, experiment_indicies.size()-1 { per_inc_between_240_300.mark(g1,x_between_240_300,"O",3,2,2) } } // compare just on the primary dendrite: proc compare_primary_bpAPs() { // first make sure in healthy state if (alzheimers_flag) { remove_aBeta() } // run model runm() // store bpAP peaks in healthy_bpAPs healthy_bpAPs = chen_c_bpAP_peaks.c healthy_chen_c_bpAP_soma_peak = chen_c_bpAP_soma_peak // apply aBeta apply_aBeta() // re-run the model runm() // store bpAP peaks in aBeta_bpAPs aBeta_bpAPs = chen_c_bpAP_peaks.c aBeta_chen_c_bpAP_soma_peak = chen_c_bpAP_soma_peak // calculate percent increase as 100*(aBeta-healthy)/healthy percent_increase = aBeta_bpAPs.c.sub(healthy_bpAPs).div(healthy_bpAPs).mul(100) // percent_increase values correspond to distance from soma stored in distrx // print average and standard deviation for between 240 and 300 micrometer average=percent_increase.mean() stdev = percent_increase.stdev() print "aBeta compared to healthy:" print "Between 240 and 300 microns along apical (primary) dendrite: average bpAP percent increase=",\ average, ", SD=", stdev soma_percent_increase=100* \ (aBeta_chen_c_bpAP_soma_peak-healthy_chen_c_bpAP_soma_peak)/healthy_chen_c_bpAP_soma_peak print "percent increase in the soma = ",soma_percent_increase," %" } objref healthy_soma_v, aBeta_soma_v objref healthy_dend_v, aBeta_dend_v objref t_vec, g2, g3, g4, healthy_t objref scale_bar_v, scale_bar_t objref ip objref cntrl_lines_t, cntrl_lines_v objref aBeta_lines_t, aBeta_lines_v proc ChenCfig2A_withdoublescale() { // (The problem with this procedure is that in Chen 2005 the // scales in fig2A look like one is half the other however the // the 1/2 scale one is maybe 5/6th less than half the scale. // To make similar figure to Chen C 2005 fig 2 A // 1) run the healthy cell and store a soma and dend. voltage trajectories // 2) run aBeta cell and store the soma and dend. voltage trajectories // 3) graph the voltage trajectories displaced in space similarly to how // Chen displaces them // One possible reason why the voltage trajectories are different looking (Chen's // voltage trajectories see to settle at higher values than the Model's) maybe due // to the way the model is stimulated with current clamp and the Chen experimental // cell is stimulated with an antidromic AP from the axon fibers. remove_aBeta() t_vec = new Vector() t_vec.record(&t) runm() healthy_soma_v = soma_v_vec.c healthy_dend_v = dend_v_vec.c healthy_t = t_vec.c apply_aBeta() // set_concentration() // use to set a fraction of aBeta block soma_v_vec.resize(0) dend_v_vec.resize(0) t_vec.resize(0) runm() aBeta_soma_v = soma_v_vec.c aBeta_dend_v = dend_v_vec.c g2 = new Graph() // g2 is the ChenCfig2 like graph // the voltages are multiplied by two to match // the scale bar in Chen 2005 where the dendrite // traces are also multiplied by two. // dend_offset brings the traces back into correspondance // with the non-multiplied traces healthy_soma_v.line(g2,healthy_t) dend_offset = aBeta_dend_v.min() healthy_dend_v.c.mul(2).sub(dend_offset).line(g2,healthy_t.c.add(50)) aBeta_soma_v.c.line(g2,t_vec.c.add(7.5)) aBeta_dend_v.c.mul(2).sub(dend_offset).line(g2,t_vec.c.add(57.5)) scale_bar_v = new Vector() scale_bar_t = new Vector() scale_bar_v.append(-60, -80, -80) scale_bar_t.append(31, 31, 41) scale_bar_v.line(g2,scale_bar_t) scale_bar_v.line(g2,scale_bar_t.c.add(49)) g2.label(0.39,.13,"20 mV") g2.label(0.39,0.1,"10 ms") g2.label(0.84,.13,"10 mV") g2.label(0.84,0.1,"10 ms") g2.label(.37,.4,"Control") g2.label(0.37,.72,"aBeta") g2.xaxis(3) // causes x axis to disappear g2.yaxis(3) // causes y axis to disappear g2.exec_menu("View = plot") cntrl_lines_t = new Vector(4) cntrl_lines_v = new Vector(4, -18) cntrl_lines_t.x[0]=3 cntrl_lines_t.x[1]=30 cntrl_lines_v.c(0,1).line(g2,cntrl_lines_t.c(0,1)) cntrl_lines_t.x[2]=039 cntrl_lines_t.x[3]=051 cntrl_lines_v.c(2,3).line(g2,cntrl_lines_t.c(2,3)) aBeta_lines_t = new Vector(4) aBeta_lines_v = new Vector(4,43.5) aBeta_lines_t.x[0]=10 aBeta_lines_t.x[1]=30 aBeta_lines_v.c(0,1).line(g2,aBeta_lines_t.c(0,1)) aBeta_lines_t.x[2]=38 aBeta_lines_t.x[3]=59 aBeta_lines_v.c(2,3).line(g2,aBeta_lines_t.c(2,3)) } proc ChenCfig2A() { // to make similar figure to Chen C 2005 fig 2 A // 1) run the healthy cell and store a soma and dend. voltage trajectories // 2) run aBeta cell and store the soma and dend. voltage trajectories // 3) graph the voltage trajectories displaced in space similarly to how // Chen displaces them // One possible reason why the voltage trajectories are different looking (Chen's // voltage trajectories see to settle at higher values than the Model's) maybe due // to the way the model is stimulated with current clamp and the Chen experimental // cell is stimulated with an antidromic AP from the axon fibers. remove_aBeta() t_vec = new Vector() t_vec.record(&t) runm() healthy_soma_v = soma_v_vec.c healthy_dend_v = dend_v_vec.c healthy_t = t_vec.c healthy_obdend_v_vec = obdend_v_vec.c // print "1) there are ",obdend_v_vec.size(), " elements in obdend_v_vec" // apply_aBeta() set_concentration() // use to set a fraction of aBeta block soma_v_vec.resize(0) dend_v_vec.resize(0) obdend_v_vec.resize(0) t_vec.resize(0) runm() // print "2) there are ",obdend_v_vec.size(), " elements in obdend_v_vec" // vectors different sizes 'cause cvode dt aBeta_soma_v = soma_v_vec.c aBeta_dend_v = dend_v_vec.c abeta_obdend_v_vec = obdend_v_vec.c g2 = new Graph(0) // g2 is the ChenCfig2 like graph // the voltages are multiplied by two to match // the scale bar in Chen 2005 where the dendrite // traces are also multiplied by two. // dend_offset brings the traces back into correspondance // with the non-multiplied traces healthy_soma_v.line(g2,healthy_t) dend_offset = aBeta_dend_v.min() // healthy_dend_v.c.mul(2).sub(dend_offset).line(g2,healthy_t.c.add(50)) healthy_dend_v.c.mul(1).sub(0).line(g2,healthy_t.c.add(50)) aBeta_soma_v.c.line(g2,t_vec.c.add(7.5),2,1) // aBeta_dend_v.c.mul(2).sub(dend_offset).line(g2,t_vec.c.add(57.5)) aBeta_dend_v.c.mul(1).sub(0).line(g2,t_vec.c.add(57.8),2,1) healthy_obdend_v_vec.line(g2,healthy_t.c.add(100)) abeta_obdend_v_vec.line(g2,t_vec.c.add(107.8),2,1) // makes red scale_bar_v = new Vector() scale_bar_t = new Vector() scale_bar_v.append(-60, -80, -80) scale_bar_t.append(31, 31, 41) scale_bar_v.line(g2,scale_bar_t) // scale_bar_v.line(g2,scale_bar_t.c.add(49)) g2.label(0.39,.13,"20 mV") g2.label(0.39,0.1,"10 ms") // g2.label(0.84,.13,"10 mV") // g2.label(0.84,0.1,"10 ms") g2.label(.37,.82,"Control") g2.label(50,20,"aBeta",1,1,0,0,2) g2.xaxis(3) // causes x axis to disappear g2.yaxis(3) // causes y axis to disappear g2.view(-10, -65, 850, 96, 100, 500, 300, 300) g2.exec_menu("View = plot") /* cntrl_lines_t = new Vector(4) cntrl_lines_v = new Vector(4, -18) cntrl_lines_t.x[0]=3 cntrl_lines_t.x[1]=30 cntrl_lines_v.c(0,1).line(g2,cntrl_lines_t.c(0,1)) cntrl_lines_t.x[2]=039 cntrl_lines_t.x[3]=051 cntrl_lines_v.c(2,3).line(g2,cntrl_lines_t.c(2,3)) aBeta_lines_t = new Vector(4) aBeta_lines_v = new Vector(4,43.5) aBeta_lines_t.x[0]=10 aBeta_lines_t.x[1]=30 aBeta_lines_v.c(0,1).line(g2,aBeta_lines_t.c(0,1)) aBeta_lines_t.x[2]=38 aBeta_lines_t.x[3]=59 aBeta_lines_v.c(2,3).line(g2,aBeta_lines_t.c(2,3)) */ } proc ObliqueAPgraph() { print "Generating oblique APs in before and after ABeta application" // to make figure comparing the control to the aBeta applied APs in an oblique dendrite. // 1) run the healthy cell and store an oblique dend. voltage trajectory // 2) run aBeta cell and store the same oblique dend, voltage trajectory // 3) graph the voltage trajectories compared to each other remove_aBeta() t_vec = new Vector() t_vec.record(&t) runm() healthy_obdend_v_vec = obdend_v_vec.c healthy_t = t_vec.c // apply_aBeta() set_concentration() // use to set a fraction of aBeta block soma_v_vec.resize(0) dend_v_vec.resize(0) obdend_v_vec.resize(0) t_vec.resize(0) runm() abeta_obdend_v_vec = obdend_v_vec.c // aBeta_soma_v = soma_v_vec.c // aBeta_dend_v = dend_v_vec.c g4 = new Graph(0) // g4 is the oblique before and after abeta graph healthy_obdend_v_vec.line(g4,healthy_t) abeta_obdend_v_vec.line(g4,t_vec,2,1) // makes red g4.view(-10, -65, 850, 96, 130, 530, 300, 300) g4.exec_menu("View = plot") } proc ChenCfig2CD() { // to make similar figure to Chen C 2005 fig 2 // 1) run the healthy cell and store a soma and dend. voltage trajectories // 2) run aBeta cell and store the soma and dend. voltage trajectories // 3) graph the voltage trajectories displaced in space similarly to how // Chen displaces them // One possible reason why the voltage trajectories are different looking (Chen's // voltage trajectories seem to settle at higher values than the Model's) maybe due // to the way the model is stimulated with current clamp and the Chen experimental // cell is stimulated with an antidromic AP from the axon fibers. // Another huge difference is that the real cell has putative inactivating Na channels // in the dendrites while the model cell does not. soma ip=new Ipulse2(0.5) ip.del=21 // there is already a 2.5 nA pulse at time 1 ms for 1.5 ms ip.dur=1.5 ip.per=20 // the period or length of time between pulses ip.num=4 // says 4 but five total including the IClamp one at t=1 ms ip.amp=2.5 tstop=140 remove_aBeta() t_vec = new Vector() t_vec.record(&t) runm() healthy_soma_v = soma_v_vec.c healthy_dend_v = dend_v_vec.c healthy_t = t_vec.c apply_aBeta() soma_v_vec.resize(0) dend_v_vec.resize(0) t_vec.resize(0) runm() aBeta_soma_v = soma_v_vec.c aBeta_dend_v = dend_v_vec.c g3 = new Graph() // g3 is the ChenCfig2cd like graph healthy_soma_v.line(g3,healthy_t) healthy_dend_v.line(g3,healthy_t.c.add(160)) aBeta_soma_v.line(g3,t_vec.c.add(10)) aBeta_dend_v.line(g3,t_vec.c.add(170)) scale_bar_v = new Vector() scale_bar_t = new Vector() scale_bar_v.append(-60, -80, -80) scale_bar_t.append(155, 155, 165) scale_bar_v.line(g3,scale_bar_t) g3.label(0.39,.13,"20 mV") g3.label(0.47,0.045,"10 ms") g3.label(.41,.3,"Control") g3.label(0.43,.55,"aBeta") g3.xaxis(3) // causes x axis to disappear g3.yaxis(3) // causes y axis to disappear g3.exec_menu("View = plot") } proc fig5obliques() { // plot bpAP peak heights in normal and with aBeta applied to the obliques // first plot aBeta in obliques, then normal on top of that current_marker_size=5 // big current_marker_style="o" // circles current_marker_color=2 // red for aBeta applied remove_aBeta() apply_obliques_aBeta() d.exec_menu("Erase") runm() current_marker_size=3 // little current_marker_style="O" // disks (captialized means filled) current_marker_color=3 // blue for healthy remove_aBeta() runm() d.label(0.35, 0.95, "bpAP peaks in healthy and with 100 uM aBeta applied to the obliques") } proc fig5basal() { // plot bpAP peak heights in normal and with aBeta applied to the basal dends. // first plot aBeta in basal, then normal on top of that current_marker_size=5 // big current_marker_style="o" // circles current_marker_color=2 // red for aBeta applied remove_aBeta() apply_basal_aBeta() d.exec_menu("Erase") runm() current_marker_size=3 // little current_marker_style="O" // disks (captialized means filled) current_marker_color=3 // blue for healthy remove_aBeta() runm() d.label(0.35, 0.95, "bpAP peaks in healthy and with 100 uM aBeta applied to the basal dendrites") } proc fig5primary() { // plot bpAP peak heights in normal and with aBeta applied to the primary dends. // first plot aBeta in primary, then normal on top of that current_marker_size=5 // big current_marker_style="o" // circles current_marker_color=2 // red for aBeta applied remove_aBeta() apply_primary_aBeta() d.exec_menu("Erase") runm() current_marker_size=3 // little current_marker_style="O" // disks (captialized means filled) current_marker_color=3 // blue for healthy remove_aBeta() runm() d.label(0.35, 0.95, "bpAP peaks in healthy and with 100 uM aBeta applied to the primary dendrite") } proc fig5tuft() { // plot bpAP peak heights in normal and with aBeta applied to the tuft dends. // first plot aBeta in tuft, then normal on top of that current_marker_size=5 // big current_marker_style="o" // circles current_marker_color=2 // red for aBeta applied remove_aBeta() apply_tuft_aBeta() d.exec_menu("Erase") runm() current_marker_size=3 // little current_marker_style="O" // disks (captialized means filled) current_marker_color=3 // blue for healthy remove_aBeta() runm() d.label(0.35, 0.95, "bpAP peaks in healthy and with 100 uM aBeta applied to the tuft dendrites") } // execute time_of_peaks() to see how the times in which the voltage // peaks in the apical dendrites are shifted to earlier times for more // proximal dendrites and later times for more distal dendrites when // abeta is applied to a normal (model) cell. proc time_of_peaks() { remove_aBeta() runm() g1 = new Graph() // available obj distrt.mark(g1,distrx,"o") // plot normal with circles then switch to apply_aBeta() print "half way done ... please wait" runm() distrt.mark(g1,distrx) // x's for pathology to see diff g1.label(.3,.95,"Time of peak vs distance from soma in apical dend") g1.label(0.42,0.02,"distance from soma") g1.label(0.03,0.93,"time of peak V") g1.label(0.8,0.15,"normal o, abeta +") g1.exec_menu("View = plot") }