REM Gas Chromatogram Simulation REM by R.G. Weston 2002/02/21 MODE0 PRINTTAB(12,10)"Press Space-bar to start and also to restart at the end" G=GET:CLS VDU23;8202;0;0;0; PRINTTAB(12)"G A S C H R O M A T O G R A M S I M U L A T I O N" GCOL0,1 VDU29,100;100; xscale=1000 yscale=1 : peaks=3+RND(5) DIM xshift(peaks),value(peaks),rank%(peaks),yscale(peaks) FOR peak = 1 TO peaks value(peak)=RND(1) yscale(peak)=10*RND(1) NEXT peak : PROCsort FOR J=1 TO peaks xshift(J)=value(rank%(J)) NEXT J : TIME=0 MOVE 1000,0:DRAW 1000,-10:MOVE 1000,0 : FOR x=1 TO 0 STEP -.005 delay=INKEY(10) Y=0 FOR peak=1 TO peaks Dt=(1-xshift(peak))*.0001 PRINTTAB(60,3);TIME DIV 100;" secs." PROCpeak(xshift(peak)) Y=Y+y NEXT peak DRAWx*xscale,Y*yscale NEXT x PRINTTAB(0,3)"Peak Area"' FOR I=1 TO peaks:PRINT'TAB(1);I;SPC(5);.01*(INT(yscale(I)*100+.5)) MOVE xscale*xshift(I),0:PLOT69,xscale*xshift(I),-10 NEXT COLOUR0 G=GET RUN END : DEF PROCpeak(xshift) y=yscale(peak)*(0.5*(Dt*PI)^-0.5)*EXP(-(x-xshift)*(x-xshift)/(4*Dt)) ENDPROC DEF PROCsort:LOCAL I FOR I = 1 TO peaks rank%(I)=I NEXT PROCquicksort(1,peaks) ENDPROC DEF PROCquicksort(low%,high%) LOCAL left%,right%,it,dummy% left%=low%:right%=high% it=value(rank%((low%+high%)DIV 2)) REPEAT IF value(rank%(left%))>it THEN REPEAT left%=left%+1:UNTIL value(rank%(left%))<=it IF value(rank%(right%))=it IF left%<=right% THEN dummy%=rank%(left%):rank%(left%)=rank%(right%):rank%(right%)=dummy%:left%=left%+1:right%=right%-1 UNTIL left%>right% IF right%>low% THEN PROCquicksort(low%,right%) IF left%