SUBROUTINE DRAW_PER_BUNCH C---------------------------------------------------------------------- C- C- Purpose and Methods : Draw the foreground of the Per Bunch Scaler C- monitoring screen. C- C- Inputs : common block variables C- Outputs : screen output C- Controls: none C- C- Created 24-MAR-1992 Philippe Laurens, Steven Klocek C- C- Updated 5-MAY-1995 Philippe Laurens - MSU L1 Trigger C- Add per bunch Luminosity information C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'LV1_MPOOL_DERIVED.INC' INCLUDE 'LV1_MPOOL_FORMATTED.INC' INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MON_SCREEN_LAYOUT.PARAMS' C INTEGER BUNCH CHARACTER*132 BUFFER C INTEGER HFFFFFFF, HFFF PARAMETER (HFFFFFFF = 268435455) PARAMETER (HFFF = 4095 ) C INTEGER HIGH12, LOW28, UNITS, GIGAS C HIGH12(UNITS,GIGAS) & = IOR(ISHFT(UNITS, -28), ISHFT(GIGAS, 2)) LOW28(UNITS) = IAND(UNITS, HFFFFFFF) C C Draw the top portion of the screen C CALL DRAW_GLOBAL_HEADER C C Print info on the scalers, one bunch at a time C DO BUNCH = PER_BUNCH_MIN, PER_BUNCH_MAX C C show proton-antiproton bunch IDs BUFFER = ' | | | | ' & // '| | |' C C first, build string for top set of scaler on display C UNITS = PER_BUNCH_DATA(BUNCH).L1_PER_BUNCH_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).L1_PER_BUNCH_COUNT_GIGAS WRITE (BUFFER(PB_L1_TOT_C:PB_L1_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING(PER_BUNCH_DATA(BUNCH).L1_PER_BUNCH_RATE, & 2, BUFFER(PB_L1_RATE_C:PB_L1_RATE_E) ) C UNITS = PER_BUNCH_DATA(BUNCH).L0_PER_BUNCH_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).L0_PER_BUNCH_COUNT_GIGAS WRITE (BUFFER(PB_L0_TOT_C:PB_L0_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING(PER_BUNCH_DATA(BUNCH).L0_PER_BUNCH_RATE, & 2, BUFFER(PB_L0_RATE_C:PB_L0_RATE_E) ) C UNITS = PER_BUNCH_DATA(BUNCH).LIVE_CROSSING_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).LIVE_CROSSING_COUNT_GIGAS WRITE (BUFFER(PB_LIVEX_TOT_C:PB_LIVEX_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING( & PER_BUNCH_DATA(BUNCH).LIVE_CROSSING_RATE, & 2, BUFFER(PB_LIVEX_RATE_C:PB_LIVEX_RATE_E) ) C CALL BUILD_REAL_STRING( & BUNCH_LUM_DELIV_FAST_Z( BUNCH ), & 2, BUFFER(PB_BUNCH_LUM_FAST_C:PB_BUNCH_LUM_FAST_E) ) C C C top line for this bunch is complete C CALL PUT_STRING(PB_P1_L + BUNCH -1, PB_L1_TOT_C, & BUFFER(PB_L1_TOT_C:PB_BUNCH_LUM_FAST_E+1) ) C C C second, build string for bottom set of scaler on display C UNITS = PER_BUNCH_DATA(BUNCH).L0_LIVEX_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).L0_LIVEX_COUNT_GIGAS WRITE (BUFFER(PB_L0_LIVEX_TOT_C:PB_L0_LIVEX_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING( & PER_BUNCH_DATA(BUNCH).L0_LIVEX_RATE, & 2, BUFFER(PB_L0_LIVEX_RATE_C:PB_L0_LIVEX_RATE_E) ) C UNITS = PER_BUNCH_DATA(BUNCH).L0S_LIVEX_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).L0S_LIVEX_COUNT_GIGAS WRITE (BUFFER(PB_L0S_LIVEX_TOT_C:PB_L0S_LIVEX_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING( & PER_BUNCH_DATA(BUNCH).L0S_LIVEX_RATE, & 2, BUFFER(PB_L0S_LIVEX_RATE_C:PB_L0S_LIVEX_RATE_E) ) C UNITS = PER_BUNCH_DATA(BUNCH).L0S_CENT_COUNT GIGAS = PER_BUNCH_DATA(BUNCH).L0S_CENT_COUNT_GIGAS WRITE (BUFFER(PB_L0S_CENT_TOT_C:PB_L0S_CENT_TOT_E),100) & HIGH12(UNITS, GIGAS), & LOW28(UNITS) C CALL BUILD_REAL_STRING( & PER_BUNCH_DATA(BUNCH).L0S_CENT_RATE, & 2, BUFFER(PB_L0S_CENT_RATE_C:PB_L0S_CENT_RATE_E) ) C CALL BUILD_REAL_STRING( & BUNCH_LUM_DELIV_SLOW_Z( BUNCH ), & 2, BUFFER(PB_BUNCH_LUM_SLOW_C:PB_BUNCH_LUM_SLOW_E) ) C C C bottom line for this bunch is complete C CALL PUT_STRING(PB_2ND_P1_L + BUNCH -1, PB_L1_TOT_C, & BUFFER(PB_L1_TOT_C:PB_BUNCH_LUM_FAST_E+1) ) C END DO C C send all information to the screen C CALL MOVE_CURSOR_SAFE CALL FLUSH_SCREEN C C 100 FORMAT( Z3.3, Z7.7 ) C---------------------------------------------------------------------- 999 RETURN END