/* Relating dendritic geometry and signal propagation */ /* Philipp Vetter, Arnd Roth and Michael Hausser */ /* output.hoc Version 1.0 11.10.1999 */ proc batch() { local ct,n /* run procedure $1 on all cells, using ActiveModel $s2 */ /* 1 save_geometry() */ /* 2 save_active() */ /* 3 save_all() */ /* if (numarg()==3) initsimvclamp(ActiveModel) */ /* eg batch(3,act0) */ n=numarg() if (n==1) ActiveModel = act0 else ActiveModel = $s2 if (n==3) initsimvclamp(ActiveModel) for ct=0,CellList.count-1 { calculation(CellList.object(ct).loc,$1,ActiveModel) } } /********************************************************************************/ proc calculation() { local i /* shell procedure specifying which proc to run on each cell in batch*/ /* $s1 cell */ /* $2 which procedure */ /* $s3 active model */ /* e.g. calculation(int2.loc,2,act0) */ if ($2==1) save_geometry($s1,$s3) if ($2==2) save_active($s1,$s3) if ($2==3) save_all($s1,$s3) if ($2==7) get_neurondata($s1,$s3) if ($2==8) manual($s1) if ($2==10) deq_calc($s1,"don't save") if ($2==11) dAdr_calc($s1,"don't save") if ($2==12) slope_darea($s1,ActiveModel,"don't","write") if ($2==13) slope_deq($s1,ActiveModel,"don't","write") if ($2==16) equivforward($s1,$s3) if ($2==15) equivforwardII($s1,$s3) if ($2==26) normforward($s1,$s3) if ($2==17) save_back($s1,$s3) if ($2==18) save_fI($s1,$s3) if ($2==19) save_fII($s1,$s3) if ($2==21) printvectors($s1,$s3) if ($2==30) equivZfwdwrite($s1,$s3) if ($2==40) printvectors_back($s1,$s3) if ($2==41) printvectors_forward($s1,$s3) if ($2==42) printvectors_forward2($s1,$s3) } /********************************************************************************/ proc manual() { dAdr_calc($s1) deq_calc($s1) slope_darea() slope_deq() } proc save_geometry() { /* saves geometry data of cell $s1 to disk */ /* $s1 cell */ /* $s2 active model (for equivalent cable) */ /* e.g. save_geometry(int2,act0) */ if (numarg()==2) get($s1,$s2,1) L_switch(0) geometry_calc() equivalent_calc() write_numbers() } /********************************************************************************/ proc save_active() { /* saves active data of cell $s1 to disk */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ if (numarg()==2) get($s1,$s2,1) get_gdist(1) geometry_calc() if (diffvonset) set_waveform("dendspike_p21",1) else set_waveform() if ((!diffvonset)&&(!equiv)) threshold_calc() else forwardthreshold_calc() impedance_calc() if (equiv) { write_nathreshold(2) print "this is the critical bit" equivZfwdwrite($s1,$s2) } else { equivalent_calc() if (diffvonset) write_nathreshold(1) else write_nathreshold() } } /********************************************************************************/ proc save_cable() { print "\nEquivalent cable=============================" make_equivalent_cable() equiv = 1 cell_name(cell) // save_geometry(cell,ActiveModel) save_active(cell,ActiveModel) } /********************************************************************************/ proc save_forwardmini() { L_switch(1) geometry_calc() set_waveform("dendspike_p21",1) APdecay(1) APdecay(3) write_nathreshold(5) L_switch(0) geometry_calc() if (!equiv) slope_darea() equivalent_calc() write_numbers() } /********************************************************************************/ proc save_all() { /* save active data of cell $s1 + equivalent cylinder + forward prop */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ set_suffix("reset") diffvonset=0 cell = $s1 ActiveModel = $s2 print "\nNormal Morphology========================" // save_geometry(cell,ActiveModel) save_active(cell,ActiveModel) save_cable() diffvonset=1 print "\nForward propagation=======================" name_somadist(200,"load","save_geometry()") name_somadist(200,"load","{save_active() save_cable()}") name_halfdecay(halfdecay_maxlocation,"load","save_geometry()") name_halfdecay(halfdecay_maxlocation,"load","{save_active() save_cable()}") name_halfdecay(halfdecay_minlocation,"load","save_forwardmini()") name_halfdecay(apsoma_maxlocation,"load","save_forwardmini()") name_halfdecay(apsoma_minlocation,"load","save_forwardmini()") name_halfdecay(ap200_maxlocation,"load","save_forwardmini()") name_halfdecay(ap200_minlocation,"load","save_forwardmini()") } proc save_back() { /* save active data of cell $s1 + equivalent cylinder + forward prop */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ set_suffix("reset") diffvonset=0 cell = $s1 ActiveModel = $s2 print "\n\nNormal Morphology========================" save_geometry(cell,ActiveModel) save_active(cell,ActiveModel) save_cable() } proc save_fI() { /* save active data of cell $s1 + equivalent cylinder + forward prop */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ set_suffix("reset") diffvonset=1 cell = $s1 ActiveModel = $s2 cell_name(cell) readveca("halfdecay") print "\nForward propagation========================" name_somadist(200,"load","save_geometry()") name_somadist(200,"load","{save_active() save_cable()}") name_halfdecay(halfdecay_minlocation,"load","save_forwardmini()") name_halfdecay(apsoma_maxlocation,"load","save_forwardmini()") name_halfdecay(apsoma_minlocation,"load","save_forwardmini()") name_halfdecay(ap200_maxlocation,"load","save_forwardmini()") name_halfdecay(ap200_minlocation,"load","save_forwardmini()") } /**************************************************************************/ proc save_fII() { /* save active data of cell $s1 + equivalent cylinder + forward prop */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ set_suffix("reset") diffvonset=1 cell = $s1 ActiveModel = $s2 cell_name(cell) readveca("halfdecay") print "\nForward propagation=============================" name_halfdecay(halfdecay_maxlocation,"load","save_geometry()") name_halfdecay(halfdecay_maxlocation,"load","{save_active() save_cable()}") } proc helpme() { /* save active data of cell $s1 + equivalent cylinder + forward prop */ /* $s1 cell */ /* $s2 active model */ /* e.g. active_save(int2,act0) */ set_suffix("reset") diffvonset=1 cell = ca1g.loc ActiveModel = act0 cell_name(cell) readveca("halfdecay") print "\nForward propagation=============================" name_halfdecay(halfdecay_maxlocation,"load","{save_active()}") } /********************************************************************************/ proc write_numbers() { /* write out values calculated in geometry_calc() */ /* these values are independent of the active model */ writevec("numbers") fprint("area_max = %2.4f\n",area_max) fprint("darea_max = %2.4f\n",darea_max) fprint("darea_maxdist = %2.4f\n",darea_maxdist) fprint("distance_max = %2.4f\n",adist.max) fprint("taper = %2.4f\n",taper) if (!equiv) { fprint("equiv_diam = %2.4f\n",equiv_diam) fprint("sections_max = %2.4f\n",sections_max) fprint("sections_maxdist = %2.4f\n",sections_maxdist) fprint("sections_mean = %2.4f\n",sections_mean) fprint("taper_mean = %2.4f\n",taper_mean) fprint("diam_mean = %2.4f\n",diam_mean) fprint("branchpoints_num = %2.4f\n",branchpoints_num) fprint("rallratio_mean = %2.4f\n",rallratio_mean) fprint("rallratio_peak = %2.4f\n",rallratio_peak) fprint("diamratio_mean = %2.4f\n",diamratio_mean) fprint("diamratio_peak = %2.4f\n",diamratio_peak) fprint("branchdensity = %2.4f\n",branchdensity) fprint("branchdensityII = %2.4f\n",branchdensityII) fprint("rallratio_noend_mean = %2.4f\n",rallratio_noend_mean) fprint("rallratio_noend_peak = %2.4f\n",rallratio_noend_peak) fprint("diamratio_noend_mean = %2.4f\n",diamratio_noend_mean) fprint("diamratio_noend_peak = %2.4f\n",diamratio_noend_peak) fprint("branchdensity_noend = %2.4f\n",branchdensity_noend) fprint("branchdensityII_noend = %2.4f\n",branchdensityII_noend) fprint("mean_stem_dendrite_diam = %2.4f\n",mean_stem_dendrite_diam) } wopen() } /********************************************************************************/ proc write_nathreshold() { local n,i,j,q /* write out numbers that depend on the active model */ /* n = 0 everything */ /* n = 1 skip equivalent_calc calculations */ /* n = 2 skip nathreshold et al. but not nathresholdvclamp, APhalf */ /* n = 3 skip all nathreshold calculations */ n = numarg() if (n==1) n = $1 else n = 0 writeveca("nathreshold") fprint("adarea_max = %2.4f\n",adarea_max) // Geometry_calc fprint("adarea_maxdist = %2.4f\n",adarea_maxdist) fprint("adistance_max = %2.4f\n",adist.max) fprint("ataper = %2.4f\n",ataper) fprint("AP200 = %2.4f\n",AP200) fprint("APhalf = %2.4f\n",APhalf) fprint("AP200_pass = %2.4f\n",AP200_pass) fprint("APhalf_pass = %2.4f\n",APhalf_pass) if (n<4){ fprint("input_resistance = %2.4f\n",input_resistance) fprint("Zmismatch_peak = %2.4f\n",Zmismatch_peak) fprint("Rmismatch_peak = %2.4f\n",Rmismatch_peak) fprint("aZmismatch_peak = %2.4f\n",aZmismatch_peak) fprint("aRmismatch_peak = %2.4f\n",aRmismatch_peak) fprint("Zmismatch_mean = %2.4f\n",Zmismatch_mean) fprint("Rmismatch_mean = %2.4f\n",Rmismatch_mean) fprint("aZmismatch_mean = %2.4f\n",aZmismatch_mean) fprint("aRmismatch_mean = %2.4f\n",aRmismatch_mean) fprint("Zmismatch_peak_noend = %2.4f\n",Zmismatch_peak_noend) fprint("Rmismatch_peak_noend = %2.4f\n",Rmismatch_peak_noend) fprint("aZmismatch_peak_noend = %2.4f\n",aZmismatch_peak_noend) fprint("aRmismatch_peak_noend = %2.4f\n",aRmismatch_peak_noend) fprint("Zmismatch_mean_noend = %2.4f\n",Zmismatch_mean_noend) fprint("Rmismatch_mean_noend = %2.4f\n",Rmismatch_mean_noend) fprint("aZmismatch_mean_noend = %2.4f\n",aZmismatch_mean_noend) fprint("aRmismatch_mean_noend = %2.4f\n",aRmismatch_mean_noend) fprint("Zfwd_min = %2.4f\n",Zfwd_min) fprint("Zfwd_max = %2.4f\n",Zfwd_max) fprint("dZfwd_min = %2.4f\n",dZfwd_min) fprint("dZfwd_max = %2.4f\n",dZfwd_max) fprint("Rfwd_min = %2.4f\n",Rfwd_min) fprint("Rfwd_max = %2.4f\n",Rfwd_max) fprint("dRfwd_min = %2.4f\n",dRfwd_min) fprint("dRfwd_max = %2.4f\n",dRfwd_max) fprint("aZfwd_min = %2.4f\n",aZfwd_min) fprint("aZfwd_max = %2.4f\n",aZfwd_max) fprint("daZfwd_min = %2.4f\n",daZfwd_min) fprint("daZfwd_max = %2.4f\n",daZfwd_max) fprint("aRfwd_min = %2.4f\n",aRfwd_min) fprint("aRfwd_max = %2.4f\n",aRfwd_max) fprint("daRfwd_min = %2.4f\n",daRfwd_min) fprint("daRfwd_max = %2.4f\n",daRfwd_max) } if (n<3){ fprint("nathresholdvclamp = %2.4f\n",nathresholdvclamp) } if (n<2){ fprint("asections_max = %2.4f\n",asections_max) fprint("asections_maxdist = %2.4f\n",asections_maxdist) fprint("asections_mean = %2.4f\n",asections_mean) fprint("abranchdensity = %2.4f\n",abranchdensity) fprint("abranchdensityII = %2.4f\n",abranchdensityII) fprint("abranchdensity_noend = %2.4f\n",abranchdensity_noend) fprint("abranchdensityII_noend = %2.4f\n",abranchdensityII_noend) fprint("adeq_max = %2.4f\n",adeq_max) fprint("adeq_maxdist = %2.4f\n",adeq_maxdist) fprint("ataper_mean = %2.4f\n",ataper_mean) // equivalent_calc fprint("adiam_mean = %2.4f\n",adiam_mean) } if (n<1){ fprint("nathreshold = %2.4f\n",nathreshold) fprint("st_intensity = %2.4f\n",st_intensity) fprint("nathresholdvclamp2 = %2.4f\n",nathresholdvclamp2) fprint("AP200_half = %2.4f\n",AP200_half) fprint("AP200_steep = %2.4f\n",AP200_steep) fprint("AP200_range = %2.4f\n",AP200_range) fprint("AP200_basis = %2.4f\n",AP200_basis) q=sens[0].size() for i=0,2 { fprint("sens[%d] = new Vector(%d)\n",i,q) for j=0,sens[0].size()-1 { fprint("sens[%d].x[%d]=%2.4f\n",i,j,sens[i].x[j]) }} } wopen() } /********************************************************************************/ proc geometry_read() { /* reads geometry data into cell $s1 */ /* used by procedure get() */ /* e.g. geometry_read(int2) */ L_switch(0) readvec("areas",Ar) if (!equiv) { readvec("cdiam",cdiam) readvec("rdiam",rdiam) readvec("mdiam",mdiam) readvec("sections",sections) } readvec("numbers") // readvec("darea") } /********************************************************************************/ proc active_read() { local i,j, k, kbp /* reads active data into cell $s1 */ /* $s2 active model /* used by procedure get() */ /* e.g. active_read(int2,act0) */ L_switch(1) readveca("areas",Ar) L_switch(0) readveca("nathreshold") st_set(st_intensity) if (!equiv){ readveca("cdiam",cdiam) readveca("rdiam",rdiam) readveca("mdiam",mdiam) readveca("sections",sections) } readveca("frequency",Zfrequency) readveca("Zmismatch",Zmismatch) readveca("Rmismatch",Rmismatch) readveca("Zback",Zback) readveca("Rback",Rback) readveca("Zfwd",Zfwd) readveca("Rfwd",Rfwd) readveca("aZfwd",aZfwd) readveca("aRfwd",aRfwd) readveca("Z",Z) readveca("R2",R2) readveca("aZmismatch",aZmismatch) readveca("aRmismatch",aRmismatch) readveca("aZback",aZback) readveca("aRback",aRback) readveca("aZfwd",aZfwd) readveca("aRfwd",aRfwd) readveca("aZ",aZ) readveca("aR",aR) j = kbp = 0 forsec all { for i = 1,nseg { k = (i-.5)/nseg f_pk(k) = Zfrequency.x[kbp] Rmismatch_pk(k) = Rmismatch.x[j] Zmismatch_pk(k) = Zmismatch.x[j] Zfwd_pk(k) = Zfwd.x[j] Rfwd_pk(k) = Rfwd.x[j] Zback_pk(k) = Zback.x[j] Rback_pk(k) = Rback.x[j] Zfwd_pk(k) = Zfwd.x[j] Rfwd_pk(k) = Rfwd.x[j] Z_pk(k) = Z.x[j] R_pk(k) = R2.x[j] aZmismatch_pk(k) = aZmismatch.x[j] aRmismatch_pk(k) = aRmismatch.x[j] aZback_pk(k) = aZback.x[j] aRback_pk(k) = aRback.x[j] aZfwd_pk(k) = aZfwd.x[j] aRfwd_pk(k) = aRfwd.x[j] aZ_pk(k) = aZ.x[j] aR_pk(k) = aR.x[j] j += 1 /* sum of segments */ } kbp +=1 } Zmismatch.resize(0) Rmismatch.resize(0) Zback.resize(0) Rback.resize(0) Zfwd.resize(0) Rfwd.resize(0) aZfwd.resize(0) aRfwd.resize(0) Z.resize(0) R2.resize(0) aZmismatch.resize(0) aRmismatch.resize(0) aZback.resize(0) aRback.resize(0) aZfwd.resize(0) aRfwd.resize(0) aZ.resize(0) aR.resize(0) for i=1,6 { dist_switch(i) forsec distlist { for j = 0,nseg-1 { k = (j+.5)/nseg Zmismatch.append(Zmismatch_pk(k)) aZmismatch.append(aZmismatch_pk(k)) Rmismatch.append(Rmismatch_pk(k)) aRmismatch.append(aRmismatch_pk(k)) Zback.append(Zback_pk(k)) aZback.append(aZback_pk(k)) Rback.append(Rback_pk(k)) aRback.append(aRback_pk(k)) Zfwd.append(Zfwd_pk(k)) aZfwd.append(aZfwd_pk(k)) Rfwd.append(Rfwd_pk(k)) aRfwd.append(aRfwd_pk(k)) Z.append(Z_pk(k)) aZ.append(aZ_pk(k)) R2.append(R_pk(k)) aR.append(aR_pk(k)) } } } dist_switch(1) } /********************************************************************************/ proc normforward() { local hdum,fdum cell_name($s1) if (forward) name_somadist(200,"load") if (hdecay) name_halfdecay(halfdecay_maxlocation,"load") if (!hdecay && !forward) get($s1,$s2,1) active_read() L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"Zfwdi_%s",str5) hdum=hdecay fdum=forward set_suffix("reset") hdecay=hdum forward=fdum cell_name($s1) ActiveModel=$s2 activecell = cellname writevecs(str5,Zfwd,Rfwd,Zmismatch,Rmismatch,dist) } proc equivforward() {local n, hdum,fdum equiv = 1 get($s1,$s2,1) active_read() L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"Zfwd_%s",str5) writevecs(str5,Zfwd,Rfwd,Zmismatch,Rmismatch) hdum=hdecay fdum=forward set_suffix("reset") hdecay=hdum forward=fdum cell_name($s1) ActiveModel=$s2 activecell = cellname rdiam = new Vector() readveca("rdiam",rdiam) electrotonicL=1 gdist = new Vector(rdiam.size) { gdist.indgen(0,gstep()) gdist.x[0]=gstep()/40 } str5 = celladdress strob.right(str5,1) sprint(str5,"rdiam_%s",str5) writevecs(str5,gdist,rdiam) } proc equivforwardII() { local hdum,fdum equiv = 1 get($s1,$s2,1) active_read() L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"Zfwdi_%s",str5) hdum=hdecay fdum=forward set_suffix("reset") hdecay=hdum forward=fdum cell_name($s1) ActiveModel=$s2 activecell = cellname rdiam = new Vector() readveca("rdiam",rdiam) electrotonicL=1 gdist = new Vector(rdiam.size) { gdist.indgen(0,gstep()) gdist.x[0]=gstep()/40} rdiam.interpolate(dist,gdist) writevecs(str5,Zfwd,Rfwd,Zmismatch,Rmismatch,dist,rdiam) } /* - dAdr und Abstand vom Soma in geometrischen Koordinaten, in der Originalzelle, fuer backpropagation - Zfwd,Rfwd,Zmismatch,Rmismatch,dist in elektrotonischen Koordinaten im equivalent cable fuer die _forward_ propagation - dAdr und Abstand vom der dendritischen Elektrode in geometrischen Koordinaten, in der Originalzelle, fuer forward propagation? */ proc printvectors() { cell = $s1 ActiveModel = $s2 get(cell,ActiveModel) // back: { dAr;dist } L_switch(0) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"dAsoma_%s",str5) writevecs(str5,dAr,gdist) name_somadist(200,"load") // forward200: { dAr;dist } geometry_read(cell) active_read(cell,ActiveModel) for i=0,1 { L_switch(1-i) get_gdist() } dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"fdAsoma_%s",str5) writevecs(str5,dAr,gdist) equiv = 1 // forward200equiv: { Zfwd;Rfwd;dist;Rmismatch;Zmismatch } cell_name(cell) get(cell,ActiveModel) L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"eqZfwd_%s",str5) writevecs(str5,Zfwd,Rfwd,dist,Rmismatch,Zmismatch) // halfdecymax: { dAr;dist } name_halfdecay(halfdecay_maxlocation,"load") geometry_read(cell) active_read(cell,ActiveModel) for i=0,1 { L_switch(1-i) get_gdist() } L_switch(0) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"fdAsoma_%s",str5) writevecs(str5,dAr,gdist) equiv = 1 // halfdecymaxequiv: { Zfwd;Rfwd;dist;Rmismatch;Zmismatch } cell_name(cell) get(cell,ActiveModel) L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"eqZfwd_%s",str5) writevecs(str5,Zfwd,Rfwd,dist,Rmismatch,Zmismatch) } proc printvectors_back() { cell = $s1 ActiveModel = $s2 get(cell,ActiveModel) // back: { dAr;dist } L_switch(0) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"dAsoma_%s",str5) writevecs(str5,dAr,gdist) } proc printvectors_forward() { cell = $s1 ActiveModel = $s2 cell_name(cell) name_somadist(200,"load") // forward200: { dAr;dist } geometry_read(cell) active_read(cell,ActiveModel) for i=0,1 { L_switch(1-i) get_gdist() } dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"fdAsoma_%s",str5) writevecs(str5,dAr,gdist) equiv = 1 // forward200equiv: { Zfwd;Rfwd;dist;Rmismatch;Zmismatch } cell_name(cell) get(cell,ActiveModel,1) active_read() L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"eqZfwd_%s",str5) writevecs(str5,Zfwd,Rfwd,dist,Rmismatch,Zmismatch) } proc printvectors_forward2() { cell = $s1 ActiveModel = $s2 cell_name(cell) // halfdecymax: { dAr;dist } name_halfdecay(halfdecay_maxlocation,"load") geometry_read(cell) active_read(cell,ActiveModel) for i=0,1 { L_switch(1-i) get_gdist() } L_switch(0) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"fdAsoma_%s",str5) writevecs(str5,dAr,gdist) equiv = 1 // halfdecymaxequiv: { Zfwd;Rfwd;dist;Rmismatch;Zmismatch } cell_name(cell) get(cell,ActiveModel,1) active_read() L_switch(1) dist_switch(2) str5 = celladdress strob.right(str5,1) sprint(str5,"eqZfwd_%s",str5) writevecs(str5,Zfwd,Rfwd,dist,Rmismatch,Zmismatch) } proc make_figures() { local n n=numarg() if (n==0) ActiveModel=act0 else ActiveModel = $s1 get_data() averages(3014) // nathresholdvclamp cplot(3014,1003) // Nathresholdvclamp vs number of branchpoints cplot(3014,1013) // Nathresholdvclamp vs d2area_max // remove L2/3 pyramidal cell so that only layer 5 remain for averaging l23 = new Vector() get_data() averages(3011) // passive AP200 averages(3016) // AP200 half-distance } proc equivZfwdwrite() { equiv = 1 get($s1,$s2,1) L_switch(1) active_read() dist_switch(2) get_cZ(1) cZfwd_min = dminimum cZfwd_max = dmaximum get_cZ(2) cRfwd_min = dminimum cRfwd_max = dmaximum get_cZ(3) caZfwd_min = dminimum caZfwd_max = dmaximum get_cZ(4) caRfwd_min = dminimum caRfwd_max = dmaximum writeveca("Zfwd_normalize") fprint("cZfwd_min = %2.4f\n",cZfwd_min*1e5) fprint("cZfwd_max = %2.4f\n",cZfwd_max*1e5) fprint("cRfwd_min = %2.4f\n",cRfwd_min*1e5) fprint("cRfwd_max = %2.4f\n",cRfwd_max*1e5) fprint("caZfwd_min = %2.4f\n",caZfwd_min*1e5) fprint("caZfwd_max = %2.4f\n",caZfwd_max*1e5) fprint("caRfwd_min = %2.4f\n",caRfwd_min*1e5) fprint("caRfwd_max = %2.4f\n",caRfwd_max*1e5) wopen() }