* Last processed by NICE on 12-Jun-2000 15:54:00 * Customized for : IEEE, LINUX, UNIX, MOTIF, F77 * * convert_init.f * SUBROUTINE CONVERT_INIT(SUBSCAN_NUMBER,SUBSCAN_EPOCH, $SUBSCAN_TIME,SUBSCAN_IFIRST,SUBSCAN_ILAST, $LST_RECORD,EL_RECORD,XSCAN_COORD,YSCAN_COORD, $LST_MAP, EL_MAP, XCOORD_MAP, YCOORD_MAP, WEIGHT_MAP, $OA,OE, $NX,NY,NZ,IFUN) * * C Data description * INCLUDE 'inc:memory.inc' INCLUDE 'inc:xpar.inc' INCLUDE 'inc:ypar.inc' INCLUDE 'convert.inc' INCLUDE 'const.inc' INCLUDE 'parameter.inc' * INTEGER SIC_GETVM,IER INTEGER*4 POINTER INTEGER*4 IADDR,IP ! address of shared memory area * INTEGER*4 SUBSCAN_NUMBER(1) REAL*4 SUBSCAN_EPOCH(1) REAL*4 SUBSCAN_TIME(1) INTEGER*4 SUBSCAN_IFIRST(1) ! index of first record of the subscan INTEGER*4 SUBSCAN_ILAST(1) ! index of last record of the subscan * INTEGER NX,NY,NZ * * REAL*4 LST_RECORD(1) ! LST(nrecord) REAL*4 EL_RECORD(1) ! EL(nrecord) * REAL*4 XSCAN_COORD(1) REAL*4 YSCAN_COORD(1) * REAL*4 LST_MAP(NX,NY) ! output REAL*4 EL_MAP(NX,NY) ! output REAL*4 XCOORD_MAP(NX,NY,NZ) ! output REAL*4 YCOORD_MAP(NX,NY,NZ) ! output REAL*4 WEIGHT_MAP(NX,NY) ! work space * REAL*4 OA(1) ! offset in azimuth for each channel REAL*4 OE(1) ! offset in elevation for each channel REAL*4 X0,Y0 * INTEGER I,J,ISUBSCAN INTEGER ICHAN, IREF, IFUN INTEGER IFIRST,ILAST INTEGER NP_SUBSCAN REAL*4 COS_EL,SIN_EL REAL*4 XLIMIT * EPOCHTO = SUBSCAN_EPOCH(1) * * --- Identify first record and last record for each subscan XLIMIT = ABS(XMIN) IF (XLIMIT.LT.ABS(XMAX)) XLIMIT = XMAX XLIMIT = XLIMIT/3600. ! in degrees CALL FIND_SUBSCAN_LIMIT (LST_RECORD,SUBSCAN_TIME, $SUBSCAN_IFIRST,SUBSCAN_ILAST,XSCAN_COORD,YSCAN_COORD, $XLIMIT,SINT,NSUBSCAN,NRECORD) * * * --- Initialize convolving function : * CALL FUNGEN(FUNC,IFUN) * * * * --- Initialize LST_MAP(NX,NY) , * XCOORD_MAP(NX,NY,1), * YCOORD_MAP(NX,NY,1) * IER = SIC_GETVM(3*NCOL,IADDR) IF (IER.NE.1) THEN WRITE(6,*)' *** Unable to allocate memory (2)***' WRITE(6,*)'ier=',IER STOP ENDIF IP = POINTER(IADDR,MEMORY) * DO ISUBSCAN=1,NSUBSCAN IFIRST = SUBSCAN_IFIRST(ISUBSCAN) ILAST = SUBSCAN_ILAST(ISUBSCAN) IF (IFIRST.NE.0 .AND. ILAST.NE.0) THEN NP_SUBSCAN = ILAST-IFIRST+1 CALL CONVERT_LST_EL $ (LST_RECORD(IFIRST),LST_MAP(1,1),MEMORY(IP), $ EL_RECORD(IFIRST),EL_MAP(1,1),MEMORY(IP+NCOL), $ WEIGHT_MAP(1,1),MEMORY(IP+2*NCOL), $ XSCAN_COORD(IFIRST), YSCAN_COORD(IFIRST), $ NP_SUBSCAN,ISUBSCAN,IFUN) ENDIF ENDDO * *--- Divide by the total weight * DO I=1,NCOL DO J = 1, NROW XCOORD_MAP(I,J,1) = (Y_VAL1 + (I-Y_REF1)*Y_INC1)/SEC_TO_RAD YCOORD_MAP(I,J,1) = (Y_VAL2 + (J-Y_REF2)*Y_INC2)/SEC_TO_RAD IF (WEIGHT_MAP(I,J) .GT. 1.D-10) THEN LST_MAP(I,J) = LST_MAP(I,J) / WEIGHT_MAP(I,J) EL_MAP(I,J) = EL_MAP(I,J) / WEIGHT_MAP(I,J) ELSE LST_MAP(I,J) = BLANKING EL_MAP(I,J) = BLANKING ENDIF ENDDO ENDDO * * --- Add offset channel to XCOORD_MAP and YCOORD_MAP * IREF = REF_CHAN DO J=1,NY DO I=1,NX COS_EL = COS(FIELD_ROTATION*EL_MAP(I,J)*DEG_TO_RAD) SIN_EL = SIN(FIELD_ROTATION*EL_MAP(I,J)*DEG_TO_RAD) IF (TELESCOPE(1:3).EQ.'CSO') THEN COS_EL = 1 SIN_EL = 0 ENDIF X0 = XCOORD_MAP(I,J,1) Y0 = YCOORD_MAP(I,J,1) DO ICHAN=1,NCHANNEL XCOORD_MAP(I,J,ICHAN) = X0 $ - (OA(ICHAN)-OA(IREF))*COS_EL $ - (OE(ICHAN)-OE(IREF))*SIN_EL YCOORD_MAP(I,J,ICHAN) = Y0 $ + (OA(ICHAN)-OA(IREF))*SIN_EL $ - (OE(ICHAN)-OE(IREF))*COS_EL ENDDO ENDDO ENDDO RETURN END