SUBROUTINE DRAW_36X36_SCALERS () C---------------------------------------------------------------------- C- C- Purpose and Methods : Draws the 36x36 scaler screen of the monitor C- program. C- C- Inputs : none C- Outputs : screen C- Controls: none C- C- Created 19-OCT-1995 Philippe Laurens - MSU L1 Trigger C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL_RAW.INC' INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_DERIVED.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_SCREEN_LAYOUT.PARAMS' C REAL TURN_CLOCK_PERIOD PARAMETER ( TURN_CLOCK_PERIOD = 6 * 0.349314470E-5 ) INTEGER DELTA_TURN_COUNT C CHARACTER*132 BUFFER INTEGER COUNT C C----------------------------------------------------------------------- C This display is longer than 24 lines, and needs a scrollable list C CALL RESET_LIST() C C Draw top portion of screen C CALL PUT_STRING(GH_DATE_L, GH_DATE_C, CURRENT_TIME) C C C First figure the conversion factors from increments to rates. C Do it only once so that differences between SBSCs can be noticed. C Arbitrary choice to use FZLUM reference DELTA_TURN_COUNT = FZLUM_36X36_INCR(63) C IF ( DELTA_TURN_COUNT .EQ. 0) THEN COUNT_TO_HZ = 0. ELSE COUNT_TO_HZ = 1.0 / ( TURN_CLOCK_PERIOD * DELTA_TURN_COUNT ) ENDIF C C Print info on each scaler C DO COUNT = 1, 64 C C Additional divider lines between sets of scalers C IF ( ( COUNT .EQ. 55 ) & .OR. ( COUNT .EQ. 57 ) & .OR. ( COUNT .EQ. 63 ) ) THEN BUFFER = '--|---------|-------hex|-------Hz|' // & '-------hex|-------Hz|-------hex|-------Hz|' C C put line on the screen C CALL PUT_STRING(PS_LIST,0, BUFFER(1:80)) C END IF C BUFFER = ' | | | |' // & ' | | | |' C C Write the scaler number C CALL INTTOSTR(COUNT, BUFFER(1:2), 1) C C scaler description C C The first 54 scalers are for the 36x36 bunch scalers, use Window num IF ( COUNT .LT. 55 ) THEN BUFFER(4:8) = 'W## ' CALL INTTOSTR(COUNT-1, BUFFER(5:6), 1) IF ( COUNT .LT. 13 ) THEN BUFFER(9:10) = ' P' CALL INTTOSTR(COUNT, BUFFER(11:12), 1) ELSE IF ( COUNT .LT. 19 ) THEN BUFFER(9:10) = 'EN' CALL INTTOSTR(COUNT-12, BUFFER(11:12), 1) IF ( COUNT .EQ. 17 ) BUFFER(9:10) = 'ES' ELSE IF ( COUNT .LT. 31 ) THEN BUFFER(9:10) = ' P' CALL INTTOSTR(COUNT-6, BUFFER(11:12), 1) ELSE IF ( COUNT .LT. 37 ) THEN BUFFER(9:10) = 'EN' CALL INTTOSTR(COUNT-24, BUFFER(11:12), 1) IF ( COUNT .EQ. 35 ) BUFFER(9:10) = 'ES' ELSE IF ( COUNT .LT. 49 ) THEN BUFFER(9:10) = ' P' CALL INTTOSTR(COUNT-12, BUFFER(11:12), 1) ELSE BUFFER(9:10) = 'EN' CALL INTTOSTR(COUNT-36, BUFFER(11:12), 1) IF ( COUNT .EQ. 53 ) BUFFER(9:10) = 'ES' END IF C ELSE IF ( COUNT .LT. 57 ) THEN BUFFER(4:12) = ' Unused ' C C Scalers 57-62 are for the normal 6x6 mode, display bunch numer P1-P6 ELSE IF ( COUNT .LT. 63 ) THEN BUFFER(4:12) = ' P ' CALL INTTOSTR(COUNT-56, BUFFER(8:8), 1) C ELSE IF ( COUNT .EQ. 63 ) THEN BUFFER(4:12) = 'Turn Cnt ' C ELSE IF ( COUNT .EQ. 64 ) THEN BUFFER(4:12) = 'CheckSum ' END IF C C Now display scaler absolute count, and rate C First: Fast Z Lum C ----------------- C WRITE ( BUFFER(16:23), 100 ) FZLUM_36X36_COUNT(COUNT) 100 FORMAT ( Z8.8 ) C CALL BUILD_REAL_STRING ( FZLUM_36X36_INCR(COUNT) * COUNT_TO_HZ, & 2, BUFFER(25:33) ) C C Second: Proton Halo C ------------------- C WRITE ( BUFFER(37:44), 100 ) PHALO_36X36_COUNT(COUNT) C CALL BUILD_REAL_STRING ( PHALO_36X36_INCR(COUNT) * COUNT_TO_HZ, & 2, BUFFER(46:54) ) C C Third: Antiproton Halo C ---------------------- C WRITE ( BUFFER(58:65), 100 ) AHALO_36X36_COUNT(COUNT) C CALL BUILD_REAL_STRING ( AHALO_36X36_INCR(COUNT) * COUNT_TO_HZ, & 2, BUFFER(67:75) ) C C C C Now that we have created a line, put it on the screen C CALL PUT_STRING(PS_LIST, 0, BUFFER(1:80)) C END DO C CALL PUT_LIST( 5, 1) C CALL SETSCROLL(1, LINES) C CALL MOVE_CURSOR_SAFE() C---------------------------------------------------------------------- 999 CONTINUE CALL FLUSH_SCREEN() RETURN END