Utility program (BASIC) for computing fundamental parameters of a uniform passive neuronal process
For documentation see AXOCALC documentation
5 ID$="AXOCALC.01C 11/19/90dh": PRINT ID$ ' minor changes for web 9/15/95
10 'Copyright (C) 1990, 1995 D.K. Hartline
11 '(RINF corrected to pi^2 instead of pi)
12 'V01C: add compartment time-constant calc
15 ' To accommodate infolding, Rhom/(Pi*D) is replaced with Rhom/(Pi*D*Fold)
16 ' where fold= the ratio of actual surface area to calculated area
17 ' Note this ignores the cross sectional area of infoldings
20 PI=3.14159: FCM2=.000001 'Farads per sq cm conversion
30 INPUT "PRINT (y/-)";PF$: IF PF$="y" OR PF$="Y" THEN PF%=-1
40 IF PF% THEN LPRINT ID$;" run of ";DATE$;" at ";TIME$
50 FOLD=1: UNIT$="lambda": U%=1
60 DEF FNCOSH(X)=(EXP(X)+EXP(-X))/2
70 DEF FNSINH(X)=(EXP(X)-EXP(-X))/2
100 CLS
105 GOSUB 1100
110 GOSUB 1200
120 GOSUB 1300
130 GOSUB 600
150 LOCATE 12,1: PRINT "*******************************************************************************"
160 PRINT "* MAIN MENU: *"
165 PRINT "* 1=New Ri [sea w=30; squid=50; STG=70] 2=New Rm [squid=1000; STG=50000] *"
170 PRINT "* 3=New diameter 4=New infolding ratio *"
180 PRINT "* 5=Input impedance of segment 6=Attenuation along segment *"
190 LOCATE 17,1: PRINT "* 7=Compartment size for L-";UNIT$;" seg.";
195 LOCATE 17,43: PRINT "8=Change segment units *"
295 LOCATE 18,1: PRINT "*******************************************************************************"
310 LOCATE 19,1: INPUT "-->";MM%
315 PRINT SPACE$(79):PRINT SPACE$(79):PRINT SPACE$(79):PRINT SPACE$(79)
320 LOCATE 20,1
330 ON MM% GOSUB 1100,1200,1300,1400,1500,1600,1700,1800
340 ON MM% GOSUB 600,600,600,600
350 GOTO 150
598 '**************** Print basic computations *************
599 '(Note: all units in cm, ohms, farads, seconds)
600 CLS
603 PRINT "BASIC DATA FOR MEMBRANE WITH Rhom=";RHOM;"Rhoi=";RHOI;"Infolding=";FOLD;":"
605 PRINT "1-cm CYLINDER (";D*10000;"micron diameter):"
610 IF PF% THEN LPRINT "1-cm CYLINDER (";D*10000;"micron diameter):"
615 RM=RHOM/(PI*D*FOLD) 'Membrane-R (ohms) of 1 cm long cyl
620 PRINT " rm=";RM/1000000!;" Mohm-cm"
625 IF PF% THEN LPRINT " rm=";RM/1000000!;" Mohm-cm"
630 RI=4*RHOI/(PI*D*D) 'Longitudinal-R of 1 cm long cyl
635 PRINT " ri=";RI/1000000!;" Mohm/cm"
640 IF PF% THEN LPRINT " ri=";RI/1000000!;" Mohm/cm"
645 LAMBDA=SQR(RM/RI) 'Length constant (cm) [=SQR(Rhom*D/(4*Rhoi*Fold))]
650 PRINT " Lambda=";:IF LAMBDA<.1 THEN PRINT LAMBDA*10000;" microns" ELSE PRINT LAMBDA;" cm"
655 IF PF% THEN LPRINT " Lambda=";:IF LAMBDA<.1 THEN LPRINT LAMBDA*10000;" microns" ELSE LPRINT LAMBDA;" cm"
670 CM=PI*D*FOLD*FCM2 'Capacitance (farads) of 1 cm cyl
680 PRINT " Capacitance=";CM*(1E+09);" nF/cm"
685 IF PF% THEN LPRINT " Capacitance=";CM*(1E+09);" nF/cm"
690 TAU=RHOM*FCM2 'Time constant (sec)
700 PRINT " Tau=";TAU*1000;" msec"
705 IF PF% THEN LPRINT " Tau=";TAU*1000;" msec"
710 RINF=SQR(4*RHOM*RHOI/(PI*PI*D*D*D*FOLD)) 'Input impedance of infinite cyl
720 PRINT " Rinf=";RINF/1000000!;" Mohms; g-inf=";1000000!/RINF;" umho"
725 IF PF% THEN LPRINT " Rinf=";RINF/1000000!;" Mohms; g-inf=";1000000!/RINF;" umho"
900 PRINT "SPHERE (";D*10000;"micron diameter):"
910 IF PF% THEN LPRINT "SPHERE (";D*10000;"micron diameter):"
920 CS=PI*D*D*FOLD*FCM2 'Capacitance (farads) of sphere
930 RS=RHOM/(PI*D*D*FOLD) 'Resistance (ohms) of sphere
940 PRINT " R sphere =";RS/1000000!;" Mohms"
950 PRINT " C sphere=";CS*(1E+09);"nF"
960 IF PF% THEN LPRINT " R sphere=";RS/1000000!;" Mohms
970 IF PF% THEN LPRINT " C sphere=";CS*(1E+09);"nF"
990 IF PF% THEN LPRINT
995 RETURN
999 '******* Subroutine to input a length and convert to cm *********
1000 PRINT " (";UNIT$;: INPUT ;"s)";XX
1005 ON U% GOTO 1010,1020,1030,1040,1050 'XX in UNIT$s --> X in cm
1007 GOTO 1060
1010 X=XX*LAMBDA: RETURN 'lambdas-->cm
1020 X=XX: RETURN 'cm-->cm
1030 X=XX/10: RETURN 'mm-->cm
1040 X=XX/10000: RETURN 'mu-->cm
1050 X=XX/CM/(1E+09): RETURN 'nF-->cm
1060 PRINT "ILLEGAL UNIT": RETURN
1099 '************ Axoplasmic resistivity *****************************
1100 INPUT "INPUT NEW AXOPLASMIC RESISTIVITY (Ohm-cm)[DEFAULT=50]";RHOI
1105 IF PF% THEN LPRINT "AXOPLASMIC RESISTIVITY (Ohm-cm)= ";RHOI
1110 IF RHOI=0 THEN RHOI=50
1130 RETURN
1199 '************ Membrane resistivity ********************************
1200 INPUT "INPUT NEW MEMBRANE RESISTIVITY (Ohm-cm sq)[DEFAULT=1K]";RHOM
1210 IF RHOM=0 THEN RHOM=1000
1215 IF PF% THEN LPRINT "MEMBRANE RESISTIVITY (Ohm-cm sq)= ";RHOM
1230 RETURN
1299 '************ Diameter ********************************************
1300 INPUT "INPUT NEW DIAMETER (microns)";D
1310 IF PF% THEN LPRINT "DIAMETER (microns)= ";D
1320 D=D/10000 'Diameter in cm
1330 RETURN
1399 '************ Infolding ratio *************************************
1400 INPUT "INPUT NEW INFOLDING RATIO (actual/calculated area)";FOLD
1405 IF FOLD=0 THEN FOLD=1
1410 IF PF% THEN LPRINT "INFOLDING RATIO= ";FOLD
1420 RETURN
1499 '************ Segment impedance (Theory notebook, P 27) ****************
1500 PRINT "SEGMENT LENGTH ";: GOSUB 1000: PRINT
1505 SL=XX: L=X: INPUT "TERMINATION R in Ohms (-1=sealed)";RTERM
1510 IF PF% THEN LPRINT "DEFINED SEGMENT ";SL;UNIT$;"s; Termination R=";: IF RTERM>-1 THEN LPRINT RTERM ELSE LPRINT "INFINITE"
1520 LM=L/LAMBDA: GINF=1/RINF
1530 IF RTERM=0 THEN A=EXP(LM)/FNSINH(LM)/2: B=-EXP(-LM)/FNSINH(LM)/2: GOTO 1570
1540 IF RTERM=-1 THEN A=EXP(LM)/FNCOSH(LM)/2: B=EXP(-LM)/FNCOSH(LM)/2 :GOTO 1570
1550 GTERM=1/RTERM
1560 A=(GINF+GTERM)*EXP(LM)/(GINF*FNCOSH(LM)+GTERM*FNSINH(LM))/2
1565 B=(GINF-GTERM)*EXP(-LM)/(GINF*FNCOSH(LM)+GTERM*FNSINH(LM))/2
1570 GL=GINF*(A-B)
1575 PRINT "R segment =";1/GL/1000000!;" Mohms"
1580 PRINT "g segment =";GL*1000000!;" micromhos"
1585 IF PF% THEN LPRINT "R segment =";1/GL/1000000!;" Mohms"
1590 IF PF% THEN LPRINT "g segment =";GL*1000000!;" micromhos"
1592 IF PF% THEN LPRINT
1595 RETURN
1599 '************ Segment attenuation **********************************
1600 IF L=0 THEN GOSUB 1500
1610 PRINT "DISTANCE ALONG SEGMENT ";: GOSUB 1000: PRINT
1620 AT=A*EXP(-X/LAMBDA) + B*EXP(X/LAMBDA)
1630 PRINT "ATTENUATION FACTOR=";AT
1635 IF PF% THEN LPRINT " Attenuation ";X;" lambdas along segment =";AT
1690 IF PF% THEN LPRINT
1695 RETURN
1699 '************ Compartment specs ************************************
1700 PRINT "CMPT SEGMENT LENGTH ";: GOSUB 1000
1705 IF PF% THEN LPRINT "FOR A COMPARTMENT SEGMENT OF ";XX;UNIT$;"s:"
1710 PRINT " (in Lambdas=";X/LAMBDA;" in mm=";X*10;")"
1715 IF PF% THEN LPRINT " (in Lambdas=";X/LAMBDA;" in mm=";X*10;")"
1730 PRINT "COMPARTMENT CAPACITANCE = ";CM*(1E+09)*X;"nF"
1735 IF PF% THEN LPRINT " Compartment capacitance = ";CM*(1E+09)*X;"nF"
1740 PRINT "CMPT MEMBRANE RESISTANCE = ";RM/X/1000000!;"Mohms; CONDUCTANCE="X*1000000!/RM;" umhos"
1745 IF PF% THEN LPRINT " Cmpt membrane resistance = ";RM/X/1000000!;"Mohms; CONDUCTANCE=";X*1000000!/RM;" umhos"
1750 PRINT "COUPLING RESISTANCE = ";RI*X/1000000!;"Mohms; CONDUCTANCE=";1000000!/X/RI;" umhos"
1755 IF PF% THEN LPRINT " Coupling resistance = ";RI*X/1000000!;"Mohms; Conductance=";1000000!/X/RI;" umhos"
1760 PRINT "INTERCOMPARTMENTAL TIME CONSTANT = ";RI*X*CM*X*1000;" msec"
1765 IF PF% THEN LPRINT "INTERCOMPARTMENTAL TIME CONSTANT = ";RI*X*CM*X*1000;" msec"
1790 IF PF% THEN LPRINT
1795 RETURN
1799 '************ Change units *****************************************
1800 INPUT "UNITS (lambda, cm, mm, mu, nF):";UNIT$
1805 L=0
1810 IF LEFT$(UNIT$,6)="LAMBDA" OR LEFT$(UNIT$,6)="lambda" THEN UNIT$="lambda": U%=1: RETURN
1820 IF LEFT$(UNIT$,2)="CM" OR LEFT$(UNIT$,2)="cm" THEN UNIT$="cm": U%=2: RETURN
1830 IF LEFT$(UNIT$,2)="MM" OR LEFT$(UNIT$,2)="mm" THEN UNIT$="mm": U%=3: RETURN
1840 IF LEFT$(UNIT$,2)="MU" OR LEFT$(UNIT$,2)="mu" THEN UNIT$="mu": U%=4:RETURN
1850 IF LEFT$(UNIT$,2)="NF" OR LEFT$(UNIT$,2)="nf" OR LEFT$(UNIT$,2)="nF" THEN UNIT$="nF": U%=5: RETURN
1860 PRINT "ILLEGAL UNIT": GOTO 1800