! @ CALIB ! ! Automatic calibration procedure ! Arguments: ! &1 File to be calibrated ! &2 YES or void ! &3 CONTINUE or void ! ! 1 --- Setup variables ! DEFINE LOGICAL DO_STORE DO_APPLY DO_TEX DO_JUMP DEFINE INTEGER IREC fscan SAY "Produce TeX report ?" LET DO_TEX &2 IF (DO_TEX) THEN SYSTEM "rm calib-0.ps calib-1.ps calib-2.ps calib-3.ps calib-4.ps" ENDIF SAY "Store calibration curves ?" LET DO_STORE &2 SAY "Apply calibration curves ?" LET DO_APPLY &2 IF ("&3 ".NE." ") THEN SYMBOL STOP SIC\CONTINUE ELSE SYMBOL STOP SIC\PAUSE ENDIF SAY "Enter receiver number" LET IREC ! ! 1.1 Open the file DEFINE CHARACTER FILE_NAME*32 SAY "Enter file name: " LET FILE_NAME &1 FILE BO 'FILE_NAME' SET TIME * ! ! 1.2 Define additional parameters ! SIC PREC DOUBLE SET DEFAULT SET RECEIVER IREC SET LEVEL 4 SET PHAS ANTE ABS SET RF ANTE OFF SET AMPL ANTE ABS SET PHAS CONT SET PLOT BAR IF (EXIST(C_FLUX)) THEN DELETE/VARIABLE C_FLUX BAND_FLUX BAND_SOURCE DELETE/VARIABLE FIRST_OBS FIRST_SCAN LAST_OBS DELETE/VARIABLE CAL_BAND ENDIF DEFINE CHARACTER CAL_BAND*3 BAND_SOURCE*12/GLOBAL DEFINE INTEGER FIRST_OBS FIRST_SCAN LAST_OBS/GLOBAL DEFINE REAL HOURMIN HOURMAX ! IF (.NOT.EXIST(NBAS)) THEN VARIABLE CONFIG ON ENDIF IF (.NOT.EXIST(N_LINE_BANDS)) THEN VAR LINE ON ENDIF IF (.NOT.EXIST(FLUX)) THEN VAR POSITION ON ENDIF IF (.NOT.EXIST(ISB)) THEN VAR RF ON ENDIF IF (.NOT.EXIST(GAIN_IMAGE)) THEN VAR ATM ON ENDIF IF (.NOT.EXIST(PROJECT)) THEN VAR GENE ON ENDIF ! SET AVER SCAN ! ! 2 --- Define the subbands ! FIND GET FIRST DEFINE INTEGER BASIS[10] LET BASIS 12 13 23 14 24 34 15 25 35 45 IF (NBAS.EQ.1) THEN SET BASE 12 ELSE IF (NBAS.EQ.3) THEN SET BASE 12 13 23 ELSE IF (NBAS.EQ.6) THEN SET BASE 12 13 23 14 24 34 ENDIF SET SUB L01 TO L0'N_LINE_BANDS' SAY " " SAY "Using Sub-bands L01 TO L0"'N_LINE_BANDS' SAY " " DEFINE REAL RF_USB[2,NBAS] RF_LSB[2,NBAS] AMP_ERR[NBAS] PHA_ERR[NBAS] DEFINE REAL JYPK[NANT] ! ! 3 --- Find the useful range FIND/PROC GAIN IF (FOUND.NE.0) THEN LET FIRST_OBS CX_NUM[FOUND]+1 ELSE LET FIRST_OBS 0 ENDIF SET NUMBER FIRST_OBS * ! ! 4 --- Find the bandpass calibrator ! SAY "Building the Flux list..." FIND/SOURCE */TYPE P/PROC CORR POIN FOCU LIST/SOURCE DEFINE REAL C_FLUX[N_SOURCE] BAND_FLUX/GLOBAL FOR I 1 TO N_SOURCE FIND/SOURCE 'C_SOURCE[I]'/PROC CORR POIN FOCU GET FIRST LET C_FLUX[I] FLUX NEXT LET BAND_FLUX 0 FOR I 1 TO N_SOURCE SAY "Source "'I' 'C_SOURCE[I]' "Flux "'0.01*NINT(C_FLUX[i]*100)'" Jy" IF (C_FLUX[i].GT.BAND_FLUX) THEN LET BAND_SOURCE 'C_SOURCE[I]' LET BAND_FLUX C_FLUX[i] ENDIF NEXT SAY " " SAY "Found Bandpass Calibrator "'BAND_SOURCE' SAY " " DEFINE REAL A COMPUTE A MIN GAIN_IMAGE IF (A.LT.0.4) THEN IF (ISB.EQ.-1) THEN ! Signal == LSB LET CAL_BAND LSB ELSE LET CAL_BAND USB ENDIF ELSE LET CAL_BAND DSB ENDIF SAY " " SAY 'CAL_BAND'" tuning" SAY " " ! ! 5 - Calibrate the RF ! FIND/PROC CORR POIN FOCU/SOURCE 'BAND_SOURCE' SET X I_F SET BIN 2.5 SET GIBB 1 SET BAND LSB SET Y AMPLI PHASE SOLVE RF 6 12/PLOT STOP "LSB Bandpass Calibration" IF (DO_TEX) THEN HARD CALIB-1.PS/DEV EPS FAST ENDIF LET RF_LSB RMS_ERR SET BAND USB SOLVE RF 6 12/PLOT STOP "USB Bandpass Calibration" IF (DO_TEX) THEN HARD CALIB-2.PS/DEV EPS FAST ENDIF LET RF_USB RMS_ERR ! IF (DO_STORE) THEN FIND/PROC */TYPE * STORE RF ENDIF IF (DO_APPLY) THEN SET RF ON ENDIF ! ! 6. Check for jumps: look for FOCUS ! FIND/PROC CORR/TYPE P LET FIRST_OBS CX_NUM[1] LET LAST_OBS CX_NUM[FOUND] FIND/PROC FOCU/TYPE P/NUMBER FIRST_OBS LAST_OBS SYMBOL BREAKS " " IF (FOUND.GT.0) THEN DEFINE CHARACTER BREAK*80 LET BREAK "/BREAK " ! ! FOR I 1 TO FOUND BY 3 ! GET NEXT ! GET NEXT ! GET NEXT ! Say "Possible phase jump at "'0.01*NINT(1200*UTOBS|PI)' ! LET BREAK 'BREAK'" 0 "'0.01*NINT(1200*UTOBS|PI)' ! EXA BREAK ! NEXT ! ! the following code works also for 5-observation focus scans: let fscan 0 for i 1 to found get n if scan.ne.fscan then Say "Possible phase jump at "'0.01*NINT(1200*UTOBS|PI)' LET BREAK 'BREAK'" 0 "'0.01*NINT(1200*UTOBS|PI)' EXA BREAK let fscan scan endif next ! Say "Use breaks or not ?" LET DO_JUMP IF (DO_JUMP) THEN SYMBOL BREAKS 'BREAK' ENDIF ENDIF SAY "Solve phase command is: SOLVE PHASE/PLOT'BREAKS'" ! ! 7. Calibrate the phase ! FIND/PROC CORR/TYPE P SET X TIME SET BAND 'CAL_BAND' SET SUB L01 TO L0'N_LINE_BANDS' SET Y PHAS PLOT SOLVE PHASE/PLOT'BREAKS' ! STOP "Phase Calibration" IF (DO_TEX) THEN HARD CALIB-3.PS/DEV EPS FAST ENDIF LET PHA_ERR 0.01*NINT(RMS_ERR*100) ! IF (DO_STORE) THEN FIND/PROC */TYPE * STORE PHASE/BAND 'CAL_BAND' ENDIF IF (DO_APPLY) THEN SET PHAS REL ENDIF ! ! 8. Solve Amplitude ! FIND/PROC CORR/TYPE P SET Y AMP SOLVE AMPL/PLOT STOP "Amplitude Calibration" IF (DO_TEX) THEN HARD CALIB-4.PS/DEV EPS FAST ENDIF LET AMP_ERR 0.01*NINT(RMS_ERR*100) ! IF (DO_STORE) THEN FIND/PROC */TYPE * STORE AMPLI/BAND 'CAL_BAND' ENDIF SET AMPL ABS IF (DO_APPLY) THEN SET AMPL REL ENDIF ! ! 9. Check the efficiency ! FIND/PROC CORR/TYP P SET FLUX 'BAND_SOURCE' BAND_FLUX SOLV FLUX LET JYPK 0.1*NINT(10*JY_PER_K) STOP "Efficiency measurement" ! ! 10. Edit the report ! SIC PREC SINGLE IF (DO_TEX) THEN SIC OUTPUT CALIB-0.TEX SAY "\documentstyle[rl,11pt,psfig]{article}" SAY "\sloppy" SAY "\title {Project "'PROJECT'" Data File "'FILE_NAME'".IPB}" SAY "\author{Automatic Calibration Report by CLIC @ CALIB}" SAY "\begin{document}" SAY "\maketitle" SAY "\section{Project "'PROJECT'" - File "'FILE_NAME'".IPB}" ELSE SIC OUTPUT 'FILE_NAME'.SUM SAY " " SAY " Summary of data quality for project "'PROJECT'" File "'FILE_NAME' SAY " " ENDIF ! ! 10.1 Global quality ! DEFINE REAL RF[2] AP[2] DEFINE CHARACTER RF_QUAL*16 PHA_QUAL*16 AMP_QUAL*16 LET RF 0 IF (CAL_BAND.EQ."LSB") THEN FOR I 1 TO NBAS FOR J 1 2 LET RF[J] MAX(RF[J],RF_LSB[J,I]) NEXT NEXT ELSE IF (CAL_BAND.EQ."USB") THEN FOR I 1 TO NBAS FOR J 1 2 LET RF[J] MAX(RF[J],RF_USB[J,I]) NEXT NEXT ELSE FOR I 1 TO NBAS FOR J 1 2 LET RF[J] MAX(RF[J],RF_LSB[J,I]) LET RF[J] MAX(RF[J],RF_USB[J,I]) NEXT NEXT ENDIF LET AP 0 FOR I 1 TO NBAS LET AP[1] MAX(AP[1],PHA_ERR[i]) LET AP[2] MAX(AP[2],AMP_ERR[i]) NEXT IF (RF[1].LT.7.5.AND.RF[2].LT.5) THEN LET RF_QUAL "GOOD" ELSE IF (RF[1].LT.15.AND.RF[2].LT.10) THEN LET RF_QUAL "Correct" ELSE IF (RF[1].LT.25.AND.RF[2].LT.20) THEN LET RF_QUAL "POOR or Noisy" ELSE LET RF_QUAL "BAD" ENDIF IF (AP[1].LT.15) THEN LET PHA_QUAL "EXCELLENT" ELSE IF (AP[1].LT.25) THEN LET PHA_QUAL "Good" ELSE IF (AP[1].LT.35) THEN LET PHA_QUAL "Correct" ELSE IF (AP[1].LT.55) THEN LET PHA_QUAL "POOR" ELSE LET PHA_QUAL "BAD" ENDIF IF (AP[2].LT.5) THEN LET AMP_QUAL "EXCELLENT" ELSE IF (AP[2].LT.10) THEN LET AMP_QUAL "Good" ELSE IF (AP[2].LT.15) THEN LET AMP_QUAL "Correct" ELSE IF (AP[2].LT.25) THEN LET AMP_QUAL "Poor" ELSE LET AMP_QUAL "Bad" ENDIF ! ! 10.2 Printing ! IF (DO_TEX) THEN SAY "\begin{itemize}" SAY "\item{\bf Bandpass:} "'RF_QUAL' SAY "\item{\bf Phase:} "'PHA_QUAL' SAY "\item{\bf Amplitude:} "'AMP_QUAL' SAY "\end{itemize}" SAY "\newpage" SAY "\subsection{Summary}" SAY "\begin{verbatim}" SAY " Tuning "'CAL_BAND' SAY " ====== " ELSE SAY " Tuning "'CAL_BAND' " Bandpass "'RF_QUAL' - " Phase "'PHA_QUAL' " Amplitude "'AMP_QUAL' SAY " ====== " ENDIF SAY " " SAY " Calibrators " SAY " =========== " FOR I 1 TO N_SOURCE SAY " Flux " C_FLUX[I] " for " 'C_SOURCE[I]'/FORMAT A F5.1 A A NEXT ! ! SAY " " SAY " Efficiencies " SAY " ============ " FOR I 1 TO NANT SAY " Antenna #" I JYPK[I] " Jy/K" /FORMAT A I1 F6.1 A NEXT ! SAY " " SAY " Observed Source(s) " SAY " ================== " FIND/PROC CORR/TYPE O LIST/SOURCE FOR I 1 TO N_SOURCE FIND/SOURCE 'C_SOURCE[I]'/PROC CORR/TYP O IF (C_SOURCE[I].NE."W3OH".OR.FOUND.GT.10) THEN GET FIRST LET HOURMIN 12*HOUR_ANGLE|PI GET CX_NUM[FOUND] LET HOURMAX 12*HOUR_ANGLE|PI SAY " "'C_SOURCE[I]'" observed for Hour Angles " - HOURMIN HOURMAX /FORMAT A F6.1 F6.1 ENDIF NEXT SAY " " SAY " RF Bandpass: measured on " 'BAND_SOURCE' SAY " ============ " SAY "LSB Rms : Phase Amplitude" FOR I 1 TO NBAS SAY " Base " basis[i] " : " RF_LSB[2,I] " deg. " RF_LSB[1,I] " %"/FORMAT A I2 A F6.1 A F6.1 A NEXT SAY "USB Rms : Phase Amplitude" FOR I 1 TO NBAS SAY " Base " basis[i] " : " RF_USB[2,I] " deg. " RF_USB[1,I] " %"/FORMAT A I2 A F6.1 A F6.1 A NEXT ! SAY " " SAY " Time dependence: " SAY " ================ " SAY "Baseline Rms : Phase Amplitude" DEFINE REAL BB FOR I 1 TO NBAS LET BB NINT(SQRT(BASELINE[1,I]^2+BASELINE[2,i]^2+BASELINE[3,i]^2)) SAY "Base " basis[i] " (" BB " m) : " PHA_ERR[I] " deg. " AMP_ERR[I] " %"/FORMAT A I2 A F5.1 A F6.1 A F6.1 A NEXT IF (DO_TEX) THEN SAY "\end{verbatim}" SAY "\newpage" SAY "\subsection{LSB Bandpass}" SAY "\psfig{file=calib-1.ps,width=16.0cm}" SAY "\subsection{USB Bandpass}" SAY "\psfig{file=calib-2.ps,width=16.0cm}" SAY "\subsection{Phase Calibration}" SAY "\psfig{file=calib-3.ps,width=16.0cm}" SAY "\subsection{Amplitude Calibration}" SAY "\psfig{file=calib-4.ps,width=16.0cm}" SAY "\end{document}" ENDIF SIC OUTPUT IF (DO_TEX) THEN SYSTEM "latex calib-0.tex" SYSTEM "dvips -D 600 -o calib-0.ps calib-0.dvi" ENDIF ! DELETE/SYMBOL STOP