DECLARE SUB timelen (mass!, q!, vext!, vplat!, tottim!) 100 OPTION BASE 1 110 DIM mass(370), Zpriority(20) DIM z(370), a(370), abund(370), label$(370) 115 DATA 6.0 DATA 7.0 DATA 8.0 DATA 13.0 DATA 24.0 DATA 26.0 DATA 28.0 DATA 29.0 DATA 30.0 130 REM ** PROGRAM TO SEARCH FOR CHARGE AND MASS COMBINATIONS WITH A** 140 REM ** DEFINED RANGE OF BRHO.** 150 C = 299579000#: Amu = 1: TMCOM = 1.4425: Ltotube = .75: Ltube = 1.2: Lchop = 10! NDEF = 9: maxent = 318 155 FOR i = 1 TO NDEF READ Zpriority(i) NEXT i OPEN "c:\qb45\bas\MASS2.TBL" FOR INPUT ACCESS READ AS 1 ON ERROR GOTO 295 210 FOR i = 1 TO maxent 220 INPUT #1, label$(i), z(i), n, mass(i), abund(i), time a(i) = z(i) + n REM PRINT USING " & ## ## ###.### ##.# ## "; label$(i); Z(i); a(i); mass(i); abund(i); time 290 NEXT i 295 CLOSE 1 ON ERROR GOTO 510 300 Nmass = i - 1 160 CLS PRINT "***********************************SAMEBRHO*************************************" PRINT " ** PROGRAM TO SEARCH FOR CHARGE AND MASS COMBINATIONS WITHIN A**" PRINT " ** DEFINED RANGE OF BRHO.**" PRINT 170 Rho = .4 180 INPUT "Enter Allowed Fractional Range of BRho (0 ends program): "; Delta 185 IF Delta = 0! THEN GOTO 510 190 INPUT "Enter Ion Source Extraction Voltage in keV: "; Volt 195 INPUT "Enter Platform Acceleration Voltage in keV: "; Pvolt 305 INPUT "Input Reference Ion's Mass, Z and Charge (0,0,0 restarts program): "; A0, Z0, Q0 307 IF A0 = 0! THEN GOTO 160 Zpriority(NDEF + 1) = Z0 ' ' Find correct mass of Reference ion ' FOR i = 1 TO maxent IF a(i) = A0 AND z(i) = Z0 THEN M0 = mass(i) GOTO 375 END IF NEXT i ' ' Else prompt again for correct input values ' PRINT " Ion could not be found in table. "; A0, Z0 PRINT "Re-enter the data please. " GOTO 305 375 Massratio = M0 / Q0 380 Setrigidity = TMCOM * SQR(Massratio * Volt / 1000!) 381 Bg = Setrigidity / Rho 385 CALL timelen(M0, Q0, Volt, Pvolt, Time0) 390 Lowrigidity = (1! - Delta) * Setrigidity 400 Highrigidity = (1! + Delta) * Setrigidity 401 CLS 402 PRINT " SEARCH FOR SIMILAR RIGIDITY PARTICLES FROM SOURCE" 405 PRINT 407 PRINT " Central Particle Mass="; M0; "Atomic Number="; Z0; " Charge = "; Q0; "" 408 PRINT " Extraction Voltage"; Volt; "keV Beam Rigidity="; Setrigidity; " kG-m" 409 PRINT " Magnet Radius of Curvature="; Rho; "m. Field="; Bg; "kGauss" PRINT " Platform Voltage "; Pvolt; "keV"; " Total flight time "; Time0; " nsec." PRINT 410 PRINT USING " Allowed dBRho/BRho = #.### #.#####kG-m TO #.####kG-m"; Delta; Lowrigidity; Highrigidity; PRINT 415 PRINT " ID Mass Q Abund. BRho (kG-m) B(kGauss) Delta B M0/DM dTime(ns)" nlines = 0 ' ' First extract the highest probability interfering elements ' VIEW PRINT 10 TO 24 420 FOR j = 1 TO (NDEF + 1) FOR i = 1 TO maxent IF z(i) = Zpriority(j) THEN IF a(i) = A0 AND z(i) = Z0 THEN GOTO 480 440 FOR q = 1 TO z(i) GOSUB 540 'CALL Magrig(Mass,q,Volt,Brho) 460 IF Brho > Lowrigidity AND Brho < Highrigidity THEN 465 Bbeam = Brho / Rho: Dbeam = Bbeam - Bg 466 denom = (mass(i) / q) - Massratio 468 IF denom <> 0 THEN Res = Massratio / denom CALL timelen(mass(i), q, Volt, Pvolt, Time2) dtime = Time2 - Time0 470 PRINT USING " \\ ### ## ###.## ##.#### #.#### #.#### #####.## #####.#"; label$(i); mass(i); q; abund(i); Brho; Bbeam; Dbeam; Res; dtime ELSE 475 PRINT USING " \\ ### ## ###.## ##.#### #.#### #.#### Infinite"; label$(i); mass(i); q; abund(i); Brho; Bbeam; Dbeam END IF nlines = nlines + 1 IF nlines > 12 THEN GOSUB 600 END IF NEXT q END IF 480 NEXT i NEXT j ' ' Now check on all the less probable elements. ' PRINT "********************** Lower Probability Contaminants are: *******************" FOR i = 1 TO maxent FOR j = 1 TO (NDEF + 1) IF z(i) = Zpriority(j) THEN GOTO 500 NEXT j FOR q = 1 TO z(i) GOSUB 540 'CALL Magrig(Mass,q,Volt,Brho) IF Brho > Lowrigidity AND Brho < Highrigidity THEN Bbeam = Brho / Rho: Dbeam = Bbeam - Bg denom = (mass(i) / q) - Massratio IF denom <> 0 THEN Res = Massratio / denom CALL timelen(mass(i), q, Volt, Pvolt, Time2) dtime = Time2 - Time0 PRINT USING " \\ ### ## ###.## ##.#### #.#### #.#### #####.## #####.#"; label$(i); mass(i); q; abund(i); Brho; Bbeam; Dbeam; Res; dtime ELSE PRINT USING " \\ ### ## ###.## ##.#### #.#### #.#### Infinite"; label$(i); mass(i); q; abund(i); Brho; Bbeam; Dbeam END IF nlines = nlines + 1 IF nlines > 12 THEN GOSUB 600 END IF NEXT q 500 NEXT i 505 VIEW PRINT 1 TO 24: LOCATE 24, 1: GOTO 305 510 END 520 'SUB Magrig(Mass,Q,Volt,Brho) 540 Kvtomv = 1000! 560 Energy = q * Volt / Kvtomv 570 Momentum = TMCOM * SQR(mass(i) * Energy) 580 Brho = Momentum / q 590 RETURN ' Subroutine to reset cursor and write over data after page is full 600 LOCATE 24, 1: PRINT "Strike any key to continue"; WHILE (INKEY$ = "") WEND LOCATE 24, 1 nlines = 0 RETURN SUB timelen (mass, q, vext, vplat, tottim) C = 299579000#: Ltotube = .81: Ltube = 1.1: Lchop = 20.5 Massratio = mass / q Accel = C * C * vplat / (931507 * Massratio * Ltube) 'acceleration down accelerator tube in m/s vel1 = C * SQR(vext / (465754 * Massratio)) tottim = Ltotube / vel1 timtub = (SQR(vel1 * vel1 + 2 * Accel * Ltube) - vel1) / Accel tottim = tottim + timtub vel2 = C * SQR((vplat + vext) / (465754 * Massratio)) tottim = tottim + Lchop / vel2 tottim = tottim * 1E+09 ' convert to nanoseconds END SUB