* Last processed by NICE on 12-Jun-2000 15:54:00 * Customized for : IEEE, LINUX, UNIX, MOTIF, F77 * onoff_result.f * *--------------------------------------------------------------------- * Writes results on screen and in file * * The format is taken from A.Sievers ONOFF routine * *-------------------------------------------------------------------- SUBROUTINE ONOFF_RESULT(FLUX,FLUX_RMS,DELTA_RA,DELTA_DEC, $DELTA_AZ,DELTA_EL,YSUBS,YSUBS_SIG,RECEIVER_GAIN,FIT_METHOD) * INCLUDE 'onoff.inc' INCLUDE 'const.inc' REAL FLUX(1),FLUX_RMS(1),DELTA_RA(1),DELTA_DEC(1) REAL DELTA_AZ(1),DELTA_EL(1) REAL YSUBS(NSUBSCAN,NCHAN),YSUBS_SIG(NSUBSCAN,NCHAN) REAL RECEIVER_GAIN(1) INTEGER FIT_METHOD(1) REAL SNR_ADJACENT * * Local * CHARACTER MONTH(12)*3, BASIS(3)*6 INTEGER*4 LENC,LEN_S,ISYS INTEGER*4 SL1,SL2,SB1,SB2,SL3,SB3,SL4,SB4,ISIGN INTEGER ID,IM,IY * INTEGER I,IWRITE,ILUN1,ILUN2,LUN,IER,ISUBSCAN REAL FLUX_MAX REAL O_AZ,O_EL,ORA,ODEC LOGICAL SYMM,LMEDIAN REAL UT_TIME CHARACTER*20 FILENAME,CHAIN INTEGER SIC_GETLUN CHARACTER*256 LINE CHARACTER FIT(4)*10, TEXT1*6, TEXT2*10, TEXT3*8 * DATA MONTH /'JAN','FEB','MAR','APR','MAY','JUN', $'JUL','AUG','SEP','OCT','NOV','DEC'/ DATA BASIS /'(Equ)','(Gal)','(Ecl)'/ DATA FIT /'mean','plane','parabolic','auto'/ * * Open file for results IER = SIC_GETLUN(ILUN1) CHAIN = ' ' FILENAME = ' ' WRITE (CHAIN(1:4),'(i4.4)') SCAN_NUMBER CALL SIC_PARSEF(CHAIN,FILENAME,' ','.onf') OPEN(UNIT=ILUN1,FILE=FILENAME,STATUS='UNKNOWN') ILUN2 = -1 IF (ONOFF_FILE(1:1).NE.' ') THEN IER = SIC_GETLUN(ILUN2) CALL SIC_LOWER (ONOFF_FILE) IF (INDEX(ONOFF_FILE,'.').EQ.0) THEN CALL SIC_PARSEF(ONOFF_FILE,FILENAME,' ','.onf') OPEN(UNIT=ILUN2,FILE=FILENAME,STATUS='UNKNOWN') ELSE OPEN(UNIT=ILUN2,FILE=ONOFF_FILE,STATUS='UNKNOWN') ENDIF ENDIF * write data at the end of file (access='append') IF (ILUN2.GT.0) THEN DO WHILE (.TRUE.) READ(ILUN2,'(a)',END=10) LINE ENDDO ENDIF * * Compute min and max (flux and error) 10 FLUX_MAX = 0 DO I=1,NCHAN IF (ABS(FLUX(I)).GT.FLUX_MAX) FLUX_MAX = ABS(FLUX(I)) ENDDO * * Prepare parameters : * * Date IY = DATE_OF_OBSERVATION/10000 IM = (DATE_OF_OBSERVATION-IY*10000)/100 ID = DATE_OF_OBSERVATION-IY*10000-IM*100 * Coordinates ISYS = 1 ! assume Equatorial IF (COORD_SYST.LE.4.OR. $(COORD_SYST.GE.6.AND.COORD_SYST.LE.9)) THEN IF (COORD_SYST.EQ.0) ISYS = 2 IF (COORD_SYST.GE.6) ISYS = 3 SL1 = INT(SLAM/15) SL2 = INT((SLAM/15-SL1)*60) SL3 = INT(((SLAM/15-SL1)*60-SL2)*60) SL4 = INT((((SLAM/15-SL1)*60-SL2)*60-SL3)*1000) ISIGN = SBET/ABS(SBET) SB1 = INT(ABS(SBET)) SB2 = INT((ABS(SBET)-SB1)*60) SB3 = INT(((ABS(SBET)-SB1)*60-SB2)*60) SB4 = INT((((ABS(SBET)-SB1)*60-SB2)*60-SB3)*100) SB1 = SB1*ISIGN ELSE SL1 = 1000 ! to display ** SL2 = 1000 SL3 = 1000 SL4 = 1000 SB1 = 1000 SB2 = 1000 SB3 = 1000 SB4 = 1000 ENDIF * Source name I=LENC(SNAM) LEN_S = 0 DO WHILE (LEN_S.EQ.0.AND.I.GT.0) IF (SNAM(I:I).GT.' ') LEN_S = I I = I-1 ENDDO DO I=LEN_S+1,16 SNAM(I:I)= ' ' ENDDO * oAZ oEL oRA oDEC O_AZ = OAZM*3600 + WOBBLER_THROW/2*UNBAL O_EL = OELV*3600 ORA = OLAM*3600 ODEC = OBET*3600 MEAN_ELV = MEAN_ELV/DEG_TO_RAD * Symm, Median,UT SYMM = .FALSE. IF (ONOFF_MODE.EQ.1) SYMM =.TRUE. LMEDIAN = .FALSE. IF (COMPUTE.EQ.2) LMEDIAN = .TRUE. UT_TIME = MEAN_LST CALL STUT(UT_TIME,1,ID,IM,IY,SITE_LONGITUDE/DEG_TO_RAD) * * * Write result on screen and in file WRITE(6,*)' ' DO IWRITE=1,3 ! write on screen (iwrite=1) and in a file (i LUN = 6 IF (IWRITE.EQ.2) LUN = ILUN1 IF (IWRITE.EQ.3) LUN = ILUN2 IF (LUN.GT.0) THEN * date, lst, ra, dec, epoch WRITE(LUN,100) '! ',ID,'-',MONTH(IM),'-',IY,' LST:', $ MEAN_LST/3600., $ ' RA: ',SL1,SL2,SL3,SL4,BASIS(ISYS), $ ' DEC: ',SB1,SB2,SB3,SB4, $ ' EPOCH:',EPOCH 100 FORMAT (A,I2,A,A,A,I4,A,F6.3, $ A,2(I2.2,':'),I2.2,'.',I3.3,1X,A, $ A,I3.2,2(':',I2.2),'.',I2.2, $ A,F6.1) * * scan_number,source,azimuth,elevation,OLAM,OBET,OAZM,OELV WRITE(LUN,'(a,a)')'! Scan Source Az El', $ ' oRa oDec oAz oEl' WRITE(LUN,200)'!',SCAN_NUMBER,SNAM(1:16),MEAN_AZ,MEAN_ELV, $ ORA,ODEC,OAZM,OELV 200 FORMAT(A,1X,I4,2X,A,1X,F6.2,3X,F6.2,3X,F6.2,3X, $ F6.2,3X,F6.2,3X,F6.2) * * UT, subscan_number, symmetrical/unsymmetrical,mean/median,gain,beamthrow WRITE(LUN,350)'! UT: ',UT_TIME/3600., $ ' Subscans = ',NSUBSCAN, $ ' symm. =',SYMM,' median =',LMEDIAN, $ ' gain =',NINT(REF_GAIN),' beamthrow =', $ WOBBLER_THROW 350 FORMAT(A,F6.3,A,I3,A,L2,A,L2,A,I2,A,F5.1) * * Noise reduction TEXT1 = ' ' IF (FIT_TYPE.EQ.4.AND.NOISE) TEXT1 = ' Fit' IF (.NOT.NOISE) $ WRITE(LUN,'(a,l2)')'! Noise reduction = ',NOISE IF (NOISE) THEN WRITE(LUN,'(a,l2,3x,2a)')'! Noise reduction = ', $ NOISE,' Fitting method = ',FIT(FIT_TYPE) ENDIF * * Position and flux IF (.NOT.JANSKY_FLAG) THEN WRITE(LUN,'(3a)') $ '! Channel AZ(") EL(") RA(")', $ ' DEC(") Mean(cnts) +- RMS(cnts)',TEXT1 TEXT3 = ' Cnts (' ELSE WRITE(LUN,'(3a)') $ '! Channel AZ(") EL(") RA(")', $ ' DEC(") Mean(Jy) +- RMS(Jy)',TEXT1 TEXT3 = ' Jy ( ' ENDIF IF (FLUX_MAX.GT.100000) THEN DO I=1,NCHAN TEXT2 = ' ' IF (FIT_TYPE.EQ.4.AND.NOISE) $ TEXT2=' ! '//FIT(FIT_METHOD(I))(1:4) WRITE (LUN,'(i6,2x,4f10.2,f12.0,f10.0,a)') $ I,DELTA_AZ(I),DELTA_EL(I), $ DELTA_RA(I)+ORA,DELTA_DEC(I)+ODEC, $ FLUX(I),FLUX_RMS(I),TEXT2 ENDDO ELSEIF (FLUX_MAX.GT.10) THEN DO I=1,NCHAN TEXT2 = ' ' IF (FIT_TYPE.EQ.4.AND.NOISE) $ TEXT2=' ! '//FIT(FIT_METHOD(I))(1:4) WRITE (LUN,'(i6,2x,4f10.2,f12.2,f10.2,a)') $ I,DELTA_AZ(I),DELTA_EL(I), $ DELTA_RA(I)+ORA,DELTA_DEC(I)+ODEC, $ FLUX(I),FLUX_RMS(I),TEXT2 ENDDO ELSE DO I=1,NCHAN TEXT2 = ' ' IF (FIT_TYPE.EQ.4.AND.NOISE) $ TEXT2=' ! '//FIT(FIT_METHOD(I))(1:4) WRITE (LUN,'(i6,2x,4f10.2,f12.5,f10.5,a)') I, $ DELTA_AZ(I),DELTA_EL(I), $ DELTA_RA(I)+ORA,DELTA_DEC(I)+ODEC, $ FLUX(I),FLUX_RMS(I),TEXT2 ENDDO ENDIF * Global flux IF (TELESCOPE(1:3).NE.'CSO') THEN IF (RMS_ADJACENT_FLUX.NE.0) THEN SNR_ADJACENT = ABS(ADJACENT_FLUX/RMS_ADJACENT_FLUX) ELSE SNR_ADJACENT = 0 ENDIF WRITE (LUN,'(a)') '!' IF (FLUX_MAX.GT.100000) THEN WRITE (LUN,300) $ '! Reference channel: ',REF_FLUX, $ TEXT3,REF_FLUX_RMS,')', $ ' SNR = ',ABS(REF_FLUX/REF_FLUX_RMS), $ ' (= Channel ',REF_CHAN,')', $ '! Adjacent channels: ',ADJACENT_FLUX, $ TEXT3,RMS_ADJACENT_FLUX,')',' SNR = ', $ SNR_ADJACENT,'!', $ '! The flux of the reference channel', $ ' was determined by removing the flux', $ '! density of the adjacent ',NADJ, $ ' channels (i.e. their weighted mean.)', $ '! Of the adjacent channels ',NFLG, $ ' were flagged.' 300 FORMAT(A,F8.0,A,F6.0,2A,F7.2,A,I2,A,/A,F8.0,A, $ F6.0,2A,F7.2,/,A,/,2A,/,A,I2,A,/A,I2,A) ELSEIF (FLUX_MAX.GT.10) THEN WRITE (LUN,400) $ '! Reference channel: ',REF_FLUX, $ TEXT3,REF_FLUX_RMS,')', $ ' SNR = ',ABS(REF_FLUX/REF_FLUX_RMS), $ ' (= Channel ',REF_CHAN,')', $ '! Adjacent channels: ',ADJACENT_FLUX, $ TEXT3,RMS_ADJACENT_FLUX,')',' SNR = ', $ SNR_ADJACENT,'!', $ '! The flux of the reference channel', $ ' was determined by removing the flux', $ '! density of the adjacent ',NADJ, $ ' channels (i.e. their weighted mean.)', $ '! Of the adjacent channels ',NFLG, $ ' were flagged.' 400 FORMAT(A,F8.2,A,F6.2,2A,F7.2,A,I2,A,/A,F8.2,A, $ F6.2,2A,F7.2,/,A,/,2A,/,A,I2,A,/A,I2,A) ELSE WRITE (LUN,500) $ '! Reference channel: ',REF_FLUX, $ TEXT3,REF_FLUX_RMS,')', $ ' SNR = ',ABS(REF_FLUX/REF_FLUX_RMS), $ ' (= Channel ',REF_CHAN,')', $ '! Adjacent channels: ',ADJACENT_FLUX, $ TEXT3,RMS_ADJACENT_FLUX,')',' SNR = ', $ SNR_ADJACENT,'!', $ '! The flux of the reference channel', $ ' was determined by removing the flux', $ '! density of the adjacent ',NADJ, $ ' channels (i.e. their weighted mean.)', $ '! Of the adjacent channels ',NFLG, $ ' were flagged.' 500 FORMAT(A,F8.5,A,F6.5,2A,F7.2,A,I2,A,/A,F8.5,A, $ F6.5,2A,F7.2,/,A,/,2A,/,A,I2,A,/A,I2,A) ENDIF WRITE (LUN,'(a)') '!' ENDIF * * If format LONG, write RECEIVER_GAIN and SUBSCAN results IF (FORMAT.EQ.2) THEN WRITE(LUN,'(a,$)') '! Receiver_gain: ' DO I=1,NCHAN WRITE(LUN,'(f6.3,$)') RECEIVER_GAIN(I) ENDDO WRITE(LUN,*)' ' DO ISUBSCAN=1,NSUBSCAN WRITE(LUN,'(a,$)') '!' DO I=1,NCHAN WRITE(LUN,'(f10.0,f8.0,$)') $ YSUBS(ISUBSCAN,I),YSUBS_SIG(ISUBSCAN,I) ENDDO WRITE(LUN,'(a)') ' ' ENDDO ENDIF ENDIF * ENDDO CLOSE(UNIT=ILUN1) IF (ILUN2.GT.0) CLOSE(UNIT=ILUN2) RETURN END