10 REM Ab_affi PROGRAM WRITTEN ON 05/02/1992, FOR CALCULATING AFFINITY 20 REM OF MONOCLONAL ANTIBODY TO ANTIGEN BY USING NON-COMPETITIVE ELISA 21 REM *************************************************************** 22 REM * AB_AFFI PROGRAM IS DEVELOPED FOR CALCULATING Ab-Ag AFFINITY * 23 REM * THIS IS BASED ON NON-COMPTITIVE ELISA METHOD * 24 REM * SOFTWARE WAS DEVELOPED BY G P S RAGHAVA, SCIENTIST, IMTECH * 25 REM * CHANDIGARH, INDIA * 26 REM *************************************************************** 30 CLS 40 DIM M[96],T[8,8],AG[8],AB50[8] 50 DIM ST[96],STR[96],MC[96],MC1[96],MC2[96],MCR[96],MCR1[96] 60 DIM OD(8,12),OD1(8,12) 70 ON ERROR GOTO 4230 80 SCREEN 0:COLOR 4,1,3:CLS:SCREEN 0 90 COLOR 1,2,3 100 LOCATE 2,10:PRINT"**************************************************************" 110 LOCATE 3,10:PRINT"* Ab_affi COMPUTER PROGRAM *" 120 LOCATE 4,10:PRINT"* *" 130 LOCATE 5,10:PRINT"**************************************************************" 140 LOCATE 6,10:PRINT"* This Program may Receive O.D. data directly from microtiter*" 150 LOCATE 7,10:PRINT"* plate, from keyboard or from data file. The main function *" 160 LOCATE 8,10:PRINT"* of this program is to calculate the affinity of antibody *" 170 LOCATE 9,10:PRINT"* by using non-competitive ELISA. It perform the following *" 180 LOCATE 10,10:PRINT"* functions *" 190 LOCATE 11,10:PRINT"* *" 200 LOCATE 12,10:PRINT"* 1. Print/display the data in 8 x 12 format *" 210 LOCATE 13,10:PRINT"* 2. Print the average data if samples are in dupl.,trip. etc*" 220 LOCATE 14,10:PRINT"* 3. Calculates the Semilogarithmic Linear Range of Ab/Ag *" 230 LOCATE 15,10:PRINT"* 4. Derived the Linear Interpolation Formula *" 240 LOCATE 16,10:PRINT"* 5. Derived the Hyperbolic Interpolation Formula *" 250 LOCATE 17,10:PRINT"* 6. Calculates the Capacity, Flatness and Signal, which are *" 260 LOCATE 18,10:PRINT"* the essential parameter for ELISA Optimization *" 270 LOCATE 19,10:PRINT"* 7. Calculates the OD-100 (Maximum OD) and conc. at OD-50 *" 280 LOCATE 20,10:PRINT"* 8. Determine the affinity of monoclonal antibody *" 290 LOCATE 21,10:PRINT"**************************************************************" 300 LOCATE 22,10:PRINT "PLATE NO.:";:PL$ =INPUT$(1) 310 OPEN "SCRN:" FOR OUTPUT AS #1 320 P = 1 : CLS 330 REM OPTIONS FOR USER TO FEED O.D. DATA DIRECTLY FROM 340 REM PLATE READER OR BY USING FILE OR KEYBOARD 350 LOCATE 2,10: PRINT "INPUT O.D. DATA BY DIRECT/FILE/KEYBOARD (D/F/K):"; 360 C$=INPUT$(1) 370 IF(C$ = "K" OR C$ = "k") THEN GOTO 410 380 IF(C$ = "F" OR C$ = "f") THEN GOTO 500 390 IF(C$ = "D" OR C$ = "d") THEN GOTO 600 400 PLAY "BCDABCD" :LOCATE 2,60:PRINT "NOT VALID CHOICE" :GOTO 350 410 REM FED OD DATA BY USING KEYBOARD 420 FOR I = 1 TO 8 430 PRINT:PRINT"ENTER O.D. OF ROW NO. :"; :PRINT USING "###";I 440 FOR J = 1 TO 12 450 PRINT"COLUMN NO. ",J; 460 INPUT " :",OD(I,J) 470 NEXT J 480 NEXT I 490 GOTO 780 500 REM INPUT DATA FROM FILE 510 LOCATE 4,10:PRINT :INPUT "ENTER THE NAME OF THE O.D. DATA FILE :",FIL$ 520 OPEN "I",#3,FIL$ 530 FOR I = 1 TO 8 540 FOR J = 1 TO 12 550 INPUT#3,OD[I,J] 560 NEXT J 570 NEXT I 580 CLOSE #3 590 GOTO 780 600 REM INPUT O.D. DATA FROM SERIAL PORT 610 PRINT "ENTER READER SLOT NUMBER :";:FI$ = INPUT$(1) 620 RN = VAL (FI$) 630 IF (RN > 1) THEN FIL$ = "COM" + FI$ + ":" ELSE FIL$ = "COM1:" 640 OPEN "I",#3,FIL$ 650 PRINT "SWITCH PLATE MOVEMENT TO AUTO AND HIT RUN WHEN READY TO BEGIN." 660 PRINT "PLEASE ALLOW READER TO FINISH PLATE" 670 PRINT : PRINT " READING PLATE " 680 FOR I = 1 TO 8 690 FOR J = 1 TO 12 700 INPUT#3,DEN$ 710 IF LEFT$(DEN$,3) = "A 1" THEN PA$ = "1" 720 IF PA$ < > "1" THEN GOTO 700 730 IF RIGHT$(DEN$,4) = "OVER" THEN DEN$ = "1.7" 740 IF RIGHT$(DEN$,5) = "UNDER" THEN DEN$ = ".01" 750 OD[I,J] = VAL (RIGHT$(DEN$,6)) 760 NEXT J 770 NEXT I 780 PRINT "ENTER PRINTER PORT NUMBER:" : FI$=INPUT$(1) 790 RN = VAL(FI$) :PRINT RN 800 IF ((RN < 1) OR (RN > 10)) THEN FIL$ = "LPT1:":GOTO 820 810 FIL$ = "LPT" + FI$ + ":" 820 OPEN "O",#2,FIL$ 830 FOR I = 1 TO 8 840 FOR J = 1 TO 12 850 IF (OD[I,J] < .01) THEN OD[I,J] = .01 860 NEXT J: NEXT I 870 CLS: LOCATE 2,30:PRINT "OPTICAL DENSITY IN 8 x 12 FORMAT" 880 FOR I = 1 TO 12 890 LOCATE 4,(I*6): PRINT USING "##";I; 900 NEXT I 910 FOR R = 1 TO 8 920 LOCATE (4 + R), 4:PRINT CHR$(64+R) 930 FOR C = 1 TO 12 940 LOCATE (4 + R),6*C:PRINT USING "#.###";OD[R,C] 950 NEXT C 960 NEXT R 970 IF P = 2 THEN GOTO 1530 980 LOCATE 15,10:PRINT "DO YOU WANT TO EDIT THIS O.D. DATA (Y/N):";:C$=INPUT$(1) 990 IF(C$="Y" OR C$="y") OR (C$="N" OR C$="n") THEN 1010 1000 PLAY "BCDABCD":BEEP:LOCATE 15,60:PRINT "NOT VALID OPTION":GOTO 980 1010 IF(C$ = "N" OR C$ = "n") THEN GOTO 1170 1020 REM TO EDIT THE O.D. DATA 1030 LOCATE 17,10:INPUT "ENTER TOTAL NO. OF O.D. DATA TO BE MODIFY AND HIT :",T1 1040 FOR K = 1 TO T1 1050 LOCATE 19,10:INPUT "ENTER ROW NO. :",I 1060 IF ((I < 1) OR (I > 8)) THEN PLAY "BCDABCD":BEEP: LOCATE 19,60 :PRINT "NOT VALID ROW":GOTO 1050 1070 LOCATE 19,35:INPUT "ENTER COLUMN NO. :",J 1080 IF ((J < 1) OR (J > 12)) THEN PLAY "BCDABCD":BEEP: LOCATE 19,60 :PRINT "NOT VALID COL":GOTO 1070 1090 LOCATE 20,10:PRINT "OLD VALUE = OF ROW NO. = COLUMN NO. = " 1100 LOCATE 20,22:PRINT USING "#.###";OD[I,J] 1110 LOCATE 20,42:PRINT USING "##" ;I 1120 LOCATE 20,59:PRINT USING "##";J 1130 LOCATE 21,10:INPUT "ENTER THE NEW VALUE :",FI$: OD[I,J] = VAL(FI$) 1140 LOCATE (4+I),6*J:PRINT USING "#.###";OD[I,J] 1150 NEXT K 1160 GOTO 830 1170 LOCATE 22,1:PRINT "DO YOU WANT TO STORE THIS DATA FOR FUTURE USE (Y/N):"; 1180 C$ = INPUT$(1) 1190 IF(C$="Y" OR C$="y") OR (C$="N" OR C$="n") THEN 1210 1200 PLAY "BCDABCD" : LOCATE 22,60: PRINT "NOT VALID OPTION":GOTO 1170 1210 IF(C$ = "N" OR C$ = "n") THEN GOTO 1330 1220 REM PRINT THE O.D. DATA ON PRINTER 1230 LOCATE 23,10:INPUT "ENTER THE NAME OF THE FILE :",FIL$ 1240 OPEN "O",#3,FIL$ 1250 REM STORE OD DATA IN 8x12 FORMAT IN THE FILE 1260 FOR R = 1 TO 8 1270 FOR C = 1 TO 12 1280 PRINT #3,OD[R,C]; 1290 NEXT C 1300 PRINT #3, 1310 NEXT R 1320 CLOSE(3) 1330 LOCATE 24,1:PRINT "DO YOU WANT TO PRINT THIS OD DATA ON PRINTER (Y/N):"; 1340 C$ = INPUT$(1) 1350 IF(C$="Y" OR C$="y") OR (C$="N" OR C$="n") THEN 1370 1360 PLAY "BCDABCD": BEEP:LOCATE 24,60 :PRINT "NOT VALID OPTION":GOTO 1330 1370 IF(C$ = "N" OR C$ = "n") THEN GOTO 1550 1380 P = 2 1390 PRINT #P," " 1400 PRINT #P," OPTICAL DENSITY IN 8 x 12 FORMAT" 1410 PRINT #P, " " :PRINT #P," "; 1420 FOR I = 1 TO 12 1430 PRINT #P,USING "##";I;:PRINT #P," "; 1440 NEXT I 1450 FOR R = 1 TO 8 1460 PRINT #P,:PRINT #P,CHR$(64+R); :PRINT #P," "; 1470 FOR C = 1 TO 12 1480 PRINT #P,USING "#.###";OD[R,C]; : PRINT #P," "; 1490 NEXT C 1500 NEXT R 1510 PRINT #P," " :PRINT #P," " 1520 P = 1 1530 REM INPUT DILUTION TEMPLATE DATA WHICH IS THE INFORMATION 1540 REM ABOUT THE [Ag] CONC. COATED ON PLATE & [Ab] CONC. 1550 PLAY "BCDABCD" :PLAY "BCDABCD" : PLAY "BCDABCD": SCREEN 0:COLOR 3,1,4 :CLS 1560 LOCATE 2,10:PRINT "FEED DILUTION TEMPLATE DATA FROM KEYBOARD/FILE (K/F):"; 1570 C$ = INPUT$(1) 1580 IF (C$ ="K" OR C$="k") THEN GOTO 1760 1590 IF(C$ = "F" OR C$ = "f") THEN GOTO 1610 1600 BEEP:PLAY "BCDABCD": LOCATE 2,60: PRINT "NOT VALID OPTION" :GOTO 1560 1610 LOCATE 4,10:INPUT "ENTER NAME OF THE FILE (DILUTION TEMPLATE):",FIL$ 1620 OPEN "I",#3,FIL$ 1630 INPUT #3,SF,DF,TOT,IC1,AGT,UN 1640 FOR J = 1 TO AGT 1650 INPUT #3,AG[J] 1660 FOR I = 1 TO TOT 1670 INPUT #3, T(J,I) 1680 NEXT I 1690 NEXT J 1700 INPUT #3,U$ 1710 FOR I = 1 TO IC1 1720 INPUT #3, MC2[I] 1730 NEXT I 1740 CLOSE(3) 1750 GOTO 2450 1760 LOCATE 4,10 :PRINT "ENTER NO. OF ROWS USED FOR SERIALLY ADDED [Ab] TO WELLS FOR A" 1770 LOCATE 5,10 :PRINT " SINGLE [Ag] CONCENTRATION COATING ON PLATE : "; 1780 C$ = INPUT$(1) : TOT = VAL(C$) 1790 IF (TOT > 1) OR (TOT < 8) THEN GOTO 1810 1800 PLAY "BCDABCD" :LOCATE 5,60 :PRINT "NOT VALID OPTION":GOTO 1760 1810 LOCATE 7,10 :PRINT "ENTER WHETHER [Ab] CONC. ARE IN SINGLET,DUPLICATE OR" 1820 LOCATE 8,10 :PRINT "TRIPLICATE. ENTER '1' FOR SINGLE '2' FOR DUPLICATE ETC.:"; 1830 C$ = INPUT$(1) :SF = VAL(C$) 1840 IC1 = (TOT * 12)/SF 1850 LOCATE 10,10 :PRINT "WHETHER THE CONC. OF [Ab] ARE IN LOG DILUTION (Y/N):"; 1860 C$ = INPUT$(1) 1870 IF(C$="Y" OR C$="y") OR (C$="N" OR C$="n") THEN GOTO 1890 1880 PLAY "BCDABCD" :LOCATE 10,60 :PRINT "NOT VALID OPTION" :GOTO 1850 1890 IF(C$ = "N" OR C$ = "n") THEN GOTO 2000 1900 LOCATE 12,10 :PRINT "ENTER DILUTION FACTOR OF KNOWN STD (2-9), FOR EXAMPLE" 1910 LOCATE 13,10 :PRINT "ENTER '2' FOR TWO-FOLD DILUTION ETC.:";:C$=INPUT$(1) 1920 DF = VAL(C$) 1930 IF (DF > 2) THEN PLAY "BCDABCD" :BEEP: LOCATE 13,60:PRINT "NOT VALID OPT.":GOTO 1630 1940 PRINT 1950 LOCATE 15,10 :INPUT "ENTER INITIAL CONC. OF [Ab] :",CONC 1960 FOR I = 1 TO IC1 1970 MC2[I] = CONC /(DF^(I - 1)) 1980 NEXT I 1990 GOTO 2050 2000 FOR I = 1 TO IC1 :PRINT 2010 INPUT "PLEASE ENTER THE CONC. OF [Ab] SERIALLY :",M 2020 MC2(I) = M 2030 NEXT I 2040 CLS 2050 LOCATE 17,10 :PRINT "THE ANTIBODY CONCENTRATION OF KNOWN STANDARDS ARE IN" 2060 LOCATE 18,10 :PRINT "MICROGRAMS/ML (M) OR NANOGRAM/ML (N) OR PICOGRAM/ML (P):"; 2070 C$ = INPUT$(1) 2080 IF (C$ ="M") OR (C$ = "m") THEN U$ ="MICROGRAMS/ML":UN = 6:GOTO 2120 2090 IF (C$ ="N") OR (C$ = "n") THEN U$ ="NANOGRAM/ML" :UN = 8:GOTO 2120 2100 IF (C$ ="P") OR (C$ = "p") THEN U$ ="PICOGRAM/ML" :UN = 10:GOTO 2120 2110 PLAY "BCDABCD" : LOCATE 18,60: PRINT "NOT VALID OPT.":GOTO 2050 2120 COLOR 3,6,1:CLS 2130 LOCATE 2,10:PRINT "ENTER NO. OF DIFFERENT [Ag] CONC. COATED ON PLATE:"; 2140 C$ = INPUT$(1) : AGT = VAL(C$):PRINT 2150 FOR J = 1 TO AGT 2160 PRINT "ENTER COATING NO.";:PRINT USING "##";J;:INPUT " [Ag] CONC.",AG[J] 2170 PRINT "ENTER FIRST ROW NO. FOR THIS [Ag] COATING ON PLATE (1-8):"; 2180 C$ = INPUT$(1) :T(J,1) = VAL(C$) 2190 IF (T(J,1) < 1) OR (T(J,1) > 8) THEN GOTO 2170 2200 IF TOT < 2 THEN GOTO 2260 2210 FOR I = 2 TO TOT 2220 PRINT 2230 PRINT "ENTER NEXT ROW NO. CONTAINING KNOWN STANDARDS (1-8):"; 2240 IF (T(J,I) < 1) OR (T(J,I) > 8) THEN PLAY "BCDABCD" :GOTO 2230 2250 NEXT I 2260 PRINT 2270 NEXT J 2280 PRINT "STORE DILUTION TEMPLATE FOR FUTURE USE (Y/N):";:C$=INPUT$(1) 2290 IF (C$ = "N") OR (C$ = "n") THEN GOTO 2420 2300 IF (C$ = "Y") OR (C$ = "y") THEN GOTO 2320 2310 PLAY "BCDABCD" :GOTO 2280 2320 PRINT:INPUT "ENTER NAME OF THE FILE:",FIL$ 2330 OPEN "O",#3,FIL$ 2340 PRINT #3,SF,DF,TOT,IC1,AGT,UN 2350 FOR J = 1 TO AGT 2360 PRINT #3,AG[J]; 2370 FOR I = 1 TO TOT 2380 PRINT #3,T(J,I); 2390 NEXT I 2400 NEXT J 2410 PRINT #3,U$ 2420 FOR I = 1 TO IC1 2430 PRINT #3,MC2[I] 2440 NEXT I 2450 REM TO PRINT THE AVERAGE DATA 2460 N = INT(12/SF) 2470 FOR I = 1 TO 8 2480 M = 0 2490 FOR J = 1 TO 12 STEP SF 2500 SUM = 0 2510 FOR K = J TO (J + SF - 1) 2520 SUM = SUM + OD(I,K) 2530 NEXT K 2540 M = M + 1 2550 SUM = SUM/SF 2560 OD1(I,M) = SUM 2570 NEXT J 2580 NEXT I 2590 PRINT 2600 IF SF = 1 THEN GOTO 2830 2610 PRINT #P," AVERAGE OD IN 8 X";:PRINT #P,USING "##";N; 2620 PRINT #P," FORMAT" 2630 PRINT #P,: PRINT #P," "; 2640 FOR I = 1 TO N 2650 PRINT #P,USING "##";I;:PRINT #P," "; 2660 NEXT I 2670 FOR R = 1 TO 8 2680 PRINT #P,:PRINT #P,CHR$(64+R); :PRINT #P," "; 2690 FOR C = 1 TO N 2700 PRINT #P,USING "#.###";OD1[R,C]; :PRINT #P," "; 2710 NEXT C 2720 NEXT R 2730 PRINT #P," " :PRINT #P," " 2740 IF P = 2 THEN GOTO 2820 2750 PRINT "DO YOU WANT TO PRINT THE AVERAGE O.D. DATA ON PRINTER :"; 2760 C$ = INPUT$(1) 2770 IF(C$="Y" OR C$="y") OR (C$="N" OR C$="n") THEN 2790 2780 GOTO 2750 2790 IF(C$ = "N" OR C$ = "n") THEN GOTO 2830 2800 P = 2 2810 GOTO 2610 2820 P = 1 2830 PRINT "OUTPUT OF ELISA DATA ANALYSIS ON SCREEN OR ON PRINTER (P/S):"; 2840 C$ = INPUT$(1) 2850 IF ((C$ = "P") OR (C$ = "p")) THEN P = 2 :GOTO 2880 2860 IF ((C$ = "S") OR (C$ = "s")) THEN P = 1 :GOTO 2880 2870 PLAY "BCDABCD" :PRINT "NOT VALID OPTION" :GOTO 2830 2880 SCREEN 0: COLOR 6,2,3 : CLS 2890 PRINT #P,"PLATE NO. = "; : PRINT #P,PL$; 2900 PRINT #P,", DILUTION FACTOR = "; :PRINT #P, USING "###";DF; 2910 PRINT #P,", INITIAL CONC. = "; :PRINT #P, USING "#####.###";MC2[1]; 2920 PRINT #P,",",U$ 2930 PRINT #P," ":PRINT #P, TAB(20), "ELISA DATA ANALYSIS" 2940 REM TO SORT THE STD. DATA IN ORDER OF INCREASING CONCENTRATION 2950 FOR AGI = 1 TO AGT 2960 PRINT #P," ":PRINT #P,TAB(20),"[Ag] CONC. =",AG[AGI] 2970 K = 0 2980 FOR R = 1 TO TOT 2990 I = T(AGI,R) 3000 FOR C = 1 TO N 3010 K = K + 1 3020 MC[K] = MC2[K] 3030 ST[K] = OD1[I,C] 3040 NEXT C 3050 NEXT R 3060 REM STANDARD DATA 3070 FOR I = 1 TO IC1 3080 FOR H = I+1 TO IC1 3090 IF MC(H) => MC(I) GOTO 3110 3100 SWAP MC(I),MC(H):SWAP ST(I),ST(H) 3110 NEXT H 3120 NEXT I 3130 GOSUB 3720 3140 OD100 = Y0 3150 GOSUB 4010 3160 PRINT #P,"SL-RANGE(OD) = "; 3170 PRINT #P,USING "##.##";SMIN; : PRINT #P," - "; 3180 PRINT #P,USING "##.##";SMAX; 3190 PRINT #P,", SLOPE (SL) = "; : PRINT #P,USING "###.###";SL; 3200 PRINT #P," AND CONSTANT (B) = "; : PRINT #P,USING "###.###";B 3210 PRINT #P,"CAPACITY (X0) ="; : PRINT #P,USING "###.###";X0 ; 3220 PRINT #P,", SIGNAL ="; : PRINT #P,USING "###.###";Y0; 3230 PRINT #P," AND FLATNESS (C0) ="; : PRINT #P,USING "###.###";C0 3240 OD50 = OD100/2 3250 IF OD50 < SMIN THEN GOTO 3290 3260 IF OD50 > SMAX THEN GOTO 3290 3270 CONC = 10^(SL * OD50 + B) 3280 GOTO 3300 3290 CONC = (C0/(OD50 - Y0)) + X0 3300 AB50[AGI] = CONC 3310 PRINT #P,"OD-100 = ";:PRINT #P,USING "#.###";Y0; 3320 PRINT #P,", [AB] CONC. AT OD-50 =";:PRINT #P,USING "####.###";AB50[AGI]; 3330 PRINT #P,",",U$ 3340 IF (P = 1) THEN IF (AGI = 4) THEN PRINT "PRESS RETURN ":C$ = INPUT$(1) 3350 NEXT AGI 3360 PRINT #P,TAB(20),"AFFINITY OF ANTIBODY" 3370 FOR I = 1 TO (AGT -1) 3380 FOR J = 1 TO (AGT - I) 3390 N = AG[J]/AG[J+I] 3400 AF = ((N - 1)/(N * AB50[I+J] - AB50[J])) * 750 * 10^UN 3410 PRINT #P,AF; 3420 NEXT J 3430 PRINT #P,"FOR [Ag] RATIO N =";:PRINT #P, USING "##.##";N 3440 NEXT I 3450 PRINT "DO YOU WANT TO RUN ANOTHER PLATE OR QUIT (R/Q):";:C$=INPUT$(1) 3460 IF(C$="R" OR C$="r") OR (C$="q" OR C$="Q") THEN 3480 3470 PLAY "BCDABCD" :PRINT "NOT VALID OPTION" :GOTO 3450 3480 IF(C$ = "R" OR C$ = "r") THEN CLOSE : CLS :GOTO 80 3490 PRINT "THANKS FOR USING Ab/Ag COMPUTER PROGRAM" 3491 PRINT "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" 3492 PRINT "========================================================" 3493 PRINT "* IF YOU FACE ANY PROBLEM IN USING THIS PROGRAM OR YOU *" 3494 PRINT "* WANT TO COMMENT ON THIS PROGRAM PLEASE CONTACT ME *" 3495 PRINT "* -----------------------------------------------------*" 3496 PRINT "# G. P. S. RAGHAVA, SCIENTIST, COMPUTER CENTER, IMTECH #" 3497 PRINT "# SECTOR 39A, CHANDIGARH, INDIA #" 3498 PRINT "# Email: raghava@imtech.ernet.in #" 3499 PRINT "#------------------------------------------------------#" 3500 END 3510 REM SUBROUTINE FOR DRIVING LINEAR INTERPOLATION FORMULA USING 3520 REM LINEAR REGRESSION AND LEAST SQUARE CURVE-FITTING METHOD 3530 SUMX = 0 3540 SUMY = 0 3550 SUMXY = 0 3560 SUMXSQ = 0 3570 FOR I = 1 TO I1 3580 SUMX = SUMX + MCR(I) 3590 SUMXSQ = SUMXSQ + MCR(I)^2 3600 SUMY = SUMY + STR(I) 3610 SUMXY = SUMXY + MCR(I) * STR(I) 3620 NEXT I 3630 DE = (I1*SUMXSQ) - (SUMX * SUMX) 3640 A0 = ((SUMY*SUMXSQ) - (SUMX*SUMXY))/DE 3650 A1 = ((I1*SUMXY) - (SUMX*SUMY))/DE 3660 REM FORMULA DERIVATION SUBROUTINE 3670 A0 = -(A0/A1) 3680 A1 = 1/A1 3690 SL = A1 3700 B = A0 3710 RETURN 3720 REM SUBROUTINE FOR DRIVING HYPERBOLIC INTERPOLATION FORMULA 3730 REM USING HYPERBOLIC REGRESSION METHOD 3740 REM 3750 HSX = 0 3760 HSXX = 0 3770 HSY = 0 3780 HSYY = 0 3790 HSXY = 0 3800 HSXXY = 0 3810 HSXYY = 0 3820 FOR I = 1 TO IC1 3830 HSX = HSX + MC(I) 3840 HSXX = HSXX + MC(I) ^2 3850 HSY = HSY + ST(I) 3860 HSYY = HSYY + ST(I) ^2 3870 HSXY = HSXY + MC(I) * ST(I) 3880 HSXXY = HSXXY + (MC(I) ^2) * ST(I) 3890 HSXYY = HSXYY + MC(I) * (ST(I) ^2) 3900 NEXT I 3910 HSE = IC1 * HSXXY - HSXY * HSX 3920 HSF = IC1 * HSXYY - HSXY * HSY 3930 HSB = IC1 * HSXX - HSX * HSX 3940 HSC = IC1 * HSYY - HSY * HSY 3950 HSA = IC1 * HSXY - HSX * HSY 3960 HSD = HSA 3970 X0 = ((HSE * HSD) - (HSF * HSB))/((HSA * HSD) - (HSC * HSB)) 3980 Y0 = ((HSA * HSF) - (HSC * HSE))/((HSA * HSD) - (HSC * HSB)) 3990 C0 = ((HSXY - (X0 * HSY) - (Y0 * HSX))/IC1) + X0*Y0 4000 RETURN 4010 FOR R = 1 TO IC1 4020 MC1[R] = LOG(MC[R])/LOG(10) 4030 NEXT R 4040 K = 0 4050 FOR C = 1 TO (IC1-1) 4060 M(C) = (ST(C+1) - ST(C))/(MC1(C+1) - MC1(C)) 4070 IF M(C) > K THEN K = M(C) :J = C 4080 NEXT C 4090 I1 = 0 4100 FOR C = 1 TO (IC1 - 1) 4110 IF M(C) < M(J)*.7 THEN IF C < J THEN GOTO 4170 4120 I1 = I1 + 1 4130 STR(I1) = ST(C) 4140 MCR(I1) = MC1(C) 4150 MCR1(I1) = MC(C) 4160 IF M(C) < M(J)*.7 THEN IF C > J THEN GOTO 4180 4170 NEXT C 4180 SMIN = STR(1) : SMAX = STR(I1) 4190 CMIN = MCR1(1) : CMAX = MCR1(I1) 4200 REM INTERPOLATION FORMULA DERIVATION 4210 GOSUB 3510 4220 RETURN 4230 REM ERROR TRAPPING SUBROUTINE 4240 IF ERR = 27 THEN PRINT "PRINTER IS OUT OF PAPER" 4250 IF ERR = 68 THEN PRINT "DEVICE IS UNAVILABLE" 4260 IF ERR=53 THEN PRINT "ENTER VALID FILE NAME" :FILES "*.*" 4270 IF (ERL < 600) THEN RESUME 330 4280 IF (ERL < 780) THEN RESUME 600 4290 IF (ERL < 830) THEN RESUME 780 4300 IF (ERL < 1330) THEN RESUME 830 4310 IF (ERL < 1530) THEN RESUME 1330 4320 IF (ERL < 2450) THEN RESUME 1530 4330 IF (ERL < 2830) THEN RESUME 2450 4340 IF (ERL < 3450) THEN RESUME 2830 4350 PRINT "THERE IS SOME CALCULATION ERROR " 4360 GOTO 3370 4370 RETURN