PROGRAM SPECTRA_ALL IMPLICIT NONE INTEGER*4 MP, MB PARAMETER ( MP = 128, MB = 8 ) CHARACTER FILIN*128, BUF(MP)*512, COMP*1, BAND*1, DATE_STR*19, BAND_ARR(MP)*1, & & BANDS*(MB) REAL*8 DIST(MP), DIST_ERR(MP), DIST_BAND(MP), DIST_BAND_ERR(MP), & & FREQ(MP), LOG_FREQ(MP), FREQ_BAND(MB), ERR_MAX, WEI, WEI_SUM, FLOOR_DIST_ERR, & & FLUX_A, FLUX_B, FLUX_A_ERR, FLUX_B_ERR, FLUX_ERR_SCL, SEC REAL*8 X1(MP), E1(MP), X2(MP), E2(MP), LX1(MP), LE1(MP), LX2(MP), LE2(MP), & & W1(MP), W2(MP), FR(2), R1(2), R2(2) REAL*8 T1(MP), S1(MP) REAL*8 DR_VAL_1, SH_VAL_1, DR_SIG_1, SH_SIG_1, MEAN_LOG_FREQ_1, & & DR_VAL_2, SH_VAL_2, DR_SIG_2, SH_SIG_2, MEAN_LOG_FREQ_2 INTEGER*4 J1, J2, J3, J4, J5, KP, NP, NB, MJD_0, MJD, IV(MP), DEV, IUER ! DATA FREQ_BAND / & & 1.6D9, & ! & 2.3D9, & ! & 4.6D9, & ! & 8.4D9, & ! & 15.2D9, & ! & 22.2D9, & ! & 43.0D9, & ! & 246.0D9 & ! & / ! FILIN = '/astrogeo/4C+35.28/4C+35.28_properties.txt' BANDS = 'LSCXUKQ' FLUX_ERR_SCL = 0.1 DEV = 3 ! DATE_STR = '1990.01.01_00:00:00' CALL DATE_TO_TIME ( DATE_STR, MJD_0, SEC, IUER ) FREQ = 0.0D0 ! ! 37.28 -+ 0.05 0.857 ==> 7780ps/arcsec ==> 290.0 -+ 0.4 pc ! IUER = -1 CALL RD_TEXT ( FILIN, MP, BUF, NP, IUER ) IF ( IUER .NE. 0 ) CALL EXIT ( 1 ) ! KP = 0 DO 410 J1=1,NP IF ( INDEX ( BUF(J1), 'bd152i' ) > 0 ) THEN GOTO 410 END IF KP = KP + 1 IF ( BUF(J1)(46:46) == 'L' ) FREQ(KP) = FREQ_BAND(1) IF ( BUF(J1)(46:46) == 'S' ) FREQ(KP) = FREQ_BAND(2) IF ( BUF(J1)(46:46) == 'C' ) FREQ(KP) = FREQ_BAND(3) IF ( BUF(J1)(46:46) == 'X' ) FREQ(KP) = FREQ_BAND(4) IF ( BUF(J1)(46:46) == 'U' ) FREQ(KP) = FREQ_BAND(5) IF ( BUF(J1)(46:46) == 'K' ) FREQ(KP) = FREQ_BAND(6) IF ( BUF(J1)(46:46) == 'Q' ) FREQ(KP) = FREQ_BAND(7) IF ( BUF(J1)(46:46) == '6' ) FREQ(KP) = FREQ_BAND(8) ! FREQ(KP) = FREQ(KP) + J1*1.D5 LOG_FREQ(KP) = DLOG10(FREQ(KP)) READ ( UNIT=BUF(J1)(196:201), FMT='(F6.2)' ) DIST(KP) READ ( UNIT=BUF(J1)(206:210), FMT='(F5.2)' ) DIST_ERR(KP) BAND_ARR(KP) = BUF(J1)(46:46) ! DATE_STR = BUF(J1)(11:14)//'.'//BUF(J1)(15:16)//'.'//BUF(J1)(17:18)//'_00:00:00' CALL DATE_TO_TIME ( DATE_STR, MJD, SEC, IUER ) ! READ ( UNIT=BUF(J1)(81:86), FMT='(F6.4)' ) FLUX_A READ ( UNIT=BUF(J1)(116:121), FMT='(F6.4)' ) FLUX_B READ ( UNIT=BUF(J1)(126:130), FMT='(F6.4)' ) FLUX_B_ERR FLUX_A_ERR = FLUX_A*FLUX_ERR_SCL ! X1(KP) = FLUX_A E1(KP) = FLUX_ERR_SCL*FLUX_A X2(KP) = FLUX_B E2(KP) = FLUX_ERR_SCL*FLUX_B ! LX1(KP) = DLOG10(FLUX_A) LE1(KP) = FLUX_ERR_SCL LX2(KP) = DLOG10(FLUX_B) LE2(KP) = FLUX_ERR_SCL W1(KP) = 1.0D0/LE1(KP) W2(KP) = 1.0D0/LE2(KP) !! IF ( KP == 6 ) W1(KP) = W1(KP)/100 IF ( KP == 6 ) W2(KP) = W2(KP)/100 IV(KP) = 1 410 CONTINUE ! write ( 6, * ) 'kp= ', kp ! %%% IF ( KP > 0 ) THEN CALL SORT83 ( KP, FREQ, X1, E1, IUER ) CALL SORT83 ( KP, FREQ, X2, E2, IUER ) ! CALL SORT83 ( KP, LOG_FREQ, LX1, LE1, IUER ) CALL SORT83 ( KP, LOG_FREQ, LX2, LE2, IUER ) ! CALL RGRW8 ( KP, LOG_FREQ, LX1, W1, %VAL(0), MEAN_LOG_FREQ_1, & & DR_VAL_1, SH_VAL_1, DR_SIG_1, SH_SIG_1, IUER ) CALL RGRW8 ( KP, LOG_FREQ, LX2, W2, IV, MEAN_LOG_FREQ_2, & & DR_VAL_2, SH_VAL_2, DR_SIG_2, SH_SIG_2, IUER ) WRITE ( 6, 110 ) DR_VAL_1, DR_SIG_1, DR_VAL_2, DR_SIG_2 110 FORMAT ( 'Specrtal index A: ', F6.2, ' -+ ', F5.2, & & ' B: ', F6.2, ' -+ ', F5.2 ) ! ! CALL DIAGI_SETDEF ( IUER, 'DIAGI_ILST', 2 ) CALL DIAGI_SETDEF ( IUER, 'DIAGI_IBST', 2 ) CALL DIAGI_SETDEF ( IUER, 'DIAGI_IPST', 5 ) FREQ(1:KP) = 1.D-9*FREQ(1:KP) FR(1) = 0.07D0 FR(2) = 300.0D0 R1(1) = SH_VAL_1 + DR_VAL_1*(DLOG10(FR(1)*1.D9) - MEAN_LOG_FREQ_1) R1(2) = SH_VAL_1 + DR_VAL_1*(DLOG10(FR(2)*1.D9) - MEAN_LOG_FREQ_1) R2(1) = SH_VAL_2 + DR_VAL_2*(DLOG10(FR(1)*1.D9) - MEAN_LOG_FREQ_2) R2(2) = SH_VAL_2 + DR_VAL_2*(DLOG10(FR(2)*1.D9) - MEAN_LOG_FREQ_2) CALL PLOT_LOG ( DEV, KP, FREQ, X1, E1, X2, E2, FLUX_ERR_SCL, & & FR, R1, R2, IUER ) FREQ(1:KP) = 1.D9*FREQ(1:KP) CALL DIAGI_2E ( KP, FREQ, X1, E1, KP, FREQ, X2, E2, IUER ) CALL DIAGI_2E ( KP, LOG_FREQ, LX1, LE1, KP, LOG_FREQ, LX2, LE2, IUER ) END IF ! END PROGRAM SPECTRA_ALL !#! ! ! ------------------------------------------------------------------------ ! SUBROUTINE PLOT_LOG ( IDEV, NP, FREQ, X1, E1, X2, E2, ERR_SCL, & & FR, R1, R2, IUER ) IMPLICIT NONE INCLUDE 'diagi.i' TYPE ( DIAGI_STRU ) :: DIAGI_S INTEGER*4 IDEV, NP, IUER REAL*8 FREQ(NP), X1(NP), E1(NP), X2(NP), E2(NP), ERR_SCL, & & FR(2), R1(2), R2(2) CHARACTER CH*4, FIN*128 REAL*4 PAP_SIZE, ASP, XMIN, XMAX, YMIN, YMAX, XC, YC, & & XRAD_WC, YRAD_WC, XAR(128), YAR(128) REAL*4 XLB, XTU, YLB, YTU INTEGER*4 J1, J2, J3, J4, ICLR, ICL1, ICL2, ICL3, IER INTEGER*4, EXTERNAL :: PGBEG, ILEN, I_LEN, LTM_DIF ! FIN = '/tmp/foo' ! IF ( IDEV .EQ. 1 ) THEN IF ( PGBEG ( 0, '/XW', 1, 1 ) .NE. 1 ) STOP ELSE IF ( IDEV .EQ. 2 ) THEN FIN = FIN(1:I_LEN(FIN))//GIF_DIAGI//'/GIF' IF ( PGBEG ( 0, FIN, 1, 1 ) .NE. 1 ) STOP ELSE IF ( IDEV .EQ. 3 ) THEN FIN = FIN(1:I_LEN(FIN))//PS_DIAGI//'/VCPS' IF ( PGBEG ( 0, FIN, 1, 1 ) .NE. 1 ) STOP END IF ! ! --- Setting plotting parameters ! DIAGI_S%IDEV = IDEV DIAGI_S%NCLR = 10 CALL DIAGI_SET ( IDEV, DIAGI_S ) CALL DIAGI_CLS ( DIAGI_S, IER ) DIAGI_S%NCLR = 10 ! ASP = 0.61 XRAD_WC = 0.023 YRAD_WC = 0.029 ! IF ( IDEV .EQ. 1 ) THEN PAP_SIZE = 500.0 ELSE IF ( IDEV .EQ. 2 ) THEN PAP_SIZE = 120.0 ELSE IF ( IDEV .EQ. 3 ) THEN PAP_SIZE = 160.0 END IF ! XMIN = LOG10(0.050) XMAX = LOG10(350.0) YMIN = LOG10(0.01) YMAX = LOG10(10.0) ! CALL PGPAP ( PAP_SIZE/25.4, ASP ) ! ! --- Setting new world coordinates ! CALL PGSVP ( 0.15, 0.85, 0.15, 0.85 ) CALL PGSWIN ( 0.0, 1.0, 0.0, 1.0 ) ! ! --- Setting white or whitish background ! CALL PGCOL_RGB ( BCG_CLRI, 256, 256, 256 ) ICL1 = 4 CALL PGCOL_RGB ( ICL1, 67, 180, 38 ) ICL2 = 5 CALL PGCOL_RGB ( ICL2, 38, 67, 180 ) ICL3 = 6 CALL PGCOL_RGB ( ICL3, 180, 38, 67 ) ! ! --- Setting black background ! CALL PGCOL_RGB ( FRG_CLRI, FRG_CLR(1), FRG_CLR(2), FRG_CLR(3) ) ! CALL PGERAS() ! Erase the screen CALL PGSCI ( 1 ) ! ! --- Setting default font type ! CALL PGSCF ( 2 ) CALL PGSLW ( 2 ) ICLR = 16 CALL PGCOL_RGB ( ICLR, 220, 230, 240 ) CALL PGSWIN ( XMIN, XMAX, YMIN, YMAX ) CALL PGSCH ( 1.8 ) CALL PGBOX ( 'BLCSNT', 0.0, 2, 'BLCSNVT', 1.0, 5 ) CALL PGPTXT ( XMAX, YMIN - 0.15*(YMAX -YMIN), 0.0, 1.0, 'Frequency (GHz)' ) CALL PGPTXT ( XMIN - 0.12*(XMAX -XMIN), (YMIN+YMAX)/2.0, 90.0, 0.5, 'Flux density (Jy/beam)' ) CALL PGSCH ( 1.2 ) ! CALL PGCOL_RGB ( ITAB_CLR(1,1), & & IRGB_DEF(1,1,1), IRGB_DEF(1,1,2), IRGB_DEF(1,1,3) ) CALL PGCOL_RGB ( ITAB_CLR(2,1), & & IRGB_DEF(2,1,1), IRGB_DEF(2,1,2), IRGB_DEF(2,1,3) ) CALL PGCOL_RGB ( ITAB_CLR(3,1), & & IRGB_DEF(3,1,1), IRGB_DEF(3,1,2), IRGB_DEF(3,1,3) ) ! DO 410 J1=1,NP CALL PGSCI ( ITAB_CLR(1,1) ) CALL PGCIRC_PET ( 72, LOG10(SNGL(FREQ(J1))), LOG10(SNGL(X1(J1))), XRAD_WC, YRAD_WC ) XAR(1) = LOG10(SNGL(FREQ(J1))) XAR(2) = LOG10(SNGL(FREQ(J1))) YAR(1) = LOG10(SNGL(X1(J1))) - ERR_SCL YAR(2) = LOG10(SNGL(X1(J1))) + ERR_SCL CALL PGLINE ( 2, XAR, YAR ) ! CALL PGSCI ( ITAB_CLR(2,1) ) CALL PGCIRC_PET ( 72, LOG10(SNGL(FREQ(J1))), LOG10(SNGL(X2(J1))), XRAD_WC, YRAD_WC ) XAR(1) = LOG10(SNGL(FREQ(J1))) XAR(2) = LOG10(SNGL(FREQ(J1))) YAR(1) = LOG10(SNGL(X2(J1))) - ERR_SCL YAR(2) = LOG10(SNGL(X2(J1))) + ERR_SCL CALL PGLINE ( 2, XAR, YAR ) 410 CONTINUE ! CALL PGSCI ( ITAB_CLR(1,1) ) XAR(1) = DLOG10(FR(1)) XAR(2) = DLOG10(FR(2)) YAR(1) = R1(1) YAR(2) = R1(2) CALL PGSLS ( 4 ) CALL PGSLW ( 2 ) CALL PGLINE ( 2, XAR, YAR ) ! CALL PGSCI ( ITAB_CLR(2,1) ) YAR(1) = R2(1) YAR(2) = R2(2) CALL PGLINE ( 2, XAR, YAR ) ! CALL PGSCI ( FRG_CLRI ) XAR(1) = DLOG10(FR(1)) XAR(2) = DLOG10(0.9D0) ! YAR(1) = DLOG10(2.0D0) YAR(2) = DLOG10(2.0D0) CALL PGLINE ( 2, XAR, YAR ) ! CALL PGSLS ( 1 ) CALL PGSCI ( ITAB_CLR(3,1) ) CALL PGCIRC_PET ( 72, LOG10(0.074), LOG10(3.73), XRAD_WC, YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.151), LOG10(2.239), XRAD_WC, YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.325), LOG10(2.446), XRAD_WC, YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.960), LOG10(1.615), XRAD_WC, YRAD_WC ) ! CALL PGSCI ( BCG_CLRI ) CALL PGCIRC_PET ( 72, LOG10(0.074), LOG10(3.73), 0.8*XRAD_WC, 0.8*YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.151), LOG10(2.239), 0.8*XRAD_WC, 0.8*YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.325), LOG10(2.446), 0.8*XRAD_WC, 0.8*YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(0.960), LOG10(1.615), 0.8*XRAD_WC, 0.8*YRAD_WC ) ! CALL PGSCI ( ITAB_CLR(3,1) ) CALL PGCIRC_PET ( 72, LOG10(0.150), LOG10(1.361), XRAD_WC, YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(1.3675), LOG10(1.670), XRAD_WC, YRAD_WC ) CALL PGCIRC_PET ( 72, LOG10(1.6555), LOG10(1.130), XRAD_WC, YRAD_WC ) !! CALL PGCIRC_PET ( 72, LOG10(230.0), LOG10(0.108), XRAD_WC, YRAD_WC ) ! XC = 0.95 YC = 0.0 IF ( IDEV .EQ. 1 ) THEN CALL PGBAND ( 0, 1, XC, YC, XC, YC, CH ) END IF CALL PGCLOQ() ! CALL ERR_LOG ( 0, IUER ) RETURN END SUBROUTINE PLOT_LOG !#!