SUBROUTINE SEEING C C Makes plots of some of the useful seeing indicators C C 29 June 1989 C IMPLICIT UNDEFINED(A-Z) SAVE INCLUDE 'VPLOT.INC' INTEGER *4 I, J, ICOLOR, SYMBOL(5), ICHAN, XTYPE, IPLOT, ICUR INTEGER *4 MASK(4), K REAL *4 XMIN, XMAX, YMIN, YMAX, RX, RY, DX, DY, XLO, XHI REAL *4 YLO, YHI, DIST, DIST2, XPLOT(CNT), YPLOT(CNT), SCALE CHARACTER *40 TITLE(6) CHARACTER * 1 CH LOGICAL HCOPY, LPLOT, AUTO INCLUDE 'HARDCOPY.INC' C DATA SYMBOL / 16, 3, 5, 6, 13 / DATA XTYPE, ICHAN, ICUR / 1, 1, 1 / DATA MASK / 1, 2, 4, 8 / C----------------------------------------------------------------------- HCOPY = .FALSE. AUTO = .TRUE. IPLOT = 1 C C PGBEGIN will initiate PGPLOT, open the output device, and set the C device type. C 200 CONTINUE IF ( HCOPY ) THEN NPLOTS= NPLOTS + 1 WRITE(PLOTFILE(6:8),'(I3.3)') NPLOTS CALL PGBEGIN(0, PLOTFILE//PLOT_DEV, 1, 1 ) WRITE(6,*) ' CREATING FILE ', PLOTFILE IF ( PLOT_DEV(2:3) .EQ. 'LPH' ) THEN CALL PGSLW ( 7 ) ELSE CALL PGSLW ( 1 ) END IF ELSE CALL PGBEGIN(0, '/EGA', 1, 1) CALL PGSLW ( 1 ) END IF 210 CONTINUE C----------------------------------------------------------------------- C TITLE(1) contains X-axis label C (2) Y-axis label C (3) The big top label. C (4) The second top label. C (5) The right hand label. C (6) Information line on bottom. C TITLE(3) = DATE TITLE(4) = ' ' TITLE(5) = ' ' TITLE(6) = ' ' LPLOT = .TRUE. IF ( IPLOT .EQ. 1 ) THEN TITLE(2) = 'DELAY LINE JITTER' IF ( XTYPE .EQ. 1 ) THEN TITLE(1) = 'TIME(HOURS)' LPLOT = .TRUE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = DJITTER(I) END IF END DO ELSE IF ( XTYPE .EQ. 2. ) THEN TITLE(1) = 'MIRROR ANGLE (DEGREES)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = MA(I) YPLOT(K) = DJITTER(I) END IF END DO ELSE IF ( XTYPE .EQ. 3. ) THEN TITLE(1) = 'DELAY (METERS)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = DELAY(I) YPLOT(K) = DJITTER(I) END IF END DO ELSE WRITE(6,*) ' YOU CANNOT GET HERE ---BOZO!' END IF ELSE IF ( IPLOT .EQ. 2 ) THEN TITLE(2) = 'TRACKING JITTER' IF ( XTYPE .EQ. 1 ) THEN TITLE(1) = 'TIME(HOURS)' LPLOT = .TRUE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = TJITTER(I) END IF END DO ELSE IF ( XTYPE .EQ. 2 ) THEN TITLE(1) = 'MIRROR ANGLE (DEGREES)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = MA(I) YPLOT(K) = TJITTER(I) END IF END DO ELSE IF ( XTYPE .EQ. 3 ) THEN TITLE(1) = 'DELAY (METERS)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = DELAY(I) YPLOT(K) = TJITTER(I) END IF END DO ELSE WRITE(6,*) ' BAD VALUE OF XTYPE ---- BOZO CITY! ' END IF ELSE IF ( IPLOT .EQ. 3 ) THEN TITLE(2) = 'PHASE AUTOCORRELATION, 4ms LAG (RADIANS)' IF ( XTYPE .EQ. 1 ) THEN TITLE(1) = 'TIME(HOURS)' LPLOT = .TRUE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = PHI(I,2) END IF END DO ELSE IF ( XTYPE .EQ. 2 ) THEN TITLE(1) = 'MIRROR ANGLE (DEGREES)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = MA(I) YPLOT(K) = PHI(I,2) END IF END DO ELSE IF ( XTYPE .EQ. 3 ) THEN TITLE(1) = 'DELAY (METERS)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = DELAY(I) YPLOT(K) = PHI(I,2) END IF END DO ELSE WRITE(6,*) ' YOU CAN''T GET HERE....BOZO CITY!' END IF ELSE IF ( IPLOT .EQ. 4 ) THEN TITLE(2) = 'LASER RMS, 4ms LAG (RADIANS)' IF ( XTYPE .EQ. 1 ) THEN TITLE(1) = 'TIME(HOURS)' LPLOT = .TRUE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = PHI(I,1) END IF END DO ELSE IF ( XTYPE .EQ. 2 ) THEN TITLE(1) = 'MIRROR ANGLE (DEGREES)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = MA(I) YPLOT(K) = PHI(I,1) END IF END DO ELSE IF ( XTYPE .EQ. 3 ) THEN TITLE(1) = 'DELAY (METERS)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = DELAY(I) YPLOT(K) = PHI(I,1) END IF END DO END IF ELSE IF ( IPLOT .EQ. 5 ) THEN TITLE(1) = 'LASER RMS (RADIANS)' TITLE(2) = 'PHASE AUTOCORRELATION, 4ms LAG (RADIANS)' LPLOT = .FALSE. K = 0 DO I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = PHI(I,1) YPLOT(K) = PHI(I,2) END IF END DO ELSE IF ( IPLOT .EQ. 6 ) THEN TITLE(1) = 'TIME(HOURS)' TITLE(2) = 'SECONDS OF DATA PER SCAN' K = 0 DO 350 I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = DUTYC(I) END IF 350 CONTINUE ELSE IF ( IPLOT .EQ. 7 ) THEN TITLE(1) = 'TIME(HOURS)' TITLE(2) = 'NUMBER OF LOCKS' K = 0 DO 360 I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = HOURS(I) YPLOT(K) = NLOCK(I) END IF 360 CONTINUE ELSE IF ( IPLOT .EQ. 8 ) THEN TITLE(1) = 'PHASE AUTOCORRELATION, 4 MS LAG (MICRONS)' TITLE(2) = 'SECONDS OF DATA PER SCAN' LPLOT = .FALSE. K = 0 DO 370 I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = PHI(I,1) YPLOT(K) = DUTYC(I) END IF 370 CONTINUE ELSE IF ( IPLOT .EQ. 9 ) THEN TITLE(1) = 'F.A.S.N.' TITLE(2) = 'SECONDS OF DATA PER SCAN' LPLOT = .FALSE. K = 0 DO 380 I = 1, ISCAN IF ( HOURS(I) .GT. 0. ) THEN K = K + 1 XPLOT(K) = 0.5 * BDEN(I,1) * VIS(I,1) YPLOT(K) = DUTYC(I) END IF 380 CONTINUE END IF C----------------------------------------------------------------------- IF ( AUTO ) THEN XMIN = XPLOT(1) XMAX = XPLOT(1) YMIN = YPLOT(1) YMAX = YPLOT(1) DO I = 2, K XMIN = MIN ( XMIN, XPLOT(I) ) XMAX = MAX ( XMAX, XPLOT(I) ) YMIN = MIN ( YMIN, YPLOT(I) ) YMAX = MAX ( YMAX, YPLOT(I) ) END DO END IF C C Set color for background ICOLOR = 5 CALL PGSCI ( ICOLOR ) C C Set big letters so that PGENV will leave C more room around the plot. CALL PGSCH ( 1.5 ) CALL PGRNGE ( XMIN, XMAX, XLO, XHI ) CALL PGRNGE ( YMIN, YMAX, YLO, YHI ) CALL PGENV ( XLO, XHI, YLO, YHI, 0, 1 ) C CALL PGMTEXT ( 'T', 2.5, 0.5, 0.5, TITLE(3) ) CALL PGSCH ( 1.0 ) CALL PGMTEXT ( 'B', 3.5, 0.5, 0.5, TITLE(1) ) CALL PGMTEXT ( 'L', 3.5, 0.5, 0.5, TITLE(2) ) CALL PGMTEXT ( 'T', 1.5, 0.5, 0.5, TITLE(4) ) CALL PGMTEXT ( 'R', 2.5, 0.5, 0.5, TITLE(5) ) CALL PGMTEXT ( 'B', 5.0, 0.5, 0.5, TITLE(6) ) C ICOLOR = 6 CALL PGSCI ( ICOLOR ) C IF ( LPLOT ) THEN CALL PGLINE( K, XPLOT, YPLOT ) ELSE CALL PGPOINT( K, XPLOT, YPLOT, SYMBOL(1) ) END IF C----------------------------------------------------------------------- IF ( HCOPY ) THEN CALL PGEND HCOPY = .FALSE. GO TO 200 END IF C C The plot is plotted, now ask for command C Switch to text mode C RX = XPLOT(ICUR) RY = YPLOT(ICUR) CALL EGA_RESTORE_DEFAULT 500 CONTINUE CALL LOCATE(0,0) CALL WRITE_STRING ( 'Command:' ) CALL PGCURSE(RX, RY, CH ) CALL CAPS ( CH ) IF ( CH .EQ. '?' ) THEN CALL LOCATE (0, 1) CALL WRITE_STRING ( ' ? Displays this ' ) CALL LOCATE (0, 2) CALL WRITE_STRING ( ' N next plot ' ) CALL LOCATE (0, 3) CALL WRITE_STRING ( ' P previous plot ' ) CALL LOCATE (0, 4) CALL WRITE_STRING ( ' R set ranges for plot' ) CALL LOCATE (0, 5) CALL WRITE_STRING ( ' X x axis time -> mirror angle') CALL LOCATE (0, 6) CALL WRITE_STRING ( ' H make hardcopy ' ) CALL LOCATE (0, 7) CALL WRITE_STRING ( ' Q quit ' ) CALL LOCATE (0,10) GO TO 500 ELSE IF ( CH .EQ. 'N' ) THEN C Do the next plot IPLOT = MOD(IPLOT,9) + 1 AUTO = .TRUE. ELSE IF ( CH .EQ. 'P' ) THEN C Do the previous plot IPLOT = MOD ( IPLOT+ 9 - 2 , 9 ) + 1 AUTO = .TRUE. ELSE IF ( CH .EQ. 'R' ) THEN WRITE(6,*) ' INPUT NEW RANGES ' WRITE(6,*) ' X RANGE IS ', XMIN, XMAX READ (5,*,ERR=800) XMIN, XMAX WRITE(6,*) ' Y RANGE IS ', YMIN, YMAX READ (5,*,ERR=800) YMIN, YMAX AUTO = .FALSE. ELSE IF ( CH .EQ. 'X' ) THEN XTYPE = MOD(XTYPE,3) + 1 ELSE IF ( CH .EQ. 'H' ) THEN C Make a hard copy HCOPY = .TRUE. CALL PGEND GO TO 200 ELSE IF ( CH .EQ. 'Q' ) THEN C quit GO TO 900 END IF 800 CONTINUE CALL PGASK ( .FALSE. ) CALL PGADVANCE GO TO 210 900 CONTINUE CALL PGEND RETURN END